karaoke-eternal 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/LICENSE +5 -0
  2. package/README.md +49 -0
  3. package/assets/app.ico +0 -0
  4. package/assets/app.png +0 -0
  5. package/assets/favicon.ico +0 -0
  6. package/assets/mic-blackTemplate.png +0 -0
  7. package/assets/mic-blackTemplate@2x.png +0 -0
  8. package/assets/mic-white.png +0 -0
  9. package/assets/mic-white@2x.png +0 -0
  10. package/assets/robots.txt +2 -0
  11. package/build/267.4be526e3a94d53aeceae.js +1 -0
  12. package/build/591.4be526e3a94d53aeceae.js +1 -0
  13. package/build/598.4be526e3a94d53aeceae.css +5 -0
  14. package/build/598.4be526e3a94d53aeceae.js +1 -0
  15. package/build/799.4be526e3a94d53aeceae.js +1 -0
  16. package/build/7ce9eb3fe454f54745a4.woff2 +0 -0
  17. package/build/845.4be526e3a94d53aeceae.css +132 -0
  18. package/build/845.4be526e3a94d53aeceae.js +1 -0
  19. package/build/a35814dd9eb496e3d7cc.woff2 +0 -0
  20. package/build/e419b95dccb58b362811.woff2 +0 -0
  21. package/build/index.html +1 -0
  22. package/build/licenses.txt +1400 -0
  23. package/build/main.4be526e3a94d53aeceae.css +2034 -0
  24. package/build/main.4be526e3a94d53aeceae.js +1 -0
  25. package/package.json +144 -0
  26. package/server/Library/Library.js +340 -0
  27. package/server/Library/index.js +3 -0
  28. package/server/Library/ipc.js +18 -0
  29. package/server/Library/router.js +27 -0
  30. package/server/Library/socket.js +47 -0
  31. package/server/Media/Media.js +207 -0
  32. package/server/Media/index.js +3 -0
  33. package/server/Media/ipc.js +19 -0
  34. package/server/Media/router.js +99 -0
  35. package/server/Player/socket.js +78 -0
  36. package/server/Prefs/Prefs.js +165 -0
  37. package/server/Prefs/index.js +3 -0
  38. package/server/Prefs/router.js +124 -0
  39. package/server/Prefs/socket.js +68 -0
  40. package/server/Queue/Queue.js +208 -0
  41. package/server/Queue/index.js +3 -0
  42. package/server/Queue/socket.js +99 -0
  43. package/server/Rooms/Rooms.js +114 -0
  44. package/server/Rooms/index.js +3 -0
  45. package/server/Rooms/router.js +146 -0
  46. package/server/Scanner/FileScanner/FileScanner.js +225 -0
  47. package/server/Scanner/FileScanner/getConfig.js +35 -0
  48. package/server/Scanner/FileScanner/getFiles.js +63 -0
  49. package/server/Scanner/FileScanner/index.js +3 -0
  50. package/server/Scanner/MetaParser/MetaParser.js +49 -0
  51. package/server/Scanner/MetaParser/defaultMiddleware.js +197 -0
  52. package/server/Scanner/MetaParser/index.js +3 -0
  53. package/server/Scanner/Scanner.js +33 -0
  54. package/server/User/User.js +139 -0
  55. package/server/User/index.js +3 -0
  56. package/server/User/router.js +442 -0
  57. package/server/lib/Database.js +55 -0
  58. package/server/lib/IPCBridge.js +115 -0
  59. package/server/lib/Log.js +71 -0
  60. package/server/lib/bcrypt.js +24 -0
  61. package/server/lib/cli.js +136 -0
  62. package/server/lib/electron.js +81 -0
  63. package/server/lib/getCdgName.js +20 -0
  64. package/server/lib/getDevMiddleware.js +51 -0
  65. package/server/lib/getFolders.js +10 -0
  66. package/server/lib/getHotMiddleware.js +27 -0
  67. package/server/lib/getIPAddress.js +16 -0
  68. package/server/lib/getPermutations.js +21 -0
  69. package/server/lib/getWindowsDrives.js +30 -0
  70. package/server/lib/parseCookie.js +12 -0
  71. package/server/lib/pushQueuesAndLibrary.js +29 -0
  72. package/server/lib/schemas/001-initial-schema.sql +98 -0
  73. package/server/lib/schemas/002-replaygain.sql +9 -0
  74. package/server/lib/schemas/003-queue-linked-list.sql +16 -0
  75. package/server/main.js +135 -0
  76. package/server/scannerWorker.js +58 -0
  77. package/server/serverWorker.js +242 -0
  78. package/server/socket.js +173 -0
  79. package/shared/actionTypes.js +103 -0
@@ -0,0 +1 @@
1
+ /*! See licenses in licenses.txt */(self.webpackChunkkaraoke_eternal=self.webpackChunkkaraoke_eternal||[]).push([[267],{63569:(t,e,s)=>{"use strict";s.d(e,{Z:()=>i});const i={cells:{data:"data:image/jpeg;base64,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",width:256,height:256},seaweed:{data:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4Sn+RXhpZgAASUkqAAgAAAAJAA8BAgAGAAAAegAAABABAgAVAAAAgAAAABIBAwABAAAAAQAAABoBBQABAAAAoAAAABsBBQABAAAAqAAAACgBAwABAAAAAgAAADIBAgAUAAAAsAAAABMCAwABAAAAAQAAAGmHBAABAAAAxAAAAEoGAABDYW5vbgBDYW5vbiBQb3dlclNob3QgUzQwMAAAAAAAAAAAAAAAAEgAAAABAAAASAAAAAEAAAAyMDA2OjEwOjA4IDEzOjA3OjU5AB8AmoIFAAEAAACGAwAAnYIFAAEAAACOAwAAAJAHAAQAAAAwMjIwA5ACABQAAAA+AgAABJACABQAAABSAgAAAZEHAAQAAAABAgMAApEFAAEAAABuAwAAAZIKAAEAAAB2AwAAApIFAAEAAAB+AwAABJIKAAEAAACWAwAABZIFAAEAAACeAwAAB5IDAAEAAAACAAAACZIDAAEAAAAQAAAACpIFAAEAAACmAwAAfJIHAE4CAACuAwAAhpIHAAgBAABmAgAAAKAHAAQAAAAwMTAwAaADAAEAAAABAAAAAqAEAAEAAAAAAQAAA6AEAAEAAAAAAQAABaAEAAEAAAAUBgAADqIFAAEAAAD8BQAAD6IFAAEAAAAEBgAAEKIDAAEAAAACAAAAF6IDAAEAAAACAAAAAKMHAAEAAAADAAAAAaQDAAEAAAAAAAAAAqQDAAEAAAABAAAAA6QDAAEAAAABAAAABKQFAAEAAAAMBgAABqQDAAEAAAAAAAAAAAAAADIwMDY6MTA6MDggMTM6MDc6NTkAMjAwNjoxMDowOCAxMzowNzo1OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAOoAAAAgAAAAtQAAACAAAAABAAAAoAAAAEcAAAAKAAAA/////wMAAABfAAAAIAAAAO0AAAAgAAAADgABAAMALgAAAFwEAAACAAMABAAAALgEAAADAAMABAAAAMAEAAAEAAMAIgAAAMgEAAAAAAMABgAAAAwFAAAAAAMABAAAABgFAAASAAMAHAAAACAFAAATAAMABAAAAFgFAAAGAAIAIAAAAGAFAAAHAAIAGAAAAIAFAAAIAAQAAQAAAIZXEgAJAAIAIAAAAJgFAAAQAAQAAQAAAAAAJwENAAMAIgAAALgFAAAAAAAAXAACAAAAAgAAAAAAAAAEAAAAAQAAAAEAAAAAAAAAAAAPAAUAAQABQAAAAAD//8cC7QAgAGIAsgAAAAAAAAAAAAAAAAD//wAA4AjgCAAAAAAAAAAA/38AAAAAAAACAO0AHgHXAAAEAAAAAAAARAAAAIAAEAG1AOoA9P8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBpAAAAsgDoAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQDgCKgG4AjUAJkBJgBm/gAAmgFm/gAAmgFm/gAAmgHX/9f/1/8AAAAAAAApACkAKQBkAQIAAAAAAAAAAABJTUc6UG93ZXJTaG90IFM0MDAgSlBFRwAAAAAAAAAAAEZpcm13YXJlIFZlcnNpb24gMS4wMAAAAFJ5YW4gR2Vpc3MAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAJAEgBSAFMAUoBSwFMAUwBSwFMAUAAAAAAADAAAAAAAAoAAAAAAAAAVQAyARIAAAD5AwAAAAAAAAAAAABXAAAAAAAAqyIAGAEAAEAAGgDSAAAA4AgAAOAIAAAEAAEAAgAEAAAAUjk4AAIABwAEAAAAMDEwMAEQAwABAAAA4AgAAAIQAwABAAAAqAYAAAAAAAAGAAMBAwABAAAABgAAABoBBQABAAAAmAYAABsBBQABAAAAoAYAACgBAwABAAAAAgAAAAECBAABAAAA9AcAAAICBAABAAAAhyEAAAAAAAC0AAAAAQAAALQAAAABAAAArDUxiFHK2puoNTWMU9vKU6wxNazT2ssbuDUVLFLoylOoMTGoUsqLW6hVFYxQysrTnBURrNPKulPMNx2sU9ruU60wNKhTotrTrBE1rFPCi9O8HxWs08raUqwVGahzysrTKjQ/qFPaylOMVT+uW8rK06wVESzTy4pTuDUxLFOKy3OIdTesW5vKU6A1Nb1ZzvoTqHEVvBrKSlussTesV8pKW601P4zTXspTrDU9DF/JihGoNTWs08pa0uw1FaxRy1pTrBUVrdPK21PsFTWsUdtL0Yw1E4xbyspTvBEXnFPKylusNTSsW8qKUqgVFcjTyspZrBkVrFNay1OodT2uUsrOU6gUFax6ykJTOLU1iNlKylPcPRms04raU/wxPaxRysrbjDU1jFPaylOsFRGoU8rLU6wVP4hbyspbvDE9rFPLzluMFzWo20tLV5w1FSj/2P/bAIQACQYGCAYFCQgHCAoJCQsNFg8NDAwNHBMVEBYhHSMiIRwgHyQpNCwkJzEnHh8tPS0xNjc6OjoiKj9EPjhCMzc5NgEJCQkMCgwUDAwUDwoKCg8aGgoKGhpPGhoaGhpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09P/8AAEQgAeACgAwEhAAIRAQMRAf/EAaIAAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKCxAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6AQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgsRAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8AtraCPaqqu5eQ7HP5Y4ParJ8gygyyDc5wvy4H0H5VzXNSxG4nk+QsEDZOeMn3/OnPr1jZx7bu6SF0bqvBP1HrU9bPqPzK48c6NbIXh1RBIQRl42dselYN9LoXiO8ke9vZ719mE+z2hBiJP3uvP4iueScanMuZ26WNYpONtNTJj8MWlvHIYp9Umh2lpP8ARBEoA75YkcetaelfEGxsrN9N0rT7nUY2QmWO4Pmgr3+XH9KVR1Kr9xRg46uTZMVCGkm5X6Ik0WbTvEU4a08JWl0kB3sLdhGwz7ZAP0wakew1TTtsvhu8uQWkydPvF2SQoejcnkD1/wDr1LUpJe2s+010LTS+D5x7la08dpZTz22sWTWckbmKWS2xsZu+R0P45qzc3FhLCLnR7hYWUHMtggibB674+jDtwaOSUXZ+9F7S6MFJNdn1RQu9Xni0cXtha29vdpuVZYVIEgH3to/gYjJOPX3NYmow2utWR1iCeCFYlAktSSjh/YgHIPv/APXrWLafNK8teUzlrotNLmhoviHTmSG+1G1E1xbfu4CTuwM8Z9cdjWrc+PmlbeGZMdNvFUrx93dLYL31+8d4a0bz759Wutk80xO1SNwBPU89+fT1rrY7NXRVZVVV5AHGK1b6dF0JivxI5bVAMElD69qrNEIEBUKecj1/WkMz1hQzHf8AKxwpH6ZqWCN1UkLnIwMHkfUZOP8A635USXIFErMMM3G3cH68c/WvPfGkE1z4iFtbWuJHIVCh3NKc49cdR6URSchSbS06mHbeRZambe/h+RZAJlxzx2z1HPoa7Wx8X6NYXiCz06Kw3gI8i5w31/xrOrzOyjs+ppT5bNvdD/Hgu5haRadcTgXYO8Rt+7YEA4z3PIwCfyqjB4PGgeJNMurm3mNlcOImgmTbIx6Elck7Rjd6fhST5YvT3pKxLV3fomWtW0OfwdrV1qPh95E/0lNtqgJzGVLfXqp/CtLxNq7azp9rrdhPLBd2inzRIjYyASUHYHPBHfjrio+NKT+0rTH8L06bM5nxLqcVz4aghsImkm1K6+1Oqjcd+0DCgfy96zb3wfrGj6XDqF3hWlxiJJMyR88bh6+wq6bUY2nu5WXyFJXd47JajYdWnl+ZpSEt4yiBxkO+OSM98ZOevHrinSaC9strf2T/AGrzj+8iVPlHfuc/gev4itEox+e5N3L5bITUAxjQT2TQI/8Aq/LjCAt647fT3963m8I2ekmynvr/AM6OeJZfKdNuNyjC5ye+7k/3aG07W1b6+gaq99PI09Nmu7bWJJoDa/YRIEltoGJ2qeN47Z78dea6Oe+khuGQqwAbGc4AP5+1Q1aXdPUtaoRp3kUkgEAYGeSee1In7xcn5TjuMZ9qoCkCCcqMKTxz0H+PTvx+VXEgeBQXIyhyQFznj9P6VWxP5lm0RN+8OMjsvUZ7Go7LRrKPXzq8qKtxFG0gGeM7cZx9D+YrOUnFN+Q7XOVj8KaXrOn3Uu5mvrl2lV8Ehck4HoBgj/PFc/B8PdQN+sdzsSAZYyBg3yjrgZz6dcdaqNRRj72lloS43enXc7ETWFxryTWtyttqFpGF+yTnYCyjgjnAG3j24963vEtjc+ILTT/s5zHOvmeYjcggcbfqD+Wa423KavdOLV13NlZJ26lbxKdMnSDWrhttuLcHcXKmQjsAD3yOvbNc/wCDJDrHh7xDbzx+Xay/vYQx5UMCARnkcrxWl1Z22i9yWu+7M/wlHPYCG3ha3kliVz9pXDiJCQWwf4TgAfiPWuij8OLqNt5mqXsqy7i0SR7cIO2cg8/yqajSld6tNtRLhflttdWbOD8SeF5odS+yWL2/lhQYleQJv9cknBbPvzWv4PHiOZo7JBb6ZbIdjkokTuwGQMkFm7HODWkpQnT1covsQlKM7pJo2nlEEzKdQsb+TzAoWEgSo+eMYA3HjoQKhk0eTUNLm028uD9uhJeGaUjIYgsVOeikhT7H64pU/c1bcktm9ypvm20ZU8O6TqHhm3vbjVYjFMAqwqCHV+vTHB5OT7ZroLHUxqMKs0yO+OgAJX6+pPWteZSfNF3T2ZmlZWejJWgkTKrjB44/z9KjjkBOSBhTjnsear8Rk6AZ3E5HB2kjHOcg+uDnkUkJ3rlVVcHBAyO5yf8AP/6nsSWoctujIUndhW7n1xiqM2pyPPdRAPFFCmbh1GXVPRc8BieMmsamzvt2KW68+pWtLm/liWDTbS2jt1X5VYFvkGFGXzngDqO/T1rJ1LX7HS1e4hiCPOhjjjVflH3ScnOcdfXsPXLhBp2b5pbtdhSa7Es0+pDw/Yssqxw3kbTytFEqeXF6tgck+nORW54W1h7jwzJZpAQ9oS9qjEtvjB4GTjJHK/gKzqJKMrX5k+pUXdq+w/XJdM1nwUjLEZwbhXghjXecnttGTjJPGO1czpappvg7UTJqNjHfXsuwpLdKCirxg85zknioi/3fL9pvbqNpuV+i6lTT1vdUMGmaZNY2umQHfcC1Zm3bcdWI5ycd+9Qa74zks7qWCCRSVON2abhzu2vM/ibVirqK6cq2IvDZbU47jUNSie4adha2ZbndIwIJx6KDnPatr7S+nWnl2iTQ3BkIgCSFlgi6ZLHrg4JHPccZq5RSXL0WiFF31+85PVovsjb0DSWb/NJIHyVlOeQeo5HGfpziuqtNQUxwTXeoOwEe1cgMGBBBGTzjb27HODxW3LdLujO+r7dDPXWb4WpfTDLNpwn8mWCSQyMSenToDggfStzRrnTLsSXemI0DDBmtcZ8tueVPpz05/oMXH2T9xfu5StOPZspPm336M3o7kyQrsBZOh49fbvVOaJWLFBgnoQv69a32ETKJEOV+bjLFlyfTOc+1SQRSBipOyNQWHy857Z7f5/MZJYNwYoyEdt+CckcD0HJrJ1o211o5N1c/ZI3YSXTqNrSkcIq9yPl/+vwaxq6K/YqOrM3UZPI0CG+mkfT9OaTMEC4aacc4Yk8fQdOvFY0Wp2+qu9pp1uXhJRFEqkOzn5SCV4IOc9s+oxxdC7Tbs3f3xVHqkvkW7jWbXTpJfCepebLZW5CRXUCDfE+AWAznIz2/qKsap4hSw1zRZNNmSXSoYvIkbd8wLHksrc9gTWM7tpS0VTVPzLjpe2vLuOneDSbl7JZFljubvz0Q8eVuxxx2PP51wmoaTfXupSmCCRLYyZZ8HbGScEMfUfr1q6DV7uy00JqJ2sjrdFja/wDL07REe1tMBZbqReFUdSexY88e/tVDUPB+lS+I1UX7RWKsFZ5Tlpn6lQ3RSRjGamE3CTbXNKWsi3DmVtkti99pms5ZJZhDbJagx2yQKX8hR2AyAxJwSfqcmrd/Zv8A2c0uoW7eQiLcv5gSJFwdoG5fmYnORngc8GnLZNby2Y1ZaP7hJx4dvNDe4ikCmQFNq8ADOQpzznJz17+wrmrvTtSGgC5MDS2YUICpyVIJGTgdPlPPHNaU5OL9/q9/Micb/D/SOw8C6VcaP4M1aS4dQzxO8flkErgDkN0zkLj6dah8ODT4YUTTmd4xIfN3DDYbg5/D0OKylJy5mleLe/oCVkr7o0ZTcxSmISMnPfgDnoavQkyKCdp7nBz/AJ5rdaoRJtjEv75WIzg4Jx6k9evAx9KSK6hMSyRSm6RjsR1UkNnqMdj7HFEnb5iJCV8liIy8u7bHEnJduoHp7+2DXC61pV94j8bW9g9zHvbapSMMEiXPCgYHTrnpWV/3i7JaLuyunmzb8W2dtq3jC70QqoisbFUs7dRznIztHchecdTjHesbR7XS9CuIbxNRuYIredDPb3MJVnbBKnHr1H589qinOSi4pc3Ndt+bBpN3va23yNVdVh8N6nqNu1na3tvclrphLHuM8THJKt6r/d9AT1rA1XwnZ+IIJNU8KTM6gEz2LHc8XunqPY8j3qac5U5Jy96D0v2NJRU4vl0kuncp6g1xcaxaKiMXCoXwOig9T6DqK3pvChEIuYbuFGlcyT7mI53AgDrjp174HFaJxile2q2ISbb8mOPjK6/s5NOdYg6OIhImAHJ78dKrQRXE0jMglFu6gNFINzc8o464bkHjpvGOhpQik+bpZcpTelut9SfUrNbaLMM3kXVs/wC4PKkplQHdh0xliB1wegAp2ralPfadBYTXi3AmAR3bhWIPyq5XBxww7dc0nJuVtrfoGy7+RzFz4X1X+1yljbtbWspb96z5iQA8gsCfTocn610vkWWnQRXH2mW6a5eOCNnYGON1Riu0nIwScA9gT9aupJSSWkm17zIjFq99FfRGnoV7dXWh6rLqyNGm6KARiQHzGBBKgnJHIUHkkZOPSornRrW4j+0bZIrxepjc5DEdG9eufoPSlC0dFrF3sNq610Nst5xjuxF80sSsR2z0I/z600SKVH7zH+yeMfhVUvhV97aie5aRUZ/mLYA+X8ueRVe4tibh5rWVreZgB5iqCr44wVOQ34j6Vo9iSLUNV1CwtItMt5RqGsTKSNqLEsY9ABwPf1rB8J7dG1GfVtV+0W13KxgWS7j2qr5BJznGMgjPtXLT1c5fKC62Lell97L+uzeGpvEN9c3t1Gl+yoUneVk2gAEMoAPOR14/KuQvfFWo3N2If7Ya+8pTtuWXKR84HVc9M8nPWqpwlL4k7RXuyvYmWm1rvdGVZ6lczWk8bP51vbZkEkgGVzwMDtn096js/E7WV7Hd6bD9hkTqI5Dhj9OgHt9a2dBSbSuote9H1EqrjZ7tbM2IvE1jrF5cXL6Uq3zRkyziVghx0OwYGScfzrOu/EUqxsrzE+y1iqEublk+dxS5Wa+0ja6XKnuhmhxC5eXUJHdlhB8xSPlQEH8yVDY6c9/Xo7e51RbKS6klhs4ZVcKZCEaRieSP9nnOB1x7mtqiWif2dl3Ig29V13Zpk2kelzQ381ndIHUlYpAQUwqKSASRghcYGefrWbdS2sEduJEuUgjUIZV2uACeA6FMj2zz09Kzd3t17le6tX+A1PEV5PqV1Jaae1qy8OYnGy4YtnDArhiQSe/T6mq0+pw3F7JYS2IjabEbKsx2NhshlyO3qMccDil7Ll1UrtK7+Qc6ejTtfTU2dane4jtLaxYvZxM08zEHdvVWJ9wOOp5PUmtS71/TrCCLUd4kaVOUQ5ZuPunHcH8uaqC5krb9fUUnZ69jTikS6sYpkDBX6Dk4Bwfx+9VVkV7+KOQlBgsBnJyOB/MH8qqG3o3cT/4Y13i2Md2CwHJ/n/SqF/qQ0+1muywURKcZHelVbUXbe2glucWbiTW7yO40K4mEkALzTuMZfHJx/d6Dkf41dg1mPxNPqy3cYmWK3C2+Rkp1yw9DlQc1l7PksvtQV5MHLmfk3oUdb0+1mt0mtvLW1vbNWLMmTC4YZ29x349alm+GeoT6RDLY39ktpsDxx5ZTIcfeY46n9OlaRqWjd3ai9UHs232ctji7uwm0gXUJMmUKxzEjALdSPce/frVSyjjkjlafdux+6Crnc2f8/wCRg9UZKS5l1MWrOz6Hc+FfhdquoRvPqLnS7Tbu3OPncey9h7mua1KxsbrWpl0yVEtElESiR8seMFz7dTmsY1b1GlrFL3pGjh7uujb0Rv29gttpdzZW8YZIJSzzk/KQAfnYHtkcDp90ck1mX9zcahdLCJiZBIzLLkDBxwCfUAdM8EmpXvz5nrbVIuXux5V13Yo1O/sZre3uHeaZPmmUOSyg/LtOCccHvyM9q7XSIm0/w6lnMpuHeVpH7h8/dLDBYjBU8YxSrx5bcujbFBt762KNnqOnQ6ubISqzRDzDtJZIcLyqMRx7k+3PYljpFjdXY1mZD/Zlm/mNMjg7yo+4Ou/J4zgZyeeKyacXtva3zLumrdnqSQ6zey31xNK0IuJixaBTneZPlCFjx/EvHbBrmbjTjcQKXEzzRvteJOctgbf5Y/CtYe47rZu2pM/e0elkeh+G45rXw/El5EEkdzII3+8kfABwPofyq3NaR3C9f3o+ZXHOw4/Tr0pwe782BZuZG8vYQCGPDViavaf2jpVxBgnCZAAzkjkCnMkxtMm/4ReS1n02Jd1zFF58dwfkKtyWLAcYJI+g75FSv4z0iWIz22hhBGSkklsSI2BydpOBjqecVjKMp+8rO+k16FJpb6W2C78QeF7rTbazeHUtLZI90RwG3KRnnPUHr+FZWq+KJLG3QWOpR3lqBwyDBX2Knp+tSqcnKzXut/Ei1NJd32M2x8bxRRsbzTra+Qtz9oiDc/j9a1rH4h3DO6aBoMKSquR9mthlR68CtpUJfzcsFuiFUj2vJ7Gn4m1rUbDwZJBqV6ser3yrJcK7YaKJjgIo9epP/wBYVxVsIzLH/ottBDFKIjcOhBbB7H+96/UdKKEUk2rpOWj72CcrtLTRbdja0u4nkhl0nUJhDEi+a82AFQ7gmHz94EkfT8KTVdMu0glN6qWawAbJY0z5hboY8dRz1H0q42i/V6C+JfmY2kIbqB7ud/KhgPE0g5ODnbjPPXp71015cahqFzMbJoI9PUFWiWXydhU4O5uuBx36EClNpyt/ItWJXtpu+hjanq9jbWUFvYv9pnGUPlZWIZGMbj8z4zwTgdetWPEEs7Xlv4c0+fENkm+4mUkB5eCzEjsM7QP604x5XeXm7CbT0XpcS6m+x6RcWtzGd5l8qNnG0nGBkgd8oe9XNDljtdRt3tpol5KShHLsCTw2GGOpxxUNOUX2ZXX0O+it7eGJiWZp5MNJJI25m+vP6dqYssaFo1Vm3dCEJqo7DGzThjwQRz0PSiEBYV3nhjmh7kmB4l8MPqWs6bA0jLbTf60qpOIwWfH44x+FULSXRrQ3kuiareWd4igELEFhVRxyMndznn9KxUn8K1WrkirX1vZ9DO1nSbmNrSKbULF7vyw4Z0ZW29eBtz16HryeK5m8jii1XCahG075E0rxEKGPXqCfxAzW9KWtkpW11JnFbtq/Ytx+HY57NS+prJDECVCRP83fCkgKT+Oa6P4ehJZJrmWVo9J0wCeZWG1XfnaGxnce/P8AdwKmpO8JaW5Ff5hGPLJa3uNls5dd8RLqGqTQgyzgbWj3hCcbY3zjjGOPrilu7ZbO/NttSOZsEOY8o8eST5ZI25GTk8A98YNZqTsoq6UVqymrO+mrMnWtYtIdTnsLhPNtxIxkZV+YncSOfQbj7e1Up9Tg1ae3tFlkt7aHAgkf94yDuM/XmunlfxdtbGba2XpctR2N3e3YmFtLd2cOXDQkyrIQflXgYySRkHnkn1qFtB1jUIdzRRQLJnmWVI8DOScE5/HFRzQi7vp063Y+WTWnXqa9p4X0fRY1utT1a2uLiHayW8cjBMjByW2nP0AH1q+LrTLt59TSJvtFywZtitHCMcH5hz1Oevv6VnKcpu+0VoUoxirPWRyHiDVp9V1Z5pseyqMAen6YrU8CxST6yzOHKiFwT1AyOK6OW0LeRne8vmepQsZLMOgG7bkDH0/xxUcxYKGUEbVH8OT0/I1jDZGrIpF8skEk5bnJzT3CBIy3yhT8pyODVdRGJ4+1yaLw7FDbn55d6bhkNjjiue0vSZYUW5fdLC9skcyOM9tx+nTAHXAz6Zx+FSf8zs2N6teRveMkZfG0Go2cH2zdZxR2UKKT65Y+g5/H8KzJNFttJ0261HxJZxX91ICBaQKES3GeN0g5zk9F555pqaS3ak3aIcuvdfaHaFpdgulS6wbG2jeWTybSCNzIu7d98hs8gKWxnHHNbPihrHw3oK6ZGkcGI/tl4ixglpGIVRg8Hk/T5TUTUpXV+aTkklsWuVJaWW/c517/AFM65mO7aWwlgSRftMpO0kcDrk4kGDt6fjWq9tqM1/c2sdhEsLncsQkUGMnG5lIORg88gjKnrmh8q20ste1wV2tdf8jkvEnhLUrrVJJ4VTjasnmyrG24KASckDPA796htPCESXa/atTtFic7f3cu52b+6Am7H17fpXV7ZKOl3K2xh7N310Xc2Lh9M8PoluHaRgMtBE4gBzziRhl2x74/DpSPqniDVC0thNb2zRxgxQWt4oLDIGCA+7oc8+lYxgpfvJr0NHJr3YmHq0GoaVqEb3VyJtQI8zKtuMX/ANf/ADzVRJZYIPK86VQ4zImTg59R36V0xSaVlZPZGMm099erLeiaXNql/iGA3CRrmVcjJGf5/SvTNISx/swvp0CLG42lAmMN059TxUVG726dUVTWl/uZdGbfyhvbAUcA559R+B7+mKUTFp9sbNnHr+v6fpUR2+RoNYEybsdD37U95S1oJkQuFIYZH5Z9844/KjqI5jxVA9xZtLNAfKjf5UbIbfgHp19c444z61l2+tP/AGbcyCYi3trdk8vadzytjLk9Dxms5w5k+3bzGnb1K+m/EO90vRU0+a0jubVUCxSGQpJGD23L1APb/wCtUs1wx0GO71pZbvztyWVrvISFeczN6nghQeuCaqdJJqXWTsvUSm3p0W50XhzQhqFtYs5aCw0maSfaT95lCYB+r78/jXLajZ6l4g12XUjcRL54LKZSQmwMQexGAFLY9xjnis4ySk76pX/Epp2Vt9LfI2NNkgkeSGG5ksoVG6S4uATKT1HUcKc9B1B69qVbSwuII1s5bQzI+VZpmjRsnll6EN6j7p644xUWcNe71sV8Xy2G3mi/2pcyPcyTWtypLxywnfgZAJwoBOR7Z7nPJql5a6d5lxdXFibsFtiWqkSeSAT1VQBk9SecZFXzqSUddVo/IXK076eaMCXRJr+5jubJU+yyIDJOx+SIjht57HPOOc54p9zNYxWr2WmrIzttVpy/zSckkkdAOMY9+a3u5WitofGZ2UbyfX4TIGS/7jKKDy3TGKdLM0rrudmVQF+Y5wP8810L8jFnVeA5zb6wy/JtZCJC5wAuR0Prniu12wR3zNbttNywJHIG/gZH16H/APXWFb4r9Lam1Lb8i3dndfMqs21SAB/CxA5qNt6lv3ZwB8hB64/z6fzqYbLroUPdu/Axzj1HpVd4RekC6ZwqkHCtj9Rz39aa3EJc2DXTQSRXc4EBYqhYOCCMHlgT0+uK4jWmgFhrYtoymZY4/LJGQQSCcACs5K2211cb/HWxjW3h6++zR+ekUQmA/czyhGIH8WCcrjggkc+/fVuNT04qyTaiZIo2VYhbws+EVQNuWIHG0fr61U5e0doLm5X8iYrlV5O1zodZ8RNYeAkWEPHPfoNoYgttxhenTj5vxrJF3babqENpdbXs/NeIlOfLQHlCfdhn17+lYwg7S7ttL5Gl1ddra/Mk1q007VdXSwt7aXygAI5IZsE7ichtwPQgn8elc4PDmtJG0un6bdNaMMgsd24eucDP1ArWjPS0tmr2sZ1FrdXuN/tBrXYIZbuxv4G3MkzfdIGQRwDz6VcPiy8vplka20+4uWOd7LtIPrkEEn61o6Skr7dpLsJVGnbfyZHfXWoXTl9SMFtbzfejg2Bhg5ztHQ9eT61jSbQriJljQ9WB7egq6cVFWjfl7kzber37EUPnX86w2yM+F4UdW9zUxtpYXMU0bI3oRWqaTt1Is7X6Hpvg9beTQ0DQ+RcxAbzjmRT91s+hHH1HvW9bRxJdLkAxqTKSTkLjofpXFJt8yerTsdMVZLpdEEILKsq/ef5uB0J5I6+v9aeP3bABVCEfxc+nX0rRaCLEu3K5GOcZIqtKMIzFWGMfXjP5dqBFjaQFB6EcA8964zV1jilvtU/dCO3fyvJIGZmBxk/j+maGua67oT0+RyH9vaksrsLuRd5Jba3GT3qDT7B9S1eCEN5nnON5A+6P4j+Va8kaa0WiWrM+Zy37mp4t1P7b4hjjjIWG2wAvQAfT6VnQ3sE96yX0bNFICDIBzGxOd3v1rKEX7NW0la/3lt6u+xeivZtMvElD7xuLCRBlSPr9f51q6P8AEG6tbVIJJcKg289gKnkb96OjtsUpJaP7ylPcDxTrikqquAHeYDJVR+XfFZ+u/YLdYodOjRSvLSqzZPtyTxW1OLSSfTciTWr+4zAhkHJJ/GmNACCPQ9a2MS1a6pdWUAhso1jdjy6rl29s11Om2ltaW8UutmO5vJDgROpymeefftgjjNZSVtt31NYu+n2V0Ogi1OOye01GGEi2RDBJEPlLRdGA7HHB7++K19TmjtI444bhZftLec0o/wCeKnOD9eB+Nc8o2fr09DZPsXY4wwfHDYzkj+lRSsEfDjnpgYOfc1WgiS5lAOCuCc4xzSIyMhMmAyg8fj/KgQ3zC7PuTIAJOOv0rmNSh0u/imeFIftUw2opBLsSR6f/AF/5inrfT5g7W1+RxF3p/k6xJYpKqpHIVDyZA68E+natzw7po0mwvtXuiAyBoYCORn+Jh/L86qrP935yWnzM4R970OWks76/lluobaaVSSWdUJAqmsBYkMCD+taxa+FPWK1RLT36MswNcWw2wTSIW4IU9c0y5gkhUo2fMBw27qD6UWV9N3uK7t5LYlsJ5LWN/K4dsfN1x1/xodHnkMkmS55Jx1q0hX6DhCVPP61s6d4Xvr63WVItsbkAEnqM4z9KUnyjSuauo+CnsolvtLlkk8pSzIQQxOO2Kwf7VaQfvt+R/CTx+vfms0+bV2ujT4NOjO28OTKPDSXN8SED/KNxBfnpjPJPHp1qqzXkuqpbXQj23TrLHlj8qhgSoz3wP1rB7uTvaL0+Raba9TrxKvl/IvIzu55qN33AqoBYj04zwMfrVIZ//9kA08rLU6w1BaxTSspbpBU1jFNKy3OMFTeIU8rL26w1NaxTmMpTrDExrPLKilusFRWoW8raU5gRNYjRy9rS7DUVjFHbylOsdRWMU8tK04w0NazR29tToPk9qFPK2lvcNTmoV8rME600NexTyutbqDUxiFPLyluoNTWs/9j/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAEAAQADASIAAhEBAxEB/8QAHAAAAwEBAQEBAQAAAAAAAAAABAUGAwcCAQAI/8QAQhAAAgEDAgQEAwUHAgYBBAMAAQIDBAURACEGEjFBEyJRYRRxgQcykaGxFSNCwdHh8CRSFjNDYnLxF0RTgpKisuL/xAAaAQADAQEBAQAAAAAAAAAAAAACAwQFAQAG/8QALBEAAgIBBAIBBAICAgMAAAAAAQIAAxEEEiExE0EiMlFhgRRxI7GRwQUzof/aAAwDAQACEQMRAD8AgZnAX0OhhUBG8rHI9NeBGc75Pz188IjBHQnGpVpwOZQ95Y8S94ButXUVjQ+K7pEmUQLklif7Hc6rpp5Y3l/aSzzQPISD4HOSrfwcoOcDfpnoOup/7PaCnpqGevqaDxmTlKcqczEHuR+GNumfXfxx/Z1iEVxpFkVZwEeNTtucjb+Q9tRW+LeE9/eUDdjdFVz4M+HuUUNLdqYx15Z4lnLRthRnzZGB120/4W4Sr6mQ/F1MtKKVfB5o8HnTPMQp9Px7aj4LVWCannigSrgTYpIxwB036EA5ztrp/C8q0NqjoYl5RCMNzHcnqc/U67qrfEoyAZypS2SI4HC1iglWoWhhedTkSOOY59d9B3+SukpXeiZJJR0STIG3pj9NNjOWG356VVc3hnKlQB9TrK1GqYkMevtH1V54M5XbLT+2OKmob4ZqeUg83Iobf9NdJ4bgppVFWkqTkDwllG5YL5c598Z6emoTieCehrqu424sqzKql41PMrHPNg9vu82fnqq+zWpNVbT4xkd92846npt7ZB1db/lpVk4EWMozAwji+ERQtImcKOYn0x10svtXLV8P0NGkkBnqEDLSsyh2X1LEgKCM46521V8RUSyULldyFOd9czh4Yu19gauVo4zHmKFSQoKLlT+Y0OkGcrOueA0IuXC9E8vNPM0cSL5+VhhDy+XJ3wuT6HoRpJcrR+wKuAR1sVZFJH5ZIzkD1/X89UNFZrxUVEkHhfFR0/LGY+bkjYcu2emcE/rpNxLa57anhu6MI8sBHnkXJwVBPXcj8Dq5S7Da0UwC8iWFg4dorraVNVJI/ijdSds9iO+3sdY11NNa5xHOTJLFtFMQCj9AFbbfqPX+ev32c3T4m2rE3maM4z6arb3QRXG3yQyYw46+h7Eai3DGzrEPJzmcGumfESpSMoHYknGBnJI/LGrDhuulqKdPOzcox16alL/8RBXzUkvlEUjZUdMk529t/wBNNODpV5mSQZGeh6adqUDUBjBpbFpEF4mjMN6kjc80UgDrjtn0+oOmfC32eVt7kFRWZpaMbknZmHt7ap7fYrbc78tbXPiOkQHDDykk7E+409q77Gr/AAVOipFk4Kt267/ideTVLXSMdzpq3WGfrbS2+xwiGlhEEZIG3XP/AHHv31pcbiqw8zSsDg7AZx/f++p64V6MA5VuXG/qdCyXuNFjhz4kIXYDqP8ANtZBaxju9zSUKDAuKbnC0Swo4cEYyB/Cex0huNlit9LFM7gyyxo4w2QVI7d/b6aPT4SS7o9wpJTS1PMI2AIVW3xj13x+Ol9bVzV9IaWABSXCZBAV8H1PQdD26a2dOGVMH3Ib8FojnUyNGysHLD7q9RvjfT+rVLfQmjDhYQu4UgSTSYxn1CjJ67Y9zuTSWSht5heoYvOg5tjkMQcDlHfJ9fb6oJ6iWqqJZpScyHJPt205GWxuOhEOrVqc9mfqe5R00IhnpviQrhlDysFUYIIx8yD9Nb0NVQmXw542WJiD4inDL6e3XH4aWK4WQOoVgpyARkH5jT3hWjo57ghuFT4NOm7IVDeJ26Hb8dOu2rWcxFWd4xKm132CsljpJqqWcFseIcqI4+yqOuffP5DWdVwVWVVTUV81wWop+TMU5O+3TnHp66eRVnB9sCJSWuCRh/G683669VP2iU1OfDjjijXsBgHWT/JwcVgkfbE0hSSMsOYgv1me726klTwITHiN/CyV26np2B6Drk68GS32GkE1terqJ1AUTGI8kmN2Bz2xk4B/HGn0P2iybllUjXt+NKOtjaOqpo5Y3GHUgEHQtqRjaUOI5amU7vc5aIsOQfbHtphZrJUXi4LTU45R/G5BIUep/DVRLwfR29Hqa6eepKsMiEAA5OBvuTk+g1SW21LR0SPSRCmUjLLIxbn3z07Z9ta76mtVzmZK0tnmD2ehq+G2Vp6nxopGCOTJ930AB6Yz29dUFxgp7xTiikVWjfdyScjHTB9c6k6mgvNwklejq46aBzyvIcvKRzdMkYAG52xjHfSKj4tqrTUvSVoPiwMYg5OccuxBPQ6yLq7CwsTn7iWKw+k8R7auD3tt0apqBzNDjwRCniKrc2FIB9M5II9868R1tda+IHpbk2JpGDGQ9HJ6jPuTplQcU0FfBEiSJHUsQebPf19NM7nQWuopmkutOp5FDGdG3IHQ5HU7nHzPrpT6hXGLRgiGFK/TGtETNGN8bfjpTxLKaWI+TbIyfUaL4dnpq6kjemkZ4ojy5cYJxtvrfiagast7KmxUHt7aB0DVZE8Gw+DOe2ioa41Ev7QqXp7ejZPhkq0jd8YGTtsfQH31XcF0ohuVRFS1DVVLHApilKAYy52z0J2/I6xs6Wa421KSlpWmSDC5MJClgN2z7nWFTVi1cWU9qXw4KSvH34uZHjwucZzjBbbb3B6DWojBUAA4iXBZiZaXQKbfOrLysVIG2ud1NN+06EWmnaojZG8xjYhSzMxIP0AO57nVJa55iZDJUVJo5duSdS5+YOfL/fprzRfs61zV04HnWTYtjmIwMZ/PUosUtvzC2FRtmUtObBYRSwMsZZOUBG83Tc5x1+mua8UXM1MBDTSTSMSSWPbJP89OeKuJ2qZGVSQQTjB1AzPPcKwRRK0ju3KqqMlidM06vbZv6E5btRMezK37Mal/2jVUwPVBIB8uv6jXWzhqTftrmHDFpgsV+oKQzB7hKj/EqrZVAQCFz6jG/wA9dRlUrSHBA8u+l3YNxZZwAqgBnHPtDpT/AMSlkAAkhDfmR/n00Jw1/pGYTfxHqN9v11cXaj8eqlqUSmGCqOKiTlEqHPkHzIBO/Ye+lVzl4QasmpoRV0cwAAMSh4ycZIAJz3x6aeG8lG2LwVfdPU1e0Df6fmnaVeUIi58Tf0+Wfx1+oLTcFvDNWp4L+CWaLny4ycc2BsB1HXqNJ41kgkmo4BVTVVV+7pxFhMgnPm9QQMnfG3fXQI6VbRbo2fAnEUYmOSwJA7E7/eyR8zpQStK8nuUKXLdSR4gRo5VpolmeV2CooBGSTt8++qPh7hGkpolluGJ6jHmVt1Q+mO/114tVAGqReKvlcvn4dSmMD/cfc+509knWKEtEC4zvsQc6ka0dL6jwDNa2jtlVRilqIi0bbGLkPbp00rqeHLEp8X4GCNlDHzYB6YJ/DRprPBQzSTKQxHKCNZSMJkJLE+J/2j8cHtrn8hx9JnggPc57xtaXoitZHzFU5VGFyB7sdS8lLU1cMtTHGuEHPKqZ8gPc+ny11a4vT1cTo2DGBgqy7b9saik+Dpb0lrrIA1PG4w+wWQY2yds756nV2k1ZKEMORJtRT8sgyNkcjYbDXpJZFHldhro9VwZw7dgWt1caOUdA37xGPsM5/M6lL5wbdrGhqJUSem6ePAeZR8+4+o1oV6iq3gHn7SRqXTmLmWp+Aiq2mYxySNGBzb5UKT//AGH562sVJBXXaFKyTkpgeaUk4yB2B9TpvYLJUX+zw0aFIljqZJDMx2UFUB269ttX9n4c4UsEKidRWTD78k3Q/JemPx+ekXaqir4k8xiVWNhojNfQVCCKCw0vwydPAjBfHuRvk6wFjslzdIqKqelqZDlBJll6dPX6/rroi8RcO0sLOLfyRRjBdaXygfMDS5uMOFqwgpTAOG2PMI2HuBnOpx4VO9WP7B/7lHlfGCsk6q83JJoobpQCFUmjYRwDKbMDvuTkE566rKmpp/hFh+IeEzhghQcxUcpOfw36+mplJpqqAT1tQ9PTBf8ATqYwcekj4AGNzt+umsr0EVCaWokEFWtODECx5FBOQMgcu5O2O2nitDywiSWAIECia7LQ1lLFzVAnAgiUSA+FzABwzHuAAR2OffbGn+y+43CtepuNwp6UuSxRF8Q75zkbAfidK7pxFU1FDTxLHHSAKFZ9ws+CArg42IIPz39NOYL/AFVxk8AXBk8CPkM4bEUhHQk9if5jftoG8leWReYS7X+JMMh+zLh+3yLNPdqkuh5iQ6oNvof10s4rjp4bZ41sr6iogVgJVfBUA55WGAMDOfx1lXYlMiXi4ChlIMcDM3MjMcdcDpgnfI6n0OlFutlclxgoorjSVJkcRPCHblkU423XG4Jx89AldtxDW4hErXwpzKb7Mbkho6ikMgZxKzheYZxtnb06fnrozqs0Dc2+249dcmejtPBPEVLJR3BqgF/367YCHI27kg5yfltrqNNN4icvX3J0u0BHIHRnM7hmKKeqNFKtLBSlvDAVfMFUL29/y0v4ltk92CVtTTopo28WLwD5xjqDnqvTbro+8utvrEqSp5G/dt3HXI/z30bQVsdRAACGbBBBHX/NtRJcRmsmPI6YCYWWrhrqZXjbnSTBB6aQ8bUdRR2yWtiUcsZBc53wdv6ad2KjWhqnpo+VY1YvCobcKxyRj2Yn8Ro+/UK3C2VFM2Ck8TRn6jQ1qMZPWZx2IbE/n5ErLxWCOnjZ8tu2Nh8z0A06Wah4Xj8GhK1V0lHK0+MiPPZP69dP47cLRwzNSQSt42CsvLDu/Mduu+cH8tSjRWq37TzPPPISCiICYzjHNzZ3IycAYGR1x13yFKhVPEjyQcnuPOD4RWcYxtES/gQMWmP/AFWzuf8A+WPprpd1nanpsK4ywOQR01B/ZXSu9ZWVpLGKJBGhbOCTuf0H46p+Jq9Y42UAEqCSSemsvVNgkCPrBbucy40rGkusQVjhFxojhy3T32XwzQCWRcYnCldu/Mw2/InW1pkt9TxAGuMEU0Oct4oyBhWI+mT+mrKs4noqCLFKkcRVeVfD6AfLH8vrpptWuoV45nVrLOT6jSC00FkVat4ohUrHyh8E4HoPf9dR944hNzusNFFMTA8gBXp5e/8APvpHxFxZNWhQ0rZHQKd9AcLM0t7FVIGdYV8oA2528qj8z+GhShmQu3AjTYqEKOTOnmaNoM0zrIABhR/DgYP0HtrzJO8TeLLLyDADco5ifTJ64wP10ueZKYCMEo4XIJXBK41jJPRGMP8AGtz5Jwd9vb/O+oAmOo0nMbvMv8DxKcZOepx7HXh7gjKWaVVOCCQc/hqanudIP3bdhu/OSfp/70orbsZCQh5V7Y9tEtTtwJ7iUNzu8CRtDCFkHVmfcnHbOpK51619O6StytGOdF2Vc9PnnB2A0M9WzHdjptwnZKDiG4zpWs/hwoCFQ4ySd8nrgDWjRSKzlpPc2RgT7ScNXeltEd6UCaAqHeNXPMEx/T017sPGtTTStTVAWWJgQxk6MPfV7ViHh7hTwWcFIYSq5HXbbOk9Lw/brTwuVqAF+LjE1W7bMwxkIvpv/XXvhbneOfxC2lcYPE9xwUs9K0lmmNMCpXwY+QIrN0O46ZHbXuhoaOpaGprlM0Cv91JwQzjbdSfujtuTpHwzLU/tyW10FujendBI6vK4wmPKSd9yG7eumNZYKS1VrSyUcweoOI4qicmIE9TzDfOPXSnr2L+R+ISNvOPUqrxVwpaz8LyGJVyAQMH21xm5zJWXIxU4VeZuvQL/AG05udTcLTVm2SCeCjkORG78ylT15Scgj0O+tKrg2GGmS60bvPThgZIGGXAzvjHXbbOO/bR6dQjbnbvqDbWSuEEpLheBJbfiFp5ZYmiEZaILyvvhlXfIOO+42Gp+632S6TUtJLSCjEMQp/DJPOUJyuTjsMdu+tby0lXZ6aOlETTF5I4hGgUmNiwGD2GEYYAGcnuNScVLUU6vMEdolyFqEQlAQdiD/nXWqEWZxZjDhPSw+JAyzzxBjzLzlQwxjGx7HBzvnGuo2r7P7THbUq5oZFMp51jErYQdu+/11yS0yLU3Sjiblysq8rDuc7fPfX9AV6zVdlY0btlaYvGEOCzY8ukahyiYXuFXzzOMcR1MrXfw6eWoK85BKyMS2T298aobXTVFPwykE1WtDUzZaRyh8Y9c+bIxhAxPTOAPXXqy2gUEVRcq0q1zEZdYnAIj2Pb5jfHt7jSi9Covle6UVQzzwwqXwQBvhXPsMAHb00mqw8V9/mNZfYi+qhRo5zJIXiUYjcjIHlOAG7kNsf7HXQ+C+IGq7RFDO/LPAoRubq+Oh/DUdQ2i43C4xWmGRBQxsvP4hAaUA824G+5yRnTqrt03DPEUFSQvw9dzCQIThWznYH57aHWAFOO4VIIPMtbtTrcbZLC7YLqQpz0PY6krLdZopHgmYJNAxSVM9CP5entqopapHpxhyx6dNs6guN1a13qnvEAwkuI6gL2YDY/Mj9NZQQWnA79SsNtH4l7b6wtcYPJz5DIOU45c4J/TTSumEdGzOOUqCT2wNR1kvYaFJ1ZWYDI9TtsB/bTK93RxQuCpJkUKR7nbGvM21Me4BTc2ZFXOaxm8TU/J8O0oZ2ljcebKk7H+EkkDoNTr0IEzFfEaFZDGeWPJGMDlDdTsQPrqjoeBYZp5bhdbmq0yueSOI5cjsCT93bG2+sK/iEWKsghslMaemgUvIJBlnYkgkk79hrSS4Z2qckCKKcZYToPDVoNk4chpli/f8vNIFGfMe2p6/wBpvVw5xT0Mr83rgfqdDL9pdfLCGVEHpnuNJLj9pl8UlYWiUlv9mdtS7LLbPp5/MZjxrkkYg68FcUJzSi3Yzvjxkz+uvScFXuZXkr5qahij3cvKHbHsBnJ+o0I32g8QyHm8aND7JtoD9r3e61qxeK880r7RqB5jqvZqeyAIIsq6yYRcOF4lZY6CskqahscqPFy8+emDnV1wxwylgoWjqCHmYh5GRupA2AHcDJ/P10HYrYReYqqrlSWWmj5peTzIGJI5R22X01SXGrgPNvhR93kOARjGkve+3DGF40DZURFeahCuA7ZP32dCBgdvyGpG5VUaTmOLlAUYJU7H304vtxVWMnw6eED0G+/v+n46iJ6rmkJx37a9RX5DmdZxWIbPVtIQWIJHfGM6GaQnqdCNUMNYtI799taC0mSteITLMM8qnJ9dX/2aW5+WquEq8tOoChiPvEbnH5akeFuHKniO5rTRApEuGmlxsi/1PbXTb9VwWa1R2i2RtnkKRxxgkn1/nk/PStQQo2DuFSCx3tJ3i2/tc7tT2qJg0ZmVGHzIGD76+8apcKu701FCrTO0RYIoJ5QCQPzHf20tsNmZLxT191LoRUr4URBDSMG6/wDiMasbrVeDxNLS24LJcatRGXYZWFANwR88n8NJUJWwH2jiWYHMw4eoJLHao6uqqjS1ix8siPhjyqx5fyIxpLxNxT+2Kbw44WaJCf3nMV39QP6516uEFFDVmpvdykrJ/wD7Ee7Y7AnovyGfnr49utrUYuFdRGjo3BKIZD4jj1G+w9z10tiu4viMUAACAWl6672l4ZwKmKN+VIpdhsMkhuxGR9M6cQRz2+d46NxJAuyxyuMAb7DPX66Bq7xRUNvhpbXOaeFlLRlxznPNsSexBDb4/iGg7dPVyVHhvcnYGItzxyAMrb4wR1Bz3IOnrUliHiB5GrYYMq2tRjrpRUfuIzDhXp8ckaMSFZSNsBnYnp36aTtHXUlH4L1yTSLKyiIv4ZdOb29Tkb98em6y03qt8R7R8WZI3fMZxs/N5WUjqAVOfYg6Nrb7R2utdvhxUVUJPhl1352wcj0BODnr16Z1ft+/UgDe4gm4fnpKtappI7dE7c0XjyAtkeijJO+O23fXW+D79GtBBTVTKrcvIDnY43wO+dyPpqJsNguN/vU1beudoI0zytsGJyAMdVxufXf33U19S1kr+TkaMRnlkj5s4YDAIPvt88ai1DhiK1+oRyJwWPU6bxZa6Cho5rxFb56pw3My08nKyr3OevLkZ2+fy5XcbhRrWLX0EUttlIw8Cylg/wD3A9fxGrnhnjgzlRVlTGTylgwx7ZHbRs3AVlq7kLvQrhhlhTF8Rs/UEHqN+3T5anS/B22cQ9pA46g32fWy4E1FwrkenjkVSkTHdm3y5HY4wPln10F9oNanw/KDhlfmXJ3B9tVVHLU0FGtFPDKJvDLPKcsvMd8A98Z/LXK+PK1jXCAnLAkk57Z1Pk3ahVHUdwiFjLHhS8xVtthYFfFxhwB39Tozia3RXew1VMceIU548dQ43H9PkTrnXBFzMVx+EYgLJuM/nrqKh5o84yCMgg50N1bU28fqeRhYmZy7gu6NBe6WmlJK+J5ck7Y10a6U7Vhjip1JDMDIwOeQDfJ/LURXcPzW7i6O4QIDRS1GCwG0bMNwfTrt9NUtRdXh5UU8pUYPrpuqZOGUdwat3R9QS22+pa/VFI9aXEGJFbmymCuScdyD/f01MX+ALWzTSyFpHbmw38Y6A7bfTOqWnqTU1FVV045Z4wHiJbIYqvQ/MAj66QcSutypo7vS4Ef/AFYx1Rj3+ROnUlWbIGDOPkDBk8KnwAVU5XsPTQLzO7FieuvTS+I+GJGOmsyGJO25O+tVEA5kDOTxPaCWeRY41Z2Y4VQMkn210C0WOKwWiSqlQtcJEwJMbJn+EH5ZyR7jSfgW2tLd/ieRWWnQsxYHG+38zqruldFV1aRR4MEW7YGRjPt6nA1m6287vGst01Y+ozailNBQJGS3iNu+Dy4J9uv+emlt0u0ca4EhYk7gnONDXC8eDnCjn5fLv93Sy02iv4luHhU45Y8+eZh5V/qfbUSU7zk9Sotj+4quFXLWSEAnHYemgJIvDBLemu1UnDFqs4SGKnRnRfEMsqBnkIIzueg9hrm3HCx/GxmJAu3KSAN9aVN1YYVrJLa2YFzJM7nTOxWGsv8AcFo6RAWO7ufuoPU60g4ZvM1RBALdOjVBxGXjKg7Z6n23102GjoOBeHhCH5qp955MfeYjGPkM7D+uqLbwgwO4iukk5abtPbuBrCKSmTzLkO5xzSPjqT/71H09jut/vsNbWBhSsTI7K+6gH7pI6E6Q3q71V6rHkdmYD7ozsoGqOwVtdZ7MWnZjLIpaOHByqZ3Zj6Z1EVdPmezLEKudvoR3w9V1BppKq6RoiwllppakYZgT1J6kY/HQs1TbqqqqHN7bNW4aWKlpixBAA2bqRt+ul09mrrzbnrpJpHczlIQASJRnBIGwVRjv+WjKCtPDtFJR0bipqmYlmUZAHRQT7frnXnAC5EaoycQuhr+CY+WMqzco8zTJzFz6k9vppNxdRXG9TLVUFVBXUq7LFTk86D3Uj9NOJuB43pWuVTXRid155IY0CgH0Gh5haHo46WzQGK4xDPiI7ZHfzdc5+W3tpJtCMCvP/UMIrAg9RZbOFb9SlDJDRO0wChZyGMYAx8uh7adW7huWyS1dRc46OdSgeEwNhQ42A7AbnXyy3VKipaCui5K1RylGyFk9cj1/touCOs4krFjrIWpLfTOMQ/daYg/dHoP8+XFuuLFWEF6kVQRIm130wSIqwF6iVh4kgChlXP3VJG3qT2/PTK6XmWaokSGkWcVYUySgYdh0UoAcjG2evTtoXhjwHglFTV0lLEQUAKAySsN/M2CyL0yRj9SGHC8kdw4mgpZJ5qoQsWjnYBVbGMAL1A69TrYtIQZzMpBuOJf2a0Cx8OLTR7tEnPM/+5juT/L6DXH+JK1LlepyWIC56DPMR2117iS6y2yzVMkRCnkPUZ7a45aY4J5yKkSN4jecROFLDPQ5B1k6Pa9jXNK7t20IIHFVyLMBGoTl6fL3ztqrtnF9ztMcI8QtAfuqSeU4xnGdxjPy05P2TVddzyRTQQhjlRIzFgO2cDGdKrhw7d+FalTWqpiWMxwTRnmUMSCfcbA9R31VeKrFyRF1BlOMyutvHdHXxBJFwf4gzDbU9feFbff6lq2kuBpnbGUkHOpGex69Pn9NS0lRH4hkKBXGSXUYJ+frrxHxEyxc3K4f2Os9NLajb6TLGarG14JWW6exXNkWVZWiYFZEzhhrqtlqTXW6OYPyxlc7fxfTXKZKyeeNppsMrOQPVTgdfY/yOqbg6vMcRAbIDEEZOR3B/PVWrQmsM/Yk1JAYhepZy3AUZlgqAphqVIBI+6//AK/TUfXVRlq5MY3OAAf00ZxVVNLRGVW3jKsCNt8/0zqeln8+Q5GPz1JVWXGY5iFj+xSJ8RPEGAWVR5RvjB0medLNfamimj5qSfcKehDf4RrSw1DC7KqkZKHOcfp31txJVRUVbHUGGObxFKEOoOB1H45OqasrbtPuLb6ciTNztDUlYUiBeF15429uv5a0hstdJQxViwGSGQsqFfMTy4zsN+466oOG77VLT1ENNJhkXxFDb/d8347aMuV8ne1SNXwYZpVCHkVCG5MknbJwTjbGcHfViXnlGHMS9A+sHiDVVfUWu0U1rilikeIEyAJjlyT5Cc4PUn++dAtdJoIcOApdAeYEdMbDp76P+Bo7vEnwKSQ1LrkIVPK22foNxuNUVg+z+ljKz3JRVSHcx9EH07/XUZZGJ3dylVZRxIWgo579WpT05ZEJzLI/RB89dhsEFDaqBIYVCpGOVc9/r760NvpKNMQ08UKAfdjQAD5Y0srKxYTiNQBj89S33ncMDgRyVAjk8z9fruoZsv5VGDvqOkt9POkt3kIlFOnOkb7gH1b1JAU/U6NqXSe4JSyurROjZLPynAB/PbQ1umis1d4c1ZFU08zhFVST4YG43Pf5emuUDJ3E8mMf4jAEcWXjhKl/h62BoZFwwZTtoq42Ohvs6TtXSSYH/KkOUJ6dsEameKuH557m1TT/AL551VokjBUux25uhB7bA9xrErc+HII4XrI/jc4MCMWJz2J6Z+WqGoYfKs/oxYtBOGE9LTWi23l6SstQgZW5S/jMVQ/7tzuMeumDW+s+OmNXUxtS1ShAkRLPKmchFA79fx16lWOsr6aBoIqivc8wRj+7DAbs3sANKqipqYUudVLWKs8blIpskGZSSCEHYYBOfkO+qa87csOYpgM4nm+8U1qStbYQ9LBB+7K5823qfX10ZbqCvnFvt6Ts6zMJnjjQAqp33ONzj19uusqVLJdbRHTXCD4Sd1D/ABkXnJOerD56ueFrbFSo8vxENS7sFjkXceGAAPl3z9NBawfAAngHUZzxJrii2VsNvkliuM7LEhZw2FBHbYDb+2jOAeE46WwNea1yk9SpZC/3UTsT7nr+GmXFkfjU9XTx/wAcRU7dNEX74ZOHqWOrrFpbeijxMHBKgfdA7k6l8gz48TwDHDZnNau+0zzyu8ZZvEITGzL7g9tUfDvF8VQnw9XN4U52Dk4D+mffXOKiVZauWRAQrOSoPYZ21+DkDV50q4GIsakjIPUIaYwTjwVaMx5ULjf6++qXgmuqpuL4JqmMKrqw5liCAnHfA66vq5KKtjmmlo42mp0LEsgLKcdtK7bFT0XD0tfUSIamoBkTLACNQcqB88DOlWalDUZxaSGDRjxpTNPw/VBVJPhk4H+e2pjhW326w00VfVBJayYB0VukYPTHvjvq5WRLlbIXHKwmTOOoOuVVnPbrnJT1/P4cBAVBsWHbf5az6w5Q1g4lS7N4Zp0+1cb0U87UxwsnYZ05mnorlH4dTHFOo3AkUMAfkdcvqeHaC8Wxbzw67JUxDJiEhPNjqNzkN+usrLxZIIxHVMfEUYB6b64y2ov+M5A9H1DFVVjccGNuMPs7Z4JK3h6IuCCXpgcke6+vy/D01yto2gkZJEKspwVYYI122z8TAzAeISp7E4xr3xLwnaOMqcTxMlLcANp1X7/sw7/PrqrSa5R8bODJdVpXU5nEmlZIOQD925yCfUbaecHVPJUVCnLZUEL27/21jX2iv4Yr3obrSK6HcKd0cdOZTrayQRx3acxRvEnKPKwJwDg999aOoKtScGSVAiwR/c28aiMaDJIy2eg/zGpZpjy8jLyuo8+fXT26BnRkjLtKwwoUbE9tTlU6NLJLEw5XPcjOT129M51PpU+JjrmxzGFjkH7ag8qkkN944A20ZxQIamphhMoCBxl1GRjpkaB4ZUvdkdugB5fLnfVna7NBXVjXGuRXUn91CwyMdiR+n+Y4/wAbgZ5AXWIKu2U9rjhuVkWc09PjxJ5gMSEjsOmCe2+l9XOJKdYK2UzRxSNhEIUo/cA75G4zt9ddC4qs094sq09I6q0TCTwgP+YQMdfkSdTqcGSTRoWpmomZdzIwlDZG+2PKen46apB+TdwipHxXqAW64VNnpUuEVMqwzSIgWVixK426AbYB/vtroNhus8VpNRdKiLxGQSeGBylAVB5SD33H46irlYK9balGtSZY4TlFxtnG2D276QGqFPcFDyzL4cSpKZHGSe+Ou2+3XoD8kBQxJHcYWKjBnU667o8avE4kjcZVlOQfrqbq68GTmJB36HvpbDdxVUzBebEZI3OTjsc4A0vepkq6mOGHLvK4VAT1JOBqOyos2MSmphjMY09ra53BrjVSPHQw5RPNgyMRvv6Y6/PSa9U0tZ4tdSwGOjp8AyMTliTgYJ3O+mfE99aKpFjpQxWkVYcr/G2NyPc/57+rpFLR2yi4VpSaisnIM+M45ic4HsP66uorZTuboSa51IwJvwzxPUNQC31k2An/ACpeXLRk7Dft10Atqno6hqmoZ6qqlflpE65yfvnR68Npb73FRJUpJH4ZeoYjBTA3+nTGnXDs01xr3rX8KZQSKeQkFoRnbPoD5u3pphsUAsOoABwAYtaKDhOkqHnnSe81UYQxnfww3YfQjQPGtKsRorRSUzSVccQaYplmxj7oH4nWs6UFT9oMVLCslS8c/MZGl2lceY527bg49NVnwlFbZq3im4solmykUbEHkUeXb3ONIdyjAkxigMpEiLu0NhpLS1JEUmqKMGYOpIJOD329dC2293ajkWeiEi8g3CR4Uj32xo/iyluVz4gp2pKGomApo2EZXKRkjffoBkd9N7ZDXUlJ8Xcbm6tHhVipmBVdtlJxjPsNLdwqBiBkw1U7j6EcW+/xV9pFXXU0VO5blXmI/en8Nh7/AD1LXKolvVHVz12HaMlIIx91AvoPf+WnFVUU7LJVXKjmFVzZhTnwjR9+UqcE9c5zqdtVfA9wnQJ4UbOeVG25d+mkgv8AWRyJ1iuJrYm4PrABV29I5eQKcytgnG5xnU/xJZTaa13p/wB5QyNmGQHOM78p9xvpxJw4LZOlxpoJaymmQH4ZYyxO+HGR0x1BI/TSyeriYVtEizClKlkSYeaMjcZ+R21dXvD71ORJiFK7SMGUHC91lqbTdKepkkaZIBGjdSRhgPwxjPpj01OVl6qJaNaRWI5RyE5PT5e++ru7cWWe4lfg2ihnOQ0keMsuDkHQdqrOGqKkWOutVPLUKx5nljXLgnYn6Y0kWJ9bL/8AITbigAM8cEcRIscdHWyFPBACqdsjsdF8dWQXikNfRYadN8D+Iempvii726WuM9BFDT9MCMAYxt21vZuK2KLG7kLjB750l1s/91YhIVI2MeYn4WvD2K5KsjN4Ux5JVz099F8XUkNNc/i6U/uKrzj2bv8A1+ujr1Z6G7Ka+kdYqhRllGwfHt66XuWr6L9nzSKrZHhyN0B9/brpotV3Fg49ETuxkUof1FlJfJqSRQ7F4+g9V1eWDidZOSMyZXYBgemoy4cKVtliFUKiOTl6shOV/HQUVRPEFnCcpPVsYDf30V1FOoXdWYdOotT4W9TuNXQUvENEI5WUvGMwzYBaNiOv9dQFxst0tVwmqLsfEd1VRPuyuPZvXp+A1+4d4tkQrA+dtzk776uluFLdaFqarVXjcYwdZxtaj4OI405G9OROc1kkVstEtXMP9RVqyUqE7qp2aQ+ncD3ye2pyyWeS+TSqJRFygEZ2BJO2T2HXTvjfh2azsssLNNRynCydeU+h9DjQFjp7rUv41HQyS4RUDhCEAG3U7fjrYpdfDuSZ1ik2YMd0NNSWiX4eB3mqXHKzkBQq98DVDTVQABLYGp4WK4W+rW43CaJufKqiPzMD6n8NbSXGJEyMZHQazrrHLcHJl1SKFlctw8PHRgfQ9NCVd4UAkEgD31Nx3IspYv8AmNC1VzXzLzZHroFa0/Ew8KOY2rbs0sTOmV3+u+pGoammuAaeNpmxgIuwOPU62mrXdOUNt0+ektRWSQzvyYGVxvvjOx/LbV2mqYGT3uoXmOqie3+Ezx0qpnKgRE8nN33PXGR0xrfhiRIqyqubKGjtlO82/QvjCD6nf6alJayecKskjMoGAM7AarIaL4XhOgod1qLxP40mOoiXIH06n6nVTVbRkxSXbuFEO4WoYhBPxRdCGeMFoQ3TI2Bx65G3y1pYILrLeJr69MC8qctPJL5VBbYsPYKCPqO+iL3Gho4LT4qQRoglmZjgIBgAAdz0AGto5FrKZKiplWC3KMpGHy9SRtg46AY7aRfZgY9QlQQqko42p7ilARUVQj8OonYZLORuPZRj899ZcOcPVNvpYbnPMKWR6gAq5wGiGeYEe/XPsPXRFPcqay1LpAkk9ZXS5jplxsNgo9BsB8tKLr+1uJ7tLDFW04COIzysQu25AOPug9fUnvthKW7xyMKIboV/Jj5IbVbuLKdqS2qj15D/ABDtk5YHPLucZ3z9dTlRQXa88VzW+aaRqSCeRmODypGGzgD1OQPqNOZoKiea3GOOmnqbf4XjSc/Lycrbcp2yDhhjGj79cBw/LLJHCqirmAFQe3MCT+f89ExyxI5OJxRhcdScrr7JWVNVcKquent7nlipo287gbDPpnGT10O93EtJSVEE4h83PFAg2QKSMn32znfO+vdz4PioJ0uIEl0oKjOFi8roxBxkDpv0wP7puH2poagzVQ5ooiQqvvoWqTbvE95WLbfUo7tforzRCGrgijfKlJYRgKe+R8s+mkN6oJrZXJVJvTVIDRuHDZI2O42ztnTy91VlqJYaunQ+bCzw8vKCP9wPrpal1oYpXs9wzLb2OYnDZMeQDsfnokYj8wGUH8R7whXzVlJJRo2GDZVvQnp9NjrWjvtluc0lHeaRIapCY2kGzA9CM6F4Ztwtl5Seir1qoHBGMYwPf321jXcKW6quFZUPU1iShy7mKMFEz0JPv89T70DsFbH9Rqg7ORJqujssPg1NreRXhdfFSQ7n3H+d9Y3gGVlqcnccpGcgfL20ouNY9ZWPMQAznfHfTejKV0EME7mJZWVWlBzjcZJHfudau0hQzSHcCSoir4aWdTIEbwkYBnxsCegz67HRVsloo6wfGhvhvuu0Z8y+499MeILvTR0qWa1KBSxNkuNy7f7ifXU6F5VI986dSS65IwIuwBDgGNqC6TjZSwZR1Gt5pmgQPKrJjfJGNa2ayfEWKWv+66yHGejKAM4+ufw0Je6vxKOCnJ3XIxjUhVGs2rKVdgm4ygo+KLUaZRcU8fkH3S2zY9R30uu/FjX24QqYxHSwA+Gg2xgf21I75xouFFRQWPmb8ho00VVZ3CA+rdxtjGmlCu1QxAJ6ab0PEUkABZyUzqamkLYRNh6a/NL4cWM67ZpksHyEKrVvX1Op2/jKhlpxDUxpJGRhkccwP00XU8X22lhBgVVCg4RABj5a4wsrKSVYg/PR9oge43GOOVmMYPM+/Yaif/xiqM7iBKV1ysfo5lxd73PcaNJpk8NWOY1znA/vjU1JO7HAbTC7zYAHUDZQO2lZKsM50FNaqOBxGu+Zr4rbBjt7a8s2fQaHeoRBuQQPfQktcceRfx1StTN0IprVXuF1VWkURz17aDobbV3esWOmjLszAHG/KD3IG+B320EztI+XOjqCuehkEkPKH75G22rVqNa8dyF7RY3PUIjslR+0TBMymGEqaiaJgyopO+42z2x66qVngvnGjPTrmgt9PyxbYAVRsPb0+mgbFSCttdTPJN4VFSDxUp4yCGmY8q82e2AdiT36Z0TXGG0cPyx0UXgvWgO+HJJQYAJz6k+nfSi4LYMciELkdQUj9rSVdxnDy884iijU/ex1OM5OM/roC/XuWrrVp6UGGCDypGowBjWEtS8VHSRxkjkRmPL136/z1UcJcKFzHW1dMxlmjLQiU8qZOcdjvgg76WQobLfqe5P0zHhVhLXVd3ly/wABA0nNnfmOy/XrpVQ0ldUV1O+ZFNXI0jFDynkB3I9Oh/LVNT2rltFzpqLEUM85VJJTyqUU4DE9fU62t1JRpcp5bZHNcpnXw+WJQkUY2O7HoTj10k2AAqJT42OGMl7hV3L9pVaRJIPupJGOw/hG3bproDvFd7BSPLFHJK8awyxynlKuMY69wcj66/Q2m5coaOOioSQD+7AJBHTLHrgd8a1pqRlSos1bWQSfGKxBRiZEf1LHGTk5Gw0trE4I4M9t57zBY4Xt8Rg/aVDTJzcwSRwSu+cADbGktVa7NUXBqur4ggILZMUMBOTj1B0DLR8NWCq5a+orKmrjOHi5goB79N8fXpr7DxJS1FWlvtlpp1jYEJzx87YwOp6k7fprgRgOJ0lc8yhW78Hx0xphRrMT5eb4cA/idKjYOG5h4ogq5V64apiXH4HOvN1sECRRzzVKU8j55vKFXv265+ZGphqqSjqOeJ/GjjOQWXAb6aIB2GUae3Io+SyrpGs9mlNbTWeqQRDPitMSpycbb4P01un2k0FBLK8dFKskwHNykeYDYaS0HFMd+oZ7deY3BzzxzRD7pHqP8+mpe/UklDc2gkYOAoKOvRlPQjTE0wdvn3FPqMJ8QMRpaOGIzSi63yQ01H1SLpJN8vQe+hq+upam4SPR060sA5QkajbA/wDWsrzfqu9VbSzMeXPlTso0ujZvF8wxnVSI7He//Eld0A2p/wAz7Iw52ZiPoMawdyxHpr7U5Mu2MDX1IWZeY7AdNVDqTe5ZcO3Cljsfws8mHUkqvQEHrv8APUvdQXq+RTkL31vESkQ9hoOSdmkYgd+upq6Atpce49rMptmHhONwNfQWU5bOvpmLbEa/eJzDBGqpPPjMQ3Me/TX6SNy4TqcZPtomOOMp4rEjlGV5hjJ9teSTynGzNrmYWIPyANyA5OndjK0wklPXAAPbSiKIht8E6Ojfw0I2Geuk3jcu2Nq4bMYVM/jMzMdu2ldRNluWPOdfWlklysYOB1OqiPgSpp7B+0p5As7jm8EjcD5+uN8Y1MAlQ+UoLM/0yNZTnzddZgFyUXr2Hrrer8rFV3OvluEIqGmqF5o4ULcmccx6AfLJBPsDq5ORmRNkHmDIO51rAniljnAXXox+fJUlW32HX21V2WyUNDSCuuwYvMP3NMp5QNieZj7DfGvWOFGTCRCxjqlsKU1iitVRICHmaqrGVtuRRyoucbZPr/3amr9c/wBoAxxgM8kvlCg5CDZQPrn8tV1yStnt3wlAHWecK0pDcvh46ZPXAOptZ6Dh9AlLGKqtX70uNgf87azfNk8cn7TS8LbcdCP7HZ4bNaJGuTQpUSMhYMAeRMZZd+pzjPy0RVcSyy1Hh2yneV5thLKCse2enr3/AD1PzX6B7aKnwWNYrYMkrcw//Edvw+utKG5zQ8LVFTM5D1U2QNxkKMAg5921K1bsxd43eiDakUXy6XCSseKeqMvKcbHy/QbfpplaqOtanj/Z3ESwSS7tG2VUH3Iz+mkAjlkZ6gYKRjzsfU9h750IZwaxpAoQdl3x8taXhDVhRjP9SA3HeSZdVFj4nqKHxDdllkzyrEs+ze+c40G1mrrNCt0qa2aCtgJyrrkE9AAc99ILZW1TVaQw1EyKx5mWOTlJA9PfbTu6tbXphz1tWuFLcrzHMoB2GDsDn5fL0WKWU4OMf1GBwwyIwvdvt3EEVJxBUyyxeIFiqY4UDEv237enftrylyt9rpJRa44Kc4AYBg0j4wdyd9LeHK5PNaZ42lpKlC0rAE8nTlY+mNvy0kuoNJc5aWWMhomK9cnPrn076UEdiUJ6/wBQ3YYDr+5V8OWqbiW6+LWSO0KnMhzu5PbPbVJxJw3SSRGGOGOFQNgiYxv2H+Z174Ij8G3RryhCu79RudxnWlZNdmur0zUjSpzEpIreQKdxlumwP6ajNxCnaIXi3nkzndstL0huBljYmJvDDhTle/MB/nXR3wNBfBRi8TNbpY4yQ4TIeLdl6nbrt166sXs1FcS1IaynimkbmkED83NtgjJx6ameIqJLNUU8kK1DS7oPGAaMIAQVB7jB/XT0tZyWHc54wowep+/+KK/Gf2hGp94j/XQdZ9m96pY2kikgquUfdRiG/A7fnrsNRMOYebCKMkddtATVS+GeYDAOM6C3V2oeDmdTTo3qcStlhlrrq9PVBqdYBzTBlwwA9jr5xBJSLVpT0ShY4wE6Y/H1Oul32kp7pSPJG6xVKAiOYDf5H21yhKOZb7FSVSlXM6q469T21TptT/IO48Y9RV9HiGB7mvRD0wRpeWUKQo1RXi3pSKWhJMbjI9vbUywJ+R1bTYLBkSS1ds85x30baqQVtwhjkz4ZYc5Hp3/LQYXPbpozw/Bj5CMPnB9tPJ4gDuU9dVU10L3OuHJQU6+DR06Hl58bfQD/AD3mJI1nJZQAeoHprStqnqhHCihYYVCoAMZx3PudO+GuErtdqlClDIKc9ZZF5Vx8z1+mpcisZJjjlzgSdTKH9dWXCnAVbfilXXc9NQHcHHnl/wDH0Hufz1dWX7OLRbqpayuUVMq7qrDyKfXHf66qmmQuKeEAk9s9BqO7V5GFjUqx3EtPwvZKGBYorXAqxgEsY+Zjjfc9dTnGd6SlpGUMehAHTVrd66K3UbJz7geY99cI4rvb3W5syt+7Q+vU6gqra+/bnIHcq3hKyxH9QGmpJa6aXlRi+MhR6np9NfpqP4cOSSschKjY52Pf3GOnuNFWm/JRxzwzUkVRFUrySggAkZyCGxkEb4Py9NbiskqFrQ6hUlzIFH3ATk5Hv1G3fX0G5lOMcSEKjDvmOeGuHaSusEs9RHz1kLh4hzAq6AAjAHXOd8+g6HQNXM9dxNBTmQvHASz+gxuQfwxp5w5eYU4diR4wGo5eVkYdUOSWGOvcEaSVdNR0wuFXBPzCpcLARtgd/pnb6agZm8hB/UrrACiOay4zVVvaSG5rRlpAqxIQXZMgEnfI2JIHoPfSuOnkuMUkFC0ESIeXDOFMp9yeuj6uxQyWW1RW6KRrhUYVnOxPMMHI3GAM7g9x6aK4wo7Zw/bae00kCvWIMmRfvEjck+u2dAUVMBO4bXM2S0QX2elqqunlpaRYoII0V4MeUyAeYHbffb1O/roeqctHDR74jAHoue49BuToqoukENBFUTLE9RyjwoeTyRg75926Hf10qkNZdT48PMeVfPzAIgOe3bGMfnp6IWxu9SVm+0xeZquoWnRgFkkydsDfrr7eqFKS4GKMPyiMPuMnp+miaGCipKxJ66sRim/JCOY/U6p4rXbOKaaT4SsakjiOWkalAUMB/FITzHY9N+uqQDvGOovb8ee5LW2GlWJJnkILKV8yFgzemBvjf8joSthlSpeOohMDoeVkZSCCPbtqrqrxZ+EqZqWxQmprHUq9fMMnfryDoo+WdRyyzVdQZCS7k5O2dzpoHuKPWIZT103iBY0acIFJEgLABQANumMDG+mt9pKu6ww3doYzLhUkEI2cYyDj1xjS82yWnqjHJIxwA37rDOTnlAAz6n11Z8LJUVNsqYKunZvvMjTbc5U7du23rqLU2+Mb1ldCF8qY6oqqkt0EU88UhBXAZP4fXv30PHxa09f4NNDVy00ceSQgZwc98D7oGvVtm+Gt0s9dIKeKIEcp5iWHY9jg7/215iuV2rGEVloxDE2AZJ/3cfTrjr77enfWVXWCvyjxuB4i65269Xto6q3PSzgZPiRHk5Rts2d8+2mEdBXVkVDGtW9KlDGi1E0UhAJA82/fJz1/nrKkp6y3RVouVfEKecq3PGrc3N/27H/MfIz3FPE8lXy01GppqRRj0LfIdh/h1VWjnCr1OOVHLS4e9iYDJyQMcqkjmJ0FUVivP4FRgAHmxGRgDPQnUnLdajxS0cxG+QwOPloeavld28x3PXUgpZuTKyVHUpquup4I8U+CwGA7jmIx7dMb6Cjo6G81EBqByVUIDJKhGc59PTPbU61U+cBtEW+6/A878vM56ev4/hp6UMoyDzFl1PcrKjgmoucADXBFUjceEPx0v/8AiNid7qOX2h//ANa90vFzkBUYKf4mbIxpqONIVULHnYfxHc+/9tday2oYEWKUs5xAaf7JaWN1Z7m7gEZURgZ/PTKP7NrKJjNVSzzEnJDOAM/TGvEnF0aArzgsOvpnQUfFay84kmCAfdyCw/XSDfc3sw/46CV9s4e4etYV4KOmRx0fGW/E76ZS3Sjpk6422wNc3qeK4dy8sshXZeQhdtTlZxTKzMvjFuY9M50Sra/QnDWg5Yzpd14uhhRljcDHvvptYqd6O2vcq3C1E45sHqo7DXOvs9tM/EN4auqwRRUZDHP8b9h9Op+nrqz4wvsVvoGYsCMbL2P00m1DS3PLep7KuNq9e5G/aBxF/wDSU7YZyckdcdzqKtFl/bFYtMlZBAXBPPMSFGh7hWSV1S9VISWc7ew09g8a00nLCkKyScqzKzAFQRuoz0Pl37Zx7Y2NPR4KcDs/7klj+Wz8CBVHBV/pqgxLQPULnCyQedG9CD6fPGvsXC3EIRue3VEcfMOYlcdPbqeuiqniOprKOWopaqWmqI5PLEn8cR9cbZXG5xvn20vhvt0rStNLc5UQ5+85APzOmj+QftF4oB9xpIZ7ba4KOpg8F0V3Dcwyc5z098fhpvw2aZ7nTx1HK7wU6lVcbZ7/AF0kulAFsVBViXLBvAJVwylSWbOfXJ/9aGhlrJ76BQkh+XJPoBvn8tIuqLDGf3G12gMMjidMkqI7XHLUSDkEWfDI7Z32/LULUPFf6g1r1Eoqnby8rEKqDIA6HJOO3TI+jOhu9LxHF+x7nL4LuQoZWwc+xPr31neLFUWypZqSFQrAJGYY8uVBBxj1yMZGc76VRWaz8jzHXAHleRM14dhnrIS6ipVUCqAOVUKjJyuck437jtvr3PS08lCI2h58Dl8NtiG3wQB02B9vlpbFebk4cz1CwSxOsfLykNy7ggjHT1zt10ZUVYp4Y6isiiWqWLCYclmU9yDuCfYaqVGJiSygRKtnpqeWSrqZ+WjG6KT5pNs4/wA/vrV74tXG1NGjR0ka+SJDy59en11jUTvcCwmkzHINmO+AAcDYEjft8tAy2uoppeUSIwAGWQnGSSAPU9NUbh1Jj8TkRlRPS1kc6Vccs2QAkrMP3YAwM7f5jQZoWtVa8lRA0tMC6+XJ7eXJGO5H+dco/FMSJARuSduu3qdNaavVUCzxxMAuQjuApPr1740PI66hgA/3MrfU1tdNDDBGEkkdVgZGCrzZx5idtyF6nsNXdssl3tcyz3IcskqOZFVhiM56HGxz1zk/1gq6mkqphHSQTST8/MDsWZTtkBRsByjue+uoSXWpmsrfGHmqIKdTIc53wRn5kA5+uodYF2Y+8p0xbfzAmp/hKaK53ureZ5TzLAi4WNewwOpxjYn8e+F14lgoolkqgroVzDTIByjbYt7n0/XUHcbpVfGFppPEYABMg4Axnp8tj9da2eutkUzS3SmasY7AMThfcAdT89EKNq5MBrzuwJtdOKZK1JDIhlZ9l5+kY7BQNh88aN4Zp7Pe6RobrKiucquZFRk9GGTvv2GdErxPw9TsWjslL6DxYQw/TXiG80VfU+FSWaGWRt1jipweu52wdtz0x10BYhfipE9t3HLEGZ3+xU8BNRap8jqYSc4+R76mXrGiQFhlsnI9NfY7zI5HOxBHfOvzwzXCUCnhaV2OMIpOTqiqlhw8W93tYO9zY9EHzJ14irGedRKzcpO4XGdDyxvE5V1KkEgg9jptZLHNXRzVUjxRU8UbN+8YBnwM+Ude3XVJVFXMSLHYzOWoCM5iJ5c+XPXGsEukqnmAGR0OdZyOCrY29tDZHJjQrWpHMJrWB4MON0ndSx1n8bUPtnHyGsuTCqnc9dU3DnBNffFFQ0q0dKD/AM6Qbt/4jvrjLUgyZ4Pa/AMm2d5BhnJzoigoqq4VEVFTReJLKwVAo3J/pro8lg4TtDwW9g10uFQeRVVuUZPrjoP76qOE7BSWpqiojpFiKNyc4B85HXGd+UHYb9jqV9WoHxEcKT2xnuCnj4P4YgoKbklZN3Zm5edjuW/z20jFNHeqSrulyK/D8jLErDICgeZ/6fI+2tPtAviUtueNGXmf+H01zSbiK7TQmCStl+HaMRiPOFKqdgQPQjWfpqTqGNhj3cVLj2Zkk1Lb66SOSiWVQcL4h5go9cdCceuv11wlxM5ZTHLGv3AcboPl6+p0DJTytA1TglecL8yQf6aNrY562sp6WmiZxLDD4atgkfu1B39Mg/hrbAAGSZFvPUEo6k01cksUQLhhyB8kA+v46cRW2yxRmCvir6KqyGQyKOVhn36fgemmESWzhamjHgJVXR8MJD5hG3YAfPS6ZbvxH4kz08jJAzNKUQBh6/PGOny0rybuRwPvGKNowRmPK6lozwyYqXmaCKRSuTk/e3yfrpZTolktUtdIAayq2jTJBVPf5/00Zw7FKnC9U0kZbEjtGGH3wAMfTII1nT0lNeKaouV3neGMDmRU3OBj8zkAZ9SdDYCSAevc4MZJEQWpZLnfoaZMQipmAPKMlBnOxO/bXUbZVGSWrtFwqI4p6YjMrsF8RW6Op7Hp9TqK4Goo0us93qARBQqeX3cjAH4E/loK7cRzz8QVNfAxAlQx8r4bK+h29QDr1i+Rtq+oyqw1Lub3KriDhqvt9bJcEpY5xGnkmJBGRk8zD1wQPpqRscVReL8yuDNLyFj3z09fw76tuC+K1q6ZaG5Hm5lwrOOYtttjPbOir2lq4ZqDcoqIRGbmPiKuQznpv2Hfp/dZtKDx+4QQO2/1B3jttgt6JNGKWQKWmPhKWc7kLzAHHfrnURer8Z6UwQIkROFdolChhj26750XeOKmvMRppYI8zEKGwfIM7Y/L00CllF3ph8BGAYkPO7McEggb52XbJ/zZtVe364u2zPCxNFLII2UOQpG4z19NUPDVpqKwNU1FS1Lb4t3lKhuY+ig7Z9+2hrDZWqLixqx4dLSnM5xnOP4R7nVMbxTEJVFFioqby01Oo8pI740GpvK5WvuDSgPLQuWens9vkeNpIgwyniEGRzgYLH2xsNtLv2hMnClfVThuarkEY5uvL2x/+xOpu73ie61TSMxMeemeuml/f4Phm12/Ch2XxGx75OD/APtqZaWG3f2TKfIDnb0I0rrDFeqOmqKQqoVdnxu6n9Tt+o0L/wAP0ccQipjNUVDfwleh9Nt868WK7VdkoUSaKX4aUEhZEOAfUfPuPYHTKycYRWoVIWjV3bdJT1X2PqNPfybfh6iDscgnifqT7PWkHj3uoWhiU5MQIMjD09B+emdRxnYuF6RqLh+jjjkK4ZlXLN82O+oe/cX3C7zsskgSPsqKBpLCuVLE6NaHsGbD+pw2InCjM8TQGGUoMnA66cUfFlyoqJaKgZKBQvK70wKvL7s2c5+RA9tfrjanpqhueRmDZIYLyhvl7aXrReNMI4gZJCcBU3JP01WtisvBiWrdDgwaqdpJDI7FmZiSScknvo6nrVNM6mNFZQAGGcnt39v5abU/AV7qAHMCxYGQssgBP00TH9nF8kfCmlJJ+6Jt/wBNJa2ojaTCWuwcgSVkUuc7D+eswN8sOmq2bgS7Ukym4Us6QD78lOomIHsAc68LScJU4JeuuDyDI/5Sj8iDrvnQDA5nPC55MX2Sko1qPjLk37pN/DBxzfM6dTcU194rkoaFQkO4WNRgsoBOBjpsOuk1QlrrpVgtYqAc7tUMOUL3JPbGva1NDQiaCilcy8pAquXBc9wv+1cZ9z7aW6B/k0Ynx4jvg20VD8a0qoGmRedzL2GBg59xnH4dtdXulWtJTGMgqFG53/XSPgHh6Wy2IVkyH4qsVWPO2eVcbdts9cfL00l4+vk0FL8MrASSbEA9NY2qdrLBUssqA79CSNyucd6v0gni8aOJvIikgM2cBSew9T120nroIpKmaSEAK8jFMdMEnGt4bRXUyyPKktPJGw8VHUqQpGzDvg5wfmPXTC1W+3TOI7hWNEhXYx4zn3zrVBShQB0JOd1p5EacGTxQUsfxMyIhVmj6Eq3MVz8jkD/DrWSspaK91NJNSmDxlHhNCgPJnHQehI6DW9PwlHI4lttyFSKOnPJGUAL8xYgEg9mIOsZbXV8RxSStGKSqhYLzPlSjjt06f1Gpnsrc7geDO7WUYIituF62kvK11yctRRMsvjBj5xnYDuCcfT8NPa27QQ26Mq0dNRMuUiTZsdxjsSep768wzVtHS/s64yw10LEDmBPkJ7kYz366QcVcO3C11S10jfGUZAbmH3V3+6cdB8tcz5WCM2BOqwQE4yY5ttwe626oXHhxqxjjVdsAoSP0/TQdpgpl4flS6MeeV1dIzsVXAP4Ek/TT22SWmSxvVUFJyeMAf3bDCsPKcjbs3+b6nag0tuhH+nilVEOckk8xz1Geg21ZgBAg4nlXcxYxhcrzaBZobdBGP3j5bw3CqhYjJJIySd/l9NIDYkpaarJlhnqigSNGYjckg4BHXpjPudLJZY5bkUnbw1ZgG6YJ9fTBO+2qKgvNvWRJqkJIW5UCLEEAbpueuw7dj7aMIax8YJK2d9QG1Wa/fEpT+emWn5pPFdSyIQO5G2Ox7dc6cw8RpcqJ7fV4mDeU82DjHp2z762q+K6eoV6aqpIVMSHnkYrzk+bOBjAYbbex31D1Fw8S6y1KAIGbICLyjHbYdNKaprvqGCOp0WLV1NbrHJRXJ4ngjRxurR5UEHocdvpjWNCnjOaYIfGc4Rg+AvrkdxplHSG+TxRGdI5Fzys+cHbp89ttO24dWxUq1NQZJn5HHiUyZQDvlz0ONuh76abcDae4jx7jkdRVX1IihS10xykY5XZf+o3c/wAvpoKqpalqeN6uoWkhA2jmzzn0wo36fLXiS9FHKUNNHSruOcnnkPzY/wAgNBtBUVEpkm5t+rNsD9To0r29zjMOhCrJbxcrvDTRh2gDAyuVxhRufb/Bp3fqiGW6JWGNW5TkI33Qo6DH659vqTa6kWXhmasVY158pHhgS7dz+OB+OpJ55qpy0rknU4LX2k9AcRpxXXj2Y0r7xNWjlOMe2hoJxDHIzHlbl8g5c5J2+mASc/LQ6HbfWU8nkI7nVSIqDasmYknJgjnmYn1OjYoXNMZAp5FOC2NgdDRQvLIERSzE9AMnVfR8HXKtWmiMEsUTEcx5fXvjbtrtlyp2Z5ULSTlqJqls1E8kmOnM2caOtl5a1FjTxjxG/i7jX79h1M9bKluhknhVsK5xgexOwzr7VcOXW2w+NVUbonXnBDAfUaEtURtJ7hYsB3RkOJ66rZRPKUQdSoGdbrWX6pmaW0QVVRGvV40LEfPl1Ow0NXUR86U8rqc45UJzou03m6WgyCmmeI91PqPb66nahBygGZUuocjDGU1DxXxBQSEXGhqWiXqJEZcfXG2hOJZqO+U/7SpqfwJ13kwRiQdyem4yNbWziPiWrnDSXANGgy5bBCj6dzppauFfjaGe63qZqanldnVAAC2+cnI6em2pHZam3ngj7SgDyJjuc7d+SHljblDk8y+uOm/46pfs9sA4i4np4ZkLU0H72fbYqOgPzOB+OhrpwjWU1QGpFNRTyKzoejBR6j136DXXOAuH/wDhjhUSSoBW1nnlxuR/tH0H5k6ve9RXuEg8TK2DGfEV2FFTsy4wg2GuSRyzcW8VMjv/AKZFLSYA6D09CSQM+/pqn4smq7pWraqAc1RM2Bvso7kn0HXXy2pauEqVqSpuAqaueTmmmVRlcbADP1/HWJS31XN2epo7NoCCLv8AiyWatNslMUMsEnghuUShVB3IJ3OMDWV9/aVrkjR7PQVCSk+FLHTgiX12I2Pftr41XwX+05Untc0Y3b4lpn5nbO/lHTvpzY7usmbdVK3Ip/08kyHD7dD/APiR9CNUEhTnaf3PfJhwRmB8M3K21F1lo6eimt9fPB4Z5DiNuTB2U9D5f10+uCxX6lqqWhqozVlPIQ2xOMA5+ed9JLXDbaLix6ovUq6TEBSARlzgg7bLyhSPmeugbtarxaLnNXUKJEkEj/dYZKc2xxn0xpdgVrMqcf3OLkDDCSNytt74fqjLVJLTuknKSW79fwPrqjtt5uEdfHSVdv8A9XLFgxSDAlQjmOc7Zwv6jVPIx4o4eRLtTuDMuUliPMdj12zj6jSmSw0dupXqY3nebDclQ8RZ48DcYG3TI39dU+ZbRtYciTGoocgzWjFvo4697ck0ZqADNBIAFjkUHZQOxyfbpqFvVY73CoiqFKAORgAZUfzH66rLVcKEVVOiNJJUVgYyH/plhvsDvnB3zjpqY4xoTT3sSDdJo1csOmfT9NWacY+qLsY7OIiYknZsr2ONfRK/3WYkDcb9NeWO/lOMb68tKzOS/mz3PXV+JJN2ljmkDPJIrYwSxzn016kjUr+6Kk4653GsGUHBAzrPzc+Qca5iezGNFVPCCrYDAY3HbT+h4krLXQmoqOSoikbw1hc5LDuSTnbt+PpqcMnxEKM+FeEYyBjmHvrxLMZIjHnK5zg6msqDnkR6WFRLKODh7iQp+zZntVa3WKMAqT8tifodBy/Z1xCbjHD4XjU8jDNRGdgO5IO+3uNKLLwxcr9UIlvpJTGxwZnXEa+uW6batZ5f+DIIKI3GeonYgyOshwB/tUZ22HX31LbY1XxrbJ+0oqrFvLDEW8SWu619bFabdaahaWmAWMeEVXHzO310qi4XrPj0pJ5oYAdmlLEqpHUZ9enT1Gqeu+0SpIPwoEYIwEbzY/rpzw9cbjX0wlqpZC7HISCPmbHuTsNTC+2qvGMR7Uo7ZJiGj4Z4Zo/E+OuZuEgAxHGpjA9TkEk/lrRI+C6efy215j0xlmB+hOqC43G6UHOz0+YwP+qyMce+NxpSn2g0NHLl6JXkOzNCAW/H++lrZbYfcMV1qPUOoeIOHbVMUp7L4D9AFh5WI+Z30VWcdiNFNNaZOeTaMN5S59sZ9tKK7iDhq7hJngrVlDc3NzspU/Q6QXittNLSqlNUTzO5JIfblHYHbLaJULNtwZxioG7ifODbDfb0hjoEMdMr5kqZCQinAyPc7dBrq8VJbbTbFWrlFSVGGklAwT8v/eg71xVbeG7atNSpHEiLyxQxLj6ADXMbvxFcLl8R8QrwAkYjYEYB0yw+Zv8AGP3EplVw5ltd+P7dAfDhZCinlHL0H4an6ziC1XweFcKZXVhhZF+8nyOpehs9Ve6eqhpGQvFyymNjguBkbdu46+o1R8G8Hx1dDLW3RHUmYJBGSVzynzZ+fT8dC+nrrG4scxiW5O0LxKXg3h2ltVOZPFFS8zlomZNkXbH19fw0FxXdRcL/AE1lgnkiji/eSOic2HAyuR7EA6rZJo6S3zVLYHhKUUAYGdc14bqKp6m43OR3VZzgkJnm65IPt+h9tLpXy2Fj6jchepcWmketuENM6KSiFmZPTO5HoCdP79cEo6SRchUjXG3Qay4Po/2fYDXVH/Mn8y5z5U7dfXc/XUj9oF7EVv8ABDc0lQcKMdO2u6wE7al7b/USh3uWPQiine6Vs9RU2wr49TlOZ9uRB1Oe2+NZ8M8PmXiaenqp0qDBGXMnXmY7fkf00xutT/whwlTQFQKudRzAHBBO5/DfU/YL66cRQ3FYvAp3m8BgG2Ab+Q2OuVLYASo4jLCh4J5inibx7fVRUzqhBQSK3IAepUg/VTpfT3eaCshn5i/htnzHt3Gq37R4IleiaOKTnjaTL8o5GVm5hv7EtqZo+G7xcaY1VNQNJCh3fmUD36nWlW1ZqDHHMgYuHwJaXDimotC09XDAjJUghwy4PQYI+YP5adXivtdfaqGqlL0zXGHmWqhcqwbADKfXHTfSOWjts0lFabhzcrU/h+IjZMTqB5sem2Na1VrlPC9faCFnegk+Joipz+6I3A7/AO46zlFe0AcGWsW3ZIiSir6yx3FYDcpo4SSY5I/MGI2OVJxn56pqHjcxMgrlRndcCWLYMD1LDff26aiqCkr73bnhhpJZXibmjdUJOfTONVF7sFdUW63tT2ofEx48XBVCF7jGeuc/20yxFJwx5nkYleswWp4dnirhdraY6mkEglGD5l332/HppVxnAHVakFpCv7ssxyQMEjJ79+uqKoobnZ4B+zoKhlbL4VC3KcdCPTp20uuFPHcaVUqUkiklVWdFGGDjAIAPfGdO0jk5zziT3Lxx7nPDnl+evgU6fHh7no2lgkdp1lCGIgAgHO5HUdB276zbhi8x1AiltdSX68ixknH01p+RcZkO05xFSkjt5dehlVPMiunbOx+h1f0lpqp0FIeH54H5MYaHYgdsn39dfZfs2uky+NRtSxtnJhdwQPcbY0k6qsHBMYKWIkRFAJyq0x5pDt4R+8fl2P6+2quh4Qt1pohc+IJg64DLBG+3qAT1J9hj56orLwXQ8OU5nuVbEKtxguu4Qex6599e5P8AhGAvK8K3F49y0jcyr9NhqG3WBmwvUrq0+FyRJWjuddX1bR2alqo6QbCOLmJI9Nume+mI4Fvt4qlq7jPDQxt/9xsuo/8AEfpkaqjdqgW1fgKZKNGUGKJFCgDqCeyg/j7akrhdLpPIySVIkOcYRsJnUy2szZRcSgr8cOY8o7Dwdw0/jVUxrqgd5jkA+yj+edeLl9oawKYbbAsMQ2B+6B9NRdTSVlU/7yqjjUdl1jHw7cqqTw6ZPiXPQIdz+Oql0u75WtJmuC8IIZcOIqq5BjJUPKhO6LsD8/X650sknigCMIiQ/TRcnBfE9GqTGz1RDkgcic34gdPrp3DYqqTgqpFfbZqeanZpI3kiKnbGevbrpxausDHUWu6zP3klJdZyCkKBfcDJ0ETJJICxLHPU76Kt9rr7hWCGiheSRjtyjVvQcNWzh6naW8eHU1RHkgGSMn3HX6aa91dfA7ikrd5//9k=",width:256,height:256},smalltiled_lizard_scales:{data:"data:image/jpeg;base64,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",width:256,height:256},prayerwheel:{data:"data:image/jpeg;base64,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",width:128,height:128},lichen:{data:"data:image/jpeg;base64,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",width:256,height:256},cloudsImage:{data:"data:image/jpeg;base64,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",width:128,height:128}}},62238:t=>{var e;window,e=function(){return function(t){var e={};function s(i){if(e[i])return e[i].exports;var A=e[i]={i,l:!1,exports:{}};return t[i].call(A.exports,A,A.exports,s),A.l=!0,A.exports}return s.m=t,s.c=e,s.d=function(t,e,i){s.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},s.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.t=function(t,e){if(1&e&&(t=s(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(s.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var A in t)s.d(i,A,function(e){return t[e]}.bind(null,A));return i},s.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return s.d(e,"a",e),e},s.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},s.p="",s(s.s="./src/index.js")}({"./node_modules/@assemblyscript/loader/index.js":function(t,e,s){"use strict";s.r(e),s.d(e,"instantiate",(function(){return c})),s.d(e,"instantiateSync",(function(){return g})),s.d(e,"instantiateStreaming",(function(){return u})),s.d(e,"demangle",(function(){return p}));const i="undefined"!=typeof BigUint64Array,A=Symbol(),r=new TextDecoder("utf-16le");function a(t,e){const s=new Uint32Array(t)[e+-4>>>2]>>>1,i=new Uint16Array(t,e,s);return s<=32?String.fromCharCode.apply(String,i):r.decode(i)}function o(t){const e={};function s(t,e){return t?a(t.buffer,e):"<yet unknown>"}const i=t.env=t.env||{};return i.abort=i.abort||function(t,A,r,a){const o=e.memory||i.memory;throw Error(`abort: ${s(o,t)} at ${s(o,A)}:${r}:${a}`)},i.trace=i.trace||function(t,A,...r){const a=e.memory||i.memory;console.log(`trace: ${s(a,t)}${A?" ":""}${r.slice(0,A).join(", ")}`)},i.seed=i.seed||Date.now,t.Math=t.Math||Math,t.Date=t.Date||Date,e}function n(t,e){const s=e.exports,A=s.memory,r=s.table,o=s.__new,n=s.__retain,h=s.__rtti_base||-1;function l(t){const e=function(t){const e=new Uint32Array(A.buffer);if((t>>>=0)>=e[h>>>2])throw Error(`invalid id: ${t}`);return e[(h+4>>>2)+2*t]}(t);if(!(7&e))throw Error(`not an array: ${t}, flags=${e}`);return e}function c(t){const e=new Uint32Array(A.buffer);if((t>>>=0)>=e[h>>>2])throw Error(`invalid id: ${t}`);return e[(h+4>>>2)+2*t+1]}function g(t){return 31-Math.clz32(t>>>6&31)}function u(t,e,s){const i=A.buffer;if(s)switch(t){case 2:return new Float32Array(i);case 3:return new Float64Array(i)}else switch(t){case 0:return new(e?Int8Array:Uint8Array)(i);case 1:return new(e?Int16Array:Uint16Array)(i);case 2:return new(e?Int32Array:Uint32Array)(i);case 3:return new(e?BigInt64Array:BigUint64Array)(i)}throw Error(`unsupported align: ${t}`)}function m(t){const e=new Uint32Array(A.buffer),s=l(e[t+-8>>>2]),i=g(s);let r=4&s?t:e[t+4>>>2];const a=2&s?e[t+12>>>2]:e[r+-4>>>2]>>>i;return u(i,2048&s,4096&s).subarray(r>>>=i,r+a)}function d(t,e,s){return new t(f(t,e,s))}function f(t,e,s){const i=A.buffer,r=new Uint32Array(i),a=r[s+4>>>2];return new t(i,a,r[a+-4>>>2]>>>e)}function S(e,s,i){t[`__get${s}`]=d.bind(null,e,i),t[`__get${s}View`]=f.bind(null,e,i)}return t.__newString=function(t){if(null==t)return 0;const e=t.length,s=o(e<<1,1),i=new Uint16Array(A.buffer);for(var r=0,a=s>>>1;r<e;++r)i[a+r]=t.charCodeAt(r);return s},t.__getString=function(t){if(!t)return null;const e=A.buffer;if(1!==new Uint32Array(e)[t+-8>>>2])throw Error(`not a string: ${t}`);return a(e,t)},t.__newArray=function(t,e){const s=l(t),i=g(s),r=e.length,a=o(r<<i,4&s?t:0);let h;if(4&s)h=a;else{const e=o(2&s?16:12,t),l=new Uint32Array(A.buffer);l[e+0>>>2]=n(a),l[e+4>>>2]=a,l[e+8>>>2]=r<<i,2&s&&(l[e+12>>>2]=r),h=e}const c=u(i,2048&s,4096&s);if(16384&s)for(let t=0;t<r;++t)c[(a>>>i)+t]=n(e[t]);else c.set(e,a>>>i);return h},t.__getArrayView=m,t.__getArray=function(t){const e=m(t),s=e.length,i=new Array(s);for(let t=0;t<s;t++)i[t]=e[t];return i},t.__getArrayBuffer=function(t){const e=A.buffer,s=new Uint32Array(e)[t+-4>>>2];return e.slice(t,t+s)},[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array].forEach((t=>{S(t,t.name,31-Math.clz32(t.BYTES_PER_ELEMENT))})),i&&[BigUint64Array,BigInt64Array].forEach((t=>{S(t,t.name.slice(3),3)})),t.__instanceof=function(t,e){const s=new Uint32Array(A.buffer);let i=s[t+-8>>>2];if(i<=s[h>>>2])do{if(i==e)return!0;i=c(i)}while(i);return!1},t.memory=t.memory||A,t.table=t.table||r,p(s,t)}function h(t){return"undefined"!=typeof Response&&t instanceof Response}function l(t){return t instanceof WebAssembly.Module}async function c(t,e={}){if(h(t=await t))return u(t,e);const s=l(t)?t:await WebAssembly.compile(t),i=o(e),A=await WebAssembly.instantiate(s,e);return{module:s,instance:A,exports:n(i,A)}}function g(t,e={}){const s=l(t)?t:new WebAssembly.Module(t),i=o(e),A=new WebAssembly.Instance(s,e);return{module:s,instance:A,exports:n(i,A)}}async function u(t,e={}){if(!WebAssembly.instantiateStreaming)return c(h(t=await t)?t.arrayBuffer():t,e);const s=o(e),i=await WebAssembly.instantiateStreaming(t,e),A=n(s,i.instance);return{...i,exports:A}}function p(t,e={}){const s=t.__argumentsLength?e=>{t.__argumentsLength.value=e}:t.__setArgumentsLength||t.__setargc||(()=>{});for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;const r=t[i];let a=i.split("."),o=e;for(;a.length>1;){let t=a.shift();Object.prototype.hasOwnProperty.call(o,t)||(o[t]={}),o=o[t]}let n=a[0],h=n.indexOf("#");if(h>=0){const e=n.substring(0,h),a=o[e];if(void 0===a||!a.prototype){const t=function(...e){return t.wrap(t.prototype.constructor(0,...e))};t.prototype={valueOf(){return this[A]}},t.wrap=function(e){return Object.create(t.prototype,{[A]:{value:e,writable:!1}})},a&&Object.getOwnPropertyNames(a).forEach((e=>Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e)))),o[e]=t}if(n=n.substring(h+1),o=o[e].prototype,/^(get|set):/.test(n)){if(!Object.prototype.hasOwnProperty.call(o,n=n.substring(4))){let e=t[i.replace("set:","get:")],s=t[i.replace("get:","set:")];Object.defineProperty(o,n,{get(){return e(this[A])},set(t){s(this[A],t)},enumerable:!0})}}else"constructor"===n?(o[n]=(...t)=>(s(t.length),r(...t))).original=r:(o[n]=function(...t){return s(t.length),r(this[A],...t)}).original=r}else/^(get|set):/.test(n)?Object.prototype.hasOwnProperty.call(o,n=n.substring(4))||Object.defineProperty(o,n,{get:t[i.replace("set:","get:")],set:t[i.replace("get:","set:")],enumerable:!0}):"function"==typeof r&&r!==s?(o[n]=(...t)=>(s(t.length),r(...t))).original=r:o[n]=r}return e}e.default={instantiate:c,instantiateSync:g,instantiateStreaming:u,demangle:p}},"./node_modules/@babel/runtime/helpers/defineProperty.js":function(t,e){t.exports=function(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}},"./node_modules/ecma-proposal-math-extensions/reference-implementation/index.js":function(t,e,s){"use strict";{const t=(t,e)=>{var s="function"==typeof e,i="function"==typeof e,A="function"==typeof e;Object.defineProperty(Math,t,{configurable:s,enumerable:A,writable:i,value:e})};t("DEG_PER_RAD",Math.PI/180),t("RAD_PER_DEG",180/Math.PI);const e=new Float32Array(1);t("scale",(function(t,e,s,i,A){return 0===arguments.length||Number.isNaN(t)||Number.isNaN(e)||Number.isNaN(s)||Number.isNaN(i)||Number.isNaN(A)?NaN:t===1/0||t===-1/0?t:(t-e)*(A-i)/(s-e)+i})),t("fscale",(function(t,s,i,A,r){return e[0]=Math.scale(t,s,i,A,r),e[0]})),t("clamp",(function(t,e,s){return Math.min(s,Math.max(e,t))})),t("radians",(function(t){return t*Math.DEG_PER_RAD})),t("degrees",(function(t){return t*Math.RAD_PER_DEG}))}},"./node_modules/eel-wasm/dist/build/parser.js":function(t,e,s){(function(t,i){var A=function(){var t=function(t,e,s,i){for(s=s||{},i=t.length;i--;s[t[i]]=e);return s},e=[1,18],s=[1,7],i=[1,19],A=[1,20],r=[1,14],a=[1,15],o=[1,16],n=[1,33],h=[1,31],l=[1,23],c=[1,22],g=[1,24],u=[1,25],p=[1,26],m=[1,27],d=[1,28],f=[1,29],S=[1,30],b=[5,8,15,18,20,28,29,32,33,34,35,36,37,38],E=[5,15,18],U=[5,12,15,17,18,24,25,28,29,30],x=[1,57],T=[5,8,12,15,17,18,24,25,28,29,30],v=[15,18],q=[5,8,15,18,28,29,38],R=[5,8,15,18,28,29,32,33,38],I=[5,8,15,18,28,29,32,33,34,37,38],P=[5,8,15,18,28,29,32,33,34,35,36,37,38],V=[5,8,15,18],y=[5,8,15,18,20,22,28,29,32,33,34,35,36,37,38],B={trace:function(){},yy:{},symbols_:{error:2,SCRIPT:3,expression:4,EOF:5,expressionsOptionalTrailingSemi:6,separator:7,";":8,expressions:9,EXPRESSION_BLOCK:10,IDENTIFIER:11,IDENTIFIER_TOKEN:12,argument:13,arguments:14,",":15,FUNCTION_CALL:16,"(":17,")":18,LOGICAL_EXPRESSION:19,LOGICAL_OPERATOR_TOKEN:20,ASSIGNMENT:21,ASSIGNMENT_OPERATOR_TOKEN:22,number:23,DIGITS_TOKEN:24,".":25,NUMBER_LITERAL:26,UNARY_EXPRESSION:27,"-":28,"+":29,"!":30,BINARY_EXPRESSION:31,"*":32,"/":33,"%":34,"&":35,"|":36,"^":37,COMPARISON_TOKEN:38,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",8:";",12:"IDENTIFIER_TOKEN",15:",",17:"(",18:")",20:"LOGICAL_OPERATOR_TOKEN",22:"ASSIGNMENT_OPERATOR_TOKEN",24:"DIGITS_TOKEN",25:".",28:"-",29:"+",30:"!",32:"*",33:"/",34:"%",35:"&",36:"|",37:"^",38:"COMPARISON_TOKEN"},productions_:[0,[3,2],[3,2],[3,1],[7,1],[7,2],[9,2],[9,3],[6,1],[6,2],[10,1],[11,1],[13,1],[13,1],[14,1],[14,3],[16,3],[16,4],[19,3],[21,3],[21,3],[23,1],[23,2],[23,3],[23,2],[23,1],[26,1],[27,2],[27,2],[27,2],[31,3],[31,3],[31,3],[31,3],[31,3],[31,3],[31,3],[31,3],[31,3],[4,1],[4,1],[4,3],[4,1],[4,1],[4,1],[4,1],[4,1],[4,3]],performAction:function(t,e,s,i,A,r,a){var o=r.length-1;switch(A){case 1:return{type:"SCRIPT",body:[r[o-1]],loc:this._$};case 2:return{type:"SCRIPT",body:r[o-1],loc:this._$};case 3:return{type:"SCRIPT",body:[],loc:this._$};case 6:this.$=[r[o-1]];break;case 7:this.$=r[o-2].concat([r[o-1]]);break;case 8:this.$=r[o];break;case 9:this.$=r[o-1].concat([r[o]]);break;case 10:this.$={type:"EXPRESSION_BLOCK",body:r[o],loc:this._$};break;case 11:this.$={type:"IDENTIFIER",value:r[o].toLowerCase(),loc:this._$};break;case 14:this.$=[r[o]];break;case 15:this.$=r[o-2].concat([r[o]]);break;case 16:this.$={type:"CALL_EXPRESSION",callee:r[o-2],arguments:[],loc:this._$};break;case 17:this.$={type:"CALL_EXPRESSION",callee:r[o-3],arguments:r[o-1],loc:this._$};break;case 18:this.$={type:"LOGICAL_EXPRESSION",left:r[o-2],right:r[o],operator:r[o-1],loc:this._$};break;case 19:case 20:this.$={type:"ASSIGNMENT_EXPRESSION",left:r[o-2],operator:r[o-1],right:r[o],loc:this._$};break;case 21:this.$=Number(r[o]);break;case 22:this.$=Number(r[o-1]);break;case 23:this.$=Number(r[o-2]+r[o-1]+r[o]);break;case 24:this.$=Number("0"+r[o-1]+r[o]);break;case 25:this.$=0;break;case 26:this.$={type:"NUMBER_LITERAL",value:r[o],loc:this._$};break;case 27:case 28:case 29:this.$={type:"UNARY_EXPRESSION",value:r[o],operator:r[o-1],loc:this._$};break;case 30:case 31:case 32:case 33:case 34:case 35:case 36:case 37:case 38:this.$={type:"BINARY_EXPRESSION",left:r[o-2],right:r[o],operator:r[o-1],loc:this._$};break;case 41:case 47:this.$=r[o-1]}},table:[{3:1,4:2,5:[1,4],6:3,9:13,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{1:[3]},{5:[1,21],7:32,8:n,20:h,28:l,29:c,32:g,33:u,34:p,35:m,36:d,37:f,38:S},{5:[1,34]},{1:[2,3]},t(b,[2,39]),t(b,[2,40]),{4:35,6:37,9:13,10:36,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},t(b,[2,42]),t(b,[2,43]),t(b,[2,44],{22:[1,38]}),t(b,[2,45],{17:[1,40],22:[1,39]}),t(b,[2,46]),t(E,[2,8],{31:5,27:6,26:8,21:9,16:10,11:11,19:12,23:17,4:41,12:e,17:s,24:i,25:A,28:r,29:a,30:o}),{4:42,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:43,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:44,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},t(b,[2,26]),t([5,8,15,17,18,20,22,28,29,32,33,34,35,36,37,38],[2,11]),t(b,[2,21],{25:[1,45]}),t(b,[2,25],{24:[1,46]}),{1:[2,1]},{4:47,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:48,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:49,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:50,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:51,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:52,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:53,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:54,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:55,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:56,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},t(U,[2,6],{8:x}),t(T,[2,4]),{1:[2,2]},{7:32,8:n,18:[1,58],20:h,28:l,29:c,32:g,33:u,34:p,35:m,36:d,37:f,38:S},{18:[1,59]},t(v,[2,10]),{4:60,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:61,11:11,12:e,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},{4:65,6:37,9:13,10:66,11:11,12:e,13:64,14:63,16:10,17:s,18:[1,62],19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},t(E,[2,9],{7:67,8:n,20:h,28:l,29:c,32:g,33:u,34:p,35:m,36:d,37:f,38:S}),t(q,[2,27],{20:h,32:g,33:u,34:p,35:m,36:d,37:f}),t(q,[2,28],{20:h,32:g,33:u,34:p,35:m,36:d,37:f}),t(q,[2,29],{20:h,32:g,33:u,34:p,35:m,36:d,37:f}),t(b,[2,22],{24:[1,68]}),t(b,[2,24]),t(q,[2,30],{20:h,32:g,33:u,34:p,35:m,36:d,37:f}),t(q,[2,31],{20:h,32:g,33:u,34:p,35:m,36:d,37:f}),t(R,[2,32],{20:h,34:p,35:m,36:d,37:f}),t(R,[2,33],{20:h,34:p,35:m,36:d,37:f}),t(I,[2,34],{20:h,35:m,36:d}),t(P,[2,35],{20:h}),t(P,[2,36],{20:h}),t(I,[2,37],{20:h,35:m,36:d}),t(V,[2,38],{20:h,28:l,29:c,32:g,33:u,34:p,35:m,36:d,37:f,38:S}),t(b,[2,18]),t(T,[2,5]),t(b,[2,41]),t(b,[2,47]),t(V,[2,20],{20:h,28:l,29:c,32:g,33:u,34:p,35:m,36:d,37:f,38:S}),t(V,[2,19],{20:h,28:l,29:c,32:g,33:u,34:p,35:m,36:d,37:f,38:S}),t(y,[2,16]),{15:[1,70],18:[1,69]},t(v,[2,14]),t(v,[2,12],{7:32,8:n,20:h,28:l,29:c,32:g,33:u,34:p,35:m,36:d,37:f,38:S}),t(v,[2,13]),t(U,[2,7],{8:x}),t(b,[2,23]),t(y,[2,17]),{4:65,6:37,9:13,10:66,11:11,12:e,13:71,16:10,17:s,19:12,21:9,23:17,24:i,25:A,26:8,27:6,28:r,29:a,30:o,31:5},t(v,[2,15])],defaultActions:{4:[2,3],21:[2,1],34:[2,2]},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],i=[null],A=[],r=this.table,a="",o=0,n=0,h=0,l=2,c=1,g=A.slice.call(arguments,1),u=Object.create(this.lexer),p={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(p.yy[m]=this.yy[m]);u.setInput(t,p.yy),p.yy.lexer=u,p.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var d=u.yylloc;A.push(d);var f=u.options&&u.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var S,b,E,U,x,T,v,q,R,I=function(){var t;return"number"!=typeof(t=u.lex()||c)&&(t=e.symbols_[t]||t),t},P={};;){if(E=s[s.length-1],this.defaultActions[E]?U=this.defaultActions[E]:(null==S&&(S=I()),U=r[E]&&r[E][S]),void 0===U||!U.length||!U[0]){var V="";for(T in R=[],r[E])this.terminals_[T]&&T>l&&R.push("'"+this.terminals_[T]+"'");V=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+R.join(", ")+", got '"+(this.terminals_[S]||S)+"'":"Parse error on line "+(o+1)+": Unexpected "+(S==c?"end of input":"'"+(this.terminals_[S]||S)+"'"),this.parseError(V,{text:u.match,token:this.terminals_[S]||S,line:u.yylineno,loc:d,expected:R})}if(U[0]instanceof Array&&U.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E+", token: "+S);switch(U[0]){case 1:s.push(S),i.push(u.yytext),A.push(u.yylloc),s.push(U[1]),S=null,b?(S=b,b=null):(n=u.yyleng,a=u.yytext,o=u.yylineno,d=u.yylloc,h>0&&h--);break;case 2:if(v=this.productions_[U[1]][1],P.$=i[i.length-v],P._$={first_line:A[A.length-(v||1)].first_line,last_line:A[A.length-1].last_line,first_column:A[A.length-(v||1)].first_column,last_column:A[A.length-1].last_column},f&&(P._$.range=[A[A.length-(v||1)].range[0],A[A.length-1].range[1]]),void 0!==(x=this.performAction.apply(P,[a,n,o,p.yy,U[1],i,A].concat(g))))return x;v&&(s=s.slice(0,-1*v*2),i=i.slice(0,-1*v),A=A.slice(0,-1*v)),s.push(this.productions_[U[1]][0]),i.push(P.$),A.push(P._$),q=r[s[s.length-2]][s[s.length-1]],s.push(q);break;case 3:return!0}}return!0}},w={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var s,i,A;if(this.options.backtrack_lexer&&(A={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var r in A)this[r]=A[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),r=0;r<A.length;r++)if((s=this._input.match(this.rules[A[r]]))&&(!e||s[0].length>e[0].length)){if(e=s,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,A[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,A[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,s,i){switch(s){case 0:break;case 1:return 24;case 2:return 38;case 3:return 22;case 4:return 20;case 5:return 12;case 6:return 5;case 7:return e.yytext[0]}},rules:[/^(?:\s+)/,/^(?:[0-9]+)/,/^(?:(==|!=|<=|>=|<|>))/,/^(?:[+\-*/%]?=)/,/^(?:(\&\&)|\|\|)/,/^(?:[a-zA-Z_][a-zA-Z0-9._]*)/,/^(?:$)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};function Q(){this.yy={}}return B.lexer=w,Q.prototype=B,B.Parser=Q,new Q}();e.parser=A,e.Parser=A.Parser,e.parse=function(){return A.parse.apply(A,arguments)},e.main=()=>{},s.c[s.s]===t&&e.main(i.argv.slice(1))}).call(this,s("./node_modules/webpack/buildin/module.js")(t),s("./node_modules/process/browser.js"))},"./node_modules/eel-wasm/dist/src/astUtils.js":function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i={ASSIGNMENT_EXPRESSION:[{type:"NODE",key:"right"}],SCRIPT:[{type:"ARRAY",key:"body"}],EXPRESSION_BLOCK:[{type:"ARRAY",key:"body"}],UNARY_EXPRESSION:[{type:"NODE",key:"value"}],NUMBER_LITERAL:[],IDENTIFIER:[],CALL_EXPRESSION:[{type:"ARRAY",key:"arguments"},{type:"NODE",key:"callee"}],BINARY_EXPRESSION:[{type:"NODE",key:"left"},{type:"NODE",key:"right"}],LOGICAL_EXPRESSION:[{type:"NODE",key:"left"},{type:"NODE",key:"right"}]};e.mapAst=function t(e,s){const A=i[e.type];let r=e;if(null==A)throw new Error(`Unknown children definition for ${e.type}`);return A.forEach((i=>{if("NODE"===i.type){const A=e[i.key],a=t(A,s);a!==A&&(r=Object.assign(Object.assign({},r),{[i.key]:a}))}else if("ARRAY"===i.type){const A=e[i.key],a=A.map((e=>t(e,s))),o=A.some(((t,e)=>t!==a[e]));o&&(r=Object.assign(Object.assign({},r),{[i.key]:a}))}})),s(r)}},"./node_modules/eel-wasm/dist/src/compiler.js":function(t,e,s){"use strict";var i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},A=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var s in t)Object.hasOwnProperty.call(t,s)&&(e[s]=t[s]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});const r=s("./node_modules/eel-wasm/dist/src/parser.js"),a=s("./node_modules/eel-wasm/dist/src/emitter.js"),o=s("./node_modules/eel-wasm/dist/src/encoding.js"),n=i(s("./node_modules/eel-wasm/dist/src/shims.js")),h=A(s("./node_modules/eel-wasm/dist/src/utils.js")),l=s("./node_modules/eel-wasm/dist/src/wasmFunctions.js"),c=s("./node_modules/eel-wasm/dist/src/constants.js");e.compileModule=function({pools:t,functions:e,eelVersion:s=2,preParsed:i=!1}){if(Object.keys(t).includes("shims"))throw new Error('You may not name a pool "shims". "shims" is reserved for injected JavaScript functions.');const A=[];Object.entries(t).forEach((([t,e])=>{e.forEach((e=>{A.push([t,e])}))}));const g=new h.ScopedIdMap;A.forEach((([t,e])=>{g.get(t,e)}));const u=Object.entries(n.default).map((([t,e])=>({args:new Array(e.length).fill(null).map((t=>o.VAL_TYPE.f64)),returns:[o.VAL_TYPE.f64],name:t}))),p=[],m=[];Object.entries(e).forEach((([e,{pool:A,code:n}])=>{if(null==t[A]){const s=Object.keys(t);if(0===s.length)throw new Error(`The function "${e}" was declared as using a variable pool named "${A}" but no pools were defined.`);throw new Error(`The function "${e}" was declared as using a variable pool named "${A}" which is not among the variable pools defined. The defined variable pools are: ${h.formatList(s)}.`)}const c=i?n:r.parse(n);if("string"==typeof c)throw new Error("Got passed unparsed code without setting the preParsed flag");if("SCRIPT"!==c.type)throw new Error("Invalid AST");if(0===c.body.length)return;const d=[],f={resolveVar:t=>/^reg\d\d$/.test(t)?g.get(null,t):g.get(A,t),resolveLocal:t=>(d.push(t),d.length-1),resolveFunc:t=>{const e=u.findIndex((e=>e.name===t));if(-1!==e){const i=o.op.call(e);return"rand"===t&&1===s?[...i,o.op.f64_floor]:i}if(null==l.localFuncMap[t])return null;let i=p.indexOf(t);return-1===i&&(p.push(t),i=p.length-1),o.op.call(i+u.length)},rawSource:n},S=a.emit(c,f);m.push({binary:S,exportName:e,args:[],returns:[],localVariables:d})}));const d=p.map((t=>{const e=l.localFuncMap[t];if(null==e)throw new Error(`Undefined local function "${t}"`);return e})),f=t=>[...t.args,"|",...t.returns].join("-"),S=[],b=new Map;function E(t){const e=f(t),s=b.get(e);if(null==s)throw new Error(`Failed to get a type index for key ${e}`);return s}[...u,...d,...m].forEach((t=>{const e=f(t);b.has(e)||(S.push([o.FUNCTION_TYPE,...o.encodeFlatVector(t.args),...o.encodeFlatVector(t.returns)]),b.set(e,S.length-1))}));const U=[...A.map((([t,e])=>[...o.encodeString(t),...o.encodeString(e),o.GLOBAL_TYPE,o.VAL_TYPE.f64,o.MUTABILITY.var])),...u.map(((t,e)=>{const s=E(t);return[...o.encodeString("shims"),...o.encodeString(t.name),o.TYPE_IDX,...o.unsignedLEB128(s)]}))],x=[...d,...m].map((t=>{const e=E(t);return o.unsignedLEB128(e)})),T=[[1,...o.unsignedLEB128(c.WASM_MEMORY_SIZE),...o.unsignedLEB128(c.WASM_MEMORY_SIZE)]],v=g.size()-A.length,q=h.times(v,(()=>[o.VAL_TYPE.f64,o.MUTABILITY.var,...o.op.f64_const(0),o.op.end])),R=[...m].map(((t,e)=>{const s=e+u.length+d.length;return[...o.encodeString(t.exportName),o.EXPORT_TYPE.FUNC,...o.unsignedLEB128(s)]})),I=[...d,...m].map((t=>{var e;const s=(null!==(e=t.localVariables)&&void 0!==e?e:[]).map((t=>[...o.unsignedLEB128(1),t]));return o.encodeFlatVector([...o.encodeNestedVector(s),...t.binary,o.op.end])}));return new Uint8Array([...o.MAGIC,...o.WASM_VERSION,...o.encodeSection(o.SECTION.TYPE,S),...o.encodeSection(o.SECTION.IMPORT,U),...o.encodeSection(o.SECTION.FUNC,x),...o.encodeSection(o.SECTION.MEMORY,T),...o.encodeSection(o.SECTION.GLOBAL,q),...o.encodeSection(o.SECTION.EXPORT,R),...o.encodeSection(o.SECTION.CODE,I)])}},"./node_modules/eel-wasm/dist/src/constants.js":function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MAX_LOOP_COUNT=1048576,e.BUFFER_SIZE=8388608,e.WASM_MEMORY_SIZE=Math.ceil(8*e.BUFFER_SIZE*2/65536)},"./node_modules/eel-wasm/dist/src/emitter.js":function(t,e,s){"use strict";var i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const A=s("./node_modules/eel-wasm/dist/src/encoding.js"),r=i(s("./node_modules/eel-wasm/dist/src/shims.js")),a=s("./node_modules/eel-wasm/dist/src/errorUtils.js"),o=s("./node_modules/eel-wasm/dist/src/wasmFunctions.js"),n=s("./node_modules/eel-wasm/dist/src/utils.js"),h=s("./node_modules/eel-wasm/dist/src/constants.js");function l(t,e){var s,i,u;switch(t.type){case"SCRIPT":{const s=t.body.map(((t,s)=>[...l(t,e),A.op.drop]));return n.flatten(s)}case"EXPRESSION_BLOCK":return c(t.body,e);case"BINARY_EXPRESSION":{const s=l(t.left,e),i=l(t.right,e),r={"+":[A.op.f64_add],"-":[A.op.f64_sub],"*":[A.op.f64_mul],"/":e.resolveFunc("div"),"%":e.resolveFunc("mod"),"|":e.resolveFunc("bitwiseOr"),"&":e.resolveFunc("bitwiseAnd"),"^":e.resolveFunc("pow"),"==":[A.op.f64_sub,...A.IS_ZEROISH,A.op.f64_convert_i32_s],"!=":[A.op.f64_sub,...A.IS_NOT_ZEROISH,A.op.f64_convert_i32_s],"<":[A.op.f64_lt,A.op.f64_convert_i32_s],">":[A.op.f64_gt,A.op.f64_convert_i32_s],"<=":[A.op.f64_le,A.op.f64_convert_i32_s],">=":[A.op.f64_ge,A.op.f64_convert_i32_s]}[t.operator];if(null==r)throw a.createCompilerError(`Unknown binary expression operator ${t.operator}`,t.loc,e.rawSource);return[...s,...i,...r]}case"CALL_EXPRESSION":{const i=t.callee.value,u=t.arguments,p=s=>{if(u.length<s)throw a.createUserError(`Too few arguments passed to \`${i}()\`. Expected ${s} but only got ${u.length}.`,t.loc,e.rawSource);if(u.length>s)throw a.createUserError(`Too many arguments passed to \`${i}()\`. Expected ${s} but got ${u.length}.`,u[s].loc,e.rawSource)};switch(i){case"exec2":return p(2),c(t.arguments,e);case"exec3":return p(3),c(t.arguments,e);case"if":p(3);const[r,o,n]=t.arguments;return function(t,e,s,i){return[...l(t,i),...A.IS_NOT_ZEROISH,...A.op.if(A.BLOCK.f64),...l(e,i),A.op.else,...l(s,i),A.op.end]}(r,o,n,e);case"while":return p(1),function(t,e){const s=l(t,e),i=e.resolveLocal(A.VAL_TYPE.i32);return[...A.op.i32_const(0),...A.op.local_set(i),...A.op.loop(A.BLOCK.void),...A.op.local_get(i),...A.op.i32_const(1),A.op.i32_add,...A.op.local_tee(i),...A.op.i32_const(h.MAX_LOOP_COUNT),A.op.i32_lt_u,...s,...A.IS_NOT_ZEROISH,A.op.i32_and,...A.op.br_if(0),A.op.end,...A.op.f64_const(0)]}(t.arguments[0],e);case"loop":return p(2),function(t,e,s){const i=l(e,s),r=s.resolveLocal(A.VAL_TYPE.i32);return[...A.op.block(A.BLOCK.void),...l(t,s),A.op.i32_trunc_f64_s,...A.op.local_tee(r),...A.op.i32_const(0),A.op.i32_le_s,...A.op.br_if(1),...A.op.loop(A.BLOCK.void),...i,A.op.drop,...A.op.local_get(r),...A.op.i32_const(1),A.op.i32_sub,...A.op.local_tee(r),...A.op.i32_const(0),A.op.i32_ne,...A.op.br_if(0),A.op.end,A.op.end,...A.op.f64_const(0)]}(t.arguments[0],t.arguments[1],e);case"megabuf":case"gmegabuf":p(1);const u=e.resolveLocal(A.VAL_TYPE.i32);return[...l(t.arguments[0],e),...null!==(s=e.resolveFunc("_getBufferIndex"))&&void 0!==s?s:[],...A.op.local_tee(u),...A.op.i32_const(-1),A.op.i32_ne,...A.op.if(A.BLOCK.f64),...A.op.local_get(u),...A.op.f64_load(3,g(i)),A.op.else,...A.op.f64_const(0),A.op.end];case"assign":p(2);const m=t.arguments[0];if("IDENTIFIER"!=m.type)throw a.createUserError("Expected the first argument of `assign()` to be an identifier.",m.loc,e.rawSource);const d=e.resolveVar(m.value);return[...l(t.arguments[1],e),...A.op.global_set(d),...A.op.global_get(d)]}const m=n.flatten(t.arguments.map((t=>l(t,e))));switch(i){case"abs":return p(1),[...m,A.op.f64_abs];case"sqrt":return p(1),[...m,A.op.f64_abs,A.op.f64_sqrt];case"int":case"floor":return p(1),[...m,A.op.f64_floor];case"min":return p(2),[...m,A.op.f64_min];case"max":return p(2),[...m,A.op.f64_max];case"above":return p(2),[...m,A.op.f64_gt,A.op.f64_convert_i32_s];case"below":return p(2),[...m,A.op.f64_lt,A.op.f64_convert_i32_s];case"equal":return p(2),[...m,A.op.f64_sub,...A.IS_ZEROISH,A.op.f64_convert_i32_s];case"bnot":return p(1),[...m,...A.IS_ZEROISH,A.op.f64_convert_i32_s];case"ceil":return p(1),[...m,A.op.f64_ceil]}const d=e.resolveFunc(i);if(null==d||i.startsWith("_"))throw a.createUserError(`"${i}" is not defined.`,t.callee.loc,e.rawSource);if(null!=r.default[i])p(r.default[i].length);else{if(null==o.localFuncMap[i])throw a.createCompilerError(`Missing arity information for the function \`${i}()\``,t.callee.loc,e.rawSource);p(o.localFuncMap[i].args.length)}return[...m,...d]}case"ASSIGNMENT_EXPRESSION":{const{left:s}=t,r=l(t.right,e),o=function(t,e){const s={"+=":[A.op.f64_add],"-=":[A.op.f64_sub],"*=":[A.op.f64_mul],"/=":[A.op.f64_div],"%=":e.resolveFunc("mod"),"=":null}[t.operator];if(void 0===s)throw a.createCompilerError(`Unknown assignment operator "${t.operator}"`,t.loc,e.rawSource);return s}(t,e);if("IDENTIFIER"===s.type){const t=e.resolveVar(s.value),i=A.op.global_get(t),a=A.op.global_set(t);return null===o?[...r,...a,...i]:[...i,...r,...o,...a,...i]}if("CALL_EXPRESSION"!==s.type)throw a.createCompilerError(`Unexpected left hand side type for assignment: ${s.type}`,t.loc,e.rawSource);const n=e.resolveLocal(A.VAL_TYPE.i32);if(1!==s.arguments.length)throw a.createUserError(`Expected 1 argument when assinging to a buffer but got ${s.arguments.length}.`,0===s.arguments.length?s.loc:s.arguments[1].loc,e.rawSource);const h=s.callee.value;if("gmegabuf"!==h&&"megabuf"!==h)throw a.createUserError("The only function calls which may be assigned to are `gmegabuf()` and `megabuf()`.",s.callee.loc,e.rawSource);const c=g(h);if(null===o){const t=e.resolveLocal(A.VAL_TYPE.i32),a=e.resolveLocal(A.VAL_TYPE.f64);return[...r,...A.op.local_set(a),...l(s.arguments[0],e),...null!==(i=e.resolveFunc("_getBufferIndex"))&&void 0!==i?i:[],...A.op.local_tee(t),...A.op.i32_const(0),A.op.i32_lt_s,...A.op.if(A.BLOCK.f64),...A.op.f64_const(0),A.op.else,...A.op.local_get(t),...A.op.local_tee(n),...A.op.local_get(a),...A.op.f64_store(3,c),...A.op.local_get(a),A.op.end]}const p=e.resolveLocal(A.VAL_TYPE.i32),m=e.resolveLocal(A.VAL_TYPE.i32),d=e.resolveLocal(A.VAL_TYPE.f64),f=e.resolveLocal(A.VAL_TYPE.f64);return[...r,...A.op.local_set(d),...l(s.arguments[0],e),...null!==(u=e.resolveFunc("_getBufferIndex"))&&void 0!==u?u:[],...A.op.local_tee(p),...A.op.i32_const(-1),A.op.i32_ne,...A.op.local_tee(m),...A.op.if(A.BLOCK.f64),...A.op.local_get(p),...A.op.f64_load(3,c),A.op.else,...A.op.f64_const(0),A.op.end,...A.op.local_get(d),...o,...A.op.local_tee(f),...A.op.local_get(m),...A.op.if(A.BLOCK.void),...A.op.local_get(p),...A.op.local_get(f),...A.op.f64_store(3,c),A.op.end]}case"LOGICAL_EXPRESSION":{const s=l(t.left,e),i=l(t.right,e),r={"&&":{comparison:A.IS_ZEROISH,shortCircutValue:0},"||":{comparison:A.IS_NOT_ZEROISH,shortCircutValue:1}}[t.operator];if(null==r)throw a.createCompilerError(`Unknown logical expression operator ${t.operator}`,t.loc,e.rawSource);const{comparison:o,shortCircutValue:n}=r;return[...s,...o,...A.op.if(A.BLOCK.f64),...A.op.f64_const(n),A.op.else,...i,...A.IS_NOT_ZEROISH,A.op.f64_convert_i32_s,A.op.end]}case"UNARY_EXPRESSION":{const s=l(t.value,e),i={"-":[A.op.f64_neg],"+":[],"!":[...A.IS_ZEROISH,A.op.f64_convert_i32_s]}[t.operator];if(null==i)throw a.createCompilerError(`Unknown logical unary operator ${t.operator}`,t.loc,e.rawSource);return[...s,...i]}case"IDENTIFIER":const p=t.value;return A.op.global_get(e.resolveVar(p));case"NUMBER_LITERAL":return A.op.f64_const(t.value);default:throw a.createCompilerError(`Unknown AST node type ${t.type}`,t.loc,e.rawSource)}}function c(t,e){const s=t.map(((t,s)=>l(t,e)));return n.flatten(n.arrayJoin(s,[A.op.drop]))}function g(t){switch(t){case"gmegabuf":return 8*h.BUFFER_SIZE;case"megabuf":return 0}}e.emit=l},"./node_modules/eel-wasm/dist/src/encoding.js":function(t,e,s){"use strict";var i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var s in t)Object.hasOwnProperty.call(t,s)&&(e[s]=t[s]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});const A=i(s("./node_modules/eel-wasm/dist/src/ieee754.js")),r=s("./node_modules/eel-wasm/dist/src/utils.js");function a(t){const e=new Uint8Array(8);return A.write(e,t),e}function o(t){const e=[];do{let s=127&t;0!=(t>>>=7)&&(s|=128),e.push(s)}while(0!==t);return e}function n(t){let e=[],s=0,i=Math.ceil(Math.log2(Math.abs(t))),A=t<0,r=!0;for(;r;)s=127&t,t>>=7,A&&(t|=-(1<<i-7)),0==t&&0==(64&s)||-1==t&&64==(64&s)?r=!1:s|=128,e.push(s);return e}e.MAGIC=[0,97,115,109],e.WASM_VERSION=[1,0,0,0],e.EPSILON=1e-5,e.SECTION={TYPE:1,IMPORT:2,FUNC:3,MEMORY:5,GLOBAL:6,EXPORT:7,CODE:10},e.EXPORT_TYPE={FUNC:0,TABLE:1,MEMORY:2,GLOBAL:3},e.op={block:t=>[2,t],loop:t=>[3,t],if:t=>[4,t],else:5,end:11,br_if:t=>[13,...o(t)],call:t=>[16,...o(t)],drop:26,select:27,local_get:t=>[32,...o(t)],local_set:t=>[33,...o(t)],local_tee:t=>[34,...o(t)],global_get:t=>[35,...o(t)],global_set:t=>[36,...o(t)],f64_load:(t,e)=>[43,...o(t),...o(e)],f64_store:(t,e)=>[57,...o(t),...o(e)],i32_const:t=>[65,...n(t)],f64_const:t=>[68,...a(t)],i32_eqz:69,i32_ne:71,i32_lt_s:72,i32_lt_u:73,i32_gt_s:74,i32_le_s:76,i32_le_u:77,i32_ge_s:78,f64_eq:97,f64_ne:98,f64_lt:99,f64_gt:100,f64_le:101,f64_ge:102,i32_add:106,i32_sub:107,i32_mul:108,i32_rem_s:111,i32_and:113,i32_or:114,i64_rem_s:129,i64_and:131,i64_or:132,f64_abs:153,f64_neg:154,f64_ceil:155,f64_floor:156,f64_sqrt:159,f64_add:160,f64_sub:161,f64_mul:162,f64_div:163,f64_min:164,f64_max:165,i32_trunc_f64_s:170,i32_trunc_f64_u:171,i64_trunc_s_f64:176,f64_convert_i64_s:185,f64_convert_i32_s:183},e.VAL_TYPE={i32:127,i64:126,f32:125,f64:124},e.MUTABILITY={const:0,var:1},e.BLOCK={void:64,i32:127,i64:126,f32:125,f64:124},e.FUNCTION_TYPE=96,e.MEMORY_IDX=2,e.GLOBAL_TYPE=3,e.TYPE_IDX=0,e.IS_ZEROISH=[e.op.f64_abs,...e.op.f64_const(e.EPSILON),e.op.f64_lt],e.IS_NOT_ZEROISH=[e.op.f64_abs,...e.op.f64_const(e.EPSILON),e.op.f64_gt],e.encodef64=a,e.encodeString=t=>[t.length].concat(t.split("").map((t=>t.charCodeAt(0)))),e.unsignedLEB128=o,e.signedLEB128=n,e.encodeFlatVector=t=>o(t.length).concat(t),e.encodeNestedVector=t=>o(t.length).concat(r.flatten(t)),e.encodeSection=function(t,s){if(0===s.length)return[];const i=e.encodeFlatVector(e.encodeNestedVector(s));return i.unshift(t),i}},"./node_modules/eel-wasm/dist/src/envParser.js":function(t,e,s){let i=s("./node_modules/eel-wasm/dist/build/parser.js");t.exports={parse:i.parse}},"./node_modules/eel-wasm/dist/src/errorUtils.js":function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=s("./node_modules/eel-wasm/dist/src/utils.js");function A(t,e,s=1){const A=Math.max(t.first_line-1-s,0),r=t.last_line+s,a=e.split("\n").slice(A,r).map(((e,s)=>{const i=s+A+1;return`${i>=t.first_line&&i<=t.last_line?">":" "} ${i} | ${e}`}));if(t.first_line===t.last_line){const e=i.repeat(t.first_column," "),s=i.repeat(t.last_column-t.first_column,"^"),r=t.first_line-A;a.splice(r,0,` | ${e}${s}`)}return a.join("\n")}e.printLoc=A;class r extends Error{constructor(t,e,s){super(t),this.sourceContext=A(e,s),this.loc=e}}class a extends r{}e.createUserError=function(t,e,s){return new a(t,e,s)},e.createCompilerError=function(t,e,s){return new r(t,e,s)}},"./node_modules/eel-wasm/dist/src/ieee754.js":function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.write=function(t,e){let s=52;var i,A,r,a=64-s-1,o=(1<<a)-1,n=o>>1,h=23===s?Math.pow(2,-24)-Math.pow(2,-77):0,l=0,c=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(A=isNaN(e)?1:0,i=o):(i=Math.floor(Math.log(e)/Math.LN2),e*(r=Math.pow(2,-i))<1&&(i--,r*=2),(e+=i+n>=1?h/r:h*Math.pow(2,1-n))*r>=2&&(i++,r/=2),i+n>=o?(A=0,i=o):i+n>=1?(A=(e*r-1)*Math.pow(2,s),i+=n):(A=e*Math.pow(2,n-1)*Math.pow(2,s),i=0));s>=8;t[0+l]=255&A,l+=1,A/=256,s-=8);for(i=i<<s|A,a+=s;a>0;t[0+l]=255&i,l+=1,i/=256,a-=8);t[0+l-1]|=128*c}},"./node_modules/eel-wasm/dist/src/index.js":function(t,e,s){"use strict";var i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const A=s("./node_modules/eel-wasm/dist/src/parser.js");e.parse=A.parse;const r=s("./node_modules/eel-wasm/dist/src/compiler.js");e.compileModule=r.compileModule;const a=i(s("./node_modules/eel-wasm/dist/src/shims.js"));e.shims=a.default;const o=s("./node_modules/eel-wasm/dist/src/loader.js");e.loadModule=o.loadModule},"./node_modules/eel-wasm/dist/src/loader.js":function(t,e,s){"use strict";var i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const A=i(s("./node_modules/eel-wasm/dist/src/shims.js")),r=s("./node_modules/eel-wasm/dist/src/compiler.js");e.loadModule=async function({pools:t,functions:e,eelVersion:s=2}){let i={};Object.entries(t).forEach((([t,e])=>{i[t]=new Set(Object.keys(e))}));const a=r.compileModule({pools:i,functions:e,eelVersion:s}),o=await WebAssembly.compile(a);var n=Object.assign(Object.assign({},t),{shims:A.default});return await WebAssembly.instantiate(o,n)}},"./node_modules/eel-wasm/dist/src/parser.js":function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=s("./node_modules/eel-wasm/dist/src/preProcessor.js"),A=s("./node_modules/eel-wasm/dist/src/envParser.js"),r=s("./node_modules/eel-wasm/dist/src/astUtils.js"),a=s("./node_modules/eel-wasm/dist/src/errorUtils.js");function o(t,e){const s=i.getLoc(e,t.first_column),A=i.getLoc(e,t.last_column);return{first_column:s.column,last_column:A.column,first_line:s.line,last_line:A.line}}e.parse=function(t){const[e,s]=i.preProcess(t);try{const i=A.parse(e);return r.mapAst(i,(e=>{if(1!==e.loc.first_line||1!=e.loc.last_line)throw a.createCompilerError("Unexpected multiline",e.loc,t);return Object.assign(Object.assign({},e),{loc:o(e.loc,s)})}))}catch(e){if(null==e.hash)throw e;throw a.createUserError(`Parse Error: ${e.message.split("\n")[3]}`,o(e.hash.loc,s),t)}}},"./node_modules/eel-wasm/dist/src/preProcessor.js":function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getLoc=function(t,e){let s={destCol:1,srcCol:1,srcLine:1};t.forEach((t=>{t.destCol>e||(s=t)}));const i=e-s.destCol;return{column:s.srcCol+i,line:s.srcLine}},e.preProcess=function(t){const e=[];let s=1,i="",A=0,r=!1,a=!1,o=!1;for(let n=0;n<t.length;n++){const h=t[n];if(o){const t=i.length+1,r=n-A+1;e.push({destCol:t,srcCol:r,srcLine:s}),o=!1}"\n"===h?(r=!1,s++,A=n+1,o=!0):"\r"===h&&"\n"===t[n+1]?(n++,r=!1,s++,A=n+1,o=!0):a&&"*"===h&&"/"===t[n+1]?(a=!1,n++,o=!0):"\\"===h&&"\\"===t[n+1]||"/"===h&&"/"===t[n+1]?(r=!0,n++):"/"===h&&"*"===t[n+1]?(a=!0,n++):r||a||(i+=h)}return[i,e]}},"./node_modules/eel-wasm/dist/src/shims.js":function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i={sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,atan2:Math.atan2,rand:t=>Math.random()*t,pow:Math.pow,log:Math.log,log10:Math.log10,exp:Math.exp,sigmoid:function(t,e){const s=1+Math.exp(-t*e);return Math.abs(s)>1e-5?1/s:0}};e.default=i},"./node_modules/eel-wasm/dist/src/utils.js":function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.arrayJoin=function(t,e){const s=[];for(let i=0;i<t.length;i++)s.push(t[i]),i===t.length-1||s.push(e);return s},e.flatten=function(t){return[].concat.apply([],t)},e.times=function(t,e){return new Array(t).fill(null).map(((t,s)=>e(s)))},e.repeat=function(t,e){return new Array(t).fill(e).join("")},e.ScopedIdMap=class{constructor(){this._map=new Map}get(t,e){const s=null==t?e:`${t}::${e}`;return this._map.has(s)||this._map.set(s,this._map.size),this._map.get(s)}size(){return this._map.size}},e.formatList=function(t){if(0===t.length)throw new Error("Cannot format an empty list");if(1===t.length)return t[0];const e=t.map((t=>`"${t}"`)),s=e.pop();return e.join(", ")+` and ${s}`}},"./node_modules/eel-wasm/dist/src/wasmFunctions.js":function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const i=s("./node_modules/eel-wasm/dist/src/encoding.js"),A=s("./node_modules/eel-wasm/dist/src/constants.js");e.localFuncMap={sqr:{args:[i.VAL_TYPE.f64],returns:[i.VAL_TYPE.f64],binary:[...i.op.local_get(0),...i.op.local_get(0),i.op.f64_mul]},bor:{args:[i.VAL_TYPE.f64,i.VAL_TYPE.f64],returns:[i.VAL_TYPE.f64],binary:[...i.op.local_get(0),...i.IS_NOT_ZEROISH,...i.op.local_get(1),...i.IS_NOT_ZEROISH,i.op.i32_or,...i.op.i32_const(0),i.op.i32_ne,i.op.f64_convert_i32_s]},band:{args:[i.VAL_TYPE.f64,i.VAL_TYPE.f64],returns:[i.VAL_TYPE.f64],binary:[...i.op.local_get(0),...i.IS_NOT_ZEROISH,...i.op.local_get(1),...i.IS_NOT_ZEROISH,i.op.i32_and,...i.op.i32_const(0),i.op.i32_ne,i.op.f64_convert_i32_s]},sign:{args:[i.VAL_TYPE.f64],returns:[i.VAL_TYPE.f64],binary:[...i.op.f64_const(0),...i.op.local_get(0),i.op.f64_lt,...i.op.local_get(0),...i.op.f64_const(0),i.op.f64_lt,i.op.i32_sub,i.op.f64_convert_i32_s]},mod:{args:[i.VAL_TYPE.f64,i.VAL_TYPE.f64],returns:[i.VAL_TYPE.f64],localVariables:[i.VAL_TYPE.i32],binary:[...i.op.local_get(1),i.op.i32_trunc_f64_s,...i.op.local_tee(2),...i.op.i32_const(0),i.op.i32_ne,...i.op.if(i.BLOCK.f64),...i.op.local_get(0),i.op.i32_trunc_f64_s,...i.op.local_get(2),i.op.i32_rem_s,i.op.f64_convert_i32_s,i.op.else,...i.op.f64_const(0),i.op.end]},bitwiseOr:{args:[i.VAL_TYPE.f64,i.VAL_TYPE.f64],returns:[i.VAL_TYPE.f64],binary:[...i.op.local_get(0),i.op.i64_trunc_s_f64,...i.op.local_get(1),i.op.i64_trunc_s_f64,i.op.i64_or,i.op.f64_convert_i64_s]},bitwiseAnd:{args:[i.VAL_TYPE.f64,i.VAL_TYPE.f64],returns:[i.VAL_TYPE.f64],binary:[...i.op.local_get(0),i.op.i64_trunc_s_f64,...i.op.local_get(1),i.op.i64_trunc_s_f64,i.op.i64_and,i.op.f64_convert_i64_s]},div:{args:[i.VAL_TYPE.f64,i.VAL_TYPE.f64],returns:[i.VAL_TYPE.f64],localVariables:[i.VAL_TYPE.i32],binary:[...i.op.local_get(1),...i.op.f64_const(0),i.op.f64_ne,...i.op.if(i.BLOCK.f64),...i.op.local_get(0),...i.op.local_get(1),i.op.f64_div,i.op.else,...i.op.f64_const(0),i.op.end]},_getBufferIndex:{args:[i.VAL_TYPE.f64],returns:[i.VAL_TYPE.i32],localVariables:[i.VAL_TYPE.f64,i.VAL_TYPE.i32],binary:[...i.op.f64_const(i.EPSILON),...i.op.local_get(0),i.op.f64_add,...i.op.local_tee(1),i.op.i32_trunc_f64_s,...i.op.local_set(2),...i.op.i32_const(-1),...i.op.local_get(2),...i.op.i32_const(8),i.op.i32_mul,...i.op.local_get(2),...i.op.i32_const(0),i.op.i32_lt_s,...i.op.local_get(2),...i.op.i32_const(A.BUFFER_SIZE-1),i.op.i32_gt_s,i.op.i32_or,i.op.select]}}},"./node_modules/process/browser.js":function(t,e){var s,i,A=t.exports={};function r(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function o(t){if(s===setTimeout)return setTimeout(t,0);if((s===r||!s)&&setTimeout)return s=setTimeout,setTimeout(t,0);try{return s(t,0)}catch(e){try{return s.call(null,t,0)}catch(e){return s.call(this,t,0)}}}!function(){try{s="function"==typeof setTimeout?setTimeout:r}catch(t){s=r}try{i="function"==typeof clearTimeout?clearTimeout:a}catch(t){i=a}}();var n,h=[],l=!1,c=-1;function g(){l&&n&&(l=!1,n.length?h=n.concat(h):c=-1,h.length&&u())}function u(){if(!l){var t=o(g);l=!0;for(var e=h.length;e;){for(n=h,h=[];++c<e;)n&&n[c].run();c=-1,e=h.length}n=null,l=!1,function(t){if(i===clearTimeout)return clearTimeout(t);if((i===a||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(t);try{i(t)}catch(e){try{return i.call(null,t)}catch(e){return i.call(this,t)}}}(t)}}function p(t,e){this.fun=t,this.array=e}function m(){}A.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var s=1;s<arguments.length;s++)e[s-1]=arguments[s];h.push(new p(t,e)),1!==h.length||l||o(u)},p.prototype.run=function(){this.fun.apply(null,this.array)},A.title="browser",A.browser=!0,A.env={},A.argv=[],A.version="",A.versions={},A.on=m,A.addListener=m,A.once=m,A.off=m,A.removeListener=m,A.removeAllListeners=m,A.emit=m,A.prependListener=m,A.prependOnceListener=m,A.listeners=function(t){return[]},A.binding=function(t){throw new Error("process.binding is not supported")},A.cwd=function(){return"/"},A.chdir=function(t){throw new Error("process.chdir is not supported")},A.umask=function(){return 0}},"./node_modules/webpack/buildin/module.js":function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},"./src/assemblyscript/presetFunctions.ts":function(t,e){t.exports=()=>"AGFzbQEAAAABPQpgAABgAXwBfGACfHwBfGACf38AYAR/f39/AGAJf39/f3x8fHx8AGADf399AGABfwF/YAJ/fwF/YAF+AX8CuBWMAQNlbnYFYWJvcnQABAhwaXhlbEVxcwtwZXJQaXhlbEVxcwAADHBpeGVsVmFyUG9vbAR3YXJwA3wBDHBpeGVsVmFyUG9vbAR6b29tA3wBDHBpeGVsVmFyUG9vbAd6b29tZXhwA3wBDHBpeGVsVmFyUG9vbAJjeAN8AQxwaXhlbFZhclBvb2wCY3kDfAEMcGl4ZWxWYXJQb29sAnN4A3wBDHBpeGVsVmFyUG9vbAJzeQN8AQxwaXhlbFZhclBvb2wCZHgDfAEMcGl4ZWxWYXJQb29sAmR5A3wBDHBpeGVsVmFyUG9vbANyb3QDfAEMcGl4ZWxWYXJQb29sA3JhZAN8AQxwaXhlbFZhclBvb2wDYW5nA3wBDHBpeGVsVmFyUG9vbAF4A3wBDHBpeGVsVmFyUG9vbAF5A3wBCHFWYXJQb29sAnExA3wBCHFWYXJQb29sAnEyA3wBCHFWYXJQb29sAnEzA3wBCHFWYXJQb29sAnE0A3wBCHFWYXJQb29sAnE1A3wBCHFWYXJQb29sAnE2A3wBCHFWYXJQb29sAnE3A3wBCHFWYXJQb29sAnE4A3wBCHFWYXJQb29sAnE5A3wBCHFWYXJQb29sA3ExMAN8AQhxVmFyUG9vbANxMTEDfAEIcVZhclBvb2wDcTEyA3wBCHFWYXJQb29sA3ExMwN8AQhxVmFyUG9vbANxMTQDfAEIcVZhclBvb2wDcTE1A3wBCHFWYXJQb29sA3ExNgN8AQhxVmFyUG9vbANxMTcDfAEIcVZhclBvb2wDcTE4A3wBCHFWYXJQb29sA3ExOQN8AQhxVmFyUG9vbANxMjADfAEIcVZhclBvb2wDcTIxA3wBCHFWYXJQb29sA3EyMgN8AQhxVmFyUG9vbANxMjMDfAEIcVZhclBvb2wDcTI0A3wBCHFWYXJQb29sA3EyNQN8AQhxVmFyUG9vbANxMjYDfAEIcVZhclBvb2wDcTI3A3wBCHFWYXJQb29sA3EyOAN8AQhxVmFyUG9vbANxMjkDfAEIcVZhclBvb2wDcTMwA3wBCHFWYXJQb29sA3EzMQN8AQhxVmFyUG9vbANxMzIDfAEIdFZhclBvb2wCdDEDfAEIdFZhclBvb2wCdDIDfAEIdFZhclBvb2wCdDMDfAEIdFZhclBvb2wCdDQDfAEIdFZhclBvb2wCdDUDfAEIdFZhclBvb2wCdDYDfAEIdFZhclBvb2wCdDcDfAEIdFZhclBvb2wCdDgDfAEKc2hhcGVQb29sMAN4XzADfAEKc2hhcGVQb29sMAN5XzADfAEKc2hhcGVQb29sMAVyYWRfMAN8AQpzaGFwZVBvb2wwBWFuZ18wA3wBCnNoYXBlUG9vbDADcl8wA3wBCnNoYXBlUG9vbDADZ18wA3wBCnNoYXBlUG9vbDADYl8wA3wBCnNoYXBlUG9vbDADYV8wA3wBCnNoYXBlUG9vbDAEcjJfMAN8AQpzaGFwZVBvb2wwBGcyXzADfAEKc2hhcGVQb29sMARiMl8wA3wBCnNoYXBlUG9vbDAEYTJfMAN8AQpzaGFwZVBvb2wwCmJvcmRlcl9yXzADfAEKc2hhcGVQb29sMApib3JkZXJfZ18wA3wBCnNoYXBlUG9vbDAKYm9yZGVyX2JfMAN8AQpzaGFwZVBvb2wwCmJvcmRlcl9hXzADfAEKc2hhcGVQb29sMA50aGlja291dGxpbmVfMAN8AQpzaGFwZVBvb2wwCnRleHR1cmVkXzADfAEKc2hhcGVQb29sMAp0ZXhfem9vbV8wA3wBCnNoYXBlUG9vbDAJdGV4X2FuZ18wA3wBCnNoYXBlUG9vbDAKYWRkaXRpdmVfMAN8AQpzaGFwZVBvb2wxA3hfMQN8AQpzaGFwZVBvb2wxA3lfMQN8AQpzaGFwZVBvb2wxBXJhZF8xA3wBCnNoYXBlUG9vbDEFYW5nXzEDfAEKc2hhcGVQb29sMQNyXzEDfAEKc2hhcGVQb29sMQNnXzEDfAEKc2hhcGVQb29sMQNiXzEDfAEKc2hhcGVQb29sMQNhXzEDfAEKc2hhcGVQb29sMQRyMl8xA3wBCnNoYXBlUG9vbDEEZzJfMQN8AQpzaGFwZVBvb2wxBGIyXzEDfAEKc2hhcGVQb29sMQRhMl8xA3wBCnNoYXBlUG9vbDEKYm9yZGVyX3JfMQN8AQpzaGFwZVBvb2wxCmJvcmRlcl9nXzEDfAEKc2hhcGVQb29sMQpib3JkZXJfYl8xA3wBCnNoYXBlUG9vbDEKYm9yZGVyX2FfMQN8AQpzaGFwZVBvb2wxDnRoaWNrb3V0bGluZV8xA3wBCnNoYXBlUG9vbDEKdGV4dHVyZWRfMQN8AQpzaGFwZVBvb2wxCnRleF96b29tXzEDfAEKc2hhcGVQb29sMQl0ZXhfYW5nXzEDfAEKc2hhcGVQb29sMQphZGRpdGl2ZV8xA3wBCnNoYXBlUG9vbDIDeF8yA3wBCnNoYXBlUG9vbDIDeV8yA3wBCnNoYXBlUG9vbDIFcmFkXzIDfAEKc2hhcGVQb29sMgVhbmdfMgN8AQpzaGFwZVBvb2wyA3JfMgN8AQpzaGFwZVBvb2wyA2dfMgN8AQpzaGFwZVBvb2wyA2JfMgN8AQpzaGFwZVBvb2wyA2FfMgN8AQpzaGFwZVBvb2wyBHIyXzIDfAEKc2hhcGVQb29sMgRnMl8yA3wBCnNoYXBlUG9vbDIEYjJfMgN8AQpzaGFwZVBvb2wyBGEyXzIDfAEKc2hhcGVQb29sMgpib3JkZXJfcl8yA3wBCnNoYXBlUG9vbDIKYm9yZGVyX2dfMgN8AQpzaGFwZVBvb2wyCmJvcmRlcl9iXzIDfAEKc2hhcGVQb29sMgpib3JkZXJfYV8yA3wBCnNoYXBlUG9vbDIOdGhpY2tvdXRsaW5lXzIDfAEKc2hhcGVQb29sMgp0ZXh0dXJlZF8yA3wBCnNoYXBlUG9vbDIKdGV4X3pvb21fMgN8AQpzaGFwZVBvb2wyCXRleF9hbmdfMgN8AQpzaGFwZVBvb2wyCmFkZGl0aXZlXzIDfAEKc2hhcGVQb29sMwN4XzMDfAEKc2hhcGVQb29sMwN5XzMDfAEKc2hhcGVQb29sMwVyYWRfMwN8AQpzaGFwZVBvb2wzBWFuZ18zA3wBCnNoYXBlUG9vbDMDcl8zA3wBCnNoYXBlUG9vbDMDZ18zA3wBCnNoYXBlUG9vbDMDYl8zA3wBCnNoYXBlUG9vbDMDYV8zA3wBCnNoYXBlUG9vbDMEcjJfMwN8AQpzaGFwZVBvb2wzBGcyXzMDfAEKc2hhcGVQb29sMwRiMl8zA3wBCnNoYXBlUG9vbDMEYTJfMwN8AQpzaGFwZVBvb2wzCmJvcmRlcl9yXzMDfAEKc2hhcGVQb29sMwpib3JkZXJfZ18zA3wBCnNoYXBlUG9vbDMKYm9yZGVyX2JfMwN8AQpzaGFwZVBvb2wzCmJvcmRlcl9hXzMDfAEKc2hhcGVQb29sMw50aGlja291dGxpbmVfMwN8AQpzaGFwZVBvb2wzCnRleHR1cmVkXzMDfAEKc2hhcGVQb29sMwp0ZXhfem9vbV8zA3wBCnNoYXBlUG9vbDMJdGV4X2FuZ18zA3wBCnNoYXBlUG9vbDMKYWRkaXRpdmVfMwN8AQMZGAgDBwkBAQICAQYFAAAAAAAAAAAAAAAAAAUDAQABBuwMigF8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt8AUQAAAAAAAAAAAt/AUEAC3wBRAAAAAAAAAAAC3wBRAAAAAAAAAAAC34BQgALB9kB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"},"./src/audio/audioLevels.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return i}));class i{constructor(t){let e;this.audio=t,e=this.audio.audioContext?this.audio.audioContext.sampleRate:44100;const s=e/this.audio.fftSize,i=Math.clamp(Math.round(20/s)-1,0,this.audio.numSamps-1),A=Math.clamp(Math.round(320/s)-1,0,this.audio.numSamps-1),r=Math.clamp(Math.round(2800/s)-1,0,this.audio.numSamps-1),a=Math.clamp(Math.round(11025/s)-1,0,this.audio.numSamps-1);this.starts=[i,A,r],this.stops=[A,r,a],this.val=new Float32Array(3),this.imm=new Float32Array(3),this.att=new Float32Array(3),this.avg=new Float32Array(3),this.longAvg=new Float32Array(3),this.att.fill(1),this.avg.fill(1),this.longAvg.fill(1)}get bass(){return this.val[0]}get bass_att(){return this.att[0]}get mid(){return this.val[1]}get mid_att(){return this.att[1]}get treb(){return this.val[2]}get treb_att(){return this.att[2]}static isFiniteNumber(t){return Number.isFinite(t)&&!Number.isNaN(t)}static adjustRateToFPS(t,e,s){return t**(e/s)}updateAudioLevels(t,e){if(this.audio.freqArray.length>0){let s=t;!i.isFiniteNumber(s)||s<15?s=15:s>144&&(s=144),this.imm.fill(0);for(let t=0;t<3;t++)for(let e=this.starts[t];e<this.stops[t];e++)this.imm[t]+=this.audio.freqArray[e];for(let t=0;t<3;t++){let A;A=this.imm[t]>this.avg[t]?.2:.5,A=i.adjustRateToFPS(A,30,s),this.avg[t]=this.avg[t]*A+this.imm[t]*(1-A),A=e<50?.9:.992,A=i.adjustRateToFPS(A,30,s),this.longAvg[t]=this.longAvg[t]*A+this.imm[t]*(1-A),this.longAvg[t]<.001?(this.val[t]=1,this.att[t]=1):(this.val[t]=this.imm[t]/this.longAvg[t],this.att[t]=this.avg[t]/this.longAvg[t])}}}}},"./src/audio/audioProcessor.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/audio/fft.js");class A{constructor(t){this.numSamps=512,this.fftSize=2*this.numSamps,this.fft=new i.default(this.fftSize,512,!0),t&&(this.audioContext=t,this.audible=t.createDelay(),this.analyser=t.createAnalyser(),this.analyser.smoothingTimeConstant=0,this.analyser.fftSize=this.fftSize,this.audible.connect(this.analyser),this.analyserL=t.createAnalyser(),this.analyserL.smoothingTimeConstant=0,this.analyserL.fftSize=this.fftSize,this.analyserR=t.createAnalyser(),this.analyserR.smoothingTimeConstant=0,this.analyserR.fftSize=this.fftSize,this.splitter=t.createChannelSplitter(2),this.audible.connect(this.splitter),this.splitter.connect(this.analyserL,0),this.splitter.connect(this.analyserR,1)),this.timeByteArray=new Uint8Array(this.fftSize),this.timeByteArrayL=new Uint8Array(this.fftSize),this.timeByteArrayR=new Uint8Array(this.fftSize),this.timeArray=new Int8Array(this.fftSize),this.timeByteArraySignedL=new Int8Array(this.fftSize),this.timeByteArraySignedR=new Int8Array(this.fftSize),this.tempTimeArrayL=new Int8Array(this.fftSize),this.tempTimeArrayR=new Int8Array(this.fftSize),this.timeArrayL=new Int8Array(this.numSamps),this.timeArrayR=new Int8Array(this.numSamps)}sampleAudio(){this.analyser.getByteTimeDomainData(this.timeByteArray),this.analyserL.getByteTimeDomainData(this.timeByteArrayL),this.analyserR.getByteTimeDomainData(this.timeByteArrayR),this.processAudio()}updateAudio(t,e,s){this.timeByteArray.set(t),this.timeByteArrayL.set(e),this.timeByteArrayR.set(s),this.processAudio()}processAudio(){for(let t=0,e=0,s=0;t<this.fftSize;t++)this.timeArray[t]=this.timeByteArray[t]-128,this.timeByteArraySignedL[t]=this.timeByteArrayL[t]-128,this.timeByteArraySignedR[t]=this.timeByteArrayR[t]-128,this.tempTimeArrayL[t]=.5*(this.timeByteArraySignedL[t]+this.timeByteArraySignedL[s]),this.tempTimeArrayR[t]=.5*(this.timeByteArraySignedR[t]+this.timeByteArraySignedR[s]),t%2==0&&(this.timeArrayL[e]=this.tempTimeArrayL[t],this.timeArrayR[e]=this.tempTimeArrayR[t],e+=1),s=t;this.freqArray=this.fft.timeToFrequencyDomain(this.timeArray),this.freqArrayL=this.fft.timeToFrequencyDomain(this.timeByteArraySignedL),this.freqArrayR=this.fft.timeToFrequencyDomain(this.timeByteArraySignedR)}connectAudio(t){t.connect(this.audible)}disconnectAudio(t){t.disconnect(this.audible)}}},"./src/audio/fft.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return i}));class i{constructor(t,e,s=!1){this.samplesIn=t,this.samplesOut=e,this.equalize=s,this.NFREQ=2*e,this.equalize&&this.initEqualizeTable(),this.initBitRevTable(),this.initCosSinTable()}initEqualizeTable(){this.equalizeArr=new Float32Array(this.samplesOut);const t=1/this.samplesOut;for(let e=0;e<this.samplesOut;e++)this.equalizeArr[e]=-.02*Math.log((this.samplesOut-e)*t)}initBitRevTable(){this.bitrevtable=new Uint16Array(this.NFREQ);for(let t=0;t<this.NFREQ;t++)this.bitrevtable[t]=t;let t=0;for(let e=0;e<this.NFREQ;e++){if(t>e){const s=this.bitrevtable[e];this.bitrevtable[e]=this.bitrevtable[t],this.bitrevtable[t]=s}let s=this.NFREQ>>1;for(;s>=1&&t>=s;)t-=s,s>>=1;t+=s}}initCosSinTable(){let t=2,e=0;for(;t<=this.NFREQ;)e+=1,t<<=1;this.cossintable=[new Float32Array(e),new Float32Array(e)],t=2;let s=0;for(;t<=this.NFREQ;){const e=-2*Math.PI/t;this.cossintable[0][s]=Math.cos(e),this.cossintable[1][s]=Math.sin(e),s+=1,t<<=1}}timeToFrequencyDomain(t){const e=new Float32Array(this.NFREQ),s=new Float32Array(this.NFREQ);for(let i=0;i<this.NFREQ;i++){const A=this.bitrevtable[i];A<this.samplesIn?e[i]=t[A]:e[i]=0,s[i]=0}let i=2,A=0;for(;i<=this.NFREQ;){const t=this.cossintable[0][A],r=this.cossintable[1][A];let a=1,o=0;const n=i>>1;for(let A=0;A<n;A++){for(let t=A;t<this.NFREQ;t+=i){const i=t+n,A=a*e[i]-o*s[i],r=a*s[i]+o*e[i];e[i]=e[t]-A,s[i]=s[t]-r,e[t]+=A,s[t]+=r}const h=a;a=h*t-o*r,o=o*t+h*r}i<<=1,A+=1}const r=new Float32Array(this.samplesOut);if(this.equalize)for(let t=0;t<this.samplesOut;t++)r[t]=this.equalizeArr[t]*Math.sqrt(e[t]*e[t]+s[t]*s[t]);else for(let t=0;t<this.samplesOut;t++)r[t]=Math.sqrt(e[t]*e[t]+s[t]*s[t]);return r}}},"./src/blankPreset.js":function(t,e,s){var i;void 0===(i=function(){return{baseVals:{gammaadj:1.25,wave_g:.5,mv_x:12,warpscale:1,brighten:0,mv_y:9,wave_scale:1,echo_alpha:0,additivewave:0,sx:1,sy:1,warp:.01,red_blue:0,wave_mode:0,wave_brighten:0,wrap:0,zoomexp:1,fshader:0,wave_r:.5,echo_zoom:1,wave_smoothing:.75,warpanimspeed:1,wave_dots:0,wave_x:.5,wave_y:.5,zoom:1,solarize:0,modwavealphabyvolume:0,dx:0,cx:.5,dy:0,darken_center:0,cy:.5,invert:0,bmotionvectorson:0,rot:0,modwavealphaend:.95,wave_mystery:-.2,decay:.9,wave_a:1,wave_b:.5,rating:5,modwavealphastart:.75,darken:0,echo_orient:0,ib_r:.5,ib_g:.5,ib_b:.5,ib_a:0,ib_size:0,ob_r:.5,ob_g:.5,ob_b:.5,ob_a:0,ob_size:0,mv_dx:0,mv_dy:0,mv_a:0,mv_r:.5,mv_g:.5,mv_b:.5,mv_l:0},init_eqs:function(){return{}},frame_eqs:function(t){return t.rkeys=["warp"],t.zoom=1.01+.02*t.treb_att,t.warp=.15+.25*t.bass_att,t},pixel_eqs:function(t){return t.warp=t.warp+.15*t.rad,t},waves:[{baseVals:{a:1,enabled:0,b:1,g:1,scaling:1,samples:512,additive:0,usedots:0,spectrum:0,r:1,smoothing:.5,thick:0,sep:0},init_eqs:function(t){return t.rkeys=[],t},frame_eqs:function(t){return t},point_eqs:""},{baseVals:{a:1,enabled:0,b:1,g:1,scaling:1,samples:512,additive:0,usedots:0,spectrum:0,r:1,smoothing:.5,thick:0,sep:0},init_eqs:function(t){return t.rkeys=[],t},frame_eqs:function(t){return t},point_eqs:""},{baseVals:{a:1,enabled:0,b:1,g:1,scaling:1,samples:512,additive:0,usedots:0,spectrum:0,r:1,smoothing:.5,thick:0,sep:0},init_eqs:function(t){return t.rkeys=[],t},frame_eqs:function(t){return t},point_eqs:""},{baseVals:{a:1,enabled:0,b:1,g:1,scaling:1,samples:512,additive:0,usedots:0,spectrum:0,r:1,smoothing:.5,thick:0,sep:0},init_eqs:function(t){return t.rkeys=[],t},frame_eqs:function(t){return t},point_eqs:""}],shapes:[{baseVals:{r2:0,a:1,enabled:0,b:0,tex_ang:0,thickoutline:0,g:0,textured:0,g2:1,tex_zoom:1,additive:0,border_a:.1,border_b:1,b2:0,a2:0,r:1,border_g:1,rad:.1,x:.5,y:.5,ang:0,sides:4,border_r:1},init_eqs:function(t){return t.rkeys=[],t},frame_eqs:function(t){return t}},{baseVals:{r2:0,a:1,enabled:0,b:0,tex_ang:0,thickoutline:0,g:0,textured:0,g2:1,tex_zoom:1,additive:0,border_a:.1,border_b:1,b2:0,a2:0,r:1,border_g:1,rad:.1,x:.5,y:.5,ang:0,sides:4,border_r:1},init_eqs:function(t){return t.rkeys=[],t},frame_eqs:function(t){return t}},{baseVals:{r2:0,a:1,enabled:0,b:0,tex_ang:0,thickoutline:0,g:0,textured:0,g2:1,tex_zoom:1,additive:0,border_a:.1,border_b:1,b2:0,a2:0,r:1,border_g:1,rad:.1,x:.5,y:.5,ang:0,sides:4,border_r:1},init_eqs:function(t){return t.rkeys=[],t},frame_eqs:function(t){return t}},{baseVals:{r2:0,a:1,enabled:0,b:0,tex_ang:0,thickoutline:0,g:0,textured:0,g2:1,tex_zoom:1,additive:0,border_a:.1,border_b:1,b2:0,a2:0,r:1,border_g:1,rad:.1,x:.5,y:.5,ang:0,sides:4,border_r:1},init_eqs:function(t){return t.rkeys=[],t},frame_eqs:function(t){return t}}],warp:"shader_body {\nret = texture2D(sampler_main, uv).rgb;\nret -= 0.004;\n}\n",comp:"shader_body {\nret = texture2D(sampler_main, uv).rgb;\nret *= hue_shader;\n}\n"}}.apply(e,[]))||(t.exports=i)},"./src/equations/presetEquationRunner.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/utils.js");class A{constructor(t,e,s){this.preset=t,this.texsizeX=s.texsizeX,this.texsizeY=s.texsizeY,this.mesh_width=s.mesh_width,this.mesh_height=s.mesh_height,this.aspectx=s.aspectx,this.aspecty=s.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.qs=i.default.range(1,33).map((t=>`q${t}`)),this.ts=i.default.range(1,9).map((t=>`t${t}`)),this.regs=i.default.range(100).map((t=>t<10?`reg0${t}`:`reg${t}`)),this.initializeEquations(e)}initializeEquations(t){this.runVertEQs=""!==this.preset.pixel_eqs,this.mdVSQInit=null,this.mdVSRegs=null,this.mdVSFrame=null,this.mdVSUserKeys=null,this.mdVSFrameMap=null,this.mdVSShapes=null,this.mdVSUserKeysShapes=null,this.mdVSFrameMapShapes=null,this.mdVSWaves=null,this.mdVSUserKeysWaves=null,this.mdVSFrameMapWaves=null,this.mdVSQAfterFrame=null,this.gmegabuf=new Array(1048576).fill(0);const e={frame:t.frame,time:t.time,fps:t.fps,bass:t.bass,bass_att:t.bass_att,mid:t.mid,mid_att:t.mid_att,treb:t.treb,treb_att:t.treb_att,meshx:this.mesh_width,meshy:this.mesh_height,aspectx:this.invAspectx,aspecty:this.invAspecty,pixelsx:this.texsizeX,pixelsy:this.texsizeY,gmegabuf:this.gmegabuf};this.mdVS=Object.assign({},this.preset.baseVals,e),this.mdVS.megabuf=new Array(1048576).fill(0),this.mdVS.rand_start=new Float32Array([Math.random(),Math.random(),Math.random(),Math.random()]),this.mdVS.rand_preset=new Float32Array([Math.random(),Math.random(),Math.random(),Math.random()]);const s=this.qs.concat(this.regs,Object.keys(this.mdVS)),A=this.preset.init_eqs(i.default.cloneVars(this.mdVS));this.mdVSQInit=i.default.pick(A,this.qs),this.mdVSRegs=i.default.pick(A,this.regs);const r=i.default.pick(A,Object.keys(i.default.omit(A,s)));if(r.megabuf=A.megabuf,r.gmegabuf=A.gmegabuf,this.mdVSFrame=this.preset.frame_eqs(Object.assign({},this.mdVS,this.mdVSQInit,this.mdVSRegs,r)),this.mdVSUserKeys=Object.keys(i.default.omit(this.mdVSFrame,s)),this.mdVSFrameMap=i.default.pick(this.mdVSFrame,this.mdVSUserKeys),this.mdVSQAfterFrame=i.default.pick(this.mdVSFrame,this.qs),this.mdVSRegs=i.default.pick(this.mdVSFrame,this.regs),this.mdVSWaves=[],this.mdVSTWaveInits=[],this.mdVSUserKeysWaves=[],this.mdVSFrameMapWaves=[],this.preset.waves&&this.preset.waves.length>0)for(let t=0;t<this.preset.waves.length;t++){const s=this.preset.waves[t],A=s.baseVals;if(0!==A.enabled){let r=Object.assign({},A,e);const a=this.qs.concat(this.ts,this.regs,Object.keys(r));Object.assign(r,this.mdVSQAfterFrame,this.mdVSRegs),r.megabuf=new Array(1048576).fill(0),s.init_eqs&&(r=s.init_eqs(r),this.mdVSRegs=i.default.pick(r,this.regs),Object.assign(r,A)),this.mdVSWaves.push(r),this.mdVSTWaveInits.push(i.default.pick(r,this.ts)),this.mdVSUserKeysWaves.push(Object.keys(i.default.omit(r,a))),this.mdVSFrameMapWaves.push(i.default.pick(r,this.mdVSUserKeysWaves[t]))}else this.mdVSWaves.push({}),this.mdVSTWaveInits.push({}),this.mdVSUserKeysWaves.push([]),this.mdVSFrameMapWaves.push({})}if(this.mdVSShapes=[],this.mdVSTShapeInits=[],this.mdVSUserKeysShapes=[],this.mdVSFrameMapShapes=[],this.preset.shapes&&this.preset.shapes.length>0)for(let t=0;t<this.preset.shapes.length;t++){const s=this.preset.shapes[t],A=s.baseVals;if(0!==A.enabled){let r=Object.assign({},A,e);const a=this.qs.concat(this.ts,this.regs,Object.keys(r));Object.assign(r,this.mdVSQAfterFrame,this.mdVSRegs),r.megabuf=new Array(1048576).fill(0),s.init_eqs&&(r=s.init_eqs(r),this.mdVSRegs=i.default.pick(r,this.regs),Object.assign(r,A)),this.mdVSShapes.push(r),this.mdVSTShapeInits.push(i.default.pick(r,this.ts)),this.mdVSUserKeysShapes.push(Object.keys(i.default.omit(r,a))),this.mdVSFrameMapShapes.push(i.default.pick(r,this.mdVSUserKeysShapes[t]))}else this.mdVSShapes.push({}),this.mdVSTShapeInits.push({}),this.mdVSUserKeysShapes.push([]),this.mdVSFrameMapShapes.push({})}}updatePreset(t,e){this.preset=t,this.initializeEquations(e)}updateGlobals(t){this.texsizeX=t.texsizeX,this.texsizeY=t.texsizeY,this.mesh_width=t.mesh_width,this.mesh_height=t.mesh_height,this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty}runFrameEquations(t){return this.mdVSFrame=Object.assign({},this.mdVS,this.mdVSQInit,this.mdVSFrameMap,t),this.mdVSFrame=this.preset.frame_eqs(this.mdVSFrame),this.mdVSFrameMap=i.default.pick(this.mdVSFrame,this.mdVSUserKeys),this.mdVSQAfterFrame=i.default.pick(this.mdVSFrame,this.qs),this.mdVSFrame}runPixelEquations(t){return this.preset.pixel_eqs(t)}runShapeFrameEquations(t,e){return this.preset.shapes[t].frame_eqs(e)}runWaveFrameEquations(t,e){return this.preset.waves[t].frame_eqs(e)}runWavePointEquations(t,e){return this.preset.waves[t].point_eqs(e)}}},"./src/equations/presetEquationRunnerWASM.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/utils.js");class A{constructor(t,e,s){this.preset=t,this.texsizeX=s.texsizeX,this.texsizeY=s.texsizeY,this.mesh_width=s.mesh_width,this.mesh_height=s.mesh_height,this.aspectx=s.aspectx,this.aspecty=s.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.qs=i.default.range(1,33).map((t=>`q${t}`)),this.ts=i.default.range(1,9).map((t=>`t${t}`)),this.regs=i.default.range(100).map((t=>t<10?`reg0${t}`:`reg${t}`)),this.globalKeys=["frame","time","fps","bass","bass_att","mid","mid_att","treb","treb_att","meshx","meshy","aspectx","aspecty","pixelsx","pixelsy"],this.frameKeys=["decay","wave_a","wave_r","wave_g","wave_b","wave_x","wave_y","wave_scale","wave_smoothing","wave_mode","old_wave_mode","wave_mystery","ob_size","ob_r","ob_g","ob_b","ob_a","ib_size","ib_r","ib_g","ib_b","ib_a","mv_x","mv_y","mv_dx","mv_dy","mv_l","mv_r","mv_g","mv_b","mv_a","echo_zoom","echo_alpha","echo_orient","wave_dots","wave_thick","additivewave","wave_brighten","modwavealphabyvolume","modwavealphastart","modwavealphaend","darken_center","gammaadj","warp","warpanimspeed","warpscale","zoom","zoomexp","rot","cx","cy","dx","dy","sx","sy","fshader","wrap","invert","brighten","darken","solarize","bmotionvectorson","b1n","b2n","b3n","b1x","b2x","b3x","b1ed"],this.waveFrameKeys=["samples","sep","scaling","spectrum","smoothing","r","g","b","a"],this.waveFrameInputKeys=["samples","r","g","b","a"],this.initializeEquations(e)}getQVars(t){return i.default.pickWasm(this.preset.globalPools[t],this.qs)}getTVars(t){return i.default.pickWasm(this.preset.globalPools[t],this.ts)}initializeEquations(t){this.runVertEQs=!!this.preset.pixel_eqs,this.mdVSQInit=null,this.mdVSQAfterFrame=null;const e={frame:t.frame,time:t.time,fps:t.fps,bass:t.bass,bass_att:t.bass_att,mid:t.mid,mid_att:t.mid_att,treb:t.treb,treb_att:t.treb_att,meshx:this.mesh_width,meshy:this.mesh_height,aspectx:this.invAspectx,aspecty:this.invAspecty,pixelsx:this.texsizeX,pixelsy:this.texsizeY};if(this.mdVS=Object.assign({},this.preset.baseVals,e),i.default.setWasm(this.preset.globalPools.perFrame,this.mdVS,Object.keys(this.mdVS)),this.rand_start=new Float32Array([Math.random(),Math.random(),Math.random(),Math.random()]),this.rand_preset=new Float32Array([Math.random(),Math.random(),Math.random(),Math.random()]),this.preset.init_eqs(),this.mdVSQInit=this.getQVars("perFrame"),this.preset.frame_eqs(),this.mdVSQAfterFrame=this.getQVars("perFrame"),this.mdVSTWaveInits=[],this.preset.waves&&this.preset.waves.length>0)for(let t=0;t<this.preset.waves.length;t++){const e=this.preset.waves[t],s=e.baseVals;0!==s.enabled?(i.default.setWasm(this.preset.globalPools[`wavePerFrame${t}`],s,Object.keys(s)),e.init_eqs&&(e.init_eqs(),i.default.setWasm(this.preset.globalPools[`wavePerFrame${t}`],s,Object.keys(s))),this.mdVSTWaveInits.push(this.getTVars(`wavePerFrame${t}`))):this.mdVSTWaveInits.push({})}if(this.mdVSTShapeInits=[],this.preset.shapes&&this.preset.shapes.length>0)for(let t=0;t<this.preset.shapes.length;t++){const e=this.preset.shapes[t],s=e.baseVals;0!==s.enabled?(i.default.setWasm(this.preset.globalPools[`shapePerFrame${t}`],s,Object.keys(s)),e.init_eqs&&(e.init_eqs(),i.default.setWasm(this.preset.globalPools[`shapePerFrame${t}`],s,Object.keys(s))),this.mdVSTShapeInits.push(this.getTVars(`shapePerFrame${t}`))):this.mdVSTShapeInits.push({})}}updatePreset(t,e){this.preset=t,this.initializeEquations(e)}updateGlobals(t){this.texsizeX=t.texsizeX,this.texsizeY=t.texsizeY,this.mesh_width=t.mesh_width,this.mesh_height=t.mesh_height,this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty}runFrameEquations(t){i.default.setWasm(this.preset.globalPools.perFrame,this.mdVS,this.frameKeys),i.default.setWasm(this.preset.globalPools.perFrame,this.mdVSQInit,this.qs),i.default.setWasm(this.preset.globalPools.perFrame,t,this.globalKeys),this.preset.frame_eqs(),this.preset.save_qs(),this.mdVSQAfterFrame=this.getQVars("perFrame");const e=i.default.pickWasm(this.preset.globalPools.perFrame,[...this.frameKeys,...this.globalKeys]);return e.rand_preset=this.rand_preset,e.rand_start=this.rand_start,e}runWaveFrameEquations(t,e){const s=this.preset.waves[t].baseVals;return i.default.setWasm(this.preset.globalPools[`wavePerFrame${t}`],s,this.waveFrameInputKeys),i.default.setWasm(this.preset.globalPools[`wavePerFrame${t}`],this.mdVSQAfterFrame,this.qs),i.default.setWasm(this.preset.globalPools[`wavePerFrame${t}`],this.mdVSTWaveInits[t],this.ts),i.default.setWasm(this.preset.globalPools[`wavePerFrame${t}`],e,this.globalKeys),this.preset.waves[t].frame_eqs(),i.default.pickWasm(this.preset.globalPools[`wavePerFrame${t}`],this.waveFrameKeys)}}},"./src/image/imageTextures.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return i}));class i{constructor(t){this.gl=t,this.anisoExt=this.gl.getExtension("EXT_texture_filter_anisotropic")||this.gl.getExtension("MOZ_EXT_texture_filter_anisotropic")||this.gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic"),this.samplers={},this.clouds2Image=new Image,this.clouds2Image.onload=()=>{this.samplers.clouds2=this.gl.createTexture(),this.bindTexture(this.samplers.clouds2,this.clouds2Image,128,128)},this.clouds2Image.src="data:image/jpeg;base64,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",this.emptyImage=new Image,this.emptyImage.onload=()=>{this.samplers.empty=this.gl.createTexture(),this.bindTexture(this.samplers.empty,this.emptyImage,1,1)},this.emptyImage.src="data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="}bindTexture(t,e,s,i){if(this.gl.bindTexture(this.gl.TEXTURE_2D,t),this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT,1),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,s,i,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,e),this.gl.generateMipmap(this.gl.TEXTURE_2D),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.REPEAT),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.REPEAT),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR_MIPMAP_LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),this.anisoExt){const t=this.gl.getParameter(this.anisoExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT);this.gl.texParameterf(this.gl.TEXTURE_2D,this.anisoExt.TEXTURE_MAX_ANISOTROPY_EXT,t)}}loadExtraImages(t){Object.keys(t).forEach((e=>{const{data:s,width:i,height:A}=t[e];if(!this.samplers[e]){const t=new Image;t.onload=()=>{this.samplers[e]=this.gl.createTexture(),this.bindTexture(this.samplers[e],t,i,A)},t.src=s}}))}getTexture(t){const e=this.samplers[t];return e||this.samplers.clouds2}}},"./src/index.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A})),s("./node_modules/ecma-proposal-math-extensions/reference-implementation/index.js"),s("./src/presetBase.js");var i=s("./src/visualizer.js");class A{static createVisualizer(t,e,s){return new i.default(t,e,s)}}},"./src/noise/noise.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return i}));class i{constructor(t){this.gl=t,this.anisoExt=this.gl.getExtension("EXT_texture_filter_anisotropic")||this.gl.getExtension("MOZ_EXT_texture_filter_anisotropic")||this.gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic"),this.noiseTexLQ=this.gl.createTexture(),this.noiseTexLQLite=this.gl.createTexture(),this.noiseTexMQ=this.gl.createTexture(),this.noiseTexHQ=this.gl.createTexture(),this.noiseTexVolLQ=this.gl.createTexture(),this.noiseTexVolHQ=this.gl.createTexture(),this.nTexArrLQ=i.createNoiseTex(256,1),this.nTexArrLQLite=i.createNoiseTex(32,1),this.nTexArrMQ=i.createNoiseTex(256,4),this.nTexArrHQ=i.createNoiseTex(256,8),this.nTexArrVolLQ=i.createNoiseVolTex(32,1),this.nTexArrVolHQ=i.createNoiseVolTex(32,4),this.bindTexture(this.noiseTexLQ,this.nTexArrLQ,256,256),this.bindTexture(this.noiseTexLQLite,this.nTexArrLQLite,32,32),this.bindTexture(this.noiseTexMQ,this.nTexArrMQ,256,256),this.bindTexture(this.noiseTexHQ,this.nTexArrHQ,256,256),this.bindTexture3D(this.noiseTexVolLQ,this.nTexArrVolLQ,32,32,32),this.bindTexture3D(this.noiseTexVolHQ,this.nTexArrVolHQ,32,32,32),this.noiseTexPointLQ=this.gl.createSampler(),t.samplerParameteri(this.noiseTexPointLQ,t.TEXTURE_MIN_FILTER,t.NEAREST_MIPMAP_NEAREST),t.samplerParameteri(this.noiseTexPointLQ,t.TEXTURE_MAG_FILTER,t.NEAREST),t.samplerParameteri(this.noiseTexPointLQ,t.TEXTURE_WRAP_S,t.REPEAT),t.samplerParameteri(this.noiseTexPointLQ,t.TEXTURE_WRAP_T,t.REPEAT)}bindTexture(t,e,s,i){if(this.gl.bindTexture(this.gl.TEXTURE_2D,t),this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT,1),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,s,i,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,e),this.gl.generateMipmap(this.gl.TEXTURE_2D),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.REPEAT),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.REPEAT),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR_MIPMAP_LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),this.anisoExt){const t=this.gl.getParameter(this.anisoExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT);this.gl.texParameterf(this.gl.TEXTURE_2D,this.anisoExt.TEXTURE_MAX_ANISOTROPY_EXT,t)}}bindTexture3D(t,e,s,i,A){if(this.gl.bindTexture(this.gl.TEXTURE_3D,t),this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT,1),this.gl.texImage3D(this.gl.TEXTURE_3D,0,this.gl.RGBA,s,i,A,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,e),this.gl.generateMipmap(this.gl.TEXTURE_3D),this.gl.texParameteri(this.gl.TEXTURE_3D,this.gl.TEXTURE_WRAP_S,this.gl.REPEAT),this.gl.texParameteri(this.gl.TEXTURE_3D,this.gl.TEXTURE_WRAP_T,this.gl.REPEAT),this.gl.texParameteri(this.gl.TEXTURE_3D,this.gl.TEXTURE_WRAP_R,this.gl.REPEAT),this.gl.texParameteri(this.gl.TEXTURE_3D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR_MIPMAP_LINEAR),this.gl.texParameteri(this.gl.TEXTURE_3D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),this.anisoExt){const t=this.gl.getParameter(this.anisoExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT);this.gl.texParameterf(this.gl.TEXTURE_3D,this.anisoExt.TEXTURE_MAX_ANISOTROPY_EXT,t)}}static fCubicInterpolate(t,e,s,i,A){const r=A*A,a=i-s-t+e;return a*(A*r)+(t-e-a)*r+(s-t)*A+e}static dwCubicInterpolate(t,e,s,A,r){const a=[];for(let o=0;o<4;o++){let n=i.fCubicInterpolate(t[o]/255,e[o]/255,s[o]/255,A[o]/255,r);n=Math.clamp(n,0,1),a[o]=255*n}return a}static createNoiseVolTex(t,e){const s=t*t*t,A=new Uint8Array(4*s),r=e>1?216:256,a=.5*r;for(let t=0;t<s;t++)A[4*t+0]=Math.floor(Math.random()*r+a),A[4*t+1]=Math.floor(Math.random()*r+a),A[4*t+2]=Math.floor(Math.random()*r+a),A[4*t+3]=Math.floor(Math.random()*r+a);const o=t*t,n=t;if(e>1){for(let s=0;s<t;s+=e)for(let r=0;r<t;r+=e)for(let a=0;a<t;a++)if(a%e!=0){const h=Math.floor(a/e)*e+t,l=s*o+r*n,c=[],g=[],u=[],p=[];for(let s=0;s<4;s++)c[s]=A[4*l+(h-e)%t*4+s],g[s]=A[4*l+h%t*4+s],u[s]=A[4*l+(h+e)%t*4+s],p[s]=A[4*l+(h+2*e)%t*4+s];const m=a%e/e,d=i.dwCubicInterpolate(c,g,u,p,m);for(let t=0;t<4;t++)A[s*o*4+r*n*4+(4*a+t)]=d[t]}for(let s=0;s<t;s+=e)for(let r=0;r<t;r++)for(let a=0;a<t;a++)if(a%e!=0){const h=Math.floor(a/e)*e+t,l=s*o,c=[],g=[],u=[],p=[];for(let s=0;s<4;s++){const i=4*r+4*l+s;c[s]=A[(h-e)%t*n*4+i],g[s]=A[h%t*n*4+i],u[s]=A[(h+e)%t*n*4+i],p[s]=A[(h+2*e)%t*n*4+i]}const m=a%e/e,d=i.dwCubicInterpolate(c,g,u,p,m);for(let t=0;t<4;t++)A[a*n*4+(4*r+4*l+t)]=d[t]}for(let s=0;s<t;s++)for(let r=0;r<t;r++)for(let a=0;a<t;a++)if(a%e!=0){const h=r*n,l=Math.floor(a/e)*e+t,c=[],g=[],u=[],p=[];for(let i=0;i<4;i++){const r=4*s+4*h+i;c[i]=A[(l-e)%t*o*4+r],g[i]=A[l%t*o*4+r],u[i]=A[(l+e)%t*o*4+r],p[i]=A[(l+2*e)%t*o*4+r]}const m=r%e/e,d=i.dwCubicInterpolate(c,g,u,p,m);for(let t=0;t<4;t++)A[a*o*4+(4*s+4*h+t)]=d[t]}}return A}static createNoiseTex(t,e){const s=t*t,A=new Uint8Array(4*s),r=e>1?216:256,a=.5*r;for(let t=0;t<s;t++)A[4*t+0]=Math.floor(Math.random()*r+a),A[4*t+1]=Math.floor(Math.random()*r+a),A[4*t+2]=Math.floor(Math.random()*r+a),A[4*t+3]=Math.floor(Math.random()*r+a);if(e>1){for(let s=0;s<t;s+=e)for(let r=0;r<t;r++)if(r%e!=0){const a=Math.floor(r/e)*e+t,o=s*t,n=[],h=[],l=[],c=[];for(let s=0;s<4;s++)n[s]=A[4*o+(a-e)%t*4+s],h[s]=A[4*o+a%t*4+s],l[s]=A[4*o+(a+e)%t*4+s],c[s]=A[4*o+(a+2*e)%t*4+s];const g=r%e/e,u=i.dwCubicInterpolate(n,h,l,c,g);for(let e=0;e<4;e++)A[s*t*4+4*r+e]=u[e]}for(let s=0;s<t;s++)for(let r=0;r<t;r++)if(r%e!=0){const a=Math.floor(r/e)*e+t,o=[],n=[],h=[],l=[];for(let i=0;i<4;i++)o[i]=A[(a-e)%t*t*4+4*s+i],n[i]=A[a%t*t*4+4*s+i],h[i]=A[(a+e)%t*t*4+4*s+i],l[i]=A[(a+2*e)%t*t*4+4*s+i];const c=r%e/e,g=i.dwCubicInterpolate(o,n,h,l,c);for(let e=0;e<4;e++)A[r*t*4+4*s+e]=g[e]}}return A}}},"./src/presetBase.js":function(t,e){var s=1e-5;window.sqr=function(t){return t*t},window.sqrt=function(t){return Math.sqrt(Math.abs(t))},window.log10=function(t){return Math.log(t)*Math.LOG10E},window.sign=function(t){return t>0?1:t<0?-1:0},window.rand=function(t){var e=Math.floor(t);return e<1?Math.random():Math.random()*e},window.randint=function(t){return Math.floor(rand(t))},window.bnot=function(t){return Math.abs(t)<s?1:0},window.pow=function(t,e){var s,i=Math.pow(t,e);return s=i,!isFinite(s)||isNaN(s)?0:i},window.div=function(t,e){return 0===e?0:t/e},window.mod=function(t,e){return 0===e?0:Math.floor(t)%Math.floor(e)},window.bitor=function(t,e){return Math.floor(t)|Math.floor(e)},window.bitand=function(t,e){return Math.floor(t)&Math.floor(e)},window.sigmoid=function(t,e){var i=1+Math.exp(-t*e);return Math.abs(i)>s?1/i:0},window.bor=function(t,e){return Math.abs(t)>s||Math.abs(e)>s?1:0},window.band=function(t,e){return Math.abs(t)>s&&Math.abs(e)>s?1:0},window.equal=function(t,e){return Math.abs(t-e)<s?1:0},window.above=function(t,e){return t>e?1:0},window.below=function(t,e){return t<e?1:0},window.ifcond=function(t,e,i){return Math.abs(t)>s?e:i},window.memcpy=function(t,e,s,i){let A=e,r=s,a=i;return r<0&&(a+=r,A-=r,r=0),A<0&&(a+=A,r-=A,A=0),a>0&&t.copyWithin(A,r,a),e}},"./src/rendering/blendPattern.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return i}));class i{constructor(t){this.mesh_width=t.mesh_width,this.mesh_height=t.mesh_height,this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.vertInfoA=new Float32Array((this.mesh_width+1)*(this.mesh_height+1)),this.vertInfoC=new Float32Array((this.mesh_width+1)*(this.mesh_height+1)),this.createBlendPattern()}static resizeMatrixValues(t,e,s,i,A){const r=new Float32Array((i+1)*(A+1));let a=0;for(let o=0;o<A+1;o++)for(let n=0;n<i+1;n++){let h=n/A,l=o/i;h*=e+1,l*=s+1,h=Math.clamp(h,0,e-1),l=Math.clamp(l,0,s-1);const c=Math.floor(h),g=Math.floor(l),u=h-c,p=l-g,m=t[g*(e+1)+c],d=t[g*(e+1)+(c+1)],f=t[(g+1)*(e+1)+c],S=t[(g+1)*(e+1)+(c+1)];r[a]=m*(1-u)*(1-p)+d*u*(1-p)+f*(1-u)*p+S*u*p,a+=1}return r}updateGlobals(t){const e=this.mesh_width,s=this.mesh_height;this.mesh_width=t.mesh_width,this.mesh_height=t.mesh_height,this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.mesh_width===e&&this.mesh_height===s||(this.vertInfoA=i.resizeMatrixValues(this.vertInfoA,e,s,this.mesh_width,this.mesh_height),this.vertInfoC=i.resizeMatrixValues(this.vertInfoC,e,s,this.mesh_width,this.mesh_height))}genPlasma(t,e,s,i,A){const r=Math.floor((t+e)/2),a=Math.floor((s+i)/2);let o=this.vertInfoC[s*(this.mesh_width+1)+t],n=this.vertInfoC[s*(this.mesh_width+1)+e],h=this.vertInfoC[i*(this.mesh_width+1)+t],l=this.vertInfoC[i*(this.mesh_width+1)+e];i-s>=2&&(0===t&&(this.vertInfoC[a*(this.mesh_width+1)+t]=.5*(o+h)+(2*Math.random()-1)*A*this.aspecty),this.vertInfoC[a*(this.mesh_width+1)+e]=.5*(n+l)+(2*Math.random()-1)*A*this.aspecty),e-t>=2&&(0===s&&(this.vertInfoC[s*(this.mesh_width+1)+r]=.5*(o+n)+(2*Math.random()-1)*A*this.aspectx),this.vertInfoC[i*(this.mesh_width+1)+r]=.5*(h+l)+(2*Math.random()-1)*A*this.aspectx),i-s>=2&&e-t>=2&&(o=this.vertInfoC[a*(this.mesh_width+1)+t],n=this.vertInfoC[a*(this.mesh_width+1)+e],h=this.vertInfoC[s*(this.mesh_width+1)+r],l=this.vertInfoC[i*(this.mesh_width+1)+r],this.vertInfoC[a*(this.mesh_width+1)+r]=.25*(h+l+o+n)+(2*Math.random()-1)*A,this.genPlasma(t,r,s,a,.5*A),this.genPlasma(r,e,s,a,.5*A),this.genPlasma(t,r,a,i,.5*A),this.genPlasma(r,e,a,i,.5*A))}createBlendPattern(){const t=1+Math.floor(3*Math.random());if(0===t){let t=0;for(let e=0;e<=this.mesh_height;e++)for(let e=0;e<=this.mesh_width;e++)this.vertInfoA[t]=1,this.vertInfoC[t]=0,t+=1}else if(1===t){const t=6.28*Math.random(),e=Math.cos(t),s=Math.sin(t),i=.1+.2*Math.random(),A=1/i;let r=0;for(let t=0;t<=this.mesh_height;t++){const a=t/this.mesh_height*this.aspecty;for(let t=0;t<=this.mesh_width;t++){let o=(t/this.mesh_width*this.aspectx-.5)*e+(a-.5)*s+.5;o=(o-.5)/Math.sqrt(2)+.5,this.vertInfoA[r]=A*(1+i),this.vertInfoC[r]=A*o-A,r+=1}}}else if(2===t){const t=.12+.13*Math.random(),e=1/t;this.vertInfoC[0]=Math.random(),this.vertInfoC[this.mesh_width]=Math.random(),this.vertInfoC[this.mesh_height*(this.mesh_width+1)]=Math.random(),this.vertInfoC[this.mesh_height*(this.mesh_width+1)+this.mesh_width]=Math.random(),this.genPlasma(0,this.mesh_width,0,this.mesh_height,.25);let s=this.vertInfoC[0],i=this.vertInfoC[0],A=0;for(let t=0;t<=this.mesh_height;t++)for(let t=0;t<=this.mesh_width;t++)s>this.vertInfoC[A]&&(s=this.vertInfoC[A]),i<this.vertInfoC[A]&&(i=this.vertInfoC[A]),A+=1;const r=1/(i-s);A=0;for(let i=0;i<=this.mesh_height;i++)for(let i=0;i<=this.mesh_width;i++){const i=(this.vertInfoC[A]-s)*r;this.vertInfoA[A]=e*(1+t),this.vertInfoC[A]=e*i-e,A+=1}}else if(3===t){const t=.02+.14*Math.random()+.34*Math.random(),e=1/t,s=2*Math.floor(2*Math.random())-1;let i=0;for(let A=0;A<=this.mesh_height;A++){const r=(A/this.mesh_height-.5)*this.aspecty;for(let A=0;A<=this.mesh_width;A++){const a=(A/this.mesh_width-.5)*this.aspectx;let o=1.41421*Math.sqrt(a*a+r*r);-1===s&&(o=1-o),this.vertInfoA[i]=e*(1+t),this.vertInfoC[i]=e*o-e,i+=1}}}}}},"./src/rendering/motionVectors/motionVectors.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/rendering/shaders/shaderUtils.js");class A{constructor(t,e){this.gl=t,this.maxX=64,this.maxY=48,this.positions=new Float32Array(this.maxX*this.maxY*2*3),this.texsizeX=e.texsizeX,this.texsizeY=e.texsizeY,this.mesh_width=e.mesh_width,this.mesh_height=e.mesh_height,this.positionVertexBuf=this.gl.createBuffer(),this.floatPrecision=i.default.getFragmentFloatPrecision(this.gl),this.createShader()}updateGlobals(t){this.texsizeX=t.texsizeX,this.texsizeY=t.texsizeY,this.mesh_width=t.mesh_width,this.mesh_height=t.mesh_height}createShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"\n #version 300 es\n in vec3 aPos;\n void main(void) {\n gl_Position = vec4(aPos, 1.0);\n }\n ".trim()),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`\n #version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n out vec4 fragColor;\n uniform vec4 u_color;\n void main(void) {\n fragColor = u_color;\n }\n `.trim()),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.aPosLoc=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.colorLoc=this.gl.getUniformLocation(this.shaderProgram,"u_color")}getMotionDir(t,e,s){const i=Math.floor(s*this.mesh_height),A=s*this.mesh_height-i,r=Math.floor(e*this.mesh_width),a=e*this.mesh_width-r,o=r+1,n=i+1,h=this.mesh_width+1;let l,c;return l=t[2*(i*h+r)+0]*(1-a)*(1-A),c=t[2*(i*h+r)+1]*(1-a)*(1-A),l+=t[2*(i*h+o)+0]*a*(1-A),c+=t[2*(i*h+o)+1]*a*(1-A),l+=t[2*(n*h+r)+0]*(1-a)*A,c+=t[2*(n*h+r)+1]*(1-a)*A,l+=t[2*(n*h+o)+0]*a*A,c+=t[2*(n*h+o)+1]*a*A,[l,1-c]}generateMotionVectors(t,e){const s=0===t.bmotionvectorson?0:t.mv_a;let i=Math.floor(t.mv_x),A=Math.floor(t.mv_y);if(s>.001&&i>0&&A>0){let r=t.mv_x-i,a=t.mv_y-A;i>this.maxX&&(i=this.maxX,r=0),A>this.maxY&&(A=this.maxY,a=0);const o=t.mv_dx,n=t.mv_dy,h=t.mv_l,l=1/this.texsizeX;this.numVecVerts=0;for(let t=0;t<A;t++){let s=(t+.25)/(A+a+.25-1);if(s-=n,s>1e-4&&s<.9999)for(let t=0;t<i;t++){let A=(t+.25)/(i+r+.25-1);if(A+=o,A>1e-4&&A<.9999){const t=this.getMotionDir(e,A,s);let i=t[0],r=t[1],a=i-A,o=r-s;a*=h,o*=h;let n=Math.sqrt(a*a+o*o);n<l&&n>1e-8?(n=l/n,a*=n,o*=n):(a=l,a=l),i=A+a,r=s+o;const c=2*A-1,g=2*s-1,u=2*i-1,p=2*r-1;this.positions[3*this.numVecVerts+0]=c,this.positions[3*this.numVecVerts+1]=g,this.positions[3*this.numVecVerts+2]=0,this.positions[3*(this.numVecVerts+1)+0]=u,this.positions[3*(this.numVecVerts+1)+1]=p,this.positions[3*(this.numVecVerts+1)+2]=0,this.numVecVerts+=2}}}if(this.numVecVerts>0)return this.color=[t.mv_r,t.mv_g,t.mv_b,s],!0}return!1}drawMotionVectors(t,e){this.generateMotionVectors(t,e)&&(this.gl.useProgram(this.shaderProgram),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.positionVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.positions,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.aPosLoc,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aPosLoc),this.gl.uniform4fv(this.colorLoc,this.color),this.gl.lineWidth(1),this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawArrays(this.gl.LINES,0,this.numVecVerts))}}},"./src/rendering/renderer.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return v}));var i=s("./src/audio/audioLevels.js"),A=s("./src/blankPreset.js"),r=s.n(A),a=s("./src/equations/presetEquationRunner.js"),o=s("./src/equations/presetEquationRunnerWASM.js"),n=s("./src/rendering/waves/basicWaveform.js"),h=s("./src/rendering/waves/customWaveform.js"),l=s("./src/rendering/shapes/customShape.js"),c=s("./src/rendering/sprites/border.js"),g=s("./src/rendering/sprites/darkenCenter.js"),u=s("./src/rendering/motionVectors/motionVectors.js"),p=s("./src/rendering/shaders/warp.js"),m=s("./src/rendering/shaders/comp.js"),d=s("./src/rendering/shaders/output.js"),f=s("./src/rendering/shaders/resample.js"),S=s("./src/rendering/shaders/blur/blur.js"),b=s("./src/noise/noise.js"),E=s("./src/image/imageTextures.js"),U=s("./src/rendering/text/titleText.js"),x=s("./src/rendering/blendPattern.js"),T=s("./src/utils.js");class v{constructor(t,e,s){this.gl=t,this.audio=e,this.frameNum=0,this.fps=30,this.time=0,this.presetTime=0,this.lastTime=performance.now(),this.timeHist=[0],this.timeHistMax=120,this.blending=!1,this.blendStartTime=0,this.blendProgress=0,this.blendDuration=0,this.width=s.width||1200,this.height=s.height||900,this.mesh_width=s.meshWidth||48,this.mesh_height=s.meshHeight||36,this.pixelRatio=s.pixelRatio||window.devicePixelRatio||1,this.textureRatio=s.textureRatio||1,this.outputFXAA=s.outputFXAA||!1,this.texsizeX=this.width*this.pixelRatio*this.textureRatio,this.texsizeY=this.height*this.pixelRatio*this.textureRatio,this.aspectx=this.texsizeY>this.texsizeX?this.texsizeX/this.texsizeY:1,this.aspecty=this.texsizeX>this.texsizeY?this.texsizeY/this.texsizeX:1,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.qs=T.default.range(1,33).map((t=>`q${t}`)),this.ts=T.default.range(1,9).map((t=>`t${t}`)),this.regs=T.default.range(0,100).map((t=>t<10?`reg0${t}`:`reg${t}`)),this.blurRatios=[[.5,.25],[.125,.125],[.0625,.0625]],this.audioLevels=new i.default(this.audio),this.prevFrameBuffer=this.gl.createFramebuffer(),this.targetFrameBuffer=this.gl.createFramebuffer(),this.prevTexture=this.gl.createTexture(),this.targetTexture=this.gl.createTexture(),this.compFrameBuffer=this.gl.createFramebuffer(),this.compTexture=this.gl.createTexture(),this.anisoExt=this.gl.getExtension("EXT_texture_filter_anisotropic")||this.gl.getExtension("MOZ_EXT_texture_filter_anisotropic")||this.gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic"),this.bindFrameBufferTexture(this.prevFrameBuffer,this.prevTexture),this.bindFrameBufferTexture(this.targetFrameBuffer,this.targetTexture),this.bindFrameBufferTexture(this.compFrameBuffer,this.compTexture);const A={pixelRatio:this.pixelRatio,textureRatio:this.textureRatio,texsizeX:this.texsizeX,texsizeY:this.texsizeY,mesh_width:this.mesh_width,mesh_height:this.mesh_height,aspectx:this.aspectx,aspecty:this.aspecty};this.noise=new b.default(t),this.image=new E.default(t),this.warpShader=new p.default(t,this.noise,this.image,A),this.compShader=new m.default(t,this.noise,this.image,A),this.outputShader=new d.default(t,A),this.prevWarpShader=new p.default(t,this.noise,this.image,A),this.prevCompShader=new m.default(t,this.noise,this.image,A),this.numBlurPasses=0,this.blurShader1=new S.default(0,this.blurRatios,t,A),this.blurShader2=new S.default(1,this.blurRatios,t,A),this.blurShader3=new S.default(2,this.blurRatios,t,A),this.blurTexture1=this.blurShader1.blurVerticalTexture,this.blurTexture2=this.blurShader2.blurVerticalTexture,this.blurTexture3=this.blurShader3.blurVerticalTexture,this.basicWaveform=new n.default(t,A),this.customWaveforms=T.default.range(4).map((e=>new h.default(e,t,A))),this.customShapes=T.default.range(4).map((e=>new l.default(e,t,A))),this.prevCustomWaveforms=T.default.range(4).map((e=>new h.default(e,t,A))),this.prevCustomShapes=T.default.range(4).map((e=>new l.default(e,t,A))),this.darkenCenter=new g.default(t,A),this.innerBorder=new c.default(t,A),this.outerBorder=new c.default(t,A),this.motionVectors=new u.default(t,A),this.titleText=new U.default(t,A),this.blendPattern=new x.default(A),this.resampleShader=new f.default(t),this.supertext={startTime:-1},this.warpUVs=new Float32Array((this.mesh_width+1)*(this.mesh_height+1)*2),this.warpColor=new Float32Array((this.mesh_width+1)*(this.mesh_height+1)*4),this.gl.clearColor(0,0,0,1),this.blankPreset=r.a;const o={frame:0,time:0,fps:45,bass:1,bass_att:1,mid:1,mid_att:1,treb:1,treb_att:1};this.preset=r.a,this.prevPreset=this.preset,this.presetEquationRunner=new a.default(this.preset,o,A),this.prevPresetEquationRunner=new a.default(this.prevPreset,o,A),this.preset.useWASM||(this.regVars=this.presetEquationRunner.mdVSRegs)}static getHighestBlur(t){return/sampler_blur3/.test(t)?3:/sampler_blur2/.test(t)?2:/sampler_blur1/.test(t)?1:0}loadPreset(t,e){this.blendPattern.createBlendPattern(),this.blending=!0,this.blendStartTime=this.time,this.blendDuration=e,this.blendProgress=0,this.prevPresetEquationRunner=this.presetEquationRunner,this.prevPreset=this.preset,this.preset=t,this.presetTime=this.time;const s={frame:this.frameNum,time:this.time,fps:this.fps,bass:this.audioLevels.bass,bass_att:this.audioLevels.bass_att,mid:this.audioLevels.mid,mid_att:this.audioLevels.mid_att,treb:this.audioLevels.treb,treb_att:this.audioLevels.treb_att},i={pixelRatio:this.pixelRatio,textureRatio:this.textureRatio,texsizeX:this.texsizeX,texsizeY:this.texsizeY,mesh_width:this.mesh_width,mesh_height:this.mesh_height,aspectx:this.aspectx,aspecty:this.aspecty};t.useWASM?(this.preset.globalPools.perFrame.old_wave_mode.value=this.prevPreset.baseVals.wave_mode,this.preset.baseVals.old_wave_mode=this.prevPreset.baseVals.wave_mode,this.presetEquationRunner=new o.default(this.preset,s,i),this.preset.pixel_eqs_initialize_array&&this.preset.pixel_eqs_initialize_array(this.mesh_width,this.mesh_height)):(this.preset.baseVals.old_wave_mode=this.prevPreset.baseVals.wave_mode,this.presetEquationRunner=new a.default(this.preset,s,i),this.regVars=this.presetEquationRunner.mdVSRegs);const A=this.prevWarpShader;this.prevWarpShader=this.warpShader,this.warpShader=A;const r=this.prevCompShader;this.prevCompShader=this.compShader,this.compShader=r;const n=this.preset.warp.trim(),h=this.preset.comp.trim();this.warpShader.updateShader(n),this.compShader.updateShader(h),0===n.length?this.numBlurPasses=0:this.numBlurPasses=v.getHighestBlur(n),0!==h.length&&(this.numBlurPasses=Math.max(this.numBlurPasses,v.getHighestBlur(h)))}loadExtraImages(t){this.image.loadExtraImages(t)}setRendererSize(t,e,s){const i=this.texsizeX,A=this.texsizeY;if(this.width=t,this.height=e,this.mesh_width=s.meshWidth||this.mesh_width,this.mesh_height=s.meshHeight||this.mesh_height,this.pixelRatio=s.pixelRatio||this.pixelRatio,this.textureRatio=s.textureRatio||this.textureRatio,this.texsizeX=t*this.pixelRatio*this.textureRatio,this.texsizeY=e*this.pixelRatio*this.textureRatio,this.aspectx=this.texsizeY>this.texsizeX?this.texsizeX/this.texsizeY:1,this.aspecty=this.texsizeX>this.texsizeY?this.texsizeY/this.texsizeX:1,this.texsizeX!==i||this.texsizeY!==A){const t=this.gl.createTexture();this.bindFrameBufferTexture(this.targetFrameBuffer,t),this.bindFrambufferAndSetViewport(this.targetFrameBuffer,this.texsizeX,this.texsizeY),this.resampleShader.renderQuadTexture(this.targetTexture),this.targetTexture=t,this.bindFrameBufferTexture(this.prevFrameBuffer,this.prevTexture),this.bindFrameBufferTexture(this.compFrameBuffer,this.compTexture)}this.updateGlobals(),this.frameNum>0&&this.renderToScreen()}setInternalMeshSize(t,e){this.mesh_width=t,this.mesh_height=e,this.updateGlobals()}setOutputAA(t){this.outputFXAA=t}updateGlobals(){const t={pixelRatio:this.pixelRatio,textureRatio:this.textureRatio,texsizeX:this.texsizeX,texsizeY:this.texsizeY,mesh_width:this.mesh_width,mesh_height:this.mesh_height,aspectx:this.aspectx,aspecty:this.aspecty};this.presetEquationRunner.updateGlobals(t),this.prevPresetEquationRunner.updateGlobals(t),this.warpShader.updateGlobals(t),this.prevWarpShader.updateGlobals(t),this.compShader.updateGlobals(t),this.prevCompShader.updateGlobals(t),this.outputShader.updateGlobals(t),this.blurShader1.updateGlobals(t),this.blurShader2.updateGlobals(t),this.blurShader3.updateGlobals(t),this.basicWaveform.updateGlobals(t),this.customWaveforms.forEach((e=>e.updateGlobals(t))),this.customShapes.forEach((e=>e.updateGlobals(t))),this.prevCustomWaveforms.forEach((e=>e.updateGlobals(t))),this.prevCustomShapes.forEach((e=>e.updateGlobals(t))),this.darkenCenter.updateGlobals(t),this.innerBorder.updateGlobals(t),this.outerBorder.updateGlobals(t),this.motionVectors.updateGlobals(t),this.titleText.updateGlobals(t),this.blendPattern.updateGlobals(t),this.warpUVs=new Float32Array((this.mesh_width+1)*(this.mesh_height+1)*2),this.warpColor=new Float32Array((this.mesh_width+1)*(this.mesh_height+1)*4),this.preset.pixel_eqs_initialize_array&&this.preset.pixel_eqs_initialize_array(this.mesh_width,this.mesh_height)}calcTimeAndFPS(t){let e;if(t)e=t;else{const t=performance.now();e=(t-this.lastTime)/1e3,(e>1||e<0||this.frame<2)&&(e=1/30),this.lastTime=t}this.time+=1/this.fps,this.blending&&(this.blendProgress=(this.time-this.blendStartTime)/this.blendDuration,this.blendProgress>1&&(this.blending=!1));const s=this.timeHist[this.timeHist.length-1]+e;this.timeHist.push(s),this.timeHist.length>this.timeHistMax&&this.timeHist.shift();const i=this.timeHist.length/(s-this.timeHist[0]);if(Math.abs(i-this.fps)>3&&this.frame>this.timeHistMax)this.fps=i;else{const t=.93;this.fps=t*this.fps+(1-t)*i}}runPixelEquations(t,e,s,i){const A=this.mesh_width,r=this.mesh_height,a=A+1,o=r+1,n=this.time*e.warpanimspeed,h=1/e.warpscale,l=11.68+4*Math.cos(1.413*n+10),c=8.77+3*Math.cos(1.113*n+7),g=10.54+3*Math.cos(1.233*n+3),u=11.49+4*Math.cos(.933*n+5),p=0/this.texsizeX,m=0/this.texsizeY,d=this.aspectx,f=this.aspecty;let S=0,b=0;if(t.preset.useWASM){const A=t.preset.globalPools.perVertex;if(T.default.setWasm(A,s,t.globalKeys),T.default.setWasm(A,t.mdVSQAfterFrame,t.qs),A.zoom.value=e.zoom,A.zoomexp.value=e.zoomexp,A.rot.value=e.rot,A.warp.value=e.warp,A.cx.value=e.cx,A.cy.value=e.cy,A.dx.value=e.dx,A.dy.value=e.dy,A.sx.value=e.sx,A.sy.value=e.sy,t.preset.pixel_eqs_wasm(t.runVertEQs,this.mesh_width,this.mesh_height,this.time,e.warpanimspeed,e.warpscale,this.aspectx,this.aspecty),i){const e=t.preset.pixel_eqs_get_array();let s=0,i=0;for(let t=0;t<o;t++)for(let t=0;t<a;t++){const t=e[s],A=e[s+1];let r=this.blendPattern.vertInfoA[s/2]*this.blendProgress+this.blendPattern.vertInfoC[s/2];r=Math.clamp(r,0,1),this.warpUVs[s]=this.warpUVs[s]*r+t*(1-r),this.warpUVs[s+1]=this.warpUVs[s+1]*r+A*(1-r),this.warpColor[i+0]=1,this.warpColor[i+1]=1,this.warpColor[i+2]=1,this.warpColor[i+3]=r,s+=2,i+=4}}else this.warpUVs=t.preset.pixel_eqs_get_array(),this.warpColor.fill(1)}else{let s=T.default.cloneVars(e),E=s.warp,U=s.zoom,x=s.zoomexp,v=s.cx,q=s.cy,R=s.sx,I=s.sy,P=s.dx,V=s.dy,y=s.rot;for(let B=0;B<o;B++)for(let o=0;o<a;o++){const a=o/A*2-1,w=B/r*2-1,Q=Math.sqrt(a*a*d*d+w*w*f*f);if(t.runVertEQs){let i;i=B===r/2&&o===A/2?0:T.default.atan2(w*f,a*d),s.x=.5*a*d+.5,s.y=-.5*w*f+.5,s.rad=Q,s.ang=i,s.zoom=e.zoom,s.zoomexp=e.zoomexp,s.rot=e.rot,s.warp=e.warp,s.cx=e.cx,s.cy=e.cy,s.dx=e.dx,s.dy=e.dy,s.sx=e.sx,s.sy=e.sy,s=t.runPixelEquations(s),E=s.warp,U=s.zoom,x=s.zoomexp,v=s.cx,q=s.cy,R=s.sx,I=s.sy,P=s.dx,V=s.dy,y=s.rot}const C=1/U**(x**(2*Q-1));let k=.5*a*d*C+.5,L=.5*-w*f*C+.5;k=(k-v)/R+v,L=(L-q)/I+q,0!==E&&(k+=.0035*E*Math.sin(.333*n+h*(a*l-w*u)),L+=.0035*E*Math.cos(.375*n-h*(a*g+w*c)),k+=.0035*E*Math.cos(.753*n-h*(a*c-w*g)),L+=.0035*E*Math.sin(.825*n+h*(a*l+w*u)));const F=k-v,K=L-q,O=Math.cos(y),M=Math.sin(y);if(k=F*O-K*M+v,L=F*M+K*O+q,k-=P,L-=V,k=(k-.5)/d+.5,L=(L-.5)/f+.5,k+=p,L+=m,i){let t=this.blendPattern.vertInfoA[S/2]*this.blendProgress+this.blendPattern.vertInfoC[S/2];t=Math.clamp(t,0,1),this.warpUVs[S]=this.warpUVs[S]*t+k*(1-t),this.warpUVs[S+1]=this.warpUVs[S+1]*t+L*(1-t),this.warpColor[b+0]=1,this.warpColor[b+1]=1,this.warpColor[b+2]=1,this.warpColor[b+3]=t}else this.warpUVs[S]=k,this.warpUVs[S+1]=L,this.warpColor[b+0]=1,this.warpColor[b+1]=1,this.warpColor[b+2]=1,this.warpColor[b+3]=1;S+=2,b+=4}this.mdVSVertex=s}}static mixFrameEquations(t,e,s){const i=.5-.5*Math.cos(t*Math.PI),A=1-i,r=.5,a=T.default.cloneVars(e);return a.decay=i*e.decay+A*s.decay,a.wave_a=i*e.wave_a+A*s.wave_a,a.wave_r=i*e.wave_r+A*s.wave_r,a.wave_g=i*e.wave_g+A*s.wave_g,a.wave_b=i*e.wave_b+A*s.wave_b,a.wave_x=i*e.wave_x+A*s.wave_x,a.wave_y=i*e.wave_y+A*s.wave_y,a.wave_mystery=i*e.wave_mystery+A*s.wave_mystery,a.ob_size=i*e.ob_size+A*s.ob_size,a.ob_r=i*e.ob_r+A*s.ob_r,a.ob_g=i*e.ob_g+A*s.ob_g,a.ob_b=i*e.ob_b+A*s.ob_b,a.ob_a=i*e.ob_a+A*s.ob_a,a.ib_size=i*e.ib_size+A*s.ib_size,a.ib_r=i*e.ib_r+A*s.ib_r,a.ib_g=i*e.ib_g+A*s.ib_g,a.ib_b=i*e.ib_b+A*s.ib_b,a.ib_a=i*e.ib_a+A*s.ib_a,a.mv_x=i*e.mv_x+A*s.mv_x,a.mv_y=i*e.mv_y+A*s.mv_y,a.mv_dx=i*e.mv_dx+A*s.mv_dx,a.mv_dy=i*e.mv_dy+A*s.mv_dy,a.mv_l=i*e.mv_l+A*s.mv_l,a.mv_r=i*e.mv_r+A*s.mv_r,a.mv_g=i*e.mv_g+A*s.mv_g,a.mv_b=i*e.mv_b+A*s.mv_b,a.mv_a=i*e.mv_a+A*s.mv_a,a.echo_zoom=i*e.echo_zoom+A*s.echo_zoom,a.echo_alpha=i*e.echo_alpha+A*s.echo_alpha,a.echo_orient=i*e.echo_orient+A*s.echo_orient,a.wave_dots=i<r?s.wave_dots:e.wave_dots,a.wave_thick=i<r?s.wave_thick:e.wave_thick,a.additivewave=i<r?s.additivewave:e.additivewave,a.wave_brighten=i<r?s.wave_brighten:e.wave_brighten,a.darken_center=i<r?s.darken_center:e.darken_center,a.gammaadj=i<r?s.gammaadj:e.gammaadj,a.wrap=i<r?s.wrap:e.wrap,a.invert=i<r?s.invert:e.invert,a.brighten=i<r?s.brighten:e.brighten,a.darken=i<r?s.darken:e.darken,a.solarize=i<r?s.brighten:e.solarize,a.b1n=i*e.b1n+A*s.b1n,a.b2n=i*e.b2n+A*s.b2n,a.b3n=i*e.b3n+A*s.b3n,a.b1x=i*e.b1x+A*s.b1x,a.b2x=i*e.b2x+A*s.b2x,a.b3x=i*e.b3x+A*s.b3x,a.b1ed=i*e.b1ed+A*s.b1ed,a}static getBlurValues(t){let e=t.b1n,s=t.b2n,i=t.b3n,A=t.b1x,r=t.b2x,a=t.b3x;const o=.1;if(A-e<o){const t=.5*(e+A);e=t-.05,A=t-.05}if(r=Math.min(A,r),s=Math.max(e,s),r-s<o){const t=.5*(s+r);s=t-.05,r=t-.05}if(a=Math.min(r,a),i=Math.max(s,i),a-i<o){const t=.5*(i+a);i=t-.05,a=t-.05}return{blurMins:[e,s,i],blurMaxs:[A,r,a]}}bindFrambufferAndSetViewport(t,e,s){this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,t),this.gl.viewport(0,0,e,s)}bindFrameBufferTexture(t,e){if(this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT,1),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.texsizeX,this.texsizeY,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,new Uint8Array(this.texsizeX*this.texsizeY*4)),this.gl.generateMipmap(this.gl.TEXTURE_2D),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR_MIPMAP_LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),this.anisoExt){const t=this.gl.getParameter(this.anisoExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT);this.gl.texParameterf(this.gl.TEXTURE_2D,this.anisoExt.TEXTURE_MAX_ANISOTROPY_EXT,t)}this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,t),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,this.gl.COLOR_ATTACHMENT0,this.gl.TEXTURE_2D,e,0)}render({audioLevels:t,elapsedTime:e}={}){this.calcTimeAndFPS(e),this.frameNum+=1,t?this.audio.updateAudio(t.timeByteArray,t.timeByteArrayL,t.timeByteArrayR):this.audio.sampleAudio(),this.audioLevels.updateAudioLevels(this.fps,this.frameNum);const s={frame:this.frameNum,time:this.time,fps:this.fps,bass:this.audioLevels.bass,bass_att:this.audioLevels.bass_att,mid:this.audioLevels.mid,mid_att:this.audioLevels.mid_att,treb:this.audioLevels.treb,treb_att:this.audioLevels.treb_att,meshx:this.mesh_width,meshy:this.mesh_height,aspectx:this.invAspectx,aspecty:this.invAspecty,pixelsx:this.texsizeX,pixelsy:this.texsizeY},i=Object.assign({},s);this.prevPreset.useWASM||(i.gmegabuf=this.prevPresetEquationRunner.gmegabuf),this.preset.useWASM||(s.gmegabuf=this.presetEquationRunner.gmegabuf,Object.assign(s,this.regVars));const A=this.presetEquationRunner.runFrameEquations(s);let r;this.runPixelEquations(this.presetEquationRunner,A,s,!1),this.preset.useWASM||(Object.assign(this.regVars,T.default.pick(this.mdVSVertex,this.regs)),Object.assign(s,this.regVars)),this.blending?(this.prevMDVSFrame=this.prevPresetEquationRunner.runFrameEquations(i),this.runPixelEquations(this.prevPresetEquationRunner,this.prevMDVSFrame,i,!0),r=v.mixFrameEquations(this.blendProgress,A,this.prevMDVSFrame)):r=A;const a=this.targetTexture;this.targetTexture=this.prevTexture,this.prevTexture=a;const o=this.targetFrameBuffer;this.targetFrameBuffer=this.prevFrameBuffer,this.prevFrameBuffer=o,this.gl.bindTexture(this.gl.TEXTURE_2D,this.prevTexture),this.gl.generateMipmap(this.gl.TEXTURE_2D),this.bindFrambufferAndSetViewport(this.targetFrameBuffer,this.texsizeX,this.texsizeY),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.enable(this.gl.BLEND),this.gl.blendEquation(this.gl.FUNC_ADD),this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA);const{blurMins:n,blurMaxs:h}=v.getBlurValues(r);this.blending?(this.prevWarpShader.renderQuadTexture(!1,this.prevTexture,this.blurTexture1,this.blurTexture2,this.blurTexture3,n,h,this.prevMDVSFrame,this.prevPresetEquationRunner.mdVSQAfterFrame,this.warpUVs,this.warpColor),this.warpShader.renderQuadTexture(!0,this.prevTexture,this.blurTexture1,this.blurTexture2,this.blurTexture3,n,h,r,this.presetEquationRunner.mdVSQAfterFrame,this.warpUVs,this.warpColor)):this.warpShader.renderQuadTexture(!1,this.prevTexture,this.blurTexture1,this.blurTexture2,this.blurTexture3,n,h,A,this.presetEquationRunner.mdVSQAfterFrame,this.warpUVs,this.warpColor),this.numBlurPasses>0&&(this.blurShader1.renderBlurTexture(this.targetTexture,A,n,h),this.numBlurPasses>1&&(this.blurShader2.renderBlurTexture(this.blurTexture1,A,n,h),this.numBlurPasses>2&&this.blurShader3.renderBlurTexture(this.blurTexture2,A,n,h)),this.bindFrambufferAndSetViewport(this.targetFrameBuffer,this.texsizeX,this.texsizeY)),this.motionVectors.drawMotionVectors(r,this.warpUVs),this.preset.shapes&&this.preset.shapes.length>0&&this.customShapes.forEach(((t,e)=>{t.drawCustomShape(this.blending?this.blendProgress:1,s,this.presetEquationRunner,this.preset.shapes[e],this.prevTexture)})),this.preset.waves&&this.preset.waves.length>0&&this.customWaveforms.forEach(((t,e)=>{t.drawCustomWaveform(this.blending?this.blendProgress:1,this.audio.timeArrayL,this.audio.timeArrayR,this.audio.freqArrayL,this.audio.freqArrayR,s,this.presetEquationRunner,this.preset.waves[e])})),this.blending&&(this.prevPreset.shapes&&this.prevPreset.shapes.length>0&&this.prevCustomShapes.forEach(((t,e)=>{t.drawCustomShape(1-this.blendProgress,i,this.prevPresetEquationRunner,this.prevPreset.shapes[e],this.prevTexture)})),this.prevPreset.waves&&this.prevPreset.waves.length>0&&this.prevCustomWaveforms.forEach(((t,e)=>{t.drawCustomWaveform(1-this.blendProgress,this.audio.timeArrayL,this.audio.timeArrayR,this.audio.freqArrayL,this.audio.freqArrayR,i,this.prevPresetEquationRunner,this.prevPreset.waves[e])}))),this.basicWaveform.drawBasicWaveform(this.blending,this.blendProgress,this.audio.timeArrayL,this.audio.timeArrayR,r),this.darkenCenter.drawDarkenCenter(r);const l=[r.ob_r,r.ob_g,r.ob_b,r.ob_a];this.outerBorder.drawBorder(l,r.ob_size,0);const c=[r.ib_r,r.ib_g,r.ib_b,r.ib_a];if(this.innerBorder.drawBorder(c,r.ib_size,r.ob_size),this.supertext.startTime>=0){const t=(this.time-this.supertext.startTime)/this.supertext.duration;t>=1&&this.titleText.renderTitle(t,!0,s)}this.globalVars=s,this.mdVSFrame=A,this.mdVSFrameMixed=r,this.renderToScreen()}renderToScreen(){this.outputFXAA?this.bindFrambufferAndSetViewport(this.compFrameBuffer,this.texsizeX,this.texsizeY):this.bindFrambufferAndSetViewport(null,this.width,this.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.enable(this.gl.BLEND),this.gl.blendEquation(this.gl.FUNC_ADD),this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA);const{blurMins:t,blurMaxs:e}=v.getBlurValues(this.mdVSFrameMixed);if(this.blending?(this.prevCompShader.renderQuadTexture(!1,this.targetTexture,this.blurTexture1,this.blurTexture2,this.blurTexture3,t,e,this.prevMDVSFrame,this.prevPresetEquationRunner.mdVSQAfterFrame,this.warpColor),this.compShader.renderQuadTexture(!0,this.targetTexture,this.blurTexture1,this.blurTexture2,this.blurTexture3,t,e,this.mdVSFrameMixed,this.presetEquationRunner.mdVSQAfterFrame,this.warpColor)):this.compShader.renderQuadTexture(!1,this.targetTexture,this.blurTexture1,this.blurTexture2,this.blurTexture3,t,e,this.mdVSFrame,this.presetEquationRunner.mdVSQAfterFrame,this.warpColor),this.supertext.startTime>=0){const t=(this.time-this.supertext.startTime)/this.supertext.duration;this.titleText.renderTitle(t,!1,this.globalVars),t>=1&&(this.supertext.startTime=-1)}this.outputFXAA&&(this.gl.bindTexture(this.gl.TEXTURE_2D,this.compTexture),this.gl.generateMipmap(this.gl.TEXTURE_2D),this.bindFrambufferAndSetViewport(null,this.width,this.height),this.outputShader.renderQuadTexture(this.compTexture))}launchSongTitleAnim(t){this.supertext={startTime:this.time,duration:1.7},this.titleText.generateTitleTexture(t)}toDataURL(){const t=new Uint8Array(this.texsizeX*this.texsizeY*4),e=this.gl.createFramebuffer(),s=this.gl.createTexture();this.bindFrameBufferTexture(e,s);const{blurMins:i,blurMaxs:A}=v.getBlurValues(this.mdVSFrameMixed);this.compShader.renderQuadTexture(!1,this.targetTexture,this.blurTexture1,this.blurTexture2,this.blurTexture3,i,A,this.mdVSFrame,this.presetEquationRunner.mdVSQAfterFrame,this.warpColor),this.gl.readPixels(0,0,this.texsizeX,this.texsizeY,this.gl.RGBA,this.gl.UNSIGNED_BYTE,t),Array.from({length:this.texsizeY},((e,s)=>t.slice(s*this.texsizeX*4,(s+1)*this.texsizeX*4))).forEach(((e,s)=>t.set(e,(this.texsizeY-s-1)*this.texsizeX*4)));const r=document.createElement("canvas");r.width=this.texsizeX,r.height=this.texsizeY;const a=r.getContext("2d"),o=a.createImageData(this.texsizeX,this.texsizeY);return o.data.set(t),a.putImageData(o,0,0),this.gl.deleteTexture(s),this.gl.deleteFramebuffer(e),r.toDataURL()}warpBufferToDataURL(){const t=new Uint8Array(this.texsizeX*this.texsizeY*4);this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,this.targetFrameBuffer),this.gl.readPixels(0,0,this.texsizeX,this.texsizeY,this.gl.RGBA,this.gl.UNSIGNED_BYTE,t);const e=document.createElement("canvas");e.width=this.texsizeX,e.height=this.texsizeY;const s=e.getContext("2d"),i=s.createImageData(this.texsizeX,this.texsizeY);return i.data.set(t),s.putImageData(i,0,0),e.toDataURL()}}},"./src/rendering/shaders/blur/blur.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return r}));var i=s("./src/rendering/shaders/blur/blurVertical.js"),A=s("./src/rendering/shaders/blur/blurHorizontal.js");class r{constructor(t,e,s,r={}){this.blurLevel=t,this.blurRatios=e,this.gl=s,this.texsizeX=r.texsizeX,this.texsizeY=r.texsizeY,this.anisoExt=this.gl.getExtension("EXT_texture_filter_anisotropic")||this.gl.getExtension("MOZ_EXT_texture_filter_anisotropic")||this.gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic"),this.blurHorizontalFrameBuffer=this.gl.createFramebuffer(),this.blurVerticalFrameBuffer=this.gl.createFramebuffer(),this.blurHorizontalTexture=this.gl.createTexture(),this.blurVerticalTexture=this.gl.createTexture(),this.setupFrameBufferTextures(),this.blurHorizontal=new A.default(s,this.blurLevel,r),this.blurVertical=new i.default(s,this.blurLevel,r)}updateGlobals(t){this.texsizeX=t.texsizeX,this.texsizeY=t.texsizeY,this.setupFrameBufferTextures()}getTextureSize(t){let e=Math.max(this.texsizeX*t,16);e=16*Math.floor((e+3)/16);let s=Math.max(this.texsizeY*t,16);return s=4*Math.floor((s+3)/4),[e,s]}setupFrameBufferTextures(){const t=this.blurLevel>0?this.blurRatios[this.blurLevel-1]:[1,1],e=this.blurRatios[this.blurLevel],s=this.getTextureSize(t[1]),i=this.getTextureSize(e[0]);this.bindFrameBufferTexture(this.blurHorizontalFrameBuffer,this.blurHorizontalTexture,i);const A=i,r=this.getTextureSize(e[1]);this.bindFrameBufferTexture(this.blurVerticalFrameBuffer,this.blurVerticalTexture,r),this.horizontalTexsizes=[s,i],this.verticalTexsizes=[A,r]}bindFrambufferAndSetViewport(t,e){this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,t),this.gl.viewport(0,0,e[0],e[1])}bindFrameBufferTexture(t,e,s){if(this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT,1),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,s[0],s[1],0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,new Uint8Array(s[0]*s[1]*4)),this.gl.generateMipmap(this.gl.TEXTURE_2D),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR_MIPMAP_LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),this.anisoExt){const t=this.gl.getParameter(this.anisoExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT);this.gl.texParameterf(this.gl.TEXTURE_2D,this.anisoExt.TEXTURE_MAX_ANISOTROPY_EXT,t)}this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,t),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,this.gl.COLOR_ATTACHMENT0,this.gl.TEXTURE_2D,e,0)}renderBlurTexture(t,e,s,i){this.bindFrambufferAndSetViewport(this.blurHorizontalFrameBuffer,this.horizontalTexsizes[1]),this.blurHorizontal.renderQuadTexture(t,e,s,i,this.horizontalTexsizes[0]),this.gl.bindTexture(this.gl.TEXTURE_2D,this.blurHorizontalTexture),this.gl.generateMipmap(this.gl.TEXTURE_2D),this.bindFrambufferAndSetViewport(this.blurVerticalFrameBuffer,this.verticalTexsizes[1]),this.blurVertical.renderQuadTexture(this.blurHorizontalTexture,e,this.verticalTexsizes[0]),this.gl.bindTexture(this.gl.TEXTURE_2D,this.blurVerticalTexture),this.gl.generateMipmap(this.gl.TEXTURE_2D)}}},"./src/rendering/shaders/blur/blurHorizontal.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/rendering/shaders/shaderUtils.js");class A{constructor(t,e){this.gl=t,this.blurLevel=e;const s=[4,3.8,3.5,2.9,1.9,1.2,.7,.3],A=s[0]+s[1],r=s[2]+s[3],a=s[4]+s[5],o=s[6]+s[7],n=0+2*s[1]/A,h=2+2*s[3]/r,l=4+2*s[5]/a,c=6+2*s[7]/o;this.ws=new Float32Array([A,r,a,o]),this.ds=new Float32Array([n,h,l,c]),this.wDiv=.5/(A+r+a+o),this.positions=new Float32Array([-1,-1,1,-1,-1,1,1,1]),this.vertexBuf=this.gl.createBuffer(),this.floatPrecision=i.default.getFragmentFloatPrecision(this.gl),this.createShader()}createShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"\n #version 300 es\n const vec2 halfmad = vec2(0.5);\n in vec2 aPos;\n out vec2 uv;\n void main(void) {\n gl_Position = vec4(aPos, 0.0, 1.0);\n uv = aPos * halfmad + halfmad;\n }\n ".trim()),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`#version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n\n in vec2 uv;\n out vec4 fragColor;\n uniform sampler2D uTexture;\n uniform vec4 texsize;\n uniform float scale;\n uniform float bias;\n uniform vec4 ws;\n uniform vec4 ds;\n uniform float wdiv;\n\n void main(void) {\n float w1 = ws[0];\n float w2 = ws[1];\n float w3 = ws[2];\n float w4 = ws[3];\n float d1 = ds[0];\n float d2 = ds[1];\n float d3 = ds[2];\n float d4 = ds[3];\n\n vec2 uv2 = uv.xy;\n\n vec3 blur =\n ( texture(uTexture, uv2 + vec2( d1 * texsize.z,0.0) ).xyz\n + texture(uTexture, uv2 + vec2(-d1 * texsize.z,0.0) ).xyz) * w1 +\n ( texture(uTexture, uv2 + vec2( d2 * texsize.z,0.0) ).xyz\n + texture(uTexture, uv2 + vec2(-d2 * texsize.z,0.0) ).xyz) * w2 +\n ( texture(uTexture, uv2 + vec2( d3 * texsize.z,0.0) ).xyz\n + texture(uTexture, uv2 + vec2(-d3 * texsize.z,0.0) ).xyz) * w3 +\n ( texture(uTexture, uv2 + vec2( d4 * texsize.z,0.0) ).xyz\n + texture(uTexture, uv2 + vec2(-d4 * texsize.z,0.0) ).xyz) * w4;\n\n blur.xyz *= wdiv;\n blur.xyz = blur.xyz * scale + bias;\n\n fragColor = vec4(blur, 1.0);\n }`),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.positionLocation=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.textureLoc=this.gl.getUniformLocation(this.shaderProgram,"uTexture"),this.texsizeLocation=this.gl.getUniformLocation(this.shaderProgram,"texsize"),this.scaleLoc=this.gl.getUniformLocation(this.shaderProgram,"scale"),this.biasLoc=this.gl.getUniformLocation(this.shaderProgram,"bias"),this.wsLoc=this.gl.getUniformLocation(this.shaderProgram,"ws"),this.dsLocation=this.gl.getUniformLocation(this.shaderProgram,"ds"),this.wdivLoc=this.gl.getUniformLocation(this.shaderProgram,"wdiv")}getScaleAndBias(t,e){const s=[1,1,1],i=[0,0,0];let A,r;return s[0]=1/(e[0]-t[0]),i[0]=-t[0]*s[0],A=(t[1]-t[0])/(e[0]-t[0]),r=(e[1]-t[0])/(e[0]-t[0]),s[1]=1/(r-A),i[1]=-A*s[1],A=(t[2]-t[1])/(e[1]-t[1]),r=(e[2]-t[1])/(e[1]-t[1]),s[2]=1/(r-A),i[2]=-A*s[2],{scale:s[this.blurLevel],bias:i[this.blurLevel]}}renderQuadTexture(t,e,s,i,A){this.gl.useProgram(this.shaderProgram),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.vertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.positions,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.positionLocation,2,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.positionLocation),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,t),this.gl.uniform1i(this.textureLoc,0);const{scale:r,bias:a}=this.getScaleAndBias(s,i);this.gl.uniform4fv(this.texsizeLocation,[A[0],A[1],1/A[0],1/A[1]]),this.gl.uniform1f(this.scaleLoc,r),this.gl.uniform1f(this.biasLoc,a),this.gl.uniform4fv(this.wsLoc,this.ws),this.gl.uniform4fv(this.dsLocation,this.ds),this.gl.uniform1f(this.wdivLoc,this.wDiv),this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4)}}},"./src/rendering/shaders/blur/blurVertical.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/rendering/shaders/shaderUtils.js");class A{constructor(t,e){this.gl=t,this.blurLevel=e;const s=[4,3.8,3.5,2.9,1.9,1.2,.7,.3],A=s[0]+s[1]+s[2]+s[3],r=s[4]+s[5]+s[6]+s[7],a=0+(s[2]+s[3])/A*2,o=2+(s[6]+s[7])/r*2;this.wds=new Float32Array([A,r,a,o]),this.wDiv=1/(2*(A+r)),this.positions=new Float32Array([-1,-1,1,-1,-1,1,1,1]),this.vertexBuf=this.gl.createBuffer(),this.floatPrecision=i.default.getFragmentFloatPrecision(this.gl),this.createShader()}createShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"\n #version 300 es\n const vec2 halfmad = vec2(0.5);\n in vec2 aPos;\n out vec2 uv;\n void main(void) {\n gl_Position = vec4(aPos, 0.0, 1.0);\n uv = aPos * halfmad + halfmad;\n }\n ".trim()),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`#version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n\n in vec2 uv;\n out vec4 fragColor;\n uniform sampler2D uTexture;\n uniform vec4 texsize;\n uniform float ed1;\n uniform float ed2;\n uniform float ed3;\n uniform vec4 wds;\n uniform float wdiv;\n\n void main(void) {\n float w1 = wds[0];\n float w2 = wds[1];\n float d1 = wds[2];\n float d2 = wds[3];\n\n vec2 uv2 = uv.xy;\n\n vec3 blur =\n ( texture(uTexture, uv2 + vec2(0.0, d1 * texsize.w) ).xyz\n + texture(uTexture, uv2 + vec2(0.0,-d1 * texsize.w) ).xyz) * w1 +\n ( texture(uTexture, uv2 + vec2(0.0, d2 * texsize.w) ).xyz\n + texture(uTexture, uv2 + vec2(0.0,-d2 * texsize.w) ).xyz) * w2;\n\n blur.xyz *= wdiv;\n\n float t = min(min(uv.x, uv.y), 1.0 - max(uv.x, uv.y));\n t = sqrt(t);\n t = ed1 + ed2 * clamp(t * ed3, 0.0, 1.0);\n blur.xyz *= t;\n\n fragColor = vec4(blur, 1.0);\n }`),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.positionLocation=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.textureLoc=this.gl.getUniformLocation(this.shaderProgram,"uTexture"),this.texsizeLocation=this.gl.getUniformLocation(this.shaderProgram,"texsize"),this.ed1Loc=this.gl.getUniformLocation(this.shaderProgram,"ed1"),this.ed2Loc=this.gl.getUniformLocation(this.shaderProgram,"ed2"),this.ed3Loc=this.gl.getUniformLocation(this.shaderProgram,"ed3"),this.wdsLocation=this.gl.getUniformLocation(this.shaderProgram,"wds"),this.wdivLoc=this.gl.getUniformLocation(this.shaderProgram,"wdiv")}renderQuadTexture(t,e,s){this.gl.useProgram(this.shaderProgram),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.vertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.positions,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.positionLocation,2,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.positionLocation),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,t),this.gl.uniform1i(this.textureLoc,0);const i=0===this.blurLevel?e.b1ed:0;this.gl.uniform4fv(this.texsizeLocation,[s[0],s[1],1/s[0],1/s[1]]),this.gl.uniform1f(this.ed1Loc,1-i),this.gl.uniform1f(this.ed2Loc,i),this.gl.uniform1f(this.ed3Loc,5),this.gl.uniform4fv(this.wdsLocation,this.wds),this.gl.uniform1f(this.wdivLoc,this.wDiv),this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4)}}},"./src/rendering/shaders/comp.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/rendering/shaders/shaderUtils.js");class A{constructor(t,e,s,A={}){this.gl=t,this.noise=e,this.image=s,this.mesh_width=A.mesh_width,this.mesh_height=A.mesh_height,this.texsizeX=A.texsizeX,this.texsizeY=A.texsizeY,this.aspectx=A.aspectx,this.aspecty=A.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.compWidth=32,this.compHeight=24,this.buildPositions(),this.indexBuf=t.createBuffer(),this.positionVertexBuf=this.gl.createBuffer(),this.compColorVertexBuf=this.gl.createBuffer(),this.floatPrecision=i.default.getFragmentFloatPrecision(this.gl),this.createShader(),this.mainSampler=this.gl.createSampler(),this.mainSamplerFW=this.gl.createSampler(),this.mainSamplerFC=this.gl.createSampler(),this.mainSamplerPW=this.gl.createSampler(),this.mainSamplerPC=this.gl.createSampler(),t.samplerParameteri(this.mainSampler,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.samplerParameteri(this.mainSampler,t.TEXTURE_MAG_FILTER,t.LINEAR),t.samplerParameteri(this.mainSampler,t.TEXTURE_WRAP_S,t.REPEAT),t.samplerParameteri(this.mainSampler,t.TEXTURE_WRAP_T,t.REPEAT),t.samplerParameteri(this.mainSamplerFW,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.samplerParameteri(this.mainSamplerFW,t.TEXTURE_MAG_FILTER,t.LINEAR),t.samplerParameteri(this.mainSamplerFW,t.TEXTURE_WRAP_S,t.REPEAT),t.samplerParameteri(this.mainSamplerFW,t.TEXTURE_WRAP_T,t.REPEAT),t.samplerParameteri(this.mainSamplerFC,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.samplerParameteri(this.mainSamplerFC,t.TEXTURE_MAG_FILTER,t.LINEAR),t.samplerParameteri(this.mainSamplerFC,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.samplerParameteri(this.mainSamplerFC,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.samplerParameteri(this.mainSamplerPW,t.TEXTURE_MIN_FILTER,t.NEAREST_MIPMAP_NEAREST),t.samplerParameteri(this.mainSamplerPW,t.TEXTURE_MAG_FILTER,t.NEAREST),t.samplerParameteri(this.mainSamplerPW,t.TEXTURE_WRAP_S,t.REPEAT),t.samplerParameteri(this.mainSamplerPW,t.TEXTURE_WRAP_T,t.REPEAT),t.samplerParameteri(this.mainSamplerPC,t.TEXTURE_MIN_FILTER,t.NEAREST_MIPMAP_NEAREST),t.samplerParameteri(this.mainSamplerPC,t.TEXTURE_MAG_FILTER,t.NEAREST),t.samplerParameteri(this.mainSamplerPC,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.samplerParameteri(this.mainSamplerPC,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)}buildPositions(){const t=this.compWidth,e=this.compHeight,s=t+1,i=e+1,A=2/t,r=2/e,a=[];for(let t=0;t<i;t++){const e=t*r-1;for(let t=0;t<s;t++){const s=t*A-1;a.push(s,-e,0)}}const o=[];for(let i=0;i<e;i++)for(let e=0;e<t;e++){const t=e+s*i,A=e+s*(i+1),r=e+1+s*(i+1),a=e+1+s*i;o.push(t,A,a),o.push(A,r,a)}this.vertices=new Float32Array(a),this.indices=new Uint16Array(o)}updateGlobals(t){this.mesh_width=t.mesh_width,this.mesh_height=t.mesh_height,this.texsizeX=t.texsizeX,this.texsizeY=t.texsizeY,this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.buildPositions()}createShader(t=""){let e,s;if(0===t.length)e="float orient_horiz = mod(echo_orientation, 2.0);\n float orient_x = (orient_horiz != 0.0) ? -1.0 : 1.0;\n float orient_y = (echo_orientation >= 2.0) ? -1.0 : 1.0;\n vec2 uv_echo = ((uv - 0.5) *\n (1.0 / echo_zoom) *\n vec2(orient_x, orient_y)) + 0.5;\n\n ret = mix(texture(sampler_main, uv).rgb,\n texture(sampler_main, uv_echo).rgb,\n echo_alpha);\n\n ret *= gammaAdj;\n\n if(fShader >= 1.0) {\n ret *= hue_shader;\n } else if(fShader > 0.001) {\n ret *= (1.0 - fShader) + (fShader * hue_shader);\n }\n\n if(brighten != 0) ret = sqrt(ret);\n if(darken != 0) ret = ret*ret;\n if(solarize != 0) ret = ret * (1.0 - ret) * 4.0;\n if(invert != 0) ret = 1.0 - ret;",s="";else{const A=i.default.getShaderParts(t);s=A[0],e=A[1]}e=e.replace(/texture2D/g,"texture"),e=e.replace(/texture3D/g,"texture"),this.userTextures=i.default.getUserSamplers(s),this.shaderProgram=this.gl.createProgram();const A=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(A,"\n #version 300 es\n const vec2 halfmad = vec2(0.5);\n in vec2 aPos;\n in vec4 aCompColor;\n out vec2 vUv;\n out vec4 vColor;\n void main(void) {\n gl_Position = vec4(aPos, 0.0, 1.0);\n vUv = aPos * halfmad + halfmad;\n vColor = aCompColor;\n }\n ".trim()),this.gl.compileShader(A);const r=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(r,`\n #version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n precision mediump sampler3D;\n\n vec3 lum(vec3 v){\n return vec3(dot(v, vec3(0.32,0.49,0.29)));\n }\n\n in vec2 vUv;\n in vec4 vColor;\n out vec4 fragColor;\n uniform sampler2D sampler_main;\n uniform sampler2D sampler_fw_main;\n uniform sampler2D sampler_fc_main;\n uniform sampler2D sampler_pw_main;\n uniform sampler2D sampler_pc_main;\n uniform sampler2D sampler_blur1;\n uniform sampler2D sampler_blur2;\n uniform sampler2D sampler_blur3;\n uniform sampler2D sampler_noise_lq;\n uniform sampler2D sampler_noise_lq_lite;\n uniform sampler2D sampler_noise_mq;\n uniform sampler2D sampler_noise_hq;\n uniform sampler2D sampler_pw_noise_lq;\n uniform sampler3D sampler_noisevol_lq;\n uniform sampler3D sampler_noisevol_hq;\n\n uniform float time;\n uniform float gammaAdj;\n uniform float echo_zoom;\n uniform float echo_alpha;\n uniform float echo_orientation;\n uniform int invert;\n uniform int brighten;\n uniform int darken;\n uniform int solarize;\n uniform vec2 resolution;\n uniform vec4 aspect;\n uniform vec4 texsize;\n uniform vec4 texsize_noise_lq;\n uniform vec4 texsize_noise_mq;\n uniform vec4 texsize_noise_hq;\n uniform vec4 texsize_noise_lq_lite;\n uniform vec4 texsize_noisevol_lq;\n uniform vec4 texsize_noisevol_hq;\n\n uniform float bass;\n uniform float mid;\n uniform float treb;\n uniform float vol;\n uniform float bass_att;\n uniform float mid_att;\n uniform float treb_att;\n uniform float vol_att;\n\n uniform float frame;\n uniform float fps;\n\n uniform vec4 _qa;\n uniform vec4 _qb;\n uniform vec4 _qc;\n uniform vec4 _qd;\n uniform vec4 _qe;\n uniform vec4 _qf;\n uniform vec4 _qg;\n uniform vec4 _qh;\n\n #define q1 _qa.x\n #define q2 _qa.y\n #define q3 _qa.z\n #define q4 _qa.w\n #define q5 _qb.x\n #define q6 _qb.y\n #define q7 _qb.z\n #define q8 _qb.w\n #define q9 _qc.x\n #define q10 _qc.y\n #define q11 _qc.z\n #define q12 _qc.w\n #define q13 _qd.x\n #define q14 _qd.y\n #define q15 _qd.z\n #define q16 _qd.w\n #define q17 _qe.x\n #define q18 _qe.y\n #define q19 _qe.z\n #define q20 _qe.w\n #define q21 _qf.x\n #define q22 _qf.y\n #define q23 _qf.z\n #define q24 _qf.w\n #define q25 _qg.x\n #define q26 _qg.y\n #define q27 _qg.z\n #define q28 _qg.w\n #define q29 _qh.x\n #define q30 _qh.y\n #define q31 _qh.z\n #define q32 _qh.w\n\n uniform vec4 slow_roam_cos;\n uniform vec4 roam_cos;\n uniform vec4 slow_roam_sin;\n uniform vec4 roam_sin;\n\n uniform float blur1_min;\n uniform float blur1_max;\n uniform float blur2_min;\n uniform float blur2_max;\n uniform float blur3_min;\n uniform float blur3_max;\n\n uniform float scale1;\n uniform float scale2;\n uniform float scale3;\n uniform float bias1;\n uniform float bias2;\n uniform float bias3;\n\n uniform vec4 rand_frame;\n uniform vec4 rand_preset;\n\n uniform float fShader;\n\n float PI = ${Math.PI};\n\n ${s}\n\n void main(void) {\n vec3 ret;\n vec2 uv = vUv;\n vec2 uv_orig = vUv;\n uv.y = 1.0 - uv.y;\n uv_orig.y = 1.0 - uv_orig.y;\n float rad = length(uv - 0.5);\n float ang = atan(uv.x - 0.5, uv.y - 0.5);\n vec3 hue_shader = vColor.rgb;\n\n ${e}\n\n fragColor = vec4(ret, vColor.a);\n }\n `.trim()),this.gl.compileShader(r),this.gl.attachShader(this.shaderProgram,A),this.gl.attachShader(this.shaderProgram,r),this.gl.linkProgram(this.shaderProgram),this.positionLocation=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.compColorLocation=this.gl.getAttribLocation(this.shaderProgram,"aCompColor"),this.textureLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_main"),this.textureFWLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_fw_main"),this.textureFCLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_fc_main"),this.texturePWLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_pw_main"),this.texturePCLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_pc_main"),this.blurTexture1Loc=this.gl.getUniformLocation(this.shaderProgram,"sampler_blur1"),this.blurTexture2Loc=this.gl.getUniformLocation(this.shaderProgram,"sampler_blur2"),this.blurTexture3Loc=this.gl.getUniformLocation(this.shaderProgram,"sampler_blur3"),this.noiseLQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noise_lq"),this.noiseMQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noise_mq"),this.noiseHQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noise_hq"),this.noiseLQLiteLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noise_lq_lite"),this.noisePointLQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_pw_noise_lq"),this.noiseVolLQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noisevol_lq"),this.noiseVolHQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noisevol_hq"),this.timeLoc=this.gl.getUniformLocation(this.shaderProgram,"time"),this.gammaAdjLoc=this.gl.getUniformLocation(this.shaderProgram,"gammaAdj"),this.echoZoomLoc=this.gl.getUniformLocation(this.shaderProgram,"echo_zoom"),this.echoAlphaLoc=this.gl.getUniformLocation(this.shaderProgram,"echo_alpha"),this.echoOrientationLoc=this.gl.getUniformLocation(this.shaderProgram,"echo_orientation"),this.invertLoc=this.gl.getUniformLocation(this.shaderProgram,"invert"),this.brightenLoc=this.gl.getUniformLocation(this.shaderProgram,"brighten"),this.darkenLoc=this.gl.getUniformLocation(this.shaderProgram,"darken"),this.solarizeLoc=this.gl.getUniformLocation(this.shaderProgram,"solarize"),this.texsizeLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize"),this.texsizeNoiseLQLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noise_lq"),this.texsizeNoiseMQLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noise_mq"),this.texsizeNoiseHQLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noise_hq"),this.texsizeNoiseLQLiteLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noise_lq_lite"),this.texsizeNoiseVolLQLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noisevol_lq"),this.texsizeNoiseVolHQLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noisevol_hq"),this.resolutionLoc=this.gl.getUniformLocation(this.shaderProgram,"resolution"),this.aspectLoc=this.gl.getUniformLocation(this.shaderProgram,"aspect"),this.bassLoc=this.gl.getUniformLocation(this.shaderProgram,"bass"),this.midLoc=this.gl.getUniformLocation(this.shaderProgram,"mid"),this.trebLoc=this.gl.getUniformLocation(this.shaderProgram,"treb"),this.volLoc=this.gl.getUniformLocation(this.shaderProgram,"vol"),this.bassAttLoc=this.gl.getUniformLocation(this.shaderProgram,"bass_att"),this.midAttLoc=this.gl.getUniformLocation(this.shaderProgram,"mid_att"),this.trebAttLoc=this.gl.getUniformLocation(this.shaderProgram,"treb_att"),this.volAttLoc=this.gl.getUniformLocation(this.shaderProgram,"vol_att"),this.frameLoc=this.gl.getUniformLocation(this.shaderProgram,"frame"),this.fpsLoc=this.gl.getUniformLocation(this.shaderProgram,"fps"),this.blur1MinLoc=this.gl.getUniformLocation(this.shaderProgram,"blur1_min"),this.blur1MaxLoc=this.gl.getUniformLocation(this.shaderProgram,"blur1_max"),this.blur2MinLoc=this.gl.getUniformLocation(this.shaderProgram,"blur2_min"),this.blur2MaxLoc=this.gl.getUniformLocation(this.shaderProgram,"blur2_max"),this.blur3MinLoc=this.gl.getUniformLocation(this.shaderProgram,"blur3_min"),this.blur3MaxLoc=this.gl.getUniformLocation(this.shaderProgram,"blur3_max"),this.scale1Loc=this.gl.getUniformLocation(this.shaderProgram,"scale1"),this.scale2Loc=this.gl.getUniformLocation(this.shaderProgram,"scale2"),this.scale3Loc=this.gl.getUniformLocation(this.shaderProgram,"scale3"),this.bias1Loc=this.gl.getUniformLocation(this.shaderProgram,"bias1"),this.bias2Loc=this.gl.getUniformLocation(this.shaderProgram,"bias2"),this.bias3Loc=this.gl.getUniformLocation(this.shaderProgram,"bias3"),this.randPresetLoc=this.gl.getUniformLocation(this.shaderProgram,"rand_preset"),this.randFrameLoc=this.gl.getUniformLocation(this.shaderProgram,"rand_frame"),this.fShaderLoc=this.gl.getUniformLocation(this.shaderProgram,"fShader"),this.qaLoc=this.gl.getUniformLocation(this.shaderProgram,"_qa"),this.qbLoc=this.gl.getUniformLocation(this.shaderProgram,"_qb"),this.qcLoc=this.gl.getUniformLocation(this.shaderProgram,"_qc"),this.qdLoc=this.gl.getUniformLocation(this.shaderProgram,"_qd"),this.qeLoc=this.gl.getUniformLocation(this.shaderProgram,"_qe"),this.qfLoc=this.gl.getUniformLocation(this.shaderProgram,"_qf"),this.qgLoc=this.gl.getUniformLocation(this.shaderProgram,"_qg"),this.qhLoc=this.gl.getUniformLocation(this.shaderProgram,"_qh"),this.slowRoamCosLoc=this.gl.getUniformLocation(this.shaderProgram,"slow_roam_cos"),this.roamCosLoc=this.gl.getUniformLocation(this.shaderProgram,"roam_cos"),this.slowRoamSinLoc=this.gl.getUniformLocation(this.shaderProgram,"slow_roam_sin"),this.roamSinLoc=this.gl.getUniformLocation(this.shaderProgram,"roam_sin");for(let t=0;t<this.userTextures.length;t++){const e=this.userTextures[t];e.textureLoc=this.gl.getUniformLocation(this.shaderProgram,`sampler_${e.sampler}`)}}updateShader(t){this.createShader(t)}bindBlurVals(t,e){const s=t[0],i=t[1],A=t[2],r=e[0],a=e[1],o=e[2],n=r-s,h=s,l=a-i,c=i,g=o-A,u=A;this.gl.uniform1f(this.blur1MinLoc,s),this.gl.uniform1f(this.blur1MaxLoc,r),this.gl.uniform1f(this.blur2MinLoc,i),this.gl.uniform1f(this.blur2MaxLoc,a),this.gl.uniform1f(this.blur3MinLoc,A),this.gl.uniform1f(this.blur3MaxLoc,o),this.gl.uniform1f(this.scale1Loc,n),this.gl.uniform1f(this.scale2Loc,l),this.gl.uniform1f(this.scale3Loc,g),this.gl.uniform1f(this.bias1Loc,h),this.gl.uniform1f(this.bias2Loc,c),this.gl.uniform1f(this.bias3Loc,u)}static generateHueBase(t){const e=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1]);for(let s=0;s<4;s++){e[3*s+0]=.6+.3*Math.sin(30*t.time*.0143+3+21*s+t.rand_start[3]),e[3*s+1]=.6+.3*Math.sin(30*t.time*.0107+1+13*s+t.rand_start[1]),e[3*s+2]=.6+.3*Math.sin(30*t.time*.0129+6+9*s+t.rand_start[2]);const i=Math.max(e[3*s],e[3*s+1],e[3*s+2]);for(let t=0;t<3;t++)e[3*s+t]=e[3*s+t]/i,e[3*s+t]=.5+.5*e[3*s+t]}return e}generateCompColors(t,e,s){const i=A.generateHueBase(e),r=this.compWidth+1,a=this.compHeight+1,o=new Float32Array(r*a*4);let n=0;for(let e=0;e<a;e++)for(let A=0;A<r;A++){let r=A/this.compWidth,a=e/this.compHeight;const h=[1,1,1];for(let t=0;t<3;t++)h[t]=i[0+t]*r*a+i[3+t]*(1-r)*a+i[6+t]*r*(1-a)+i[9+t]*(1-r)*(1-a);let l=1;if(t){r*=this.mesh_width+1,a*=this.mesh_height+1,r=Math.clamp(r,0,this.mesh_width-1),a=Math.clamp(a,0,this.mesh_height-1);const t=Math.floor(r),e=Math.floor(a),i=r-t,A=a-e;l=s[4*(e*(this.mesh_width+1)+t)+3]*(1-i)*(1-A)+s[4*(e*(this.mesh_width+1)+(t+1))+3]*i*(1-A)+s[4*((e+1)*(this.mesh_width+1)+t)+3]*(1-i)*A+s[4*((e+1)*(this.mesh_width+1)+(t+1))+3]*i*A}o[n+0]=h[0],o[n+1]=h[1],o[n+2]=h[2],o[n+3]=l,n+=4}return o}renderQuadTexture(t,e,s,i,A,r,a,o,n,h){const l=this.generateCompColors(t,o,h);this.gl.useProgram(this.shaderProgram),this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER,this.indexBuf),this.gl.bufferData(this.gl.ELEMENT_ARRAY_BUFFER,this.indices,this.gl.STATIC_DRAW),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.positionVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.vertices,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.positionLocation,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.positionLocation),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.compColorVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,l,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.compColorLocation,4,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.compColorLocation);const c=0!==o.wrap?this.gl.REPEAT:this.gl.CLAMP_TO_EDGE;this.gl.samplerParameteri(this.mainSampler,this.gl.TEXTURE_WRAP_S,c),this.gl.samplerParameteri(this.mainSampler,this.gl.TEXTURE_WRAP_T,c),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.bindSampler(0,this.mainSampler),this.gl.uniform1i(this.textureLoc,0),this.gl.activeTexture(this.gl.TEXTURE1),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.bindSampler(1,this.mainSamplerFW),this.gl.uniform1i(this.textureFWLoc,1),this.gl.activeTexture(this.gl.TEXTURE2),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.bindSampler(2,this.mainSamplerFC),this.gl.uniform1i(this.textureFCLoc,2),this.gl.activeTexture(this.gl.TEXTURE3),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.bindSampler(3,this.mainSamplerPW),this.gl.uniform1i(this.texturePWLoc,3),this.gl.activeTexture(this.gl.TEXTURE4),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.bindSampler(4,this.mainSamplerPC),this.gl.uniform1i(this.texturePCLoc,4),this.gl.activeTexture(this.gl.TEXTURE5),this.gl.bindTexture(this.gl.TEXTURE_2D,s),this.gl.uniform1i(this.blurTexture1Loc,5),this.gl.activeTexture(this.gl.TEXTURE6),this.gl.bindTexture(this.gl.TEXTURE_2D,i),this.gl.uniform1i(this.blurTexture2Loc,6),this.gl.activeTexture(this.gl.TEXTURE7),this.gl.bindTexture(this.gl.TEXTURE_2D,A),this.gl.uniform1i(this.blurTexture3Loc,7),this.gl.activeTexture(this.gl.TEXTURE8),this.gl.bindTexture(this.gl.TEXTURE_2D,this.noise.noiseTexLQ),this.gl.uniform1i(this.noiseLQLoc,8),this.gl.activeTexture(this.gl.TEXTURE9),this.gl.bindTexture(this.gl.TEXTURE_2D,this.noise.noiseTexMQ),this.gl.uniform1i(this.noiseMQLoc,9),this.gl.activeTexture(this.gl.TEXTURE10),this.gl.bindTexture(this.gl.TEXTURE_2D,this.noise.noiseTexHQ),this.gl.uniform1i(this.noiseHQLoc,10),this.gl.activeTexture(this.gl.TEXTURE11),this.gl.bindTexture(this.gl.TEXTURE_2D,this.noise.noiseTexLQLite),this.gl.uniform1i(this.noiseLQLiteLoc,11),this.gl.activeTexture(this.gl.TEXTURE12),this.gl.bindTexture(this.gl.TEXTURE_2D,this.noise.noiseTexLQ),this.gl.bindSampler(12,this.noise.noiseTexPointLQ),this.gl.uniform1i(this.noisePointLQLoc,12),this.gl.activeTexture(this.gl.TEXTURE13),this.gl.bindTexture(this.gl.TEXTURE_3D,this.noise.noiseTexVolLQ),this.gl.uniform1i(this.noiseVolLQLoc,13),this.gl.activeTexture(this.gl.TEXTURE14),this.gl.bindTexture(this.gl.TEXTURE_3D,this.noise.noiseTexVolHQ),this.gl.uniform1i(this.noiseVolHQLoc,14);for(let t=0;t<this.userTextures.length;t++){const e=this.userTextures[t];this.gl.activeTexture(this.gl.TEXTURE15+t),this.gl.bindTexture(this.gl.TEXTURE_2D,this.image.getTexture(e.sampler)),this.gl.uniform1i(e.textureLoc,15+t)}this.gl.uniform1f(this.timeLoc,o.time),this.gl.uniform1f(this.gammaAdjLoc,o.gammaadj),this.gl.uniform1f(this.echoZoomLoc,o.echo_zoom),this.gl.uniform1f(this.echoAlphaLoc,o.echo_alpha),this.gl.uniform1f(this.echoOrientationLoc,o.echo_orient),this.gl.uniform1i(this.invertLoc,o.invert),this.gl.uniform1i(this.brightenLoc,o.brighten),this.gl.uniform1i(this.darkenLoc,o.darken),this.gl.uniform1i(this.solarizeLoc,o.solarize),this.gl.uniform2fv(this.resolutionLoc,[this.texsizeX,this.texsizeY]),this.gl.uniform4fv(this.aspectLoc,[this.aspectx,this.aspecty,this.invAspectx,this.invAspecty]),this.gl.uniform4fv(this.texsizeLoc,new Float32Array([this.texsizeX,this.texsizeY,1/this.texsizeX,1/this.texsizeY])),this.gl.uniform4fv(this.texsizeNoiseLQLoc,[256,256,1/256,1/256]),this.gl.uniform4fv(this.texsizeNoiseMQLoc,[256,256,1/256,1/256]),this.gl.uniform4fv(this.texsizeNoiseHQLoc,[256,256,1/256,1/256]),this.gl.uniform4fv(this.texsizeNoiseLQLiteLoc,[32,32,1/32,1/32]),this.gl.uniform4fv(this.texsizeNoiseVolLQLoc,[32,32,1/32,1/32]),this.gl.uniform4fv(this.texsizeNoiseVolHQLoc,[32,32,1/32,1/32]),this.gl.uniform1f(this.bassLoc,o.bass),this.gl.uniform1f(this.midLoc,o.mid),this.gl.uniform1f(this.trebLoc,o.treb),this.gl.uniform1f(this.volLoc,(o.bass+o.mid+o.treb)/3),this.gl.uniform1f(this.bassAttLoc,o.bass_att),this.gl.uniform1f(this.midAttLoc,o.mid_att),this.gl.uniform1f(this.trebAttLoc,o.treb_att),this.gl.uniform1f(this.volAttLoc,(o.bass_att+o.mid_att+o.treb_att)/3),this.gl.uniform1f(this.frameLoc,o.frame),this.gl.uniform1f(this.fpsLoc,o.fps),this.gl.uniform4fv(this.randPresetLoc,o.rand_preset),this.gl.uniform4fv(this.randFrameLoc,new Float32Array([Math.random(),Math.random(),Math.random(),Math.random()])),this.gl.uniform1f(this.fShaderLoc,o.fshader),this.gl.uniform4fv(this.qaLoc,new Float32Array([n.q1||0,n.q2||0,n.q3||0,n.q4||0])),this.gl.uniform4fv(this.qbLoc,new Float32Array([n.q5||0,n.q6||0,n.q7||0,n.q8||0])),this.gl.uniform4fv(this.qcLoc,new Float32Array([n.q9||0,n.q10||0,n.q11||0,n.q12||0])),this.gl.uniform4fv(this.qdLoc,new Float32Array([n.q13||0,n.q14||0,n.q15||0,n.q16||0])),this.gl.uniform4fv(this.qeLoc,new Float32Array([n.q17||0,n.q18||0,n.q19||0,n.q20||0])),this.gl.uniform4fv(this.qfLoc,new Float32Array([n.q21||0,n.q22||0,n.q23||0,n.q24||0])),this.gl.uniform4fv(this.qgLoc,new Float32Array([n.q25||0,n.q26||0,n.q27||0,n.q28||0])),this.gl.uniform4fv(this.qhLoc,new Float32Array([n.q29||0,n.q30||0,n.q31||0,n.q32||0])),this.gl.uniform4fv(this.slowRoamCosLoc,[.5+.5*Math.cos(.005*o.time),.5+.5*Math.cos(.008*o.time),.5+.5*Math.cos(.013*o.time),.5+.5*Math.cos(.022*o.time)]),this.gl.uniform4fv(this.roamCosLoc,[.5+.5*Math.cos(.3*o.time),.5+.5*Math.cos(1.3*o.time),.5+.5*Math.cos(5*o.time),.5+.5*Math.cos(20*o.time)]),this.gl.uniform4fv(this.slowRoamSinLoc,[.5+.5*Math.sin(.005*o.time),.5+.5*Math.sin(.008*o.time),.5+.5*Math.sin(.013*o.time),.5+.5*Math.sin(.022*o.time)]),this.gl.uniform4fv(this.roamSinLoc,[.5+.5*Math.sin(.3*o.time),.5+.5*Math.sin(1.3*o.time),.5+.5*Math.sin(5*o.time),.5+.5*Math.sin(20*o.time)]),this.bindBlurVals(r,a),t?this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA):this.gl.disable(this.gl.BLEND),this.gl.drawElements(this.gl.TRIANGLES,this.indices.length,this.gl.UNSIGNED_SHORT,0),t||this.gl.enable(this.gl.BLEND)}}},"./src/rendering/shaders/output.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/rendering/shaders/shaderUtils.js");class A{constructor(t,e){this.gl=t,this.textureRatio=e.textureRatio,this.texsizeX=e.texsizeX,this.texsizeY=e.texsizeY,this.positions=new Float32Array([-1,-1,1,-1,-1,1,1,1]),this.vertexBuf=this.gl.createBuffer(),this.floatPrecision=i.default.getFragmentFloatPrecision(this.gl),this.useFXAA()?this.createFXAAShader():this.createShader()}useFXAA(){return this.textureRatio<=1}updateGlobals(t){this.textureRatio=t.textureRatio,this.texsizeX=t.texsizeX,this.texsizeY=t.texsizeY,this.gl.deleteProgram(this.shaderProgram),this.useFXAA()?this.createFXAAShader():this.createShader()}createFXAAShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"#version 300 es\n const vec2 halfmad = vec2(0.5);\n in vec2 aPos;\n out vec2 v_rgbM;\n out vec2 v_rgbNW;\n out vec2 v_rgbNE;\n out vec2 v_rgbSW;\n out vec2 v_rgbSE;\n uniform vec4 texsize;\n void main(void) {\n gl_Position = vec4(aPos, 0.0, 1.0);\n\n v_rgbM = aPos * halfmad + halfmad;\n v_rgbNW = v_rgbM + (vec2(-1.0, -1.0) * texsize.zx);\n v_rgbNE = v_rgbM + (vec2(1.0, -1.0) * texsize.zx);\n v_rgbSW = v_rgbM + (vec2(-1.0, 1.0) * texsize.zx);\n v_rgbSE = v_rgbM + (vec2(1.0, 1.0) * texsize.zx);\n }"),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`#version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n\n in vec2 v_rgbM;\n in vec2 v_rgbNW;\n in vec2 v_rgbNE;\n in vec2 v_rgbSW;\n in vec2 v_rgbSE;\n out vec4 fragColor;\n uniform vec4 texsize;\n uniform sampler2D uTexture;\n\n #ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n #endif\n #ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n #endif\n #ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n #endif\n\n void main(void) {\n vec4 color;\n vec3 rgbNW = textureLod(uTexture, v_rgbNW, 0.0).xyz;\n vec3 rgbNE = textureLod(uTexture, v_rgbNE, 0.0).xyz;\n vec3 rgbSW = textureLod(uTexture, v_rgbSW, 0.0).xyz;\n vec3 rgbSE = textureLod(uTexture, v_rgbSE, 0.0).xyz;\n vec3 rgbM = textureLod(uTexture, v_rgbM, 0.0).xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * texsize.zw;\n\n vec3 rgbA = 0.5 * (\n textureLod(uTexture, v_rgbM + dir * (1.0 / 3.0 - 0.5), 0.0).xyz +\n textureLod(uTexture, v_rgbM + dir * (2.0 / 3.0 - 0.5), 0.0).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n textureLod(uTexture, v_rgbM + dir * -0.5, 0.0).xyz +\n textureLod(uTexture, v_rgbM + dir * 0.5, 0.0).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, 1.0);\n else\n color = vec4(rgbB, 1.0);\n\n fragColor = color;\n }`),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.positionLocation=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.textureLoc=this.gl.getUniformLocation(this.shaderProgram,"uTexture"),this.texsizeLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize")}createShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"#version 300 es\n const vec2 halfmad = vec2(0.5);\n in vec2 aPos;\n out vec2 uv;\n void main(void) {\n gl_Position = vec4(aPos, 0.0, 1.0);\n uv = aPos * halfmad + halfmad;\n }"),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`#version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n\n in vec2 uv;\n out vec4 fragColor;\n uniform sampler2D uTexture;\n\n void main(void) {\n fragColor = vec4(texture(uTexture, uv).rgb, 1.0);\n }`),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.positionLocation=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.textureLoc=this.gl.getUniformLocation(this.shaderProgram,"uTexture")}renderQuadTexture(t){this.gl.useProgram(this.shaderProgram),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.vertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.positions,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.positionLocation,2,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.positionLocation),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,t),this.gl.uniform1i(this.textureLoc,0),this.useFXAA()&&this.gl.uniform4fv(this.texsizeLoc,new Float32Array([this.texsizeX,this.texsizeY,1/this.texsizeX,1/this.texsizeY])),this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4)}}},"./src/rendering/shaders/resample.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/rendering/shaders/shaderUtils.js");class A{constructor(t){this.gl=t,this.positions=new Float32Array([-1,-1,1,-1,-1,1,1,1]),this.vertexBuf=this.gl.createBuffer(),this.floatPrecision=i.default.getFragmentFloatPrecision(this.gl),this.createShader()}createShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"#version 300 es\n const vec2 halfmad = vec2(0.5);\n in vec2 aPos;\n out vec2 uv;\n void main(void) {\n gl_Position = vec4(aPos, 0.0, 1.0);\n uv = aPos * halfmad + halfmad;\n }"),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`#version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n\n in vec2 uv;\n out vec4 fragColor;\n uniform sampler2D uTexture;\n\n void main(void) {\n fragColor = vec4(texture(uTexture, uv).rgb, 1.0);\n }`),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.positionLocation=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.textureLoc=this.gl.getUniformLocation(this.shaderProgram,"uTexture")}renderQuadTexture(t){this.gl.useProgram(this.shaderProgram),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.vertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.positions,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.positionLocation,2,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.positionLocation),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,t),this.gl.generateMipmap(this.gl.TEXTURE_2D),this.gl.uniform1i(this.textureLoc,0),this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4)}}},"./src/rendering/shaders/shaderUtils.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return r}));const i=/uniform sampler2D sampler_(?:.+?);/g,A=/uniform sampler2D sampler_(.+?);/;class r{static getShaderParts(t){const e=t.indexOf("shader_body");if(t&&e>-1){const s=t.substring(0,e),i=t.substring(e),A=i.indexOf("{"),r=i.lastIndexOf("}");return[s,i.substring(A+1,r)]}return["",t]}static getFragmentFloatPrecision(t){return t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.HIGH_FLOAT).precision>0?"highp":t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}static getUserSamplers(t){const e=[],s=t.match(i);if(s&&s.length>0)for(let t=0;t<s.length;t++){const i=s[t].match(A);if(i&&i.length>0){const t=i[1];e.push({sampler:t})}}return e}}},"./src/rendering/shaders/warp.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/rendering/shaders/shaderUtils.js");class A{constructor(t,e,s,A={}){this.gl=t,this.noise=e,this.image=s,this.texsizeX=A.texsizeX,this.texsizeY=A.texsizeY,this.mesh_width=A.mesh_width,this.mesh_height=A.mesh_height,this.aspectx=A.aspectx,this.aspecty=A.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.buildPositions(),this.indexBuf=t.createBuffer(),this.positionVertexBuf=this.gl.createBuffer(),this.warpUvVertexBuf=this.gl.createBuffer(),this.warpColorVertexBuf=this.gl.createBuffer(),this.floatPrecision=i.default.getFragmentFloatPrecision(this.gl),this.createShader(),this.mainSampler=this.gl.createSampler(),this.mainSamplerFW=this.gl.createSampler(),this.mainSamplerFC=this.gl.createSampler(),this.mainSamplerPW=this.gl.createSampler(),this.mainSamplerPC=this.gl.createSampler(),t.samplerParameteri(this.mainSampler,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.samplerParameteri(this.mainSampler,t.TEXTURE_MAG_FILTER,t.LINEAR),t.samplerParameteri(this.mainSampler,t.TEXTURE_WRAP_S,t.REPEAT),t.samplerParameteri(this.mainSampler,t.TEXTURE_WRAP_T,t.REPEAT),t.samplerParameteri(this.mainSamplerFW,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.samplerParameteri(this.mainSamplerFW,t.TEXTURE_MAG_FILTER,t.LINEAR),t.samplerParameteri(this.mainSamplerFW,t.TEXTURE_WRAP_S,t.REPEAT),t.samplerParameteri(this.mainSamplerFW,t.TEXTURE_WRAP_T,t.REPEAT),t.samplerParameteri(this.mainSamplerFC,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.samplerParameteri(this.mainSamplerFC,t.TEXTURE_MAG_FILTER,t.LINEAR),t.samplerParameteri(this.mainSamplerFC,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.samplerParameteri(this.mainSamplerFC,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.samplerParameteri(this.mainSamplerPW,t.TEXTURE_MIN_FILTER,t.NEAREST_MIPMAP_NEAREST),t.samplerParameteri(this.mainSamplerPW,t.TEXTURE_MAG_FILTER,t.NEAREST),t.samplerParameteri(this.mainSamplerPW,t.TEXTURE_WRAP_S,t.REPEAT),t.samplerParameteri(this.mainSamplerPW,t.TEXTURE_WRAP_T,t.REPEAT),t.samplerParameteri(this.mainSamplerPC,t.TEXTURE_MIN_FILTER,t.NEAREST_MIPMAP_NEAREST),t.samplerParameteri(this.mainSamplerPC,t.TEXTURE_MAG_FILTER,t.NEAREST),t.samplerParameteri(this.mainSamplerPC,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.samplerParameteri(this.mainSamplerPC,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)}buildPositions(){const t=this.mesh_width,e=this.mesh_height,s=t+1,i=e+1,A=2/t,r=2/e,a=[];for(let t=0;t<i;t++){const e=t*r-1;for(let t=0;t<s;t++){const s=t*A-1;a.push(s,-e,0)}}const o=[];for(let i=0;i<e;i++)for(let e=0;e<t;e++){const t=e+s*i,A=e+s*(i+1),r=e+1+s*(i+1),a=e+1+s*i;o.push(t,A,a),o.push(A,r,a)}this.vertices=new Float32Array(a),this.indices=new Uint16Array(o)}updateGlobals(t){this.texsizeX=t.texsizeX,this.texsizeY=t.texsizeY,this.mesh_width=t.mesh_width,this.mesh_height=t.mesh_height,this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.buildPositions()}createShader(t=""){let e,s;if(0===t.length)e="ret = texture(sampler_main, uv).rgb * decay;",s="";else{const A=i.default.getShaderParts(t);s=A[0],e=A[1]}e=e.replace(/texture2D/g,"texture"),e=e.replace(/texture3D/g,"texture"),this.userTextures=i.default.getUserSamplers(s),this.shaderProgram=this.gl.createProgram();const A=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(A,`\n #version 300 es\n precision ${this.floatPrecision} float;\n const vec2 halfmad = vec2(0.5);\n in vec2 aPos;\n in vec2 aWarpUv;\n in vec4 aWarpColor;\n out vec2 uv;\n out vec2 uv_orig;\n out vec4 vColor;\n void main(void) {\n gl_Position = vec4(aPos, 0.0, 1.0);\n uv_orig = aPos * halfmad + halfmad;\n uv = aWarpUv;\n vColor = aWarpColor;\n }\n `.trim()),this.gl.compileShader(A);const r=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(r,`\n #version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n precision mediump sampler3D;\n\n in vec2 uv;\n in vec2 uv_orig;\n in vec4 vColor;\n out vec4 fragColor;\n uniform sampler2D sampler_main;\n uniform sampler2D sampler_fw_main;\n uniform sampler2D sampler_fc_main;\n uniform sampler2D sampler_pw_main;\n uniform sampler2D sampler_pc_main;\n uniform sampler2D sampler_blur1;\n uniform sampler2D sampler_blur2;\n uniform sampler2D sampler_blur3;\n uniform sampler2D sampler_noise_lq;\n uniform sampler2D sampler_noise_lq_lite;\n uniform sampler2D sampler_noise_mq;\n uniform sampler2D sampler_noise_hq;\n uniform sampler2D sampler_pw_noise_lq;\n uniform sampler3D sampler_noisevol_lq;\n uniform sampler3D sampler_noisevol_hq;\n uniform float time;\n uniform float decay;\n uniform vec2 resolution;\n uniform vec4 aspect;\n uniform vec4 texsize;\n uniform vec4 texsize_noise_lq;\n uniform vec4 texsize_noise_mq;\n uniform vec4 texsize_noise_hq;\n uniform vec4 texsize_noise_lq_lite;\n uniform vec4 texsize_noisevol_lq;\n uniform vec4 texsize_noisevol_hq;\n\n uniform float bass;\n uniform float mid;\n uniform float treb;\n uniform float vol;\n uniform float bass_att;\n uniform float mid_att;\n uniform float treb_att;\n uniform float vol_att;\n\n uniform float frame;\n uniform float fps;\n\n uniform vec4 _qa;\n uniform vec4 _qb;\n uniform vec4 _qc;\n uniform vec4 _qd;\n uniform vec4 _qe;\n uniform vec4 _qf;\n uniform vec4 _qg;\n uniform vec4 _qh;\n\n #define q1 _qa.x\n #define q2 _qa.y\n #define q3 _qa.z\n #define q4 _qa.w\n #define q5 _qb.x\n #define q6 _qb.y\n #define q7 _qb.z\n #define q8 _qb.w\n #define q9 _qc.x\n #define q10 _qc.y\n #define q11 _qc.z\n #define q12 _qc.w\n #define q13 _qd.x\n #define q14 _qd.y\n #define q15 _qd.z\n #define q16 _qd.w\n #define q17 _qe.x\n #define q18 _qe.y\n #define q19 _qe.z\n #define q20 _qe.w\n #define q21 _qf.x\n #define q22 _qf.y\n #define q23 _qf.z\n #define q24 _qf.w\n #define q25 _qg.x\n #define q26 _qg.y\n #define q27 _qg.z\n #define q28 _qg.w\n #define q29 _qh.x\n #define q30 _qh.y\n #define q31 _qh.z\n #define q32 _qh.w\n\n uniform vec4 slow_roam_cos;\n uniform vec4 roam_cos;\n uniform vec4 slow_roam_sin;\n uniform vec4 roam_sin;\n\n uniform float blur1_min;\n uniform float blur1_max;\n uniform float blur2_min;\n uniform float blur2_max;\n uniform float blur3_min;\n uniform float blur3_max;\n\n uniform float scale1;\n uniform float scale2;\n uniform float scale3;\n uniform float bias1;\n uniform float bias2;\n uniform float bias3;\n\n uniform vec4 rand_frame;\n uniform vec4 rand_preset;\n\n float PI = ${Math.PI};\n\n ${s}\n\n void main(void) {\n vec3 ret;\n float rad = length(uv_orig - 0.5);\n float ang = atan(uv_orig.x - 0.5, uv_orig.y - 0.5);\n\n ${e}\n\n fragColor = vec4(ret, 1.0) * vColor;\n }\n `.trim()),this.gl.compileShader(r),this.gl.attachShader(this.shaderProgram,A),this.gl.attachShader(this.shaderProgram,r),this.gl.linkProgram(this.shaderProgram),this.positionLocation=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.warpUvLocation=this.gl.getAttribLocation(this.shaderProgram,"aWarpUv"),this.warpColorLocation=this.gl.getAttribLocation(this.shaderProgram,"aWarpColor"),this.textureLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_main"),this.textureFWLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_fw_main"),this.textureFCLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_fc_main"),this.texturePWLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_pw_main"),this.texturePCLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_pc_main"),this.blurTexture1Loc=this.gl.getUniformLocation(this.shaderProgram,"sampler_blur1"),this.blurTexture2Loc=this.gl.getUniformLocation(this.shaderProgram,"sampler_blur2"),this.blurTexture3Loc=this.gl.getUniformLocation(this.shaderProgram,"sampler_blur3"),this.noiseLQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noise_lq"),this.noiseMQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noise_mq"),this.noiseHQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noise_hq"),this.noiseLQLiteLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noise_lq_lite"),this.noisePointLQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_pw_noise_lq"),this.noiseVolLQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noisevol_lq"),this.noiseVolHQLoc=this.gl.getUniformLocation(this.shaderProgram,"sampler_noisevol_hq"),this.decayLoc=this.gl.getUniformLocation(this.shaderProgram,"decay"),this.texsizeLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize"),this.texsizeNoiseLQLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noise_lq"),this.texsizeNoiseMQLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noise_mq"),this.texsizeNoiseHQLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noise_hq"),this.texsizeNoiseLQLiteLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noise_lq_lite"),this.texsizeNoiseVolLQLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noisevol_lq"),this.texsizeNoiseVolHQLoc=this.gl.getUniformLocation(this.shaderProgram,"texsize_noisevol_hq"),this.resolutionLoc=this.gl.getUniformLocation(this.shaderProgram,"resolution"),this.aspectLoc=this.gl.getUniformLocation(this.shaderProgram,"aspect"),this.bassLoc=this.gl.getUniformLocation(this.shaderProgram,"bass"),this.midLoc=this.gl.getUniformLocation(this.shaderProgram,"mid"),this.trebLoc=this.gl.getUniformLocation(this.shaderProgram,"treb"),this.volLoc=this.gl.getUniformLocation(this.shaderProgram,"vol"),this.bassAttLoc=this.gl.getUniformLocation(this.shaderProgram,"bass_att"),this.midAttLoc=this.gl.getUniformLocation(this.shaderProgram,"mid_att"),this.trebAttLoc=this.gl.getUniformLocation(this.shaderProgram,"treb_att"),this.volAttLoc=this.gl.getUniformLocation(this.shaderProgram,"vol_att"),this.timeLoc=this.gl.getUniformLocation(this.shaderProgram,"time"),this.frameLoc=this.gl.getUniformLocation(this.shaderProgram,"frame"),this.fpsLoc=this.gl.getUniformLocation(this.shaderProgram,"fps"),this.blur1MinLoc=this.gl.getUniformLocation(this.shaderProgram,"blur1_min"),this.blur1MaxLoc=this.gl.getUniformLocation(this.shaderProgram,"blur1_max"),this.blur2MinLoc=this.gl.getUniformLocation(this.shaderProgram,"blur2_min"),this.blur2MaxLoc=this.gl.getUniformLocation(this.shaderProgram,"blur2_max"),this.blur3MinLoc=this.gl.getUniformLocation(this.shaderProgram,"blur3_min"),this.blur3MaxLoc=this.gl.getUniformLocation(this.shaderProgram,"blur3_max"),this.scale1Loc=this.gl.getUniformLocation(this.shaderProgram,"scale1"),this.scale2Loc=this.gl.getUniformLocation(this.shaderProgram,"scale2"),this.scale3Loc=this.gl.getUniformLocation(this.shaderProgram,"scale3"),this.bias1Loc=this.gl.getUniformLocation(this.shaderProgram,"bias1"),this.bias2Loc=this.gl.getUniformLocation(this.shaderProgram,"bias2"),this.bias3Loc=this.gl.getUniformLocation(this.shaderProgram,"bias3"),this.randPresetLoc=this.gl.getUniformLocation(this.shaderProgram,"rand_preset"),this.randFrameLoc=this.gl.getUniformLocation(this.shaderProgram,"rand_frame"),this.qaLoc=this.gl.getUniformLocation(this.shaderProgram,"_qa"),this.qbLoc=this.gl.getUniformLocation(this.shaderProgram,"_qb"),this.qcLoc=this.gl.getUniformLocation(this.shaderProgram,"_qc"),this.qdLoc=this.gl.getUniformLocation(this.shaderProgram,"_qd"),this.qeLoc=this.gl.getUniformLocation(this.shaderProgram,"_qe"),this.qfLoc=this.gl.getUniformLocation(this.shaderProgram,"_qf"),this.qgLoc=this.gl.getUniformLocation(this.shaderProgram,"_qg"),this.qhLoc=this.gl.getUniformLocation(this.shaderProgram,"_qh"),this.slowRoamCosLoc=this.gl.getUniformLocation(this.shaderProgram,"slow_roam_cos"),this.roamCosLoc=this.gl.getUniformLocation(this.shaderProgram,"roam_cos"),this.slowRoamSinLoc=this.gl.getUniformLocation(this.shaderProgram,"slow_roam_sin"),this.roamSinLoc=this.gl.getUniformLocation(this.shaderProgram,"roam_sin");for(let t=0;t<this.userTextures.length;t++){const e=this.userTextures[t];e.textureLoc=this.gl.getUniformLocation(this.shaderProgram,`sampler_${e.sampler}`)}}updateShader(t){this.createShader(t)}bindBlurVals(t,e){const s=t[0],i=t[1],A=t[2],r=e[0],a=e[1],o=e[2],n=r-s,h=s,l=a-i,c=i,g=o-A,u=A;this.gl.uniform1f(this.blur1MinLoc,s),this.gl.uniform1f(this.blur1MaxLoc,r),this.gl.uniform1f(this.blur2MinLoc,i),this.gl.uniform1f(this.blur2MaxLoc,a),this.gl.uniform1f(this.blur3MinLoc,A),this.gl.uniform1f(this.blur3MaxLoc,o),this.gl.uniform1f(this.scale1Loc,n),this.gl.uniform1f(this.scale2Loc,l),this.gl.uniform1f(this.scale3Loc,g),this.gl.uniform1f(this.bias1Loc,h),this.gl.uniform1f(this.bias2Loc,c),this.gl.uniform1f(this.bias3Loc,u)}renderQuadTexture(t,e,s,i,A,r,a,o,n,h,l){this.gl.useProgram(this.shaderProgram),this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER,this.indexBuf),this.gl.bufferData(this.gl.ELEMENT_ARRAY_BUFFER,this.indices,this.gl.STATIC_DRAW),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.positionVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.vertices,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.positionLocation,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.positionLocation),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.warpUvVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,h,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.warpUvLocation,2,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.warpUvLocation),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.warpColorVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,l,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.warpColorLocation,4,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.warpColorLocation);const c=0!==o.wrap?this.gl.REPEAT:this.gl.CLAMP_TO_EDGE;this.gl.samplerParameteri(this.mainSampler,this.gl.TEXTURE_WRAP_S,c),this.gl.samplerParameteri(this.mainSampler,this.gl.TEXTURE_WRAP_T,c),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.bindSampler(0,this.mainSampler),this.gl.uniform1i(this.textureLoc,0),this.gl.activeTexture(this.gl.TEXTURE1),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.bindSampler(1,this.mainSamplerFW),this.gl.uniform1i(this.textureFWLoc,1),this.gl.activeTexture(this.gl.TEXTURE2),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.bindSampler(2,this.mainSamplerFC),this.gl.uniform1i(this.textureFCLoc,2),this.gl.activeTexture(this.gl.TEXTURE3),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.bindSampler(3,this.mainSamplerPW),this.gl.uniform1i(this.texturePWLoc,3),this.gl.activeTexture(this.gl.TEXTURE4),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.bindSampler(4,this.mainSamplerPC),this.gl.uniform1i(this.texturePCLoc,4),this.gl.activeTexture(this.gl.TEXTURE5),this.gl.bindTexture(this.gl.TEXTURE_2D,s),this.gl.uniform1i(this.blurTexture1Loc,5),this.gl.activeTexture(this.gl.TEXTURE6),this.gl.bindTexture(this.gl.TEXTURE_2D,i),this.gl.uniform1i(this.blurTexture2Loc,6),this.gl.activeTexture(this.gl.TEXTURE7),this.gl.bindTexture(this.gl.TEXTURE_2D,A),this.gl.uniform1i(this.blurTexture3Loc,7),this.gl.activeTexture(this.gl.TEXTURE8),this.gl.bindTexture(this.gl.TEXTURE_2D,this.noise.noiseTexLQ),this.gl.uniform1i(this.noiseLQLoc,8),this.gl.activeTexture(this.gl.TEXTURE9),this.gl.bindTexture(this.gl.TEXTURE_2D,this.noise.noiseTexMQ),this.gl.uniform1i(this.noiseMQLoc,9),this.gl.activeTexture(this.gl.TEXTURE10),this.gl.bindTexture(this.gl.TEXTURE_2D,this.noise.noiseTexHQ),this.gl.uniform1i(this.noiseHQLoc,10),this.gl.activeTexture(this.gl.TEXTURE11),this.gl.bindTexture(this.gl.TEXTURE_2D,this.noise.noiseTexLQLite),this.gl.uniform1i(this.noiseLQLiteLoc,11),this.gl.activeTexture(this.gl.TEXTURE12),this.gl.bindTexture(this.gl.TEXTURE_2D,this.noise.noiseTexLQ),this.gl.bindSampler(12,this.noise.noiseTexPointLQ),this.gl.uniform1i(this.noisePointLQLoc,12),this.gl.activeTexture(this.gl.TEXTURE13),this.gl.bindTexture(this.gl.TEXTURE_3D,this.noise.noiseTexVolLQ),this.gl.uniform1i(this.noiseVolLQLoc,13),this.gl.activeTexture(this.gl.TEXTURE14),this.gl.bindTexture(this.gl.TEXTURE_3D,this.noise.noiseTexVolHQ),this.gl.uniform1i(this.noiseVolHQLoc,14);for(let t=0;t<this.userTextures.length;t++){const e=this.userTextures[t];this.gl.activeTexture(this.gl.TEXTURE15+t),this.gl.bindTexture(this.gl.TEXTURE_2D,this.image.getTexture(e.sampler)),this.gl.uniform1i(e.textureLoc,15+t)}this.gl.uniform1f(this.decayLoc,o.decay),this.gl.uniform2fv(this.resolutionLoc,[this.texsizeX,this.texsizeY]),this.gl.uniform4fv(this.aspectLoc,[this.aspectx,this.aspecty,this.invAspectx,this.invAspecty]),this.gl.uniform4fv(this.texsizeLoc,[this.texsizeX,this.texsizeY,1/this.texsizeX,1/this.texsizeY]),this.gl.uniform4fv(this.texsizeNoiseLQLoc,[256,256,1/256,1/256]),this.gl.uniform4fv(this.texsizeNoiseMQLoc,[256,256,1/256,1/256]),this.gl.uniform4fv(this.texsizeNoiseHQLoc,[256,256,1/256,1/256]),this.gl.uniform4fv(this.texsizeNoiseLQLiteLoc,[32,32,1/32,1/32]),this.gl.uniform4fv(this.texsizeNoiseVolLQLoc,[32,32,1/32,1/32]),this.gl.uniform4fv(this.texsizeNoiseVolHQLoc,[32,32,1/32,1/32]),this.gl.uniform1f(this.bassLoc,o.bass),this.gl.uniform1f(this.midLoc,o.mid),this.gl.uniform1f(this.trebLoc,o.treb),this.gl.uniform1f(this.volLoc,(o.bass+o.mid+o.treb)/3),this.gl.uniform1f(this.bassAttLoc,o.bass_att),this.gl.uniform1f(this.midAttLoc,o.mid_att),this.gl.uniform1f(this.trebAttLoc,o.treb_att),this.gl.uniform1f(this.volAttLoc,(o.bass_att+o.mid_att+o.treb_att)/3),this.gl.uniform1f(this.timeLoc,o.time),this.gl.uniform1f(this.frameLoc,o.frame),this.gl.uniform1f(this.fpsLoc,o.fps),this.gl.uniform4fv(this.randPresetLoc,o.rand_preset),this.gl.uniform4fv(this.randFrameLoc,new Float32Array([Math.random(),Math.random(),Math.random(),Math.random()])),this.gl.uniform4fv(this.qaLoc,new Float32Array([n.q1||0,n.q2||0,n.q3||0,n.q4||0])),this.gl.uniform4fv(this.qbLoc,new Float32Array([n.q5||0,n.q6||0,n.q7||0,n.q8||0])),this.gl.uniform4fv(this.qcLoc,new Float32Array([n.q9||0,n.q10||0,n.q11||0,n.q12||0])),this.gl.uniform4fv(this.qdLoc,new Float32Array([n.q13||0,n.q14||0,n.q15||0,n.q16||0])),this.gl.uniform4fv(this.qeLoc,new Float32Array([n.q17||0,n.q18||0,n.q19||0,n.q20||0])),this.gl.uniform4fv(this.qfLoc,new Float32Array([n.q21||0,n.q22||0,n.q23||0,n.q24||0])),this.gl.uniform4fv(this.qgLoc,new Float32Array([n.q25||0,n.q26||0,n.q27||0,n.q28||0])),this.gl.uniform4fv(this.qhLoc,new Float32Array([n.q29||0,n.q30||0,n.q31||0,n.q32||0])),this.gl.uniform4fv(this.slowRoamCosLoc,[.5+.5*Math.cos(.005*o.time),.5+.5*Math.cos(.008*o.time),.5+.5*Math.cos(.013*o.time),.5+.5*Math.cos(.022*o.time)]),this.gl.uniform4fv(this.roamCosLoc,[.5+.5*Math.cos(.3*o.time),.5+.5*Math.cos(1.3*o.time),.5+.5*Math.cos(5*o.time),.5+.5*Math.cos(20*o.time)]),this.gl.uniform4fv(this.slowRoamSinLoc,[.5+.5*Math.sin(.005*o.time),.5+.5*Math.sin(.008*o.time),.5+.5*Math.sin(.013*o.time),.5+.5*Math.sin(.022*o.time)]),this.gl.uniform4fv(this.roamSinLoc,[.5+.5*Math.sin(.3*o.time),.5+.5*Math.sin(1.3*o.time),.5+.5*Math.sin(5*o.time),.5+.5*Math.sin(20*o.time)]),this.bindBlurVals(r,a),t?this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA):this.gl.disable(this.gl.BLEND),this.gl.drawElements(this.gl.TRIANGLES,this.indices.length,this.gl.UNSIGNED_SHORT,0),t||this.gl.enable(this.gl.BLEND)}}},"./src/rendering/shapes/customShape.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return r}));var i=s("./src/utils.js"),A=s("./src/rendering/shaders/shaderUtils.js");class r{constructor(t,e,s){this.index=t,this.gl=e,this.positions=new Float32Array(309),this.colors=new Float32Array(412),this.uvs=new Float32Array(206),this.borderPositions=new Float32Array(306),this.texsizeX=s.texsizeX,this.texsizeY=s.texsizeY,this.mesh_width=s.mesh_width,this.mesh_height=s.mesh_height,this.aspectx=s.aspectx,this.aspecty=s.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.positionVertexBuf=this.gl.createBuffer(),this.colorVertexBuf=this.gl.createBuffer(),this.uvVertexBuf=this.gl.createBuffer(),this.borderPositionVertexBuf=this.gl.createBuffer(),this.floatPrecision=A.default.getFragmentFloatPrecision(this.gl),this.createShader(),this.createBorderShader(),this.mainSampler=this.gl.createSampler(),e.samplerParameteri(this.mainSampler,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.samplerParameteri(this.mainSampler,e.TEXTURE_MAG_FILTER,e.LINEAR),e.samplerParameteri(this.mainSampler,e.TEXTURE_WRAP_S,e.REPEAT),e.samplerParameteri(this.mainSampler,e.TEXTURE_WRAP_T,e.REPEAT)}updateGlobals(t){this.texsizeX=t.texsizeX,this.texsizeY=t.texsizeY,this.mesh_width=t.mesh_width,this.mesh_height=t.mesh_height,this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty}createShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"\n #version 300 es\n in vec3 aPos;\n in vec4 aColor;\n in vec2 aUv;\n out vec4 vColor;\n out vec2 vUv;\n void main(void) {\n vColor = aColor;\n vUv = aUv;\n gl_Position = vec4(aPos, 1.0);\n }\n ".trim()),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`\n #version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n uniform sampler2D uTexture;\n uniform float uTextured;\n in vec4 vColor;\n in vec2 vUv;\n out vec4 fragColor;\n void main(void) {\n if (uTextured != 0.0) {\n fragColor = texture(uTexture, vUv) * vColor;\n } else {\n fragColor = vColor;\n }\n }\n `.trim()),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.aPosLocation=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.aColorLocation=this.gl.getAttribLocation(this.shaderProgram,"aColor"),this.aUvLocation=this.gl.getAttribLocation(this.shaderProgram,"aUv"),this.texturedLoc=this.gl.getUniformLocation(this.shaderProgram,"uTextured"),this.textureLoc=this.gl.getUniformLocation(this.shaderProgram,"uTexture")}createBorderShader(){this.borderShaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"\n #version 300 es\n in vec3 aBorderPos;\n uniform vec2 thickOffset;\n void main(void) {\n gl_Position = vec4(aBorderPos +\n vec3(thickOffset, 0.0), 1.0);\n }\n ".trim()),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`\n #version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n out vec4 fragColor;\n uniform vec4 uBorderColor;\n void main(void) {\n fragColor = uBorderColor;\n }\n `.trim()),this.gl.compileShader(e),this.gl.attachShader(this.borderShaderProgram,t),this.gl.attachShader(this.borderShaderProgram,e),this.gl.linkProgram(this.borderShaderProgram),this.aBorderPosLoc=this.gl.getAttribLocation(this.borderShaderProgram,"aBorderPos"),this.uBorderColorLoc=this.gl.getUniformLocation(this.borderShaderProgram,"uBorderColor"),this.thickOffsetLoc=this.gl.getUniformLocation(this.shaderProgram,"thickOffset")}drawCustomShape(t,e,s,A,r){if(0!==A.baseVals.enabled)if(s.preset.useWASM){this.setupShapeBuffers(s.preset.globalPools.perFrame.wrap.value);const A=s.preset.shapes[this.index].baseVals,a=s.preset.globalPools[`shapePerFrame${this.index}`];i.default.setWasm(a,e,s.globalKeys),s.preset.shapes[this.index].frame_eqs||s.preset.restore_qs(),i.default.setWasm(a,s.mdVSTShapeInits[this.index],s.ts),s.preset.save_ts(),a.x.value=A.x,a.y.value=A.y,a.rad.value=A.rad,a.ang.value=A.ang,a.r.value=A.r,a.g.value=A.g,a.b.value=A.b,a.a.value=A.a,a.r2.value=A.r2,a.g2.value=A.g2,a.b2.value=A.b2,a.a2.value=A.a2,a.border_r.value=A.border_r,a.border_g.value=A.border_g,a.border_b.value=A.border_b,a.border_a.value=A.border_a,a.thickoutline.value=A.thickoutline,a.textured.value=A.textured,a.tex_zoom.value=A.tex_zoom,a.tex_ang.value=A.tex_ang,a.additive.value=A.additive,s.preset.shapes[this.index].frame_eqs_save();const o=Math.clamp(A.num_inst,1,1024);for(let e=0;e<o;e++){a.instance.value=e,s.preset.shapes[this.index].frame_eqs&&(s.preset.shapes[this.index].frame_eqs_restore(),s.preset.restore_qs(),s.preset.restore_ts(),s.preset.shapes[this.index].frame_eqs());let i=a.sides.value;i=Math.clamp(i,3,100),i=Math.floor(i);const A=a.rad.value,o=a.ang.value,n=2*a.x.value-1,h=-2*a.y.value+1,l=a.r.value,c=a.g.value,g=a.b.value,u=a.a.value,p=a.r2.value,m=a.g2.value,d=a.b2.value,f=a.a2.value,S=a.border_r.value,b=a.border_g.value,E=a.border_b.value,U=a.border_a.value;this.borderColor=[S,b,E,U*t];const x=a.thickoutline.value,T=a.textured.value,v=a.tex_zoom.value,q=a.tex_ang.value,R=a.additive.value,I=this.borderColor[3]>0,P=Math.abs(T)>=1,V=Math.abs(x)>=1,y=Math.abs(R)>=1;this.positions[0]=n,this.positions[1]=h,this.positions[2]=0,this.colors[0]=l,this.colors[1]=c,this.colors[2]=g,this.colors[3]=u*t,P&&(this.uvs[0]=.5,this.uvs[1]=.5);const B=.25*Math.PI;for(let e=1;e<=i+1;e++){const s=(e-1)/i*2*Math.PI,r=s+o+B;if(this.positions[3*e+0]=n+A*Math.cos(r)*this.aspecty,this.positions[3*e+1]=h+A*Math.sin(r),this.positions[3*e+2]=0,this.colors[4*e+0]=p,this.colors[4*e+1]=m,this.colors[4*e+2]=d,this.colors[4*e+3]=f*t,P){const t=s+q+B;this.uvs[2*e+0]=.5+.5*Math.cos(t)/v*this.aspecty,this.uvs[2*e+1]=.5+.5*Math.sin(t)/v}I&&(this.borderPositions[3*(e-1)+0]=this.positions[3*e+0],this.borderPositions[3*(e-1)+1]=this.positions[3*e+1],this.borderPositions[3*(e-1)+2]=this.positions[3*e+2])}this.drawCustomShapeInstance(r,i,P,I,V,y)}}else{this.setupShapeBuffers(s.mdVSFrame.wrap);let A=Object.assign({},s.mdVSShapes[this.index],s.mdVSFrameMapShapes[this.index],e);""===s.preset.shapes[this.index].frame_eqs_str&&(A=Object.assign(A,s.mdVSQAfterFrame,s.mdVSTShapeInits[this.index]));const a=s.preset.shapes[this.index].baseVals,o=Math.clamp(a.num_inst,1,1024);for(let e=0;e<o;e++){let i;A.instance=e,A.x=a.x,A.y=a.y,A.rad=a.rad,A.ang=a.ang,A.r=a.r,A.g=a.g,A.b=a.b,A.a=a.a,A.r2=a.r2,A.g2=a.g2,A.b2=a.b2,A.a2=a.a2,A.border_r=a.border_r,A.border_g=a.border_g,A.border_b=a.border_b,A.border_a=a.border_a,A.thickoutline=a.thickoutline,A.textured=a.textured,A.tex_zoom=a.tex_zoom,A.tex_ang=a.tex_ang,A.additive=a.additive,""!==s.preset.shapes[this.index].frame_eqs_str?(A=Object.assign(A,s.mdVSQAfterFrame,s.mdVSTShapeInits[this.index]),i=s.runShapeFrameEquations(this.index,A)):i=A;let o=i.sides;o=Math.clamp(o,3,100),o=Math.floor(o);const n=i.rad,h=i.ang,l=2*i.x-1,c=-2*i.y+1,g=i.r,u=i.g,p=i.b,m=i.a,d=i.r2,f=i.g2,S=i.b2,b=i.a2,E=i.border_r,U=i.border_g,x=i.border_b,T=i.border_a;this.borderColor=[E,U,x,T*t];const v=i.thickoutline,q=i.textured,R=i.tex_zoom,I=i.tex_ang,P=i.additive,V=this.borderColor[3]>0,y=Math.abs(q)>=1,B=Math.abs(v)>=1,w=Math.abs(P)>=1;this.positions[0]=l,this.positions[1]=c,this.positions[2]=0,this.colors[0]=g,this.colors[1]=u,this.colors[2]=p,this.colors[3]=m*t,y&&(this.uvs[0]=.5,this.uvs[1]=.5);const Q=.25*Math.PI;for(let e=1;e<=o+1;e++){const s=(e-1)/o*2*Math.PI,i=s+h+Q;if(this.positions[3*e+0]=l+n*Math.cos(i)*this.aspecty,this.positions[3*e+1]=c+n*Math.sin(i),this.positions[3*e+2]=0,this.colors[4*e+0]=d,this.colors[4*e+1]=f,this.colors[4*e+2]=S,this.colors[4*e+3]=b*t,y){const t=s+I+Q;this.uvs[2*e+0]=.5+.5*Math.cos(t)/R*this.aspecty,this.uvs[2*e+1]=.5+.5*Math.sin(t)/R}V&&(this.borderPositions[3*(e-1)+0]=this.positions[3*e+0],this.borderPositions[3*(e-1)+1]=this.positions[3*e+1],this.borderPositions[3*(e-1)+2]=this.positions[3*e+2])}this.mdVSShapeFrame=i,this.drawCustomShapeInstance(r,o,y,V,B,w)}const n=s.mdVSUserKeysShapes[this.index],h=i.default.pick(this.mdVSShapeFrame,n);s.mdVSFrameMapShapes[this.index]=h}}setupShapeBuffers(t){this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.positionVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.positions,this.gl.DYNAMIC_DRAW),this.gl.vertexAttribPointer(this.aPosLocation,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aPosLocation),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.colorVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.colors,this.gl.DYNAMIC_DRAW),this.gl.vertexAttribPointer(this.aColorLocation,4,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aColorLocation),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.uvVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.uvs,this.gl.DYNAMIC_DRAW),this.gl.vertexAttribPointer(this.aUvLocation,2,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aUvLocation),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.borderPositionVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.borderPositions,this.gl.DYNAMIC_DRAW),this.gl.vertexAttribPointer(this.aBorderPosLoc,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aBorderPosLoc);const e=0!==t?this.gl.REPEAT:this.gl.CLAMP_TO_EDGE;this.gl.samplerParameteri(this.mainSampler,this.gl.TEXTURE_WRAP_S,e),this.gl.samplerParameteri(this.mainSampler,this.gl.TEXTURE_WRAP_T,e)}drawCustomShapeInstance(t,e,s,i,A,r){if(this.gl.useProgram(this.shaderProgram),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.positionVertexBuf),this.gl.bufferSubData(this.gl.ARRAY_BUFFER,0,this.positions,0,3*(e+2)),this.gl.vertexAttribPointer(this.aPosLocation,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aPosLocation),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.colorVertexBuf),this.gl.bufferSubData(this.gl.ARRAY_BUFFER,0,this.colors,0,4*(e+2)),this.gl.vertexAttribPointer(this.aColorLocation,4,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aColorLocation),s&&(this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.uvVertexBuf),this.gl.bufferSubData(this.gl.ARRAY_BUFFER,0,this.uvs,0,2*(e+2)),this.gl.vertexAttribPointer(this.aUvLocation,2,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aUvLocation)),this.gl.uniform1f(this.texturedLoc,s?1:0),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,t),this.gl.bindSampler(0,this.mainSampler),this.gl.uniform1i(this.textureLoc,0),r?this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE):this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawArrays(this.gl.TRIANGLE_FAN,0,e+2),i){this.gl.useProgram(this.borderShaderProgram),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.borderPositionVertexBuf),this.gl.bufferSubData(this.gl.ARRAY_BUFFER,0,this.borderPositions,0,3*(e+1)),this.gl.vertexAttribPointer(this.aBorderPosLoc,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aBorderPosLoc),this.gl.uniform4fv(this.uBorderColorLoc,this.borderColor);const t=A?4:1;for(let s=0;s<t;s++){const t=2;0===s?this.gl.uniform2fv(this.thickOffsetLoc,[0,0]):1===s?this.gl.uniform2fv(this.thickOffsetLoc,[t/this.texsizeX,0]):2===s?this.gl.uniform2fv(this.thickOffsetLoc,[0,t/this.texsizeY]):3===s&&this.gl.uniform2fv(this.thickOffsetLoc,[t/this.texsizeX,t/this.texsizeY]),this.gl.drawArrays(this.gl.LINE_STRIP,0,e+1)}}}}},"./src/rendering/sprites/border.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/rendering/shaders/shaderUtils.js");class A{constructor(t,e={}){this.gl=t,this.positions=new Float32Array(72),this.aspectx=e.aspectx,this.aspecty=e.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.floatPrecision=i.default.getFragmentFloatPrecision(this.gl),this.createShader(),this.vertexBuf=this.gl.createBuffer()}updateGlobals(t){this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty}createShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"\n #version 300 es\n in vec3 aPos;\n void main(void) {\n gl_Position = vec4(aPos, 1.0);\n }\n ".trim()),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`\n #version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n out vec4 fragColor;\n uniform vec4 u_color;\n void main(void) {\n fragColor = u_color;\n }\n `.trim()),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.aPosLoc=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.colorLoc=this.gl.getUniformLocation(this.shaderProgram,"u_color")}addTriangle(t,e,s,i){this.positions[t+0]=e[0],this.positions[t+1]=e[1],this.positions[t+2]=e[2],this.positions[t+3]=s[0],this.positions[t+4]=s[1],this.positions[t+5]=s[2],this.positions[t+6]=i[0],this.positions[t+7]=i[1],this.positions[t+8]=i[2]}generateBorder(t,e,s){if(e>0&&t[3]>0){const t=2,i=2,A=t/2,r=i/2,a=s/2,o=e/2+a,n=a*t,h=a*i,l=o*t,c=o*i;let g=[-A+n,-r+c,0],u=[-A+n,r-c,0],p=[-A+l,r-c,0],m=[-A+l,-r+c,0];return this.addTriangle(0,m,u,g),this.addTriangle(9,m,p,u),g=[A-n,-r+c,0],u=[A-n,r-c,0],p=[A-l,r-c,0],m=[A-l,-r+c,0],this.addTriangle(18,g,u,m),this.addTriangle(27,u,p,m),g=[-A+n,-r+h,0],u=[-A+n,c-r,0],p=[A-n,c-r,0],m=[A-n,-r+h,0],this.addTriangle(36,m,u,g),this.addTriangle(45,m,p,u),g=[-A+n,r-h,0],u=[-A+n,r-c,0],p=[A-n,r-c,0],m=[A-n,r-h,0],this.addTriangle(54,g,u,m),this.addTriangle(63,u,p,m),!0}return!1}drawBorder(t,e,s){this.generateBorder(t,e,s)&&(this.gl.useProgram(this.shaderProgram),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.vertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.positions,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.aPosLoc,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aPosLoc),this.gl.uniform4fv(this.colorLoc,t),this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawArrays(this.gl.TRIANGLES,0,this.positions.length/3))}}},"./src/rendering/sprites/darkenCenter.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/rendering/shaders/shaderUtils.js");class A{constructor(t,e){this.gl=t,this.aspectx=e.aspectx,this.aspecty=e.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.generatePositions(),this.colors=new Float32Array([0,0,0,3/32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),this.positionVertexBuf=this.gl.createBuffer(),this.colorVertexBuf=this.gl.createBuffer(),this.floatPrecision=i.default.getFragmentFloatPrecision(this.gl),this.createShader()}updateGlobals(t){this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.generatePositions()}generatePositions(){const t=.05;this.positions=new Float32Array([0,0,0,-.05*this.aspecty,0,0,0,-.05,0,t*this.aspecty,0,0,0,t,0,-.05*this.aspecty,0,0])}createShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"\n #version 300 es\n in vec3 aPos;\n in vec4 aColor;\n out vec4 vColor;\n void main(void) {\n vColor = aColor;\n gl_Position = vec4(aPos, 1.0);\n }\n ".trim()),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`\n #version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n in vec4 vColor;\n out vec4 fragColor;\n void main(void) {\n fragColor = vColor;\n }\n `.trim()),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.aPosLocation=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.aColorLocation=this.gl.getAttribLocation(this.shaderProgram,"aColor")}drawDarkenCenter(t){0!==t.darken_center&&(this.gl.useProgram(this.shaderProgram),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.positionVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.positions,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.aPosLocation,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aPosLocation),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.colorVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.colors,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.aColorLocation,4,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aColorLocation),this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawArrays(this.gl.TRIANGLE_FAN,0,this.positions.length/3))}}},"./src/rendering/text/titleText.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return A}));var i=s("./src/rendering/shaders/shaderUtils.js");class A{constructor(t,e={}){this.gl=t,this.texsizeX=e.texsizeX,this.texsizeY=e.texsizeY,this.aspectx=e.aspectx,this.aspecty=e.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.buildPositions(),this.textTexture=this.gl.createTexture(),this.indexBuf=t.createBuffer(),this.positionVertexBuf=this.gl.createBuffer(),this.vertexBuf=this.gl.createBuffer(),this.canvas=document.createElement("canvas"),this.canvas.width=this.texsizeX,this.canvas.height=this.texsizeY,this.context2D=this.canvas.getContext("2d"),this.floatPrecision=i.default.getFragmentFloatPrecision(this.gl),this.createShader()}generateTitleTexture(t){this.context2D.clearRect(0,0,this.texsizeX,this.texsizeY),this.fontSize=Math.floor(this.texsizeX/256*16),this.fontSize=Math.max(this.fontSize,6),this.context2D.font=`italic ${this.fontSize}px Times New Roman`;let e=t,s=this.context2D.measureText(e).width;if(s>this.texsizeX){const t=this.texsizeX/s*.91;e=`${e.substring(0,Math.floor(e.length*t))}...`,s=this.context2D.measureText(e).width}this.context2D.fillStyle="#FFFFFF",this.context2D.fillText(e,(this.texsizeX-s)/2,this.texsizeY/2);const i=new Uint8Array(this.context2D.getImageData(0,0,this.texsizeX,this.texsizeY).data.buffer);this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL,!0),this.gl.bindTexture(this.gl.TEXTURE_2D,this.textTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.texsizeX,this.texsizeY,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,i),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR_MIPMAP_LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.generateMipmap(this.gl.TEXTURE_2D),this.gl.bindTexture(this.gl.TEXTURE_2D,null)}updateGlobals(t){this.texsizeX=t.texsizeX,this.texsizeY=t.texsizeY,this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.canvas.width=this.texsizeX,this.canvas.height=this.texsizeY}buildPositions(){const t=[];for(let e=0;e<8;e++){const s=.2857142857142857*e-1;for(let e=0;e<16;e++){const i=.13333333333333333*e-1;t.push(i,-s,0)}}const e=[];for(let t=0;t<7;t++)for(let s=0;s<15;s++){const i=s+16*t,A=s+16*(t+1),r=s+1+16*(t+1),a=s+1+16*t;e.push(i,A,a),e.push(A,r,a)}this.vertices=new Float32Array(t),this.indices=new Uint16Array(e)}createShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"#version 300 es\n const vec2 halfmad = vec2(0.5);\n in vec2 aPos;\n in vec2 aUv;\n out vec2 uv_orig;\n out vec2 uv;\n void main(void) {\n gl_Position = vec4(aPos, 0.0, 1.0);\n uv_orig = aPos * halfmad + halfmad;\n uv = aUv;\n }"),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`#version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n\n in vec2 uv_orig;\n in vec2 uv;\n out vec4 fragColor;\n uniform sampler2D uTexture;\n uniform float textColor;\n\n void main(void) {\n fragColor = texture(uTexture, uv) * vec4(textColor);\n }`),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.positionLocation=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.uvLocation=this.gl.getAttribLocation(this.shaderProgram,"aUv"),this.textureLoc=this.gl.getUniformLocation(this.shaderProgram,"uTexture"),this.textColorLoc=this.gl.getUniformLocation(this.shaderProgram,"textColor")}generateUvs(t,e,s){const i=[];for(let s=0;s<8;s++)for(let A=0;A<16;A++){const r=A/15*2-1;let a=2*(.75*(s/7-.5)+.5)-1;t>=1&&(a+=1/this.texsizeY),i.push(r,e?a:-a)}const A=Math.max(0,1-1.5*t)**1.8*1.3;for(let t=0;t<8;t++)for(let e=0;e<16;e++){const r=16*t+e;i[r]+=.07*A*Math.sin(.31*s.time+.39*i[r]-1.94*i[r+1]),i[r]+=.044*A*Math.sin(.81*s.time-1.91*i[r]+.27*i[r+1]),i[r]+=.061*A*Math.sin(1.31*s.time+.61*i[r]+.74*i[r+1]),i[r+1]+=.061*A*Math.sin(.37*s.time+1.83*i[r]+.69*i[r+1]),i[r+1]+=.07*A*Math.sin(.67*s.time+.42*i[r]-1.39*i[r+1]),i[r+1]+=.087*A*Math.sin(1.07*s.time+3.55*i[r]+.89*i[r+1])}const r=1.01/(t**.21+.01);for(let t=0;t<i.length/2;t++)i[2*t]*=r,i[2*t+1]*=r*this.invAspecty,i[2*t]=(i[2*t]+1)/2,i[2*t+1]=(i[2*t+1]+1)/2;return new Float32Array(i)}renderTitle(t,e,s){this.gl.useProgram(this.shaderProgram);const i=this.generateUvs(t,e,s);this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER,this.indexBuf),this.gl.bufferData(this.gl.ELEMENT_ARRAY_BUFFER,this.indices,this.gl.STATIC_DRAW),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.positionVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.vertices,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.positionLocation,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.positionLocation),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.vertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,i,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.uvLocation,2,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.uvLocation),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,this.textTexture),this.gl.uniform1i(this.textureLoc,0),this.gl.uniform1f(this.textColorLoc,t**.3),this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawElements(this.gl.TRIANGLES,this.indices.length,this.gl.UNSIGNED_SHORT,0)}}},"./src/rendering/waves/basicWaveform.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return r}));var i=s("./src/rendering/shaders/shaderUtils.js"),A=s("./src/rendering/waves/waveUtils.js");class r{constructor(t,e={}){this.gl=t,this.positions=new Float32Array(1536),this.positions2=new Float32Array(1536),this.oldPositions=new Float32Array(1536),this.oldPositions2=new Float32Array(1536),this.smoothedPositions=new Float32Array(3069),this.smoothedPositions2=new Float32Array(3069),this.color=[0,0,0,1],this.texsizeX=e.texsizeX,this.texsizeY=e.texsizeY,this.aspectx=e.aspectx,this.aspecty=e.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.floatPrecision=i.default.getFragmentFloatPrecision(this.gl),this.createShader(),this.vertexBuf=this.gl.createBuffer()}updateGlobals(t){this.texsizeX=t.texsizeX,this.texsizeY=t.texsizeY,this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty}createShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"\n #version 300 es\n in vec3 aPos;\n uniform vec2 thickOffset;\n void main(void) {\n gl_Position = vec4(aPos + vec3(thickOffset, 0.0), 1.0);\n }\n ".trim()),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`\n #version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n out vec4 fragColor;\n uniform vec4 u_color;\n void main(void) {\n fragColor = u_color;\n }\n `.trim()),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.aPosLoc=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.colorLoc=this.gl.getUniformLocation(this.shaderProgram,"u_color"),this.thickOffsetLoc=this.gl.getUniformLocation(this.shaderProgram,"thickOffset")}static processWaveform(t,e){const s=[],i=e.wave_scale/128,A=e.wave_smoothing,r=i*(1-A);s.push(t[0]*i);for(let e=1;e<t.length;e++)s.push(t[e]*r+s[e-1]*A);return s}generateWaveform(t,e,s,i,a){let o=a.wave_a;const n=(a.bass+a.mid+a.treb)/3;if(n>-.01&&o>.001&&s.length>0){const h=r.processWaveform(s,a),l=r.processWaveform(i,a),c=Math.floor(a.wave_mode)%8,g=Math.floor(a.old_wave_mode)%8,u=2*a.wave_x-1,p=2*a.wave_y-1;this.numVert=0,this.oldNumVert=0;const m=t&&c!==g?2:1;for(let t=0;t<m;t++){const e=0===t?c:g;let s,i,A,r=a.wave_mystery;if(0!==e&&1!==e&&4!==e||!(r<-1||r>1)||(r=.5*r+.5,r-=Math.floor(r),r=Math.abs(r),r=2*r-1),0===t?(i=this.positions,A=this.positions2):(i=this.oldPositions,A=this.oldPositions2),o=a.wave_a,0===e){if(a.modwavealphabyvolume>0){const t=a.modwavealphaend-a.modwavealphastart;o*=(n-a.modwavealphastart)/t}o=Math.clamp(o,0,1),s=Math.floor(h.length/2)+1;const t=1/(s-1),e=Math.floor((h.length-s)/2);for(let A=0;A<s-1;A++){let o=.5+.4*l[A+e]+r;const n=A*t*2*Math.PI+.2*a.time;if(A<s/10){let t=A/(.1*s);t=.5-.5*Math.cos(t*Math.PI),o=(1-t)*(.5+.4*l[A+s+e]+r)+o*t}i[3*A+0]=o*Math.cos(n)*this.aspecty+u,i[3*A+1]=o*Math.sin(n)*this.aspectx+p,i[3*A+2]=0}i[3*(s-1)+0]=i[0],i[3*(s-1)+1]=i[1],i[3*(s-1)+2]=0}else if(1===e){if(o*=1.25,a.modwavealphabyvolume>0){const t=a.modwavealphaend-a.modwavealphastart;o*=(n-a.modwavealphastart)/t}o=Math.clamp(o,0,1),s=Math.floor(h.length/2);for(let t=0;t<s;t++){const e=.53+.43*l[t]+r,s=.5*h[t+32]*Math.PI+2.3*a.time;i[3*t+0]=e*Math.cos(s)*this.aspecty+u,i[3*t+1]=e*Math.sin(s)*this.aspectx+p,i[3*t+2]=0}}else if(2===e){if(this.texsizeX<1024?o*=.09:this.texsizeX>=1024&&this.texsizeX<2048?o*=.11:o*=.13,a.modwavealphabyvolume>0){const t=a.modwavealphaend-a.modwavealphastart;o*=(n-a.modwavealphastart)/t}o=Math.clamp(o,0,1),s=h.length;for(let t=0;t<h.length;t++)i[3*t+0]=l[t]*this.aspecty+u,i[3*t+1]=h[(t+32)%h.length]*this.aspectx+p,i[3*t+2]=0}else if(3===e){if(this.texsizeX<1024?o*=.15:this.texsizeX>=1024&&this.texsizeX<2048?o*=.22:o*=.33,o*=1.3,o*=a.treb*a.treb,a.modwavealphabyvolume>0){const t=a.modwavealphaend-a.modwavealphastart;o*=(n-a.modwavealphastart)/t}o=Math.clamp(o,0,1),s=h.length;for(let t=0;t<h.length;t++)i[3*t+0]=l[t]*this.aspecty+u,i[3*t+1]=h[(t+32)%h.length]*this.aspectx+p,i[3*t+2]=0}else if(4===e){if(a.modwavealphabyvolume>0){const t=a.modwavealphaend-a.modwavealphastart;o*=(n-a.modwavealphastart)/t}o=Math.clamp(o,0,1),s=h.length,s>this.texsizeX/3&&(s=Math.floor(this.texsizeX/3));const t=1/s,e=Math.floor((h.length-s)/2),A=.45+.5*(.5*r+.5),c=1-A;for(let r=0;r<s;r++){let s=2*r*t+(u-1)+.44*l[(r+25+e)%h.length],a=.47*h[r+e]+p;r>1&&(s=s*c+A*(2*i[3*(r-1)+0]-i[3*(r-2)+0]),a=a*c+A*(2*i[3*(r-1)+1]-i[3*(r-2)+1])),i[3*r+0]=s,i[3*r+1]=a,i[3*r+2]=0}}else if(5===e){if(this.texsizeX<1024?o*=.09:this.texsizeX>=1024&&this.texsizeX<2048?o*=.11:o*=.13,a.modwavealphabyvolume>0){const t=a.modwavealphaend-a.modwavealphastart;o*=(n-a.modwavealphastart)/t}o=Math.clamp(o,0,1);const t=Math.cos(.3*a.time),e=Math.sin(.3*a.time);s=h.length;for(let s=0;s<h.length;s++){const A=(s+32)%h.length,r=l[s]*h[A]+h[s]*l[A],a=l[s]*l[s]-h[A]*h[A];i[3*s+0]=(r*t-a*e)*(this.aspecty+u),i[3*s+1]=(r*e+a*t)*(this.aspectx+p),i[3*s+2]=0}}else if(6===e||7===e){if(a.modwavealphabyvolume>0){const t=a.modwavealphaend-a.modwavealphastart;o*=(n-a.modwavealphastart)/t}o=Math.clamp(o,0,1),s=Math.floor(h.length/2),s>this.texsizeX/3&&(s=Math.floor(this.texsizeX/3));const t=Math.floor((h.length-s)/2),c=.5*Math.PI*r;let g=Math.cos(c),m=Math.sin(c);const d=[u*Math.cos(c+.5*Math.PI)-3*g,u*Math.cos(c+.5*Math.PI)+3*g],f=[u*Math.sin(c+.5*Math.PI)-3*m,u*Math.sin(c+.5*Math.PI)+3*m];for(let t=0;t<2;t++)for(let e=0;e<4;e++){let s,i=!1;switch(e){case 0:d[t]>1.1&&(s=(1.1-d[1-t])/(d[t]-d[1-t]),i=!0);break;case 1:d[t]<-1.1&&(s=(-1.1-d[1-t])/(d[t]-d[1-t]),i=!0);break;case 2:f[t]>1.1&&(s=(1.1-f[1-t])/(f[t]-f[1-t]),i=!0);break;case 3:f[t]<-1.1&&(s=(-1.1-f[1-t])/(f[t]-f[1-t]),i=!0)}if(i){const e=d[t]-d[1-t],i=f[t]-f[1-t];d[t]=d[1-t]+e*s,f[t]=f[1-t]+i*s}}g=(d[1]-d[0])/s,m=(f[1]-f[0])/s;const S=Math.atan2(m,g),b=Math.cos(S+.5*Math.PI),E=Math.sin(S+.5*Math.PI);if(6===e)for(let e=0;e<s;e++){const s=h[e+t];i[3*e+0]=d[0]+g*e+.25*b*s,i[3*e+1]=f[0]+m*e+.25*E*s,i[3*e+2]=0}else if(7===e){const e=(.5*p+.5)**2;for(let A=0;A<s;A++){const s=h[A+t];i[3*A+0]=d[0]+g*A+b*(.25*s+e),i[3*A+1]=f[0]+m*A+E*(.25*s+e),i[3*A+2]=0}for(let i=0;i<s;i++){const s=l[i+t];A[3*i+0]=d[0]+g*i+b*(.25*s-e),A[3*i+1]=f[0]+m*i+E*(.25*s-e),A[3*i+2]=0}}}0===t?(this.positions=i,this.positions2=A,this.numVert=s,this.alpha=o):(this.oldPositions=i,this.oldPositions2=A,this.oldNumVert=s,this.oldAlpha=o)}const d=.5-.5*Math.cos(e*Math.PI),f=1-d;this.oldNumVert>0&&(o=d*this.alpha+f*this.oldAlpha);let S=Math.clamp(a.wave_r,0,1),b=Math.clamp(a.wave_g,0,1),E=Math.clamp(a.wave_b,0,1);if(0!==a.wave_brighten){const t=Math.max(S,b,E);t>.01&&(S/=t,b/=t,E/=t)}if(this.color=[S,b,E,o],this.oldNumVert>0)if(7===c){const t=(this.oldNumVert-1)/(2*this.numVert);for(let e=0;e<this.numVert;e++){const s=e*t,i=Math.floor(s),A=s-i,r=this.oldPositions[3*i+0]*(1-A)+this.oldPositions[3*(i+1)+0]*A,a=this.oldPositions[3*i+1]*(1-A)+this.oldPositions[3*(i+1)+1]*A;this.positions[3*e+0]=this.positions[3*e+0]*d+r*f,this.positions[3*e+1]=this.positions[3*e+1]*d+a*f,this.positions[3*e+2]=0}for(let e=0;e<this.numVert;e++){const s=(e+this.numVert)*t,i=Math.floor(s),A=s-i,r=this.oldPositions[3*i+0]*(1-A)+this.oldPositions[3*(i+1)+0]*A,a=this.oldPositions[3*i+1]*(1-A)+this.oldPositions[3*(i+1)+1]*A;this.positions2[3*e+0]=this.positions2[3*e+0]*d+r*f,this.positions2[3*e+1]=this.positions2[3*e+1]*d+a*f,this.positions2[3*e+2]=0}}else if(7===g){const t=this.numVert/2,e=(this.oldNumVert-1)/t;for(let s=0;s<t;s++){const t=s*e,i=Math.floor(t),A=t-i,r=this.oldPositions[3*i+0]*(1-A)+this.oldPositions[3*(i+1)+0]*A,a=this.oldPositions[3*i+1]*(1-A)+this.oldPositions[3*(i+1)+1]*A;this.positions[3*s+0]=this.positions[3*s+0]*d+r*f,this.positions[3*s+1]=this.positions[3*s+1]*d+a*f,this.positions[3*s+2]=0}for(let s=0;s<t;s++){const i=s*e,A=Math.floor(i),r=i-A,a=this.oldPositions2[3*A+0]*(1-r)+this.oldPositions2[3*(A+1)+0]*r,o=this.oldPositions2[3*A+1]*(1-r)+this.oldPositions2[3*(A+1)+1]*r;this.positions2[3*s+0]=this.positions[3*(s+t)+0]*d+a*f,this.positions2[3*s+1]=this.positions[3*(s+t)+1]*d+o*f,this.positions2[3*s+2]=0}}else{const t=(this.oldNumVert-1)/this.numVert;for(let e=0;e<this.numVert;e++){const s=e*t,i=Math.floor(s),A=s-i,r=this.oldPositions[3*i+0]*(1-A)+this.oldPositions[3*(i+1)+0]*A,a=this.oldPositions[3*i+1]*(1-A)+this.oldPositions[3*(i+1)+1]*A;this.positions[3*e+0]=this.positions[3*e+0]*d+r*f,this.positions[3*e+1]=this.positions[3*e+1]*d+a*f,this.positions[3*e+2]=0}}for(let t=0;t<this.numVert;t++)this.positions[3*t+1]=-this.positions[3*t+1];if(this.smoothedNumVert=2*this.numVert-1,A.default.smoothWave(this.positions,this.smoothedPositions,this.numVert),7===c||7===g){for(let t=0;t<this.numVert;t++)this.positions2[3*t+1]=-this.positions2[3*t+1];A.default.smoothWave(this.positions2,this.smoothedPositions2,this.numVert)}return!0}return!1}drawBasicWaveform(t,e,s,i,A){if(this.generateWaveform(t,e,s,i,A)){this.gl.useProgram(this.shaderProgram),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.vertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.smoothedPositions,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.aPosLoc,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aPosLoc),this.gl.uniform4fv(this.colorLoc,this.color);let t=1;0===A.wave_thick&&0===A.wave_dots||(t=4),0!==A.additivewave?this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE):this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA);const e=0!==A.wave_dots?this.gl.POINTS:this.gl.LINE_STRIP;for(let s=0;s<t;s++){const t=2;0===s?this.gl.uniform2fv(this.thickOffsetLoc,[0,0]):1===s?this.gl.uniform2fv(this.thickOffsetLoc,[t/this.texsizeX,0]):2===s?this.gl.uniform2fv(this.thickOffsetLoc,[0,t/this.texsizeY]):3===s&&this.gl.uniform2fv(this.thickOffsetLoc,[t/this.texsizeX,t/this.texsizeY]),this.gl.drawArrays(e,0,this.smoothedNumVert)}if(7==Math.floor(A.wave_mode)%8){this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.vertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.smoothedPositions2,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.aPosLoc,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aPosLoc);for(let s=0;s<t;s++){const t=2;0===s?this.gl.uniform2fv(this.thickOffsetLoc,[0,0]):1===s?this.gl.uniform2fv(this.thickOffsetLoc,[t/this.texsizeX,0]):2===s?this.gl.uniform2fv(this.thickOffsetLoc,[0,t/this.texsizeY]):3===s&&this.gl.uniform2fv(this.thickOffsetLoc,[t/this.texsizeX,t/this.texsizeY]),this.gl.drawArrays(e,0,this.smoothedNumVert)}}}}}},"./src/rendering/waves/customWaveform.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return a}));var i=s("./src/utils.js"),A=s("./src/rendering/shaders/shaderUtils.js"),r=s("./src/rendering/waves/waveUtils.js");class a{constructor(t,e,s){this.index=t,this.gl=e;const i=512;this.pointsData=[new Float32Array(i),new Float32Array(i)],this.positions=new Float32Array(1536),this.colors=new Float32Array(2048),this.smoothedPositions=new Float32Array(3069),this.smoothedColors=new Float32Array(4092),this.texsizeX=s.texsizeX,this.texsizeY=s.texsizeY,this.mesh_width=s.mesh_width,this.mesh_height=s.mesh_height,this.aspectx=s.aspectx,this.aspecty=s.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty,this.positionVertexBuf=this.gl.createBuffer(),this.colorVertexBuf=this.gl.createBuffer(),this.floatPrecision=A.default.getFragmentFloatPrecision(this.gl),this.createShader()}updateGlobals(t){this.texsizeX=t.texsizeX,this.texsizeY=t.texsizeY,this.mesh_width=t.mesh_width,this.mesh_height=t.mesh_height,this.aspectx=t.aspectx,this.aspecty=t.aspecty,this.invAspectx=1/this.aspectx,this.invAspecty=1/this.aspecty}createShader(){this.shaderProgram=this.gl.createProgram();const t=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(t,"\n #version 300 es\n uniform float uSize;\n uniform vec2 thickOffset;\n in vec3 aPos;\n in vec4 aColor;\n out vec4 vColor;\n void main(void) {\n vColor = aColor;\n gl_PointSize = uSize;\n gl_Position = vec4(aPos + vec3(thickOffset, 0.0), 1.0);\n }\n ".trim()),this.gl.compileShader(t);const e=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(e,`\n #version 300 es\n precision ${this.floatPrecision} float;\n precision highp int;\n precision mediump sampler2D;\n in vec4 vColor;\n out vec4 fragColor;\n void main(void) {\n fragColor = vColor;\n }\n `.trim()),this.gl.compileShader(e),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.aPosLocation=this.gl.getAttribLocation(this.shaderProgram,"aPos"),this.aColorLocation=this.gl.getAttribLocation(this.shaderProgram,"aColor"),this.sizeLoc=this.gl.getUniformLocation(this.shaderProgram,"uSize"),this.thickOffsetLoc=this.gl.getUniformLocation(this.shaderProgram,"thickOffset")}generateWaveform(t,e,s,A,a,o,n,h){if(0!==n.baseVals.enabled&&t.length>0){let l;if(o.preset.useWASM)l=o.runWaveFrameEquations(this.index,a);else{const t=Object.assign({},o.mdVSWaves[this.index],o.mdVSFrameMapWaves[this.index],o.mdVSQAfterFrame,o.mdVSTWaveInits[this.index],a);l=o.runWaveFrameEquations(this.index,t)}const c=512;Object.prototype.hasOwnProperty.call(l,"samples")?this.samples=l.samples:this.samples=c,this.samples>c&&(this.samples=c),this.samples=Math.floor(this.samples);const g=o.preset.waves[this.index].baseVals,u=Math.floor(l.sep),p=l.scaling,m=l.spectrum,d=l.smoothing,f=g.usedots,S=l.r,b=l.g,E=l.b,U=l.a,x=o.preset.baseVals.wave_scale;if(this.samples-=u,this.samples>=2||0!==f&&this.samples>=1){const a=0!==m,T=(a?.15:.004)*p*x,v=a?s:t,q=a?A:e,R=a?0:Math.floor((c-this.samples)/2-u/2),I=a?0:Math.floor((c-this.samples)/2+u/2),P=a?(c-u)/this.samples:1,V=(.98*d)**.5,y=1-V;this.pointsData[0][0]=v[R],this.pointsData[1][0]=q[I];for(let t=1;t<this.samples;t++){const e=v[Math.floor(t*P+R)],s=q[Math.floor(t*P+I)];this.pointsData[0][t]=e*y+this.pointsData[0][t-1]*V,this.pointsData[1][t]=s*y+this.pointsData[1][t-1]*V}for(let t=this.samples-2;t>=0;t--)this.pointsData[0][t]=this.pointsData[0][t]*y+this.pointsData[0][t+1]*V,this.pointsData[1][t]=this.pointsData[1][t]*y+this.pointsData[1][t+1]*V;for(let t=0;t<this.samples;t++)this.pointsData[0][t]*=T,this.pointsData[1][t]*=T;if(o.preset.useWASM){const t=o.preset.globalPools[`wavePerFrame${this.index}`];for(let e=0;e<this.samples;e++){const s=this.pointsData[0][e],i=this.pointsData[1][e];t.sample.value=e/(this.samples-1),t.value1.value=s,t.value2.value=i,t.x.value=.5+s,t.y.value=.5+i,t.r.value=S,t.g.value=b,t.b.value=E,t.a.value=U,n.point_eqs&&o.preset.waves[this.index].point_eqs();const A=(2*t.x.value-1)*this.invAspectx,r=(-2*t.y.value+1)*this.invAspecty,a=t.r.value,l=t.g.value,c=t.b.value,g=t.a.value;this.positions[3*e+0]=A,this.positions[3*e+1]=r,this.positions[3*e+2]=0,this.colors[4*e+0]=a,this.colors[4*e+1]=l,this.colors[4*e+2]=c,this.colors[4*e+3]=g*h}}else for(let t=0;t<this.samples;t++){const e=this.pointsData[0][t],s=this.pointsData[1][t];l.sample=t/(this.samples-1),l.value1=e,l.value2=s,l.x=.5+e,l.y=.5+s,l.r=S,l.g=b,l.b=E,l.a=U,""!==n.point_eqs&&(l=o.runWavePointEquations(this.index,l));const i=(2*l.x-1)*this.invAspectx,A=(-2*l.y+1)*this.invAspecty,r=l.r,a=l.g,c=l.b,g=l.a;this.positions[3*t+0]=i,this.positions[3*t+1]=A,this.positions[3*t+2]=0,this.colors[4*t+0]=r,this.colors[4*t+1]=a,this.colors[4*t+2]=c,this.colors[4*t+3]=g*h}if(o.preset.useWASM)l.usedots=f,l.thick=g.thick,l.additive=g.additive;else{const t=o.mdVSUserKeysWaves[this.index],e=i.default.pick(l,t);o.mdVSFrameMapWaves[this.index]=e}return this.mdVSWaveFrame=l,0===f&&r.default.smoothWaveAndColor(this.positions,this.colors,this.smoothedPositions,this.smoothedColors,this.samples),!0}}return!1}drawCustomWaveform(t,e,s,i,A,r,a,o){if(o&&this.generateWaveform(e,s,i,A,r,a,o,t)){this.gl.useProgram(this.shaderProgram);const t=0!==this.mdVSWaveFrame.usedots,e=0!==this.mdVSWaveFrame.thick,s=0!==this.mdVSWaveFrame.additive;let i,A,r;t?(i=this.positions,A=this.colors,r=this.samples):(i=this.smoothedPositions,A=this.smoothedColors,r=2*this.samples-1),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.positionVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,i,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.aPosLocation,3,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aPosLocation),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.colorVertexBuf),this.gl.bufferData(this.gl.ARRAY_BUFFER,A,this.gl.STATIC_DRAW),this.gl.vertexAttribPointer(this.aColorLocation,4,this.gl.FLOAT,!1,0,0),this.gl.enableVertexAttribArray(this.aColorLocation);let a=1;t?e?this.gl.uniform1f(this.sizeLoc,2+(this.texsizeX>=1024?1:0)):this.gl.uniform1f(this.sizeLoc,1+(this.texsizeX>=1024?1:0)):(this.gl.uniform1f(this.sizeLoc,1),e&&(a=4)),s?this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE):this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA);const o=t?this.gl.POINTS:this.gl.LINE_STRIP;for(let t=0;t<a;t++){const e=2;0===t?this.gl.uniform2fv(this.thickOffsetLoc,[0,0]):1===t?this.gl.uniform2fv(this.thickOffsetLoc,[e/this.texsizeX,0]):2===t?this.gl.uniform2fv(this.thickOffsetLoc,[0,e/this.texsizeY]):3===t&&this.gl.uniform2fv(this.thickOffsetLoc,[e/this.texsizeX,e/this.texsizeY]),this.gl.drawArrays(o,0,r)}}}}},"./src/rendering/waves/waveUtils.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return i}));class i{static smoothWave(t,e,s,i=!1){const A=-.15,r=1.15,a=1.15,o=-.15;let n,h=0,l=0,c=1;for(let g=0;g<s-1;g++){n=c,c=Math.min(s-1,g+2);for(let s=0;s<3;s++)e[3*h+s]=t[3*g+s];if(i)for(let s=0;s<3;s++)e[3*(h+1)+s]=.5*(A*t[3*l+s]+r*t[3*g+s]+a*t[3*n+s]+o*t[3*c+s]);else{for(let s=0;s<2;s++)e[3*(h+1)+s]=.5*(A*t[3*l+s]+r*t[3*g+s]+a*t[3*n+s]+o*t[3*c+s]);e[3*(h+1)+2]=0}l=g,h+=2}for(let i=0;i<3;i++)e[3*h+i]=t[3*(s-1)+i]}static smoothWaveAndColor(t,e,s,i,A,r=!1){const a=-.15,o=1.15,n=1.15,h=-.15;let l,c=0,g=0,u=1;for(let p=0;p<A-1;p++){l=u,u=Math.min(A-1,p+2);for(let e=0;e<3;e++)s[3*c+e]=t[3*p+e];if(r)for(let e=0;e<3;e++)s[3*(c+1)+e]=.5*(a*t[3*g+e]+o*t[3*p+e]+n*t[3*l+e]+h*t[3*u+e]);else{for(let e=0;e<2;e++)s[3*(c+1)+e]=.5*(a*t[3*g+e]+o*t[3*p+e]+n*t[3*l+e]+h*t[3*u+e]);s[3*(c+1)+2]=0}for(let t=0;t<4;t++)i[4*c+t]=e[4*p+t],i[4*(c+1)+t]=e[4*p+t];g=p,c+=2}for(let e=0;e<3;e++)s[3*c+e]=t[3*(A-1)+e];for(let t=0;t<4;t++)i[4*c+t]=e[4*(A-1)+t]}}},"./src/utils.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return i}));class i{static atan2(t,e){let s=Math.atan2(t,e);return s<0&&(s+=2*Math.PI),s}static cloneVars(t){return Object.assign({},t)}static range(t,e){return void 0===e?[...Array(t).keys()]:Array.from({length:e-t},((e,s)=>s+t))}static pick(t,e){const s={};for(let i=0;i<e.length;i++){const A=e[i];s[A]=t[A]||0}return s}static omit(t,e){const s=Object.assign({},t);for(let t=0;t<e.length;t++)delete s[e[t]];return s}static setWasm(t,e,s){for(let i=0;i<s.length;i++){const A=s[i];t[A].value=e[A]}}static pickWasm(t,e){const s={};for(let i=0;i<e.length;i++){const A=e[i];s[A]=t[A].value}return s}}},"./src/visualizer.js":function(t,e,s){"use strict";s.r(e),s.d(e,"default",(function(){return p}));var i=s("./node_modules/@babel/runtime/helpers/defineProperty.js"),A=s.n(i),r=s("./node_modules/eel-wasm/dist/src/index.js"),a=s("./node_modules/@assemblyscript/loader/index.js"),o=s("./src/audio/audioProcessor.js"),n=s("./src/rendering/renderer.js"),h=s("./src/utils.js"),l=s("./src/assemblyscript/presetFunctions.ts"),c=s.n(l);function g(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,i)}return s}function u(t){for(var e=1;e<arguments.length;e++){var s=null!=arguments[e]?arguments[e]:{};e%2?g(Object(s),!0).forEach((function(e){A()(t,e,s[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(s)):g(Object(s)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(s,e))}))}return t}class p{constructor(t,e,s){this.opts=s,this.audio=new o.default(t);const i=s.width||1200,A=s.height||900;this.internalCanvas=document.createElement("canvas"),this.internalCanvas.width=i,this.internalCanvas.height=A,this.gl=this.internalCanvas.getContext("webgl2",{alpha:!1,antialias:!1,depth:!1,stencil:!1,premultipliedAlpha:!1}),this.outputGl=e.getContext("2d"),this.baseValsDefaults={decay:.98,gammaadj:2,echo_zoom:2,echo_alpha:0,echo_orient:0,red_blue:0,brighten:0,darken:0,wrap:1,darken_center:0,solarize:0,invert:0,bmotionvectorson:1,fshader:0,b1n:0,b2n:0,b3n:0,b1x:1,b2x:1,b3x:1,b1ed:.25,wave_mode:0,additivewave:0,wave_dots:0,wave_thick:0,wave_a:.8,wave_scale:1,wave_smoothing:.75,wave_mystery:0,modwavealphabyvolume:0,modwavealphastart:.75,modwavealphaend:.95,wave_r:1,wave_g:1,wave_b:1,wave_x:.5,wave_y:.5,wave_brighten:1,mv_x:12,mv_y:9,mv_dx:0,mv_dy:0,mv_l:.9,mv_r:1,mv_g:1,mv_b:1,mv_a:1,warpanimspeed:1,warpscale:1,zoomexp:1,zoom:1,rot:0,cx:.5,cy:.5,dx:0,dy:0,warp:1,sx:1,sy:1,ob_size:.01,ob_r:0,ob_g:0,ob_b:0,ob_a:0,ib_size:.01,ib_r:.25,ib_g:.25,ib_b:.25,ib_a:0},this.shapeBaseValsDefaults={enabled:0,sides:4,additive:0,thickoutline:0,textured:0,num_inst:1,tex_zoom:1,tex_ang:0,x:.5,y:.5,rad:.1,ang:0,r:1,g:0,b:0,a:1,r2:0,g2:1,b2:0,a2:0,border_r:1,border_g:1,border_b:1,border_a:.1},this.waveBaseValsDefaults={enabled:0,samples:512,sep:0,scaling:1,smoothing:.5,r:1,g:1,b:1,a:1,spectrum:0,usedots:0,thick:0,additive:0},this.qs=h.default.range(1,33).map((t=>`q${t}`)),this.ts=h.default.range(1,9).map((t=>`t${t}`)),this.globalPerFrameVars=["old_wave_mode","frame","time","fps","bass","bass_att","mid","mid_att","treb","treb_att","meshx","meshy","aspectx","aspecty","pixelsx","pixelsy","rand_start","rand_preset"],this.globalPerPixelVars=["frame","time","fps","bass","bass_att","mid","mid_att","treb","treb_att","meshx","meshy","aspectx","aspecty","pixelsx","pixelsy","rand_start","rand_preset","x","y","rad","ang"],this.globalShapeVars=["frame","time","fps","bass","bass_att","mid","mid_att","treb","treb_att","meshx","meshy","aspectx","aspecty","pixelsx","pixelsy","rand_start","rand_preset","instance"],this.shapeBaseVars=["x","y","rad","ang","r","g","b","a","r2","g2","b2","a2","border_r","border_g","border_b","border_a","thickoutline","textured","tex_zoom","tex_ang","additive"],this.globalWaveVars=["frame","time","fps","bass","bass_att","mid","mid_att","treb","treb_att","meshx","meshy","aspectx","aspecty","pixelsx","pixelsy","rand_start","rand_preset","x","y","sample","value1","value2"],this.renderer=new n.default(this.gl,this.audio,s)}loseGLContext(){this.gl.getExtension("WEBGL_lose_context").loseContext(),this.outputGl=null}connectAudio(t){this.audioNode=t,this.audio.connectAudio(t)}disconnectAudio(t){this.audio.disconnectAudio(t)}static overrideDefaultVars(t,e){const s={};return Object.keys(t).forEach((i=>{Object.prototype.hasOwnProperty.call(e,i)?s[i]=e[i]:s[i]=t[i]})),s}createQVars(){const t={};return this.qs.forEach((e=>{t[e]=new WebAssembly.Global({value:"f64",mutable:!0},0)})),t}createTVars(){const t={};return this.ts.forEach((e=>{t[e]=new WebAssembly.Global({value:"f64",mutable:!0},0)})),t}createPerFramePool(t){const e={};return Object.keys(this.baseValsDefaults).forEach((s=>{e[s]=new WebAssembly.Global({value:"f64",mutable:!0},t[s])})),this.globalPerFrameVars.forEach((t=>{e[t]=new WebAssembly.Global({value:"f64",mutable:!0},0)})),e}createPerPixelPool(t){const e={};return Object.keys(this.baseValsDefaults).forEach((s=>{e[s]=new WebAssembly.Global({value:"f64",mutable:!0},t[s])})),this.globalPerPixelVars.forEach((t=>{e[t]=new WebAssembly.Global({value:"f64",mutable:!0},0)})),e}createCustomShapePerFramePool(t){const e={};return Object.keys(this.shapeBaseValsDefaults).forEach((s=>{e[s]=new WebAssembly.Global({value:"f64",mutable:!0},t[s])})),this.globalShapeVars.forEach((t=>{e[t]=new WebAssembly.Global({value:"f64",mutable:!0},0)})),e}createCustomWavePerFramePool(t){const e={};return Object.keys(this.waveBaseValsDefaults).forEach((s=>{e[s]=new WebAssembly.Global({value:"f64",mutable:!0},t[s])})),this.globalWaveVars.forEach((t=>{e[t]=new WebAssembly.Global({value:"f64",mutable:!0},0)})),e}static makeShapeResetPool(t,e,s){return e.reduce(((e,i)=>u(u({},e),{},{[`${i}_${s}`]:t[i]})),{})}static base64ToArrayBuffer(t){for(var e=window.atob(t),s=e.length,i=new Uint8Array(s),A=0;A<s;A++)i[A]=e.charCodeAt(A);return i.buffer}async loadPreset(t,e=0){const s=JSON.parse(JSON.stringify(t));s.baseVals=p.overrideDefaultVars(this.baseValsDefaults,s.baseVals);for(let t=0;t<s.shapes.length;t++)s.shapes[t].baseVals=p.overrideDefaultVars(this.shapeBaseValsDefaults,s.shapes[t].baseVals);for(let t=0;t<s.waves.length;t++)s.waves[t].baseVals=p.overrideDefaultVars(this.waveBaseValsDefaults,s.waves[t].baseVals);const i=s.useJS&&!this.opts.onlyUseWASM;Object.prototype.hasOwnProperty.call(s,"init_eqs_eel")&&!i?(s.useWASM=!0,await this.loadWASMPreset(s,e)):this.opts.onlyUseWASM?console.warn("Tried to load a preset that doesn't support WASM with onlyUseWASM on"):Object.prototype.hasOwnProperty.call(s,"init_eqs_str")?this.loadJSPreset(s,e):console.warn("Tried to load a JS preset that doesn't have converted strings")}async loadWASMPreset(t,e){const s=this.createQVars(),i=this.createTVars(),A={perFrame:u(u({},s),this.createPerFramePool(t.baseVals)),perVertex:u(u({},s),this.createPerPixelPool(t.baseVals))},o={presetInit:{pool:"perFrame",code:t.init_eqs_eel},perFrame:{pool:"perFrame",code:t.frame_eqs_eel}};""!==t.pixel_eqs_eel&&(o.perPixel={pool:"perVertex",code:t.pixel_eqs_eel});for(let e=0;e<t.shapes.length;e++)A[`shapePerFrame${e}`]=u(u(u({},s),i),this.createCustomShapePerFramePool(t.shapes[e].baseVals)),0!==t.shapes[e].baseVals.enabled&&(o[`shapes_${e}_init_eqs`]={pool:`shapePerFrame${e}`,code:t.shapes[e].init_eqs_eel},o[`shapes_${e}_frame_eqs`]={pool:`shapePerFrame${e}`,code:t.shapes[e].frame_eqs_eel});for(let e=0;e<t.waves.length;e++)0!==t.waves[e].baseVals.enabled&&(A[`wavePerFrame${e}`]=u(u(u({},s),i),this.createCustomWavePerFramePool(t.waves[e].baseVals)),o[`waves_${e}_init_eqs`]={pool:`wavePerFrame${e}`,code:t.waves[e].init_eqs_eel},o[`waves_${e}_frame_eqs`]={pool:`wavePerFrame${e}`,code:t.waves[e].frame_eqs_eel},t.waves[e].point_eqs_eel&&""!==t.waves[e].point_eqs_eel&&(o[`waves_${e}_point_eqs`]={pool:`wavePerFrame${e}`,code:t.waves[e].point_eqs_eel}));const n=await Object(r.loadModule)({pools:A,functions:o,eelVersion:t.version||2}),h=t=>t||(()=>{}),l=await a.default.instantiate(p.base64ToArrayBuffer(c()()),{pixelEqs:{perPixelEqs:h(n.exports.perPixel)},pixelVarPool:{warp:A.perVertex.warp,zoom:A.perVertex.zoom,zoomexp:A.perVertex.zoomexp,cx:A.perVertex.cx,cy:A.perVertex.cy,sx:A.perVertex.sx,sy:A.perVertex.sy,dx:A.perVertex.dx,dy:A.perVertex.dy,rot:A.perVertex.rot,x:A.perVertex.x,y:A.perVertex.y,ang:A.perVertex.ang,rad:A.perVertex.rad},qVarPool:s,tVarPool:i,shapePool0:p.makeShapeResetPool(A.shapePerFrame0,this.shapeBaseVars,0),shapePool1:p.makeShapeResetPool(A.shapePerFrame1,this.shapeBaseVars,1),shapePool2:p.makeShapeResetPool(A.shapePerFrame2,this.shapeBaseVars,2),shapePool3:p.makeShapeResetPool(A.shapePerFrame3,this.shapeBaseVars,3),console:{logi:t=>{console.log("logi: "+t)},logf:t=>{console.log("logf: "+t)}},env:{abort:()=>{}}});t.globalPools=A,t.init_eqs=h(n.exports.presetInit),t.frame_eqs=h(n.exports.perFrame),t.save_qs=l.exports.saveQs,t.restore_qs=l.exports.restoreQs,t.save_ts=l.exports.saveTs,t.restore_ts=l.exports.restoreTs,n.exports.perPixel&&(t.pixel_eqs=n.exports.perPixel),t.pixel_eqs_initialize_array=(e,s)=>{const i=l.exports.createFloat32Array((e+1)*(s+1)*2);t.pixel_eqs_array=i},t.pixel_eqs_get_array=()=>l.exports.__getFloat32ArrayView(t.pixel_eqs_array),t.pixel_eqs_wasm=(...e)=>l.exports.runPixelEquations(t.pixel_eqs_array,...e);for(let e=0;e<t.shapes.length;e++)0!==t.shapes[e].baseVals.enabled&&(t.shapes[e].init_eqs=h(n.exports[`shapes_${e}_init_eqs`]),t.shapes[e].frame_eqs=n.exports[`shapes_${e}_frame_eqs`],t.shapes[e].frame_eqs_save=()=>l.exports[`shape${e}_save`](),t.shapes[e].frame_eqs_restore=()=>l.exports[`shape${e}_restore`]());for(let e=0;e<t.waves.length;e++)if(0!==t.waves[e].baseVals.enabled){const s={init_eqs:h(n.exports[`waves_${e}_init_eqs`]),frame_eqs:h(n.exports[`waves_${e}_frame_eqs`])};t.waves[e].point_eqs_eel&&""!==t.waves[e].point_eqs_eel?s.point_eqs=n.exports[`waves_${e}_point_eqs`]:s.point_eqs="",t.waves[e]=Object.assign({},t.waves[e],s)}this.renderer.loadPreset(t,e)}loadJSPreset(t,e){if("function"!=typeof t.init_eqs){t.init_eqs=new Function("a",`${t.init_eqs_str} return a;`),t.frame_eqs=new Function("a",`${t.frame_eqs_str} return a;`),t.pixel_eqs_str&&""!==t.pixel_eqs_str?t.pixel_eqs=new Function("a",`${t.pixel_eqs_str} return a;`):t.pixel_eqs="";for(let e=0;e<t.shapes.length;e++)0!==t.shapes[e].baseVals.enabled&&(t.shapes[e]=Object.assign({},t.shapes[e],{init_eqs:new Function("a",`${t.shapes[e].init_eqs_str} return a;`),frame_eqs:new Function("a",`${t.shapes[e].frame_eqs_str} return a;`)}));for(let e=0;e<t.waves.length;e++)if(0!==t.waves[e].baseVals.enabled){const s={init_eqs:new Function("a",`${t.waves[e].init_eqs_str} return a;`),frame_eqs:new Function("a",`${t.waves[e].frame_eqs_str} return a;`)};t.waves[e].point_eqs_str&&""!==t.waves[e].point_eqs_str?s.point_eqs=new Function("a",`${t.waves[e].point_eqs_str} return a;`):s.point_eqs="",t.waves[e]=Object.assign({},t.waves[e],s)}}this.renderer.loadPreset(t,e)}loadExtraImages(t){this.renderer.loadExtraImages(t)}setRendererSize(t,e,s={}){this.internalCanvas.width=t,this.internalCanvas.height=e,this.renderer.setRendererSize(t,e,s)}setInternalMeshSize(t,e){this.renderer.setInternalMeshSize(t,e)}setOutputAA(t){this.renderer.setOutputAA(t)}setCanvas(t){this.outputGl=t.getContext("2d")}render(t){const e=this.renderer.render(t);return this.outputGl&&this.outputGl.drawImage(this.internalCanvas,0,0),e}launchSongTitleAnim(t){this.renderer.launchSongTitleAnim(t)}toDataURL(){return this.renderer.toDataURL()}warpBufferToDataURL(){return this.renderer.warpBufferToDataURL()}}}})},t.exports=e()}}]);