From 6e8d4fcdbcd71592ed2b56791dd35088db5395b9 Mon Sep 17 00:00:00 2001 From: veggiecan0419 <137440114+veggiecan0419@users.noreply.github.com> Date: Thu, 9 May 2024 21:36:23 +0300 Subject: [PATCH] New extension: Mobile keyboard (#825) --- extensions/extensions.json | 1 + extensions/veggiecan/mobilekeyboard.js | 307 +++++++++++++++++++++++++ images/README.md | 5 + images/veggiecan/mobilekeyboard.svg | 1 + 4 files changed, 314 insertions(+) create mode 100644 extensions/veggiecan/mobilekeyboard.js create mode 100644 images/veggiecan/mobilekeyboard.svg diff --git a/extensions/extensions.json b/extensions/extensions.json index 329412851d..0f4f1c4775 100644 --- a/extensions/extensions.json +++ b/extensions/extensions.json @@ -30,6 +30,7 @@ "Lily/LooksPlus", "Lily/MoreEvents", "Lily/ListTools", + "veggiecan/mobilekeyboard", "NexusKitten/moremotion", "CubesterYT/WindowControls", "veggiecan/browserfullscreen", diff --git a/extensions/veggiecan/mobilekeyboard.js b/extensions/veggiecan/mobilekeyboard.js new file mode 100644 index 0000000000..2ddf765fd6 --- /dev/null +++ b/extensions/veggiecan/mobilekeyboard.js @@ -0,0 +1,307 @@ +// Name: Mobile Keyboard +// ID: mobilekeyboard0419 +// Description: Show the keyboard on mobile devices and get the users input without showing any input modal. +// License: MPL-2.0 +// By: veggiecan0419 + +(function (Scratch) { + "use strict"; + + if (!Scratch.extensions.unsandboxed) { + throw new Error("The mobile keyboard extension must run unsandboxed"); + } + + const menuicon = + "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2My4yNjciIGhlaWdodD0iNjMuMTg1Ij48ZyBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGRhdGEtcGFwZXItZGF0YT0ieyZxdW90O2lzUGFpbnRpbmdMYXllciZxdW90Ozp0cnVlfSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbCI+PHBhdGggZmlsbD0iIzY5Njk2OSIgc3Ryb2tlPSIjNjk2OTY5IiBzdHJva2Utd2lkdGg9IjQiIGQ9Ik02MS4yNjcgMzEuNTkyYzAgMTYuMzQ0LTEzLjI2NyAyOS41OTMtMjkuNjMzIDI5LjU5M0MxNS4yNjcgNjEuMTg1IDIgNDcuOTM1IDIgMzEuNTkyUzE1LjI2NyAyIDMxLjYzNCAyQzQ4IDIgNjEuMjY3IDE1LjI0OSA2MS4yNjcgMzEuNTkyeiIvPjxnIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIuNSI+PHBhdGggZmlsbD0iIzJkNGMwMCIgZD0iTTEyLjY4IDEwLjQzOWEuNzc4Ljc3OCAwIDAgMSAuMjE3LS4xNDRjLjM5Mi0uMTc0Ljk0Ni4yNDIgMS40MDkuNCAxLjI4Ni40MzkgMi41NiAxLjA2NyAzLjgxOCAxLjU4NSAxLjMwNi41MzggMi42ODIgMS4yMjcgNC4wMjYgMS42NDggMS4zNDMuNDIxIDIuODQzLjYzMyA0LjIxLjkzMiAyLjgwOS42MTUgNS42MiAxLjIxNCA4LjQzMyAxLjc3Ny4xMTMuMDIzIDIuODk0LjU3OSAyLjk1Mi41OTYgMi4yODguNjkzIDQuNjEzIDEuOTE0IDYuODI4IDIuODM2IDIuMjMuOTI3IDQuNDU0IDEuODY2IDYuNjc3IDIuODA5LjEwMy4wNDMgMi43NDggMS4xNjMgMi43OTkgMS4xOTEuMDUuMDI4IDIuNDA1IDEuNjE3IDIuNDk3IDEuNjc5LjgwNy41NDQgMS42MiAxLjA4MiAyLjQyMSAxLjYzMy40NjIuMzE3IDEuMDIzLjU1NyAxLjM3Ni45NjEuMjAzLjIzMyAxLjE1NCAyLjUzOCAxLjI1NiAyLjc3Ny0uODkyIDIuMzU0LTEuMDEgNC45ODQtMi4wMTIgNy4zMTctLjQ2NCAxLjA4Mi0xLjI0IDIuMDQyLTEuNzY3IDMuMDk2LS41MSAxLjAyMy0uOTA0IDIuMTE2LTEuMzUzIDMuMTY1LS42MjIgMS40NTUtMS4zNzIgMi44NDUtMi4wOTggNC4yNTItLjA1OS4xMTMtMS4wOTQgMi4xMjYtMS4xMzggMi4xOC0uMDQ1LjA1Mi0xLjkwNSAxLjUxNS0yLjAxIDEuNTk3LTEuNjQzIDEuMjg4LTQuMTc1IDIuODI5LTYuNjk1IDIuODA0LS41MDYtLjAwNS0xLjAyMS0uMjIzLTEuNTM0LS4yOTQtLjg2Mi0uMTItMS43MTYtLjAzNS0yLjU3OS0uMTctLjE4NS0uMDI5LTIuNjQ3LS42NjMtMi44OS0uNzEyLTEuNDMzLS4yOTQtMi45MTctLjM1Ny00LjM0My0uNzA5LTMuMjM3LS44LTYuNDE2LTIuMzExLTkuNDk2LTMuNTkzLTMuMjItMS4zNTItNi4yNjQtMi44MDYtOS4zMDItNC41MS0uMTA0LS4wNi0yLjU5NS0xLjQ1NS0yLjY0NS0xLjQ5MS0uMDU0LS4wMzgtMi4xMy0xLjg3NC0yLjIyMi0xLjk1NC0xLjA0NC0uOTE1LTIuNDU4LTEuODY0LTMuMDYtMy4wNDctLjUyNS0xLjAzMS0uMDM4LTEuMjkyLjA5OC0yLjIyLjI4OC0xLjk3LjM0Mi0zLjk4Ljc1My01LjkzLjg4NS00LjE5MiAyLjA3Mi04LjI5NiAyLjk1Ni0xMi40ODMuNTQ4LTIuNTk3LjY4NS01LjIxMiAxLjcwMi03LjY1NyAwIDAgLjE4My0uNDQuNzE2LS4zMjJ6Ii8+PHBhdGggZmlsbD0iIzVhOTcwMCIgZD0iTTEzLjYwMyAxMy40OTljLjAxLS4wMS4wMi0uMDIuMDMyLS4wMjcuMDU3LS4wMzMuMTMuMDI4LjE5Mi4wNDkuMTc1LjA1Ni4zNDUuMTQ0LjUxNS4yMTMuMTc1LjA3Mi4zNi4xNjkuNTQyLjIyMS4xODIuMDUzLjM5LjA3LjU3Ny4xMDIuMzg1LjA2Ni43Ny4xMyAxLjE1Ni4xODhsLjQwNi4wNjJjLjMxLjA4NS42Mi4yNTcuOTE5LjM4MS4zLjEyNS42LjI1Mi44OTguMzhsLjM3Ny4xNi4zMjguMjQ2Yy4xMDcuMDc5LjIxNC4xNTcuMzE5LjIzOC4wNi4wNDYuMTM2LjA3OS4xOC4xNC4wMjYuMDM2LjEzLjQwMy4xNDIuNDQtLjE1NC4zOTgtLjIwMi44My0uMzcgMS4yMjUtLjA3OS4xODMtLjE5OS4zNS0uMjg1LjUzLS4wODQuMTczLS4xNTIuMzU3LS4yMjguNTM1LS4xMDUuMjQ2LS4yMjYuNDgzLS4zNDUuNzIzLS4wMS4wMTktLjE3OS4zNjItLjE4Ni4zNzEtLjAwNi4wMS0uMjg0LjI3Mi0uMy4yODctLjI0NS4yMy0uNjE4LjUxNC0uOTcuNTQxLS4wNy4wMDUtLjE0LS4wMjQtLjIxLS4wMy0uMTItLjAwOS0uMjQuMDE2LS4zNTguMDA0LS4wMjYtLjAwMi0uMzYyLS4wNzYtLjM5Ni0uMDgxLS4xOTYtLjAzMS0uNDAzLS4wMjMtLjU5OC0uMDY0LS40NDItLjA5MS0uODY4LS4zLTEuMjgzLS40NzNhOS42NiA5LjY2IDAgMCAxLTEuMjQ0LS42MjZsLS4zNTItLjIxMi0uMjg2LS4yOTNjLS4xMzUtLjEzOC0uMzItLjI3Ni0uMzktLjQ2My0uMDYxLS4xNjIuMDEtLjIxMS4wNC0uMzY1LjA2NC0uMzI2LjA5Ny0uNjU3LjE3OC0uOTgyLjE3NS0uNjk4LjM5LTEuMzg1LjU2NS0yLjA4My4xMDgtLjQzMi4xNi0uODYzLjMzMS0xLjI3NiAwIDAgLjAzMS0uMDc0LjEwNC0uMDYxem04LjA0MSAzLjEwN2MuMDEtLjAxLjAyLS4wMTkuMDMyLS4wMjYuMDU3LS4wMzMuMTMuMDI4LjE5Mi4wNDguMTc1LjA1Ny4zNDUuMTQ0LjUxNC4yMTQuMTc2LjA3Mi4zNi4xNjguNTQzLjIyLjE4Mi4wNTMuMzkuMDcuNTc3LjEwMi4zODUuMDY3Ljc3LjEzIDEuMTU2LjE4OWwuNDA1LjA2MWMuMzEyLjA4Ni42MjIuMjU4LjkyLjM4Mi4zLjEyNS42LjI1Mi44OTguMzhsLjM3Ny4xNi4zMjguMjQ1LjMxOS4yMzhjLjA2LjA0Ny4xMzYuMDguMTguMTQxLjAyNi4wMzYuMTMuNDAyLjE0Mi40NC0uMTU0LjM5Ny0uMjAyLjgzLS4zNyAxLjIyNS0uMDc5LjE4My0uMTk5LjM1LS4yODUuNTI5LS4wODQuMTc0LS4xNTIuMzU4LS4yMjguNTM2LS4xMDUuMjQ2LS4yMjYuNDgzLS4zNDUuNzIyLS4wMS4wMi0uMTc5LjM2Mi0uMTg2LjM3Mi0uMDA3LjAwOS0uMjg0LjI3MS0uMy4yODYtLjI0NS4yMzEtLjYxOC41MTUtLjk3LjU0Mi0uMDcuMDA1LS4xNC0uMDI0LS4yMS0uMDMtLjEyLS4wMDktLjI0LjAxNS0uMzU5LjAwNC0uMDI1LS4wMDMtLjM2MS0uMDc3LS4zOTUtLjA4Mi0uMTk2LS4wMy0uNDAzLS4wMjMtLjU5OC0uMDYzLS40NDItLjA5Mi0uODY4LS4zLTEuMjgzLS40NzNhOS42NiA5LjY2IDAgMCAxLTEuMjQ0LS42MjZjLS4wMTQtLjAwOS0uMzQ1LS4yMDctLjM1Mi0uMjEzLS4wMDctLjAwNS0uMjc0LS4yOC0uMjg2LS4yOTMtLjEzNS0uMTM3LS4zMjEtLjI3Ni0uMzktLjQ2Mi0uMDYyLS4xNjMuMDEtLjIxMi4wNC0uMzY1LjA2NC0uMzI3LjA5Ni0uNjU3LjE3OC0uOTgyLjE3NS0uNjk4LjM5LTEuMzg2LjU2NS0yLjA4My4xMDgtLjQzMy4xNi0uODYzLjMzMS0xLjI3NiAwIDAgLjAzMS0uMDc1LjEwNC0uMDYyem04Ljg3NSAzLjI3NGEuMTMuMTMgMCAwIDEgLjAzMi0uMDI2Yy4wNTctLjAzNC4xMy4wMjguMTkyLjA0OC4xNzQuMDU2LjM0NS4xNDQuNTE0LjIxMy4xNzYuMDczLjM2LjE2OS41NDIuMjIyLjE4My4wNTIuMzkuMDY5LjU3Ny4xMDEuMzg1LjA2Ny43Ny4xMyAxLjE1Ny4xODhsLjQwNS4wNjJjLjMxMS4wODYuNjIxLjI1OC45Mi4zODIuMy4xMjUuNTk5LjI1MS44OTguMzc5LjAxNC4wMDYuMzcuMTU3LjM3Ni4xNjFsLjMyOS4yNDVjLjEwNi4wOC4yMTMuMTU4LjMxOC4yMzguMDYuMDQ3LjEzNi4wNzkuMTguMTQxLjAyNi4wMzYuMTMxLjQwMi4xNDIuNDQtLjE1My4zOTctLjIwMi44My0uMzcgMS4yMjQtLjA3OC4xODQtLjE5OC4zNS0uMjg1LjUzLS4wODQuMTc0LS4xNTIuMzU4LS4yMjcuNTM1LS4xMDUuMjQ2LS4yMjcuNDgzLS4zNDUuNzIzLS4wMS4wMi0uMTguMzYyLS4xODYuMzcxLS4wMDcuMDEtLjI4NS4yNzItLjMuMjg3LS4yNDYuMjMxLS42MTguNTE1LS45Ny41NDEtLjA3LjAwNi0uMTQtLjAyNC0uMjEtLjAzLS4xMi0uMDA4LS4yNC4wMTYtLjM1OS4wMDQtLjAyNi0uMDAyLS4zNjItLjA3Ni0uMzk1LS4wODEtLjE5Ny0uMDMtLjQwMy0uMDIzLS41OTgtLjA2My0uNDQzLS4wOTItLjg2OC0uMzAxLTEuMjgzLS40NzNhOS42NTggOS42NTggMCAwIDEtMS4yNDUtLjYyNyAyMy4xMTcgMjMuMTE3IDAgMCAxLS4zNTEtLjIxMmMtLjAwNy0uMDA1LS4yNzUtLjI4MS0uMjg3LS4yOTMtLjEzNC0uMTM3LS4zMi0uMjc2LS4zOS0uNDYyLS4wNi0uMTYzLjAxLS4yMTIuMDQtLjM2Ni4wNjUtLjMyNi4wOTctLjY1Ni4xNzgtLjk4MS4xNzUtLjY5OC4zOTEtMS4zODYuNTY2LTIuMDgzLjEwOC0uNDMzLjE1OS0uODYzLjMzLTEuMjc3IDAgMCAuMDMyLS4wNzQuMTA1LS4wNjF6bS0xNy44NjMgMS44MzZhLjEzLjEzIDAgMCAxIC4wMzItLjAyNmMuMDU3LS4wMzQuMTMuMDI4LjE5Mi4wNDguMTc1LjA1Ni4zNDUuMTQ0LjUxNC4yMTMuMTc2LjA3My4zNi4xNjkuNTQzLjIyMS4xODIuMDUzLjM5LjA3LjU3Ny4xMDIuMzg1LjA2Ny43Ny4xMyAxLjE1Ni4xODhsLjQwNi4wNjJjLjMxLjA4Ni42Mi4yNTguOTE5LjM4Mi4zLjEyNS42LjI1MS44OTguMzc5bC4zNzcuMTYxLjMyOC4yNDVjLjEwNy4wOC4yMTQuMTU4LjMxOS4yMzguMDYuMDQ2LjEzNi4wNzkuMTguMTQxLjAyNi4wMzYuMTMuNDAyLjE0Mi40NC0uMTU0LjM5Ny0uMjAyLjgzLS4zNyAxLjIyNC0uMDc5LjE4My0uMTk5LjM1LS4yODUuNTMtLjA4NC4xNzQtLjE1Mi4zNTgtLjIyOC41MzUtLjEwNS4yNDYtLjIyNi40ODMtLjM0NS43MjMtLjAxLjAyLS4xNzkuMzYyLS4xODYuMzcxLS4wMDYuMDEtLjI4NC4yNzItLjMuMjg3LS4yNDUuMjMxLS42MTguNTE1LS45Ny41NDEtLjA3LjAwNi0uMTQtLjAyNC0uMjEtLjAzLS4xMi0uMDA4LS4yNC4wMTYtLjM1OS4wMDQtLjAyNS0uMDAyLS4zNjEtLjA3Ni0uMzk1LS4wODEtLjE5Ni0uMDMtLjQwMy0uMDIzLS41OTgtLjA2My0uNDQyLS4wOTItLjg2OC0uMzAxLTEuMjgzLS40NzRhOS42NiA5LjY2IDAgMCAxLTEuMjQ0LS42MjZsLS4zNTItLjIxMmMtLjAwNy0uMDA1LS4yNzQtLjI4MS0uMjg2LS4yOTMtLjEzNS0uMTM3LS4zMjEtLjI3Ni0uMzktLjQ2Mi0uMDYxLS4xNjMuMDEtLjIxMi4wNC0uMzY2LjA2NC0uMzI2LjA5Ny0uNjU2LjE3OC0uOTgxLjE3NS0uNjk5LjM5LTEuMzg2LjU2NS0yLjA4My4xMDgtLjQzMy4xNi0uODYzLjMzMS0xLjI3NyAwIDAgLjAzMS0uMDc0LjEwNC0uMDYxem04LjA0MSAzLjEwN2MuMDEtLjAxLjAyLS4wMTkuMDMyLS4wMjYuMDU3LS4wMzMuMTMuMDI4LjE5Mi4wNDkuMTc1LjA1Ni4zNDUuMTQzLjUxNC4yMTMuMTc2LjA3Mi4zNi4xNjguNTQzLjIyMS4xODIuMDUzLjM5LjA3LjU3Ny4xMDEuMzg1LjA2Ny43Ny4xMyAxLjE1Ni4xODlsLjQwNS4wNjJjLjMxMi4wODUuNjIyLjI1Ny45Mi4zODEuMy4xMjUuNi4yNTIuODk4LjM4bC4zNzcuMTYuMzI4LjI0NWMuMTA2LjA4LjIxMy4xNTguMzE5LjIzOS4wNi4wNDYuMTM2LjA3OC4xOC4xNC4wMjYuMDM2LjEzLjQwMy4xNDIuNDQtLjE1NC4zOTctLjIwMi44My0uMzcgMS4yMjUtLjA3OS4xODMtLjE5OS4zNS0uMjg1LjUzLS4wODQuMTczLS4xNTIuMzU3LS4yMjguNTM1LS4xMDUuMjQ2LS4yMjYuNDgzLS4zNDUuNzIzLS4wMS4wMTktLjE3OS4zNjItLjE4Ni4zNy0uMDA3LjAxLS4yODQuMjczLS4zLjI4Ny0uMjQ1LjIzMi0uNjE4LjUxNS0uOTcuNTQyLS4wNy4wMDUtLjE0LS4wMjQtLjIxLS4wMy0uMTItLjAwOS0uMjQuMDE2LS4zNTkuMDA0LS4wMjUtLjAwMy0uMzYxLS4wNzYtLjM5NS0uMDgyLS4xOTYtLjAzLS40MDMtLjAyMi0uNTk4LS4wNjMtLjQ0Mi0uMDkxLS44NjgtLjMtMS4yODMtLjQ3M2E5LjY2IDkuNjYgMCAwIDEtMS4yNDQtLjYyNmwtLjM1Mi0uMjEyYTI3Ljg0IDI3Ljg0IDAgMCAxLS4yODYtLjI5NGMtLjEzNS0uMTM3LS4zMjEtLjI3NS0uMzktLjQ2Mi0uMDYyLS4xNjMuMDEtLjIxMS4wNC0uMzY1LjA2NC0uMzI3LjA5Ni0uNjU3LjE3OC0uOTgyLjE3NC0uNjk4LjM5LTEuMzg1LjU2NS0yLjA4My4xMDgtLjQzMi4xNi0uODYzLjMzMS0xLjI3NiAwIDAgLjAzMS0uMDc0LjEwNC0uMDYyem04Ljg3NSAzLjI3NGMuMDEtLjAxLjAyLS4wMTkuMDMyLS4wMjYuMDU3LS4wMzMuMTMuMDI4LjE5Mi4wNDguMTc0LjA1Ny4zNDQuMTQ0LjUxNC4yMTQuMTc2LjA3Mi4zNi4xNjguNTQyLjIyLjE4My4wNTMuMzkuMDcuNTc3LjEwMi4zODUuMDY3Ljc3LjEzIDEuMTU3LjE4OWwuNDA1LjA2MWMuMzExLjA4Ni42MjEuMjU4LjkyLjM4Mi4zLjEyNS41OTkuMjUyLjg5OC4zOGwuMzc2LjE2LjMyOS4yNDVjLjEwNi4wOC4yMTMuMTU4LjMxOC4yMzkuMDYuMDQ2LjEzNi4wNzguMTguMTQuMDI2LjAzNi4xMzEuNDAyLjE0Mi40NC0uMTUzLjM5Ny0uMjAyLjgzLS4zNyAxLjIyNS0uMDc4LjE4My0uMTk4LjM1LS4yODUuNTMtLjA4NC4xNzMtLjE1Mi4zNTctLjIyNy41MzUtLjEwNS4yNDYtLjIyNy40ODMtLjM0Ni43MjItLjAxLjAyLS4xNzguMzYyLS4xODUuMzcyLS4wMDcuMDA5LS4yODUuMjcxLS4zLjI4Ni0uMjQ2LjIzMi0uNjE4LjUxNS0uOTcuNTQyLS4wNy4wMDUtLjE0LS4wMjQtLjIxLS4wMy0uMTItLjAwOS0uMjQuMDE1LS4zNi4wMDQtLjAyNS0uMDAzLS4zNi0uMDc3LS4zOTQtLjA4Mi0uMTk3LS4wMy0uNDAzLS4wMjMtLjU5OC0uMDYzLS40NDMtLjA5MS0uODY5LS4zLTEuMjgzLS40NzNhOS42NTggOS42NTggMCAwIDEtMS4yNDUtLjYyNmMtLjAxNC0uMDA5LS4zNDUtLjIwNy0uMzUxLS4yMTJsLS4yODctLjI5NGMtLjEzNC0uMTM3LS4zMi0uMjc1LS4zOS0uNDYyLS4wNjEtLjE2My4wMS0uMjExLjA0LS4zNjUuMDY1LS4zMjcuMDk3LS42NTcuMTc4LS45ODIuMTc1LS42OTguMzktMS4zODUuNTY2LTIuMDgzLjEwOC0uNDMyLjE1OS0uODYzLjMzLTEuMjc2IDAgMCAuMDMyLS4wNzUuMTA1LS4wNjJ6TTExLjM5IDMwLjcwM2EuMDk4LjA5OCAwIDAgMSAuMDMxLS4wMjZjLjA1Ny0uMDM0LjEzLjAyOC4xOTIuMDQ4LjE3NS4wNTYuMzQ1LjE0NC41MTQuMjEzLjE3Ni4wNzMuMzYuMTY5LjU0My4yMjIuMTgyLjA1Mi4zOS4wNjkuNTc3LjEuMzg1LjA2OC43Ny4xMzEgMS4xNTYuMTlsLjQwNS4wNjFjLjMxMi4wODYuNjIxLjI1OC45Mi4zODIuMy4xMjUuNi4yNTEuODk4LjM3OWwuMzc3LjE2MS4zMjguMjQ1LjMxOS4yMzhjLjA2LjA0Ny4xMzYuMDc5LjE4LjE0MS4wMjYuMDM2LjEzLjQwMi4xNDIuNDQtLjE1NC4zOTctLjIwMi44My0uMzcgMS4yMjQtLjA3OS4xODMtLjE5OS4zNS0uMjg1LjUzLS4wODQuMTc0LS4xNTMuMzU4LS4yMjguNTM1LS4xMDUuMjQ2LS4yMjYuNDgzLS4zNDUuNzIzLS4wMS4wMi0uMTc5LjM2Mi0uMTg2LjM3MS0uMDA3LjAxLS4yODQuMjcyLS4zLjI4Ny0uMjQ1LjIzMS0uNjE4LjUxNS0uOTcuNTQxLS4wNy4wMDYtLjE0LS4wMjQtLjIxLS4wMy0uMTItLjAwOC0uMjQuMDE2LS4zNTkuMDA0LS4wMjUtLjAwMi0uMzYyLS4wNzYtLjM5NS0uMDgxLS4xOTYtLjAzLS40MDMtLjAyMy0uNTk4LS4wNjMtLjQ0Mi0uMDkyLS44NjgtLjMwMS0xLjI4My0uNDc0YTkuNjYgOS42NiAwIDAgMS0xLjI0NC0uNjI2bC0uMzUyLS4yMTJhMjcuNTYyIDI3LjU2MiAwIDAgMS0uMjg2LS4yOTNjLS4xMzUtLjEzNy0uMzIxLS4yNzYtLjM5LS40NjItLjA2Mi0uMTYzLjAxLS4yMTIuMDQtLjM2Ni4wNjQtLjMyNi4wOTYtLjY1Ni4xNzgtLjk4MS4xNzQtLjY5OS4zOS0xLjM4Ni41NjUtMi4wODMuMTA4LS40MzMuMTYtLjg2My4zMzEtMS4yNzcgMCAwIC4wMzEtLjA3NC4xMDQtLjA2MXptOC4wNCAzLjEwN2MuMDEtLjAxLjAyLS4wMTkuMDMyLS4wMjYuMDU3LS4wMzMuMTMuMDI4LjE5Mi4wNDkuMTc0LjA1Ni4zNDUuMTQzLjUxNC4yMTMuMTc2LjA3Mi4zNi4xNjguNTQzLjIyMS4xODIuMDUzLjM4OS4wNy41NzYuMTAyLjM4NS4wNjYuNzcuMTMgMS4xNTcuMTg4bC40MDUuMDYyYy4zMTEuMDg1LjYyMS4yNTcuOTIuMzgxLjMuMTI1LjU5OS4yNTIuODk4LjM4bC4zNzcuMTYuMzI4LjI0NWMuMTA2LjA4LjIxMy4xNTguMzE4LjIzOS4wNjEuMDQ2LjEzNi4wNzguMTguMTQuMDI2LjAzNi4xMzEuNDAzLjE0Mi40NC0uMTUzLjM5Ny0uMjAyLjgzLS4zNyAxLjIyNS0uMDc4LjE4My0uMTk4LjM1LS4yODUuNTMtLjA4My4xNzMtLjE1Mi4zNTctLjIyNy41MzUtLjEwNS4yNDYtLjIyNy40ODMtLjM0NS43MjMtLjAxLjAxOS0uMTguMzYyLS4xODYuMzctLjAwNy4wMS0uMjg1LjI3My0uMy4yODctLjI0Ni4yMzItLjYxOC41MTUtLjk3LjU0Mi0uMDcuMDA1LS4xNC0uMDI0LS4yMS0uMDMtLjEyLS4wMDktLjI0LjAxNi0uMzU5LjAwNC0uMDI1LS4wMDItLjM2Mi0uMDc2LS4zOTUtLjA4Mi0uMTk3LS4wMy0uNDAzLS4wMjItLjU5OC0uMDYzLS40NDMtLjA5MS0uODY4LS4zLTEuMjgzLS40NzNhOS42NiA5LjY2IDAgMCAxLTEuMjQ1LS42MjZsLS4zNTEtLjIxMi0uMjg3LS4yOTRjLS4xMzQtLjEzNy0uMzItLjI3NS0uMzktLjQ2Mi0uMDYtLjE2My4wMS0uMjExLjA0LS4zNjUuMDY1LS4zMjcuMDk3LS42NTcuMTc4LS45ODIuMTc1LS42OTguMzkxLTEuMzg1LjU2Ni0yLjA4My4xMDgtLjQzMi4xNi0uODYzLjMzMS0xLjI3NiAwIDAgLjAzMS0uMDc0LjEwNC0uMDYyem04Ljg3NSAzLjI3NGEuMTM1LjEzNSAwIDAgMSAuMDMyLS4wMjZjLjA1Ny0uMDMzLjEyOS4wMjguMTkyLjA0OC4xNzQuMDU3LjM0NC4xNDQuNTE0LjIxNC4xNzYuMDcyLjM2LjE2OC41NDIuMjIuMTgzLjA1My4zOS4wNy41NzcuMTAyLjM4NS4wNjcuNzcuMTMgMS4xNTcuMTg5bC40MDUuMDYxYy4zMTEuMDg2LjYyLjI1OC45Mi4zODIuMy4xMjUuNTk5LjI1Mi44OTguMzhsLjM3Ni4xNi4zMjkuMjQ1Yy4xMDYuMDguMjEzLjE1OC4zMTguMjM4LjA2LjA0Ny4xMzYuMDguMTguMTQxLjAyNi4wMzYuMTMuNDAyLjE0Mi40NC0uMTUzLjM5Ny0uMjAyLjgzLS4zNyAxLjIyNS0uMDc4LjE4My0uMTk4LjM1LS4yODUuNTMtLjA4NC4xNzMtLjE1Mi4zNTctLjIyOC41MzUtLjEwNC4yNDYtLjIyNi40ODMtLjM0NS43MjJsLS4xODUuMzcyYy0uMDA3LjAwOS0uMjg1LjI3MS0uMy4yODYtLjI0Ni4yMzItLjYxOC41MTUtLjk3LjU0Mi0uMDcxLjAwNS0uMTQtLjAyNC0uMjExLS4wMy0uMTE5LS4wMDktLjI0LjAxNS0uMzU4LjAwNC0uMDI2LS4wMDMtLjM2Mi0uMDc3LS4zOTUtLjA4Mi0uMTk3LS4wMy0uNDA0LS4wMjMtLjU5OC0uMDYzLS40NDMtLjA5MS0uODY5LS4zLTEuMjgzLS40NzNhOS42NTggOS42NTggMCAwIDEtMS4yNDUtLjYyNmMtLjAxNC0uMDA5LS4zNDUtLjIwNy0uMzUxLS4yMTJsLS4yODctLjI5NGMtLjEzNS0uMTM3LS4zMi0uMjc1LS4zOS0uNDYyLS4wNjEtLjE2My4wMS0uMjExLjA0LS4zNjUuMDY1LS4zMjcuMDk3LS42NTcuMTc4LS45ODIuMTc1LS42OTguMzktMS4zODUuNTY1LTIuMDgzLjEwOS0uNDMyLjE2LS44NjMuMzMyLTEuMjc2IDAgMCAuMDMtLjA3NS4xMDQtLjA2MnptMTAuOTk5LTE0LjE0OGMuMDA5LS4wMS4wMi0uMDIuMDMyLS4wMjYuMDU3LS4wMzQuMTI5LjAyOC4xOTIuMDQ4LjE3NC4wNTYuMzQ0LjE0NC41MTQuMjEzLjE3Ni4wNzMuMzYuMTY5LjU0Mi4yMjEuMTgzLjA1My4zOS4wNy41NzcuMTAyLjM4NS4wNjYuNzcuMTMgMS4xNTcuMTg4bC40MDUuMDYyYy4zMTEuMDg2LjYyLjI1OC45Mi4zODIuMy4xMjUuNTk5LjI1MS44OTguMzc5bC4zNzYuMTYuMzI5LjI0NmMuMTA2LjA4LjIxMy4xNTcuMzE4LjIzOC4wNi4wNDYuMTM2LjA3OS4xOC4xNC4wMjYuMDM2LjEzLjQwMy4xNDIuNDQtLjE1My4zOTgtLjIwMi44My0uMzcgMS4yMjUtLjA3OC4xODMtLjE5OS4zNS0uMjg1LjUzLS4wODQuMTczLS4xNTIuMzU3LS4yMjguNTM1LS4xMDQuMjQ2LS4yMjYuNDgzLS4zNDUuNzIzLS4wMS4wMi0uMTc5LjM2Mi0uMTg1LjM3MS0uMDA3LjAxLS4yODUuMjcyLS4zLjI4Ny0uMjQ2LjIzMS0uNjE5LjUxNS0uOTcuNTQxLS4wNzEuMDA2LS4xNC0uMDI0LS4yMTEtLjAzLS4xMi0uMDA4LS4yNC4wMTYtLjM1OC4wMDQtLjAyNi0uMDAyLS4zNjItLjA3Ni0uMzk1LS4wODEtLjE5Ny0uMDMtLjQwNC0uMDIzLS41OTgtLjA2My0uNDQzLS4wOTItLjg2OS0uMzAxLTEuMjgzLS40NzRhOS42NiA5LjY2IDAgMCAxLTEuMjQ1LS42MjYgMzUuNzM1IDM1LjczNSAwIDAgMS0uMzUxLS4yMTJjLS4wMDgtLjAwNi0uMjc1LS4yODEtLjI4Ny0uMjkzLS4xMzUtLjEzOC0uMzItLjI3Ni0uMzktLjQ2Mi0uMDYxLS4xNjMuMDEtLjIxMi4wNC0uMzY2LjA2NS0uMzI2LjA5Ny0uNjU3LjE3OC0uOTgyLjE3NS0uNjk4LjM5LTEuMzg1LjU2NS0yLjA4Mi4xMDktLjQzMy4xNi0uODYzLjMzMi0xLjI3NyAwIDAgLjAzLS4wNzQuMTA0LS4wNjF6bS0uOTQ3IDguMjE3YS4xMzUuMTM1IDAgMCAxIC4wMzItLjAyNmMuMDU3LS4wMzMuMTI5LjAyOC4xOTIuMDQ4LjE3NC4wNTcuMzQ0LjE0NC41MTQuMjE0LjE3Ni4wNzIuMzYuMTY4LjU0Mi4yMi4xODMuMDUzLjM5LjA3LjU3Ny4xMDIuMzg1LjA2Ny43Ny4xMyAxLjE1Ny4xODlsLjQwNS4wNjFjLjMxLjA4Ni42Mi4yNTguOTIuMzgyYTEwMC41MzQgMTAwLjUzNCAwIDAgMSAxLjI3NC41NGwuMzI5LjI0NWMuMTA2LjA4LjIxMy4xNTguMzE4LjIzOC4wNi4wNDcuMTM2LjA4LjE4LjE0MS4wMjYuMDM2LjEzLjQwMi4xNDIuNDQtLjE1My4zOTctLjIwMi44My0uMzcgMS4yMjUtLjA3OS4xODMtLjE5OS4zNS0uMjg1LjUyOS0uMDg0LjE3NC0uMTUyLjM1OC0uMjI4LjUzNS0uMTA0LjI0Ni0uMjI2LjQ4NC0uMzQ1LjcyMy0uMDEuMDItLjE3OS4zNjItLjE4NS4zNzEtLjAwNy4wMS0uMjg1LjI3Mi0uMy4yODctLjI0Ni4yMzEtLjYxOS41MTUtLjk3LjU0Mi0uMDcxLjAwNS0uMTQtLjAyNS0uMjExLS4wMy0uMTItLjAxLS4yNC4wMTUtLjM1OC4wMDQtLjAyNi0uMDAzLS4zNjItLjA3Ny0uMzk1LS4wODItLjE5Ny0uMDMtLjQwNC0uMDIzLS41OTktLjA2My0uNDQyLS4wOTItLjg2OC0uMy0xLjI4My0uNDczYTkuNjYgOS42NiAwIDAgMS0xLjI0NC0uNjI3IDI5LjY0NiAyOS42NDYgMCAwIDEtLjM1Mi0uMjEyYy0uMDA3LS4wMDUtLjI3NC0uMjgtLjI4Ni0uMjkzLS4xMzUtLjEzNy0uMzItLjI3Ni0uMzktLjQ2Mi0uMDYxLS4xNjMuMDEtLjIxMi4wNC0uMzY1LjA2NS0uMzI3LjA5Ny0uNjU3LjE3OC0uOTgyLjE3NS0uNjk4LjM5LTEuMzg2LjU2NS0yLjA4My4xMDktLjQzMy4xNi0uODYzLjMzMi0xLjI3NyAwIDAgLjAzLS4wNzQuMTA0LS4wNjF6TTM3LjA5IDQwLjE0YS4xNTMuMTUzIDAgMCAxIC4wMzEtLjAyNmMuMDU3LS4wMzMuMTMuMDI4LjE5Mi4wNDguMTc1LjA1Ny4zNDUuMTQ0LjUxNC4yMTQuMTc2LjA3Mi4zNi4xNjguNTQzLjIyLjE4Mi4wNTMuMzkuMDcuNTc3LjEwMi4zODUuMDY3Ljc3LjEzIDEuMTU2LjE4OWwuNDA2LjA2MWMuMzEuMDg2LjYyLjI1OC45MTkuMzgyLjMuMTI1LjYuMjUyLjg5OC4zOGwuMzc3LjE2LjMyOC4yNDVjLjEwNy4wOC4yMTQuMTU4LjMxOS4yMzguMDYuMDQ3LjEzNi4wOC4xOC4xNDEuMDI2LjAzNi4xMy40MDIuMTQyLjQ0LS4xNTQuMzk3LS4yMDIuODMtLjM3IDEuMjI1LS4wNzkuMTgzLS4xOTkuMzUtLjI4NS41MjktLjA4NC4xNzQtLjE1Mi4zNTgtLjIyOC41MzUtLjEwNS4yNDctLjIyNi40ODQtLjM0NS43MjMtLjAxLjAyLS4xNzkuMzYyLS4xODYuMzcyLS4wMDYuMDA5LS4yODQuMjcxLS4zLjI4Ni0uMjQ1LjIzMS0uNjE4LjUxNS0uOTcuNTQyLS4wNy4wMDUtLjE0LS4wMjQtLjIxLS4wMy0uMTItLjAxLS4yNC4wMTUtLjM1OS4wMDQtLjAyNS0uMDAzLS4zNjEtLjA3Ny0uMzk1LS4wODItLjE5Ni0uMDMtLjQwMy0uMDIzLS41OTgtLjA2My0uNDQyLS4wOTItLjg2OC0uMy0xLjI4My0uNDczYTkuNjYgOS42NiAwIDAgMS0xLjI0NC0uNjI2Yy0uMDE0LS4wMDktLjM0NS0uMjA3LS4zNTItLjIxMy0uMDA3LS4wMDUtLjI3NC0uMjgtLjI4Ni0uMjkzLS4xMzUtLjEzNy0uMzItLjI3Ni0uMzktLjQ2Mi0uMDYxLS4xNjMuMDEtLjIxMi4wNC0uMzY1LjA2NC0uMzI3LjA5Ny0uNjU3LjE3OC0uOTgyLjE3NS0uNjk4LjM5LTEuMzg2LjU2NS0yLjA4My4xMDgtLjQzMy4xNi0uODYzLjMzMS0xLjI3NyAwIDAgLjAzMS0uMDc0LjEwNC0uMDZ6bTExLjI2OC0xMy40OTRjLjAxLS4wMS4wMi0uMDIuMDMyLS4wMjcuMDU3LS4wMzMuMTMuMDI4LjE5Mi4wNDkuMTc0LjA1Ni4zNDUuMTQzLjUxNC4yMTMuMTc2LjA3Mi4zNi4xNjkuNTQzLjIyMS4xODIuMDUzLjM4OS4wNy41NzYuMTAyLjM4NS4wNjYuNzcuMTMgMS4xNTcuMTg4bC40MDUuMDYyYy4zMTEuMDg1LjYyMS4yNTcuOTIuMzgxLjMuMTI1LjU5OS4yNTIuODk4LjM4bC4zNzcuMTYuMzI4LjI0NmMuMTA2LjA3OS4yMTMuMTU3LjMxOC4yMzguMDYxLjA0Ni4xMzYuMDc5LjE4LjE0LjAyNi4wMzYuMTMxLjQwMy4xNDIuNDQtLjE1My4zOTgtLjIwMi44My0uMzcgMS4yMjUtLjA3OC4xODMtLjE5OC4zNS0uMjg1LjUzLS4wODMuMTczLS4xNTIuMzU3LS4yMjcuNTM1LS4xMDUuMjQ2LS4yMjcuNDgzLS4zNDUuNzIzLS4wMS4wMTktLjE4LjM2Mi0uMTg2LjM3MS0uMDA3LjAxLS4yODUuMjcyLS4zLjI4Ny0uMjQ2LjIzLS42MTguNTE0LS45Ny41NDEtLjA3LjAwNS0uMTQtLjAyNC0uMjEtLjAzLS4xMi0uMDA5LS4yNC4wMTYtLjM1OS4wMDQtLjAyNS0uMDAyLS4zNjItLjA3Ni0uMzk1LS4wODEtLjE5Ny0uMDMxLS40MDMtLjAyMy0uNTk4LS4wNjQtLjQ0My0uMDkxLS44NjgtLjMtMS4yODMtLjQ3M2E5LjY2IDkuNjYgMCAwIDEtMS4yNDUtLjYyNmwtLjM1MS0uMjEyLS4yODctLjI5M2MtLjEzNC0uMTM4LS4zMi0uMjc2LS4zOS0uNDYzLS4wNi0uMTYyLjAxLS4yMTEuMDQtLjM2NS4wNjUtLjMyNi4wOTctLjY1Ny4xNzgtLjk4Mi4xNzUtLjY5OC4zOTEtMS4zODUuNTY2LTIuMDgzLjEwOC0uNDMyLjE2LS44NjMuMzMxLTEuMjc2IDAgMCAuMDMxLS4wNzQuMTA0LS4wNjF6bS0uOTQ3IDguMjE3YS4xMy4xMyAwIDAgMSAuMDMyLS4wMjZjLjA1Ny0uMDM0LjEzLjAyOC4xOTIuMDQ4LjE3NC4wNTYuMzQ1LjE0NC41MTQuMjEzLjE3Ni4wNzMuMzYuMTY5LjU0My4yMjEuMTgyLjA1My4zODkuMDcuNTc2LjEwMi4zODUuMDY2Ljc3LjEzIDEuMTU3LjE4OGwuNDA1LjA2MmMuMzExLjA4Ni42MjEuMjU4LjkyLjM4Mi4zLjEyNS41OTkuMjUxLjg5OC4zNzlsLjM3Ny4xNjEuMzI4LjI0NWMuMTA2LjA4LjIxMy4xNTguMzE4LjIzOC4wNjEuMDQ2LjEzNi4wNzkuMTguMTQuMDI2LjAzNy4xMzEuNDAzLjE0Mi40NDEtLjE1My4zOTctLjIwMi44My0uMzcgMS4yMjQtLjA3OC4xODMtLjE5OC4zNS0uMjg1LjUzLS4wODMuMTc0LS4xNTIuMzU4LS4yMjcuNTM1LS4xMDUuMjQ2LS4yMjcuNDgzLS4zNDUuNzIzLS4wMS4wMi0uMTguMzYyLS4xODYuMzcxLS4wMDcuMDEtLjI4NS4yNzItLjMuMjg3LS4yNDYuMjMxLS42MTguNTE1LS45Ny41NDEtLjA3LjAwNi0uMTQtLjAyNC0uMjEtLjAzLS4xMi0uMDA4LS4yNC4wMTYtLjM1OS4wMDQtLjAyNS0uMDAyLS4zNjItLjA3Ni0uMzk1LS4wODEtLjE5Ny0uMDMtLjQwMy0uMDIzLS41OTgtLjA2My0uNDQzLS4wOTItLjg2OC0uMzAxLTEuMjgzLS40NzRhOS42NiA5LjY2IDAgMCAxLTEuMjQ1LS42MjZsLS4zNTEtLjIxMmMtLjAwNy0uMDA1LS4yNzUtLjI4MS0uMjg3LS4yOTMtLjEzNC0uMTM3LS4zMi0uMjc2LS4zOS0uNDYyLS4wNi0uMTYzLjAxLS4yMTIuMDQtLjM2Ni4wNjUtLjMyNi4wOTctLjY1Ni4xNzgtLjk4MS4xNzUtLjY5OS4zOTEtMS4zODYuNTY2LTIuMDgzLjEwOC0uNDMzLjE2LS44NjMuMzMxLTEuMjc3IDAgMCAuMDMxLS4wNzQuMTA0LS4wNjF6bS0xLjI2NyA4Ljk4N2MuMDA5LS4wMS4wMi0uMDIuMDMyLS4wMjYuMDU3LS4wMzQuMTI5LjAyOC4xOTIuMDQ4LjE3NC4wNTYuMzQ0LjE0NC41MTQuMjEzLjE3Ni4wNzMuMzYuMTY5LjU0Mi4yMjIuMTgzLjA1Mi4zOS4wNjkuNTc3LjEuMzg1LjA2Ny43Ny4xMzEgMS4xNTcuMTlsLjQwNS4wNjFjLjMxMS4wODYuNjIxLjI1OC45Mi4zODIuMy4xMjUuNTk5LjI1MS44OTguMzc5LjAxNC4wMDYuMzcuMTU3LjM3Ni4xNjFsLjMyOS4yNDVjLjEwNi4wOC4yMTMuMTU4LjMxOC4yMzguMDYuMDQ3LjEzNi4wNzkuMTguMTQxLjAyNi4wMzYuMTMxLjQwMi4xNDIuNDQtLjE1My4zOTctLjIwMi44My0uMzcgMS4yMjQtLjA3OC4xODQtLjE5OC4zNS0uMjg1LjUzLS4wODQuMTc0LS4xNTIuMzU4LS4yMjguNTM1LS4xMDQuMjQ2LS4yMjYuNDgzLS4zNDUuNzIzLS4wMS4wMi0uMTc4LjM2Mi0uMTg1LjM3MS0uMDA3LjAxLS4yODUuMjcyLS4zLjI4Ny0uMjQ2LjIzMS0uNjE4LjUxNS0uOTcuNTQxLS4wNy4wMDYtLjE0LS4wMjQtLjIxLS4wMy0uMTItLjAwOC0uMjQuMDE2LS4zNi4wMDQtLjAyNS0uMDAyLS4zNi0uMDc2LS4zOTQtLjA4MS0uMTk3LS4wMy0uNDAzLS4wMjMtLjU5OC0uMDYzLS40NDMtLjA5Mi0uODY5LS4zMDEtMS4yODMtLjQ3M2E5LjY2IDkuNjYgMCAwIDEtMS4yNDUtLjYyNyAzNS43MzUgMzUuNzM1IDAgMCAxLS4zNTEtLjIxMmMtLjAwNy0uMDA1LS4yNzUtLjI4MS0uMjg3LS4yOTMtLjEzNS0uMTM3LS4zMi0uMjc2LS4zOS0uNDYyLS4wNjEtLjE2My4wMS0uMjEyLjA0LS4zNjYuMDY1LS4zMjYuMDk3LS42NTYuMTc4LS45ODEuMTc1LS42OTguMzktMS4zODYuNTY1LTIuMDgzLjEwOS0uNDMzLjE2LS44NjMuMzMyLTEuMjc3IDAgMCAuMDMtLjA3NC4xMDQtLjA2MXptLTMxLjYwMy0zLjk4YS4zOTMuMzkzIDAgMCAxIC4wODQuMDA3Yy4xNjQuMDI4LjQ5Ny4xODkuNzQ3LjI4OS42OTQuMjc3IDEuNDEuNTg2IDIuMTAyLjg3NC43MTguMjk4IDEuNDk0LjYzNCAyLjIxMy45MTcuNzE5LjI4MyAxLjQ4MS41NTEgMi4xOTMuODE1IDEuNDYyLjU0MyAyLjkyMiAxLjA4MyA0LjM3OCAxLjYxN2wxLjUzLjU2YzEuMjIuNDc4IDIuNTM4IDEuMDU3IDMuNzU4IDEuNTY0IDEuMjI4LjUxIDIuNDU1IDEuMDIzIDMuNjgyIDEuNTM1bDEuNTQ1LjY0NiAxLjQ3My42ODljLjQ3Ny4yMjMuOTU1LjQ0NSAxLjQzLjY2OS4yNzMuMTI4LjU4My4yNTguODE3LjM4Ni4xMzQuMDczLjk1LjYzOSAxLjAzNy42OTgtLjA3NC4yOTIuMjcyLjc1My4xNDIgMS4wMjUtLjA2LjEyNi0uMjkxLjE4Mi0uMzg2LjI5My0uMDkyLjEwOC0uMTE2LjI0Ny0uMTc0LjM3LS4wOC4xNy0uMjMxLjMwOC0uMzcuNDUzYTMuNTUgMy41NSAwIDAgMS0uMjIuMjIyYy0uMDEzLjAwMy0uNjk1LS4wMTUtLjczMy0uMDE2LS42MDMtLjAxOC0xLjYtLjEyNS0yLjgzLS41MTYtLjI0OC0uMDc4LS41MzItLjE5Ny0uNzkyLS4yODgtLjQzOS0uMTU1LS44NDItLjI3LTEuMjgyLS40MjctLjA5NS0uMDMzLTEuMzktLjUyNi0xLjUxNi0uNTcyLS43NDMtLjI3NC0xLjQ3NS0uNTEzLTIuMjI0LS43OTUtMS42OTgtLjY0Mi0zLjQ3OC0xLjQwNS01LjE3NC0yLjExLTEuNzc1LS43NC0zLjQ4LTEuNDcyLTUuMjItMi4yNDhsLTEuNTE3LS42NzdjLS4wMzItLjAxNS0xLjMyNC0uNjY4LTEuMzgxLS42OTctLjY0OS0uMzI2LTEuNDgzLS43MTYtMS45NTctMS4wMjQtLjQxNC0uMjY4LS4yMTctLjI0MS0uMjkzLS4zOS0uMTYyLS4zMTQtLjQ0My0uNjcyLS41NDItLjk2NS0uMjEyLS42MjgtLjI2My0xLjE5NC0uNDc0LTEuODIxLS4xMzEtLjM5LS40NjUtLjg0NS0uMzQ1LTEuMTM0IDAgMCAuMDIyLS4wNTIuMy4wNXoiLz48L2c+PC9nPjwvc3ZnPg=="; + const blockicon = + "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2My43NjUiIGhlaWdodD0iNjMuNjc2Ij48ZyBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGRhdGEtcGFwZXItZGF0YT0ieyZxdW90O2lzUGFpbnRpbmdMYXllciZxdW90Ozp0cnVlfSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTYzLjc2NSAzMS44MzhjMCAxNy41ODQtMTQuMjc0IDMxLjgzOC0zMS44ODMgMzEuODM4QzE0LjI3NCA2My42NzYgMCA0OS40MjIgMCAzMS44MzggMCAxNC4yNTQgMTQuMjc0IDAgMzEuODgyIDBjMTcuNjA5IDAgMzEuODgzIDE0LjI1NCAzMS44ODMgMzEuODM4eiIvPjxnIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIuNSI+PHBhdGggZmlsbD0iIzJkNGMwMCIgZD0iTTEwLjY1NCA5LjM4NWEuNzc4Ljc3OCAwIDAgMSAuMjE3LS4xNDRjLjM5My0uMTc0Ljk0Ni4yNDIgMS40MS40IDEuMjg2LjQzOSAyLjU2IDEuMDY3IDMuODE4IDEuNTg1IDEuMzA1LjUzOCAyLjY4MiAxLjIyNyA0LjAyNSAxLjY0OCAxLjM0NC40MjEgMi44NDQuNjMzIDQuMjEuOTMyIDIuODEuNjE1IDUuNjIgMS4yMTQgOC40MzQgMS43NzguMTEyLjAyMiAyLjg5NC41NzggMi45NTIuNTk1IDIuMjg4LjY5MyA0LjYxMyAxLjkxNCA2LjgyOCAyLjgzNiAyLjIzLjkyNyA0LjQ1MyAxLjg2NiA2LjY3NiAyLjgwOS4xMDMuMDQzIDIuNzQ4IDEuMTY0IDIuOCAxLjE5MS4wNS4wMjggMi40MDUgMS42MTcgMi40OTYgMS42NzkuODA4LjU0NCAxLjYyIDEuMDgyIDIuNDIyIDEuNjMzLjQ2MS4zMTcgMS4wMjIuNTU3IDEuMzc2Ljk2MS4yMDMuMjMzIDEuMTU0IDIuNTM5IDEuMjU1IDIuNzc3LS44OTIgMi4zNTQtMS4wMSA0Ljk4NC0yLjAxMSA3LjMxNy0uNDY1IDEuMDgyLTEuMjQgMi4wNDItMS43NjcgMy4wOTYtLjUxIDEuMDIzLS45MDQgMi4xMTYtMS4zNTMgMy4xNjYtLjYyMiAxLjQ1NC0xLjM3MiAyLjg0NC0yLjA5OCA0LjI1LS4wNTkuMTE0LTEuMDk1IDIuMTI3LTEuMTM5IDIuMTgtLjA0NC4wNTMtMS45MDUgMS41MTYtMi4wMSAxLjU5OS0xLjY0MyAxLjI4Ny00LjE3NCAyLjgyOC02LjY5NCAyLjgwNC0uNTA3LS4wMDUtMS4wMjItLjIyNC0xLjUzNC0uMjk1LS44NjMtLjEyLTEuNzE3LS4wMzUtMi41OC0uMTctLjE4NC0uMDI5LTIuNjQ3LS42NjMtMi44OS0uNzEyLTEuNDMyLS4yOTQtMi45MTYtLjM1Ny00LjM0Mi0uNzA5LTMuMjM3LS44LTYuNDE2LTIuMzExLTkuNDk2LTMuNTkzLTMuMjItMS4zNTItNi4yNjUtMi44MDYtOS4zMDItNC41MS0uMTA0LS4wNTktMi41OTUtMS40NTUtMi42NDYtMS40OS0uMDU0LS4wMzktMi4xMy0xLjg3NC0yLjIyMS0xLjk1NS0xLjA0NC0uOTE1LTIuNDU4LTEuODY0LTMuMDYtMy4wNDctLjUyNi0xLjAzMS0uMDM4LTEuMjkyLjA5OC0yLjIyLjI4Ny0xLjk3LjM0Mi0zLjk4Ljc1My01LjkzLjg4NS00LjE5MiAyLjA3MS04LjI5NSAyLjk1NS0xMi40ODMuNTQ5LTIuNTk3LjY4Ni01LjIxMiAxLjcwMy03LjY1NyAwIDAgLjE4My0uNDQuNzE1LS4zMjF6Ii8+PHBhdGggZmlsbD0iIzVhOTcwMCIgZD0iTTExLjU3OCAxMi40NDVhLjEzLjEzIDAgMCAxIC4wMzItLjAyNmMuMDU3LS4wMzQuMTMuMDI4LjE5Mi4wNDguMTc0LjA1Ni4zNDUuMTQ0LjUxNC4yMTMuMTc2LjA3Mi4zNi4xNjkuNTQzLjIyMS4xODIuMDUzLjM5LjA3LjU3Ni4xMDIuMzg1LjA2Ni43Ny4xMyAxLjE1Ny4xODhsLjQwNS4wNjJjLjMxMS4wODYuNjIxLjI1OC45Mi4zODIuMy4xMjUuNi4yNTEuODk4LjM3OWwuMzc3LjE2LjMyOC4yNDZjLjEwNi4wOC4yMTMuMTU3LjMxOC4yMzguMDYxLjA0Ni4xMzcuMDc5LjE4LjE0LjAyNi4wMzYuMTMxLjQwMy4xNDIuNDQtLjE1My4zOTgtLjIwMS44My0uMzcgMS4yMjUtLjA3OC4xODMtLjE5OC4zNS0uMjg1LjUzLS4wODMuMTczLS4xNTIuMzU3LS4yMjcuNTM1LS4xMDUuMjQ2LS4yMjcuNDgzLS4zNDUuNzIzLS4wMS4wMi0uMTguMzYyLS4xODYuMzcxLS4wMDcuMDEtLjI4NS4yNzItLjMuMjg3LS4yNDYuMjMxLS42MTguNTE0LS45Ny41NDEtLjA3LjAwNi0uMTQtLjAyNC0uMjEtLjAzLS4xMi0uMDA4LS4yNC4wMTYtLjM1OS4wMDQtLjAyNS0uMDAyLS4zNjItLjA3Ni0uMzk1LS4wODEtLjE5Ny0uMDMtLjQwMy0uMDIzLS41OTgtLjA2My0uNDQzLS4wOTItLjg2OC0uMzAxLTEuMjgzLS40NzRhOS42NiA5LjY2IDAgMCAxLTEuMjQ1LS42MjZsLS4zNTEtLjIxMi0uMjg3LS4yOTNjLS4xMzQtLjEzOC0uMzItLjI3Ni0uMzktLjQ2My0uMDYtLjE2Mi4wMS0uMjEuMDQtLjM2NS4wNjUtLjMyNi4wOTctLjY1Ny4xNzgtLjk4Mi4xNzUtLjY5OC4zOTEtMS4zODUuNTY2LTIuMDgyLjEwOC0uNDMzLjE2LS44NjMuMzMxLTEuMjc3IDAgMCAuMDMxLS4wNzQuMTA0LS4wNjF6bTguMDQxIDMuMTA3Yy4wMS0uMDEuMDItLjAxOS4wMzItLjAyNi4wNTctLjAzMy4xMy4wMjguMTkyLjA0OC4xNzQuMDU3LjM0NS4xNDQuNTE0LjIxNC4xNzYuMDcyLjM2LjE2OC41NDIuMjIuMTgzLjA1NC4zOS4wNy41NzcuMTAyLjM4NS4wNjcuNzcuMTMgMS4xNTcuMTg5bC40MDUuMDYyYy4zMTEuMDg1LjYyMS4yNTcuOTIuMzgxLjMuMTI1LjU5OS4yNTIuODk4LjM4bC4zNzcuMTYuMzI4LjI0NWMuMTA2LjA4LjIxMy4xNTguMzE4LjIzOS4wNi4wNDYuMTM2LjA3OC4xOC4xNC4wMjYuMDM2LjEzMS40MDMuMTQyLjQ0LS4xNTMuMzk3LS4yMDIuODMtLjM3IDEuMjI1LS4wNzguMTgzLS4xOTguMzUtLjI4NS41My0uMDg0LjE3My0uMTUyLjM1Ny0uMjI3LjUzNS0uMTA1LjI0Ni0uMjI3LjQ4My0uMzQ1LjcyMmwtLjE4Ni4zNzJjLS4wMDcuMDA5LS4yODUuMjcxLS4zLjI4Ni0uMjQ2LjIzMi0uNjE4LjUxNS0uOTcuNTQyLS4wNy4wMDUtLjE0LS4wMjQtLjIxLS4wMy0uMTItLjAwOS0uMjQuMDE1LS4zNTkuMDA0LS4wMjUtLjAwMy0uMzYyLS4wNzYtLjM5NS0uMDgyLS4xOTctLjAzLS40MDMtLjAyMi0uNTk4LS4wNjMtLjQ0My0uMDkxLS44NjgtLjMtMS4yODMtLjQ3M2E5LjY2IDkuNjYgMCAwIDEtMS4yNDUtLjYyNmMtLjAxNC0uMDA5LS4zNDUtLjIwNy0uMzUxLS4yMTJsLS4yODctLjI5NGMtLjEzNC0uMTM3LS4zMi0uMjc1LS4zOS0uNDYyLS4wNi0uMTYzLjAxLS4yMTEuMDQtLjM2NS4wNjUtLjMyNy4wOTctLjY1Ny4xNzgtLjk4Mi4xNzUtLjY5OC4zOTEtMS4zODUuNTY2LTIuMDgzLjEwOC0uNDMyLjE1OS0uODYzLjMzMS0xLjI3NiAwIDAgLjAzLS4wNzUuMTA0LS4wNjJ6bTguODc0IDMuMjc0YS4xNC4xNCAwIDAgMSAuMDMzLS4wMjZjLjA1Ni0uMDMzLjEyOS4wMjguMTkyLjA0OC4xNzQuMDU3LjM0NC4xNDQuNTE0LjIxNC4xNzYuMDcyLjM2LjE2OC41NDIuMjIuMTgzLjA1My4zOS4wNy41NzcuMTAyLjM4NS4wNjcuNzcuMTMgMS4xNTcuMTg5bC40MDUuMDYxYy4zMS4wODYuNjIuMjU4LjkxOS4zODJhMTAwLjcyMSAxMDAuNzIxIDAgMCAxIDEuMjc1LjU0bC4zMjguMjQ1Yy4xMDcuMDguMjE0LjE1OC4zMTkuMjM4LjA2LjA0Ny4xMzYuMDguMTguMTQxLjAyNi4wMzYuMTMuNDAyLjE0Mi40NC0uMTUzLjM5Ny0uMjAyLjgzLS4zNyAxLjIyNS0uMDc5LjE4My0uMTk5LjM1LS4yODUuNTI5LS4wODQuMTc0LS4xNTIuMzU4LS4yMjguNTM1LS4xMDQuMjQ2LS4yMjYuNDg0LS4zNDUuNzIzLS4wMS4wMi0uMTc5LjM2Mi0uMTg1LjM3MS0uMDA3LjAxLS4yODUuMjcyLS4zLjI4Ny0uMjQ2LjIzMS0uNjE5LjUxNS0uOTcuNTQyLS4wNzEuMDA1LS4xNC0uMDI1LS4yMTEtLjAzLS4xMi0uMDEtLjI0LjAxNS0uMzU4LjAwNC0uMDI2LS4wMDMtLjM2Mi0uMDc3LS4zOTUtLjA4Mi0uMTk3LS4wMy0uNDA0LS4wMjMtLjU5OS0uMDYzLS40NDItLjA5Mi0uODY4LS4zLTEuMjgzLS40NzNhOS42NTggOS42NTggMCAwIDEtMS4yNDQtLjYyNmMtLjAxNC0uMDA5LS4zNDUtLjIwNy0uMzUyLS4yMTMtLjAwNy0uMDA1LS4yNzQtLjI4LS4yODYtLjI5My0uMTM1LS4xMzctLjMyLS4yNzYtLjM5LS40NjItLjA2MS0uMTYzLjAxLS4yMTIuMDQtLjM2NS4wNjUtLjMyNy4wOTctLjY1Ny4xNzgtLjk4Mi4xNzUtLjY5OC4zOS0xLjM4Ni41NjUtMi4wODMuMTA5LS40MzMuMTYtLjg2My4zMzItMS4yNzcgMCAwIC4wMy0uMDc0LjEwMy0uMDYxem0tMTcuODYyIDEuODM2Yy4wMS0uMDEuMDItLjAxOS4wMzItLjAyNi4wNTctLjAzNC4xMy4wMjguMTkyLjA0OC4xNzQuMDU2LjM0NS4xNDQuNTE0LjIxNC4xNzYuMDcyLjM2LjE2OC41NDMuMjIuMTgyLjA1My4zODkuMDcuNTc2LjEwMi4zODUuMDY3Ljc3LjEzIDEuMTU3LjE4OWwuNDA1LjA2MWMuMzExLjA4Ni42MjEuMjU4LjkyLjM4Mi4zLjEyNS41OTkuMjUyLjg5OC4zNzlsLjM3Ny4xNjEuMzI4LjI0NWMuMTA2LjA4LjIxMy4xNTguMzE4LjIzOC4wNjEuMDQ3LjEzNi4wOC4xOC4xNDEuMDI2LjAzNi4xMzEuNDAyLjE0Mi40NC0uMTUzLjM5Ny0uMjAyLjgzLS4zNyAxLjIyNS0uMDc4LjE4My0uMTk4LjM1LS4yODUuNTI5LS4wODMuMTc0LS4xNTIuMzU4LS4yMjcuNTM1LS4xMDUuMjQ2LS4yMjcuNDg0LS4zNDUuNzIzLS4wMS4wMi0uMTguMzYyLS4xODYuMzcxLS4wMDcuMDEtLjI4NS4yNzItLjMuMjg3LS4yNDYuMjMxLS42MTguNTE1LS45Ny41NDItLjA3LjAwNS0uMTQtLjAyNS0uMjEtLjAzLS4xMi0uMDEtLjI0LjAxNS0uMzU5LjAwNC0uMDI1LS4wMDMtLjM2Mi0uMDc3LS4zOTUtLjA4Mi0uMTk3LS4wMy0uNDAzLS4wMjMtLjU5OC0uMDYzLS40NDMtLjA5Mi0uODY4LS4zLTEuMjgzLS40NzNhOS42NiA5LjY2IDAgMCAxLTEuMjQ1LS42MjdjLS4wMTMtLjAwOC0uMzQ0LS4yMDYtLjM1MS0uMjEyLS4wMDctLjAwNS0uMjc1LS4yOC0uMjg3LS4yOTMtLjEzNC0uMTM3LS4zMi0uMjc2LS4zOS0uNDYyLS4wNi0uMTYzLjAxLS4yMTIuMDQtLjM2NS4wNjUtLjMyNy4wOTctLjY1Ny4xNzgtLjk4Mi4xNzUtLjY5OC4zOTEtMS4zODYuNTY2LTIuMDgzLjEwOC0uNDMzLjE2LS44NjMuMzMxLTEuMjc3IDAgMCAuMDMxLS4wNzQuMTA0LS4wNjF6bTguMDQxIDMuMTA4Yy4wMS0uMDEuMDItLjAyLjAzMi0uMDI3LjA1Ny0uMDMzLjEzLjAyOC4xOTIuMDQ5LjE3NC4wNTYuMzQ1LjE0NC41MTQuMjEzLjE3Ni4wNzIuMzYuMTY5LjU0Mi4yMjEuMTgzLjA1My4zOS4wNy41NzcuMTAyLjM4NS4wNjYuNzcuMTMgMS4xNTcuMTg4bC40MDUuMDYyYy4zMTEuMDg1LjYyMS4yNTcuOTIuMzgxLjMuMTI1LjU5OS4yNTIuODk4LjM4bC4zNzYuMTYuMzI5LjI0NmMuMTA2LjA3OS4yMTMuMTU3LjMxOC4yMzguMDYuMDQ2LjEzNi4wNzkuMTguMTQuMDI2LjAzNi4xMzEuNDAzLjE0Mi40NC0uMTUzLjM5OC0uMjAyLjgzLS4zNyAxLjIyNS0uMDc4LjE4My0uMTk4LjM1LS4yODUuNTMtLjA4NC4xNzMtLjE1Mi4zNTctLjIyNy41MzUtLjEwNS4yNDYtLjIyNy40ODMtLjM0NS43MjMtLjAxLjAxOS0uMTguMzYyLS4xODYuMzcxLS4wMDcuMDEtLjI4NS4yNzItLjMuMjg3LS4yNDYuMjMtLjYxOC41MTQtLjk3LjU0MS0uMDcuMDA1LS4xNC0uMDI0LS4yMS0uMDMtLjEyLS4wMDktLjI0LjAxNi0uMzU5LjAwNC0uMDI2LS4wMDItLjM2Mi0uMDc2LS4zOTUtLjA4MS0uMTk3LS4wMzEtLjQwMy0uMDIzLS41OTgtLjA2NC0uNDQzLS4wOTEtLjg2OC0uMy0xLjI4My0uNDczYTkuNjYgOS42NiAwIDAgMS0xLjI0NS0uNjI2IDM1LjczNSAzNS43MzUgMCAwIDEtLjM1MS0uMjEyTDE3Ljg0MyAyOWMtLjEzNC0uMTM4LS4zMi0uMjc2LS4zOS0uNDYzLS4wNi0uMTYyLjAxLS4yMTEuMDQtLjM2NS4wNjUtLjMyNi4wOTctLjY1Ny4xNzgtLjk4Mi4xNzUtLjY5OC4zOTEtMS4zODUuNTY2LTIuMDgzLjEwOC0uNDMyLjE1OS0uODYzLjMzLTEuMjc2IDAgMCAuMDMyLS4wNzQuMTA1LS4wNjF6bTguODc0IDMuMjczYS4xNC4xNCAwIDAgMSAuMDMzLS4wMjZjLjA1Ni0uMDMzLjEyOS4wMjguMTkyLjA0OS4xNzQuMDU2LjM0NC4xNDMuNTE0LjIxMy4xNzUuMDcyLjM2LjE2OC41NDIuMjIxLjE4My4wNTMuMzkuMDcuNTc3LjEwMS4zODUuMDY3Ljc3LjEzIDEuMTU2LjE4OWwuNDA2LjA2MmMuMzEuMDg1LjYyLjI1Ny45MTkuMzgxLjMuMTI1LjYuMjUyLjg5OS4zOGwuMzc2LjE2LjMyOC4yNDVjLjEwNy4wOC4yMTQuMTU4LjMxOS4yMzkuMDYuMDQ2LjEzNi4wNzguMTguMTQuMDI2LjAzNi4xMy40MDMuMTQyLjQ0LS4xNTMuMzk3LS4yMDIuODMtLjM3IDEuMjI1LS4wNzkuMTgzLS4xOTkuMzUtLjI4NS41My0uMDg0LjE3My0uMTUyLjM1Ny0uMjI4LjUzNS0uMTA0LjI0Ni0uMjI2LjQ4My0uMzQ1LjcyMy0uMDEuMDE5LS4xNzkuMzYyLS4xODYuMzctLjAwNi4wMS0uMjg0LjI3My0uMy4yODctLjI0NS4yMzItLjYxOC41MTUtLjk3LjU0Mi0uMDcuMDA1LS4xNC0uMDI0LS4yMS0uMDMtLjEyLS4wMDktLjI0LjAxNi0uMzU4LjAwNC0uMDI2LS4wMDMtLjM2Mi0uMDc2LS4zOTYtLjA4Mi0uMTk2LS4wMy0uNDAzLS4wMjItLjU5OC0uMDYzLS40NDItLjA5MS0uODY4LS4zLTEuMjgzLS40NzNhOS42NTggOS42NTggMCAwIDEtMS4yNDQtLjYyNmwtLjM1Mi0uMjEyLS4yODYtLjI5NGMtLjEzNS0uMTM3LS4zMi0uMjc1LS4zOS0uNDYyLS4wNjEtLjE2My4wMS0uMjExLjA0LS4zNjUuMDY1LS4zMjcuMDk3LS42NTcuMTc4LS45ODIuMTc1LS42OTguMzktMS4zODUuNTY1LTIuMDgzLjEwOC0uNDMyLjE2LS44NjMuMzMyLTEuMjc2IDAgMCAuMDMtLjA3NC4xMDMtLjA2MnpNOS4zNjQgMjkuNjQ5YS4xMzUuMTM1IDAgMCAxIC4wMzItLjAyNmMuMDU3LS4wMzQuMTI5LjAyOC4xOTIuMDQ4LjE3NC4wNTYuMzQ0LjE0NC41MTQuMjE0LjE3Ni4wNzIuMzYuMTY4LjU0Mi4yMi4xODMuMDUzLjM5LjA3LjU3Ny4xMDIuMzg1LjA2Ny43Ny4xMyAxLjE1Ny4xODlsLjQwNS4wNjFjLjMxMS4wODYuNjIxLjI1OC45Mi4zODIuMy4xMjUuNTk5LjI1Mi44OTguMzc5LjAxNC4wMDYuMzcuMTU3LjM3Ni4xNjFsLjMyOS4yNDVjLjEwNi4wOC4yMTMuMTU4LjMxOC4yMzguMDYuMDQ3LjEzNi4wOC4xOC4xNDEuMDI2LjAzNi4xMzEuNDAyLjE0Mi40NC0uMTUzLjM5Ny0uMjAyLjgzLS4zNyAxLjIyNS0uMDc4LjE4My0uMTk4LjM1LS4yODUuNTI5LS4wODQuMTc0LS4xNTIuMzU4LS4yMjcuNTM1LS4xMDUuMjQ2LS4yMjcuNDg0LS4zNDYuNzIzLS4wMS4wMi0uMTc4LjM2Mi0uMTg1LjM3MS0uMDA3LjAxLS4yODUuMjcyLS4zLjI4Ny0uMjQ2LjIzMS0uNjE4LjUxNS0uOTcuNTQyLS4wNy4wMDUtLjE0LS4wMjUtLjIxLS4wMy0uMTItLjAxLS4yNC4wMTUtLjM2LjAwNC0uMDI1LS4wMDMtLjM2LS4wNzctLjM5NC0uMDgyLS4xOTctLjAzLS40MDMtLjAyMy0uNTk4LS4wNjMtLjQ0My0uMDkyLS44NjktLjMtMS4yODMtLjQ3M2E5LjY2IDkuNjYgMCAwIDEtMS4yNDUtLjYyNyAyMy4xMTcgMjMuMTE3IDAgMCAxLS4zNTEtLjIxMmMtLjAwNy0uMDA1LS4yNzUtLjI4LS4yODctLjI5My0uMTM0LS4xMzctLjMyLS4yNzYtLjM5LS40NjItLjA2MS0uMTYzLjAxLS4yMTIuMDQtLjM2NS4wNjUtLjMyNy4wOTctLjY1Ny4xNzgtLjk4Mi4xNzUtLjY5OC4zOS0xLjM4Ni41NjYtMi4wODMuMTA4LS40MzMuMTU5LS44NjMuMzMtMS4yNzcgMCAwIC4wMzItLjA3NC4xMDUtLjA2MXptOC4wNDEgMy4xMDhjLjAwOS0uMDEuMDItLjAyLjAzMi0uMDI3LjA1Ny0uMDMzLjEyOS4wMjguMTkyLjA0OS4xNzQuMDU2LjM0NC4xNDQuNTE0LjIxMy4xNzYuMDcyLjM2LjE2OS41NDIuMjIxLjE4My4wNTMuMzkuMDcuNTc3LjEwMi4zODUuMDY2Ljc3LjEzIDEuMTU3LjE4OGwuNDA1LjA2MmMuMzExLjA4NS42Mi4yNTcuOTIuMzgxLjMuMTI1LjU5OS4yNTIuODk4LjM4bC4zNzYuMTYuMzI5LjI0NmMuMTA2LjA3OS4yMTMuMTU3LjMxOC4yMzguMDYuMDQ2LjEzNi4wNzkuMTguMTQuMDI2LjAzNi4xMy40MDMuMTQyLjQ0LS4xNTMuMzk4LS4yMDIuODMtLjM3IDEuMjI1LS4wNzguMTgzLS4xOTguMzUtLjI4NS41My0uMDg0LjE3My0uMTUyLjM1Ny0uMjI4LjUzNS0uMTA0LjI0Ni0uMjI2LjQ4My0uMzQ1LjcyMy0uMDEuMDE5LS4xNzkuMzYyLS4xODUuMzcxLS4wMDcuMDEtLjI4NS4yNzItLjMuMjg3LS4yNDYuMjMtLjYxOC41MTQtLjk3LjU0MS0uMDcxLjAwNS0uMTQtLjAyNC0uMjExLS4wMy0uMTE5LS4wMDktLjI0LjAxNi0uMzU4LjAwNC0uMDI2LS4wMDItLjM2Mi0uMDc2LS4zOTUtLjA4MS0uMTk3LS4wMzEtLjQwNC0uMDIzLS41OTgtLjA2NC0uNDQzLS4wOTEtLjg2OS0uMy0xLjI4My0uNDczYTkuNjYgOS42NiAwIDAgMS0xLjI0NS0uNjI2IDM1LjczNSAzNS43MzUgMCAwIDEtLjM1MS0uMjEybC0uMjg3LS4yOTNjLS4xMzUtLjEzOC0uMzItLjI3Ni0uMzktLjQ2My0uMDYxLS4xNjIuMDEtLjIxMS4wNC0uMzY1LjA2NS0uMzI2LjA5Ny0uNjU3LjE3OC0uOTgyLjE3NS0uNjk4LjM5LTEuMzg1LjU2NS0yLjA4My4xMDktLjQzMi4xNi0uODYzLjMzMi0xLjI3NiAwIDAgLjAzLS4wNzQuMTA0LS4wNjF6bTguODc1IDMuMjczYS4xMTMuMTEzIDAgMCAxIC4wMzEtLjAyNmMuMDU3LS4wMzMuMTMuMDI4LjE5Mi4wNDkuMTc1LjA1Ni4zNDUuMTQzLjUxNC4yMTMuMTc2LjA3Mi4zNi4xNjguNTQzLjIyMS4xODIuMDUzLjM5LjA3LjU3Ny4xMDEuMzg1LjA2Ny43Ny4xMyAxLjE1Ni4xODlsLjQwNS4wNjJjLjMxMi4wODUuNjIyLjI1Ny45Mi4zODEuMy4xMjUuNi4yNTIuODk4LjM4bC4zNzcuMTYuMzI4LjI0NWMuMTA2LjA4LjIxMy4xNTguMzE5LjIzOS4wNi4wNDYuMTM2LjA3OC4xOC4xNC4wMjYuMDM2LjEzLjQwMy4xNDIuNDQtLjE1NC4zOTctLjIwMi44My0uMzcgMS4yMjUtLjA3OS4xODMtLjE5OS4zNS0uMjg1LjUzLS4wODQuMTczLS4xNTIuMzU3LS4yMjguNTM1LS4xMDUuMjQ2LS4yMjYuNDgzLS4zNDUuNzIzLS4wMS4wMTktLjE3OS4zNjItLjE4Ni4zNy0uMDA3LjAxLS4yODQuMjczLS4zLjI4Ny0uMjQ1LjIzMi0uNjE4LjUxNS0uOTcuNTQyLS4wNy4wMDUtLjE0LS4wMjQtLjIxLS4wMy0uMTItLjAwOS0uMjQuMDE2LS4zNTkuMDA0LS4wMjUtLjAwMy0uMzYxLS4wNzYtLjM5NS0uMDgyLS4xOTYtLjAzLS40MDMtLjAyMi0uNTk4LS4wNjMtLjQ0Mi0uMDkxLS44NjgtLjMtMS4yODMtLjQ3M2E5LjY1OCA5LjY1OCAwIDAgMS0xLjI0NC0uNjI2bC0uMzUyLS4yMTItLjI4Ni0uMjk0Yy0uMTM1LS4xMzctLjMyMS0uMjc1LS4zOS0uNDYyLS4wNjEtLjE2My4wMS0uMjExLjA0LS4zNjUuMDY0LS4zMjcuMDk2LS42NTcuMTc4LS45ODIuMTc1LS42OTguMzktMS4zODUuNTY1LTIuMDgzLjEwOC0uNDMyLjE2LS44NjMuMzMxLTEuMjc2IDAgMCAuMDMxLS4wNzQuMTA0LS4wNjJ6bTEwLjk5OC0xNC4xNDhhLjEzLjEzIDAgMCAxIC4wMzItLjAyNmMuMDU3LS4wMzQuMTMuMDI4LjE5Mi4wNDguMTc1LjA1Ni4zNDUuMTQ0LjUxNC4yMTMuMTc2LjA3My4zNi4xNjkuNTQzLjIyMi4xODIuMDUyLjM5LjA2OS41NzcuMTAxLjM4NS4wNjcuNzcuMTMgMS4xNTYuMTg4bC40MDUuMDYyYy4zMTIuMDg2LjYyMi4yNTguOTIuMzgyLjMuMTI1LjYuMjUxLjg5OC4zNzlsLjM3Ny4xNjEuMzI4LjI0NS4zMTkuMjM4Yy4wNi4wNDcuMTM2LjA3OS4xOC4xNDEuMDI2LjAzNi4xMy40MDIuMTQyLjQ0LS4xNTQuMzk3LS4yMDIuODMtLjM3IDEuMjI0LS4wNzkuMTg0LS4xOTkuMzUtLjI4NS41My0uMDg0LjE3NC0uMTUyLjM1OC0uMjI4LjUzNS0uMTA1LjI0Ni0uMjI2LjQ4My0uMzQ1LjcyMy0uMDEuMDItLjE3OS4zNjItLjE4Ni4zNzEtLjAwNy4wMS0uMjg0LjI3Mi0uMy4yODctLjI0NS4yMzEtLjYxOC41MTUtLjk3LjU0MS0uMDcuMDA2LS4xNC0uMDI0LS4yMS0uMDMtLjEyLS4wMDgtLjI0LjAxNi0uMzU5LjAwNC0uMDI1LS4wMDItLjM2MS0uMDc2LS4zOTUtLjA4MS0uMTk2LS4wMy0uNDAzLS4wMjMtLjU5OC0uMDYzLS40NDItLjA5Mi0uODY4LS4zMDEtMS4yODMtLjQ3M2E5LjY2IDkuNjYgMCAwIDEtMS4yNDQtLjYyN2wtLjM1Mi0uMjEyYTI3LjU2MiAyNy41NjIgMCAwIDEtLjI4Ni0uMjkzYy0uMTM1LS4xMzctLjMyMS0uMjc2LS4zOS0uNDYyLS4wNjItLjE2My4wMS0uMjEyLjA0LS4zNjYuMDY0LS4zMjYuMDk2LS42NTYuMTc4LS45ODEuMTc1LS42OTkuMzktMS4zODYuNTY1LTIuMDgzLjEwOC0uNDMzLjE2LS44NjMuMzMxLTEuMjc3IDAgMCAuMDMxLS4wNzQuMTA0LS4wNjF6bS0uOTQ3IDguMjE4Yy4wMS0uMDEuMDItLjAyLjAzMi0uMDI3LjA1Ny0uMDMzLjEzLjAyOC4xOTIuMDQ4LjE3NS4wNTcuMzQ1LjE0NC41MTQuMjE0LjE3Ni4wNzIuMzYuMTY4LjU0My4yMi4xODIuMDUzLjM5LjA3LjU3Ny4xMDIuMzg1LjA2Ny43Ny4xMyAxLjE1Ni4xODlsLjQwNS4wNjFjLjMxMi4wODYuNjIxLjI1OC45Mi4zODIuMy4xMjUuNi4yNTIuODk4LjM4bC4zNzcuMTYuMzI4LjI0NS4zMTkuMjM4Yy4wNi4wNDcuMTM2LjA4LjE4LjE0MS4wMjYuMDM2LjEzLjQwMi4xNDIuNDQtLjE1NC4zOTctLjIwMi44My0uMzcgMS4yMjUtLjA3OS4xODMtLjE5OS4zNS0uMjg1LjUyOS0uMDg0LjE3NC0uMTUzLjM1OC0uMjI4LjUzNi0uMTA1LjI0Ni0uMjI2LjQ4My0uMzQ1LjcyMi0uMDEuMDItLjE3OS4zNjItLjE4Ni4zNzItLjAwNy4wMDktLjI4NC4yNzEtLjMuMjg2LS4yNDUuMjMxLS42MTguNTE1LS45Ny41NDItLjA3LjAwNS0uMTQtLjAyNC0uMjEtLjAzLS4xMi0uMDA5LS4yNC4wMTUtLjM1OS4wMDQtLjAyNS0uMDAzLS4zNjItLjA3Ny0uMzk1LS4wODItLjE5Ni0uMDMtLjQwMy0uMDIzLS41OTgtLjA2My0uNDQyLS4wOTItLjg2OC0uMy0xLjI4My0uNDczYTkuNjYgOS42NiAwIDAgMS0xLjI0NC0uNjI2bC0uMzUyLS4yMTItLjI4Ni0uMjk0Yy0uMTM1LS4xMzctLjMyMS0uMjc1LS4zOS0uNDYyLS4wNjItLjE2My4wMS0uMjExLjA0LS4zNjUuMDY0LS4zMjcuMDk2LS42NTcuMTc4LS45ODIuMTc0LS42OTguMzktMS4zODYuNTY1LTIuMDgzLjEwOC0uNDMyLjE2LS44NjMuMzMxLTEuMjc2IDAgMCAuMDMxLS4wNzUuMTA0LS4wNjJ6bS0xLjI2NyA4Ljk4NmMuMDEtLjAxLjAyLS4wMTkuMDMyLS4wMjYuMDU3LS4wMzMuMTMuMDI4LjE5Mi4wNDguMTc0LjA1Ny4zNDUuMTQ0LjUxNC4yMTQuMTc2LjA3Mi4zNi4xNjguNTQzLjIyLjE4Mi4wNTMuMzg5LjA3LjU3Ni4xMDIuMzg1LjA2Ny43Ny4xMyAxLjE1Ny4xODlsLjQwNS4wNjFjLjMxMS4wODYuNjIxLjI1OC45Mi4zODIuMy4xMjUuNTk5LjI1Mi44OTguMzhsLjM3Ny4xNi4zMjguMjQ1Yy4xMDYuMDguMjEzLjE1OC4zMTguMjM4LjA2MS4wNDcuMTM2LjA4LjE4LjE0MS4wMjYuMDM2LjEzMS40MDIuMTQyLjQ0LS4xNTMuMzk3LS4yMDIuODMtLjM3IDEuMjI1LS4wNzguMTgzLS4xOTguMzUtLjI4NS41My0uMDgzLjE3My0uMTUyLjM1Ny0uMjI3LjUzNS0uMTA1LjI0Ni0uMjI3LjQ4My0uMzQ1LjcyMmwtLjE4Ni4zNzJjLS4wMDcuMDA5LS4yODUuMjcxLS4zLjI4Ni0uMjQ2LjIzMi0uNjE4LjUxNS0uOTcuNTQyLS4wNy4wMDUtLjE0LS4wMjQtLjIxLS4wMy0uMTItLjAwOS0uMjQuMDE1LS4zNTkuMDA0LS4wMjUtLjAwMy0uMzYyLS4wNzctLjM5NS0uMDgyLS4xOTctLjAzLS40MDMtLjAyMy0uNTk4LS4wNjMtLjQ0My0uMDkxLS44NjgtLjMtMS4yODMtLjQ3M2E5LjY2IDkuNjYgMCAwIDEtMS4yNDUtLjYyNmwtLjM1MS0uMjEyLS4yODctLjI5NGMtLjEzNC0uMTM3LS4zMi0uMjc1LS4zOS0uNDYyLS4wNi0uMTYzLjAxLS4yMTEuMDQtLjM2NS4wNjUtLjMyNy4wOTctLjY1Ny4xNzgtLjk4Mi4xNzUtLjY5OC4zOTEtMS4zODUuNTY2LTIuMDgzLjEwOC0uNDMyLjE2LS44NjMuMzMxLTEuMjc2IDAgMCAuMDMxLS4wNzUuMTA0LS4wNjJ6bTExLjI2OS0xMy40OTRjLjAwOS0uMDEuMDItLjAyLjAzMi0uMDI2LjA1Ny0uMDM0LjEyOS4wMjguMTkyLjA0OC4xNzQuMDU2LjM0NC4xNDQuNTE0LjIxMy4xNzYuMDcyLjM2LjE2OS41NDIuMjIxLjE4My4wNTMuMzkuMDcuNTc3LjEwMi4zODUuMDY2Ljc3LjEzIDEuMTU3LjE4OGwuNDA1LjA2MmMuMzExLjA4Ni42Mi4yNTguOTIuMzgyLjMuMTI0LjU5OS4yNTEuODk4LjM3OWwuMzc2LjE2LjMyOS4yNDZjLjEwNi4wOC4yMTMuMTU3LjMxOC4yMzguMDYuMDQ2LjEzNi4wNzkuMTguMTQuMDI2LjAzNi4xMy40MDMuMTQyLjQ0LS4xNTMuMzk4LS4yMDIuODMtLjM3IDEuMjI1LS4wNzguMTgzLS4xOTguMzUtLjI4NS41My0uMDg0LjE3My0uMTUyLjM1Ny0uMjI4LjUzNS0uMTA0LjI0Ni0uMjI2LjQ4My0uMzQ1LjcyMy0uMDEuMDItLjE3OS4zNjItLjE4NS4zNzEtLjAwNy4wMS0uMjg1LjI3Mi0uMy4yODctLjI0Ni4yMzEtLjYxOC41MTQtLjk3LjU0MS0uMDcxLjAwNi0uMTQtLjAyNC0uMjExLS4wMy0uMTItLjAwOC0uMjQuMDE2LS4zNTguMDA0LS4wMjYtLjAwMi0uMzYyLS4wNzYtLjM5NS0uMDgxLS4xOTctLjAzLS40MDQtLjAyMy0uNTk4LS4wNjMtLjQ0My0uMDkyLS44NjktLjMwMS0xLjI4My0uNDc0YTkuNjYgOS42NiAwIDAgMS0xLjI0NS0uNjI2IDM1LjczNSAzNS43MzUgMCAwIDEtLjM1MS0uMjEyYy0uMDA4LS4wMDYtLjI3NS0uMjgxLS4yODctLjI5My0uMTM1LS4xMzgtLjMyLS4yNzYtLjM5LS40NjMtLjA2MS0uMTYyLjAxLS4yMS4wNC0uMzY1LjA2NS0uMzI2LjA5Ny0uNjU3LjE3OC0uOTgyLjE3NS0uNjk4LjM5LTEuMzg1LjU2NS0yLjA4Mi4xMDktLjQzMy4xNi0uODYzLjMzMi0xLjI3NyAwIDAgLjAzLS4wNzQuMTA0LS4wNjF6bS0uOTQ3IDguMjE3YS4xMzUuMTM1IDAgMCAxIC4wMzItLjAyNmMuMDU3LS4wMzQuMTI5LjAyOC4xOTIuMDQ4LjE3NC4wNTYuMzQ0LjE0NC41MTQuMjE0LjE3Ni4wNzIuMzYuMTY4LjU0Mi4yMi4xODMuMDUzLjM5LjA3LjU3Ny4xMDIuMzg1LjA2Ny43Ny4xMyAxLjE1Ny4xODlsLjQwNS4wNjFjLjMxMS4wODYuNjIxLjI1OC45Mi4zODIuMy4xMjUuNTk5LjI1Mi44OTguMzc5LjAxNC4wMDYuMzcuMTU3LjM3Ni4xNjFsLjMyOS4yNDVjLjEwNi4wOC4yMTMuMTU4LjMxOC4yMzguMDYuMDQ3LjEzNi4wOC4xOC4xNDEuMDI2LjAzNi4xMy40MDIuMTQyLjQ0LS4xNTMuMzk3LS4yMDIuODMtLjM3IDEuMjI0LS4wNzguMTg0LS4xOTguMzUtLjI4NS41My0uMDg0LjE3NC0uMTUyLjM1OC0uMjI4LjUzNS0uMTA0LjI0Ni0uMjI2LjQ4NC0uMzQ1LjcyMy0uMDEuMDItLjE3OS4zNjItLjE4NS4zNzEtLjAwNy4wMS0uMjg1LjI3Mi0uMy4yODctLjI0Ni4yMzEtLjYxOC41MTUtLjk3LjU0Mi0uMDcxLjAwNS0uMTQtLjAyNS0uMjExLS4wMy0uMTE5LS4wMS0uMjQuMDE1LS4zNTguMDA0LS4wMjYtLjAwMy0uMzYyLS4wNzctLjM5NS0uMDgyLS4xOTctLjAzLS40MDQtLjAyMy0uNTk4LS4wNjMtLjQ0My0uMDkyLS44NjktLjMtMS4yODMtLjQ3M2E5LjY2IDkuNjYgMCAwIDEtMS4yNDUtLjYyNyAyMy4xMTcgMjMuMTE3IDAgMCAxLS4zNTEtLjIxMmMtLjAwOC0uMDA1LS4yNzUtLjI4LS4yODctLjI5My0uMTM1LS4xMzctLjMyLS4yNzYtLjM5LS40NjItLjA2MS0uMTYzLjAxLS4yMTIuMDQtLjM2NS4wNjUtLjMyNy4wOTctLjY1Ny4xNzgtLjk4Mi4xNzUtLjY5OC4zOS0xLjM4Ni41NjUtMi4wODMuMTA5LS40MzMuMTYtLjg2My4zMzItMS4yNzcgMCAwIC4wMy0uMDc0LjEwNC0uMDYxem0tMS4yNjggOC45ODdjLjAxLS4wMS4wMi0uMDE5LjAzMi0uMDI2LjA1Ny0uMDM0LjEzLjAyOC4xOTIuMDQ4LjE3NS4wNTYuMzQ1LjE0NC41MTUuMjE0LjE3NS4wNzIuMzYuMTY4LjU0Mi4yMi4xODMuMDUzLjM5LjA3LjU3Ny4xMDIuMzg1LjA2Ny43Ny4xMyAxLjE1Ni4xODlsLjQwNi4wNjFjLjMxLjA4Ni42Mi4yNTguOTE5LjM4Mi4zLjEyNS42LjI1Mi44OTkuMzc5LjAxMy4wMDYuMzcuMTU3LjM3Ni4xNjFsLjMyOC4yNDVjLjEwNy4wOC4yMTQuMTU4LjMxOS4yMzguMDYuMDQ3LjEzNi4wOC4xOC4xNDEuMDI2LjAzNi4xMy40MDIuMTQyLjQ0LS4xNTQuMzk3LS4yMDIuODMtLjM3IDEuMjI1LS4wNzkuMTgzLS4xOTkuMzUtLjI4NS41MjktLjA4NC4xNzQtLjE1Mi4zNTgtLjIyOC41MzUtLjEwNS4yNDYtLjIyNi40ODQtLjM0NS43MjMtLjAxLjAyLS4xNzkuMzYyLS4xODYuMzcxLS4wMDYuMDEtLjI4NC4yNzItLjMuMjg3LS4yNDUuMjMxLS42MTguNTE1LS45Ny41NDItLjA3LjAwNS0uMTQtLjAyNS0uMjEtLjAzLS4xMi0uMDEtLjI0LjAxNS0uMzU4LjAwNC0uMDI2LS4wMDMtLjM2Mi0uMDc3LS4zOTYtLjA4Mi0uMTk2LS4wMy0uNDAzLS4wMjMtLjU5OC0uMDYzLS40NDItLjA5Mi0uODY4LS4zLTEuMjgzLS40NzNhOS42NiA5LjY2IDAgMCAxLTEuMjQ0LS42MjZjLS4wMTQtLjAwOS0uMzQ1LS4yMDctLjM1Mi0uMjEzLS4wMDctLjAwNS0uMjc0LS4yOC0uMjg2LS4yOTMtLjEzNS0uMTM3LS4zMi0uMjc2LS4zOS0uNDYyLS4wNjEtLjE2My4wMS0uMjEyLjA0LS4zNjUuMDY0LS4zMjcuMDk3LS42NTcuMTc4LS45ODIuMTc1LS42OTguMzktMS4zODYuNTY1LTIuMDgzLjEwOC0uNDMzLjE2LS44NjMuMzMxLTEuMjc3IDAgMCAuMDMxLS4wNzQuMTA0LS4wNnptLTMxLjYwMi0zLjk4YS4zOTMuMzkzIDAgMCAxIC4wODMuMDA3Yy4xNjUuMDI4LjQ5OC4xODkuNzQ4LjI4OS42OTQuMjc3IDEuNDEuNTg3IDIuMTAyLjg3NC43MTguMjk4IDEuNDk0LjYzNSAyLjIxMy45MTcuNzE4LjI4MyAxLjQ4LjU1MSAyLjE5Mi44MTUgMS40NjIuNTQzIDIuOTIyIDEuMDgzIDQuMzggMS42MTdsMS41MjguNTZjMS4yMi40NzggMi41NCAxLjA1NyAzLjc1OSAxLjU2NCAxLjIyOC41MSAyLjQ1NCAxLjAyMyAzLjY4MSAxLjUzNWwxLjU0Ni42NDYgMS40NzMuNjg5Yy40NzYuMjIzLjk1NC40NDUgMS40My42NjkuMjczLjEyOC41ODIuMjU4LjgxNi4zODYuMTM1LjA3My45NTIuNjQgMS4wMzcuNjk4LS4wNzMuMjkyLjI3Mi43NTMuMTQyIDEuMDI1LS4wNi4xMjYtLjI5LjE4Mi0uMzg1LjI5My0uMDkyLjEwOC0uMTE2LjI0Ny0uMTc0LjM3LS4wOC4xNy0uMjMyLjMwOC0uMzcuNDUzYTMuODUgMy44NSAwIDAgMS0uMjIuMjIyYy0uMDE0LjAwMy0uNjk1LS4wMTUtLjczNC0uMDE2LS42MDItLjAxOC0xLjU5OS0uMTI1LTIuODMtLjUxNi0uMjQ3LS4wNzgtLjUzMS0uMTk3LS43OTItLjI4OC0uNDM4LS4xNTQtLjg0LS4yNy0xLjI4MS0uNDI3LS4wOTUtLjAzMy0xLjM5MS0uNTI2LTEuNTE3LS41NzItLjc0My0uMjc0LTEuNDc1LS41MTItMi4yMjMtLjc5NS0xLjY5OS0uNjQyLTMuNDc4LTEuNDA1LTUuMTc0LTIuMTFhMjI3LjYzIDIyNy42MyAwIDAgMS01LjIyLTIuMjQ4bC0xLjUxNy0uNjc3YTQ3MS42OSA0NzEuNjkgMCAwIDEtMS4zODItLjY5N2MtLjY0OC0uMzI2LTEuNDgyLS43MTYtMS45NTctMS4wMjQtLjQxMy0uMjY4LS4yMTYtLjI0MS0uMjkyLS4zOS0uMTYyLS4zMTQtLjQ0NC0uNjcyLS41NDItLjk2NS0uMjEyLS42MjgtLjI2My0xLjE5NC0uNDc1LTEuODIxLS4xMy0uMzktLjQ2NS0uODQ1LS4zNDQtMS4xMzQgMCAwIC4wMjEtLjA1Mi4yOTkuMDV6Ii8+PC9nPjwvZz48L3N2Zz4="; + + class MobileKeyboard { + constructor() { + this.keyboardOpen = false; + this.waitCallback = null; + this.defaultValue = ""; + this.inputElement = null; + } + + getInfo() { + return { + id: "mobilekeyboard0419", + color1: "#999999", + color2: "#666666", + color3: "#333333", + menuIconURI: menuicon, + blockIconURI: blockicon, + name: Scratch.translate("Mobile Keyboard"), + blocks: [ + { + opcode: "showKeyboardBlock", + blockType: Scratch.BlockType.COMMAND, + text: Scratch.translate("show [TYPE] keyboard"), + arguments: { + TYPE: { + type: Scratch.ArgumentType.STRING, + menu: "keyboardtypes", + defaultValue: "alphabetical", + }, + }, + }, + { + opcode: "showKeyboardAndWaitBlock", + blockType: Scratch.BlockType.COMMAND, + text: Scratch.translate("show [TYPE] keyboard and wait"), + arguments: { + TYPE: { + type: Scratch.ArgumentType.STRING, + menu: "keyboardtypes", + defaultValue: "alphabetical", + }, + }, + }, + { + opcode: "typedTextSinceKeyboardOpened", + blockType: Scratch.BlockType.REPORTER, + text: Scratch.translate("typed text"), + }, + { + opcode: "isKeyboardOpen", + blockType: Scratch.BlockType.BOOLEAN, + text: Scratch.translate("is keyboard open?"), + }, + { + opcode: "setDefaultValue", + blockType: Scratch.BlockType.COMMAND, + text: Scratch.translate("set text box's default value to [VALUE]"), + arguments: { + VALUE: { + type: Scratch.ArgumentType.STRING, + defaultValue: Scratch.translate("You typed: "), + }, + }, + }, + { + opcode: "setCurrentValue", + blockType: Scratch.BlockType.COMMAND, + text: Scratch.translate("set textbox current value to [TEXT]"), + arguments: { + TEXT: { + type: Scratch.ArgumentType.STRING, + defaultValue: Scratch.translate("Now the text is different"), + }, + }, + }, + { + opcode: "getCursorPosition", + blockType: Scratch.BlockType.REPORTER, + text: Scratch.translate("cursor position/start of selection"), + }, + { + opcode: "getSelectionEnd", + blockType: Scratch.BlockType.REPORTER, + text: Scratch.translate("end of selection"), + }, + { + opcode: "isAnySelected", + blockType: Scratch.BlockType.BOOLEAN, + text: Scratch.translate("is any text selected?"), + }, + { + opcode: "setCursorPosition", + blockType: Scratch.BlockType.COMMAND, + text: Scratch.translate("set cursor position to [INDEX]"), + arguments: { + INDEX: { + type: Scratch.ArgumentType.NUMBER, + defaultValue: "3", + }, + }, + }, + { + opcode: "setSelectedText", + blockType: Scratch.BlockType.COMMAND, + text: Scratch.translate( + "select text starting at position in text [START] ending at position [END]" + ), + arguments: { + START: { + type: Scratch.ArgumentType.NUMBER, + defaultValue: "0", + }, + END: { + type: Scratch.ArgumentType.NUMBER, + defaultValue: "3", + }, + }, + }, + { + opcode: "closeKeyboardBlock", + blockType: Scratch.BlockType.COMMAND, + text: Scratch.translate("close keyboard"), + }, + ], + menus: { + keyboardtypes: { + acceptReporters: true, + items: [ + { + text: Scratch.translate("alphabetical"), + value: "text", + }, + { + text: Scratch.translate("alphabetical (allows newlines)"), + value: "textarea", + }, + { + text: Scratch.translate("numerical"), + value: "number", + }, + { + text: Scratch.translate("email adress"), + value: "email", + }, + { + text: Scratch.translate("web address"), + value: "url", + }, + { + text: Scratch.translate("search"), + value: "search", + }, + ], + }, + }, + }; + } + + showKeyboard(type) { + const input = document.createElement( + type === "textarea" ? "textarea" : "input" + ); + if (type !== "textarea") { + /** @type {HTMLInputElement} */ (input).type = type; + } + input.style.position = "absolute"; + input.style.top = "0"; + input.style.left = "0"; + input.style.width = "1px"; + input.style.height = "1px"; + input.style.fontSize = "1px"; + input.style.padding = "0px"; + input.style.border = "none"; + input.style.backgroundColor = "#fff"; + input.value = this.defaultValue; + + this.typedText = this.defaultValue; + this.keyboardOpen = true; + this.inputElement = input; + + document.body.appendChild(input); + input.focus(); + input.click(); + + const done = () => { + this.keyboardOpen = false; + this.inputElement = null; + + if (input.parentNode) { + input.parentNode.removeChild(input); + } + + if (this.waitCallback) { + this.waitCallback(); + this.waitCallback = null; + } + }; + + input.addEventListener("input", () => { + this.typedText = input.value; + }); + + if (type !== "textarea") { + input.addEventListener("keydown", (event) => { + if (/** @type {KeyboardEvent} */ (event).key === "Enter") { + input.blur(); + } + }); + } + + input.addEventListener("blur", () => { + done(); + }); + } + + showKeyboardBlock(args) { + this.showKeyboard(args.TYPE); + } + + showKeyboardAndWaitBlock(args) { + return new Promise((resolve) => { + this.waitCallback = resolve; + this.showKeyboard(args.TYPE); + }); + } + + typedTextSinceKeyboardOpened() { + return this.typedText; + } + + isKeyboardOpen() { + return this.keyboardOpen; + } + + setDefaultValue(args) { + this.defaultValue = Scratch.Cast.toString(args.VALUE); + } + + setCurrentValue(args) { + if (this.inputElement) { + const text = Scratch.Cast.toString(args.TEXT); + this.inputElement.value = text; + this.typedText = text; + } + } + + getCursorPosition() { + if (this.inputElement) { + return this.inputElement.selectionStart; + } + return -1; + } + + getSelectionEnd() { + if (this.inputElement) { + return this.inputElement.selectionEnd; + } + return -1; + } + + isAnySelected() { + if (this.inputElement) { + return ( + this.inputElement.selectionEnd !== this.inputElement.selectionStart + ); + } + return false; + } + + setCursorPosition(args) { + if (this.inputElement) { + this.inputElement.setSelectionRange(args.INDEX, args.INDEX); + } + } + + setSelectedText(args) { + if (this.inputElement) { + this.inputElement.setSelectionRange(args.START, args.END); + } + } + + closeKeyboardBlock() { + if (this.inputElement) { + this.inputElement.blur(); + } + } + } + + Scratch.extensions.register(new MobileKeyboard()); +})(Scratch); diff --git a/images/README.md b/images/README.md index 03e7082343..86569a277a 100644 --- a/images/README.md +++ b/images/README.md @@ -298,3 +298,8 @@ All images in this folder are licensed under the [GNU General Public License ver ## Lily/Video.svg - Created by [@LilyMakesThings](https://github.com/LilyMakesThings) in https://github.com/TurboWarp/extensions/pull/656 + +## veggiecan/mobilekeyboard.svg + - Created by Veggiecan0419 + + diff --git a/images/veggiecan/mobilekeyboard.svg b/images/veggiecan/mobilekeyboard.svg new file mode 100644 index 0000000000..4c30531350 --- /dev/null +++ b/images/veggiecan/mobilekeyboard.svg @@ -0,0 +1 @@ + \ No newline at end of file