commit bf9cebc7fb208be4e8edc35ec26c898123f944b9 Author: lihongwei Date: Wed Jan 22 18:44:29 2025 +0800 V1.0.1(2)创建仓库 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/FingerKeyboard.test.jks b/FingerKeyboard.test.jks new file mode 100644 index 0000000..cc52faa Binary files /dev/null and b/FingerKeyboard.test.jks differ diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/FingerKeyboard.jks b/app/FingerKeyboard.jks new file mode 100644 index 0000000..257646c Binary files /dev/null and b/app/FingerKeyboard.jks differ diff --git a/app/FingerKeyboardtest.jks b/app/FingerKeyboardtest.jks new file mode 100644 index 0000000..dffa5d0 Binary files /dev/null and b/app/FingerKeyboardtest.jks differ diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..3051e03 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,62 @@ +import java.text.SimpleDateFormat +import java.util.Date + +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.jetbrains.kotlin.android) +} +val timestamp: String = SimpleDateFormat("MM_dd_HH_mm").format(Date()) +android { + namespace = "com.example.fingerkeyboard" + compileSdk = 34 + + defaultConfig { + applicationId = "com.finger.keyboard.selection" + minSdk =23 + targetSdk = 34 + versionCode = 2 + versionName = "1.0.1" + setProperty("archivesBaseName", "Finger Keyboard_" + versionName + "(${versionCode})_$timestamp") + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } +} + +dependencies { + + implementation(libs.appcompat) + implementation(libs.material) + implementation(libs.activity) + implementation(libs.constraintlayout) + testImplementation(libs.junit) + androidTestImplementation(libs.ext.junit) + androidTestImplementation(libs.espresso.core) + + implementation("androidx.activity:activity-compose:1.8.2") + implementation("com.google.android.material:material:1.11.0") + implementation ("com.github.bumptech.glide:glide:4.16.0") + + implementation("androidx.core:core-ktx:1.12.0") + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0") + implementation("androidx.appcompat:appcompat:1.6.1") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + + implementation("com.github.omicronapps:7-Zip-JBinding-4Android:Release-16.02-2.02") + implementation ("com.google.code.gson:gson:2.10.1") +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..fff1719 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,28 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile +-keep class com.omicronapplications.** { *; } +-keep class net.sf.sevenzipjbinding.** { *; } +-keep class com.google.gson.reflect.TypeToken { *; } +-keep class * extends com.google.gson.reflect.TypeToken + +-keep class com.example.fingerkeyboard.data.MyData { *; } +-keep class com.example.fingerkeyboard.data.ListName { *; } \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/fingerkeyboard/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/fingerkeyboard/ExampleInstrumentedTest.java new file mode 100644 index 0000000..7e75936 --- /dev/null +++ b/app/src/androidTest/java/com/example/fingerkeyboard/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.fingerkeyboard; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.example.fingerkeyboard", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a71134b --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/keyboard.json b/app/src/main/assets/keyboard.json new file mode 100644 index 0000000..eb6901e --- /dev/null +++ b/app/src/main/assets/keyboard.json @@ -0,0 +1,5556 @@ +[ + { + "className": "love", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0cd3014dfe1299673a425ebc66ec2ba3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/21858a3a2b1370dd2dcdacf4289046da.jpg", + "title": "Love Parrots", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/05cdbfe6c9781ad45af02e2a1fe1656c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/322a787af26b11c6b7954b8ba4490bdc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/23af1dd3335933ea0b0caa0ca4770ce6.jpg", + "title": "Sunset Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4facae6abdb7bf01743cd971a9017b52.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/60d09cb601d85f74a8689c7ea8db4b38.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/635dcd5b39d67d31afe5527419e33b9f.jpg", + "title": "Angel Devil Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0a3d998d998a9cf3f3ccfd6bef7b16cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/98fd518bda7fabda7faa93b151768d15.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0a266b474469b3c2332352a7262ab06.jpg", + "title": "Glitter Rainbow Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b8ee85deca13b494488c339af09afc22.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ce53c34b35bf78d72b919e5194c7413.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/164cb1a1c461be5cc5fda03dd0206654.jpg", + "title": "Purple Love Diamond", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/afcaab63c0a30297d85f2243061aaba4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c5951c713f76a16db46119d4c38e381f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/795d371368577bd42c1cb516b55982f0.jpg", + "title": "Romantic Heart Roses", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/29e297b50cbdf05204bd27485359643c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/756349e863ff4719a2b0fd8899dda4ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1d154c71316e7c59e3b0084ab5286c88.jpg", + "title": "Sun Moon Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a7f4b339bb79ae371a7beae5a9afaff1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/177ef878ccac5b1c62950ef530616379.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/48aa3f6963a0052f34b976c36d2ade21.jpg", + "title": "Red Valentine Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/db83f68e68cd0497716dc046d715b7d9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f345a4977b9b62e43413a9ce2c18323d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f9d5808fc0a119cdbf1aacf242c4b74b.jpg", + "title": "Pink Doodle Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c7aa936e42c622732cbf6b2340f2e422.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0e50d33331b1ca53732164241b301cb2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0dd3045d8097f0eb782a4c494f9e05b.jpg", + "title": "Puppy Kitty Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c424b4120ff33d2ea4f87e098a5302dd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cdeb7ac588ffd351a1cf28eef1377f29.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8bee8fa2ce265a3e12477d89f86014a4.jpg", + "title": "Red 3D Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/22c56f5cfa3e40561a5cc3e270791907.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/26fb1dd3ed3b885dbff1f6c26b322416.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2dab2458f6da3ffc9f71ee8f9e33b428.jpg", + "title": "Blue Love Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fdb57f770b282269bb242f0b52ccbe28.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2e4f96492a02ed12f231b39e75619496.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/edb07e0e247100d146d64f635f41a28c.jpg", + "title": "Pink Love Mirror", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/748ddd6cb623c0f4676f348bd115ebb2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc5213434d6c0362814a25f1a934fd5a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/13048bcbe6b1ba377cefbe790660f51e.jpg", + "title": "Love Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b05cda047a56286ddb3d8f4a9aa52fd7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3fc1c83f59179702fbcb7a64c08d2d7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5c5c6a01a0b3a4805b13b6c33ffa79ca.jpg", + "title": "Sparkle Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a882bc3d4312022446ef29674543352b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e6848e37732e25e37ea80eee5130c08d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a9ef0cdbc04f4dc5210a125b58e9a7e.jpg", + "title": "Glitter Heart Coral", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ff33d571b054fe99e4dd4cfc687e6bd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ba97361c79a9639d3c6099e219c2b43.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/97a1d4230c053cec2a187d9c39e5b449.jpg", + "title": "Love Heart Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c96cedb306c2b6295e902a42a3539c27.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c8f1353c226c502ce1cef770103cbc1c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69c5c402b5568e47d9ac36e174c26b77.jpg", + "title": "Aesthetic Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33877b62fc70196ebcbf14a734fc995a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ff93f73a242d8391ad44f65f2866a9e9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f04768a2b777d7f168895923af8aef2e.jpg", + "title": "Neon Love Light", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ab2c4ad6e6312d78ddb5407e31c1f641.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9a8f1b966039fa110cce4c86a2e3edf5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/896bb09a18d114841fc32483e752b2bf.jpg", + "title": "Cute Kitten Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3d940466fa31e30df1c60f80c2b2c79b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6b2d89c2f81ca6d6a4a6cbcbecf8a39e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ef8fd0c3f6a4723fd092a7fd33f77494.jpg", + "title": "Graffiti Rose Pink", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d7c58f283c8755c99d0abe8950f5c7d1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a05cb6aa0c4d5b4fee04a1534bc6ea04.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/580c7d0997c93ca57a6c4c62fd85d6d8.jpg", + "title": "Pink Neon Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7aab01a381bf315210813cba67afaa0d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/82f6ab84adc7a9f621d5a66ab07bcb87.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3528ab9f0ec9022f1ac0b61a040a32c4.jpg", + "title": "Neon Light Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8afbd8f60b302a69e6e7581807002626.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4a8ceb2b8b082b744c8823fe1f34b5dc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/581b74289fd52181777b34bc9f476b76.jpg", + "title": "Red Hearts 3D", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7c6f0f7796761d67074749242691c46a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3e38f0128ad8b2d6c19f20b536e0792.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/337c48b1d04a66c8c662fe8fac7d1f96.jpg", + "title": "Shy Love Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/73c74526b80ec6b00e4aea35b8b3cf10.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4281984af73c48808ec381a2eb03842f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3f56ae964777d071c10fb82268b72360.jpg", + "title": "Lovely Birds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1a1eb9cb1234641b6e7ad2ec3307fd04.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/abd43be8531db0a72b1db27293454fb4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e74ef3977541c33c72ee00db9ad5fb7d.jpg", + "title": "Love Balloon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/255fc373390574160e87e4cdb588e4dc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/07351b748fa7f2ba6f3ef884002e733c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/52dcbc054c8b8794ceaff7a6f7eb98d2.jpg", + "title": "Colorful Crystal Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d215e2d40ab4c5638878f55c58899f54.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d555577385bebaf3f1c9d48fe88e0998.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/435665abee707a3a7fddd5d6a61b57ab.jpg", + "title": "Cat Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1e0139f2d561a09a6dd0d5485ddc0e05.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a94584cb8ffc7c9fd8edc5e7f644fb62.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/80e6151a3587253513dbe6c6ffb58997.jpg", + "title": "Shining Twin Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4a707c5c0ed8c0f75db9f2ce02f7c5c1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2aff11564a49dedcff9255a51228d694.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ada3855bfce57d155528d56d229e72c.jpg", + "title": "Love Heart Lollipop", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0e5349b50a623e8e9cba9a2829c95682.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc61592ff75190347e8840cc6637f43b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/61555a1baaad3ea85194ed431af92172.jpg", + "title": "Neon Kitten Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/553a163368a028f07ea83b381f436434.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b39a4718a097019fa9bb91984b638d91.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4a83f452037c1c1e0be2bbfca73613f1.jpg", + "title": "Love Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cd69f48f9c719bc070d232808cd119b2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/50a6b9028c17f689e980535ab33c5284.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/472e91317bc96a393695dc0e852a8625.jpg", + "title": "Love And Peace", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8ffbe44dbe2b011c19a63ca430daab3d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ad0b8e69a433285a8fd9ae23e857d4ab.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/febb8cef9ae8d2e6e318bba37d1d0b3e.jpg", + "title": "Pink Love Balloons", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5b9f3b02886fc935438448ca149fb8ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a4c378e32b413949f02cd93847a764f7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f50c4d26af82ab8ecf2388e39602328f.jpg", + "title": "Dog Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ed5963803a2b00d078a682dab3a1737f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2e5d1512f63e4c9ea2378d7a33365250.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e467146a07ae9557ea5b493b1f6d324c.jpg", + "title": "Galaxy Marble Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e2f7d694adf3ec22f35aa7a4ff52643a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ac6410743ea9048cdb299b800a26dd60.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/85698dc949cd380f1822bcf7182e8a44.jpg", + "title": "Bright Blue Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d9176e756817915375663be035096fba.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ecc75487e7038bd6c7dd72ea74d3d4b6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ae613b256996ca888628571e074b387.jpg", + "title": "Parrot Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/37ae31adf1e9c1541cf04e99e63790d2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/283b5e61bf797c138e19cc2e47fa718f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/72897d23e69b92e20285f867d9e2f81d.jpg", + "title": "Love Pet Life", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f0c78374e37a43deacb280f16cbc4e8d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ab39f35c65e0e8f3ceb9397bb6fe472.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/323d398d38ab6d198aea4912376c1a9d.jpg", + "title": "Cute Bunny Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a0bffe36ae759d94538044f645fb0a81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cc3169c2853c7c6ef76aa341262ab803.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a82105f908e63a5c1fed450f855f22e1.jpg", + "title": "Neon Finger Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a75373cf46ec40dd8c3f09a15967f417.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/44f47f5cfb02411fb4077b66c3ed058c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bcb7e8bf064260ce689a6473e445e08f.jpg", + "title": "Red Love Valentines", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/633eb4f7ca16374728a20eb3655abc63.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4671747ba8117a3bff1a5af7cb3957a7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7495c81c2c3ca2ab97608e49667e8d30.jpg", + "title": "Rose Gold Pearls", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0e1bb2bbfc63359656d2d9626b9cbfa4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dc5a25565b3cbbd7ca4759d41503e14a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0dea2ab904a92e76f13a9f92ebed2f57.jpg", + "title": "XOXO", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bb4abe2a966e99ce4cc00edf66ca18b6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dfea248800b350c85c3b0704d59e3843.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/03314742fe2a1be29e9d500c72a39e67.jpg", + "title": "Pink Glitter Heart 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/93bbefb657fa054f6845387dab56ea0c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/767ffc55088e4cc1f6026592e172894f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/823e682de86a7df3d301e38fad16897e.jpg", + "title": "Avocado Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/32058e9dc1e0ad2c94cdc7250f5abf3c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3e6c4e8c4bc2184507789d738c943df0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/be1a546d76c1a08b85547fbcda7fc136.jpg", + "title": "Pink RGB Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5de85592a7e96862a81e56f1dae7e21f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6d830c6ec0ab22a851d84c37bbb9f964.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8774e8fcc8c0dfa4089ba630c4b36092.jpg", + "title": "Neon Romantic Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b1a2723340145b9972c46e32211738fc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fa652fd752b83b4be2ee795592ce8686.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bba3f6325628052e4ad5f277c04e8782.jpg", + "title": "Love Couple Cats", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8ef3574260b228ac18c3d942be156421.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/95459ffa27560a8d832b8e0bd68d839f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d14101bd18d88fe38c8926da51f5c527.jpg", + "title": "Love Heart Kpop", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/73234e4d1f8229a91085dc77e3bc01c2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ec1fdf2f65f56b35bd20e3ec37d0a4d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1f16466b0c02d7e12e88bd852965d6b6.jpg", + "title": "Valentine Lovelight", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1e9781ed97d96bb1ede09b4324da4666.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2678a9d60a6deafcb0ce39611aab4ada.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/04aa21e32769749d30c107a193729ac3.jpg", + "title": "Love Penguin Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c694af4caa592c54dcaf7d0da8a373fe.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3e396b0112a3fe5ef2bdd423418dfef1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cc0f081e2d2d314917fdc855f315e6ef.jpg", + "title": "Love Panda Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/579033fa6a038b04a5495a2e82632039.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9113d3554aff19a708934018360ab389.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0cd61f43a46d90f956e6eade6bd0caf5.jpg", + "title": "Teddy Loving Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4414f4e03dfa1501d89e11151b4ae1db.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed744dce1f269d5d678bd3aee07fc142.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/46debd656f7ab1fdc2045b74defb26df.jpg", + "title": "Sparkle Glitter Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2b7602f6dc1710c392a7fb0c0d87f3f7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/121ffd309cf6f20cc6e54e03f2bc713b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ca595c01a89db6d51c893e54e7e48c9.jpg", + "title": "Black Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e89c30a80f329f04c8f770cdaf3a8b6e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb68c9429c1f43e6377c1f5b4b45355d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fc16ae2a6687588003f42509ab3ccbea.jpg", + "title": "Red Valentine Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c1e0698ef820eb14be84697024885e7c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9fc4ce4bed6c72fcee3d03f726473731.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc3c6ea8a9a42d6af7c08cdb9a0607ea.jpg", + "title": "Bear Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e83c5e33f8f5356178aa7de4dd6975f3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/967541749f2f1442db1e9a23e95421a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9493c05cfdb60a75bc0d6ea3651992ce.jpg", + "title": "Cute Moon Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/efc2ee720eb22b534f44656ac50d34c8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ab39f35c65e0e8f3ceb9397bb6fe472.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/323d398d38ab6d198aea4912376c1a9d.jpg", + "title": "Cute Bunny Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a0bffe36ae759d94538044f645fb0a81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cc3169c2853c7c6ef76aa341262ab803.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a82105f908e63a5c1fed450f855f22e1.jpg", + "title": "Neon Finger Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a75373cf46ec40dd8c3f09a15967f417.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/44f47f5cfb02411fb4077b66c3ed058c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bcb7e8bf064260ce689a6473e445e08f.jpg", + "title": "Red Love Valentines", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/633eb4f7ca16374728a20eb3655abc63.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4671747ba8117a3bff1a5af7cb3957a7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7495c81c2c3ca2ab97608e49667e8d30.jpg", + "title": "Rose Gold Pearls", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0e1bb2bbfc63359656d2d9626b9cbfa4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dc5a25565b3cbbd7ca4759d41503e14a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0dea2ab904a92e76f13a9f92ebed2f57.jpg", + "title": "XOXO", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bb4abe2a966e99ce4cc00edf66ca18b6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dfea248800b350c85c3b0704d59e3843.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/03314742fe2a1be29e9d500c72a39e67.jpg", + "title": "Pink Glitter Heart 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/93bbefb657fa054f6845387dab56ea0c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/767ffc55088e4cc1f6026592e172894f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/823e682de86a7df3d301e38fad16897e.jpg", + "title": "Avocado Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/32058e9dc1e0ad2c94cdc7250f5abf3c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3e6c4e8c4bc2184507789d738c943df0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/be1a546d76c1a08b85547fbcda7fc136.jpg", + "title": "Pink RGB Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5de85592a7e96862a81e56f1dae7e21f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6d830c6ec0ab22a851d84c37bbb9f964.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8774e8fcc8c0dfa4089ba630c4b36092.jpg", + "title": "Neon Romantic Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b1a2723340145b9972c46e32211738fc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fa652fd752b83b4be2ee795592ce8686.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bba3f6325628052e4ad5f277c04e8782.jpg", + "title": "Love Couple Cats", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8ef3574260b228ac18c3d942be156421.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/95459ffa27560a8d832b8e0bd68d839f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d14101bd18d88fe38c8926da51f5c527.jpg", + "title": "Love Heart Kpop", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/73234e4d1f8229a91085dc77e3bc01c2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ec1fdf2f65f56b35bd20e3ec37d0a4d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1f16466b0c02d7e12e88bd852965d6b6.jpg", + "title": "Valentine Lovelight", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1e9781ed97d96bb1ede09b4324da4666.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2678a9d60a6deafcb0ce39611aab4ada.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/04aa21e32769749d30c107a193729ac3.jpg", + "title": "Love Penguin Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c694af4caa592c54dcaf7d0da8a373fe.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3e396b0112a3fe5ef2bdd423418dfef1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cc0f081e2d2d314917fdc855f315e6ef.jpg", + "title": "Love Panda Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/579033fa6a038b04a5495a2e82632039.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9113d3554aff19a708934018360ab389.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0cd61f43a46d90f956e6eade6bd0caf5.jpg", + "title": "Teddy Loving Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4414f4e03dfa1501d89e11151b4ae1db.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed744dce1f269d5d678bd3aee07fc142.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/46debd656f7ab1fdc2045b74defb26df.jpg", + "title": "Sparkle Glitter Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2b7602f6dc1710c392a7fb0c0d87f3f7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/121ffd309cf6f20cc6e54e03f2bc713b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ca595c01a89db6d51c893e54e7e48c9.jpg", + "title": "Black Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e89c30a80f329f04c8f770cdaf3a8b6e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb68c9429c1f43e6377c1f5b4b45355d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fc16ae2a6687588003f42509ab3ccbea.jpg", + "title": "Red Valentine Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c1e0698ef820eb14be84697024885e7c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9fc4ce4bed6c72fcee3d03f726473731.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc3c6ea8a9a42d6af7c08cdb9a0607ea.jpg", + "title": "Bear Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e83c5e33f8f5356178aa7de4dd6975f3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/967541749f2f1442db1e9a23e95421a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9493c05cfdb60a75bc0d6ea3651992ce.jpg", + "title": "Cute Moon Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/efc2ee720eb22b534f44656ac50d34c8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dd5fbcddfdff76b7d58a1568082c9d21.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c0c704ac8282ec17a437d2e3dd704f4c.jpg", + "title": "Sunset Lovers 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a9d6762f2f8a846a5fb2f260f0c5a198.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/841d6f969f2064b467f1eaca5a0325f3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/500e5885cd29272651b799422515cbdf.jpg", + "title": "Couple Love Story", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3eec6ce21ffeb7c1658dd37a14f76a3f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fe736d082251fa6d97db8c58986cab2c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2098b91375ff1b51076c8c9192ddd697.jpg", + "title": "Teddy Bear Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cfdf48db3b5058462ec3e32c465db6e2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/10c36eb5a7a8172000ef2a154deebcb1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd6579a161d6b82d9b547bcde8d02116.jpg", + "title": "Diamond Purple Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/53885d9bdb51dc6c60b95fbdcb495558.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a64fee9a9dac129120193107e3cb231a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f7db9a6e3f57b0acf8ce59c8f0bed461.jpg", + "title": "Doodle Red Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/37958199700cc8d96ddad8dceda8ab80.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4823dbbc77b6e21d154422525f4805f5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fc3c1e87255f20ee235af745eeb0be17.jpg", + "title": "Fairy Lights Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/47f7270d2ae94de74a5ee11b7ea3d198.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/caf8614e167ddc17487ced306c66776a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1c56ad42b17cb01c911c0d0d17167f97.jpg", + "title": "Pink Couple Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5490bf09d1924309238005051096807c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bb46509d8625dae56eed4408733322d5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d80d1ea5f5eda60782cbe132d0455ba9.jpg", + "title": "Lovely Red Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e5df650faccb66e7ce224dc7e1856418.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3adc4c3d10994ea70a010da23648104d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/73849c532ebe3ca7f1500e791083750f.jpg", + "title": "Bear Couple Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/638fa021a26e55dbc3a96b3d17015f06.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3f960095f31247dbc0db4ebcd31c2657.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0013e3260579e190e0fa29e4761d5877.jpg", + "title": "Love Red Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7f49631ec32225bf8a7f8dd49c2370fb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0d8ae325a6ecbc356a1d3b76beca32fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b40d5a5ac0c06c1b5544b1fc8f99095f.jpg", + "title": "Neon Light Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/35855c73a0ee0071c5ae0f0e56357510.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5b6fba1f3955eaae9c4bf88d2d8b9d11.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b01a2187b9142a50183152cebbfc2c16.jpg", + "title": "Red Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bc59e2baa61fd6840010d3851e981c81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b0b9567e1ae90ddeb135745b1365b5b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/43621e0f82a4764931cdfefb17a6e1ac.jpg", + "title": "Neon Streaks Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/91114c6c2cc25d287773d624bc1b64bc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/68013a4751d5ab8fa799952a4c38c871.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f082befb417770957e62417ea462332c.jpg", + "title": "True Love Roses", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b38a26a89634807b4dfbbb06b8e1a61a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e2ac82ef4c9bffb97ba3000660fa569a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/339187477dc314f27d37aa6e3d033081.jpg", + "title": "Love Birds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/663df7425d314df83bc46b75528075e4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a794436515ba6cdc92bcc8d59fac7def.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e09382ca186536d9e92ac55e9b0ff345.jpg", + "title": "Pink Heart Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33bd498a8118935a64bd643e2b3f8df0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0068d3a3ff6c14fa4204e5b96384ae4a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f55e6ea21c2c0ff9264e61a75ae046e0.jpg", + "title": "Yellow Couple Lover", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/802e5f7d2fc1cadb8d19164d6cded733.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dcdda4fc64e23afd1e78ebfa7fcd491c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8955fde338d34013859d8a391e4f501f.jpg", + "title": "Purple Doodle Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9ef09792a772bc0813d31de9538c1297.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/16da56b7c6bab5dcfa5f832d956d1ca8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f5e2f25a24bb45f7fd348f14845ca1ef.jpg", + "title": "Bubble Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d842b752aca13d74f01d446c9efa4dc7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3c71d7c3766e441b9dbbe13bd04452e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6f4d665077e0a2499cf572afa5ab2cb7.jpg", + "title": "Sexy Love Lips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/83e852b8503d697abc324800111f766c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cac72a50cdcbdd36119dbdc47ffac9d6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2a64bcda6842dcaeea8604af26874b45.jpg", + "title": "Parrots Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3e541d8ed0bf3ed6470cd348795b9182.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a8bc295c764c040f3bec026f9e6c6d62.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/313a5c7f756c70ebbe4aba2e3193badb.jpg", + "title": "Transparent Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/af5797dec108055a9936dd1a5ab9ecf9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/42397e7f5caa7cfcfde15c069cfdf6b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0e92526487439b64944a456839e54c6.jpg", + "title": "Neon Red Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f246376590b509c63173963c71335535.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f488f10ec3593ed3f545770d6d386db4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f63666b958b6aea4137536b1d50b03fd.jpg", + "title": "Black Gold Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/36e55a59fb80a515e6f977900c08a6e1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/770fb6d3810b764a623724d991c7775f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5105aa6cfc9aa2a9e3c44bbf14f3b2ae.jpg", + "title": "Purple Neon Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bd0ed1d65feae6e0f21a56924e9b6015.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3335bffc14452db55ffb53c11eb1b6e8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d63b01a6be5a46ec57c497be44936344.jpg", + "title": "USA Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9fe6f443a3e140b1503a21566960639.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0f90d13aae661b3ba7236aef6628c6d1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/80c4a8642943f4b1eb562716cc1f6068.jpg", + "title": "Fairy Lights Heart 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e28ffc76f76632e34bae5bd815adbca3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2ff613db906187cfefbc5ee1238c948c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/386136fdfcda7d7806ff01991cb8d51b.jpg", + "title": "Neon Hand Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3901b0fe1c7ff7e752a8c747a0552cc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/33bb0254df22b4c7b8a45c8012c8507d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1fd21a804dae285c0d435ff01a9eb52c.jpg", + "title": "Neon Heart Lights 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c0995dcb1673b19ed6fcc3e89c8b54e1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7619668cb63a40175bbf4fc80fa6bf39.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d2420b778f5dc024858cdcec9e0b53e6.jpg", + "title": "Love Birds Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e843ad02ed8c058bf2dbf3c42f79935f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6b5ba0a920158a3a8c0b3d8fdb98b717.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f135b1a8cb6aafbfa28dfdc0459b1fe2.jpg", + "title": "Cactus Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/44dd8646e8a7cfb63639bd18ecc9d0d5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f12701a341921f6788b87bb1f8cd7e64.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4fcfc083c377b653a298df082f4b4028.jpg", + "title": "Cute Avocado Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/65455c53286533a1b7de336d0fb256fd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/88d1f4f88ce82925957905c51cf9aa26.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/157d372d6ebd87ec10d0f9d31f1f2e1e.jpg", + "title": "Cross Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/916370723b3b60f62efae752d7591039.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/005d254e1b2f675723c0eca69a5ae020.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0cc53f596a170e545ec14e5a62593bbf.jpg", + "title": "Rose Gold Marble Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c33e66e6281de12ba2bd9459ca5ddfcd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cac9728dcb632c387d90ad911a737e72.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/92cd223af4b01e54cd1b5e9b31cbcc70.jpg", + "title": "Neon Pink Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6db73f2c4286ff6d8ae767f2bfd3c8f9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2254766caef14736d7a783b84f249e64.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1a0596d424cf013bab4b19cfaf72eb8e.jpg", + "title": "Emoji Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dd7c5fde1bc76b02be5dc566225f8754.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/facc6aded38e054aba98a2c8839986d3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7fe6e38b38598ab04e9332ccd3b0c281.jpg", + "title": "Glitter Emoji Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bc1c3e41a6029d01793cef5cd5a4e62d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/23ae98a16bc696d939821d376bdcec5a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3a77de6bf075e8ae257c866dec46333a.jpg", + "title": "Fairy Lights Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b26a10ebcfc9bf28ce99b91c10139afd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/905895c61803623e17888ea655aa4ff7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5a3bbd4795fc15bec6075114ea22c185.jpg", + "title": "Grim Reaper Skull Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c79357f5d02ec6a1b4b128ec622e578e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ffbb4be389b0557885f07f1df5a5594b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/32eb87ed6a725286b5fca63f91e7c939.jpg", + "title": "Neon Blue Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b97abba35134ff1de476bfc399ae68cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3ecb0be64972dc7d1cbaf8c35eba4cbe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/86049b96b196c0894ad07c64db1be4b8.jpg", + "title": "Love You Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/082482741d8c81290b276355c3dc4b1d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/98e99f52957a700c33b0bb598b09cf16.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7cb0e3a0978acfbd5b1a44ccfd8129c0.jpg", + "title": "Doodle Pink Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6bf53db168e318f415b80fdcd9ebd525.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5f0415e98234e3c81e1b939ed6d247d1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4e46c11a200b664fccefc86499e36ec6.jpg", + "title": "Love Sweets", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8d7b061b994b4615d4b9d202e2db8646.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1c717f202676dd3a3388e79a8e02e6d1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/66fcc417a0d8fbd75c376b9eec2453ae.jpg", + "title": "Lovely Ragged Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/51f4c9c699b7db37ee6e18e57ac884b4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/762f005d7b9a01193a35626201223f31.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/522b79ce9b60fd4da075ebfc81621e40.jpg", + "title": "Cute Birds Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6a29220be7995facaee31c8904ff7d2d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7401f32670f06f0249cb7202ccd23685.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d71c9ab6f0b2bf10aa156f42362e1c0f.jpg", + "title": "Neon Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/af977a101d7dea4c4e7877e1dd5b8d69.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aa479881b7b82941d275e0e0c1c35cc2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/37c7d921e85672618823c1c94b7390ad.jpg", + "title": "Valentine Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c0f6ee79e5601dd0540616cbbd51ac98.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/54b9b431a24455df198de8f5826560aa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6bd55ffc38c331492f8d778229a8ebb2.jpg", + "title": "Pastel Blue Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bd9d2e985ec8d01b869f584cd2c78432.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8e472772f568cc79ffff4a4b2e3afc77.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a77100efe5f2bb872122c1a53551ea9.jpg", + "title": "Neon Heart Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8745dbdb9359c1782561b522c0aae5da.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b3ab689aaf812a61fd7a4efdf66e0be1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/edc8f72de11ab73f7c63ff2d6e866b2b.jpg", + "title": "Love Pink Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a4dbc7a8724ffee17464f51fc9f99b43.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8c42c7acb0606eedb6a2b18270a06c83.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0f6a8ff31c981e514c1962a54fbe5b7f.jpg", + "title": "Pink Love Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7307d616bbf33111ac2efed0ce2fb16a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5fa2c51cab09488a4ae1070924c12cc3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/89f26e6d81a3edc29bc1d39a87e949dd.jpg", + "title": "Rose Gold Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/eb7fd32f8f3f82d43b5b01522a3e31e6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/90717cd2ea4c240b08a51e49aeb3d764.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9e4f0e11222bd3102d146c3af5b863a2.jpg", + "title": "Sweet Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40378b72ad77ee8f8644e7c68ef5b220.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/357accac25c7e5bfe4b25470d1e90169.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc5f22ebb04336f927c0f59c68343aef.jpg", + "title": "Lovely Teddy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bd34f0ff89109933f97bd4962abb74e7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0c5d3e19ef62423528f5fc477b689983.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69849b2c5d44cf0441d408aae2e799ff.jpg", + "title": "Rose Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/205ac8d389c0997a03a9fd239d7797f7.7z" + } + ] + }, + { + "className": "festival", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3ce935f39cfa4bf877370e7166523e0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f9b79cbc3b678e9a7e63d334ea66fc7c.jpg", + "title": "Neon Christmas Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1d3a383e77eb647e2556090591f7dbb2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b9d4b9c85d15ee4ee14f7b6463a3eb28.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/532039d5c4cafdf5bec47efbc49ae7b3.jpg", + "title": "Xmas Nightmare Jack", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/47d2f5bf2ee689487249063680745f7c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/09000571d64d35ee73201c991b90820c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f9bb7697389c5f955eea3b9588e48b84.jpg", + "title": "Xmas Crystal Melody", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8aa0dc2aee6975a676266e6b5d82afda.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e611444bb8f5c320201681b157999a9b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fbdc422a14eb6061b6c68f420af4872c.webp", + "title": "Cute Xmas Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1feffec760891fcd014ee8f932284eab.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6555d0781a1e780e7fe98bf9ac193008.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d66fb64c7440c2cab67ece493e522410.jpg", + "title": "Dab Xmas Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/284f18cff4f716a2f93ec9643dc67be0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b1660e51a8365bcd7ddd7fd5edf5b660.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7234993b12877171b146598274df09ec.jpg", + "title": "Xmas Candy Stitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d7b2a115a7765519af080acb5cac5b78.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/15267c95054f38702374ac0ae2c616cb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3067e6a337a77f71633497feb48189a6.jpg", + "title": "Merry Xmas Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d8389d945d8492100757882acef71b39.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f42ce29bb56f9390bdb10f241a94d086.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cd99bd4d5b3cca913882eca0ed6c8c32.jpg", + "title": "Cool Dark Xmas Jack", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/06d2f27e94e4e603a2950cc172a66db8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6712cbd2ebf9b2f76da5e78fac5415d8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bca73e99c4be52841bf1bbb2dc5abc8a.jpg", + "title": "Red Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/077ae89e2171637381e8f1b32a7578bb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/69433cef1acb4ffc6619084480dcf259.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/04905d4acd96521c99349ac80f5ccd67.jpg", + "title": "Santa Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2bc39e79ba2f51ef49f48979312227f4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3c6beefca929cd57b35f10b26813eb88.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/796c554d25c1888f6e36a03b46087855.jpg", + "title": "Christmas Winter", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1d4da8f56caaa7df5e0a187bcabf53fd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e435c6491dd5e6c2eaa29149e9d424b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ec3bbb428189e261eafd9840114b75a6.jpg", + "title": "Cute Christmas Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/068d97467b0bcfd0a7c5f044fd9b8ff1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6073cc7540970949bd5070a3872abfe2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4ec4384b181ae3f545b8375123636f76.jpg", + "title": "Gold Red Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/528adbec5c8aeb85a1a3373c9eaaf251.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cff8f9d7c442abb2fe1367f95d58ad40.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4b02affefebd4f191fda9793beb52491.jpg", + "title": "Neon Green Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/446e939a87db1f7c22aa919c18c22a79.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e91d5d40f7e5e6a193b87f9f11fcfdf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d18643c702d48162bd94a72eb604d16c.jpg", + "title": "Holy Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3365cb0188de232b108f5a0e2d53623a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0fc1e3943ab3edc9d7ad3e87e03ef179.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f526f8b31d5a1267861523def2581028.jpg", + "title": "Merry Xmas Sing", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/df5b90d13da2980304620fe5fffb15af.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/673f55b4a42ca04b015baa5409d91218.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6b781adb466b5491a0a645878f1dc724.jpg", + "title": "Blue Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0a7dd6a854bfb322ce57d72e9618e732.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5335da4ecf1dcdd771a669a3889f83cd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4991b730f675b7d9c0abf3d067e03261.jpg", + "title": "Pink Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b22622e1f6004fc5c3fe73b472d6e10d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3fc950182ba60e5adff0210ed648919a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3171a189276882c9c6b0bf9aed0d0397.jpg", + "title": "Christmas Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/77c14644be20a072560b66218d94f6bc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c78ae979e5e04aaa2027467abefddb2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d374e35e2ec98e232d40ce2f39056f05.jpg", + "title": "Happy Red Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b6eee778b20cd5e3641fff0ea48383c9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f1cdbce7e9b9a39983bedf75df2f6c88.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/045f6ad9edb171db2d323515bc443785.jpg", + "title": "Easter Eggs", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f153b5fa94783cbc8f66a43f89d5b426.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1cfd3df641d2fa72698698fffd80c6cd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8926ae97fe603ab93e43c79e05f21b2e.jpg", + "title": "Easter Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e6b071b06c2bff2f46a5536f6bcbd087.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6dde6426d1b25c9870a9a79ea1b85ed8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4c7d8b03c95efc99d6cff5f5f54e051b.jpg", + "title": "Gingerbread Man", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2a740dc95c27b22f4f596d27387e38cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4356ce1276e3c47255959915ef8eae6b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e62a83791a3167b214f6416eb186cd63.jpg", + "title": "Christmas Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f42134b69475bb5cd979c979bb5cae51.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b8109d0cfe7f7e4b0ee06b94a9af41b2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8da393af3f9d17bd8ea77e402a497c0a.jpg", + "title": "Cute Dab Santa", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0fefead63c1f5465f21437b0301d7473.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9b37ebba34f8545c7c04b398cc3a65a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/50171678471296c09361ac157b0e8396.jpg", + "title": "Crystal Xmas Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/87e10652534a4499abd2f18833902a9d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e1a69fdaaed427f254d6fffe1c71f4d9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6333e892ab576039c9e42075ace842e7.jpg", + "title": "Christmas Kiss", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f13edff9cdd11c87bfd49dc07d32011d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/65c1b7ca8f5793b08b7ec8c9d50a0ddb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f3224f0b24703bf5c5cf18dc38f17d9f.jpg", + "title": "Christmas Santa", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33cdf721aeb9319bf16f004246aed924.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9f2512e169510242944052c60b9c7397.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/08e8fc46200c51804d77534a6cba866f.jpg", + "title": "Simple Christmas", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/11a65795f86fa972106cc76e6ec4555a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/43e8a93ccfb292319dfe66a9f76aebb4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3d8ca648a6fb12c681d5920119c3a9c1.jpg", + "title": "Xmas Reindeer", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e78ce92d929920a0f8332d714701986a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/849bd30c285b8d867edb34d000ca5773.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2d0da581b8df5f38f4bf3ae901bd052e.jpg", + "title": "Heart Thanksgiving", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/50b084003b78b8ee399222dae674f006.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f5ebbe872c5e92ebe8c05e1c39a72a97.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/98257e9be6e38db0d25863ce11e90b8b.jpg", + "title": "Thanksgiving Day New", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/126b5c2ea9411393363590295fe1260c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/78aeccc61c9ec1bdbd3f99bed8451228.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b1e2bd991cd77d6dce5d3ebdc66f754a.jpg", + "title": "Thanksgiving Happy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/10f6c5f794e3e387a3bd99052e96d6de.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a1d3be9b2a619b7672f504d9b7e29a22.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/87dc90e357df17be7dcdd0b3af343409.jpg", + "title": "Happy Emoji Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e2459f99f2fcb894fb8c57ee6cc1a79d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a22952633f0a468fe78f525e23fa7f8d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8eb843f4b96fc3e650accab08d7b2d00.jpg", + "title": "Happy Donut Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5043470e1534fb34ac92ab989644a54b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ba48b358d7823e1df3455899271f6d5c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b27f033718c7de706c12da2da338d0e3.webp", + "title": "Social Media Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a1998af1a233675edef2c8a7b3b22e1c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/71ec86e3ad2856f4817c875de1c5a67d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/93f46bbc41c19d47fbfc6cebddbda21e.jpg", + "title": "Ramadan Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/21ff7bbaae36f35ee9f833af39c1ceef.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3b07f5676f8f4c0c32ee41a0afc098b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/55befa02f19a8caa012034327f8807d5.jpg", + "title": "Ramadan Golden Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5d5f4627d234442c9e83e5250bb8c546.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9cb1b4e7bfb896184655a64523c2029b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7d3259e47d9ee402d09d20a5f30deda2.jpg", + "title": "Allah Ramadan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a1806530138b4ae3c51ce57246bab19f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cb57d028efa1347092d323f219baafbb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b1f65698cab142ecd55c1cff37f01f0a.jpg", + "title": "Green Gold Allah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b6b027ffe94d325ab64103777b1f49d3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/84341c423e0b7f4a121bc4861c540757.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a400243498f601016b23ac7d572407bc.jpg", + "title": "Ramadan Moon Indonesia", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a6a3f0441cd09b5f4905a084c2991999.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7981682dc49bfbf8b0a31002da867ede.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2ca022dc3e196e906f6c8f27f198a513.jpg", + "title": "Fireworks 2021", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/57cab3856282661e89244fe3f8959b25.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4ee527b1cd82af5205e5037f106b8a49.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7b5d2685e31a57b30efb37916d2fb695.jpg", + "title": "Happy 2021", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/620d5863ba00656903d9c0e1fbe60cf2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a366adebb63b5c100058ba479a8c761d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0190fb765110e25940629e1537f6f63e.jpg", + "title": "Neon New Year 2021", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7057b637787a3aeaa926769f299f5e0b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/73dec6b2408fe86293a252c42b289bd5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9a922f63edd1a7bbb3e7774ec48735e0.jpg", + "title": "Creepy Pumpkin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f04ed8506987849aa196489e47b4f94.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4d6bb7c153472c19d341b8228320d95e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/79cc9ba9a6faa66bfd556cc94f1e2c35.jpg", + "title": "Happy Day of Families", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e8f29e95a1b2b02cbe331d828e26e1c5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/abb81288af5d254dbd2bd7437a6709b9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c22beaae1ba0cd8007f0a288aac8cc5e.jpg", + "title": "Galaxy Jack O Lantern", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1ccacaede9a346589b11937f7ea4b287.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cb6a7d1e4cf46e31e6f3a81337a7b7f1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/514eb8d51c0d6d12704759a1760765aa.webp", + "title": "Cute Halloween Pumpkin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/79556ff8aaff1b2bebdf83362ed1d268.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/53bc39fe07feb84f8b3fc6441af4fcd9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1b7f4e5aaef92116a1abaf828c852116.jpg", + "title": "Cute Pumpkin Stitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fba09b8fef0c2db7739075b5d7770031.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ba271510391831b590c252f4afab6ae.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/620f490d867d7a0b03c3c215f4bf9838.jpg", + "title": "Super Dad", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/eb10438c56468af053c4f2b212c33984.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/00da7798ca9ac8ef08233a4f1aa7b4e1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c2b101308946e5c6aa947628944facbf.jpg", + "title": "Best Friends Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fa28923e536796fec3d5f45c5833f932.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2376ad9c926163189196b5b738f60d21.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9894497e299b41379296b4201bf185a5.jpg", + "title": "Happy Mothers Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/05ed3425821e6f8b58abea68aab7d8af.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d6caf256c7ff9eec3f4da0677e5a4113.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d73e23fa37f6a2e9b13a42247f9e6f5b.jpg", + "title": "Gold Ramadan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9c4e0753794c0fbc09ac00e53ca10fcf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e60f152a31c7a6febd9f8dc563e07d0e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/876251a04ad8b1a99ef0651f1e169898.jpg", + "title": "Glitter Allah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d5986738bd8149caf013e4a14b308b5c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3742047a6474fb4e1d741dccd13c88ec.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a5646776d158a4a9ee6133349a7623f0.jpg", + "title": "Happy New Year 2023", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1199225afe1180fd7b6e244913059c28.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5eaaff5d0274e0fa6644796aa13a4587.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e731558518dc8c74ef299fe8cb54d8c2.jpg", + "title": "New Year Firework2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/411b543f6a6876d27fb29fb4b33e1111.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2e04ce25b6d0cc1551761b7b74273318.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/006a119ab145b60ae66432493d749923.jpg", + "title": "Gold 2022 New Year", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0e414fa5ba88e5b82af1d4cb6447d42b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0092c65c718b806559d52f21d0f751b3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/01fe293ad37906759bfd8105a8d8039c.jpg", + "title": "Valentine Firework", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/62bc1b4de0782746c17fd000886ebd54.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7972b85a7656c553e64829eed7ee8383.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3c926ecdfc722ac1a9ca03d61fcd616a.webp", + "title": "Gorgeous Firework", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/87c478fbcd904b0c738fb3d89ea0ed9f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/35c3224403223ed027877afad7413dc4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/682ec2b2e4f7fdf6b5c1e661054ca018.jpg", + "title": "Cool Firework", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/926cdac1b9a5ea2ca36712857af9f17d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0704f73d450b1ba2d585245b8b93d601.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e6af4203b762857eef35ae34cda2d19a.webp", + "title": "Cute Halloween Ghost", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d3185a18d4309a89b74bde3e768e290e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c96de3cd68f111e8667e9a988dafc8c8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e034cc42b28b73655523b2313c1b5e92.webp", + "title": "Cool Colorful Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a7c979bba1259eff87ebe958722c3bc2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/47e0244b8d31591737023dd30ae8e335.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/44c7cd6ddfd72c90755e0062778a91e4.webp", + "title": "Spooky Zombie Hand", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/093e2c6cb33ae5b0f07256d9e0f29dd0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5336bae6e874a930a04b660102bf0ff3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0481eb42f646a64ef5b6395884dda792.webp", + "title": "Cute Neon Pumpkin Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7eca268d1f19054abce066ca51a70609.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b33f3cf4674a3abe1ab312e24a01d826.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/41d06997994ae4d9db70c3d92203eb34.webp", + "title": "Cute Halloween Kuromi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/221403065a349f27a886647339756d3e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6616e848c7624eff88d5cd6bd7246f9c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0bf56ab055be5e5be17f14693a7e39fe.webp", + "title": "Cute Halloween Simpson", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d40f0c84dac456c0b7a8277f1c0b73a0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/660af5731173413885435ae3bfe2c414.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ce48fa4694894306fa77c560b192505f.webp", + "title": "Cute Spooky LV", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/36a87ff425fc48c37ee14917223a1c32.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/52708233243988b6089154f0f2804960.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/616c112245cf0f2063000c0e980eb705.webp", + "title": "Cute Witch Cat Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/56d41e00d7a650e99290c0ccf8e23fd1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2dbe46f926b545808e818eee83811723.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2489ab89329ee9f986bfb8f548353f4a.webp", + "title": "Pumpkin Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2682f13adf94284d4e961890934529f8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/780c160685e07dd0514f00c99d6b04b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3f30341670765eb79e62d1e0e1a552c1.webp", + "title": "Cute Stitch In Pumpkin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8674a08fa178ecfe49f88a778b11c424.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/28e4320eb48b2859ac595c2c65d614e0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0450f20b31def98e8d776e93d11d8949.webp", + "title": "Cute Halloween Nezuko", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b0026ddfaca777ae7ec83955b7405086.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1e4647a70b6f16802d8c31d477eaec2d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/51e6daa599dc2c55c85f882762b94921.webp", + "title": "Cute Ghost Cat Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/58d7d8b06736f4e91e2b4c6b20ccf7c1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b2682d1031e35944222f700e7b6aa198.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/841673d826537fb9e3a52b439a313515.jpg", + "title": "Halloween Molang", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9866d719b7f08a1c4cac67839f4cbaf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ea2efcb433aa1f39bbfb91213d0b683c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/91d26cbcb5c45b03a50f01056a9208e0.jpg", + "title": "Halloween Party", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e16798ca15447a9fec38c39369f3456e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/20dd80674df46779c528487898467495.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af6ccee323249e49e7f23e4699ab9f00.jpg", + "title": "Cute Halloween Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/03fe6186e018399059fdb6f6148bd692.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a3382574189302304411a63acad1b816.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2871ab4c863e1e5f3da8e526106fe7f9.jpg", + "title": "Halloween Maskman", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2659f1012d1eefecba2d290186056bd2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fea5b8f428e5aa6235494a63dde19d10.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b264eaaf49a181b4bc7e7f5e82bba24c.jpg", + "title": "Tartan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c66058d0af81f6342b21b2675cdfc242.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f23148a9f6bf96dec08917b829a34639.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d79d040d6ba0dcb5380eec3f60a9a122.jpg", + "title": "Halloween Pumpkins", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9f30716d53528896cf60d4054c245510.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/80a3dab47b018247b87a43fa1ec5ed0d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/eda1daf9e2826ad91b6375772ab90a69.jpg", + "title": "Hispanic Heritage", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/18647b01f6b35a513f6632f52800f133.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ec08cc42c953fa193e90b0b9f0677816.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/eb48bdc5434551f43101e15124c92f76.jpg", + "title": "Halloween Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/170de090443441c76daccc566a42cc6e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/899a7ffa8092a9a0c814326906a1a4fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4ff3661b7d6da8e76c45e3b0b2c4e763.jpg", + "title": "Happy Labor Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6f859f98a2df5416c15cc5666a6c1358.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b65ce98497ba893c58640d248caba204.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/104e4589dae17e7a0eedd43a9fb1f17d.jpg", + "title": "Evil Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/58b472dc6d73ab1074e6ae7b19fc9b6f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a70c663c1775adc54b67ea469b7c8bf7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b182ad7ef1c9578689f3e5fcc511370c.jpg", + "title": "Halloween Ghost", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ae69a17c7a3409b71127348f5ccc481f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/327950127cac6e7fa4400056f77754fa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6d5efeb7eaecba2327267a20602eaa0d.jpg", + "title": "Halloween Pumpkin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4504392579ea3d0028a4635b317e6f5e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e132f8d24e68044d295b51259826f18.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8da9c5aa23a546419dd6f0891c94cdf7.jpg", + "title": "Gloomy Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4eb4f2fb3b4a3c96769c02d97d044bfa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed7eb5c75d1b5aaea0be79ac5d954019.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6995c343db7cfa1689040bf68cb87ebe.jpg", + "title": "Carnival Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fae60a5725c6ca85edb358ab2f0e1970.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/af1b45ffdf70adfbcf5e74a9e52ea244.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8ad20e6ccb5cb91f86e23d7f859e1a40.jpg", + "title": "Mystic Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a5e201e681f6a1bc1be4790dedc1f86f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ec08cc42c953fa193e90b0b9f0677816.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/eb48bdc5434551f43101e15124c92f76.jpg", + "title": "Halloween Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/170de090443441c76daccc566a42cc6e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/899a7ffa8092a9a0c814326906a1a4fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4ff3661b7d6da8e76c45e3b0b2c4e763.jpg", + "title": "Happy Labor Day", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6f859f98a2df5416c15cc5666a6c1358.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b65ce98497ba893c58640d248caba204.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/104e4589dae17e7a0eedd43a9fb1f17d.jpg", + "title": "Evil Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/58b472dc6d73ab1074e6ae7b19fc9b6f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a70c663c1775adc54b67ea469b7c8bf7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b182ad7ef1c9578689f3e5fcc511370c.jpg", + "title": "Halloween Ghost", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ae69a17c7a3409b71127348f5ccc481f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/327950127cac6e7fa4400056f77754fa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6d5efeb7eaecba2327267a20602eaa0d.jpg", + "title": "Halloween Pumpkin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4504392579ea3d0028a4635b317e6f5e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e132f8d24e68044d295b51259826f18.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8da9c5aa23a546419dd6f0891c94cdf7.jpg", + "title": "Gloomy Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4eb4f2fb3b4a3c96769c02d97d044bfa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed7eb5c75d1b5aaea0be79ac5d954019.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6995c343db7cfa1689040bf68cb87ebe.jpg", + "title": "Carnival Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fae60a5725c6ca85edb358ab2f0e1970.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/af1b45ffdf70adfbcf5e74a9e52ea244.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8ad20e6ccb5cb91f86e23d7f859e1a40.jpg", + "title": "Mystic Halloween", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a5e201e681f6a1bc1be4790dedc1f86f.7z" + } + ] + }, + { + "className": "cute", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/76027c67a53547dfb16a9731279a6d71.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8b3da62ff0940f3f4a86954ef0097d88.jpg", + "title": "Cute Nike Stitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f407943410e18c86ddf001e96319aa5b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c50627dc1ab995d94982df4d9976ed8e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/faf7abc48ac971ca89998b38a52242a4.webp", + "title": "Pink Strawberry", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45727d54cf59bb7e0be26268cf57cbca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/415b84a5d098f495a15aeb378098e80e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8e97e2629a1da74ed5a5b9fad56b03cf.webp", + "title": "Cute Powerpuff Girls", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f756638f24ec008b6acbcdc5ab8c05a5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9a8f1b966039fa110cce4c86a2e3edf5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/896bb09a18d114841fc32483e752b2bf.jpg", + "title": "Cute Kitten Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3d940466fa31e30df1c60f80c2b2c79b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b263fb8b2d2e7eca4bbdcc75b7bbe987.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3d99dcf1d9175a8c5d55d2367c199014.webp", + "title": "Cute Ice Kuromi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/31ef783f5466bd76ffdb73e946d1e623.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/92ebd4d986fc1a8b5c91c9eb3495a42b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fa32f7847cb4c7cd94f2053824f43557.jpg", + "title": "Cute Bubblegum Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a7e8c7c5191fed1ba6b39454a11c440a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1df9aea825939137e35e2775fec69d8a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f7947248fae07435c8ada5b91f11bebd.jpg", + "title": "Love Simba Nala", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/710dabd7c9c7c14ff59ffc1141f6a7f3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3e38f0128ad8b2d6c19f20b536e0792.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/337c48b1d04a66c8c662fe8fac7d1f96.jpg", + "title": "Shy Love Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/73c74526b80ec6b00e4aea35b8b3cf10.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b229b7f18a721abbb022298f644c7e48.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3659ea237954edee888248bff739a280.webp", + "title": "Cute Kuromi Melody", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8c4d30e090e6f7f523a1e51d53763a5e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f84b3cb680318c4074da87e12083ed94.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c076eecc5b5df13a322a1a9f36e5c5f1.webp", + "title": "Cute Vampire Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/69fa7b620bca6178c3b0b66df5cdbf39.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e1cab9141900726c0c14fe4adace8725.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/62a667571d748b81d8bb0767cc6c1f20.jpg", + "title": "Cute White Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c13b6813ebff77644478783841569658.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0e50d33331b1ca53732164241b301cb2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0dd3045d8097f0eb782a4c494f9e05b.jpg", + "title": "Puppy Kitty Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c424b4120ff33d2ea4f87e098a5302dd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f0911330138ab2aefd817f6f4cd6dfe8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9e69690c9bbdd790ead6b3b534b45125.webp", + "title": "Kawaii Teddy Bunny", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b774f04456a54ce20935d579c635a46d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6b2d89c2f81ca6d6a4a6cbcbecf8a39e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ef8fd0c3f6a4723fd092a7fd33f77494.jpg", + "title": "Graffiti Rose Pink", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d7c58f283c8755c99d0abe8950f5c7d1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b720e45d7dd5596181fad14348727e26.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3643137dfb678a8a27386930494f6a5a.webp", + "title": "Unicorn Cinnamoroll", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/68ae7d1854287becbe72eaa5c606941e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc61592ff75190347e8840cc6637f43b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/61555a1baaad3ea85194ed431af92172.jpg", + "title": "Neon Kitten Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/553a163368a028f07ea83b381f436434.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fa26e4376140ab38a2eca11f1ccb9dda.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0becd6bbe9abf1868bbea1ce8e5425f5.webp", + "title": "Cute Cup Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7520bd95a4782a371ea4cb8904e4cbaf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1d725cc37d4e868089e3b14fafc3dc96.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7f6971c44a4bce70afc514e7f39b546b.jpg", + "title": "Fluffy Cute Dog", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e731b589a8ed55bdc9298a308c8a3a19.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/edaabdbc4c6de2b988beac5f892bcb80.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c605035a32b74b86a58bd757869d580b.jpg", + "title": "Avocado Lover", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e1a67aa31fcbd97e633e00aa03b96e14.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b859fb53bdaf2fd9aa8f4c8153d660d5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a753a480c59529048755015ed2517d0b.jpg", + "title": "Shy Love Pink Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/57205a43944e525d6d540e500ed0e154.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/90a12cc84857a96273602a92961df5a3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ad596bf4755d04561512383ce72a689f.jpg", + "title": "Cute Wings Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b9dff3256bba9dcc9ecc7dc9197c9859.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aabd1dd3889bf0df2dfd0da007a6e3d0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8902e129db9bc7ba8b37856e0c079a3e.jpg", + "title": "Lovely Teddy Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cc9be5e3ae6566bba62ba0d13e0ae0bf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ab9d14ba12ec49a14d556138f854c74.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9c9f2b1a6f2b8b8828b9aed7180f8a1b.jpg", + "title": "Alone Goose Duck", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e2761f5db41bfc2bfae6b119313544a4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a4b23b94c2af732b9958bedc1a6b5caa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6b783e2c48c9e7b39303e2cfc2aa3d38.jpg", + "title": "Melody Kuromi Cute", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d65d472e890b7eaef9c9742a4abd2ad5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/efe190ef19aa5212bbdb83e4638150c4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/03d6d31d0af5ab7e512c6983f3f1b47b.webp", + "title": "Funny Cat Club", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5b321cbb4c65b4b8ee2cf171a5cb139e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6f36584e416aebddd3e6da3e1f17fa14.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3f871dd2f9dba4f88266df1a046731f3.jpg", + "title": "Cute Wizard Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d361a84be9e3e49ff10b6e3c0c9c0155.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d4f8b3656d52dee52bd94389cb74b289.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6b7732d287d5f4243d700fbb4377ab7b.jpg", + "title": "Paint Cute Rabbit", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/11337088473912e3e3e84e7281698694.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c94318db3c4e003f0770624b8b8fbeb4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aec5e10386fd5d3649190d07bdb5fbe3.jpg", + "title": "Pink Bunny Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a90389bb0d8b6af4e38cdf965df2fb1a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9b7b80ab8508ca83495b296b42363fbf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9136096f2c1d42c350a7857323e43f2f.jpg", + "title": "Cute Dino Kitties", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d4cb2ca505d3005e9fa82118b0a05a48.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/604920e5f45a9e7f27d2cf8d5589c76a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7a3aa9c0d2f3dd39a381c847287e0321.webp", + "title": "Cute Pink Sanrio", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e5703ed3a3191d373b2298274ab9abda.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5a5b571662fa4560bad718d80ce113a0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e306a662c2512a36fac9fd8fcf12f2e3.jpg", + "title": "Cute Star Stitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d9b0a78eda9fc02579704cf39614a5d3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3cae657b1bcb1269b9dde09e61e13566.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/726cfbf0f7abf997f90e4cf21b511f17.jpg", + "title": "Pearl Pink Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a49b60eb5bbe7ec487322ad62c597338.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c1506d5b7ec2e349a5e9164598a7a226.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ed050649b725e18baa028623f0308366.jpg", + "title": "Cartoon Corgi Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9ae1f6911c31d6eac0704b0f488f1190.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e515686a23a6909f236c9bc83f1cfa9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/89fa1ebe0ff6344ac3d72484d9e15ce0.jpg", + "title": "Cute Reading Stitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3756571cfbff4da4d03e3fc30539210.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0177ef98ae9c6e35d1a0d81310ab6fe1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5cdbcca91af8a67ddd8f603daac28064.jpg", + "title": "Pink Berry Cheers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/66d8bb162ed9156d3a8a193fbdcae5d9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/20eb3766ae60eab54072876f830a5678.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9df8e1d791848a4afa030a85e87e0f05.jpg", + "title": "Cute MonaLisa Duck", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b39c7f006374c2b76392e29e13ba3dac.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2fd7d8c4bfdecda5bae113c45b86dffe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/caae02188d1154def2c573f301b11754.jpg", + "title": "Cute Zombie Melody", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d7b565d403c0c95f33b7b5061e4f8c81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5ae204fa8a50d797b4553990428203fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e55ce9808d3ef1180be712fe7ebb9e72.jpg", + "title": "Kawaii Teddy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d3aae90fbac4d3421f6a727a3a965ab9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d44e551a968cf4ed7ca93926ba872b81.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b70a6c248006902ab4292fa77af8b692.jpg", + "title": "Cute Love Alpaca", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6f3c0a25862331fb0f2f06455a6bc636.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3e396b0112a3fe5ef2bdd423418dfef1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cc0f081e2d2d314917fdc855f315e6ef.jpg", + "title": "Love Panda Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/579033fa6a038b04a5495a2e82632039.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f44956652f5c2ecf9cf6f005c24cb6c7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2317cfbd254c45b9ad6be026452b7a4a.jpg", + "title": "Cute Gothic Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6290936403bd580b1ad7e6926476316d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/11bca2e1b6d84053b5ff9b13af5cfa79.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0189ed802c0d62b3cecd4a8a96c01e07.jpg", + "title": "Beard Puss Cute", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a7576fa61b846b669dbc92751cca8d07.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/91b4a304452374f59ca203966f0e3a99.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c20fcaabfa46b83a931c52ea2be11c25.jpg", + "title": "Cute Kitten Paw", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e9017e4eab0be9a7ceb0db1264c6e9b2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f12701a341921f6788b87bb1f8cd7e64.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4fcfc083c377b653a298df082f4b4028.jpg", + "title": "Cute Avocado Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/65455c53286533a1b7de336d0fb256fd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e701aea9b556314b4f0e7d7b01c3e301.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c2cd70c7ecbaea1ca8d3599c78c8f549.jpg", + "title": "Kpop Whale Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6ca4ae888174a73e63276ccd4e48414e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5d70b2e5e2b06e2c454707856a4cd2ca.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0ec041963000089c1da4435f25efeec6.jpg", + "title": "Pink Panda Sleepy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fa0d3186b0bf4a6dcea1bfd440681af3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d42dba6ff266770e8ec8aba9c99adb1a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b70a9de83312d51bb231b0a8d2a1b6a1.jpg", + "title": "Cute Pink Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9508c0f2680f6756ed9e1fcbc737488e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/43a315fb1ccac3bab2371e157f14378d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/df103be0b15ca7b32c7f59107f5d55f7.jpg", + "title": "Pink Unicorn Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fded01e258c2dbb69a7704cc29645229.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/80f57e0be8bfc64c7685784588139ece.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/05a03b13efbb3d9469b314dce4d0fb69.jpg", + "title": "Pink Cute Macaron", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/087f9f5b57b03e4193d84afc643dfdc4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b13b6bd1ad1d0b1f3b2628ae78bacb4a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f3b335f3906cbac6788d961a1929e951.jpg", + "title": "Adorable Akita Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c62110e27800f61438c821a83e6c7952.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/285a115cce6284e68a32cf6ac8ef29d8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d65e474ca3e7489bf3f09e9e1d164acf.jpg", + "title": "Fluffy Innocent Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/57bfd3d91c3bd7382b560d1cac4750a9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4f11f0fa6b6e1b42375e5ece259ceb94.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/12be0d421c42b3cbafa35bb5877678bc.jpg", + "title": "Teacup Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7e64e51f24c71eaa5942382931654317.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5ccd3410c47d19e7567cddac01bd09a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8517d18fac0d6a37838d6cf9b48e6fa8.jpg", + "title": "Cute Hamster", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bca24dbc02333b9d1d9c4993f2a56299.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9c874b561ef8dd6a8fa827bf9fefea8e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a5e67e42c7003522bb59f076f5df217f.jpg", + "title": "Flower Tiara Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b333d8638cb38c536b738e9be6326eb8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5419cdcc68f7a11899ce03b088e1ca39.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/476ffeda1543b11f10af0c11ca1e02f5.jpg", + "title": "Cute Cartoon Poodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3f7a42c48a671a9471e37fc50d659fa1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c5ba9bc6a45586b70afc4bd0aac25d3e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/adcc2935ed833a6d437fff121ea9fb46.jpg", + "title": "Happy Cute Panda", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4ed3f8d3105a773ee0ef765e42f2e5e4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/128b24e5b0f2b6ddfb737bf4a17e27f9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7334b272eb56672f585724f891e9c36d.jpg", + "title": "Cute Watermelon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/906a65135447e72bacfe9e74b540e2dc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ab39f35c65e0e8f3ceb9397bb6fe472.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/323d398d38ab6d198aea4912376c1a9d.jpg", + "title": "Cute Bunny Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a0bffe36ae759d94538044f645fb0a81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/96edad68da8a0e2531f9d521b5344be0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e71e529db2847d8d885ee67e3b24de0d.jpg", + "title": "Cutie Hamster", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fa127373edbdd55616767bb1a44930a1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/baefbf8c828bf6ec8cd66dffddb07d03.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/83dc9786011403a46c024e4b1dc66ddf.jpg", + "title": "Aesthetic Sky Paint", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/504fb72b09b8fb60230376bcb94380ca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bea4ae323296e12f0cb49c1049911f39.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ae3b075ddd2ba69a4ff3cdd7838ade6.jpg", + "title": "Pink Strawberry Milk", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a44333b1c78172a3f2e3ebee47b59735.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/081ea7c4b17a24a6b3d465de1017c810.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/068cbd33b8d6577b40cffe476d34a3f2.jpg", + "title": "Colorful Cute Flower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8825e099785f84b9bea7787a9c237a06.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fc92393e24d15fc52f6235feb7d730a3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/615f96f6cc928883acffa22cb61b154b.jpg", + "title": "Aesthetic Pink Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c30556b0d9636b247bb8c505de1e4748.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9054934efc0877f0204af2c67d04952a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/deee93fdfc247961e298118287a43ce4.jpg", + "title": "Cool Funny Pizza", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e6e30ce26289e31a057855acab015e41.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ca27a3ff3f84606db1c5cb5aa37a1a20.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/829435f2c2732a8d88e01affda5443c5.jpg", + "title": "Cute Pug Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fd65960d6ad57e3e4d8ef96929e3b545.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6b6ce505156da57e0af8de51515be2a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d7e9a001e66e19e869d5e418dbcbd0a3.jpg", + "title": "Galaxy Sky Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a4da2d5f7b9fa24e151a5f299d59f852.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/980c0f77736c0e235ec4c3939f5d24b5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/743c88ede8829a9aa3c372e927f214b1.jpg", + "title": "Glitter Black Pink", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cf6e553e10d162470bb75af77d62f574.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/91996541a31eccb8337fec99d9c53bf2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e025a3d17444883ef6351005c722168.jpg", + "title": "Sleeping Cute Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2d3482854be6f3ac0772e5cd007d2400.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dff0d0635510690e42fcdb8122d3e962.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e3ecc5bbdf4a78b8960abfccbf1a81cb.jpg", + "title": "Lucky Clover", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/85c77d8439ebbdad4fea1b71b94fb322.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c9bb5219ea7e7e4192e58ba67181c743.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8825b6e00ca9be30d2128ca2c9784249.jpg", + "title": "Pink Unicorn Toy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1e2287336aba28c7d305feeaa3186b80.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/66240fbfb0080b5b4d255adcab9e6fdd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c33dfa038c680d91bb4c058a1603ba08.jpg", + "title": "Cool Space Dabbing", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ba411a5c079cf2b3d44e7cad7dee9e34.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb1ab46d610f2e1ef7384e94ffc11005.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8defffc75048a0467c95dc7b2dcdba6b.jpg", + "title": "Pink Lollipop Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/606c38e2cb9b77f40cf9f322073b7218.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5ff87158d97fd75f4737d2fcbfbfd5c1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d04b3a4fe02f503f91170a2ee3383bb8.jpg", + "title": "Cute Fluffy Cloud", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/437eb8a0d24a294af97ca09d007437a4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/88ae945fc014cce22c09be151e5e9cc8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fa0d4c68d621975f1e3e65c0c8505d17.jpg", + "title": "Purple Galaxy Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6ff2eccd36c8c247d097e3b2d56f51f9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f0085b49156175d2abe444498f3bd181.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e5ffcf2fdc1faddac40728cfb13a1089.jpg", + "title": "Cute Cartoon Eyes", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/91dd8cbf71d030801c2b0e15a3ae94b1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1b3fdacb0b7823a5d909cba51d911887.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0e9ea274370cd2ac1c5be1e1097d4e4a.jpg", + "title": "Pink Roller Skate", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3493c43bddf72c3d80458b740919eb10.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c022bd66602bc00ebda4a7cef7919ff.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8eb6898356bbda67180324e6031066b0.jpg", + "title": "Glitter Pink Eyes", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/97c5d6ecdc4f0e22f7661bbd19932ef1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/604242426795195578ec70310b70e685.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/394013dba51de4f5645a406bc1a49a12.jpg", + "title": "Stylish Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6deac75de4f1075c24681aa8c88eb8b9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b77c2740281fd30051e204933574d32e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bd864645511d10d370c499c206047647.jpg", + "title": "Burney Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e8058ea173fcbe9b377ebb58e554935a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3e9009d2ce65dd907ea5db40c12d8b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af13db64b741acde94b5b71467013bf8.jpg", + "title": "Pink Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e95d3f226c244d025e4afdc653e6f40a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/99187af7a43a32c160a7586e4e36e79d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/953bb62fdc77c5f17b6154d53f62542f.jpg", + "title": "Cute Teacup Puppie", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/71ef69626dff9437f469e0bfa69799bf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e0f8d365fe9058de861f843b097604b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a38678e05f199f42b2555d92ace3a301.jpg", + "title": "Rainbow Jet Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/568d18d4204f29fb16e3526c6b064f84.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc5e9f0236b8154afb486a157551859a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0b589f99164560c10811e239bfa0bf01.jpg", + "title": "Daisy Pink SMS", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/02bc8d969fd3bed6458c19648003df15.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d511c3f49a9a091c81c2875347de9f78.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69150d22ad3f3bfca1dde552ad07aca7.jpg", + "title": "Funny Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9274b087c60a0abf29dd4e590dc2ca23.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7d9d4289e33f8a474393defa3cf10f65.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/51ddeb8054546205beacd8e8d8de5504.jpg", + "title": "Unicorn Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5d09a97ef6879ba2e1d3d33a7aea6079.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5b5bb1e55c39fee5a13a52b3924c6e1b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/982917fc6f16eb181ceab9fb977f5252.jpg", + "title": "Avocado Dab", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/08ee8a158303ecf4d462f777336c9ba7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8126fa8769d85380fc1256320f58f0a0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1407737269148effe5b59566883dc66e.jpg", + "title": "Galaxy Cute Panda", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bb2836a95a3fd84d11071ee53f74875e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eec29b15c889a4a62b8e3fc784b1778f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e1d607060610fa12b6d291d7a3dbd9d3.jpg", + "title": "Cute Rainbow Stars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33937d8a43eb5c701582c42fc2877f92.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4281984af73c48808ec381a2eb03842f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3f56ae964777d071c10fb82268b72360.jpg", + "title": "Lovely Birds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1a1eb9cb1234641b6e7ad2ec3307fd04.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a2a959f8ae5ffd25bd93842919457f95.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/17c45049482a0268ccc071283036ff46.jpg", + "title": "Pink Bunny Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b270d383966705f9503e9dd1e18ca87c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/05763c38485911a666975ed80c93228c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0bd0fd9d4ff7fc2d5b307e11759665cd.jpg", + "title": "Strawberry Pink", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/edeea7169fb87c715eb05f9b92f71ed3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b39a4718a097019fa9bb91984b638d91.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4a83f452037c1c1e0be2bbfca73613f1.jpg", + "title": "Love Kitten", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cd69f48f9c719bc070d232808cd119b2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/67f69b5b57a9974f9973fc6f830fdc11.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2e81180a605b237949b1b1149c781d93.jpg", + "title": "Happy Penguin", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3d01a42a0668d6a8e929fe9d34022366.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a026ec1ce90c98203e12e8970a501aed.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f306cdbddc805d2f83e9c2ec81d1126e.jpg", + "title": "Pastel Cloud Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/53fff19fe8fdfb2d9b1089c5219b3444.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/35abe5cd059e6cea8f2b38123a4bf073.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/189062824385476c996185e6fabe628c.jpg", + "title": "Rainbow Clouds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/26095396266090293fe4c90590b506e4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/47e8247f2606dbc8e8a26f8c284bbcb3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6f1dcae011eaa16c29f0a7103efae04b.jpg", + "title": "Blue Macaw", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/755d5b8144a66c330e00a8c3eaf0d531.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c3819124b9f2d6f9c8f1ee8bace1ddf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c243c98b766f9a9301b8e9ee31d55d52.jpg", + "title": "Rainbow Galaxy Cake", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/12e8c13357205fc29251ce89ba2996a7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8042520dc717d652680e2fd13016def1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a5d5c4785e66ffb16a266cbbaa00a084.jpg", + "title": "Pink Glam Tower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a50564e1e8945f06be5561767fe6f56a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f9d696389c084814efbbdc126fc59030.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/66b158d4c2f61d318b406e053f31124a.jpg", + "title": "Pink Tulips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c8afb241ab07c2cfd74bbf012b37f396.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5c11e1cd9b724768b5266a1765fb8a80.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/78c743014c431d7ea54b7a47c4f5c603.jpg", + "title": "Snowy Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/868fec2b56de994c4bc2dfc2f4420061.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/060334373b88aaaff3ce4911f7025d5a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c82fc4a36f61a1e9d66e26c6f14901d6.jpg", + "title": "White Cute Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d65f705a4b2b0a63bcd3aee655dd6804.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/49b65fe79ad09406da249b8c2c768fe1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fae719be8b313c3cce70968991c190da.jpg", + "title": "Beautiful Sunflower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8c2b111eacd459398fb1d6bae669fb2a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/10e454c35a582f1b7fd99613acd6912d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ec69f889e5619dfe230157b3084d976.jpg", + "title": "Neon Sad Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2d2581fac351c95318c03ef73562d14b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/24b4939de0e8f6d23efae243d3bf1102.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0a075da373135444e0ee5e074e08a423.jpg", + "title": "Pastel Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/79dee00721f8fd051f322baea5d07726.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ecc75487e7038bd6c7dd72ea74d3d4b6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ae613b256996ca888628571e074b387.jpg", + "title": "Parrot Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/37ae31adf1e9c1541cf04e99e63790d2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/796a929dfc5c774d23970f2c46ecb3b9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2f19a151f618c88af688d211648b4825.jpg", + "title": "Pink Tulips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a577589a75c9c06ca5b242ec3f731835.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6c888fbd36431ae699a0097ade4e5530.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/152850ea47a60c9c5cf804aded1f581c.jpg", + "title": "Cute Bow Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b61037c131e3f960a863493c024cd5c5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/34682147142747823dd7a6ce5c927d61.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/34e3777d30e90d5e2537dea41d7c0845.jpg", + "title": "Pizza Party", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/15d3edb95b69307f10468f1a208e3517.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b102b4ff40e28c19c5284131595d36d0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a455959f4ba19ef8264fa8bb599acd8.jpg", + "title": "Cute Piggy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/add2b24b2a888f9a272e7376518d4655.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/18d026b3b400cbafb2669f142aad39c0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fe4b4d0011472f5970e2885f60314246.jpg", + "title": "Pink Cotton Candy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fe1711772698a775ab20f4bd3c441d99.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eeffd0c594d1b7044b060449ec7a4715.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d72365aedb9414f5174348e55e5d3623.jpg", + "title": "Cutie Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/377ae4cbdbc897a73b4259b620132c01.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/088d80df94a3fd2702098da65bc4decd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6851ab1eecc6231226ff302ba7310f8f.jpg", + "title": "Happy Corgi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cad4a3af8adfcf383a2810c16bfb831f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cf8230edf1839b20071db7c33623868a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f99b462eccce85eb65c968f1f2510566.jpg", + "title": "White Cute Bunny", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/06e836cc24e02243584c6c13c4cfedd6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f98073ce34d29e3754fc7150f67cb776.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d4fb2469679ab54533ccee078dc2708.jpg", + "title": "Galaxy Playful Panda", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f65862a82d01a94247c1941dd753590e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/492fa1573934563798d0c79568232531.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/418ae2cfd37bf9ac0280e213757f1522.jpg", + "title": "Cute Puppy Pom", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/71036704fed642da39281b76e9c1700b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2858b2278bad3df4f1af1b6edf99435f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c6550ae79acfb892c8c570dd53273768.jpg", + "title": "Cat Thumbs Up", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/934270354fbdd93abdb7e61c0d448737.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/84e7ed1062e0993a57697c6dc303e7dc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/668f867314b34c2367a3c10dbc21e320.jpg", + "title": "Pink Watermelon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1efebcc4212b7783cc2e434f952415f2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ff271f63f42daecef4aac97e34550271.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e6b71c11ea277f1e412133f74ce236cf.jpg", + "title": "Smiley Flower Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ea052642226a7a3cbe123754b1d8bab5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/72b877143fe28f99231d1bb067cace66.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/baf84b54e696be8ba29b1c1c65418d9e.jpg", + "title": "Parakeet Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c0623e18666b97fdf401e5e7a2af7a39.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/93a86d8273cddfea10af18bb709000c4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6d76eaa1a18efd023c95156c8992f646.jpg", + "title": "Pretty Sloth", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7fc57b7ee780b96fd4e8bff70b5763d2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/22514f23d7c80121faedffc925b2d7e3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2970ed509539dc70a5a284c60cc1f8c4.jpg", + "title": "Cute Galaxy Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bf91c92dadb529e5ae2ba1d33396c549.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a148d326eb26a4dda8db84d12c125e91.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6f3997f20c5390d4fdde3dc9e60572ce.jpg", + "title": "Pink Pineapples", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/852386a4418e9d24cba64e30dd37d6d0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/84aa8ba27f308f1f3b86c326bce0d8a1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/927ea8af09e4dce88ff72aa46bca7c4c.jpg", + "title": "Cute Tongue Pug", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2500193c403d4d925a07b12149806323.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e4e030f4a64e29c4da5ca10371023be9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/afbcb5c7a84fd8444458b9a5fe0869b4.jpg", + "title": "Fashion Alpaca", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/19780999d9dfb9d7283681f0f9328aca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eb41d4d32572d68bad43872b0887d641.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aa557cb09012006d622fed6b586dcf0e.jpg", + "title": "Cute Pink Smiley", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/54146a81b5bff1b29755360ec259860d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d00e3b22ad96670abbf1ae70f4f0a3f2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fecf8e7dbe0d35e645b4dbfe355b01a0.jpg", + "title": "Glitter Gold Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ab2ac2c35b8fa2d3b243091d4896f7b9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/09c5ef252e0067a37c40a13faae73d56.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0a1b9ea7a0bca8270a2025f6f4c539df.jpg", + "title": "Pink Cute Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33ef456f53a9f263056c2f66d88c7e88.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d04539cea7997b60516a5f06866b3c17.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/92d406285d76bcabbd92662301188cc8.jpg", + "title": "Pastel Cotton Candy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/389744d38e40eccbe5321c76d3357c36.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/05b2eba00e87dd47c290adfdcadd4979.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6148b9341c205cada4205fb2613b83e7.jpg", + "title": "Angelic Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3cd3f08256cfbd3409333dd811d81ba.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1320a2b93381a08a05aebd996f921eff.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/153a8ab6eb78b96e811bda7d5a7c5511.jpg", + "title": "Glitter Watermelon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5fd2e8090d9f3cff2672e0a622e1ad27.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1029f46c40e5b005408470d05dabfad6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/26b99ada15375d7ba9f5a0848396597f.jpg", + "title": "Romantic Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bc78115ef660fdcb9d8f020f71506c0e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e03436c7f6a61c455250716b23ea078c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2aa3383ed3627758001c4d3b528343da.jpg", + "title": "Chilling Chilis", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/77d9f86bf98e53be602df0af3b1fc812.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/24cec57e118b9b6b22584747129d5af4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e91e509e73465951609f810278ec9c3c.jpg", + "title": "Watercolor Pineapple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ad5aeb56a7b1d7343451a21719e7b7ef.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bd64de80f6e290ccc816802ce8c2809d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/646cdbc561f08e35a31d257e3857b994.jpg", + "title": "Floral Bear Cup", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/886a8aea35e468fe65558a0e819045cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a1bb0167eb3bb2f9b4726f324ee38460.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9608d6e52800a271ffb58efe1f3acd80.jpg", + "title": "Glitter Macaroons", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f4b2b928a8cdf1803da7bfc1bcdeb78.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/80d4a9551abe298fd77891b99b6d0885.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c20c61c67766b6eb6b6747a9c7b6ef62.jpg", + "title": "Kitty Paws", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a88c8e958e1fd3d0faf7e5511084fca6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/283b5e61bf797c138e19cc2e47fa718f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/72897d23e69b92e20285f867d9e2f81d.jpg", + "title": "Love Pet Life", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f0c78374e37a43deacb280f16cbc4e8d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f5c04fc50792f4b88693624953995753.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/60af3509a57d17279055969f6f3ac684.jpg", + "title": "Funny Cat Face", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/016e837c297900507d7b5be03d4211a5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e2ac82ef4c9bffb97ba3000660fa569a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/339187477dc314f27d37aa6e3d033081.jpg", + "title": "Love Birds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/663df7425d314df83bc46b75528075e4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/caf8614e167ddc17487ced306c66776a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1c56ad42b17cb01c911c0d0d17167f97.jpg", + "title": "Pink Couple Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5490bf09d1924309238005051096807c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/decd4dcd3c2df3adb34d886b9cc2bd2f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/61448e510b830707607b8bc630452c48.jpg", + "title": "Cute White Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d20d4fad1e9886dbc58360b0fbe0fd53.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f10b4949ce7dbd83a61c13828411d315.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a32631b40c72e74df808f1e299475153.jpg", + "title": "Cute Unicorn Fluffy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d5fbb9afabe4b222b27a99cd5d12e69b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3d6dadbd63d679c9ca20ba1fef49f7e6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/35a542872fa665ba51a89866079a5708.jpg", + "title": "Watermelon Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e1b33e74932f508dd8919a5f7df8463e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1c717f202676dd3a3388e79a8e02e6d1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/66fcc417a0d8fbd75c376b9eec2453ae.jpg", + "title": "Lovely Ragged Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/51f4c9c699b7db37ee6e18e57ac884b4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/10d6816cff519d3c80052e5034222130.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e9ba4a3a7cc79f6551bb7d45b8c37d4.jpg", + "title": "Chubby Puppy Tongue", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/85ba45ec82feff202f5b5306c7a19240.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0f7a93b32eb458f345d597920cb9c02f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4558dfe1fa88f753ede7d540a8ae68fa.jpg", + "title": "Galaxy Cute Smile Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9d40ff6b717fcd74305b014adb5e8df5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bea134c74c5eb2f464c186d5ae1bf7cc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e6b6096af4efd989a93df342a4777394.jpg", + "title": "Flower Bicycle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4c8afde7e0e3409d898d57aa209da710.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/793de94b6b963aed5ea805ae995d9a46.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8919e02391afea65e66150cfc19d598b.jpg", + "title": "Cute White Dog", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b4ff3f7eaa7c62b5649aa17f428d86df.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/428e2ac96d29f039e3652c973201ec36.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e00200750728f63d28dadd4cd4eab6ba.jpg", + "title": "Floral Cyan Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/26999a9b79c24fa56731e4f7b074b725.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3d8724afb7199541fcdfbb69e4aea1d4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8c5057b71df2f1e15724b5f7cc00e0e6.jpg", + "title": "Cute Llama", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/97140f4992e9d19f5ab0a16b309363ae.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d350883b9b5650490b0dc0c3bcd0f5a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cad32ed9805f08a9342513ac768174b4.jpg", + "title": "Rainbow Butterflies", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9c996c6ac40d9b0a57708f143b16cac2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2f4875c9ded4fef743c37e1ba000dd09.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8fdf6f6103ce6fef61b70ef57cb0e699.jpg", + "title": "Cute Innocent Puppy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5c17d8b2d5a6c4d3ca52108a0cc76ee7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/75518931697d7970027f9e2850ec864a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/28672c47ee17c791d01228f315eb5823.jpg", + "title": "Pink Cute Corgi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/610741c38cacc86da6e30139c7c9986b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/68f675938d544e88122f7527786fe808.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/160c87ff653e588997af81038e8f4767.jpg", + "title": "Cute Circus Elephant", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/83ad65082a86955834932b2d62efdaa5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c7fa7c64d43224e49e55989520ee0c84.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/37f420e172afd5c44acad07e6384b87b.jpg", + "title": "Glitter Bunny", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7dd8cd6f5d76999d3b2172b3bd0c6297.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dc26098b74f95ac49a4846b9d56be2d9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/06eeb7f8e72d1f58c6d068b272bed384.jpg", + "title": "Summer Watermelon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/da946583097e94fd3eadaf2c69312ffb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ad4fbc9d106eabb4c46ad8c101b41f2b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2bb328c679f768b83c41756a7bc28654.jpg", + "title": "Cute Mushrooms", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/454e754c41492134cbbebe35f7d9533d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7701d34e13a04834cb0bdc4262705e5e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/095bbf070ffc80db98d7111659fafc25.jpg", + "title": "Candy Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/11042a5a3e062120fcc63ccff8460ab7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4216760c1057181596049e1c748a4199.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/60fde2478da4de86f251425bc6f4852b.jpg", + "title": "Cute Big Eyes Puss", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0227219a3f9fcef9044dc7a282bf9378.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6dde6426d1b25c9870a9a79ea1b85ed8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4c7d8b03c95efc99d6cff5f5f54e051b.jpg", + "title": "Gingerbread Man", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2a740dc95c27b22f4f596d27387e38cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/880c79f4a39681016737aa38c9a8f491.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e7c7c97690cfbe9c9c1493b1faf17f4.jpg", + "title": "Pink Cat Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/30e248ef2c6d9f1b90a0255695672846.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/89d898ba0d1257d4287a8a5548992d87.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f056f8ad8102f1754fb6997c9017a301.jpg", + "title": "Rainbow Pinwheel", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/df5e6e69ebdec08ba6763d62013d3f50.7z" + } + ] + }, + { + "className": "gravity", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8379d2f98ac8efd25ff3e876e2d6356f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c22f1ded0493b39af61fce5ab3631503.jpg", + "title": "Broken Hearts Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d5fca72596b5a5c2f192100160018007.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/acb31983442f2553d339cd17b036e38e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/47b8ad6c1289648fc4d601a7866728af.webp", + "title": "Skull King Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5e565d9bc553269dd3bf3c6f66c78a39.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/35ec9b5d5c32b50456f144c8a71e090a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b49ed3d5f0c9777761c8b8a667eeb444.jpg", + "title": "Gravity Sad Emojis", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/af190067bfe19b3415a80219d095aae8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/009717f7821e1b3056bfa2bbe4a04543.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/538c8d7a82e6ff2220e692c14e799d88.jpg", + "title": "Gold Diamond Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dce369948b78754d3b0e5cb5291aafed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/47623b3cc27dfc0b3b765ce0b0ec45d4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a6e960e5f774d61c0b04ed252542e73.jpg", + "title": "Pink Roses Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/77481a60b2bba8e63a9f2e0e97fb38a0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ee67b8a6e8b3833a7e5ff58563ae501.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b458f7c397b9bfec2efc257249f0cd09.jpg", + "title": "LED Lights Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24d3774dac352c435d21b76599514adf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/62a63936d535585e9a833621d67d48e8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/33957e59ee44af2ab586f096d936bab1.jpg", + "title": "Love Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c519089b14f1c5e9c7c604e2a8e80e4d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/27fcacd2851ec08537bbaccc28afb637.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fe86ba64017450e52af42f7b7648305e.jpg", + "title": "Cool Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bac34a61f99804094bde8c66642454ff.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/24b8388768cb3d561e49ad811229d005.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8470739680b5af725996a895b180597e.jpg", + "title": "Galaxy Weed Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ffecb7f0f1324cffd353765284e1b64.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f5b62ab1dc95ec8785ec05a5481944a7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9425b1e07dc501ca62e7493334ae1286.jpg", + "title": "Gravity Water Ice", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8b461489319a034318572fdc20cccb17.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8269783a50d34f7c6aeb28d39e8d05d5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8bbd24595c4ebdbb3c01c1dd1f3d2890.jpg", + "title": "Snowflake Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/71809cf2683774f69f622c26648a52d0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1df34cd5fd7e963f2d713b87732e7b04.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5a5f00eb95871a695fbbf6ea1df834a3.jpg", + "title": "Funny Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/76abcffb4606d7d3565cfa95f029de9d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c76369d1afa79f34142cebf116a16b80.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/63d0a9fd32147fcb6c7f68756fb7d7e9.jpg", + "title": "Pink Bow Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3953ab0a5337223fbaade485316463d5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1c7c6e16cb2713a16d706abcab107175.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/67e010871dc07f3cae0ae2a6d4bd59bc.jpg", + "title": "Neon Dice Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45c727361ee7fd0c779ea41a7b9ada3f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4bca0c3325596b551535d06dc14d47a0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cf99a2c420610c96f186bbc18c7b39e6.jpg", + "title": "Pink Pearl Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/89680faca4b29a4b9d07140af2d77a8c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ef39ebee379e24616d242a3d1db3bbb8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/664d2bfc49340bae4184ac3e0e232f3f.jpg", + "title": "Christmas Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1a9c53d2ebd5ddce34405d93bfda6444.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0156b62a020c9aa38c6e47c55d2f86b6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0bf116b986754794318931224361710d.jpg", + "title": "Color Candy Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e5fd8eb1357ec5c612bf91fe58b45a6f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/927b5f397b592fcf7b29d3fdcc2c5f09.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/de76f850f8be2fa23dbd8bb91b03e167.jpg", + "title": "Neon Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1c0168bd4a8b1b48c86e00a1b7168886.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eb4abff4831a3841fa5f8d08ebd281bf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/50d7e818b0f61b845e9d4383e8c6fcf8.jpg", + "title": "Happy Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/51cea96a5e87786a9c5926b2a469d02e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e354a924b960c202691b205f33ee8b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1734355d4edecf29197cf40723c436a2.jpg", + "title": "Diamond Live Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/baaf7a2905d5d4841b824a31aed178d0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/393bf1e6aec4651a64a752a6f8fe58f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9173438c70a5ae2df4edccfdae1138af.jpg", + "title": "Rasta Weed Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f1643b1093d94b53917dae25895e6511.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/732a08d2817ca777cf046a4692236a6d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/30547c49435d173db5e8af32f0d10fbf.jpg", + "title": "Cry Emojis Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6064073e8a9e26927a379847f1ab33b5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/69ca06593f40d0b0f78128d2740bfed0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6524fb6100f85d909b4b8f0a1a1100ef.jpg", + "title": "Golden Dollar Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8bfbc1ae70502f247a4be1d14a2c978f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ef14e4f3d9fb653508a8cf110e1fff94.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc9aad66b686bf839f1ad2b036e07c11.jpg", + "title": "Gold Allah 3D Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/da24c7cdf2c4d4f58590cb21a1136915.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/49c29cf5bee124a04a04b4f2e35aaf18.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ec81ae8f6af8dc77be3c0b045aa5164f.jpg", + "title": "Neon Hearts Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bcdcb9f3e91a598a02a078d92d7ffd7b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ba7edb5474c22916786703017563afd4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e7aafe7b2d089d38158fe72c61a16c2.jpg", + "title": "Pink Butterfly Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e9088fb1b2d764e201e67ea561becbcc.7z" + } + ] + }, + { + "className": "neon", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/60e77ebcd281c671ab8d30f4615bd2a6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a46782b68ffcbabcb2955fb6a62a24cc.jpg", + "title": "Cool Neon Wednesday", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/59ee83901a0baf53c41a47558ddd7246.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a483ef7572a6470d17f1ee6a8662cbbc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6eb009e07c7b67591df7adef294faf2a.jpg", + "title": "Colorful Neon LED", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fef5bcf9a6ec27db563aff836168795c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/18644be1fd15e56659d43e492218c4b6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dfc915aed9997f9e6613fcaca2ee0da3.jpg", + "title": "Cyber Girl Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7b292eb7f42707cb10bdba591f9ab595.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a75f2cad0509270343db40eb19e88d5b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fe7c74057ba92bf89f49fdb4b730a7b1.jpg", + "title": "Pink Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f7ecc575cfb6ca33d48edd67415bb43e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b7b24c5938141e8e8bde0b237384b159.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/337f290404725f4ae7ac1c686e65a098.jpg", + "title": "Neon Dark Sasuke", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/370c4e08fada63e7677aa46bdf657a41.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0a712190ddffabefb6c578eb639c407a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a0f67730d24b9713e0434169430f1d36.jpg", + "title": "Galaxy Deer Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2dd772a8e056808e512d9aff6e312223.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8c1b317e62b5d21c7600bb0f1904e1d4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc241262b4887fa4a1a441d2e0a37265.jpg", + "title": "Love LED Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0dee57c3241c8ec6d2de8acb20d50435.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cbea38f0e67bbe65bd751fa4d652471f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e4b348cca86ba85a630ae8da0ebff427.jpg", + "title": "Smoke Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3ca052f525d62a83a29aa7ffb20065ad.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3beaaa673ee268a430d693ecb47b03a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0f735afd7b6aa6dbd62d2281d3e6d817.jpg", + "title": "Neon Green SMS", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/32b96dc24e956ba09fa17cc85488704c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5b97c94371564b94bdf3daeddbc13aee.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/afb44702ec15535ad3b043a1341041a2.jpg", + "title": "LED", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/56ed64ff598806b83fae7231ff9ec8d7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed684b67855a99f9b55f95d8e383c8c4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2401acf64b80f5a7a8454fbef3d0c377.jpg", + "title": "Neon Nike Green", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/94a104a30e894c8bd6aa3879b7d4a728.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a0472c6ee4169ac7263e0ddc819599bb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3819bc8f3eac85c49da446314e5f333e.jpg", + "title": "Neon Smokey Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b51bb61639f824bfc53bcc0bfa132499.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7f2d676137b23f7fee546a9a0ed3ef88.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/140ad668c6833bacdbaa21d2b9555755.jpg", + "title": "Neon Blue Jordan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/12cad8361c422d05c5f1f176409775aa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/536a7bf24ae63b1290145d39ed94d3e2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/909a92b3101346f052c7d5a94d58d46d.jpg", + "title": "LED Cool Cat DJ", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d70fc6078648745c400fe3612877a841.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ba97361c79a9639d3c6099e219c2b43.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/97a1d4230c053cec2a187d9c39e5b449.jpg", + "title": "Love Heart Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c96cedb306c2b6295e902a42a3539c27.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/48826884c166464602123f683d7456e6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/72b6b5ffb54fc82eba9e7f854acda4b8.jpg", + "title": "Neon Sonic Knuckles", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f714799c51d26cb71c5b79537cf12a1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/60d09cb601d85f74a8689c7ea8db4b38.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/635dcd5b39d67d31afe5527419e33b9f.jpg", + "title": "Angel Devil Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0a3d998d998a9cf3f3ccfd6bef7b16cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1fecde3558ed806bc19c584ff7a832cb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0a58d1e69100b0b32c76ed0ceab11145.jpg", + "title": "LED Neon Glow", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a3bc09bb7ca55fcd468ef39b0621a1f3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b663ebafd26af8bbfb5ba8139c414ce6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8803b55c925274318861fe2b3e17d3d6.jpg", + "title": "Cute Neon Spidy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ae23d32406914f3940cbf1fabab46c6a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/606ef23a0315bfa4347a8a2b4ff92e93.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/34f3bd478f7ccf52527066b0adfdca46.jpg", + "title": "Neon Drips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ed66ce259f5f49c0906e5f33ae9c250b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ad05d91bc8f49781cb67a2500db8c8e5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e25b5ada432407df76e07ce3c062a22c.jpg", + "title": "Neon Blue Kakashi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/76550924f45dd98e8f838062b719ba86.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/df9b5c458ba1d961bd679e30717d45a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7a93e9f47517baa0993573afcec4c648.jpg", + "title": "Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f5ba85b65236bbc8b90a309a4d670e54.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0f2caf67a12c7a224366b321d26cd155.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0067adb5cd933ae5327137ec7f6f75e3.jpg", + "title": "Neon Rick Morty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7683cda31e1bc26b053166e745879bf6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8f3ac6a49e6f52fb87549ee2b30e9e8c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/661b2523f2289de48078cb53752ce7f1.jpg", + "title": "LED Gradient", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bbe08eaddd7da0678926947156fe6620.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/de158b337e61826fb58096a34ea75de3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/528b7213e01aebd098b79939d62bbac4.jpg", + "title": "Poison Neon Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/845368ab910660a876f2aaaa9eb6fb5d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b437a0cac998109d39dfa9166534b311.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b7e53a86bfc422e70b4adf66f5a82a75.jpg", + "title": "LED Laser Beam", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3c3974d58c977fd557ef90f78d6a5e05.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fc563fe4be5d5dfa1452f5542e71842d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6a430219fb6de51e5523f9f34abe3615.jpg", + "title": "Purple Neon Kuromi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b7b62b0aed4ca04d16bfd76337232b15.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/efb809ab7a4575009bf57ede2b6c3e30.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8372a894bb2dce6d007fe41c0ad51f74.jpg", + "title": "Cool Neon Gengar", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/488423d05be6e411d0b8adb7f64ba97b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d832c8361d0f5b52785ba9b79156c649.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/31a5ccbe1aad0c20bd8d7c98e8b8b7c8.jpg", + "title": "Neon Monster Claw", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9e31ee77acc6eb9ccb85eb6432f11d02.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/deabf9be9608345c2a553be34de81350.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ba516c97c483ffc404f0a5636cf9515c.jpg", + "title": "Cool Neon Hero Dabi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/07131d0d1000f506273a806932e3cc5f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c7aad7f3a29e53cd0624fc26dd37c260.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2e00e0b39595c2daaf41fa0f3a3ab13a.jpg", + "title": "Neon Voodoo Doll", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a995ca2134f585fd94f1c348acbbb781.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d546793dd7e668416f535595ae5aec4a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/467bbe0048ab6f12ad0962ef4a8df143.jpg", + "title": "Neon Cool Itachi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/90bb0e08d2902dfd069b5a9e19ce7f27.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6a3896f2f0fce5b3ae97d28f2643aa52.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/23ed7aaefb5cb96adb0a3871d88d5b69.jpg", + "title": "Neon Skates", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ce1502902b0634b7b70280f95b17c83f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c30ed4e01fef2ef5a9148f03507f6b74.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/41dafde53c8fc63331bda6bd2828cb27.jpg", + "title": "Neon Obito Naruto", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7f11beaa10ea194543d5bae717657103.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6c99d50624ccc3817c9cc22d037735b7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/53bc8b35dfdc3d33048a62e75b04cdf8.jpg", + "title": "Neon Devil Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/81252e015d5c2b691df1d4a80f9000de.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9e310b631d40242d1e7b192e78380d46.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9dfc2e65f04d6074ffb73ab55c5a386f.jpg", + "title": "Neon Revengers Mikey", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7a63cc8d4ff044f8bdad7a480968683d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a1439573bad0fc52cfd24a68538ff977.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/909ec2a5c6e99359de9977b2afa1b851.jpg", + "title": "Luminous Neon Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9d6dfb81a5b6bac2635cf8cf3c51fea2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/81eec40333da5ea79d08810a414a8149.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2dcb78903c70b53336bdc590c8eaf045.jpg", + "title": "Neon Future Yuno", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3588201b9dd092d09a0ebde912d93f03.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/350bcd61eb74ad3b56d34f37a1191458.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ff3689dcdedffbb2b8d8a8739fc9590.jpg", + "title": "Sparkle Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/043e51135b9105eda2ff2fecb112e90e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a05cb6aa0c4d5b4fee04a1534bc6ea04.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/580c7d0997c93ca57a6c4c62fd85d6d8.jpg", + "title": "Pink Neon Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7aab01a381bf315210813cba67afaa0d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3589f8ad6c27961b588b2e3cbd0c00a9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ce253563206cade3223d16f00cd748cf.jpg", + "title": "Neon Pink Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/48571d44f1075922ffd5d73260455417.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/03c6e8b3b016357ccd94092f26e82688.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/15d2e42a5bc5e5e34c5b0d0add4f568e.jpg", + "title": "Neon Ice Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/13ffc8913f513d8b1afed704a3a7c08f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/66726987937e0f6d01db107eb5de071b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/15fd8c8a57e8ef58a2c2bba56a110740.jpg", + "title": "Neon Light Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4424ff85338f7635e1b98caaeba58ca4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/573323a347ae7dd8d627e81a783773ea.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7ab41bfb62838b5e1316ec4327e68f96.jpg", + "title": "Neon Cyan Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6288db468e0c40e7aca66a8d2eef1e69.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/10e454c35a582f1b7fd99613acd6912d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ec69f889e5619dfe230157b3084d976.jpg", + "title": "Neon Sad Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2d2581fac351c95318c03ef73562d14b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1944d1117925d6a2fe3798f485093153.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c8d2b9a67c15bff8c1361364b74e1ce1.jpg", + "title": "Ice Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/adb6ce4bbf8a2d399159d3c2648077c8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/027c3a8d51b22f0551412f8de2cb7f15.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b01f0e993542de81222e3b7c11dd77a6.jpg", + "title": "Glow Neon Tech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/be71e44e9b7ce4c366314f748d4359d2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/84b5a0ae0b0ef8d554cc021cb4178774.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/155c1ec717e5109f14e86623cb14a4d7.jpg", + "title": "Neon Party Time", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/703e7dea86b92271165e12cb48f2c774.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3bb487dcc21229a024e901502058ab67.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b16cedf4809360c7b7e3cbca82a86124.jpg", + "title": "Neon Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1285906dc99219c01d1daac6615ebfb9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3fc1c83f59179702fbcb7a64c08d2d7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5c5c6a01a0b3a4805b13b6c33ffa79ca.jpg", + "title": "Sparkle Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a882bc3d4312022446ef29674543352b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7d550de0e0a5a89ee1edbd3b2ccf3b79.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b0571e339a6263a11e438e6d03d99487.jpg", + "title": "Rainbow Neon Stones", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/572c8d42638f125bc9d8ca89f970ad3f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb51149ccf5d34f183fd55aa53d550b7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/05668a1223504be51052b428159ad635.jpg", + "title": "Cool Neon Dragon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a6b6e408f0d7b4378c556f8799a4fd11.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f6340d722496ef89b25636fe4f8e7a14.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e3c84ac1bf4b65bc361b87eac8d39bee.jpg", + "title": "Glow Dreamcatcher", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8e213591dc9ad001af977eb7b5c47beb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/772ec54e339f8a55556d6cd819684899.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/997cc6e7bdf9b2ff65dea51c8acbfe53.jpg", + "title": "Purple Rosy Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dc1fd9c15a0a4a6521ff7921b5985843.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/80dae432335427803240048ee96f7453.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b5a11f52c33269cba0fa328214c18338.jpg", + "title": "Bright Neon Flash", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ba327a22b874dcf1ae1d7d530ea4899e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3b840166fddf0c49ae2ea83ff57f2a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4570d7925b569b09606e21bc4e8e7912.jpg", + "title": "Red Neon Skates", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/21c2f402c398453959aa717c3ad774c6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0229346c5b6b8a70e4f47fb63d63c1fc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c046f8d7dd9e69ba66eb8f3fb4b60d41.jpg", + "title": "Neon Glow Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3a72b3e1997b88878a9286c2c34bb3c0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2719969ee966f9c4ff434b261cf20462.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/34e92e4e7aff9fa538ef4a0c1db0f7e6.jpg", + "title": "Neon Urban", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9591367b7cd0a79b32ee6c7e0c6254b0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9b1f1ee39dbfd446b3a53671efd0af5c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a0c4c798e513d1d897290d42b31449cd.jpg", + "title": "Neon Blue Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f32526079893a191ea53ceec0f2b7806.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5178d308fe7c72a9cc58502e6a3882b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/91193ccf4623c3d26a1ef9f365d9e8e8.jpg", + "title": "Heart USA Flag", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/02b3fa83f300a8165702aa7e10969b41.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fe7d5573f8263aca3b81214ceeb5537b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c1373139ebf540430ca4eb099897d9ae.jpg", + "title": "RGB Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a68c793e6d4b42498010121e713aa78c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/03fcf4459503010badcab966c2bac474.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0ebb8a152de114e7aab243ccb21b7aa.jpg", + "title": "Cool Neon Blue Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dadf0750e963b158cb1beaa73b07a40a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc61f797773baa2644bfe463e8437455.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5f52e012e5e33b7968ed025b33f94f1e.jpg", + "title": "Neon Light Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6d472b643915a702b2db736a73b4018e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/967541749f2f1442db1e9a23e95421a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9493c05cfdb60a75bc0d6ea3651992ce.jpg", + "title": "Cute Moon Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/efc2ee720eb22b534f44656ac50d34c8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/af85cd5e893f4a40e4c3155c32d84bc4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3bd981a4ce41c94e0b972c0d3e816758.jpg", + "title": "Fantasy Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/55b948e86e5af2bb0801186dfd5e5b9b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/578f7f6ab799fbb336df6935643ba57a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3c4471ad2ae420529ba1edf5aa263b9f.jpg", + "title": "Neon Cyan Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6012c087d825917986123ec62f75300a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6e8a6b98517cf18cb804413d2d948a68.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/08d3a65f3a0abf105459a22a6e179167.jpg", + "title": "LED Heart Balloons", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e35161ee313ac776fe6fdf89b62b7ba4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/42f097a61e4aaee26c2b856417a2f697.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7da8d2ce889ae0d3adecb46c42643e98.jpg", + "title": "Melting Galaxy Diamond", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/10f2cc295a8f03b5ec60bfc4f7c8f632.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ba004cb3d80a65fed4a8220cd37be833.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f0924a165d5dce38c7747c7f59f1f851.jpg", + "title": "Neon Wolf New", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cf515a6bc962a9bf0971f7e04c99aa4b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb0fd902928eaac49cb138cf0b28bf51.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f96e163819b52bdb27e3ed54903d0770.jpg", + "title": "Rainbow Neon Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8e1f48eaaea01ed0e13bc14234907973.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c257244a09e277b5232535b921fefedc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c439b833d45f24c9c4d2fdc5990942cc.jpg", + "title": "Red Rose Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/12c31ac3d38f33adeeea1817b945b609.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c9e192ed5631354cff7d23b41c30ecba.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/17bae1e387c327f37e592b51d5be6543.jpg", + "title": "Neon Holy Cross", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/10f953b30582797c1ddd70f52b80164e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7309156fbbf837fbb9f3dd82a105e1ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a4e2be7942ccb406c0e0fbc20d0e4297.jpg", + "title": "Neon Pink Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7af5d923d8c9ab250c3733c1dbd3acdb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c6cf67aab7f57291ca85566078ed5173.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/215749c43967782628ba022f22791897.jpg", + "title": "Shiny Sparkle Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1541dd0c96fe87f0ed658dc8d6b72cff.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/daba26b7884488963a089dd4e887b39b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f4f678ff1e4fbcb63762254b6a7c9c5f.jpg", + "title": "Super Neon 3D", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d69633fc9ab32012aac45d218964bb3e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/02192f2cc92ffa57531f4aec6917b12f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a51b0136c56954221f7666729e3726d4.jpg", + "title": "Dreamy Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0dc013fbc9c9787f8c69cfb87dff670f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d694c14dea1c80d53487d7398fba7e17.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd6ccfc106681610cc9a7bd6672be8ea.jpeg", + "title": "Hologram Neon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ccb91288b32a0b0143ec24d2fd571982.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cc3169c2853c7c6ef76aa341262ab803.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a82105f908e63a5c1fed450f855f22e1.jpg", + "title": "Neon Finger Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a75373cf46ec40dd8c3f09a15967f417.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8ee74aafd96dfe8999d14716421a8785.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6834f9f0c4f47f4b4676b5fcd9cbacb3.jpg", + "title": "Blue Neon Couple", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fbc31a0ca907fdfe3b7ffeba70e90d09.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ff3ab70e73b2f2010dc51082a2810ec.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/285f465e37b821111674ce1b525666c2.jpg", + "title": "Neon Pink Lips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/196222b8795affa20a75bb4cea50f9bf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7b1b1cfa708df3f5db2acd7d27528607.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ff8444f58fec022f1a2fa3cfc61e6ad8.jpg", + "title": "Neon Galaxy Infinity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6221c03540253a179766a3de5ef4114a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9d3d502269bff424c24a82913581a585.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2f7b150d555a1a4fa059e808f717888f.jpg", + "title": "Neon Parrot", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4f1b07d5bff8a6d702b9663668f408b5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6f2ac1821ab819191cbe87876b0ce702.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1389697dee2a2e4b766236b8b6904ed1.jpg", + "title": "Sneaky Neon Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5762b6214e99d62de3059abf5cfd9944.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5eebf6fc6d9caf5ca98484312ef18fcb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4e352413da42e754653db793fc0f5771.jpg", + "title": "Sparkle Neon Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/92bb466f82c45b1877f3c18e18467884.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8c6a4c38c296e63bc92fad932e6a7e8e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ee2cf23b3b28608dbb4d8dd407efc04f.jpg", + "title": "Neon Pink Flowers 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3b89ec5ffe89b3d69004cacfcd2b16b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f88b189f63a4b19fec1f9ecf0d98de3c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ff596a859df67ec98a2c8cd26356a6c7.jpg", + "title": "Neon Leaves", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ca20175a65183c14b0a4376fe555f920.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5036c290ef1cda9387694cc283df998b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d30381f56dda08241a7ca109c0cd16b.jpg", + "title": "Neon Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2a39ac15685fab2a55667886d4a820ec.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7e3cb0620103287d77b4d334a63dfcd6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/01793f1c984f37850b904476bbe892f9.jpg", + "title": "Neon Army Bomb", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e1c08957865041d7e8dd5491b38a9c3c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/53dc66f5232099cf41903dfba6ac66d6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3bf915a6b5c52e49896bdc5e62909d94.jpg", + "title": "Neon Blue Cross", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0cc4d6085ad22e41a110acb776ce63c9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/42397e7f5caa7cfcfde15c069cfdf6b8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0e92526487439b64944a456839e54c6.jpg", + "title": "Neon Red Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f246376590b509c63173963c71335535.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a27d7bf9f82251b2c2df853b437ad8ea.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f11ac41de479581a950380183082ed00.jpg", + "title": "Neon Flash Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/85f5d84f28235aefc9e7e86a74255255.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e8e724c7a91d8a349fdce0cf214d489e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6278ecade528079d8417dafa80df70fc.jpg", + "title": "Galaxy Neon Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ed9486794b6c0a45579c069d670bd0fb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6d0c177cd40f4a89203b2f82fc40d7d0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/caf8935e9933b891067f2d9b93b04b96.jpg", + "title": "Neon Purple Stars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/da9d1a8beec78b72b87376df2d84f7c9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b9452bcd5226ee38df98e2b4d9353268.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/295eca202fdec34943aba77b274bfe02.jpg", + "title": "Neon Hello Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b547c39e7a27826f443dcd835a796f9a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0d8ae325a6ecbc356a1d3b76beca32fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b40d5a5ac0c06c1b5544b1fc8f99095f.jpg", + "title": "Neon Light Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/35855c73a0ee0071c5ae0f0e56357510.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b6391f1325cb4537ff3522e6cbaf6403.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aec6f96c99078241efa50ef1e5409263.jpg", + "title": "Neon Zodiac Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4caf1c07958c6c44e4a86700fd7aa233.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fbdb3fe93acc4bfd81f67f693c35e5a1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/383b98b2a6faa75d8d37af078a3f5838.jpg", + "title": "Neon Magic Star", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b66bd61e63b9d2cbf654a73f945cdfd2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/533c870869233c53a682f440181a0dd8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/26fdc1720c24082830bd8636caa8a11f.jpg", + "title": "Neon Green Tech 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a8a823cd5c13d1b79fb7e46be8c328ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0efdfca0ebfe535fa24746ae00d671cf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6543f6a165ba97f05c8304537f07ece4.jpg", + "title": "Pink Neon Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0c329de9cc35532911064c993186101f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6083fb212d0982441eccaef9ea2a2f2a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7be18b06d9b2c8cdfe410d66f6efa896.jpg", + "title": "Neon Blue Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9de6251a8e40f9bf06a6c185800397b8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/67ddef1241e92f2ebff89304df38b728.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a89cd91038a3da4085f8709a4e18a224.jpg", + "title": "Purple Neon Flowers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/04392ea481f44ae0dd921ca015578b81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/40210b800ef3b49c177a3e3eb71ae40c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4dc6c76c53ddfff8c8e44c2ce943e2d4.jpg", + "title": "Neon Headphones", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c99b4d797f3e7b23d91531cb2afe4b58.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/770fb6d3810b764a623724d991c7775f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5105aa6cfc9aa2a9e3c44bbf14f3b2ae.jpg", + "title": "Purple Neon Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bd0ed1d65feae6e0f21a56924e9b6015.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8720f300f071e95b3133057f005db425.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f8828bbb1a4055bdbd27c60fcd136f54.jpg", + "title": "Neon Water Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/545c8a96e798d61ee42ad7fe084b3a1e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fab28c214324af274da9717f0c8294e3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/512121c23ec24e96acc0998524da6a44.jpg", + "title": "Pink Neon Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/577d8fb6f2bc2f3937f7d3e857144e9e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/46c9e0eb2c77806737f72eec10ba9367.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/552b1cc242120f12c0eef752cb3dc4b3.jpg", + "title": "Neon Transparent", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/969cd0abd029c050539e6a3139357f8e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ff0387dca37f3e90d93be3b0f0856a4f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/287b412557d858c35499ea1fdca62a45.jpg", + "title": "Shiny Neon Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/10bd981d1434e89da71cea540c9e9f71.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2ff613db906187cfefbc5ee1238c948c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/386136fdfcda7d7806ff01991cb8d51b.jpg", + "title": "Neon Hand Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3901b0fe1c7ff7e752a8c747a0552cc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/33bb0254df22b4c7b8a45c8012c8507d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1fd21a804dae285c0d435ff01a9eb52c.jpg", + "title": "Neon Heart Lights 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c0995dcb1673b19ed6fcc3e89c8b54e1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d4ee2c35d9feae0f69c4ac7d9b0f510e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a41733c55a507c30928185fb6bf1a2ae.jpg", + "title": "Neon Butterflies", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2545d4b7f5c9cba1fd53865ffcc74dc2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/44e34be19666a583db34cafd2ccba178.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aa40c5f3242b2bd266cad581f6333f0f.jpg", + "title": "Shiny Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/48fa60fea2649b06176da567d300f27c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6931deeb705ad69734e337a2176c6fc1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b2f9e21a031b016c37b99443a9ae4aef.jpg", + "title": "Neon Universe Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8da5bc53cce5b56bd50ff3c012c8f835.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/856943de44c33187695d941d78c8981b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8f259b1b59e4233cc78b8a0aac63c46f.jpg", + "title": "Neon Heart Wings 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a239773db1ef8d383357e581643ae99d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fa78aba6163a459155fa2a56532aac41.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0aca5ac61afb8fc0b57370389ddbf90c.jpg", + "title": "Neon Lips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/51b7c9ee0480459da40ef4c5acccbb9b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eea7e08e70115bb86119c791498b42fa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3488a923522c254482c753a13454b55e.jpg", + "title": "Neon Heart Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f7d24431707410d1e3f2d381ccc7c39c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cac9728dcb632c387d90ad911a737e72.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/92cd223af4b01e54cd1b5e9b31cbcc70.jpg", + "title": "Neon Pink Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6db73f2c4286ff6d8ae767f2bfd3c8f9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c86396a76942b6637c84b27a26b7bb4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/91db1a952af766d731f24b2cf4989637.jpg", + "title": "Neon Flash Color Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8a1eb5714d1c5581a7f3fa68aa0ccba7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f7dddba03625953a94d8fb404b6362b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/90ec348f135dc4ba430e295e95832a6b.jpg", + "title": "Purple Neon Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/056cdb3922ec089ea5fb98390354ec32.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a056ed1c68b0115bc8d55937ff1f50c9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/382fa16b1d81c720edba3535ac80cf6b.jpg", + "title": "Neon Feathers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/577efbe36031556bdfbe4d59051d6148.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9ca563465c8657f1e5ec5a30ff5eb4f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/83122e82faf5883b718d4dd56a77e7e2.jpg", + "title": "Blue Neon Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/317ac6eeeeebefe97dff37bc3c5b1d78.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aa745f2c7fb83294d9235e642c0c0d92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/48739dd26072ea77e949d463d9748e91.jpg", + "title": "Black Neon Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/367349c394f79532673ba10edad65851.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f19a6154041a137614e2cf4d16bd5859.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/afc64eaf173efb47849bf676bc5bdd47.jpg", + "title": "Blue Neon Tech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40cc4728bc050fd0873320845802e94e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bbd160986fc12fd0a855ae5a150d8fbe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c4197e756e12a39f69643c065ff9287c.jpg", + "title": "Neon Purple Bright", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2b82bf2b3313fba885fa9227ee407422.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/76e022b002a44788a7a0fe87dfd77a42.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd00cb8a904731454f87e7211f810194.jpg", + "title": "Thunder Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ae0bd4ef1a787cddfd990d7eb68aa0a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c2db2a5ead2c11906c0e1e50b6fb1f59.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/382e19612a97dc18b4025f4dc91fc114.jpg", + "title": "Pink Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9183521a149612bd660e0ce338315942.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f906814f6d0117bd3b31a986a2bf8c26.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4b74180a0b2b2eb92665e02f9ee373f4.jpg", + "title": "Purple Glow", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2433f84d7cc6abd09c47c482e448fa94.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/64d84860f2472714b5003d7a9d4745ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af56c91462fdf1a0008da551a4d42911.jpg", + "title": "Neon Cool Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24e1db3bd670218af54e14b088ee2aeb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7e29a32d1bcbd2c26897a892dd82a365.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e291b627e01d51445a7ab1ff6a3c2ba.jpg", + "title": "Neon Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5041e519ee091d422ed30c8bba10f5ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8e472772f568cc79ffff4a4b2e3afc77.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a77100efe5f2bb872122c1a53551ea9.jpg", + "title": "Neon Heart Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8745dbdb9359c1782561b522c0aae5da.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c4ede265acd471d38da6b0a0ea1256f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9664fee2a58a4a8e46bcf236b86b8040.jpg", + "title": "Blue Neon Tech Beam", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8ee0da096bae4970c6b766e5a6e068e0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aa745f2c7fb83294d9235e642c0c0d92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/48739dd26072ea77e949d463d9748e91.jpg", + "title": "Black Neon Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/367349c394f79532673ba10edad65851.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f19a6154041a137614e2cf4d16bd5859.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/afc64eaf173efb47849bf676bc5bdd47.jpg", + "title": "Blue Neon Tech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40cc4728bc050fd0873320845802e94e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bbd160986fc12fd0a855ae5a150d8fbe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c4197e756e12a39f69643c065ff9287c.jpg", + "title": "Neon Purple Bright", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2b82bf2b3313fba885fa9227ee407422.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/76e022b002a44788a7a0fe87dfd77a42.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd00cb8a904731454f87e7211f810194.jpg", + "title": "Thunder Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ae0bd4ef1a787cddfd990d7eb68aa0a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c2db2a5ead2c11906c0e1e50b6fb1f59.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/382e19612a97dc18b4025f4dc91fc114.jpg", + "title": "Pink Neon Heart", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9183521a149612bd660e0ce338315942.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f906814f6d0117bd3b31a986a2bf8c26.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4b74180a0b2b2eb92665e02f9ee373f4.jpg", + "title": "Purple Glow", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2433f84d7cc6abd09c47c482e448fa94.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/64d84860f2472714b5003d7a9d4745ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af56c91462fdf1a0008da551a4d42911.jpg", + "title": "Neon Cool Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24e1db3bd670218af54e14b088ee2aeb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7e29a32d1bcbd2c26897a892dd82a365.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e291b627e01d51445a7ab1ff6a3c2ba.jpg", + "title": "Neon Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5041e519ee091d422ed30c8bba10f5ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8e472772f568cc79ffff4a4b2e3afc77.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8a77100efe5f2bb872122c1a53551ea9.jpg", + "title": "Neon Heart Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8745dbdb9359c1782561b522c0aae5da.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c4ede265acd471d38da6b0a0ea1256f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9664fee2a58a4a8e46bcf236b86b8040.jpg", + "title": "Blue Neon Tech Beam", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8ee0da096bae4970c6b766e5a6e068e0.7z" + } + ] + }, + { + "className": "cool", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/56aeb0b3f484debe1adc5dfe72000a3a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c8334dac14fc0499dd6f2a1f7645582c.webp", + "title": "AIGC Horror Face", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d256de70b9b9f10c57b1710ff39034d2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/76e022b002a44788a7a0fe87dfd77a42.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd00cb8a904731454f87e7211f810194.jpg", + "title": "Thunder Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ae0bd4ef1a787cddfd990d7eb68aa0a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/12cbe10458486410deb0e0d7c3d9ecbf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8e55766f14333a37c603f3e840c01cfc.webp", + "title": "Cool Racing Car", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7876f7469971061af083ae2b8d1a613b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/be711497a974f3dda81d107bd244c799.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/da0323f5ce23630b9990062c48cf02b4.jpg", + "title": "Dark Wednesday Adams", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/47992e828666d65d72c8ebb754b7dcab.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e1a2a2820955823179458b660f962ddf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b50c5ec68d7aedd2830142793b6f8ba5.jpg", + "title": "Cool Supreme Kakashi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3dab8d819cf8589f360d7268464dc091.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/07c718681d021e55af1334a46c8fe4e1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5cdc3aa96f3b6ce2f9796ef88b9f25c2.webp", + "title": "Cool Fire Ghost", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/67d62603af552efc41cb13ba40130998.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/95f08956fe4760d50f44da6707024543.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3c26773c9889344c4cfa440562e45ff2.jpg", + "title": "Zombie Skull 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7438744feabf3ab871209d121fe0c62e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a39574ca0fe4af8898cf649eda785198.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d8cecddd87e1468d3768e2b364e61c63.webp", + "title": "Cool Supreme Goku", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/68d540805df27db11b5ad4a6aab103bc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3905d1c93415fac07843600c8c63bdd0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b406fdd9e76d2c796fee839a09475081.jpg", + "title": "Ghost Lovers Kiss", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/867c8972f344fdd0838383f66943b617.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3cdc96a78cb98f3fa2f636a6e06a8755.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8dfeb33f9f06925da460ee6b783ae118.webp", + "title": "AIGC Cool Street Boy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/60ae18f18e1881346ca7a1573689b0d1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/022a797f909cf3a8ae735936b99f29bd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5fb18d7c1235a4c7a22533549a09d566.jpg", + "title": "Cool Tokyo Ghoul", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5604212dbbd85a71dd212da87a81a8d0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d135496be33ab7ddd6ab2983c62c7e45.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd6227a24ed15965754361688065ef12.webp", + "title": "Cool Fire Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b90f7cd1c63839ae902ea510420853c3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d92051b7b94110cab3a245503932a351.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a819327dfa112f9e86250f6325e87777.jpg", + "title": "Dragon Ball Saiyan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a14da81e5b70d78c29e7522bb4fb05ef.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a77c1e3384947d403730c24e987878f8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/071245025b0ebf3e38d53064af0297dd.jpg", + "title": "Green Rick Morty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1b623be76e2f55db8a85cc282b9df8fa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a0b99c40e1c32d8eda3fca5a83b4584f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9e0b1c6b6e65739d1195408e5f501717.jpg", + "title": "Neon Thunder Sasuke", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e256da87115618b9bbce2cb57eae56c5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/24b35a7bd02066173767de78741f731d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aad4dbaf0c78e16188ff52e5281a101b.jpg", + "title": "Zombie Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/56993bda392595bdef43b77efb0d8c60.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e747a0e22258790a593acb4496ca876e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/081e65ef9eef2fd97fb8e0b1af447030.jpg", + "title": "Sad Simpson Nike", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e0c271782ebf5495f97cb3cef52e3524.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/98f0673511e03a3ec593db83e64269ea.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/34a22286b89a5313e6bdcf3859278f43.jpg", + "title": "Green Neon Check", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7d865fa5d872b508a40b405d12e04968.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/00dc67ef068c51366b050e04df058f40.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c06a25972f1e94d12419757da0d4a04d.jpg", + "title": "Gold Allahu Free", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cafff2d4d25dc57e5f6be794ff570ded.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4c1d9da5bf3b19a9684ba5a1312a31f6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/202074ea9e72cb4efa152eb46200aff1.jpg", + "title": "Cool Kakashi Naruto", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/028c883129ad8ca296ea2a00100a5d86.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/51f78b4b9da17780d93d4d76b40cee4e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e880da55872419a5968c0bbdbd4077b9.jpg", + "title": "Zombie Monster Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/74ae8ce6b379a3daf3caa1ac3fa09169.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a51fb7167682e3ecc38bbc5c3480bc7b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5d21c102c0618087f14ba5ade775289d.jpg", + "title": "Sad Tear Simpson", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b0d3fb30fb073ffdccefad344308f16f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e7967fde707961b6462ac00536bd0a43.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/715dbdfe900bdc2fb802cec981eee8a5.jpg", + "title": "Golden Dollar Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/883a7599e21c89582de8904fea9887c7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/209db77434032f26696fc1977af5da01.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1e81a774be6b44cda2f61c6923ee78b1.jpg", + "title": "Cool Hero Deku", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f420f4c1b905b43d2e7d8d83b18b8bfb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a674c95a8f73dbf2707124a0dac96d38.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a3c5878a147829c1351cca1df44ec8db.jpg", + "title": "Wild Lion Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c31c6eef12fd87f8c21348869d1fa943.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5674c27e52412d5a8a96a949135e3be5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e93e4920103ec58c1d869b9467bb364d.jpg", + "title": "Neon Bred Jordan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c6ec2ef2aa6aba7a232dceb175d99908.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/00437359726c5333f9ff752a9e3fb00e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0487eccb7d5aa97a7ce164c2cb2fdd75.jpg", + "title": "Fire Ice Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d27f33bbb3aef331bd62117a916d73a0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ac2cdb5a76b7d86306cff649083f553c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d46db4da862649d2db7baf5939471852.jpg", + "title": "Fire Naruto", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e513b654995f6529c9868cc6cea98288.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9815612cb7f87552e1a152ce63d4bded.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0228a8658fb9caec0b6e75cbd74a7b33.jpg", + "title": "Angel Devil", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/15010a1cda9f283b8a22bea544445484.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d25728cdacb23221281d20ffe7774a96.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d79553c376879466345221d93c12657a.jpg", + "title": "Blue Dark Wednesday", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/22e6f10345153c6f6a839caf9fc46dbb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d30faf7b2b8c60f8ab1d559541671bcb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/140cf1227124a053db8aad3ea735bb4e.jpg", + "title": "Blue Sky Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b9b3898a0a42f3beef9142639fd42b18.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e7d76acbbf8c74f4e5455bb807dfc366.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d4475ed2c7ad791e081e0b584687b45d.jpg", + "title": "Racing Red Sports Car", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7c127f396d5bc03bf2a688c029c6c592.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e8b924b23dbcffc8e23d558c80693bbd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0f5f3d698a66475aaeb200c97a1999f0.jpg", + "title": "Luxury Gold", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/99580efba06827f7c24fb93d7596b227.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5036c290ef1cda9387694cc283df998b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d30381f56dda08241a7ca109c0cd16b.jpg", + "title": "Neon Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2a39ac15685fab2a55667886d4a820ec.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/30424578a50d18bb640a58aaff93591a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7d3de6101883877ace09fb5184f0e813.jpg", + "title": "Purple Wolf Guardian", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40e8d667758b060dccda3854adfe114a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c30dc4eba98a4d0940b32f7022315e08.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e271c81e6adc63e16e25a397ad7515f8.jpg", + "title": "Fierce Cheetah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bfe466632f7730cac12d6cfb29988bc9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/90400a156916052f5ca10545d9585384.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2ff6f33f48f0a237e57ec2aaf199139b.jpg", + "title": "Galaxy Howling Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2e1a587e17904d3427aa67d729d05b3b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/606ef23a0315bfa4347a8a2b4ff92e93.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/34f3bd478f7ccf52527066b0adfdca46.jpg", + "title": "Neon Drips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ed66ce259f5f49c0906e5f33ae9c250b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0c7ca43830a07cdcabe62a1a0b4a8273.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8d28b3c0bb8c769862ca06c67a9558de.jpg", + "title": "Silver Metal Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/00db68520a7471c906f1b2229a9c92bb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ee7b421a3890b8430a45f04b30c60730.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1fd6b5f5fee27f230f2dce067eba8fba.jpg", + "title": "Smoke Iron Claw", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bf19436bc753535b9ccee66c1b1ac7ce.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7683199087fb612b1c2d02ae1c8769fb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ec9e82402ddc082b427acbd844e06178.jpg", + "title": "Dark Horror Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3e9aa2c49567b4bae0d541144c878ca4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/66e7d95164f152764e0f99488bcafdfe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/efe9897a38fcdfc923b1d12d19759090.jpg", + "title": "Purple Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d7487bdcc53df39a297b1947bf8a0ec9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c5f468a4d921fe83e38ca33f07b3f53.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4f9326479b2965dd4ed50e8d65650643.jpg", + "title": "Rainbow Mosaic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9b0fac643c21f337d1b56204ab2393b4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bf13f4aa245f651f8589a1e8baba04c2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/88b252f857e2261949d6d03918773fa1.jpg", + "title": "Brazil Music Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7e4938a000c214b71bfcb836de5fcfa9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0e70a0027200033e3c5dee7e0da6f238.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/464567c0070e803426d1ca9a97b6b40d.jpg", + "title": "Ocean Whale", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/90c7ab0ada0b90c8c7f9e13317041470.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5c0f05e6c269a77e8ee8f842ebd45300.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3d508a8c76a43c8a11b671a44d4313ed.jpg", + "title": "Color Glitch Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8a982c13700c2c6492c363d660fb1056.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e50ce94aa8b7382536e3aea411a8720f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cc641b9e5a0a8881016ff4b86ddd1181.jpg", + "title": "Neon Glitch Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7a97d2845e9c3692e51c9a0c438414ff.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f51440cb8c5c9e1afdb816a4c8b5a37a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6315b49f58bb49c6c7301f2192fcd572.jpg", + "title": "Howling Wolf Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7ec35a450feedba3f95d25a5876f5faa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f1365fd7f4c0ef2d80ab8a0b79b733e1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69ccd9d074efbf50b046086f9490e9d2.jpg", + "title": "Glow Moon Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/91238fa0b61c988e3abbd304411f5825.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ac4dd30f376735ddb70bb5cae4ff53a0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/03de85b305ecc191f460984450063261.jpg", + "title": "Neon Tiger Queen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e61ce3163377f1e894335ea2ed53b0d7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a272594861d241198a97a49cd5080276.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5fc18a8dcf0ccdd68698f7ded3ac6919.jpg", + "title": "Purple Thunder Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f16941fe6e751881a2d35c74bb441b7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8688346ec3657c862dc5955f2c94de96.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0aa33e3cb9930a68f044849f5c9fdf5d.jpg", + "title": "Glitter Lux Diamond", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/19a60fb29d5a8f8e79ec22b126f370a2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ba2b7c733c8b8cc64e4eb50f7651dbce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/337acbbcffee1f148346759804d17c63.jpg", + "title": "Cute Gym Donut", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0c113a7aeec0f4738fc2f6cd9298e509.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/92f5b7b77ddcb833be876c56d5933eac.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0e3635abb3cfbb6e65ade6acc7ead6f.jpg", + "title": "Galaxy White Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/00c8bff8f6b6bce0d975654d5b487de4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6e77230f1e2385a4706c74e5e8e5fbe9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8f71579575ad1833c28e7ed717cb8560.jpg", + "title": "Neon Futuristic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a47ce5750d24690c91dc1b60b66fa998.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/51b34d41c740e0e83dcfe00400fd4498.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/615ac24908573ad44d743bfe10ff0d85.jpg", + "title": "Neon Pink Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fb6790cd9857b475794e19620f1e7eca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/04e8c707b3f1a88395616f485a51f2f6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fecc38e7ab6c8f68af2cf102f663b579.jpg", + "title": "Evil Cat Eyes", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/06c2f03e101515bc832bc82e77e8fae0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a03e014ffabf2f11f9483eb0861643c8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a670ef150da775f1fcbcc56d79082f3e.jpg", + "title": "Smoke Colorful Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/966bbe1cfb8aeb5fecb80c30bf1a3284.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dc6c18818ed6809510eb63e703b16569.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a6d7c538b7b7fa3b7157aac1931c7995.jpg", + "title": "Fiery Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/803cee106ab7d42b290d9b320566e060.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/88303158a2c1bb9b7348d93a173f8cb4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/70de5bcbc771dea080e50b57d9fd3a95.jpg", + "title": "Neon Ghost Crew", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8c66998bb6a34de2412783cf917cce32.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e9942d0d5d759aba96edd9d56f968d64.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/961cd4279bc72ed415a7f5ab3a298439.jpg", + "title": "Fire Evil Eye", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/95bd2faafcfdb2f06eba59dd5f9070c9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/99bf90739c218110a92c1a757694806f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bee666edf804f914ed02aa783595977a.jpg", + "title": "Deity Dragon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c7ed0100d483a450ed6fe88e3c557b55.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/99d0bf4eaf4150f5e5167d363e0c1271.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0b375019c4b6860917dcf9a225f86b8a.jpg", + "title": "Angel Demon Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e765cdd891d39f21be1bb09202635adb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aa745f2c7fb83294d9235e642c0c0d92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/48739dd26072ea77e949d463d9748e91.jpg", + "title": "Black Neon Kitty", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/367349c394f79532673ba10edad65851.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f3ddc5a195c706bd82ac89a4ce22dd92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d4079031783d623a4e21a34f5f7e019e.jpg", + "title": "Neon Green Monster", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/175692ebfc3ff5618fe6798ed5bf74cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5842613534c10e29fcac0c2a32f12832.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/02a91b2f24c79be5a3416fb05a9872b1.jpg", + "title": "Silver Cross", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c505a3c23fd201acaa9f37c46615b427.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1254967870b7b9d6936ec24cefe9e943.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/68e88c5a39b45b121918531acae20e21.jpg", + "title": "Burning Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8cc8ba34ec2d82f47a30e9400c79fa86.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eb0263b15fb8d890cb7a732a08f1e225.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ac79415ac61ad000ef570db857958c5.jpg", + "title": "Black Red Crack", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e0ced4cd9a010920e6f7cf077a4921a3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/305332a7f5b04978373d582659f5b4a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dce50953ce466e62141445c9cb85aab1.jpg", + "title": "Fire Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cb01acce62928ba383ac2321518510f4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ecc14cbebc4e151a9d9fe9fef7227314.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/05fa5a2eb72ada7ca6d378ef939aec9c.jpg", + "title": "Color Water Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/93a337cdbf86bbef672892399ec63da0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/551530799c053b83f4531d5e6ddcfd53.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7a63e4ac462e1e5e42ac1b66860ce89b.jpg", + "title": "Fiery Hot Music", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/af4311b37127475e4ee5bd43616f4d45.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ed6e707b4255fd423a1da9cdadaad37c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f5785fc9267f6d9135263e77a3597970.jpg", + "title": "Glass Water Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/854c532810b913c48225d705120dcf56.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b8b5a2a5b5508b90378af1beb309db4c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ac8d5875810ab6a6103932ddd06589fa.jpg", + "title": "Purple Marble Grain", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/05fe5ba700f5f8db67662e70638222a5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7a175649b35d8d1760bdc866d795911c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/113087b9b66c7cb9b153bde1d58b2378.jpg", + "title": "Sky Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f8d917c9b0f0d9dfed3ace2ead1b827c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/187b29bd011016c9f72c99f3422e221c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bc24a3290151c51d6867d25da6d88c34.jpg", + "title": "Purple Planets", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/db6d8a77a30536664defdb62c2bd57ee.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a9fd24d6c0d8a955016260182adb76b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5325f98a2a58493c7fcf3a51cf09d50a.jpg", + "title": "Red Black Tech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/afb8fb760ca80ca5ab2bce5fb2f4af8f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ec4c5451fc1a62eb54bb8ee73d077f05.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/116fe2c7f839eb96562250ad7f109af6.jpg", + "title": "Flaming Fire", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/447c7946fbdef9c379e8a831eea05b99.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/de56023fdb761fe14d2d0f2f8fddde5f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1dd88c27e5d35a51f1c9b5f6d3f5f811.jpg", + "title": "Sparkle Allah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/00039b8e69b440ad57e58449a573f938.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ff8a4de791a714788df2d8bf4b46a200.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/07bd1337320239001eba00f565691cd7.jpg", + "title": "Deadly Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fd3efd0f8373732724cf9bcb9fc79c21.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3679aa18a8e3fd2cb02607ce8ae2e53.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d20a5c9d208621f10e0ab6976e4b4c6d.jpg", + "title": "Wolf Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8121bf80c8685f0f4a8a92f332047a78.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0dc535ac4b52d4723cf5d28ef142f95f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b723751a7c05bc7cf24b3eae50cf0b54.jpg", + "title": "Crystal Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d1d6f79df377c9b55de74b9823987f21.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/da33353a717bdc05bb85088cace65605.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a57a1a4100f5342e6f722eb0ccb3d25f.jpg", + "title": "Praise Allah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/079b5826666e68a0bf54f1ebb7c35232.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/551be5d92e87eedf52598d0a22dfeda4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6df14f8b0f43585e8a2a1cff8ff3130b.jpg", + "title": "Dark Rose 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/204fba0b4a43822e7531baf39f43dd30.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9cb1b4e7bfb896184655a64523c2029b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7d3259e47d9ee402d09d20a5f30deda2.jpg", + "title": "Allah Ramadan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a1806530138b4ae3c51ce57246bab19f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c3dff7a82482ad340b52611c091f89a1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/988f8a20efc33c8d5a39e1407140474b.jpg", + "title": "Flaming Horse", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3335ead0bf98298d61cdb16c59bef588.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f6340d722496ef89b25636fe4f8e7a14.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e3c84ac1bf4b65bc361b87eac8d39bee.jpg", + "title": "Glow Dreamcatcher", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8e213591dc9ad001af977eb7b5c47beb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/99e5905c033b1a8190ce3899303d3685.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a79200422839f4e35c34c1285b836ce6.jpg", + "title": "Creepy Demon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b237879e3199ceca9cef44aa878a17cc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8af676d76c4849f56d96c8b9f32d2adf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/291928e9de08856260e4e4408a868eca.jpg", + "title": "Dreamy Purple Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8c9f85619cbbd88106d430d3068da530.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/156124299a8d398354559271847d1287.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7c04630e14bbf2b4cebcaa0a51146bf1.jpg", + "title": "Gold Kaligrafi", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f0befe0a8b1e493fb6bdb94c4ef0b21.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7d550de0e0a5a89ee1edbd3b2ccf3b79.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b0571e339a6263a11e438e6d03d99487.jpg", + "title": "Rainbow Neon Stones", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/572c8d42638f125bc9d8ca89f970ad3f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a5dd9535edbfaa7c33d1ba5816f41d56.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/53ccaf913cdfbb10b741804ec6067a24.jpg", + "title": "Golden Eagle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ce6b15fd4d6c6ed11dde2311cd15b771.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/97791fe6d72194cf0c50d1e5429e6eae.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8ac86b8235ecfa2b28e4ebdcfb9ac34b.jpg", + "title": "Pink Shiny Foil", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/95c3ebf77a6f2b8802cda3b97d23355d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b97ca36400123b680ca48fae8ea2e585.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b3b4719d4a02c4947b160a759d622a2c.jpg", + "title": "Black Pink Diamonds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0c46b2e1150a93153e149993d5b0a024.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9b1f1ee39dbfd446b3a53671efd0af5c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a0c4c798e513d1d897290d42b31449cd.jpg", + "title": "Neon Blue Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f32526079893a191ea53ceec0f2b7806.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/915ed65f274ede4f7d61e80751838d59.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/395345cca59f2d4a73373a4fe93e6b38.jpg", + "title": "Stonehenge Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2c9ae5969b29e8992adaaad424002700.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/80dae432335427803240048ee96f7453.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b5a11f52c33269cba0fa328214c18338.jpg", + "title": "Bright Neon Flash", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ba327a22b874dcf1ae1d7d530ea4899e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e3b840166fddf0c49ae2ea83ff57f2a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4570d7925b569b09606e21bc4e8e7912.jpg", + "title": "Red Neon Skates", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/21c2f402c398453959aa717c3ad774c6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/26eec06f177547b571a305b2e105a905.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e51438bb52cfad7e0adef9d1e4613c0d.jpg", + "title": "Rainbow Color Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c9597a431b46fd21af6e81d94fb9b15f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a7dcf435e7044940e48e080543ab7c9e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af08b8fd873e0f1cc78d1ffa59352344.jpg", + "title": "Bitcoin Dollar", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/74c0769ac297d24c93e0034d67032fa6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/03fcf4459503010badcab966c2bac474.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d0ebb8a152de114e7aab243ccb21b7aa.jpg", + "title": "Cool Neon Blue Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dadf0750e963b158cb1beaa73b07a40a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/854bfedeaf1b6ea986eeb33571022106.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3272114671129ebba7b90028eca35084.jpg", + "title": "Lonely Man Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c9b5e131845cf907114ff7ef29e3cf44.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a0b17dd8462625cf30d84e3f115bd01c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/28e4410bf8eef424713e08f72317cf61.jpg", + "title": "Happy Face Melt", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/77cf58a4d7c06232ee94ba37132aa861.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/87a38d464b1f6da2e47c0cd91b04d77e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3cf9237b75502cd9e57399fbbcb72e42.jpg", + "title": "Scary Zombie Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9dda3ee26eedd3ace3ef4ab637c6986.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e19a672fc6d01717c703666e9cdf5a55.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0c8290111bff66fc4652f4428a1d87ac.jpg", + "title": "Fire Blue Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c9f31dac88569a6086f949657b5639f1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d89f4e28d17951d6f37994b56193e2eb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d23fb0d22e6378828e4e9197a8606737.jpg", + "title": "Diamond Laser", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3783abb3a92271b8c2493246d61063eb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/dec042ba81c145c6a6ebe8e420335365.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6097ac5fcc1d0e426dc784e19f6f4e6b.webp", + "title": "Cracked Kitty Screen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b84519c9438570a58a345e76c4b5ad9f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0c184ca602aacaa41bdf7ce526921741.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/388070873d3c188fbe92b5e4a915378c.jpg", + "title": "Fiery Neon Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/64ddc76672645a7bca64201775da6e14.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/202fd9ce689facaff01bd7644c610b7d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/747db4efbc82d20e8b5400226a9f0fb6.jpg", + "title": "Glitter Star Unicorn", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c06fae5abab3bee5609a117cd8819522.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/61b17ed32c27b3d88d15a1de6a9f5db7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cb0fca57b0855c5d07b43210144f9952.jpg", + "title": "Glitter Rainbow", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7dc4bcd773b6fc767ecc130cf780237c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fcc31a906c3686a6a752da9e3cfeef3e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/37ccdcd546c99fadd65755d1a230d208.jpg", + "title": "Graffiti Skull Paint", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7f5542126aa03c9022a7d0bf19bd6443.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5a0c3489d4f4507550e5e185ce3b3def.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3e44740dee7877e32eba14319ab659b6.jpg", + "title": "Neon Glow Stars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/17437bdf6da76535d74794d610b6a599.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/288db496a0e2d5b8be45c829726dca94.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/80088a6e4efadfbaa097e5acb3fa5a4e.jpg", + "title": "Neon Broken Glass", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b50be1257359a83d3fe41a3360d390ca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b86b1ea41b81369d74798d1c2cd49e2c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d99f25aeaa5a4b9437e1a7ab3fce4bb5.jpg", + "title": "Roses Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/22b356c08bf11e1f15e59410ff94eff4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b116af76b10202ada0e757ec6a495d64.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0f600ef1e2dce255959feb81870731aa.jpg", + "title": "Angel Devil Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3cc668e4ac2f24b6a84b17073e45ab6e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/febff19a100613b59a935782d24d61c0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c656a8c6c4f51c3cdbcbd049f00b264c.jpg", + "title": "Fierce Tiger Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/92fb4cba62bcc037393ae12a8717e9a7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e11814bf8d342a39145e2a16065df05e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bc55c1e378bad6a2a593353ebf3525dc.jpg", + "title": "Pineapple Teen Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/42668c9f45ad320c9af61bd5e60bcf35.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4fccdc6b62a42a7412f633b5cb109c02.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ecfc9589fad5736db521a49db26f898.jpg", + "title": "Golden Spider", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6fda625fb1e327be4728db3152029740.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6a3896f2f0fce5b3ae97d28f2643aa52.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/23ed7aaefb5cb96adb0a3871d88d5b69.jpg", + "title": "Neon Skates", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ce1502902b0634b7b70280f95b17c83f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/972148a1fc04bc6b2b28d2a9cb164514.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f1931fc13e60a1329a199405c40f42fd.jpg", + "title": "Galaxy Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bc888cadbd874c6258e6360c1c2146c7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/edceaf6c6a46c75360f667a34bff7296.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3589e6e778bfa143acfa4bb014d47822.jpg", + "title": "Shattered Screen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6fda3699ca297a1e57e7f5e47c5b30f1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/350bcd61eb74ad3b56d34f37a1191458.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3ff3689dcdedffbb2b8d8a8739fc9590.jpg", + "title": "Sparkle Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/043e51135b9105eda2ff2fecb112e90e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/143eaad35d9dd1ebc19ed659bf57ac65.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2b81206c158970c5b7d544611c3a05fc.jpg", + "title": "Broken Heart Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4c85a102798b2ffa6bf76aa7017aef25.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a830014891452c6b06dc5fe3f5e8b439.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5547e6f9bb0153cb9215ebc68d2f296c.jpg", + "title": "Galaxy Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/512392566d4ac7173c6be2e5652e63f5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/05cf15822d11f314ed99962b5b1b5de1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/822b9de2c26fb21683a428fd0fca4337.jpg", + "title": "Dreamcatcher Stars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/425134be463ddad37f5289fc329cb572.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/182ae1927d490ea1e40feb775d062744.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/229f0a8ac3b9ac0572f010d6b129c237.jpg", + "title": "Colorful Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/517a96f0b8b1018dbc45d64e4782e939.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/342bb9714e21e1484cbf7c1e21b9e429.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1d846b20508ffca4ea1bb89137152869.jpg", + "title": "Glowing Money", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1161e18995703fe889888cfe2a0deb42.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b1a2697af0ec7869e2623f3e87d16554.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c01bd559ea7aba0c7f4bdcabe9df5e40.jpg", + "title": "Neon Smile Sun", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e1f476bb0cdd0fc65f639e3aad3e11cf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/42f097a61e4aaee26c2b856417a2f697.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7da8d2ce889ae0d3adecb46c42643e98.jpg", + "title": "Melting Galaxy Diamond", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/10f2cc295a8f03b5ec60bfc4f7c8f632.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/21b814373b688464ff3d6d1c183e1c4d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/815e25e881252138c70f9d2c2d05a48a.jpg", + "title": "Jesus Heartbeat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ee395919d8dc56e7362431f27a16159e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/439f7cb43564aa43ec2198f12345edfe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/933407a8b63439531c7c6be8db1f74e5.jpg", + "title": "Golden Money", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f17b2302257214c21466929e7b97f02f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3589f8ad6c27961b588b2e3cbd0c00a9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ce253563206cade3223d16f00cd748cf.jpg", + "title": "Neon Pink Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/48571d44f1075922ffd5d73260455417.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a73d2aeca99c2bd725dc9351d08addd2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8743e39702e91ef72de07e89a6abf8c1.jpg", + "title": "Roaring Neon Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/97e522978e8b831a843b9df64ece119a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3270a077340e5571bf874aada130b9fa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/65bb624a95e4a3507c236360f358ad4d.jpg", + "title": "Cracked Tiger Screen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5c6e5b5d841a33c4b83cece19e0560a1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/63011180e8fe09f32cd7889ce87df979.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9326415eb45948f270a0bed91b608a9a.jpg", + "title": "Tiger Flames", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cc48393100b1814e10a98dd8986baaf4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4a8a7b0243761d0bf5156512a91dfb9b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3f1b36d7123a6e1bfbfc749c52550ccd.jpg", + "title": "Color Splash", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/207106af281fd60323049945989a50da.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d6b325e35e471ca976deb8278e6e6356.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c1bd826f6a875a34e4eabf4e6969e1e9.jpg", + "title": "Blue Cybertech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/72b34c1925d2e79b41f32fcf7974cf21.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/389f2a895ae5381f80cfdf2af462f11c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d15fa9040cde83f1528a15ce529fe31a.jpg", + "title": "Neon Blue Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/38314d5a4c3591bf94d55443e52f907f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6f2ac1821ab819191cbe87876b0ce702.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1389697dee2a2e4b766236b8b6904ed1.jpg", + "title": "Sneaky Neon Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5762b6214e99d62de3059abf5cfd9944.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a13ce8f2714f7732192558921195ee90.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cb8711846d914ec79c1d5bb6c1805c87.jpg", + "title": "Scary Lightning Wolf 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bb4a4299a235fe93d438c532ede5a2b5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7ce351111fc1eb6960db3dbcdea6f9ed.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/11ff8988f7a966fa8675e875427123ce.jpg", + "title": "Speed Racing Sports Car", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/741bc4f2d0c8bd1b290be8a0602dc523.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/66169a5330657cda20ec5dd677149c62.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/50e0510ffaa2eb590123cd48163252eb.jpg", + "title": "Chess Queen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a506776fdeae8c8cbb1d704a44a7a35d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/77ef17047a0d72df9622e68c4b83d3e2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cfaa4f8d5c172d569775c5778a912778.jpg", + "title": "Doodle Heart Beat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24a04c8952456e97404da109087ae6ba.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/83b678b4bec9823b1b0db07c6dce7ec2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0ddfa727a93f9fee99c915a21e59d2b8.jpg", + "title": "Trippy Cash", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dfd4c1593c3479a942a0fb08f27ce2ba.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5ed0b23a287f894b6778224c712e3c8a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4458c62590501afdb8f62affcbbb5df1.jpg", + "title": "Flying Dollars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8254e18fd4cee6240cabbd0f773b51fa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fe5a1e27f0e7b6a7ad01e4ccbfe735ee.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/648705bd23c3dafc56d98bac61d95253.jpg", + "title": "Lightning Neon Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/03f000474660e0b9aafcd2fa0a26670e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/00148091c74d5f0b635b88796359e2d2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d1bbeb422d5a92617d86535f38e5ac5.jpg", + "title": "Black Sports Car", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9db18c75c0b0c035f183f24023dffee.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e60f152a31c7a6febd9f8dc563e07d0e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/876251a04ad8b1a99ef0651f1e169898.jpg", + "title": "Glitter Allah", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d5986738bd8149caf013e4a14b308b5c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/82486e5f2169e844c81bbb2104ac090a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7560b40822a0954783289c83cd3f62bd.jpg", + "title": "Evil Skull Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/96df9afcb0461a01047ffc2f2812e38c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/32e731ec6d4a3501f9a17fae5197cb63.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5dcefaa9d880cc781e835119194ed9d3.jpg", + "title": "Magic Neon Symbols", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/69f4fdcc36ea861e07729dbad7cc50fc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f45c1ddbf33052edfd30429bb818ac0a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/74ad7923f719d63a6e8bd5669452d34a.jpg", + "title": "Evil Owl Wings", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/174073110c4b78e370030f0ab00b12d5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e6bd7fc38c5841a243f1bd1552890e09.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4d77f3a5f4fde9c6624c31f03f4d183c.jpg", + "title": "Cracked 3D Glass", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d217d1c367683a54fc72e2c831fe6765.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6e888083c04108ec2e61ba638844c5f5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9bfcf139a9e4cc6d0a2e6b93972853dd.jpg", + "title": "Neon Wolf Blue", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3a6b404bf4e287710211c1084f1e72a7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1e01a1250b5556ce63ed3396803421ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5e101f4ce9078432b138856babf743a2.jpg", + "title": "Wild Tiger Eyes", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/913df83cdf3494608c04c0a0988dc032.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fd17ec9790ee711cd2346bfbf012d6f8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5c1603a3d1178cfe2846fa887b3b08de.jpg", + "title": "Black Business SMS", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a6625501bbd3ee3f31a2b02baf487ee8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8297aa2ccf3c721d6e1959ffbc1f34c5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fc529f66c11c1121df354d1c54b4efbd.jpg", + "title": "Rich Girl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0e75e68f97d7c3f02cc1aa096bc132e8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/146e9aa948af7e9cf95ba5c05ee9d6be.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3b77b0eb358cd5713d77a00ed706e556.jpg", + "title": "Street Art Graffiti", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/888eb786f6e01b9ec555b0ddc7e1e060.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8fae8c41931be7a7cec52090724df6e4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2971bf1e31fbc78c44f70f1560eecefc.jpg", + "title": "Neon Gamer", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a13865d3e1b61b990dcf105b28b4df2e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/448588f178547b801387fc8d61e7b068.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2f87c8a306fc52daf14cd88f0c617d78.jpg", + "title": "Angry Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8711ff791fdbcdb734e39786c3f11665.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/64d84860f2472714b5003d7a9d4745ce.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/af56c91462fdf1a0008da551a4d42911.jpg", + "title": "Neon Cool Lion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24e1db3bd670218af54e14b088ee2aeb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/23776e23a391ab11ac9dbab798b0c5c5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5c884355ac190127e294579483e13fe0.jpg", + "title": "Neon Owl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c118dfb357980334725f719c27a266d3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5c8af8963ad360c9fada2798cc65f142.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4c5daf6890ca14611be3144a86a0a75d.jpg", + "title": "Burning Dollars", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4b8d884c9ed71d593e01172928b40cec.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/16feaae54216cb6f810a52e5f6cbfef7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a2b0896b53b208c51db2a6f885ca8654.jpg", + "title": "Fire Skull DJ", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3fe64a58533e49add4bd118d0ae13a3d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bf75dfa955385946b4619952fd470d03.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/95af0eba2a2b70d02455bfd786fb08c2.jpg", + "title": "Cool Dark Vampire", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8a673887629c6e9d1917949432bdce86.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bc5c9a434b45dc3f844efc523359b787.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bfd95b92163a26910ea15fcfed9e7370.jpg", + "title": "Cool Broken Screen", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/200a62a1341813f2fda33394d10a9814.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/790c2b9b40cceade8c000360883107d8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c8f8237116502d836e4bd6d8410f636f.jpg", + "title": "Cool Fire Phoenix", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45fc9a51c94ef2fb0a9c9309e35e6311.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1f84b11d26f7c8429faca40b8c316969.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5f1556b98a73c77f3cdfc47a96c9ca31.jpg", + "title": "NYC Landscape", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/108c4b919002cd5126266f86283de330.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/48c7500d35d431f26f278cf03449d4ab.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/98e72c2d325ad995a6ab7bc62f19a6f9.jpg", + "title": "Savior Jesus Christ", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/72a0db75dafde6ac7cdf0ac1f75d2979.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5b8ae69d91517610f3646bc2cd21305a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0a788e1430b5323be0a19ef716f45b4c.jpg", + "title": "Neon Night Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d07b386353b51f03fb414207dcccc9d3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b2839a00ecbe120b48fba736c52de5ea.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/817258f27395ca31b0b94fd3578e88de.jpg", + "title": "Fire Hell Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/06cef663736ae025400cfd1d403eb2ae.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/66963cd89d5426bcd008815b3ba295a8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/86aa770567464af5f2e598474a9c05ad.jpg", + "title": "Neon Skull Life", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1f9b2cfbb0dafc33498584c59f8bc0f2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/319230c437ed9e591a0ce54b374adb78.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/11de193e7dec4aaa786b16802de7ba9b.jpg", + "title": "Crown Skull King", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fb638c6bc1fc3e34d59514e02d48a2e2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/155be45ce01c1046e01011cd69ee7fe6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c64cd156d1786d6a870a338c24095213.jpg", + "title": "Silky Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/da017ac1ca66b45c3914f9ef55ebb372.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e6020ea727903fb6c9790cde5c76cbd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7e44b762f09dc55598d0c91b60f7784d.jpg", + "title": "Neon CyberPunk Car", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fa8b37cf6369b33f7bee25e11b4e15a1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b3dc15fdcc6b00685bc2c12f8dc64f87.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/99ad8d1943749c2cfdcf594747a06e01.jpg", + "title": "Blue Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/77c348d7ce1edc54f239f1ac6971204a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb103c3c8545bea6db6f40c1c34283cf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9a1f1633dce457889e0e4434529d0ce4.jpg", + "title": "Skull Rose Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/72854f4c931c02d57b7661c5d88cb3cd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d85142bc1b8e3c3e0819caa4e346ef9e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a5eb79ad4e8bd0f2cea06d0c359520b7.jpg", + "title": "Golden Dollar Sign", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a917e87d9c29bdf8ce00a4720401a7fe.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cd0cbb1278f7b4d6e358ab406888ceb0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/735d08998bba839217d4caf0c8a14bc7.jpg", + "title": "Green Neon Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/845f6fc1f8beb21228a2d0a957ed9437.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/497283963645fdbad89228d8c66bc842.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2d7d3035e887d86f804682e22de29bce.jpg", + "title": "Rose Gold Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40e24a5d7d60536581f435db6b124800.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2fa12a82185e296236f090b7121fe9c1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f66192213d82dacf605b6c19416c7dbc.jpg", + "title": "Neon Wolf 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3096b39975b3296d8c14d76c31673b43.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b6ced4a2fe2f38d14fcd73d7f2ead6b3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/86326f899313428a80e1f48760eeda47.jpg", + "title": "Neon Devil Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45a3637ba460b71b2ce36edb07c8c4dc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f7d324947a4545ae1bf37e72359e5efe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/95d5cacd730e3a0e539786d615e8c254.jpg", + "title": "Angry Face 3D Emoji", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a59b2e87eec1803cc75d2a32b05c4149.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2d98a2e561fcd93f02da290862cf3fe9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e9191c341d43072ed3866ca8d2509aa5.jpg", + "title": "Sparkle Flash Chat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/326f356d357ebdb430ecccf861a1ff5b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b31c90d2050f62166a51980252b7b43f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/889b4f435a117066a87ac99a84a78c63.jpg", + "title": "Fiery Ghost Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6f4cb01f32898f08a85151dfafc56293.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f19a6154041a137614e2cf4d16bd5859.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/afc64eaf173efb47849bf676bc5bdd47.jpg", + "title": "Blue Neon Tech", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/40cc4728bc050fd0873320845802e94e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c83269c1a72dedd5e97d1b3d04fd8a97.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5da70574dd527d76a8315a7d0abf6bc6.jpg", + "title": "Neon Tech 3D", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4b2696a94bbd9445a48a9f86544a84a9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8584591c0c58feaa35da287f19492d16.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5d6c6d13dbe7d5d5545adcd4d9e0de58.jpg", + "title": "Evil Eyes", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3832fdc4f52dcfcddf3845911b11c62c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eafb41a4c5e51765fb9c6504e47101bb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c2c478cb809bd64af3d794fae0cee515.jpg", + "title": "Angry Owl Art", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e98c5bb9ebe82e8546de70a0835c1ced.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ba004cb3d80a65fed4a8220cd37be833.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f0924a165d5dce38c7747c7f59f1f851.jpg", + "title": "Neon Wolf New", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/cf515a6bc962a9bf0971f7e04c99aa4b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e9ae6d6daeda0ee9f077f04364e1070a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a63c8a45966b816d0baf086c7519c5a6.jpg", + "title": "Devil Owl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c90b0fed7d5044da811c4669700c886a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cf300e66d566036bd399f7e9465e9894.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b73a2b091bed3174ad62f69d96ee4689.jpg", + "title": "Red Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/597d649628a5d4c24562cc21d1d9da81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3107427c8edfe7c5d79468dae8b006bf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1623a0ede4dc54c2eddb2bd6d3368789.jpg", + "title": "Black White Business", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/946c870a8ce3eb31619d9f40f1254d32.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2cbfd957cd9d6c9f3d6f4a7e41f31b40.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a8fae213dca3406b8a9d5d4f2527e78e.jpg", + "title": "Flaming Ice Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/164a8d1c0ec18c6dd1bce5c03620be05.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0249ec0370bb5da3cbe8536e877a26ca.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3e3d963be86957e7b13ffd13cfe1459b.jpg", + "title": "Galaxy Wild Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9b21164bf134840f95b5091223c75ded.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3d249d3beddc844e1ae842983de1e515.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cb8a01fdb5274fbd56802c79976b4fa7.jpg", + "title": "Blue Flame Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b3ec96e847d647255508058c265c0905.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b7b530ba73626f6702f2fbebb655fc2b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f9393c92305e8b04b670ab9e3130a8b3.jpg", + "title": "Colorful Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/036552d2c4752d30104cd06df1ebb43d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/cb89f8513f923a8219b201169a62af11.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/eb2ede30008a2bfb73bfca43da7aca76.jpg", + "title": "Holy Jesus", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2a32e19a78ef22ea4eb5b99e99542e54.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f8e4f9bfb79b3e8ff934c7629751ce92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/830856e28e91d9c3002026d275aab0bb.jpg", + "title": "Fire Skull", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dd145aaaa3e0b69566ea8c9b922352dd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/df9b5c458ba1d961bd679e30717d45a2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7a93e9f47517baa0993573afcec4c648.jpg", + "title": "Neon Wolf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f5ba85b65236bbc8b90a309a4d670e54.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2f118176376d3f6520b1d4ca19ed6c95.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fca05bdb436222d656edfe3ac779f2cc.jpg", + "title": "Fire Tiger", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1aef032533a13b19c5c389199a8efecb.7z" + } + ] + }, + { + "className": "aesthetic", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5a1e32722734f96dac3af1c1787ea82d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4be60a99fff098ccb0227fdb8d8710fc.jpg", + "title": "Neon Aesthetic Leaf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/090b80c4b18461a533c64374f79e49ae.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4c137123d8954b9f0c42370a47cdf19b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5032efebb5b43b9e08ef748b520ba2e6.jpg", + "title": "Aesthetic Anime Boy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45c5cd1cfa15a6992c7618f7ed6d306e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9cb82c077c9407c0cceb60f84e88b5db.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0dd052a1289b0923c41adfaf4058a3f8.jpg", + "title": "Sunflowers 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d6f8dc13755fba3a1e8f17e113775f58.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/38d502ef45d00188f9e1f81f51ff33f9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3c67aa3b644cf60ec98926205c91e92a.jpg", + "title": "Beach Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c07610fa2045f81a886625c82d83c391.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a9364cb0f146cff1b07261a5e937ac13.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/39a66782bc0cf969771963b0e7d07e5d.jpg", + "title": "Aesthetic Kpop Crew", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9c4622f05f74bcbde96ec9b1c20e71d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/61aa7fdf6fed85359584f85128bf783b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/67e7c741acff6cc95d0b7162ad8c69e6.webp", + "title": "Aesthetic Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c5130053a04005adddf931cbc942f0d8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3d3422ba176b011da4d777814a2dbe92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5ea4e70e3a3a8a1846628dc93c44479f.jpg", + "title": "Tropical Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/28a3631a4c1a36bca55e60304eb3a518.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e40391a20f033b072cb093ecfef2435.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d6d9782318aec5185c3aa20fe587e664.jpg", + "title": "Aesthetic Light Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/89e567f85c9bba26f92fff156f0aff48.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d36066d7b9f088685a57034809e476b3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/03c474bbbde469e391b1728ef12ca4a1.jpg", + "title": "Pink Aesthetic David", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/642749095fff3b297d95f854e00f27ec.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/61013a3c1a7d01f1786a175e02ccdb90.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2d08db82229391d6e6eddcf1966d314b.jpg", + "title": "Dreamy Light Jar", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8280ea0cd77f22f20166597c211ba30f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c50627dc1ab995d94982df4d9976ed8e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/faf7abc48ac971ca89998b38a52242a4.webp", + "title": "Pink Strawberry", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/45727d54cf59bb7e0be26268cf57cbca.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/84c36c28ba4769cb9551bb35c17a6ec4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7087d0a8fdb7011305f4cc2d50821068.jpg", + "title": "Aesthetic Whale", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b32a62b14269b0cda288edfc861965d9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5411111c88d2bf9c4d96858633f7e2c0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/20ca287189ab12beadbb053a10687e0a.jpg", + "title": "Aesthetic Night Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c2c04415b22498aed22ad892bf949ca3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a4317fe1c99daa1695fbc28dffcd81a3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/13eb5b924ae354cb8c63c4bf3b2fae4d.jpg", + "title": "Starry Moon Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/17b93efcb07574de5c5bba548cfa58af.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8c1f064f743a43a2bcd6531c3e289664.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b509c884a059915bf9ce0b1cda9733a6.jpg", + "title": "Aesthetic Wheel", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/606f657b0f9e62821935ba8216626978.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a1db4929cb3c4e33ef140605a1721aa3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e1d6d17e887cb181a4327cf3aeddf6fe.jpg", + "title": "Glitter Rainbow Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f9ce06da3215efde3717819a5af2bebb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bd19714ce39b1ed851fa592404ea0a17.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2e1d0b435f8fd02a5c68220977bf5706.jpg", + "title": "Sky Star", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/015ae930cc9879c698139bd8d0ff12ad.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6d305a2d7e9e1ed897c52d0dc1a202b9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/704de58e94e6eaaf9286be2a322bf217.jpg", + "title": "Aesthetic Sketch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/103c5971b1a807f8b895940b9d5984d8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c8f19bff38ee204dcb417215da354790.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/56dee29372cf14586b7325e188decbc3.jpg", + "title": "Butterfly Aesthetic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dcae551f0a2a9a8b7844f6fcf2a3391a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/738acde59113ecefea20f8a565d89cf1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/bb945e174a7143e0957e1bd41471f7b8.jpg", + "title": "Doodle Blue Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bbb9d553da0e461cc00afcecc4890d82.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a65f1dac6fe9b78c9635dcd2d6508166.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1114cde9a0e12c68ae93819d5211f2ae.jpg", + "title": "Aesthetic Cloud Bear", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8f244be6cbcfcf0db2806491d99cce20.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5f6926619c5679d1934142462212a644.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c569e2f0df48ba3c5d40e751084075b6.jpg", + "title": "Aesthetic Glitter Sea", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/704631c10d3c739f3f2aa0a413b34f41.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/28ee37a65fb9714fdcfd9096685718bc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d39f2a81c7f1801da12b46c4e23e6149.jpg", + "title": "Sakura Floral", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8372a8cc84ab71fb251c6de089ecfaa2.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b5b28bed773bcefef5a740d20d7613d1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a3d5f394024cfb9c6a3c1d176f061a54.jpg", + "title": "Aesthetic Moon Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3d2519b27585f6234dde620b9608ae1b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4472a9eed40ec0636e8ed9aa837ddf52.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/da4eda4d697f31be89ae29ea79c8b46a.jpg", + "title": "Aesthetic Sun Rise", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0b864b37acb698c661a7c72a53608c71.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/05c58eda91d700fa20220e9b8a21f4b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/362f20ab3dd301fe4e1c1215105d16ae.jpg", + "title": "Water Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b0edb6615c3ddf835a64a9230555b26f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6bf8fbb341b1289477bcf5e7eb926f13.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/88eb7dceb5b62fa7a4144d9765ab0038.jpg", + "title": "Dew Aesthetic Leaf", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/95b747fc5be7bec83aaa414854ccf7f3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a8f1a8f3c74f38cb0661fc4428e8d70d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/563268aeecde871deeb947ca27beb984.jpg", + "title": "Aesthetic Night", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b428ba347504294c30e7179755b381da.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ad05c074a5a66912248a379ce2367f5c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4c3ed38fecae89fd122b797c8b2c67b9.jpg", + "title": "Splash Red Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fca114e46fb200ca26661b6ec6f123ae.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/abc2ac65ff08cde24a5b58ae362bc0d5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/383e50803095fc6405112f3bea6b7734.jpg", + "title": "Paradise Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/998e36eb6c76de8bbd7c4af3ca549db5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fc92393e24d15fc52f6235feb7d730a3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/615f96f6cc928883acffa22cb61b154b.jpg", + "title": "Aesthetic Pink Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c30556b0d9636b247bb8c505de1e4748.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4fd977ee1904707dede3f8742a66e74b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6bf01675a51213d0e4b2ca167cde4cf0.jpg", + "title": "Aesthetic Pink Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bba6882521c03d7de7e059e68f3bde8d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c8f1353c226c502ce1cef770103cbc1c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69c5c402b5568e47d9ac36e174c26b77.jpg", + "title": "Aesthetic Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/33877b62fc70196ebcbf14a734fc995a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a9938bda6d1d64693a6ec8bdf2f561fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/52897e142722432e4cc58a4f90c36b77.jpg", + "title": "Aesthetic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3bc85be0efa083d090d3db17e1b86c9e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aa7dbe8b73054893999be9856e94b8c9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/67df1cf41e84804a37ec055ee418c5d0.jpg", + "title": "Aesthetic Blue Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1d9eed2445cf50e56ae5b781b039d4a7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aac3611337d42620bde1e24ee6f773f8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7193a8943af46f12d0ab2424e4804afb.jpg", + "title": "Night Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7ba858338cbc32f923ec93e7a00e38d9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c3bac7bcdc9ddc46b3875d15c59f1c10.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/98bb92fc5243bedee7a206a2d02383a5.jpg", + "title": "Aesthetic Clouds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c17edbe606e1c67c0a5d2ce7f8398645.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/89dfb945f65fafc0c5d07659b7ea57a4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b4f6d7f4d0f6a50899e3f96afe1f2c38.jpg", + "title": "Purple Sky Aesthetic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/37ed4c67acaaeb842898d07b958d71b1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/eeabdf7767a949488a199ef7df7a26b0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/67df3bcf2b2ce256858a8f117d667f72.jpg", + "title": "Nature Starry Camp", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5126b4a73f12bca1d7d90772e0e38d95.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2a2e37016000246ccec9aeae9192ed2b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5b2a2c33d152c5138c2109198ec5eaec.jpg", + "title": "Photo Feathers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4e788c2de0a080cab3bac8bd8553ed87.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6231808161096c3a3d72fee968eff52e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a29041c9cb543056c92044bd71e70490.jpg", + "title": "Pink Butterfly", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9feb2494597135b65eef37ae0f2174a9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0cd9dda2c45af8071a9dea3c946d49b3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d0e4da7178c0a97c83578e509bba97a.jpg", + "title": "Purple Flower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0840c227cc397ae6686c3069562b8ff7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d82831eb92bd5ea7bcb807d5bc9dd38b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/987dc9dd0c5686238b46a13361ded3fe.jpg", + "title": "Snowy Winter Walk", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ceccced0912e7b9c62cf930600bb32c8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ca4a87a5250f2c912f049993f8c1525a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d73d24d854a3fbc028ebe89f4f08f0c2.jpg", + "title": "Heavenly Doves", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/03482171f11021a91fae94f2b7470918.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/34a0ae7e807ed88aca0d882f95f77b21.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/45280bd8bf9bbff747f60075b58b6c91.jpg", + "title": "Sunset Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/18b5a21710bee3ef5341072fc3803b7d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4e4716b5ddc7938c363e086062c0f5ee.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/144837afd536e176cfb013a225051124.jpg", + "title": "Sunflower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/878dcb244b714c1abc16e00697385025.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/86ac761ff9ee169ec08e88bfedb76375.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f8ef55124b349214276712aab479162c.jpg", + "title": "Bright Sunflower Fields", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dfb752d12747ac2d0257bd26f573b8d6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1bd79fcf3411598f3498668a23edc481.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e5415fa0cfb48cacd15de66688d0a716.jpg", + "title": "Purple Rose Bouquet", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e02a69857c5d08df6f454c71c503c1a0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c6199f97259e4aad14fea4ea9684026b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/55bafd147a491451f0ff19feac264eb1.jpg", + "title": "World Travel", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c2bb1fdf3de4d64512ed8a818bc91644.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7c1fa63c6efd757e520cdea15007d595.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cb8e23054a8e3c7ac6265aa1fed0a1d9.jpg", + "title": "Kiwi Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8183ef1b6527da0459ab99afdb253a77.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1a71dbbc7b1a2c2986955155fb2498f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f6e063ee631956bc61794cf76d07b59c.jpg", + "title": "Beach Skyline", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b99cf039ed231f88dbb5cf9d66f38bea.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/df84654025b95805a65a8ca5c1f5eb63.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/459f9eedc884df5980116ef538a0e2fc.jpg", + "title": "Blue Aesthetic", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/250502c4df9c753858b2944762b1162c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8af676d76c4849f56d96c8b9f32d2adf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/291928e9de08856260e4e4408a868eca.jpg", + "title": "Dreamy Purple Tree", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/8c9f85619cbbd88106d430d3068da530.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d30faf7b2b8c60f8ab1d559541671bcb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/140cf1227124a053db8aad3ea735bb4e.jpg", + "title": "Blue Sky Lightning", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b9b3898a0a42f3beef9142639fd42b18.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e1efd5518e1b1f666c6a3f1da581c9b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1d896c43104eb86aa3aa51ba40bcb5d6.jpg", + "title": "Sunny Flowers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f085c78a4a47ccd6ce8d7f497f3039ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f27495ac5d26af6293c245decfe02aaa.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/10f59084e3a7483703f641e7d7719003.jpg", + "title": "Pink Orchids", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/221b883b657b6dded6dd527450024f65.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f9d696389c084814efbbdc126fc59030.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/66b158d4c2f61d318b406e053f31124a.jpg", + "title": "Pink Tulips", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c8afb241ab07c2cfd74bbf012b37f396.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b2771cd586003c36f43ab1a7dfbf0b48.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c81873dfeeb88dd7b761a1ed52692e2f.jpg", + "title": "Sunshine Flowers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2f550b4ac80ffcca077f7895e2c49b99.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8785939e5edbb08287734a94911a8985.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/24fccc853bf63161b0be8cdf0ae94a12.jpg", + "title": "Sunset Ocean", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6c5f01619fb115aa3c73457c54c82c97.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ab46e8105f48e41be221d88c4b4ea439.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b679118950beeff1108185acb1ab5dff.jpg", + "title": "Rainbow Blue Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1b0bf474bf0a0eabe40517a4afe0e9f5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fce2d0f2e8ac8748825193d16ff12691.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0c295f9a0bd481ae67bf0866442a71fb.jpg", + "title": "Avocado Doodle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ac21bb692b86c5e57963df4e4e08bd4a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b65c82cd27b10160440b84a100176c92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1e6b407e1ddc2e718642bd6eb4a15c0b.jpg", + "title": "Palm Tree Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7f774153ed16e9c670047c895e6114b7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5f8d68dfa780161da140e67a243afe68.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3fe6e9b2ff0888efc534cb6496e05921.jpg", + "title": "God Bless You", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/720fc5e929749e50d0c2f416340efafc.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f682a73784968b80ccab63a4444b0713.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/45a97cc940148994015bd996e31f44e8.jpg", + "title": "Pink Clouds Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/69d7e363c073319d7907d1f7856df8ac.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0ef0063194e44ed69a81168bffe502ef.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/992443f6cda7103800f21e7800f7c55e.jpg", + "title": "Blue Sky", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c4c87e82bbe03560d30980c5be6b7ebb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4c81e476ad6ae631e64ee244187cd18c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fe41cdfbb3cb1e1773e87bb91efeb5d9.jpg", + "title": "Sunset Holiday2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c3ee8b92c47aa1d6eacbd3ce6abe816d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3cead83fa388d89dbac0eb19b2e25eea.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ba1b8e3684fca37c4cf24a2d76fdd309.jpg", + "title": "Soft Pink Flower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bbfd9b77ec269a272427f1f62c64318b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e2ffc9fb2f3724c9534bdddd0524bd6d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dc710c897eabf90c86d0013ebb161bac.jpg", + "title": "Summer Fruit Drinks", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c373737f0c13dde9fa9d74bce228486a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5e773bf9b71252d67c858ac6d92412ab.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/86486f2e85832e296c56fd3159e5798e.jpg", + "title": "Flower Wallpaper", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fce3ee4851f9d533c416414be4ad23ef.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b3db1bf3577e09b96ef902cc53fa15e0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/90db80de3ce5ad651a0bb344086927d7.jpg", + "title": "Zen Mood", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/38e252608699d2ddcd5f4cc3d538f65c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e4fbf3b984826df769a88bdd92aea5c6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/381c6913b1dd524cac0e3e0d9a44a246.jpg", + "title": "Summer Lemon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0bfa371f2bee59ee5bb8017e92cbc6f7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fdee42b90157a5c3c7a63a931903dcc8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/479181ec7aa8549e74fab1f0fec80884.jpg", + "title": "Glowing Pearl", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/caffe8eb905a2ca4b7dcc189b085c00d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d77dd0c0d829bb7c5beb5b86977696d6.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7d872cfb1d9654ad815067cd4336fbc8.jpg", + "title": "Autumn Lake", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/93a7704251e1269020b6f19b15c7642c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a6bd10b36d2dd706354322e3e18de470.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d6ad8e4995733cb227e9adc92aeae727.jpg", + "title": "Colorful Pebbles", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/d651a539ce8f5f602bf26eebaad32a46.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/58f1cce28cb955210522dedec159ab2f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8339e990415b60dc4e74a5ca9e05cb5f.jpg", + "title": "North Winter Light", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/01f808d8e58127fd00d3e9bf12056052.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e61419fbc88e5a89041d3273d75dfc08.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0cead175666a76b22d186201e1146dce.jpg", + "title": "Dandelion", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a8e525fb173d4a4c34d0e01b2ca530f8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fb927555302b4ac1ad54ec1ec6dd6e2b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/69e581447fad074b9e22d75ca14613c2.jpg", + "title": "Bright Pink Floral", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6c5b14af61db890ee5ed9196c4b415e9.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8ad3c4eaae181bac7a1426aa4b3dc83a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/188452581ee33d1e9deed446b3540582.jpg", + "title": "Vintage Holiday", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2dc1fbd0e0559146a1a5484e8628d66b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4ba860cc1a5b9e0dd178e92764654bb5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/eb466808aab5ca62bcb2c32778aa9a81.jpg", + "title": "Beach Vacation", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/eed5423de36b6d02c1215d38bf76783e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/575ecc3dc36918cd6ba29dc07711fb93.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/21ed394030dd26e630585a94b7d27be2.jpg", + "title": "Sakura Flowers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/217b65ae4bfe4940740a1ccba82204e3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/bf8b68d26dca5b245d9ff3a450bc1b92.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3e11dece672a40c8084ce5054db8d35d.jpg", + "title": "Morning Sunflower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a4e61fd12e3e0d2de383f24a996f3d9d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/304bd79e6058e0640cc4f31eadc4f6af.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/05113ea6f92bac6c741397dd9ff005cd.jpg", + "title": "Glamour Pink Flowers", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6f499b124ae94e4e53d469a0e33f54f7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ddef58557535a35ac0656d769a857688.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7e05a73f1b11afc1c18949761abb0715.jpg", + "title": "Ocean Love Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b486a7a6aa6a6b6882164e5e3fa6dba3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1cf74db507f6618315438027803f5e1e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c1d6f7a3bde3e927649c962c06a8784f.jpg", + "title": "Bright Flowers 2", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a7e6683a31f26efe5bcb87770ff96529.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/68013a4751d5ab8fa799952a4c38c871.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f082befb417770957e62417ea462332c.jpg", + "title": "True Love Roses", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b38a26a89634807b4dfbbb06b8e1a61a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1ffb31445ca13282212ba594ff38d872.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/efa769d211eb17961061fbb1cf6075a1.jpg", + "title": "Sunset Dolphins", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7464cf3b1171ae954d60ef1fac60d402.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/83807f64de72813d0fadee337cedcc22.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7ea17410d178556b0b6304534a0a5a40.jpg", + "title": "Wooden Flower Hearts", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/796f2d2d6191873195911a3ae8a01f5a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ad4fbc9d106eabb4c46ad8c101b41f2b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2bb328c679f768b83c41756a7bc28654.jpg", + "title": "Cute Mushrooms", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/454e754c41492134cbbebe35f7d9533d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ea2c502152c63c367732ce5022211681.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/13eef641ffff41591c1d536d333ae667.jpg", + "title": "Autumn Nature", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/265d8b320a7be56f848997001e84808f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c095a87a5f6a78908f67935a3173a33c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e026c18a6a071b3f95418c2da3cbe8a1.jpg", + "title": "Dainty Sunflower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/703e1aa2327e47eefb7091cc0a5dd3bf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/31a05ecd7dd7cfb3e730c4e83d591619.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1e644294acff725c053c4a93be9d72f3.jpg", + "title": "Ocean Rocks", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1412e169a774cead32169682a495ef7c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/deff95beb537e7b04fdc2e06f675bead.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/dd17116d85307cc89697c9610e090412.jpg", + "title": "Good Morning Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/caaaa8b114e33726ff4b7fc922ab7bb7.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e0f6c1c409a421aaadab1789c7c91a5d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f7069e7dec869a1ce5f0832c2e714cf6.jpg", + "title": "Cactus Garden", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6a117e20480933758c597e3ba3d201d8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b81e9df6497c3b638cddd3505dc94199.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4eefa881f66a9dc128bcdea63e43b72f.jpg", + "title": "Sunset Beach Leisure", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4a26f61dfafe672676dce4ebe2aef2e3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/fa35717ce65dcedd69f4ea910a86b66d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/334f1d54c86cedfb696e77ec6406ff6e.jpg", + "title": "Purple Sunset Beach", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/6d5ccc71296b38d615132e4600348e0d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a6a6cdd9ac9d38b52393aaa1a67170b0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/07dad500890755f323f77124d86aa018.jpg", + "title": "Tropical Beach", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ed22634fb6c9d97688ea7aa081371de6.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a409e9c6a101e50284f14264f12242c5.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ea7d12cd85d6a6235a3ebc55c177a246.jpg", + "title": "Happy Floral Bunny", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/42794f75a983cf97e5c76ddfc2e473d5.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4ea3ffdd90b4f892b0c0cbce1b27588a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/1b50cd04d017b7f6d260a46f32229201.jpg", + "title": "Watercolor Strawberry", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0930879b663268137c13c1a310fc141a.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5ff87158d97fd75f4737d2fcbfbfd5c1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d04b3a4fe02f503f91170a2ee3383bb8.jpg", + "title": "Cute Fluffy Cloud", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/437eb8a0d24a294af97ca09d007437a4.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8564ede5e6007f0bce058e07bcad5abd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/41e86a2cf0d6324cf9426450ee18868b.jpg", + "title": "Red Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/58dc0023b52b3bac724e827838aaf2fe.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d30de76e4179c425a90235574bd8feec.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a91cd9bc9162d8c410a3c72606d490b6.jpg", + "title": "Flowers Cyan", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3e481f95eba6ebb74018d4d53118d942.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1d412160691c3213a35210c03516f7ff.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/8fc02658593c79b8a91879eba814c7c0.jpg", + "title": "Night Sky Clouds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f8a2224d6bd745e3d88ec54e3bd2a13b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/44e34be19666a583db34cafd2ccba178.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/aa40c5f3242b2bd266cad581f6333f0f.jpg", + "title": "Shiny Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/48fa60fea2649b06176da567d300f27c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/47d825bc07c21bec2c0db8ee773ddb24.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/647cfdf811848512b66fbf6e8099f41b.jpg", + "title": "Ocean Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/85781a51979ce95e19eabacc4268328c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c4db66b07d02db19801b7aae5a39f8bf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/964b0816c8dd799b560da77740aba0ac.jpg", + "title": "Heart Cactus", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/16a34626f1cb9ee96bc395e96f3e1fd8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/765dbb9173d1f30e686d1dc8be76b165.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5a91424c6fc87c032c37f06cb3422eb9.jpg", + "title": "Aurora Skies", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/405a2a98970b5cd0cc95822a1e06781c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/962b5ea4f5de5a4ae59f97bad897f091.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/690dcc89ea6d9c483577f822cdea0769.jpg", + "title": "Pretty Clouds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9382fa42c8bab1235651d385648af7ee.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/9b895a16f6014c9127f6ce9e9ca03561.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/001798ae8d9aa5f16df222ae1a4261f1.jpg", + "title": "Blue Sky Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/131304d6d34d76e109df2950040c797f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ddb53aa6c5c7a13122d26c67d14168e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0466475d956c0a9f9a1df41a796f3a77.jpg", + "title": "Roses Flower", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2f178fbcdaf00bad50bb73f760a0d943.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c86b403d36efea87a2c73d09d37d2782.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/36f48df57effcf1908ab5475c96b8750.jpg", + "title": "Color Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/51a3aa5c85add61beea054fb31b6af81.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0c4e72f235f3a7d1e2cc9ae3931233b3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a7f936f7d599d22ff74ee51f07a11ba2.jpg", + "title": "Relaxing Summer Holiday", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/96634bf694597c1d560598c309c3dd28.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/41f03d596ed1935e76f4cab0d434d03c.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/53776bdec0e9edc3cb3876cabdcc2724.jpg", + "title": "Sunflower Field", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/687f358bab6a0d1a24d7fc46083d38f1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/7e29a32d1bcbd2c26897a892dd82a365.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6e291b627e01d51445a7ab1ff6a3c2ba.jpg", + "title": "Neon Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5041e519ee091d422ed30c8bba10f5ed.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4a30000f1a757105c280aa3a34e31567.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/89db73c77aad72ee49020a02ea65b531.jpg", + "title": "Simple Raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/525f3a818e2a7df75a91b028851b1d46.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/e57b9a807fa8865ccdb9528e00866e08.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/576bde2b0dfe1db6f7f8c9542685a94c.jpg", + "title": "Colorful Waterdrop", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/00142d5e702f361b17116777791af603.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/3734dd2d1d868db768057e82270e88f0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/78abeb6e105745decf6f14d0c42411c7.jpg", + "title": "Colorful Water Drops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a2d223212d96904d02db2d6fa77ebb15.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c0a4db53299d7e5667e81518b0f182fb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7d5a170c118642106d8fdd80e19c0584.jpg", + "title": "Marble Red Rose", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/5a5a71fd0e671788dbf4dadfbe245952.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/12b553c69f0299bc5e99b224cd29bdf3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d054d2cfdd78168a9fb59bac16311c29.jpg", + "title": "Water Drop 3D Glass", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/594ca3dfef4b31d39d636e16e8ff4858.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/23e5abff2737c30858354353e9fd5570.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/55e92975356b493cd7a196c486be2a1a.jpg", + "title": "Summer Sun Beach", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bd5bee65de1d09b1285988891f6edb35.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/58e5851676d7a846ebb30785ce8e9c9e.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/682a3f00cf32a3e0a5bef99ddd470d2f.jpg", + "title": "Sunset Holiday Seaside", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/998c359f861531e5583bb2caeed9d397.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6974cef444c3f372b7d0b158f98cef73.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/073e58ae676949d4a7cbcd41556197d7.jpg", + "title": "Blue raindrops", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2ad785f999dc6863bf4285bc4aed8ca9.7z" + } + ] + }, + { + "className": "super theme", + "list": [ + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/aba8cb2fd066580194a3fb838ca9a7e7.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d40617e0ff32ef86ed251aac742a0c3a.webp", + "title": "Pastel Simple Black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bfeb64913c9b7b9c9d650054b7044aaa.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/2b8b22f56b4bd95d63e7b43e5a8df0f9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/22c4e9f906834a3a449e68114c6674b9.webp", + "title": "3D NotePad", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/dd87f317131a4fdd0ccf26493aa84333.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/1e967d355a7f797010867612a4c2cf07.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/723f2153230a59f3103dbeb21b98abf3.jpg", + "title": "Graffiti Street Wall", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/161b1cfaeb4593ffd9fa29fc0c5545a3.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/78d85f99e4818dd488968b959b628b19.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b24c8bed0ff148893e28eac580651520.jpg", + "title": "Love Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3b95f45fb08e4f47270e39b8268d0981.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c8df8c8e00355dd55afbbf5b359e064f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/ce15be7a2c57f260faa57a14baa4d017.jpg", + "title": "Cancer Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/746a3e0e2a7ef8eb463a341f462c3eeb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f3fb5617504206e0d3f27de4954c1295.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2ba9c4fee6f9fd83011b059eb1f29dda.jpg", + "title": "Cool Black Metal", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/fb5634ea81993e75a15efbf406b2ef93.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b0cb58226917a93a4be8e5ec8ad885e8.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/30016222f115cbb874170227c0d9eacd.jpg", + "title": "Green Candy Color", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/825141b4fc920bbf81c53e827debc5cb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c97062c8e363d8ca3a5919cd88200108.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/c81492e70629068f541dcf3b31b802c6.jpg", + "title": "Love Neon Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/35f8178b6bf1624d2ae2d7fea4845600.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0f939b2a722f3fac4dc0a3f406086ba9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7738566b2335c56f70749e4d7863de3e.jpg", + "title": "Palm Tree Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7bc1be2ffe40410c126f23c0923a63b8.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6ee67b8a6e8b3833a7e5ff58563ae501.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/b458f7c397b9bfec2efc257249f0cd09.jpg", + "title": "LED Lights Gravity", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24d3774dac352c435d21b76599514adf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/049f7af4ae9e8d251c3672bd139e2de2.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/37b091687b7bed38e3d43d1084d52843.jpg", + "title": "Pastel Sweet Cookie", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/9dae21130e5748466a03c76b360806ab.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a6e0954234ae12f773293ebed0d078cd.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3d9e136b926e6c14a0159b0a24b51e46.jpg", + "title": "Purple Beach Sunset", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c2f40362e286e3c63b25b783d0468f82.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/c7ede13b0e494f6470d02e2d7f35e58d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/db43851144d22a7ce74a56b6527602bb.jpg", + "title": "Color Metal black", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c74ac813975ba8e83ec043218298e7e0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/74a825c9ffde55e228da3753a6b2fe3b.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/e396f765bf8a8d2ed8be645193c346cc.jpg", + "title": "Pink Sweet Candy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e62e666cd830654d6c261e2ab75bcc1b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/db8b8e84bf7702e21c2a3f1cf3acd8fb.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/4faea3dad37d83d2a8129e8d2c614b84.jpg", + "title": "Neon Glow Lights", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/b36afa11ef954cd239168d5d7c0fd29f.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/957f5042913a3cf726168b5578648af0.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/2a6a6003c783f4e5cd173227ee947e0c.jpg", + "title": "Pink Candy Color", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/64639f34ceacc25d7dec51fee09621bf.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/5f2d9be05d7646a91fe655643d30028a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9ff2c75892bf1aed3369281bab692b5f.jpg", + "title": "Neon Lights Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1cf907bb59f5dbc6b659c4d331950606.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/b862dfaedc7d44584956174a57dc86fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f2857b77386443011fc1c2ceb2c395fb.jpg", + "title": "Funny Emoji Party", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/20ed5748746a58f248e44c36d90f535b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8a8d7b3e46626f1f0a0c8a499490ea4d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9e1f2e5d9238274566586d31415f7378.jpg", + "title": "Cool Neon Glitch", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/1c65096f0a57d8da30da66f0219b3635.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/8414752d65f1ccd9788e6a720f718194.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/fcd5785bfb4e07e8654224baa6ca18dc.jpg", + "title": "Ombre Grey", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/066241ccaaf8a66af40858bab4db176b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f8620061952e066e406a3eede83f01cc.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/51088c822351c13e9c09e689fe690d49.jpg", + "title": "Galaxy Sparkle", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/0b0ea81df17f8a5d0531786fa008c710.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0b8f250eee988b3c80dca4abca7d386a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7cc49fe0b00b2b434dd63018b921ae1c.jpg", + "title": "Rainbow Colors", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e365eb34c52fe371247ddba5f4adf9c1.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/acb88181e3e5865df708af35edba4893.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/237e24e77946fdb2be590867b7e7e3ec.jpg", + "title": "Libra Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/f447b7586312273e1124c6649b94d281.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4b08806efa681f4bfb295b15ee5a0689.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/6259cdb4c7da266c80c6f1592a4b9101.jpg", + "title": "Galaxy Color 3D", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/ca75a8e72d346248f58210eaae1f5d45.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/d8fdbaa632a3a0b5f097cbb58db6e6fe.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/33413134b6b259b84f841d3946ea569d.jpg", + "title": "Rose Gold Diamonds", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/3080731fea4235792a025deb2a662b66.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6c2cc3914ed7de760535412d38f0b3cf.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9d3db25022411f1cbfaa13ba7cb0bcd3.jpg", + "title": "Shining Moon", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a6332edd6df4a092787de53fc5de4e2e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/35f046a366f6ea14a710bb7fb94a57b9.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/644a246ec79fe7a2db7281152946f773.jpg", + "title": "Rose Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/125a8b3e8331c533a76a0d59834a51fd.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/831dfb9e3cd53a3dc62cdfde0fe66b81.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/be32fce0e9e05a94b946598285142501.jpg", + "title": "Metallic Drip Color", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/4e65c58cd1b5146acec999a09baf7e77.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/942548ec61a902e33338247fa6bee80f.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/cdedd01bddec28cbb0f868f7e5578b07.jpg", + "title": "Neon Light LED", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/a4dcaf8f818bb2d7821196016fd99a12.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/ca339d5f865ca158cfaa1f26e086d237.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/9fb99fe1a963f19561a2d682488b17ca.jpg", + "title": "Earth Marble", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c452c97a82393b2a16f43cf37cc31fcb.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/92cd9f722bdfeda8f7db5d1bb605fb72.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/3e9eb8c50315a194e8456b159cb6bc77.jpg", + "title": "Beautiful Roses", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/bed932d13a73e70304f02f395aa68ff0.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/a6fe91882d8a07422d43920db6c46670.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/007333711d2e73b6d589ef38f7a17330.jpg", + "title": "Neon Led", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/2d358fd9a25d8c11627f2c956a0fad5e.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/de27e75ea86c9d4f7f9f31c87b1c4e49.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/5de498a246279e77caa990c308e78f9b.jpg", + "title": "Pink Glitter Crystal", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/24636d6b318d85e1db9c5ddf683f827d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6e9df560c4e5fc7b2e490bc8f2a9e43a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/db7f62bb255a6d75866eebc42965259d.jpg", + "title": "Black Crystal Color ", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/7f393dfeba924fe75d58ef4cd29ca01c.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/21f88b441bd80bc930a595f4fc7069b4.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/7c69a8db76c26e78ce40009457e8cf4f.jpg", + "title": "Pink Blue Glitter", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/12018e8e1a71d962f226ee399226430d.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4af051b6187c2ce872792c8ac5275a60.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/d5630de0c39a113cc639aed5eed9dda8.jpg", + "title": "Rainbow Holograph", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/c5a1acc3055bf63ca3d5eacfa2c5651b.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0428a1d89be9367dc3ed53ba3ba33a7d.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/0904b17618d5973a6a82a812d33b40c3.jpg", + "title": "Love Balloons", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/86bcfd66909831f8adce69a06da90141.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/6e9c2beae96dd22493ec0af84c8b1c2a.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/a434ac0092c8d4932352e89211e96be2.jpg", + "title": "Galaxy Panda Love", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/863dcbeb9dbab2a5af6b0e092f067a10.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/f7dddba03625953a94d8fb404b6362b1.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/90ec348f135dc4ba430e295e95832a6b.jpg", + "title": "Purple Neon Cat", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/056cdb3922ec089ea5fb98390354ec32.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/4cffe143f130cad4969f064a6d2efaf3.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/48a1b175105a3afee8427dcab02d74f4.jpg", + "title": "Taurus Galaxy", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/e106d12ef16da2ad73d1d8e7f862ad44.7z" + }, + { + "preview": "https://resource-sg-public.lux-ad.com/keyboard/0d63ba44cff3f25075b7a37a2b57f678.webp", + "thumb": "https://resource-sg-public.lux-ad.com/keyboard/21f6d32e22f89fb0de90d734cb9a550a.jpg", + "title": "Rainbow Gradient Glitter", + "zipUrl": "https://resource-sg-public.lux-ad.com/keyboard/81ce97931a29c60394fbe844c5abfcd8.7z" + } + ] + } +] \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/HomeActivity.java b/app/src/main/java/com/example/fingerkeyboard/HomeActivity.java new file mode 100644 index 0000000..406f6ab --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/HomeActivity.java @@ -0,0 +1,44 @@ +package com.example.fingerkeyboard; + +import android.content.Intent; +import android.os.Bundle; +import android.os.CountDownTimer; + +import com.example.fingerkeyboard.R; +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +public class HomeActivity extends AppCompatActivity { + private CountDownTimer countDownTimer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_home); + countDownTimer = new CountDownTimer(1000,500) { + @Override + public void onTick(long millisUntilFinished) { + + } + + @Override + public void onFinish() { + Intent intent = new Intent(HomeActivity.this,MainActivity.class); + startActivity(intent); + finishAffinity(); + } + }; + goCount(); + } + + public void goCount(){countDownTimer.start();} + + @Override + protected void onDestroy() { + super.onDestroy(); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/KeyBoard.java b/app/src/main/java/com/example/fingerkeyboard/KeyBoard.java new file mode 100644 index 0000000..a0312fe --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/KeyBoard.java @@ -0,0 +1,41 @@ +package com.example.fingerkeyboard; + +import android.app.Application; + +import com.example.fingerkeyboard.data.ListName; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +public class KeyBoard extends Application { + public static KeyBoard app; + public static List listNames; + private boolean isinit = false; + + @Override + public void onCreate() { + super.onCreate(); + app = this; + try { + InputStream open = getAssets().open("keyboard.json"); + String covertStr = Readfile.getCovertStr(open); + if (!covertStr.isEmpty()) { + Gson gson = new Gson(); + listNames = gson.fromJson(covertStr, new TypeToken>() { + }.getType()); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + public static List getuserList() { + + if(listNames != null){ + return listNames; + } + return listNames; + } +} diff --git a/app/src/main/java/com/example/fingerkeyboard/MainActivity.java b/app/src/main/java/com/example/fingerkeyboard/MainActivity.java new file mode 100644 index 0000000..e581223 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/MainActivity.java @@ -0,0 +1,257 @@ +package com.example.fingerkeyboard; + +import android.content.Intent; +import android.os.Bundle; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.PopupMenu; +import android.widget.Toast; + + +import androidx.appcompat.app.AppCompatActivity; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; +import com.example.fingerkeyboard.R; + +import com.example.fingerkeyboard.fragment.AestheticFragment; +import com.example.fingerkeyboard.fragment.CoolFragment; +import com.example.fingerkeyboard.fragment.CuteFragment; +import com.example.fingerkeyboard.fragment.FestivalFragment; +import com.example.fingerkeyboard.fragment.GravityFragment; +import com.example.fingerkeyboard.fragment.LoveFragment; +import com.example.fingerkeyboard.fragment.NeonFragment; +import com.example.fingerkeyboard.fragment.SuperFragment; + +public class MainActivity extends AppCompatActivity implements View.OnClickListener, PopupMenu.OnMenuItemClickListener { + + protected Button btn_love,btn_festival,btn_cute,btn_category; + private ImageView image_set; +// private Fragment lovefragment,festivalfragment,cutefragment,gravityfragment,neonfragment,coolFragment,aestheticfragment,superfragment; + + private LoveFragment lovefragment; + private FestivalFragment festivalfragment; + private CuteFragment cutefragment; + private GravityFragment gravityfragment; + private NeonFragment neonfragment; + private CoolFragment coolFragment; + private SuperFragment superfragment; + + private AestheticFragment aestheticfragment; + + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + initfindview(); + goLoveFragment(); + + } + + private void initfindview(){ + btn_love = (Button) findViewById(R.id.btn_love); + btn_love.setSelected(true); + btn_festival = (Button) findViewById(R.id.btn_festival); + btn_cute = (Button) findViewById(R.id.btn_cute); + btn_category = (Button)findViewById(R.id.btn_category); + image_set = (ImageView)findViewById(R.id.image_set); + btn_love.setOnClickListener(this); + btn_festival.setOnClickListener(this); + btn_cute.setOnClickListener(this); + btn_category.setOnClickListener(this); + image_set.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.btn_love: + setBtn(); + btn_love.setSelected(true); + goLoveFragment(); + break; + case R.id.btn_festival: + setBtn(); + btn_festival.setSelected(true); + goFestivalFragment(); + break; + case R.id.btn_cute: + setBtn(); + btn_cute.setSelected(true); + goCuteFragment(); + break; + case R.id.btn_category: + setBtn(); + btn_category.setSelected(true); + PopupMenu popup = new PopupMenu(this, v); + MenuInflater inflater = popup.getMenuInflater(); + inflater.inflate(R.menu.main, popup.getMenu()); + popup.setOnMenuItemClickListener(this); + popup.show(); + break; + case R.id.image_set: + Intent intent = new Intent(MainActivity.this, SettingActivity.class); + startActivity(intent); + default: + break; + + } + } + private void setBtn(){ + btn_love.setSelected(false); + btn_festival.setSelected(false); + btn_cute.setSelected(false); + btn_category.setSelected(false); + } + @Override + public boolean onMenuItemClick(MenuItem item) { + // TODO Auto-generated method stub + switch (item.getItemId()) { + case R.id.m_gravity: + setmenu(); + + goGravityFragment(); + break; + case R.id.m_neon: + setmenu(); + goNeonFragment(); + case R.id.m_cool: + setmenu(); + goCoolFragment(); + break; + case R.id.m_aesthetic: + setmenu(); + goAestheticFragment(); + break; + case R.id.m_super: + setmenu(); + goSuperFragment(); + break; + default: + break; + } + return false; + } + private void setmenu(){ + btn_love.setSelected(false); + btn_festival.setSelected(false); + btn_cute.setSelected(false); + btn_category.setSelected(false); + } + private void goLoveFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if(lovefragment == null){ + lovefragment = new LoveFragment(); + transaction.add(R.id.bottom_layout,lovefragment); + } + hideFragment(transaction); + transaction.show(lovefragment); + transaction.commit(); + } + private void goFestivalFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if(festivalfragment == null){ + festivalfragment = new FestivalFragment(); + transaction.add(R.id.bottom_layout,festivalfragment); + } + hideFragment(transaction); + transaction.show(festivalfragment); + transaction.commit(); + } + private void goCuteFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if(cutefragment == null){ + cutefragment = new CuteFragment(); + transaction.add(R.id.bottom_layout,cutefragment); + } + hideFragment(transaction); + transaction.show(cutefragment); + transaction.commit(); + } + private void goGravityFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if( gravityfragment== null){ + gravityfragment = new GravityFragment(); + transaction.add(R.id.bottom_layout,gravityfragment); + } + hideFragment(transaction); + transaction.show(gravityfragment); + transaction.commit(); + } + + private void goNeonFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if( neonfragment== null){ + neonfragment = new NeonFragment(); + transaction.add(R.id.bottom_layout,neonfragment); + } + hideFragment(transaction); + transaction.show(neonfragment); + transaction.commit(); + } + private void goCoolFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if( coolFragment== null){ + coolFragment = new CoolFragment(); + transaction.add(R.id.bottom_layout,coolFragment); + } + hideFragment(transaction); + transaction.show(coolFragment); + transaction.commit(); + } + private void goAestheticFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if( aestheticfragment== null){ + aestheticfragment = new AestheticFragment(); + transaction.add(R.id.bottom_layout,aestheticfragment); + } + hideFragment(transaction); + transaction.show(aestheticfragment); + transaction.commit(); + } + private void goSuperFragment(){ + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if( superfragment== null){ + superfragment = new SuperFragment(); + transaction.add(R.id.bottom_layout,superfragment); + } + hideFragment(transaction); + transaction.show(superfragment); + transaction.commit(); + } + + + + private void hideFragment(FragmentTransaction transaction){ + if(lovefragment != null){ + transaction.hide(lovefragment); + } + if(festivalfragment != null){ + transaction.hide(festivalfragment); + } + if(cutefragment != null){ + transaction.hide(cutefragment); + } + if(gravityfragment != null){ + transaction.hide(gravityfragment); + } + if(neonfragment != null){ + transaction.hide(neonfragment); + } + if(coolFragment != null){ + transaction.hide(coolFragment); + } + if(aestheticfragment != null){ + transaction.hide(aestheticfragment); + } + if(superfragment != null){ + transaction.hide(superfragment); + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/PreviewActivity.java b/app/src/main/java/com/example/fingerkeyboard/PreviewActivity.java new file mode 100644 index 0000000..f6f10da --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/PreviewActivity.java @@ -0,0 +1,188 @@ +package com.example.fingerkeyboard; + +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; + +import com.example.fingerkeyboard.listener.DownloadCallback; +import com.example.fingerkeyboard.listener.UnzipCallback; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.DataSource; +import com.bumptech.glide.load.engine.GlideException; +import com.bumptech.glide.request.RequestListener; +import com.bumptech.glide.request.target.Target; +import com.example.fingerkeyboard.tool.MyTools; + +import java.io.File; +import com.example.fingerkeyboard.R; + +public class PreviewActivity extends AppCompatActivity { + private ImageView imageViewBack; + private ImageView imageViewPreview; + private TextView textViewName; + private LinearLayout linearLayoutDown; + private ProgressBar progressBarDownload; + private ProgressBar progressBarPreview; + private String url; + private String name; + private String preview; + public static String KEY_NAME = "key_name"; + public static String KEY_URL = "key_url"; + public static String KEY_PRE = "key_pre"; + private String unzipPath; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_preview); + initView(); //ui属性 + progressBarPreview.setVisibility(View.VISIBLE);//将进度条设置成可见状态 + onGetData(); //获取数据 + + } + public void initView(){ + imageViewBack = findViewById(R.id.image_view_back_id); + imageViewPreview = findViewById(R.id.image_view_preview_id); + textViewName = findViewById(R.id.text_view_name_id); + linearLayoutDown = findViewById(R.id.linear_layout_download_id); + progressBarPreview = findViewById(R.id.progress_bar_preview_id); + progressBarDownload = findViewById(R.id.progress_bar_download_id); + } + + //获取数据 + public void onGetData(){ + Intent intent = getIntent(); + name = intent.getStringExtra(KEY_NAME); + url = intent.getStringExtra(KEY_URL); + preview = intent.getStringExtra(KEY_PRE); + textViewName.setText(name); + Glide.with(this).load(preview).addListener(new RequestListener() { + @Override + public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { + progressBarPreview.setVisibility(View.GONE);//将进度条设置成不可见状态 + return false; + } + + @Override + public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) { + progressBarPreview.setVisibility(View.GONE);//将进度条设置成不可见状态 + return false; + } + }).into(imageViewPreview); + + File cacheDir = this.getCacheDir(); + unzipPath = cacheDir + "/" + name; + + Log.d("--------------------","----------name+"+name); + setListener(); + } + + //点击事件 + private void setListener(){ + linearLayoutDown.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setAction(); + } + }); + imageViewBack.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.d("--------------------","----------finish"); + finish(); + } + }); + } + + @Override + public void onBackPressed() { + //按下返回键,实现日志打印 + super.onBackPressed(); + Log.d("-------","--------onBackPressed "); + } + + private void setAction() { + if (!MyTools.isStep1() || !MyTools.isStep2()) { + AlertDialog alertDialog2 = new AlertDialog.Builder(this) + .setTitle("Worn") + .setMessage(getString(R.string.text_hint)) + .setIcon(R.mipmap.logo) + .setPositiveButton("yes", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + Intent intent = new Intent(PreviewActivity.this,SettingActivity.class); + startActivity(intent); + } + }) + .setNegativeButton("cancel", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + + } + }) + .create(); + alertDialog2.show(); + return; + } + + goApply(); + } + + private void goApply() { + progressBarDownload.setVisibility(View.VISIBLE); + String skinPathByName = MyTools.getSkinPathByName(name); + Log.d("----skinPathByName","------skinPathByName+"+skinPathByName); + if (!skinPathByName.isEmpty()) { + setCurrentKeyboardSkin(skinPathByName); + progressBarDownload.setVisibility(View.GONE); + Toast.makeText(PreviewActivity.this, getString(R.string.set_successful), Toast.LENGTH_SHORT).show(); + finish(); + return; + } + MyTools.downloadZip(url, this, new DownloadCallback() { + @Override + public void onDownloadCall(boolean successful, File resource) { + if (successful) { + MyTools.unzipFile(unzipPath, resource, new UnzipCallback() { + + @Override + public void onUnzipCall(boolean successful, String resDirPath) { + progressBarDownload.setVisibility(View.GONE); + if (successful) { + MyTools.saveSkinByName(name, resDirPath); + setCurrentKeyboardSkin(resDirPath); + Toast.makeText(PreviewActivity.this, getString(R.string.set_successful), Toast.LENGTH_SHORT).show(); + finish(); + } + + } + }); + } else { + progressBarDownload.setVisibility(View.GONE); + } + + } + }); + } + + private void setCurrentKeyboardSkin(String resDirPath) { + Log.d("---","----path"+resDirPath); + MyTools.saveSkin(resDirPath); + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/Readfile.java b/app/src/main/java/com/example/fingerkeyboard/Readfile.java new file mode 100644 index 0000000..75ee673 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/Readfile.java @@ -0,0 +1,32 @@ +package com.example.fingerkeyboard; + + + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; + +public class Readfile { + public static String getCovertStr(InputStream stream) { + String covertStr = ""; + try { + StringWriter writer = new StringWriter(); + char[] buffer = new char[stream.available()]; + Reader reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8)); + int a = 0; + while ((a = reader.read(buffer)) != -1) { + writer.write(buffer, 0, a); + } + covertStr = writer.toString(); + } catch (IOException e) { + return covertStr; + } + return covertStr; + } + + +} diff --git a/app/src/main/java/com/example/fingerkeyboard/SettingActivity.java b/app/src/main/java/com/example/fingerkeyboard/SettingActivity.java new file mode 100644 index 0000000..36e2301 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/SettingActivity.java @@ -0,0 +1,99 @@ +package com.example.fingerkeyboard; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; +import com.example.fingerkeyboard.R; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.fingerkeyboard.tool.MyTools; + + +public class SettingActivity extends AppCompatActivity { + + private BroadcastReceiver broadcastReceiver; + + private ImageView imageViewBack; + + private TextView textViewStep1; + private TextView textViewStep2; + @Override + protected void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_setting); + initView(); + + + //在运行时注册一个广播接收者,以便接收输入法改变的广播消息。 + broadcastReceiver = new inputReceive(); + registerReceiver(broadcastReceiver, new IntentFilter(Intent.ACTION_INPUT_METHOD_CHANGED)); + + + refreshStatus(); + setListener(); + } + + private void initView(){ + imageViewBack = findViewById(R.id.image_view_back_id); + textViewStep1 = findViewById(R.id.textview_step1); + textViewStep2 = findViewById(R.id.textview_step2); + } + + private void setListener(){ + imageViewBack.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + finish(); + } + }); + textViewStep1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MyTools.goSetStep1(SettingActivity.this); + + } + }); + textViewStep2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MyTools.goSetStep2(); + } + }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + unregisterReceiver(broadcastReceiver); + } + + private void refreshStatus() { + textViewStep2.setSelected(MyTools.isStep2()); + textViewStep1.setSelected(MyTools.isStep1()); + + } + + @Override + protected void onResume() { + super.onResume(); + refreshStatus(); + } + + class inputReceive extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + refreshStatus(); + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/adapter/ThumbAdapter.java b/app/src/main/java/com/example/fingerkeyboard/adapter/ThumbAdapter.java new file mode 100644 index 0000000..26f21a6 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/adapter/ThumbAdapter.java @@ -0,0 +1,105 @@ +package com.example.fingerkeyboard.adapter; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.DataSource; +import com.bumptech.glide.load.engine.GlideException; +import com.bumptech.glide.request.RequestListener; +import com.bumptech.glide.request.target.Target; +import com.example.fingerkeyboard.PreviewActivity; + +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.data.MyData; + + +import java.util.ArrayList; +import java.util.List; + +public class ThumbAdapter extends RecyclerView.Adapter { + private Context adapter_context; + List< MyData > myDataList = new ArrayList<>(); + + //private List myDataList; + public ThumbAdapter(Context context,List list){ + adapter_context = context; + myDataList = list; + } + + @Override + public void onBindViewHolder(@NonNull ThumbViewHolder holder, int position) { + + MyData myData = myDataList.get(position); //获取位置 + String thumbnail = myData.getThumb(); //获取缩略图 + Glide.with(adapter_context).load(thumbnail) + .error(R.mipmap.ic_launcher) + .listener(new RequestListener() { + @Override + public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { + return false; + } + + @Override + public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) { + return false; + } + }) + .into(holder.getImageViewThumb()); + holder.getConstraintLayout().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(adapter_context, PreviewActivity.class); + intent.putExtra(PreviewActivity.KEY_NAME,myData.getResourseName()); + intent.putExtra(PreviewActivity.KEY_URL,myData.getZipUrl()); + intent.putExtra(PreviewActivity.KEY_PRE,myData.getPreview()); + adapter_context.startActivity(intent); + } + }); + } + + + + public static final class ThumbViewHolder extends RecyclerView.ViewHolder{ + private ImageView imageViewThumb; + private ConstraintLayout constraintLayout; + + public ThumbViewHolder(@NonNull View itemView) { + super(itemView); + imageViewThumb = itemView.findViewById(R.id.image_view_key_id); + constraintLayout = itemView.findViewById(R.id.constraint_layout_id); + } + + public ImageView getImageViewThumb() { + return imageViewThumb; + } + + public ConstraintLayout getConstraintLayout() { + return constraintLayout; + } + } + + @Override + public int getItemCount() { + return myDataList.size(); + } + + @NonNull + @Override + public ThumbViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View itemview = LayoutInflater.from(adapter_context).inflate(R.layout.list_thumb,parent,false); + ThumbViewHolder thumbViewHolder = new ThumbViewHolder(itemview); + return thumbViewHolder; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/data/ListName.java b/app/src/main/java/com/example/fingerkeyboard/data/ListName.java new file mode 100644 index 0000000..52f68cd --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/data/ListName.java @@ -0,0 +1,24 @@ +package com.example.fingerkeyboard.data; + +import java.util.List; + +public class ListName { + private String classname; + private List list; + + public void setClassname(String classname) { + this.classname = classname; + } + + public void setList(List list) { + this.list = list; + } + + public String getClassname() { + return classname; + } + + public List getList() { + return list; + } +} diff --git a/app/src/main/java/com/example/fingerkeyboard/data/MyData.java b/app/src/main/java/com/example/fingerkeyboard/data/MyData.java new file mode 100644 index 0000000..7d69296 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/data/MyData.java @@ -0,0 +1,40 @@ +package com.example.fingerkeyboard.data; + +public class MyData { + private String title; + private String thumb; + private String zipUrl; + private String preview; + + public void setResourseName(String resourseName) { + this.title = resourseName; + } + + public void setThumb(String thumb) { + this.thumb = thumb; + } + + public void setZipUrl(String zipUrl) { + this.zipUrl = zipUrl; + } + + public void setPreview(String preview) { + this.preview = preview; + } + + public String getResourseName() { + return title; + } + + public String getThumb() { + return thumb; + } + + public String getZipUrl() { + return zipUrl; + } + + public String getPreview() { + return preview; + } +} diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/AestheticFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/AestheticFragment.java new file mode 100644 index 0000000..159c362 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/AestheticFragment.java @@ -0,0 +1,36 @@ +package com.example.fingerkeyboard.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; + +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; +import com.example.fingerkeyboard.R; + +import java.util.List; + +public class AestheticFragment extends Fragment { + private RecyclerView recyclerView; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_festival, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(6).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/CoolFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/CoolFragment.java new file mode 100644 index 0000000..3e0dade --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/CoolFragment.java @@ -0,0 +1,36 @@ +package com.example.fingerkeyboard.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; + +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; +import com.example.fingerkeyboard.R; + +import java.util.List; + +public class CoolFragment extends Fragment { + private RecyclerView recyclerView; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_gravity, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(5).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/CuteFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/CuteFragment.java new file mode 100644 index 0000000..e8d6c89 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/CuteFragment.java @@ -0,0 +1,39 @@ +package com.example.fingerkeyboard.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + + +public class CuteFragment extends Fragment { + private RecyclerView recyclerView; + + @SuppressLint("MissingInflatedId") + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_cute, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(2).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/FestivalFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/FestivalFragment.java new file mode 100644 index 0000000..f89c394 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/FestivalFragment.java @@ -0,0 +1,39 @@ +package com.example.fingerkeyboard.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + +public class FestivalFragment extends Fragment { + private RecyclerView recyclerView; + + @SuppressLint("MissingInflatedId") + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_festival, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(1).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/GravityFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/GravityFragment.java new file mode 100644 index 0000000..64e944f --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/GravityFragment.java @@ -0,0 +1,40 @@ +package com.example.fingerkeyboard.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + + +public class GravityFragment extends Fragment { + private RecyclerView recyclerView; + + @SuppressLint("MissingInflatedId") + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_gravity, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(3).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/LoveFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/LoveFragment.java new file mode 100644 index 0000000..e5cf48a --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/LoveFragment.java @@ -0,0 +1,36 @@ +package com.example.fingerkeyboard.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + +public class LoveFragment extends Fragment { + private RecyclerView recyclerView; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_love, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(0).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/NeonFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/NeonFragment.java new file mode 100644 index 0000000..4b6db05 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/NeonFragment.java @@ -0,0 +1,36 @@ +package com.example.fingerkeyboard.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + + +public class NeonFragment extends Fragment { + private RecyclerView recyclerView; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_festival, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(4).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/fragment/SuperFragment.java b/app/src/main/java/com/example/fingerkeyboard/fragment/SuperFragment.java new file mode 100644 index 0000000..2c2a640 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/fragment/SuperFragment.java @@ -0,0 +1,36 @@ +package com.example.fingerkeyboard.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; +import com.example.fingerkeyboard.adapter.ThumbAdapter; +import com.example.fingerkeyboard.data.MyData; +import com.example.fingerkeyboard.tool.MyTools; +import com.example.fingerkeyboard.tool.SpaceItem; + +import java.util.List; + +public class SuperFragment extends Fragment { + private RecyclerView recyclerView; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_festival, container, false); + recyclerView = view.findViewById(R.id.recycler_view_id); + List list = KeyBoard.getuserList().get(7).getList(); + recyclerView.setAdapter(new ThumbAdapter(getActivity(), list)); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2)); + recyclerView.addItemDecoration(new SpaceItem(MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()),MyTools.dpToPx(10,getActivity()))); + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/listener/DownloadCallback.java b/app/src/main/java/com/example/fingerkeyboard/listener/DownloadCallback.java new file mode 100644 index 0000000..60fc218 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/listener/DownloadCallback.java @@ -0,0 +1,8 @@ +package com.example.fingerkeyboard.listener; + +import java.io.File; + +public interface DownloadCallback { + + void onDownloadCall(boolean successful, File resource); +} diff --git a/app/src/main/java/com/example/fingerkeyboard/listener/UnzipCallback.java b/app/src/main/java/com/example/fingerkeyboard/listener/UnzipCallback.java new file mode 100644 index 0000000..91e69d7 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/listener/UnzipCallback.java @@ -0,0 +1,6 @@ +package com.example.fingerkeyboard.listener; + +public interface UnzipCallback { + + void onUnzipCall(boolean successful, String resDirPath); +} diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/CustomViewConfig.java b/app/src/main/java/com/example/fingerkeyboard/tool/CustomViewConfig.java new file mode 100644 index 0000000..ce56080 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/CustomViewConfig.java @@ -0,0 +1,195 @@ +package com.example.fingerkeyboard.tool; + +import android.content.Context; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.StateListDrawable; +import android.util.Log; +import android.util.Xml; + +import androidx.core.content.ContextCompat; + +import com.example.fingerkeyboard.KeyBoard; +import com.example.fingerkeyboard.R; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.File; +import java.io.IOException; +import java.io.StringReader; +import java.util.Objects; + +public class CustomViewConfig { + private String Bg_action_normal = "btn_keyboard_key_functional_normal.9.png"; + private String jpg_BG = "keyboard_background.jpg"; + + private String jpg_BG_new = "keyboard_background.png"; + private String color_normal_key = "key_text_color_normal"; + private String color_action_key = "key_text_color_functional"; + private String Bg_pressed = "btn_keyboard_key_normal_pressed.9.png"; + private String Bg_normal = "btn_keyboard_key_normal_normal.9.png"; + private String path_drawxh = "/drawable-xhdpi-v4/"; + private String path_drawxxh = "/drawable-xxhdpi-v4/"; + private String path_color = "/colors.xml"; + private String icon_del = "sym_keyboard_delete_normal.png"; + private String icon_shift = "sym_keyboard_shift.png"; + private String Bg_action_pressed = "btn_keyboard_key_functional_pressed.9.png"; + private String icon_shift_lock = "sym_keyboard_shift_locked.png"; + + private String Bg_space_normal = "btn_keyboard_spacekey_normal_normal.9.png"; + private String Bg_space_pressed = "btn_keyboard_spacekey_normal_pressed.9.png"; + + + private Drawable BgActionDraw; + private Drawable BgSpaceDraw; + private Drawable BgNormalDraw; + private Drawable iconShift = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.ico_shift_lit); + private Drawable iconDel = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.del_icon); + private Drawable BG = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.de_keyboard_bg); + + private int keyNoramlcolor = com.example.fingerkeyboard.KeyBoard.app.getResources().getColor(R.color.white, null); + + private int keyActioncolor = com.example.fingerkeyboard.KeyBoard.app.getResources().getColor(R.color.white, null); + + private Drawable iconShiftLock = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.ico_shift_lit); + + public Drawable getBG() {return BG;} + + public Drawable getBgActionDraw() { + return BgActionDraw; + } + + public Drawable getBgSpaceDraw() { + return BgSpaceDraw; + } + + public Drawable getBgNormalDraw() { + return BgNormalDraw; + } + + public Drawable getIconShift() { + return iconShift; + } + + public Drawable getIconDel() { + return iconDel; + } + + public Drawable getIconShiftLock() { + return iconShiftLock; + } + + public int getKeyNoramlcolor() { + return keyNoramlcolor; + } + + public int getKeyActioncolor() { + return keyActioncolor; + } + + public void init(){ + + iconShift = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.ico_shift_lit); + iconDel = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.del_icon); + BG = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.de_keyboard_bg); + iconShiftLock = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app, R.drawable.ico_shift_lit); + + keyNoramlcolor = com.example.fingerkeyboard.KeyBoard.app.getResources().getColor(R.color.white, null); + + Drawable drawable1 = ContextCompat.getDrawable(com.example.fingerkeyboard.KeyBoard.app,R.mipmap.logo); + Drawable drawable2 = ContextCompat.getDrawable(KeyBoard.app,R.mipmap.logo); + + + StateListDrawable state = MyTools.getStatus(drawable2,drawable1);//首先创建了一个StateListDrawable对象status。 + BgActionDraw = state; + BgNormalDraw = state; + BgSpaceDraw = state; + } + + //获取键盘未按下时背景 + private Drawable getKeyBackGround(Context context, String resDirPath, String drawName) + { + String filePath = resDirPath+path_drawxh+drawName; //文件路径 + File file = new File(filePath); + if (!file.exists()) { + return null; + } + BitmapDrawable bitmapDrawable = new BitmapDrawable(context.getResources(), BitmapFactory.decodeFile(filePath)); + return bitmapDrawable; + } + private Drawable getBackGround(Context context,String resDirPath) + { + String filePath = resDirPath+path_drawxxh+jpg_BG; + if (!new File(filePath).exists()) { + filePath = resDirPath+path_drawxxh+jpg_BG_new; + } + + //BitmapDrawable 是对位图(Bitmap)的一种包装。它允许将一个 Bitmap 对象包装成一个可绘制的资源,以便在 Android 应用中使用 + BitmapDrawable bitmapDrawable = new BitmapDrawable(context.getResources(), BitmapFactory.decodeFile(filePath)); + return bitmapDrawable; + } + + private void updateKeyColor(String resDirPath) { + + String colorXmlPath = resDirPath+path_color; + File file = new File(colorXmlPath); + if (!file.exists()) { + return; + } + try { + XmlPullParser xmlPullParser = Xml.newPullParser(); + + String s = MyTools.parseString(file); + xmlPullParser.setInput(new StringReader(s)); + xmlPullParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); + int eventT = xmlPullParser.getEventType(); + while (eventT != XmlPullParser.END_DOCUMENT) { + if (eventT == XmlPullParser.START_TAG && (Objects.equals(xmlPullParser.getName(), "color") || Objects.equals(xmlPullParser.getName(), "item"))) { + String value = xmlPullParser.getAttributeValue(null, "name"); + if (value != null && value.equals(color_normal_key)) { + keyNoramlcolor = Color.parseColor(xmlPullParser.nextText()); + + } + if (value != null && value.equals(color_action_key)) { + keyActioncolor = Color.parseColor(xmlPullParser.nextText()); + + } + } + eventT = xmlPullParser.next(); + } + }catch (XmlPullParserException exception){ + + } catch (IOException e) { + throw new RuntimeException(e); + } + + + } + + public void updateConfig( Context con) { + String resDirPath = MyTools.getSkin(); + Log.d("---","----updateConfig"+resDirPath); + updateKeyColor(resDirPath); + BG = getBackGround(con, resDirPath); + + Drawable keyBackGround = getKeyBackGround(con, resDirPath, Bg_normal); + Drawable keyBackGround1 = getKeyBackGround(con, resDirPath, Bg_pressed); + BgNormalDraw = MyTools.getStatus(keyBackGround, keyBackGround1); + + Drawable keyBackGround2 = getKeyBackGround(con, resDirPath, Bg_action_normal); + Drawable keyBackGround3 = getKeyBackGround(con, resDirPath, Bg_action_pressed); + BgActionDraw = MyTools.getStatus(keyBackGround2, keyBackGround3); + + Drawable keyBackGround4 = getKeyBackGround(con, resDirPath, Bg_space_normal); + Drawable keyBackGround5 = getKeyBackGround(con, resDirPath, Bg_space_pressed); + BgSpaceDraw = MyTools.getStatus(keyBackGround4, keyBackGround5); + + iconDel = getKeyBackGround(con, resDirPath, icon_del); + iconShift = getKeyBackGround(con, resDirPath, icon_shift); + iconShiftLock = getKeyBackGround(con, resDirPath, icon_shift_lock); + + } +} diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/DrawIcon.kt b/app/src/main/java/com/example/fingerkeyboard/tool/DrawIcon.kt new file mode 100644 index 0000000..8fe112f --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/DrawIcon.kt @@ -0,0 +1,52 @@ +package com.example.fingerkeyboard.tool + +import android.graphics.Canvas +import android.graphics.Rect +import android.graphics.drawable.Drawable + +object DrawIcon { + public fun onDrawKeyIcon(currentKey: KeyBoard.Key, + drawKeyIcon: Drawable, + myCanvas: Canvas, + myKeyBoardView:MyKeyBoardView + ){ + drawKeyIcon.apply { + currentKey.icon = this + + var icon_w = currentKey.icon.intrinsicWidth.toFloat() + var icon_wr = icon_w / currentKey.width.toFloat() + var icon_h = currentKey.icon.intrinsicHeight.toFloat() + var icon_hr = icon_h / currentKey.height.toFloat() + + + var tep1 = 0f + var tep2 = 0f + if (icon_wr > icon_hr) { + tep2 = icon_wr + tep1 = icon_wr.coerceAtLeast(0.5f) + + } else { + tep2 = icon_hr + tep1 = icon_hr.coerceAtLeast(0.5f) + + } + icon_h = (icon_h / tep2) * tep1 + icon_w = (icon_w / tep2) * tep1 + currentKey.icon.let { + it.bounds = Rect().apply { + + top = + (currentKey.y + myKeyBoardView.paddingTop + (currentKey.height - icon_h) / 2f).toInt() + left = + (currentKey.x + myKeyBoardView.paddingLeft + (currentKey.width - icon_w) / 2f).toInt() + bottom = (top + icon_h).toInt() + right = (left + icon_w).toInt() + + } + it.draw(myCanvas) + } + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoard.java b/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoard.java new file mode 100644 index 0000000..211377f --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoard.java @@ -0,0 +1,850 @@ +package com.example.fingerkeyboard.tool; + +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.content.res.XmlResourceParser; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; +import android.util.TypedValue; +import android.util.Xml; + +import androidx.annotation.XmlRes; + +import com.example.fingerkeyboard.R; + +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +public class KeyBoard { + + static final String TAG = "Keyboard"; + + // Keyboard XML Tags + private static final String TAG_KEYBOARD = "Keyboard"; + private static final String TAG_ROW = "Row"; + private static final String TAG_KEY = "Key"; + + public static final int EDGE_LEFT = 0x01; + public static final int EDGE_RIGHT = 0x02; + public static final int EDGE_TOP = 0x04; + public static final int EDGE_BOTTOM = 0x08; + + public static final int KEYCODE_SHIFT = -1; + public static final int KEYCODE_MODE_CHANGE = -2; + public static final int KEYCODE_CANCEL = -3; + public static final int KEYCODE_DONE = -4; + public static final int KEYCODE_DELETE = -5; + public static final int KEYCODE_ALT = -6; + public static final int KEYCODE_BLANK = 32; + public static final int KEYCODE_SHIFT_123 = -360; + public static final int KEYCODE_SHIFT_SYMBOL = -361; + + + /** Keyboard label **/ + private CharSequence mLabel; + + /** Horizontal gap default for all rows */ + private int mDefaultHorizontalGap; + + /** Default key width */ + private int mDefaultWidth; + + /** Default key height */ + private int mDefaultHeight; + + /** Default gap between rows */ + private int mDefaultVerticalGap; + + /** Is the keyboard in the shifted state */ + private boolean mShifted; + + /** Key instance for the shift key, if present */ + private Key[] mShiftKeys = { null, null }; + + /** Key index for the shift key, if present */ + private int[] mShiftKeyIndices = {-1, -1}; + + /** Current key width, while loading the keyboard */ + private int mKeyWidth; + + /** Current key height, while loading the keyboard */ + private int mKeyHeight; + + /** Total height of the keyboard, including the padding and keys */ + private int mTotalHeight; + + /** + * Total width of the keyboard, including left side gaps and keys, but not any gaps on the + * right side. + */ + private int mTotalWidth; + + /** List of keys in this keyboard */ + private List mKeys; + + /** List of modifier keys such as Shift & Alt, if any */ + private List mModifierKeys; + + /** Width of the screen available to fit the keyboard */ + private int mDisplayWidth; + + /** Height of the screen */ + private int mDisplayHeight; + + /** Keyboard mode, or zero, if none. */ + private int mKeyboardMode; + + // Variables for pre-computing nearest keys. + + private static final int GRID_WIDTH = 10; + private static final int GRID_HEIGHT = 5; + private static final int GRID_SIZE = GRID_WIDTH * GRID_HEIGHT; + private int mCellWidth; + private int mCellHeight; + private int[][] mGridNeighbors; + private int mProximityThreshold; + /** Number of key widths from current touch point to search for nearest keys. */ + private static float SEARCH_DISTANCE = 1.8f; + + private ArrayList rows = new ArrayList<>(); + + + public static class Row { + /** Default width of a key in this row. */ + public int defaultWidth; + /** Default height of a key in this row. */ + public int defaultHeight; + /** Default horizontal gap between keys in this row. */ + public int defaultHorizontalGap; + /** Vertical gap following this row. */ + public int verticalGap; + + ArrayList mKeys = new ArrayList<>(); + + + public int rowEdgeFlags; + + /** The keyboard mode for this row */ + public int mode; + + private KeyBoard parent; + + public Row(KeyBoard parent) { + this.parent = parent; + } + + public Row(Resources res, KeyBoard parent, XmlResourceParser parser) { + this.parent = parent; + TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.style_view); + defaultWidth = getDimensionOrFraction(a, + R.styleable.style_view_android_keyWidth, + parent.mDisplayWidth, parent.mDefaultWidth); + defaultHeight = getDimensionOrFraction(a, + R.styleable.style_view_android_keyHeight, + parent.mDisplayHeight, parent.mDefaultHeight); + defaultHorizontalGap = getDimensionOrFraction(a, + R.styleable.style_view_android_horizontalGap, + parent.mDisplayWidth, parent.mDefaultHorizontalGap); + verticalGap = getDimensionOrFraction(a, + R.styleable.style_view_android_verticalGap, + parent.mDisplayHeight, parent.mDefaultVerticalGap); + a.recycle(); + a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.style_row); + rowEdgeFlags = a.getInt(R.styleable.style_row_android_rowEdgeFlags, 0); + mode = a.getResourceId(R.styleable.style_row_android_keyboardMode, + 0); + } + } + + /** + * Class for describing the position and characteristics of a single key in the keyboard. + * + * @attr ref android.R.styleable#King_Keyboard_keyWidth + * @attr ref android.R.styleable#King_Keyboard_keyHeight + * @attr ref android.R.styleable#King_Keyboard_horizontalGap + * @attr ref android.R.styleable#King_Keyboard_Key_codes + * @attr ref android.R.styleable#King_Keyboard_Key_keyIcon + * @attr ref android.R.styleable#King_Keyboard_Key_keyLabel + * @attr ref android.R.styleable#King_Keyboard_Key_iconPreview + * @attr ref android.R.styleable#King_Keyboard_Key_isSticky + * @attr ref android.R.styleable#King_Keyboard_Key_isRepeatable + * @attr ref android.R.styleable#King_Keyboard_Key_isModifier + * @attr ref android.R.styleable#King_Keyboard_Key_popupKeyboard + * @attr ref android.R.styleable#King_Keyboard_Key_popupCharacters + * @attr ref android.R.styleable#King_Keyboard_Key_keyOutputText + * @attr ref android.R.styleable#King_Keyboard_Key_keyEdgeFlags + */ + public static class Key { + /** + * All the key codes (unicode or custom code) that this key could generate, zero'th + * being the most important. + */ + public int[] codes; + + /** Label to display */ + public CharSequence label; + + /** Icon to display instead of a label. Icon takes precedence over a label */ + public Drawable icon; + /** Preview version of the icon, for the preview popup */ + public Drawable iconPreview; + /** Width of the key, not including the gap */ + public int width; + /** Height of the key, not including the gap */ + public int height; + /** The horizontal gap before this key */ + public int gap; + /** Whether this key is sticky, i.e., a toggle key */ + public boolean sticky; + /** X coordinate of the key in the keyboard layout */ + public int x; + /** Y coordinate of the key in the keyboard layout */ + public int y; + /** The current pressed state of this key */ + public boolean pressed; + /** If this is a sticky key, is it on? */ + public boolean on; + /** Text to output when pressed. This can be multiple characters, like ".com" */ + public CharSequence text; + /** Popup characters */ + public CharSequence popupCharacters; + + /** + * Flags that specify the anchoring to edges of the keyboard for detecting touch events + * that are just out of the boundary of the key. This is a bit mask of + * {@link KeyBoard#EDGE_LEFT}, {@link KeyBoard#EDGE_RIGHT}, {@link KeyBoard#EDGE_TOP} and + * {@link KeyBoard#EDGE_BOTTOM}. + */ + public int edgeFlags; + /** Whether this is a modifier key, such as Shift or Alt */ + public boolean modifier; + /** The keyboard that this key belongs to */ + private KeyBoard keyboard; + /** + * If this key pops up a mini keyboard, this is the resource id for the XML layout for that + * keyboard. + */ + public int popupResId; + /** Whether this key repeats itself when held down */ + public boolean repeatable; + + + private final static int[] KEY_STATE_NORMAL_ON = { + android.R.attr.state_checkable, + android.R.attr.state_checked + }; + + private final static int[] KEY_STATE_PRESSED_ON = { + android.R.attr.state_pressed, + android.R.attr.state_checkable, + android.R.attr.state_checked + }; + + private final static int[] KEY_STATE_NORMAL_OFF = { + android.R.attr.state_checkable + }; + + private final static int[] KEY_STATE_PRESSED_OFF = { + android.R.attr.state_pressed, + android.R.attr.state_checkable + }; + + private final static int[] KEY_STATE_NORMAL = { + }; + + private final static int[] KEY_STATE_PRESSED = { + android.R.attr.state_pressed + }; + + /** Create an empty key with no attributes. */ + public Key(Row parent) { + keyboard = parent.parent; + height = parent.defaultHeight; + width = parent.defaultWidth; + gap = parent.defaultHorizontalGap; + edgeFlags = parent.rowEdgeFlags; + } + + /** Create a key with the given top-left coordinate and extract its attributes from + * the XML parser. + * @param res resources associated with the caller's context + * @param parent the row that this key belongs to. The row must already be attached to + * a {@link KeyBoard}. + * @param x the x coordinate of the top-left + * @param y the y coordinate of the top-left + * @param parser the XML parser containing the attributes for this key + */ + public Key(Resources res, Row parent, int x, int y, XmlResourceParser parser) { + this(parent); + + this.x = x; + this.y = y; + + TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.style_view); + + width = getDimensionOrFraction(a, + R.styleable.style_view_android_keyWidth, + keyboard.mDisplayWidth, parent.defaultWidth); + height = getDimensionOrFraction(a, + R.styleable.style_view_android_keyHeight, + keyboard.mDisplayHeight, parent.defaultHeight); + gap = getDimensionOrFraction(a, + R.styleable.style_view_android_horizontalGap, + keyboard.mDisplayWidth, parent.defaultHorizontalGap); + a.recycle(); + a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.style_key); + this.x += gap; + TypedValue codesValue = new TypedValue(); + a.getValue(R.styleable.style_key_android_codes, + codesValue); + if (codesValue.type == TypedValue.TYPE_INT_DEC + || codesValue.type == TypedValue.TYPE_INT_HEX) { + codes = new int[] { codesValue.data }; + } else if (codesValue.type == TypedValue.TYPE_STRING) { + codes = parseCSV(codesValue.string.toString()); + } + + iconPreview = a.getDrawable(R.styleable.style_key_android_iconPreview); + if (iconPreview != null) { + iconPreview.setBounds(0, 0, iconPreview.getIntrinsicWidth(), + iconPreview.getIntrinsicHeight()); + } + popupCharacters = a.getText( + R.styleable.style_key_android_popupCharacters); + popupResId = a.getResourceId( + R.styleable.style_key_android_popupKeyboard, 0); + repeatable = a.getBoolean( + R.styleable.style_key_android_isRepeatable, false); + modifier = a.getBoolean( + R.styleable.style_key_android_isModifier, false); + sticky = a.getBoolean( + R.styleable.style_key_android_isSticky, false); + edgeFlags = a.getInt(R.styleable.style_key_android_keyEdgeFlags, 0); + edgeFlags |= parent.rowEdgeFlags; + + icon = a.getDrawable( + R.styleable.style_key_android_keyIcon); + if (icon != null) { + icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight()); + } + label = a.getText(R.styleable.style_key_android_keyLabel); + text = a.getText(R.styleable.style_key_android_keyOutputText); + + if (codes == null && !TextUtils.isEmpty(label)) { + codes = new int[] { label.charAt(0) }; + } + a.recycle(); + } + + /** + * Informs the key that it has been pressed, in case it needs to change its appearance or + * state. + * @see #onReleased(boolean) + */ + public void onPressed() { + pressed = !pressed; + } + + /** + * Changes the pressed state of the key. + * + *

Toggled state of the key will be flipped when all the following conditions are + * fulfilled:

+ * + *
    + *
  • This is a sticky key, that is, {@link #sticky} is {@code true}. + *
  • The parameter {@code inside} is {@code true}. + *
  • {@link android.os.Build.VERSION#SDK_INT} is greater than + * {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1}. + *
+ * + * @param inside whether the finger was released inside the key. Works only on Android M and + * later. See the method document for details. + * @see #onPressed() + */ + public void onReleased(boolean inside) { + pressed = !pressed; + if (sticky && inside) { + on = !on; + } + } + + int[] parseCSV(String value) { + int count = 0; + int lastIndex = 0; + if (value.length() > 0) { + count++; + while ((lastIndex = value.indexOf(",", lastIndex + 1)) > 0) { + count++; + } + } + int[] values = new int[count]; + count = 0; + StringTokenizer st = new StringTokenizer(value, ","); + while (st.hasMoreTokens()) { + try { + values[count++] = Integer.parseInt(st.nextToken()); + } catch (NumberFormatException nfe) { + Log.e(TAG, "Error parsing keycodes " + value); + } + } + return values; + } + + /** + * Detects if a point falls inside this key. + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + * @return whether or not the point falls inside the key. If the key is attached to an edge, + * it will assume that all points between the key and the edge are considered to be inside + * the key. + */ + public boolean isInside(int x, int y) { + boolean leftEdge = (edgeFlags & EDGE_LEFT) > 0; + boolean rightEdge = (edgeFlags & EDGE_RIGHT) > 0; + boolean topEdge = (edgeFlags & EDGE_TOP) > 0; + boolean bottomEdge = (edgeFlags & EDGE_BOTTOM) > 0; + if ((x >= this.x || (leftEdge && x <= this.x + this.width)) + && (x < this.x + this.width || (rightEdge && x >= this.x)) + && (y >= this.y || (topEdge && y <= this.y + this.height)) + && (y < this.y + this.height || (bottomEdge && y >= this.y))) { + return true; + } else { + return false; + } + } + + /** + * Returns the square of the distance between the center of the key and the given point. + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + * @return the square of the distance of the point from the center of the key + */ + public int squaredDistanceFrom(int x, int y) { + int xDist = this.x + width / 2 - x; + int yDist = this.y + height / 2 - y; + return xDist * xDist + yDist * yDist; + } + + /** + * Returns the drawable state for the key, based on the current state and type of the key. + * @return the drawable state of the key. + * @see android.graphics.drawable.StateListDrawable#setState(int[]) + */ + public int[] getCurrentDrawableState() { + int[] states = KEY_STATE_NORMAL; + + if (on) { + if (pressed) { + states = KEY_STATE_PRESSED_ON; + } else { + states = KEY_STATE_NORMAL_ON; + } + } else { + if (sticky) { + if (pressed) { + states = KEY_STATE_PRESSED_OFF; + } else { + states = KEY_STATE_NORMAL_OFF; + } + } else { + if (pressed) { + states = KEY_STATE_PRESSED; + } + } + } + return states; + } + } + + /** + * Creates a keyboard from the given xml key layout file. + * @param context the application or service context + * @param xmlLayoutResId the resource file that contains the keyboard layout and keys. + */ + public KeyBoard(Context context, int xmlLayoutResId) { + this(context, xmlLayoutResId, 0); + } + + /** + * Creates a keyboard from the given xml key layout file. Weeds out rows + * that have a keyboard mode defined but don't match the specified mode. + * @param context the application or service context + * @param xmlLayoutResId the resource file that contains the keyboard layout and keys. + * @param modeId keyboard mode identifier + * @param width sets width of keyboard + * @param height sets height of keyboard + */ + public KeyBoard(Context context, @XmlRes int xmlLayoutResId, int modeId, int width, + int height) { + mDisplayWidth = width; + mDisplayHeight = height; + + mDefaultHorizontalGap = 0; + mDefaultWidth = mDisplayWidth / 10; + mDefaultVerticalGap = 0; + mDefaultHeight = mDefaultWidth; + mKeys = new ArrayList<>(); + mModifierKeys = new ArrayList<>(); + mKeyboardMode = modeId; + loadKeyboard(context, context.getResources().getXml(xmlLayoutResId)); + } + + /** + * Creates a keyboard from the given xml key layout file. Weeds out rows + * that have a keyboard mode defined but don't match the specified mode. + * @param context the application or service context + * @param xmlLayoutResId the resource file that contains the keyboard layout and keys. + * @param modeId keyboard mode identifier + */ + public KeyBoard(Context context, @XmlRes int xmlLayoutResId, int modeId) { + DisplayMetrics dm = context.getResources().getDisplayMetrics(); + mDisplayWidth = dm.widthPixels; + mDisplayHeight = dm.heightPixels; + //Log.v(TAG, "keyboard's display metrics:" + dm); + + mDefaultHorizontalGap = 0; + mDefaultWidth = mDisplayWidth / 10; + mDefaultVerticalGap = 0; + mDefaultHeight = mDefaultWidth; + mKeys = new ArrayList<>(); + mModifierKeys = new ArrayList<>(); + mKeyboardMode = modeId; + loadKeyboard(context, context.getResources().getXml(xmlLayoutResId)); + } + + public KeyBoard(Context context, int layoutTemplateResId, + CharSequence characters, int columns, int horizontalPadding) { + this(context, layoutTemplateResId); + int x = 0; + int y = 0; + int column = 0; + mTotalWidth = 0; + + Row row = new Row(this); + row.defaultHeight = mDefaultHeight; + row.defaultWidth = mDefaultWidth; + row.defaultHorizontalGap = mDefaultHorizontalGap; + row.verticalGap = mDefaultVerticalGap; + row.rowEdgeFlags = EDGE_TOP | EDGE_BOTTOM; + final int maxColumns = columns == -1 ? Integer.MAX_VALUE : columns; + for (int i = 0; i < characters.length(); i++) { + char c = characters.charAt(i); + if (column >= maxColumns + || x + mDefaultWidth + horizontalPadding > mDisplayWidth) { + x = 0; + y += mDefaultVerticalGap + mDefaultHeight; + column = 0; + } + final Key key = new Key(row); + key.x = x; + key.y = y; + key.label = String.valueOf(c); + key.codes = new int[] { c }; + column++; + x += key.width + key.gap; + mKeys.add(key); + row.mKeys.add(key); + if (x > mTotalWidth) { + mTotalWidth = x; + } + } + mTotalHeight = y + mDefaultHeight; + rows.add(row); + } + + final void resize(int newWidth, int newHeight) { + int numRows = rows.size(); + for (int rowIndex = 0; rowIndex < numRows; ++rowIndex) { + Row row = rows.get(rowIndex); + int numKeys = row.mKeys.size(); + int totalGap = 0; + int totalWidth = 0; + for (int keyIndex = 0; keyIndex < numKeys; ++keyIndex) { + Key key = row.mKeys.get(keyIndex); + if (keyIndex > 0) { + totalGap += key.gap; + } + totalWidth += key.width; + } + if (totalGap + totalWidth > newWidth) { + int x = 0; + float scaleFactor = (float)(newWidth - totalGap) / totalWidth; + for (int keyIndex = 0; keyIndex < numKeys; ++keyIndex) { + Key key = row.mKeys.get(keyIndex); + key.width *= scaleFactor; + key.x = x; + x += key.width + key.gap; + } + } + } + mTotalWidth = newWidth; + // TODO: This does not adjust the vertical placement according to the new size. + // The main problem in the previous code was horizontal placement/size, but we should + // also recalculate the vertical sizes/positions when we get this resize call. + } + + public List getKeys() { + return mKeys; + } + + public List getModifierKeys() { + return mModifierKeys; + } + + protected int getHorizontalGap() { + return mDefaultHorizontalGap; + } + + protected void setHorizontalGap(int gap) { + mDefaultHorizontalGap = gap; + } + + protected int getVerticalGap() { + return mDefaultVerticalGap; + } + + protected void setVerticalGap(int gap) { + mDefaultVerticalGap = gap; + } + + protected int getKeyHeight() { + return mDefaultHeight; + } + + protected void setKeyHeight(int height) { + mDefaultHeight = height; + } + + protected int getKeyWidth() { + return mDefaultWidth; + } + + protected void setKeyWidth(int width) { + mDefaultWidth = width; + } + + /** + * Returns the total height of the keyboard + * @return the total height of the keyboard + */ + public int getHeight() { + return mTotalHeight; + } + + public int getMinWidth() { + return mTotalWidth; + } + + public boolean setShifted(boolean shiftState) { + for (Key shiftKey : mShiftKeys) { + if (shiftKey != null) { + shiftKey.on = shiftState; + } + } + if (mShifted != shiftState) { + mShifted = shiftState; + return true; + } + return false; + } + + public boolean isShifted() { + return mShifted; + } + + /** + * @hide + */ + public int[] getShiftKeyIndices() { + return mShiftKeyIndices; + } + + public int getShiftKeyIndex() { + return mShiftKeyIndices[0]; + } + + private void computeNearestNeighbors() { + // Round-up so we don't have any pixels outside the grid + mCellWidth = (getMinWidth() + GRID_WIDTH - 1) / GRID_WIDTH; + mCellHeight = (getHeight() + GRID_HEIGHT - 1) / GRID_HEIGHT; + mGridNeighbors = new int[GRID_SIZE][]; + int[] indices = new int[mKeys.size()]; + final int gridWidth = GRID_WIDTH * mCellWidth; + final int gridHeight = GRID_HEIGHT * mCellHeight; + for (int x = 0; x < gridWidth; x += mCellWidth) { + for (int y = 0; y < gridHeight; y += mCellHeight) { + int count = 0; + for (int i = 0; i < mKeys.size(); i++) { + final Key key = mKeys.get(i); + if (key.squaredDistanceFrom(x, y) < mProximityThreshold || + key.squaredDistanceFrom(x + mCellWidth - 1, y) < mProximityThreshold || + key.squaredDistanceFrom(x + mCellWidth - 1, y + mCellHeight - 1) + < mProximityThreshold || + key.squaredDistanceFrom(x, y + mCellHeight - 1) < mProximityThreshold) { + indices[count++] = i; + } + } + int [] cell = new int[count]; + System.arraycopy(indices, 0, cell, 0, count); + mGridNeighbors[(y / mCellHeight) * GRID_WIDTH + (x / mCellWidth)] = cell; + } + } + } + + /** + * Returns the indices of the keys that are closest to the given point. + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + * @return the array of integer indices for the nearest keys to the given point. If the given + * point is out of range, then an array of size zero is returned. + */ + public int[] getNearestKeys(int x, int y) { + if (mGridNeighbors == null) computeNearestNeighbors(); + if (x >= 0 && x < getMinWidth() && y >= 0 && y < getHeight()) { + int index = (y / mCellHeight) * GRID_WIDTH + (x / mCellWidth); + if (index < GRID_SIZE) { + return mGridNeighbors[index]; + } + } + return new int[0]; + } + + protected Row createRowFromXml(Resources res, XmlResourceParser parser) { + return new Row(res, this, parser); + } + + protected Key createKeyFromXml(Resources res, Row parent, int x, int y, + XmlResourceParser parser) { + return new Key(res, parent, x, y, parser); + } + + private void loadKeyboard(Context context, XmlResourceParser parser) { + boolean inKey = false; + boolean inRow = false; + boolean leftMostKey = false; + int row = 0; + int x = 0; + int y = 0; + Key key = null; + Row currentRow = null; + Resources res = context.getResources(); + boolean skipRow = false; + + try { + int event; + while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) { + if (event == XmlResourceParser.START_TAG) { + String tag = parser.getName(); + if (TAG_ROW.equals(tag)) { + inRow = true; + x = 0; + currentRow = createRowFromXml(res, parser); + rows.add(currentRow); + skipRow = currentRow.mode != 0 && currentRow.mode != mKeyboardMode; + if (skipRow) { + skipToEndOfRow(parser); + inRow = false; + } + } else if (TAG_KEY.equals(tag)) { + inKey = true; + key = createKeyFromXml(res, currentRow, x, y, parser); + mKeys.add(key); + if (key.codes[0] == KEYCODE_SHIFT) { + // Find available shift key slot and put this shift key in it + for (int i = 0; i < mShiftKeys.length; i++) { + if (mShiftKeys[i] == null) { + mShiftKeys[i] = key; + mShiftKeyIndices[i] = mKeys.size()-1; + break; + } + } + mModifierKeys.add(key); + } else if (key.codes[0] == KEYCODE_ALT) { + mModifierKeys.add(key); + } + currentRow.mKeys.add(key); + } else if (TAG_KEYBOARD.equals(tag)) { + parseKeyboardAttributes(res, parser); + } + } else if (event == XmlResourceParser.END_TAG) { + if (inKey) { + inKey = false; + x += key.gap + key.width; + if (x > mTotalWidth) { + mTotalWidth = x; + } + } else if (inRow) { + inRow = false; + y += currentRow.verticalGap; + y += currentRow.defaultHeight; + row++; + } else { + // TODO: error or extend? + } + } + } + } catch (Exception e) { + Log.e(TAG, "Parse error:" + e); + e.printStackTrace(); + } + mTotalHeight = y - mDefaultVerticalGap; + } + + private void skipToEndOfRow(XmlResourceParser parser) + throws XmlPullParserException, IOException { + int event; + while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) { + if (event == XmlResourceParser.END_TAG + && parser.getName().equals(TAG_ROW)) { + break; + } + } + } + + private void parseKeyboardAttributes(Resources res, XmlResourceParser parser) { + TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser), + R.styleable.style_view); + + mDefaultWidth = getDimensionOrFraction(a, + R.styleable.style_view_android_keyWidth, + mDisplayWidth, mDisplayWidth / 10); + mDefaultHeight = getDimensionOrFraction(a, + R.styleable.style_view_android_keyHeight, + mDisplayHeight, 50); + mDefaultHorizontalGap = getDimensionOrFraction(a, + R.styleable.style_view_android_horizontalGap, + mDisplayWidth, 0); + mDefaultVerticalGap = getDimensionOrFraction(a, + R.styleable.style_view_android_verticalGap, + mDisplayHeight, 0); + mProximityThreshold = (int) (mDefaultWidth * SEARCH_DISTANCE); + mProximityThreshold = mProximityThreshold * mProximityThreshold; // Square it for comparison + a.recycle(); + } + + static int getDimensionOrFraction(TypedArray a, int index, int base, int defValue) { + TypedValue value = a.peekValue(index); + if (value == null) return defValue; + if (value.type == TypedValue.TYPE_DIMENSION) { + return a.getDimensionPixelOffset(index, defValue); + } else if (value.type == TypedValue.TYPE_FRACTION) { + // Round it to avoid values like 47.9999 from getting truncated + return Math.round(a.getFraction(index, base, base, defValue)); + } + return defValue; + } +} + + diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoardView.java b/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoardView.java new file mode 100644 index 0000000..249a1c2 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/KeyBoardView.java @@ -0,0 +1,1359 @@ +package com.example.fingerkeyboard.tool; + + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.Rect; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.os.Handler; +import android.os.Message; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.GestureDetector; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.widget.PopupWindow; +import android.widget.TextView; + + +import com.example.fingerkeyboard.R; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class KeyBoardView extends View implements View.OnClickListener { + + + public interface OnKeyboardActionListener { + + + void onPress(int primaryCode); + + + void onRelease(int primaryCode); + + void onKey(int primaryCode, int[] keyCodes); + + void onText(CharSequence text); + + + void swipeLeft(); + + + void swipeRight(); + + + void swipeDown(); + + + void swipeUp(); + } + + private static final boolean DEBUG = false; + private static final int NOT_A_KEY = -1; + private static final int[] KEY_DELETE = { KeyBoard.KEYCODE_DELETE }; + private static final int[] LONG_PRESSABLE_STATE_SET = { R.styleable.Style_Pre_state_android_state_long_pressable }; + + private Context mContext; + private KeyBoard mKeyboard; + private int mCurrentKeyIndex = NOT_A_KEY; + + private int mLabelTextSize; + private int mKeyTextSize; + private int mKeyTextColor; + private float mShadowRadius; + private int mShadowColor; + + + private TextView mPreviewText; + private PopupWindow mPreviewPopup; + private int mPreviewTextSizeLarge; + private int mPreviewOffset; + private int mPreviewHeight; + // Working variable + private final int[] mCoordinates = new int[2]; + + private PopupWindow mPopupKeyboard; + private View mMiniKeyboardContainer; + private KeyBoardView mMiniKeyboard; + private boolean mMiniKeyboardOnScreen; + private View mPopupParent; + private int mMiniKeyboardOffsetX; + private int mMiniKeyboardOffsetY; + private Map mMiniKeyboardCache; + private KeyBoard.Key[] mKeys; + + + private OnKeyboardActionListener mKeyboardActionListener; + + private static final int MSG_SHOW_PREVIEW = 1; + private static final int MSG_REMOVE_PREVIEW = 2; + private static final int MSG_REPEAT = 3; + private static final int MSG_LONGPRESS = 4; + + private static final int DELAY_BEFORE_PREVIEW = 0; + private static final int DELAY_AFTER_PREVIEW = 70; + private static final int DEBOUNCE_TIME = 70; + + private int mVerticalCorrection; + private int mProximityThreshold; + + private boolean mPreviewCentered = false; + private boolean mShowPreview = true; + private boolean mShowTouchPoints = true; + private int mPopupPreviewX; + private int mPopupPreviewY; + + private int mLastX; + private int mLastY; + private int mStartX; + private int mStartY; + + private boolean mProximityCorrectOn; + + private Paint mPaint; + private Rect mPadding; + + private long mDownTime; + private long mLastMoveTime; + private int mLastKey; + private int mLastCodeX; + private int mLastCodeY; + private int mCurrentKey = NOT_A_KEY; + private int mDownKey = NOT_A_KEY; + private long mLastKeyTime; + private long mCurrentKeyTime; + private int[] mKeyIndices = new int[12]; + private GestureDetector mGestureDetector; + private int mPopupX; + private int mPopupY; + private int mRepeatKeyIndex = NOT_A_KEY; + private int mPopupLayout; + private boolean mAbortKey; + private KeyBoard.Key mInvalidatedKey; + private Rect mClipRegion = new Rect(0, 0, 0, 0); + private boolean mPossiblePoly; + private SwipeTracker mSwipeTracker = new SwipeTracker(); + private int mSwipeThreshold; + private boolean mDisambiguateSwipe; + + // 用于处理多个指针的变量 + private int mOldPointerCount = 1; + private float mOldPointerX; + private float mOldPointerY; + + private Drawable mKeyBackground; + + private static final int REPEAT_INTERVAL = 50; // ~20 keys per second + private static final int REPEAT_START_DELAY = 300; + private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout(); + + private static int MAX_NEARBY_KEYS = 12; + private int[] mDistances = new int[MAX_NEARBY_KEYS]; + + // For multi-tap + private int mLastSentIndex; + private int mTapCount; + private long mLastTapTime; + private boolean mInMultiTap; + private static final int MULTITAP_INTERVAL = 600; // milliseconds + private StringBuilder mPreviewLabel = new StringBuilder(1); + + //键盘位图重绘 + private boolean mDrawPending; + // 键盘位图中的脏区域 + private Rect mDirtyRect = new Rect(); + //用于更快的键盘位图 + private Bitmap mBuffer; + //键盘是否刚更改,以便可以重新分配 mBuffer。 + private boolean mKeyboardChanged; + /** The canvas for the above mutable keyboard bitmap */ + private Canvas mCanvas; + + /** The audio manager for accessibility support */ + private AudioManager mAudioManager; + + // 是否宣布了在启用辅助功能时耳机听到密码的要求。 + private boolean mHeadsetRequiredToHearPasswordsAnnounced; + + Handler mHandler; + + public KeyBoardView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public KeyBoardView(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public KeyBoardView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + mContext = context; + TypedArray a = context.obtainStyledAttributes( + attrs, R.styleable.style_view_keyboard, defStyleAttr, defStyleRes); + + LayoutInflater inflate = + (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + int previewLayout = 0; + int keyTextSize = 0; + + int n = a.getIndexCount(); + + for (int i = 0; i < n; i++) { + int attr = a.getIndex(i); + + if (attr == R.styleable.style_view_keyboard_android_keyBackground) { + mKeyBackground = a.getDrawable(attr); + } else if (attr == R.styleable.style_view_keyboard_android_verticalCorrection) { + mVerticalCorrection = a.getDimensionPixelOffset(attr, 0); + } else if (attr == R.styleable.style_view_keyboard_android_keyPreviewLayout) { + previewLayout = a.getResourceId(attr, 0); + } else if (attr == R.styleable.style_view_keyboard_android_keyPreviewOffset) { + mPreviewOffset = a.getDimensionPixelOffset(attr, 0); + } else if (attr == R.styleable.style_view_keyboard_android_keyPreviewHeight) { + mPreviewHeight = a.getDimensionPixelSize(attr, 80); + } else if (attr == R.styleable.style_view_keyboard_android_keyTextSize) { + mKeyTextSize = a.getDimensionPixelSize(attr, 18); + } else if (attr == R.styleable.style_view_keyboard_android_keyTextColor) { + mKeyTextColor = a.getColor(attr, 0xFF333333); + } else if (attr == R.styleable.style_view_keyboard_android_labelTextSize) { + mLabelTextSize = a.getDimensionPixelSize(attr, 14); + } else if (attr == R.styleable.style_view_keyboard_android_popupLayout) { + mPopupLayout = a.getResourceId(attr, 0); + } else if (attr == R.styleable.style_view_keyboard_android_shadowColor) { + mShadowColor = a.getColor(attr, 0); + } else if (attr == R.styleable.style_view_keyboard_android_shadowRadius) { + mShadowRadius = a.getFloat(attr, 0f); + } + } + + mPreviewPopup = new PopupWindow(context); + if (previewLayout != 0) { + mPreviewText = (TextView) inflate.inflate(previewLayout, null); + mPreviewTextSizeLarge = (int) mPreviewText.getTextSize(); + mPreviewPopup.setContentView(mPreviewText); + mPreviewPopup.setBackgroundDrawable(null); + } else { + mShowPreview = false; + } + + mPreviewPopup.setTouchable(false); + + mPopupKeyboard = new PopupWindow(context); + mPopupKeyboard.setBackgroundDrawable(null); + + + mPopupParent = this; + + + mPaint = new Paint(); + mPaint.setAntiAlias(true); + mPaint.setTextSize(keyTextSize); + mPaint.setTextAlign(Paint.Align.CENTER); + mPaint.setAlpha(255); + + mPadding = new Rect(0, 0, 0, 0); + mMiniKeyboardCache = new HashMap(); + mKeyBackground.getPadding(mPadding); + + mSwipeThreshold = (int) (500 * getResources().getDisplayMetrics().density); + + + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + + resetMultiTap(); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + initGestureDetector(); + if (mHandler == null) { + mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_SHOW_PREVIEW: + showKey(msg.arg1); + break; + case MSG_REMOVE_PREVIEW: + mPreviewText.setVisibility(INVISIBLE); + break; + case MSG_REPEAT: + if (repeatKey()) { + Message repeat = Message.obtain(this, MSG_REPEAT); + sendMessageDelayed(repeat, REPEAT_INTERVAL); + } + break; + case MSG_LONGPRESS: + openPopupIfRequired((MotionEvent) msg.obj); + break; + } + } + }; + } + } + + private void initGestureDetector() { + if (mGestureDetector == null) { + mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onFling(MotionEvent me1, MotionEvent me2, + float velocityX, float velocityY) { + if (mPossiblePoly) return false; + final float absX = Math.abs(velocityX); + final float absY = Math.abs(velocityY); + float deltaX = me2.getX() - me1.getX(); + float deltaY = me2.getY() - me1.getY(); + int travelX = getWidth() / 2; // Half the keyboard width + int travelY = getHeight() / 2; // Half the keyboard height + mSwipeTracker.computeCurrentVelocity(1000); + final float endingVelocityX = mSwipeTracker.getXVelocity(); + final float endingVelocityY = mSwipeTracker.getYVelocity(); + boolean sendDownKey = false; + if (velocityX > mSwipeThreshold && absY < absX && deltaX > travelX) { + if (mDisambiguateSwipe && endingVelocityX < velocityX / 4) { + sendDownKey = true; + } else { + swipeRight(); + return true; + } + } else if (velocityX < -mSwipeThreshold && absY < absX && deltaX < -travelX) { + if (mDisambiguateSwipe && endingVelocityX > velocityX / 4) { + sendDownKey = true; + } else { + swipeLeft(); + return true; + } + } else if (velocityY < -mSwipeThreshold && absX < absY && deltaY < -travelY) { + if (mDisambiguateSwipe && endingVelocityY > velocityY / 4) { + sendDownKey = true; + } else { + swipeUp(); + return true; + } + } else if (velocityY > mSwipeThreshold && absX < absY / 2 && deltaY > travelY) { + if (mDisambiguateSwipe && endingVelocityY < velocityY / 4) { + sendDownKey = true; + } else { + swipeDown(); + return true; + } + } + + if (sendDownKey) { + detectAndSendKey(mDownKey, mStartX, mStartY, me1.getEventTime()); + } + return false; + } + }); + + mGestureDetector.setIsLongpressEnabled(false); + } + } + + public void setOnKeyboardActionListener(OnKeyboardActionListener listener) { + mKeyboardActionListener = listener; + } + + protected OnKeyboardActionListener getOnKeyboardActionListener() { + return mKeyboardActionListener; + } + + + public void setKeyboard(KeyBoard keyboard) { + if (mKeyboard != null) { + showPreview(NOT_A_KEY); + } + // Remove any pending messages + removeMessages(); + mKeyboard = keyboard; + List keys = mKeyboard.getKeys(); + mKeys = keys.toArray(new KeyBoard.Key[keys.size()]); + requestLayout(); + // Hint to reallocate the buffer if the size changed(重新分配缓冲区) + mKeyboardChanged = true; + invalidateAllKeys(); + computeProximityThreshold(keyboard); + mMiniKeyboardCache.clear(); // Not really necessary to do every time, but will free up views + // 切换到其他键盘应中止任何挂起的键,以便键不会传递到旧键盘或新键盘 + mAbortKey = true; // 直到下一个动作 + } + + + public KeyBoard getKeyboard() { + return mKeyboard; + } + + + public boolean setShifted(boolean shifted) { + if (mKeyboard != null) { + if (mKeyboard.setShifted(shifted)) { + // 整个键盘可能需要重新绘制 + invalidateAllKeys(); + return true; + } + } + return false; + } + + + public boolean isShifted() { + if (mKeyboard != null) { + return mKeyboard.isShifted(); + } + return false; + } + + + public void setPreviewEnabled(boolean previewEnabled) { + mShowPreview = previewEnabled; + } + + /** + * Returns the enabled state of the key feedback popup. + * @return whether or not the key feedback popup is enabled + * @see #setPreviewEnabled(boolean) + */ + public boolean isPreviewEnabled() { + return mShowPreview; + } + + public void setVerticalCorrection(int verticalOffset) { + + } + public void setPopupParent(View v) { + mPopupParent = v; + } + + public void setPopupOffset(int x, int y) { + mMiniKeyboardOffsetX = x; + mMiniKeyboardOffsetY = y; + if (mPreviewPopup.isShowing()) { + mPreviewPopup.dismiss(); + } + } + + public void setProximityCorrectionEnabled(boolean enabled) { + mProximityCorrectOn = enabled; + } + + + + //如果启用了邻近校正,则返回 true。 + public boolean isProximityCorrectionEnabled() { + return mProximityCorrectOn; + } + + /** + * Popup keyboard close button clicked. + * @hide + */ + public void onClick(View v) { + dismissPopupKeyboard(); + } + + private CharSequence adjustCase(CharSequence label) { + if (mKeyboard.isShifted() && label != null && label.length() < 3 + && Character.isLowerCase(label.charAt(0))) { + label = label.toString().toUpperCase(); + } + return label; + } + + @Override + public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + // Round up a little + if (mKeyboard == null) { + setMeasuredDimension(getPaddingLeft() + getPaddingRight(), getPaddingTop() + getPaddingBottom()); + } else { + int width = mKeyboard.getMinWidth() + getPaddingLeft() + getPaddingRight(); + if (MeasureSpec.getSize(widthMeasureSpec) < width + 10) { + width = MeasureSpec.getSize(widthMeasureSpec); + } + setMeasuredDimension(width, mKeyboard.getHeight() + getPaddingTop() + getPaddingBottom()); + } + } + + /* + 计算相邻键之间的平均距离(水平和垂直) + 并将其平方以获得接近阈值。在这里和计算中使用一个正方形 + 与按键中心的触摸距离,以避免取平方根。 + * @param keyboard + */ + private void computeProximityThreshold(KeyBoard keyboard) { + if (keyboard == null) return; + final KeyBoard.Key[] keys = mKeys; + if (keys == null) return; + int length = keys.length; + int dimensionSum = 0; + for (int i = 0; i < length; i++) { + KeyBoard.Key key = keys[i]; + dimensionSum += Math.min(key.width, key.height) + key.gap; + } + if (dimensionSum < 0 || length == 0) return; + mProximityThreshold = (int) (dimensionSum * 1.4f / length); + mProximityThreshold *= mProximityThreshold; // Square it + } + + @Override + public void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + if (mKeyboard != null) { + mKeyboard.resize(w, h); + } + // Release the buffer, if any and it will be reallocated on the next draw + mBuffer = null; + } + + @Override + public void onDraw(Canvas canvas) { + super.onDraw(canvas); + + } + + private void onBufferDraw() { + if (mBuffer == null || mKeyboardChanged) { + if (mBuffer == null || mKeyboardChanged && + (mBuffer.getWidth() != getWidth() || mBuffer.getHeight() != getHeight())) { + // Make sure our bitmap is at least 1x1 + final int width = Math.max(1, getWidth()); + final int height = Math.max(1, getHeight()); + mBuffer = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + mCanvas = new Canvas(mBuffer); + } + invalidateAllKeys(); + mKeyboardChanged = false; + } + + if (mKeyboard == null) return; + + mCanvas.save(); + final Canvas canvas = mCanvas; + canvas.clipRect(mDirtyRect); + + final Paint paint = mPaint; + final Drawable keyBackground = mKeyBackground; + final Rect clipRegion = mClipRegion; + final Rect padding = mPadding; + final int kbdPaddingLeft = getPaddingLeft(); + final int kbdPaddingTop = getPaddingTop(); + final KeyBoard.Key[] keys = mKeys; + final KeyBoard.Key invalidKey = mInvalidatedKey; + + paint.setColor(mKeyTextColor); + boolean drawSingleKey = false; + if (invalidKey != null && canvas.getClipBounds(clipRegion)) { + + if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left && + invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top && + invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right && + invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) { + drawSingleKey = true; + } + } + canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR); + final int keyCount = keys.length; + for (int i = 0; i < keyCount; i++) { + final KeyBoard.Key key = keys[i]; + if (drawSingleKey && invalidKey != key) { + continue; + } + int[] drawableState = key.getCurrentDrawableState(); + keyBackground.setState(drawableState); + + // 按下 shift 键,则将字符切换为大写 + String label = key.label == null? null : adjustCase(key.label).toString(); + + final Rect bounds = keyBackground.getBounds(); + if (key.width != bounds.right || + key.height != bounds.bottom) { + keyBackground.setBounds(0, 0, key.width, key.height); + } + canvas.translate(key.x + kbdPaddingLeft, key.y + kbdPaddingTop); + keyBackground.draw(canvas); + + if (label != null) { + // For characters, 使用大号字体. 对于像done标签, use small font. + if (label.length() > 1 && key.codes.length < 2) { + paint.setTextSize(mLabelTextSize); + paint.setTypeface(Typeface.DEFAULT_BOLD); + } else { + paint.setTextSize(mKeyTextSize); + paint.setTypeface(Typeface.DEFAULT); + } + // 为文本绘制投影 + paint.setShadowLayer(mShadowRadius, 0, 0, mShadowColor); + // 绘制文本 + canvas.drawText(label, + (key.width - padding.left - padding.right) / 2 + + padding.left, + (key.height - padding.top - padding.bottom) / 2 + + (paint.getTextSize() - paint.descent()) / 2 + padding.top, + paint); + // Turn off drop shadow + paint.setShadowLayer(0, 0, 0, 0); + } else if (key.icon != null) { + final int drawableX = (key.width - padding.left - padding.right + - key.icon.getIntrinsicWidth()) / 2 + padding.left; + final int drawableY = (key.height - padding.top - padding.bottom + - key.icon.getIntrinsicHeight()) / 2 + padding.top; + canvas.translate(drawableX, drawableY); + key.icon.setBounds(0, 0, + key.icon.getIntrinsicWidth(), key.icon.getIntrinsicHeight()); + key.icon.draw(canvas); + canvas.translate(-drawableX, -drawableY); + } + canvas.translate(-key.x - kbdPaddingLeft, -key.y - kbdPaddingTop); + } + mInvalidatedKey = null; + // Overlay a dark rectangle to dim the keyboard + if (mMiniKeyboardOnScreen) { +// paint.setColor((int) (mBackgroundDimAmount * 0xFF) << 24); + canvas.drawRect(0, 0, getWidth(), getHeight(), paint); + } + + if (DEBUG && mShowTouchPoints) { + paint.setAlpha(128); + paint.setColor(0xFFFF0000); + canvas.drawCircle(mStartX, mStartY, 3, paint); + canvas.drawLine(mStartX, mStartY, mLastX, mLastY, paint); + paint.setColor(0xFF0000FF); + canvas.drawCircle(mLastX, mLastY, 3, paint); + paint.setColor(0xFF00FF00); + canvas.drawCircle((mStartX + mLastX) / 2, (mStartY + mLastY) / 2, 2, paint); + } + mCanvas.restore(); + mDrawPending = false; + mDirtyRect.setEmpty(); + } + + private int getKeyIndices(int x, int y, int[] allKeys) { + final KeyBoard.Key[] keys = mKeys; + int primaryIndex = NOT_A_KEY; + int closestKey = NOT_A_KEY; + int closestKeyDist = mProximityThreshold + 1; + Arrays.fill(mDistances, Integer.MAX_VALUE); + int [] nearestKeyIndices = mKeyboard.getNearestKeys(x, y); + final int keyCount = nearestKeyIndices.length; + for (int i = 0; i < keyCount; i++) { + final KeyBoard.Key key = keys[nearestKeyIndices[i]]; + int dist = 0; + boolean isInside = key.isInside(x,y); + if (isInside) { + primaryIndex = nearestKeyIndices[i]; + } + + if (((mProximityCorrectOn + && (dist = key.squaredDistanceFrom(x, y)) < mProximityThreshold) + || isInside) + && key.codes[0] > 32) { + // Find insertion point + final int nCodes = key.codes.length; + if (dist < closestKeyDist) { + closestKeyDist = dist; + closestKey = nearestKeyIndices[i]; + } + + if (allKeys == null) continue; + + for (int j = 0; j < mDistances.length; j++) { + if (mDistances[j] > dist) { + // Make space for nCodes codes + System.arraycopy(mDistances, j, mDistances, j + nCodes, + mDistances.length - j - nCodes); + System.arraycopy(allKeys, j, allKeys, j + nCodes, + allKeys.length - j - nCodes); + for (int c = 0; c < nCodes; c++) { + allKeys[j + c] = key.codes[c]; + mDistances[j + c] = dist; + } + break; + } + } + } + } + if (primaryIndex == NOT_A_KEY) { + primaryIndex = closestKey; + } + return primaryIndex; + } + + private void detectAndSendKey(int index, int x, int y, long eventTime) { + if (index != NOT_A_KEY && index < mKeys.length) { + final KeyBoard.Key key = mKeys[index]; + if (key.text != null) { + mKeyboardActionListener.onText(key.text); + mKeyboardActionListener.onRelease(NOT_A_KEY); + } else { + int code = key.codes[0]; + //TextEntryState.keyPressedAt(key, x, y); + int[] codes = new int[MAX_NEARBY_KEYS]; + Arrays.fill(codes, NOT_A_KEY); + getKeyIndices(x, y, codes); + // Multi-tap + if (mInMultiTap) { + if (mTapCount != -1) { + mKeyboardActionListener.onKey(KeyBoard.KEYCODE_DELETE, KEY_DELETE); + } else { + mTapCount = 0; + } + code = key.codes[mTapCount]; + } + mKeyboardActionListener.onKey(code, codes); + mKeyboardActionListener.onRelease(code); + } + mLastSentIndex = index; + mLastTapTime = eventTime; + } + } + + + private CharSequence getPreviewText(KeyBoard.Key key) { + if (mInMultiTap) { + // Multi-tap + mPreviewLabel.setLength(0); + mPreviewLabel.append((char) key.codes[mTapCount < 0 ? 0 : mTapCount]); + return adjustCase(mPreviewLabel); + } else { + return adjustCase(key.label); + } + } + + private void showPreview(int keyIndex) { + int oldKeyIndex = mCurrentKeyIndex; + final PopupWindow previewPopup = mPreviewPopup; + + mCurrentKeyIndex = keyIndex; + // 松开旧键并按新键 + final KeyBoard.Key[] keys = mKeys; + if (oldKeyIndex != mCurrentKeyIndex) { + if (oldKeyIndex != NOT_A_KEY && keys.length > oldKeyIndex) { + KeyBoard.Key oldKey = keys[oldKeyIndex]; + oldKey.onReleased(mCurrentKeyIndex == NOT_A_KEY); + invalidateKey(oldKeyIndex); + final int keyCode = oldKey.codes[0]; + } + if (mCurrentKeyIndex != NOT_A_KEY && keys.length > mCurrentKeyIndex) { + KeyBoard.Key newKey = keys[mCurrentKeyIndex]; + newKey.onPressed(); + invalidateKey(mCurrentKeyIndex); + final int keyCode = newKey.codes[0]; + } + } + // If key changed and preview is on ... + if (oldKeyIndex != mCurrentKeyIndex && mShowPreview) { + mHandler.removeMessages(MSG_SHOW_PREVIEW); + if (previewPopup.isShowing()) { + if (keyIndex == NOT_A_KEY) { + mHandler.sendMessageDelayed(mHandler + .obtainMessage(MSG_REMOVE_PREVIEW), + DELAY_AFTER_PREVIEW); + } + } + if (keyIndex != NOT_A_KEY) { + if (previewPopup.isShowing() && mPreviewText.getVisibility() == VISIBLE) { + + showKey(keyIndex); + } else { + mHandler.sendMessageDelayed( + mHandler.obtainMessage(MSG_SHOW_PREVIEW, keyIndex, 0), + DELAY_BEFORE_PREVIEW); + } + } + } + } + + private void showKey(final int keyIndex) { + final PopupWindow previewPopup = mPreviewPopup; + final KeyBoard.Key[] keys = mKeys; + if (keyIndex < 0 || keyIndex >= mKeys.length) return; + KeyBoard.Key key = keys[keyIndex]; + if (key.icon != null) { + mPreviewText.setCompoundDrawables(null, null, null, + key.iconPreview != null ? key.iconPreview : key.icon); + mPreviewText.setText(null); + } else { + mPreviewText.setCompoundDrawables(null, null, null, null); + mPreviewText.setText(getPreviewText(key)); + if (key.label!=null && key.label.length() > 1 && key.codes.length < 2) { + mPreviewText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mKeyTextSize); + mPreviewText.setTypeface(Typeface.DEFAULT_BOLD); + } else { + mPreviewText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mPreviewTextSizeLarge); + mPreviewText.setTypeface(Typeface.DEFAULT); + } + } + mPreviewText.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), + MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); + int popupWidth = Math.max(mPreviewText.getMeasuredWidth(), key.width + + mPreviewText.getPaddingLeft() + mPreviewText.getPaddingRight()); + final int popupHeight = mPreviewHeight; + ViewGroup.LayoutParams lp = mPreviewText.getLayoutParams(); + if (lp != null) { + lp.width = popupWidth; + lp.height = popupHeight; + } + if (!mPreviewCentered) { + mPopupPreviewX = key.x - mPreviewText.getPaddingLeft() + getPaddingLeft(); + mPopupPreviewY = key.y - popupHeight + mPreviewOffset; + } else { + + mPopupPreviewX = 160 - mPreviewText.getMeasuredWidth() / 2; + mPopupPreviewY = - mPreviewText.getMeasuredHeight(); + } + mHandler.removeMessages(MSG_REMOVE_PREVIEW); + getLocationInWindow(mCoordinates); + mCoordinates[0] += mMiniKeyboardOffsetX; // Offset may be zero + mCoordinates[1] += mMiniKeyboardOffsetY; // Offset may be zero + + + mPreviewText.getBackground().setState( + key.popupResId != 0 ? LONG_PRESSABLE_STATE_SET : EMPTY_STATE_SET); + mPopupPreviewX += mCoordinates[0]; + mPopupPreviewY += mCoordinates[1]; + + + getLocationOnScreen(mCoordinates); + if (mPopupPreviewY + mCoordinates[1] < 0) { + + if (key.x + key.width <= getWidth() / 2) { + mPopupPreviewX += (int) (key.width * 2.5); + } else { + mPopupPreviewX -= (int) (key.width * 2.5); + } + mPopupPreviewY += popupHeight; + } + + if (previewPopup.isShowing()) { + previewPopup.update(mPopupPreviewX, mPopupPreviewY, + popupWidth, popupHeight); + } else { + previewPopup.setWidth(popupWidth); + previewPopup.setHeight(popupHeight); + previewPopup.showAtLocation(mPopupParent, Gravity.NO_GRAVITY, + mPopupPreviewX, mPopupPreviewY); + } + mPreviewText.setVisibility(VISIBLE); + } + + + public void invalidateAllKeys() { + mDirtyRect.union(0, 0, getWidth(), getHeight()); + mDrawPending = true; + invalidate(); + } + + + public void invalidateKey(int keyIndex) { + if (mKeys == null) return; + if (keyIndex < 0 || keyIndex >= mKeys.length) { + return; + } + final KeyBoard.Key key = mKeys[keyIndex]; + mInvalidatedKey = key; + mDirtyRect.union(key.x + getPaddingLeft(), key.y + getPaddingTop(), + key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop()); + onBufferDraw(); + invalidate(key.x + getPaddingLeft(), key.y + getPaddingTop(), + key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop()); + } + + private boolean openPopupIfRequired(MotionEvent me) { + // Check if we have a popup layout specified first. + if (mPopupLayout == 0) { + return false; + } + if (mCurrentKey < 0 || mCurrentKey >= mKeys.length) { + return false; + } + + KeyBoard.Key popupKey = mKeys[mCurrentKey]; + boolean result = onLongPress(popupKey); + if (result) { + mAbortKey = true; + showPreview(NOT_A_KEY); + } + return result; + } + + protected boolean onLongPress(KeyBoard.Key popupKey) { + int popupKeyboardId = popupKey.popupResId; + + if (popupKeyboardId != 0) { + mMiniKeyboardContainer = mMiniKeyboardCache.get(popupKey); + if (mMiniKeyboardContainer == null) { + LayoutInflater inflater = (LayoutInflater) getContext().getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + mMiniKeyboardContainer = inflater.inflate(mPopupLayout, null); + mMiniKeyboard = mMiniKeyboardContainer.findViewById( + R.id.my_keyboard_view); + mMiniKeyboard.setOnKeyboardActionListener(new OnKeyboardActionListener() { + public void onKey(int primaryCode, int[] keyCodes) { + mKeyboardActionListener.onKey(primaryCode, keyCodes); + dismissPopupKeyboard(); + } + + public void onText(CharSequence text) { + mKeyboardActionListener.onText(text); + dismissPopupKeyboard(); + } + + public void swipeLeft() { } + public void swipeRight() { } + public void swipeUp() { } + public void swipeDown() { } + public void onPress(int primaryCode) { + mKeyboardActionListener.onPress(primaryCode); + } + public void onRelease(int primaryCode) { + mKeyboardActionListener.onRelease(primaryCode); + } + }); + + KeyBoard keyboard; + if (popupKey.popupCharacters != null) { + keyboard = new KeyBoard(getContext(), popupKeyboardId, + popupKey.popupCharacters, -1, getPaddingLeft() + getPaddingRight()); + } else { + keyboard = new KeyBoard(getContext(), popupKeyboardId); + } + mMiniKeyboard.setKeyboard(keyboard); + mMiniKeyboard.setPopupParent(this); + mMiniKeyboardContainer.measure( + MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST), + MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.AT_MOST)); + + mMiniKeyboardCache.put(popupKey, mMiniKeyboardContainer); + } else { + mMiniKeyboard = mMiniKeyboardContainer.findViewById( + R.id.my_keyboard_view); + } + getLocationInWindow(mCoordinates); + mPopupX = popupKey.x + getPaddingLeft(); + mPopupY = popupKey.y + getPaddingTop(); + mPopupX = mPopupX + popupKey.width - mMiniKeyboardContainer.getMeasuredWidth(); + mPopupY = mPopupY - mMiniKeyboardContainer.getMeasuredHeight(); + final int x = mPopupX + mMiniKeyboardContainer.getPaddingRight() + mCoordinates[0]; + final int y = mPopupY + mMiniKeyboardContainer.getPaddingBottom() + mCoordinates[1]; + mMiniKeyboard.setPopupOffset(x < 0 ? 0 : x, y); + mMiniKeyboard.setShifted(isShifted()); + mPopupKeyboard.setContentView(mMiniKeyboardContainer); + mPopupKeyboard.setWidth(mMiniKeyboardContainer.getMeasuredWidth()); + mPopupKeyboard.setHeight(mMiniKeyboardContainer.getMeasuredHeight()); + mPopupKeyboard.showAtLocation(this, Gravity.NO_GRAVITY, x, y); + mMiniKeyboardOnScreen = true; + + invalidateAllKeys(); + return true; + } + return false; + } + + + + @Override + public boolean onTouchEvent(MotionEvent me) { + // Convert multi-pointer up/down events to single up/down events to + // deal with the typical multi-pointer behavior of two-thumb typing + final int pointerCount = me.getPointerCount(); + final int action = me.getAction(); + boolean result = false; + final long now = me.getEventTime(); + + if (pointerCount != mOldPointerCount) { + if (pointerCount == 1) { + // Send a down event for the latest pointer + MotionEvent down = MotionEvent.obtain(now, now, MotionEvent.ACTION_DOWN, + me.getX(), me.getY(), me.getMetaState()); + result = onModifiedTouchEvent(down, false); + down.recycle(); + // If it's an up action, then deliver the up as well. + if (action == MotionEvent.ACTION_UP) { + result = onModifiedTouchEvent(me, true); + } + } else { + // Send an up event for the last pointer + MotionEvent up = MotionEvent.obtain(now, now, MotionEvent.ACTION_UP, + mOldPointerX, mOldPointerY, me.getMetaState()); + result = onModifiedTouchEvent(up, true); + up.recycle(); + } + } else { + if (pointerCount == 1) { + result = onModifiedTouchEvent(me, false); + mOldPointerX = me.getX(); + mOldPointerY = me.getY(); + } else { + // Don't do anything when 2 pointers are down and moving. + result = true; + } + } + mOldPointerCount = pointerCount; + + + return result; + } + + private boolean onModifiedTouchEvent(MotionEvent me, boolean possiblePoly) { + int touchX = (int) me.getX() - getPaddingLeft(); + int touchY = (int) me.getY() - getPaddingTop(); + if (touchY >= -mVerticalCorrection) + touchY += mVerticalCorrection; + final int action = me.getAction(); + final long eventTime = me.getEventTime(); + int keyIndex = getKeyIndices(touchX, touchY, null); + mPossiblePoly = possiblePoly; + + // Track the last few movements to look for spurious swipes. + if (action == MotionEvent.ACTION_DOWN) mSwipeTracker.clear(); + mSwipeTracker.addMovement(me); + + // Ignore all motion events until a DOWN. + if (mAbortKey + && action != MotionEvent.ACTION_DOWN && action != MotionEvent.ACTION_CANCEL) { + mRepeatKeyIndex = NOT_A_KEY; + return true; + } + + if (mGestureDetector.onTouchEvent(me)) { + showPreview(NOT_A_KEY); + mHandler.removeMessages(MSG_REPEAT); + mHandler.removeMessages(MSG_LONGPRESS); + return true; + } + + // Needs to be called after the gesture detector gets a turn, as it may have + // displayed the mini keyboard + if (mMiniKeyboardOnScreen && action != MotionEvent.ACTION_CANCEL) { + mRepeatKeyIndex = NOT_A_KEY; + return true; + } + + switch (action) { + case MotionEvent.ACTION_DOWN: + mAbortKey = false; + mStartX = touchX; + mStartY = touchY; + mLastCodeX = touchX; + mLastCodeY = touchY; + mLastKeyTime = 0; + mCurrentKeyTime = 0; + mLastKey = NOT_A_KEY; + mCurrentKey = keyIndex; + mDownKey = keyIndex; + mDownTime = me.getEventTime(); + mLastMoveTime = mDownTime; + checkMultiTap(eventTime, keyIndex); + mKeyboardActionListener.onPress(keyIndex != NOT_A_KEY ? + mKeys[keyIndex].codes[0] : 0); + if (mCurrentKey >= 0 && mKeys[mCurrentKey].repeatable) { + mRepeatKeyIndex = mCurrentKey; + Message msg = mHandler.obtainMessage(MSG_REPEAT); + mHandler.sendMessageDelayed(msg, REPEAT_START_DELAY); + repeatKey(); + // Delivering the key could have caused an abort + if (mAbortKey) { + mRepeatKeyIndex = NOT_A_KEY; + break; + } + } + if (mCurrentKey != NOT_A_KEY) { + Message msg = mHandler.obtainMessage(MSG_LONGPRESS, me); + mHandler.sendMessageDelayed(msg, LONGPRESS_TIMEOUT); + } + showPreview(keyIndex); + break; + + case MotionEvent.ACTION_MOVE: + boolean continueLongPress = false; + if (keyIndex != NOT_A_KEY) { + if (mCurrentKey == NOT_A_KEY) { + mCurrentKey = keyIndex; + mCurrentKeyTime = eventTime - mDownTime; + } else { + if (keyIndex == mCurrentKey) { + mCurrentKeyTime += eventTime - mLastMoveTime; + continueLongPress = true; + } else if (mRepeatKeyIndex == NOT_A_KEY) { + resetMultiTap(); + mLastKey = mCurrentKey; + mLastCodeX = mLastX; + mLastCodeY = mLastY; + mLastKeyTime = + mCurrentKeyTime + eventTime - mLastMoveTime; + mCurrentKey = keyIndex; + mCurrentKeyTime = 0; + } + } + } + if (!continueLongPress) { + // Cancel old longpress + mHandler.removeMessages(MSG_LONGPRESS); + // Start new longpress if key has changed + if (keyIndex != NOT_A_KEY) { + Message msg = mHandler.obtainMessage(MSG_LONGPRESS, me); + mHandler.sendMessageDelayed(msg, LONGPRESS_TIMEOUT); + } + } + showPreview(mCurrentKey); + mLastMoveTime = eventTime; + break; + + case MotionEvent.ACTION_UP: + removeMessages(); + if (keyIndex == mCurrentKey) { + mCurrentKeyTime += eventTime - mLastMoveTime; + } else { + resetMultiTap(); + mLastKey = mCurrentKey; + mLastKeyTime = mCurrentKeyTime + eventTime - mLastMoveTime; + mCurrentKey = keyIndex; + mCurrentKeyTime = 0; + } + if (mCurrentKeyTime < mLastKeyTime && mCurrentKeyTime < DEBOUNCE_TIME + && mLastKey != NOT_A_KEY) { + mCurrentKey = mLastKey; + touchX = mLastCodeX; + touchY = mLastCodeY; + } + showPreview(NOT_A_KEY); + Arrays.fill(mKeyIndices, NOT_A_KEY); + // If we're not on a repeating key (which sends on a DOWN event) + if (mRepeatKeyIndex == NOT_A_KEY && !mMiniKeyboardOnScreen && !mAbortKey) { + detectAndSendKey(mCurrentKey, touchX, touchY, eventTime); + } + invalidateKey(keyIndex); + mRepeatKeyIndex = NOT_A_KEY; + break; + case MotionEvent.ACTION_CANCEL: + removeMessages(); + dismissPopupKeyboard(); + mAbortKey = true; + showPreview(NOT_A_KEY); + invalidateKey(mCurrentKey); + break; + } + mLastX = touchX; + mLastY = touchY; + return true; + } + + private boolean repeatKey() { + if(mRepeatKeyIndex != NOT_A_KEY){ + KeyBoard.Key key = mKeys[mRepeatKeyIndex]; + detectAndSendKey(mCurrentKey, key.x, key.y, mLastTapTime); + return true; + } + return false; + } + + protected void swipeRight() { + mKeyboardActionListener.swipeRight(); + } + + protected void swipeLeft() { + mKeyboardActionListener.swipeLeft(); + } + + protected void swipeUp() { + mKeyboardActionListener.swipeUp(); + } + + protected void swipeDown() { + mKeyboardActionListener.swipeDown(); + } + + public void closing() { + if (mPreviewPopup.isShowing()) { + mPreviewPopup.dismiss(); + } + removeMessages(); + + dismissPopupKeyboard(); + mBuffer = null; + mCanvas = null; + mMiniKeyboardCache.clear(); + } + + private void removeMessages() { + if (mHandler != null) { + mHandler.removeMessages(MSG_REPEAT); + mHandler.removeMessages(MSG_LONGPRESS); + mHandler.removeMessages(MSG_SHOW_PREVIEW); + } + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + closing(); + } + + private void dismissPopupKeyboard() { + if (mPopupKeyboard.isShowing()) { + mPopupKeyboard.dismiss(); + mMiniKeyboardOnScreen = false; + invalidateAllKeys(); + } + } + + public boolean handleBack() { + if (mPopupKeyboard.isShowing()) { + dismissPopupKeyboard(); + return true; + } + return false; + } + + private void resetMultiTap() { + mLastSentIndex = NOT_A_KEY; + mTapCount = 0; + mLastTapTime = -1; + mInMultiTap = false; + } + + private void checkMultiTap(long eventTime, int keyIndex) { + if (keyIndex == NOT_A_KEY) return; + KeyBoard.Key key = mKeys[keyIndex]; + if (key.codes.length > 1) { + mInMultiTap = true; + if (eventTime < mLastTapTime + MULTITAP_INTERVAL + && keyIndex == mLastSentIndex) { + mTapCount = (mTapCount + 1) % key.codes.length; + return; + } else { + mTapCount = -1; + return; + } + } + if (eventTime > mLastTapTime + MULTITAP_INTERVAL || keyIndex != mLastSentIndex) { + resetMultiTap(); + } + } + + private static class SwipeTracker { + + static final int NUM_PAST = 4; + static final int LONGEST_PAST_TIME = 200; + + final float mPastX[] = new float[NUM_PAST]; + final float mPastY[] = new float[NUM_PAST]; + final long mPastTime[] = new long[NUM_PAST]; + + float mYVelocity; + float mXVelocity; + + public void clear() { + mPastTime[0] = 0; + } + + public void addMovement(MotionEvent ev) { + long time = ev.getEventTime(); + final int N = ev.getHistorySize(); + for (int i=0; i= 0) { + final int start = drop+1; + final int count = NUM_PAST-drop-1; + System.arraycopy(pastX, start, pastX, 0, count); + System.arraycopy(pastY, start, pastY, 0, count); + System.arraycopy(pastTime, start, pastTime, 0, count); + i -= (drop+1); + } + pastX[i] = x; + pastY[i] = y; + pastTime[i] = time; + i++; + if (i < NUM_PAST) { + pastTime[i] = 0; + } + } + + public void computeCurrentVelocity(int units) { + computeCurrentVelocity(units, Float.MAX_VALUE); + } + + public void computeCurrentVelocity(int units, float maxVelocity) { + final float[] pastX = mPastX; + final float[] pastY = mPastY; + final long[] pastTime = mPastTime; + + final float oldestX = pastX[0]; + final float oldestY = pastY[0]; + final long oldestTime = pastTime[0]; + float accumX = 0; + float accumY = 0; + int N=0; + while (N < NUM_PAST) { + if (pastTime[N] == 0) { + break; + } + N++; + } + + for (int i=1; i < N; i++) { + final int dur = (int)(pastTime[i] - oldestTime); + if (dur == 0) continue; + float dist = pastX[i] - oldestX; + float vel = (dist/dur) * units; // pixels/frame. + if (accumX == 0) accumX = vel; + else accumX = (accumX + vel) * .5f; + + dist = pastY[i] - oldestY; + vel = (dist/dur) * units; // pixels/frame. + if (accumY == 0) accumY = vel; + else accumY = (accumY + vel) * .5f; + } + mXVelocity = accumX < 0.0f ? Math.max(accumX, -maxVelocity) + : Math.min(accumX, maxVelocity); + mYVelocity = accumY < 0.0f ? Math.max(accumY, -maxVelocity) + : Math.min(accumY, maxVelocity); + } + + public float getXVelocity() { + return mXVelocity; + } + + public float getYVelocity() { + return mYVelocity; + } + } +} + diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/MyKeyBoardView.java b/app/src/main/java/com/example/fingerkeyboard/tool/MyKeyBoardView.java new file mode 100644 index 0000000..1330821 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/MyKeyBoardView.java @@ -0,0 +1,167 @@ +package com.example.fingerkeyboard.tool; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; + +import java.util.List; + +public class MyKeyBoardView extends KeyBoardView{ + private CustomViewConfig config = new CustomViewConfig(); + private int shift_status = 0; + private int viewType = 0; + + private Context context; + + public void setShift_status(int shift_status) { + this.shift_status = shift_status; + } + + public int getShift_status() { + return shift_status; + } + + public void setViewType(int viewType) { + this.viewType = viewType; + } + + public int getViewType() { + return viewType; + } + + public MyKeyBoardView(Context context, AttributeSet attrs) { + + super(context, attrs); + initView(); + } + + public MyKeyBoardView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initView(); + } + + public MyKeyBoardView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + initView(); + } + + + private Paint mPaint; + private int leftPressedColor = 0xFFFF0000; + private int rightPressedColor = 0xFFAA0000; + private int action = -10; + private Paint paint = new Paint(); + private Path pathLeft = new Path(); + + + private void initView() { + config.init(); + context = getContext(); + mPaint = new Paint(); + mPaint.setTextAlign(Paint.Align.CENTER); + float textSize = MyTools.spToPpx(16f, context); + mPaint.setTextSize(textSize); + mPaint.setColor(config.getKeyNoramlcolor()); + } + + + @Override + public void onDraw(Canvas canvas) { + super.onDraw(canvas); + + + KeyBoard keyboard = getKeyboard(); + List keys = keyboard.getKeys(); + for (int r = 0; r < keys.size(); r++) { + KeyBoard.Key key = keys.get(r); + int code = key.codes[0]; + + mPaint.setColor(config.getKeyActioncolor()); + if (code == KeyBoard.KEYCODE_MODE_CHANGE) { + + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); + onDrawLabel(key, canvas); + + } else if (code == KeyBoard.KEYCODE_SHIFT) { + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); + DrawIcon.INSTANCE.onDrawKeyIcon(key, getShiftDraw(), canvas, this); + + } else if (code == KeyBoard.KEYCODE_SHIFT_123) { + + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); +// DrawIcon.INSTANCE.onDrawKeyIcon(key, getShiftDraw(), canvas, this); + onDrawLabel(key, canvas); + + } else if (code == KeyBoard.KEYCODE_SHIFT_SYMBOL) { + + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); +// DrawIcon.INSTANCE.onDrawKeyIcon(key, getShiftDraw(), canvas, this); + onDrawLabel(key, canvas); + + } else if (code == KeyBoard.KEYCODE_DONE) { + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); + onDrawLabel(key, canvas); + } else if (code == KeyBoard.KEYCODE_DELETE) { + onDrawKeyBackground(key, config.getBgActionDraw(), canvas); + DrawIcon.INSTANCE.onDrawKeyIcon(key, config.getIconDel(), canvas, this); + onDrawLabel(key, canvas); + } else { + mPaint.setColor(config.getKeyNoramlcolor()); + onDrawKeyBackground(key, config.getBgNormalDraw(), canvas); + onDrawLabel(key, canvas); + } + } + + + + } + + + + + public void updateConfigView(Context con) { + config.updateConfig(con); + setBackground(config.getBG()); + invalidateAllKeys(); + + } + + private Drawable getShiftDraw() { + if (shift_status == 0) { + return config.getIconShift(); + } else if (shift_status == 1) { + return config.getIconShiftLock(); + } else { + return config.getIconShiftLock(); + } + } + + + private void onDrawKeyBackground(KeyBoard.Key myKey, + Drawable keyBG, + Canvas canvas) { + if (keyBG != null) { + Rect rect = new Rect(myKey.x + getPaddingLeft(), myKey.y + getPaddingTop(), myKey.width + myKey.x + getPaddingLeft(), myKey.height + myKey.y + getPaddingTop()); + keyBG.setBounds(rect); + keyBG.setState(myKey.getCurrentDrawableState()); + keyBG.draw(canvas); + } + } + + private void onDrawLabel( + KeyBoard.Key myKey, + Canvas canvas) { + boolean b = myKey.label == null || myKey.label == ""; + if (!b) { + float y1 = myKey.y + getPaddingRight() + (myKey.height/ 2f) + ((mPaint.getTextSize() - mPaint.descent()) / 2f); + float x1 = myKey.x + getPaddingLeft() + ((myKey.width / 2f)); + canvas.drawText(myKey.label.toString(), x1, y1, mPaint); + + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/MyService.java b/app/src/main/java/com/example/fingerkeyboard/tool/MyService.java new file mode 100644 index 0000000..431ef74 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/MyService.java @@ -0,0 +1,200 @@ +package com.example.fingerkeyboard.tool; + +import android.inputmethodservice.InputMethodService; +import android.os.SystemClock; +import android.view.LayoutInflater; +import android.view.View; +import android.view.inputmethod.EditorInfo; + + +import com.example.fingerkeyboard.R; + +import java.util.List; + +public class MyService extends InputMethodService implements KeyBoardView.OnKeyboardActionListener{ + private long last_click = -1L; + + + private int[] ViewXmls = new int[3]; + + private boolean is_double = false; + + private MyKeyBoardView myKeyBoardView; + + + + + + + @Override + public View onCreateInputView() { + ViewXmls[0] = R.xml.view_1; + ViewXmls[1] = R.xml.view_2; + ViewXmls[2] = R.xml.view_3; + + View inputView = LayoutInflater.from(this).inflate(R.layout.customer_input_view, null, false); + + + myKeyBoardView = (MyKeyBoardView) inputView.findViewById(R.id.my_keyboard_view); + myKeyBoardView.setPreviewEnabled(false); + + + myKeyBoardView.setKeyboard(new KeyBoard(this, ViewXmls[0]));//将自定义的键盘布局到KeyBoard上 + myKeyBoardView.setOnKeyboardActionListener(this);//设置键盘事件监听器方法 + return inputView; + } + + + + + @Override + public void onWindowShown() { + super.onWindowShown(); + myKeyBoardView.updateConfigView(this); + } + + + + @Override + public void onPress(int primaryCode) {//双击 + if(primaryCode == KeyBoard.KEYCODE_SHIFT){ + if(300 > SystemClock.elapsedRealtime() - last_click){ + is_double = true; + + } + last_click = SystemClock.elapsedRealtime(); + + } + + } + + @Override + public void onRelease(int primaryCode) { + + } + + + + private void switchCapital(Boolean toCapital, KeyBoard keyboard) { + + List keys = keyboard.getKeys(); + for(int n=1;n parseJsonString(String jsonString) { + List myDataArrayList = new ArrayList<>(); + try { + JSONObject string1 = new JSONObject(jsonString); + JSONArray list = string1.getJSONArray("list"); + for (int g = 0; g < list.length(); g++) { + MyData myData = new MyData(); + JSONObject item = list.getJSONObject(g); + String preview = item.getString("preview"); + String thumb = item.getString("thumb"); + String title = item.getString("title"); + String zipUrl = item.getString("zipUrl"); + myData.setPreview(String.valueOf(preview)); + myData.setThumb(thumb); + myData.setZipUrl(zipUrl); + myData.setResourseName(title); + myDataArrayList.add(myData); + } + return myDataArrayList; + } catch (JSONException jsonException) { + return null; + } + } + + public static void goSetStep2() { + methodManager.showInputMethodPicker(); + } + public static boolean isStep2() { + String string = Settings.Secure.getString(KeyBoard.app.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); + if (string.startsWith(KeyBoard.app.getPackageName())) { + return true; + } else { + return false; + } + } + + public static void goSetStep1(Context context) { + Intent intent = new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS); + context.startActivity(intent); + } + + public static boolean isStep1() { + for (InputMethodInfo inputMethodInfo : methodManager.getEnabledInputMethodList()) { + if (inputMethodInfo.getId().startsWith(KeyBoard.app.getPackageName())) { + return true; + } + } + return false; + } + + public static void downloadZip(String url, Context context, DownloadCallback callback) { + + Glide.with(context) + .asFile() + .load(url) + .addListener(new RequestListener() { + @Override + public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) { + callback.onDownloadCall(false, null); + return false; + } + + @Override + public boolean onResourceReady(@NonNull File resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) { + callback.onDownloadCall(true, resource); + return false; + } + } + ).preload(); + + + } + + public static void unzipFile( + String unzipPath, + File resource, + UnzipCallback unzipCallback + ) { + if (!resource.exists()) { + unzipCallback.onUnzipCall(false, ""); + return; + } + String itemFilePath = ""; + + RandomAccessFileOutStream outStream = null; + IInArchive openInArchive; + RandomAccessFileInStream randomAccessFileInStream; + try { + randomAccessFileInStream = new RandomAccessFileInStream(new RandomAccessFile(resource, "r")); + openInArchive = SevenZip.openInArchive( + ArchiveFormat.SEVEN_ZIP, + randomAccessFileInStream + ); + + ISimpleInArchiveItem[] archiveItems = openInArchive.getSimpleInterface().getArchiveItems(); + for (int d = 0; d < archiveItems.length; d++) { + ISimpleInArchiveItem simple = archiveItems[d]; + File file = new File(unzipPath, simple.getPath()); + if (!simple.isFolder()) { + outStream = new RandomAccessFileOutStream(new RandomAccessFile(file, "rw")); + simple.extractSlow(outStream); + itemFilePath = file.getPath(); + + } else { + boolean mkdirs = file.mkdirs(); + } + } + randomAccessFileInStream.close(); + openInArchive.close(); + if (outStream != null) { + outStream.close(); + } + int res = itemFilePath.indexOf("res"); + String substring = itemFilePath.substring(0, res + 3); + unzipCallback.onUnzipCall(true, substring); + + } catch (FileNotFoundException | SevenZipException e) { + unzipCallback.onUnzipCall(false, ""); + + } catch (IOException e) { + unzipCallback.onUnzipCall(false, ""); + throw new RuntimeException(e); + } + + + } + + +} diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/SpaceItem.java b/app/src/main/java/com/example/fingerkeyboard/tool/SpaceItem.java new file mode 100644 index 0000000..8e9224a --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/SpaceItem.java @@ -0,0 +1,56 @@ +package com.example.fingerkeyboard.tool; + +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +public class SpaceItem extends RecyclerView.ItemDecoration { + private int ex_space = 0; + private int v_space = 0; + private int h_space = 0; + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + + int position = parent.getChildAdapterPosition(view); + int spanSize = 1; + int spanIndex = 0; + int spanCount = 1; + + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + + if (layoutManager instanceof GridLayoutManager) { + GridLayoutManager layoutManager1 = (GridLayoutManager) layoutManager; + GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = layoutManager1.getSpanCount(); + spanSize = layoutManager1.getSpanSizeLookup().getSpanSize(position); + spanIndex = layoutParams.getSpanIndex(); + + } + + + if (spanSize == spanCount) { + outRect.left = v_space + ex_space; + outRect.right = v_space + ex_space; + outRect.bottom = h_space; + } else { + int itemAllSpacing = (v_space * (spanCount + 1) + ex_space * 2) / spanCount; + int left = v_space * (spanIndex + 1) - itemAllSpacing * spanIndex + ex_space; + int right = itemAllSpacing - left; + outRect.left = left; + outRect.right = right; + outRect.bottom = h_space; + } + + } + + public SpaceItem(int v_space, int h_space, int ex_space) { + this.ex_space = ex_space; + this.h_space = h_space; + this.v_space = v_space; + + } +} diff --git a/app/src/main/java/com/example/fingerkeyboard/tool/customerText.java b/app/src/main/java/com/example/fingerkeyboard/tool/customerText.java new file mode 100644 index 0000000..dfc9d49 --- /dev/null +++ b/app/src/main/java/com/example/fingerkeyboard/tool/customerText.java @@ -0,0 +1,44 @@ +package com.example.fingerkeyboard.tool; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public class customerText extends androidx.appcompat.widget.AppCompatTextView { + + + public customerText(@NonNull Context context) { + super(context); + } + + public customerText(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public customerText(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + CharSequence text = getText(); + + } +} diff --git a/app/src/main/res/drawable/btn_download_background.xml b/app/src/main/res/drawable/btn_download_background.xml new file mode 100644 index 0000000..70988e1 --- /dev/null +++ b/app/src/main/res/drawable/btn_download_background.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_main_normal.xml b/app/src/main/res/drawable/btn_main_normal.xml new file mode 100644 index 0000000..26744e5 --- /dev/null +++ b/app/src/main/res/drawable/btn_main_normal.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_main_selected.xml b/app/src/main/res/drawable/btn_main_selected.xml new file mode 100644 index 0000000..7135697 --- /dev/null +++ b/app/src/main/res/drawable/btn_main_selected.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/de_keyboard_bg.xml b/app/src/main/res/drawable/de_keyboard_bg.xml new file mode 100644 index 0000000..7e0c160 --- /dev/null +++ b/app/src/main/res/drawable/de_keyboard_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/del_icon.xml b/app/src/main/res/drawable/del_icon.xml new file mode 100644 index 0000000..1c653c8 --- /dev/null +++ b/app/src/main/res/drawable/del_icon.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/home_tab_selector.xml b/app/src/main/res/drawable/home_tab_selector.xml new file mode 100644 index 0000000..f682937 --- /dev/null +++ b/app/src/main/res/drawable/home_tab_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ico_shift_lit.xml b/app/src/main/res/drawable/ico_shift_lit.xml new file mode 100644 index 0000000..858c5ef --- /dev/null +++ b/app/src/main/res/drawable/ico_shift_lit.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_back.xml b/app/src/main/res/drawable/icon_back.xml new file mode 100644 index 0000000..aa1e2cf --- /dev/null +++ b/app/src/main/res/drawable/icon_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_download.xml b/app/src/main/res/drawable/icon_download.xml new file mode 100644 index 0000000..ec67a29 --- /dev/null +++ b/app/src/main/res/drawable/icon_download.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/iv_back_background.xml b/app/src/main/res/drawable/iv_back_background.xml new file mode 100644 index 0000000..79e977a --- /dev/null +++ b/app/src/main/res/drawable/iv_back_background.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/step_background.xml b/app/src/main/res/drawable/step_background.xml new file mode 100644 index 0000000..70988e1 --- /dev/null +++ b/app/src/main/res/drawable/step_background.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/step_background_selected.xml b/app/src/main/res/drawable/step_background_selected.xml new file mode 100644 index 0000000..40a6b83 --- /dev/null +++ b/app/src/main/res/drawable/step_background_selected.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/step_selector.xml b/app/src/main/res/drawable/step_selector.xml new file mode 100644 index 0000000..49be956 --- /dev/null +++ b/app/src/main/res/drawable/step_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml new file mode 100644 index 0000000..bbc16cc --- /dev/null +++ b/app/src/main/res/layout/activity_home.xml @@ -0,0 +1,40 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..ac84fc5 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_preview.xml b/app/src/main/res/layout/activity_preview.xml new file mode 100644 index 0000000..7fba293 --- /dev/null +++ b/app/src/main/res/layout/activity_preview.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml new file mode 100644 index 0000000..e2be7a3 --- /dev/null +++ b/app/src/main/res/layout/activity_setting.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/customer_input_view.xml b/app/src/main/res/layout/customer_input_view.xml new file mode 100644 index 0000000..cb62a53 --- /dev/null +++ b/app/src/main/res/layout/customer_input_view.xml @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_aesthetic.xml b/app/src/main/res/layout/fragment_aesthetic.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_aesthetic.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_cool.xml b/app/src/main/res/layout/fragment_cool.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_cool.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_cute.xml b/app/src/main/res/layout/fragment_cute.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_cute.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_festival.xml b/app/src/main/res/layout/fragment_festival.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_festival.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_gravity.xml b/app/src/main/res/layout/fragment_gravity.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_gravity.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_love.xml b/app/src/main/res/layout/fragment_love.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_love.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_neon.xml b/app/src/main/res/layout/fragment_neon.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_neon.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_super.xml b/app/src/main/res/layout/fragment_super.xml new file mode 100644 index 0000000..827a765 --- /dev/null +++ b/app/src/main/res/layout/fragment_super.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/list_thumb.xml b/app/src/main/res/layout/list_thumb.xml new file mode 100644 index 0000000..679f899 --- /dev/null +++ b/app/src/main/res/layout/list_thumb.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml new file mode 100644 index 0000000..da6d363 --- /dev/null +++ b/app/src/main/res/menu/main.xml @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/app/src/main/res/mipmap-hdpi/down.png b/app/src/main/res/mipmap-hdpi/down.png new file mode 100644 index 0000000..d842807 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/down.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-hdpi/logo.png b/app/src/main/res/mipmap-hdpi/logo.png new file mode 100644 index 0000000..46979fc Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/logo.png differ diff --git a/app/src/main/res/mipmap-hdpi/setting.png b/app/src/main/res/mipmap-hdpi/setting.png new file mode 100644 index 0000000..61b9bd9 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/setting.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..d67a3a0 --- /dev/null +++ b/app/src/main/res/values-night/themes.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml new file mode 100644 index 0000000..d278977 --- /dev/null +++ b/app/src/main/res/values/array.xml @@ -0,0 +1,9 @@ + + + + neon + cool + aesthetic + btn_super + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..1732fe9 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,12 @@ + + + #FF000000 + #FFFFFFFF + #8E63DA + #C3AFE6 + #80FFFFFF + #80787373 + #8E63DA + #BC9BF6 + #DCDCDC + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..8936f1e --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,11 @@ + + Finger Keyboard + Step One + Step Two + For normal use, please enter the setting to complete the setting steps. + Apply the keyboard skin successfully + Settings + + Hello blank fragment + + \ No newline at end of file diff --git a/app/src/main/res/values/style.xml b/app/src/main/res/values/style.xml new file mode 100644 index 0000000..dbbad75 --- /dev/null +++ b/app/src/main/res/values/style.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..de3b1e5 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml new file mode 100644 index 0000000..fa0f996 --- /dev/null +++ b/app/src/main/res/xml/backup_rules.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 0000000..9ee9997 --- /dev/null +++ b/app/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/im.xml b/app/src/main/res/xml/im.xml new file mode 100644 index 0000000..aeaa192 --- /dev/null +++ b/app/src/main/res/xml/im.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/view_1.xml b/app/src/main/res/xml/view_1.xml new file mode 100644 index 0000000..5f11dac --- /dev/null +++ b/app/src/main/res/xml/view_1.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/view_2.xml b/app/src/main/res/xml/view_2.xml new file mode 100644 index 0000000..ab093d8 --- /dev/null +++ b/app/src/main/res/xml/view_2.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/view_3.xml b/app/src/main/res/xml/view_3.xml new file mode 100644 index 0000000..eaf0ef4 --- /dev/null +++ b/app/src/main/res/xml/view_3.xml @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/test/java/com/example/fingerkeyboard/ExampleUnitTest.java b/app/src/test/java/com/example/fingerkeyboard/ExampleUnitTest.java new file mode 100644 index 0000000..083f791 --- /dev/null +++ b/app/src/test/java/com/example/fingerkeyboard/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.example.fingerkeyboard; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..5f3e9e5 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,6 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + alias(libs.plugins.android.application) apply false + alias(libs.plugins.jetbrains.kotlin.android) apply false + +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..f9d6d06 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,23 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. For more details, visit +# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true +android.nonFinalResIds=false +android.enableR8.fullMode=false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..2d44564 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,24 @@ +[versions] +agp = "8.4.0" +junit = "4.13.2" +junitVersion = "1.1.5" +espressoCore = "3.5.1" +appcompat = "1.7.0" +material = "1.12.0" +kotlin = "2.0.0" +activity = "1.9.0" +constraintlayout = "2.1.4" + +[libraries] +junit = { group = "junit", name = "junit", version.ref = "junit" } +ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } +espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } +appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } +activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } +constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "agp" } +jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e708b1c Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..6115a6f --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Jun 13 16:03:18 CST 2024 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..4f906e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# 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 + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; 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=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@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 execute + +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 execute + +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 + +: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 %* + +: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/keystore.properties b/keystore.properties new file mode 100644 index 0000000..28a88bb --- /dev/null +++ b/keystore.properties @@ -0,0 +1,6 @@ +app_name=Finger Keyboard +package_name=com.finger.keyboard.selection +keystoreFile=app/FingerKeyboard.jks +key_alias=key0 +key_store_password=FingerKeyboard +key_password=FingerKeyboard diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..c6f1619 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,22 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + maven{url = uri("https://artifacts.applovin.com/android")} + + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + maven("https://jitpack.io") + maven ("https://artifact.bytedance.com/repository/pangle") + } +} + +rootProject.name = "Finger Keyboard" +include(":app") + \ No newline at end of file