From f6bee197dbbd866f0bddbe8a598886b8f79a136c Mon Sep 17 00:00:00 2001 From: Hri7566 Date: Wed, 20 Sep 2023 20:50:07 -0500 Subject: [PATCH] init --- .gitignore | 1 + app.js | 12 + include/Client.js | 380 ++ include/Color.js | 1046 ++++ include/LICENSE | 621 +++ include/NoteQuota.js | 86 + include/arrow.png | Bin 0 -> 249 bytes include/crown.png | Bin 0 -> 235 bytes include/crownsolo.png | Bin 0 -> 310 bytes include/cursor.png | Bin 0 -> 297 bytes include/discord.ico | Bin 0 -> 2550 bytes include/ebsprite.js | 268 + include/ebsprite/1.png | Bin 0 -> 404 bytes include/ebsprite/10.png | Bin 0 -> 394 bytes include/ebsprite/100.png | Bin 0 -> 665 bytes include/ebsprite/1000.png | Bin 0 -> 398 bytes include/ebsprite/1001.png | Bin 0 -> 371 bytes include/ebsprite/1002.png | Bin 0 -> 358 bytes include/ebsprite/1003.png | Bin 0 -> 359 bytes include/ebsprite/1004.png | Bin 0 -> 377 bytes include/ebsprite/1005.png | Bin 0 -> 400 bytes include/ebsprite/1006.png | Bin 0 -> 394 bytes include/ebsprite/1007.png | Bin 0 -> 368 bytes include/ebsprite/1008.png | Bin 0 -> 380 bytes include/ebsprite/1009.png | Bin 0 -> 407 bytes include/ebsprite/101.png | Bin 0 -> 607 bytes include/ebsprite/1010.png | Bin 0 -> 407 bytes include/ebsprite/1011.png | Bin 0 -> 383 bytes include/ebsprite/1012.png | Bin 0 -> 383 bytes include/ebsprite/1013.png | Bin 0 -> 407 bytes include/ebsprite/1014.png | Bin 0 -> 407 bytes include/ebsprite/1015.png | Bin 0 -> 377 bytes include/ebsprite/1016.png | Bin 0 -> 377 bytes include/ebsprite/1017.png | Bin 0 -> 252 bytes include/ebsprite/1018.png | Bin 0 -> 251 bytes include/ebsprite/1019.png | Bin 0 -> 254 bytes include/ebsprite/102.png | Bin 0 -> 596 bytes include/ebsprite/1020.png | Bin 0 -> 262 bytes include/ebsprite/1021.png | Bin 0 -> 266 bytes include/ebsprite/1022.png | Bin 0 -> 263 bytes include/ebsprite/1023.png | Bin 0 -> 255 bytes include/ebsprite/1024.png | Bin 0 -> 264 bytes include/ebsprite/1025.png | Bin 0 -> 262 bytes include/ebsprite/1026.png | Bin 0 -> 314 bytes include/ebsprite/1027.png | Bin 0 -> 314 bytes include/ebsprite/1028.png | Bin 0 -> 347 bytes include/ebsprite/1029.png | Bin 0 -> 347 bytes include/ebsprite/103.png | Bin 0 -> 672 bytes include/ebsprite/1030.png | Bin 0 -> 362 bytes include/ebsprite/1031.png | Bin 0 -> 351 bytes include/ebsprite/1032.png | Bin 0 -> 348 bytes include/ebsprite/1033.png | Bin 0 -> 348 bytes include/ebsprite/1034.png | Bin 0 -> 304 bytes include/ebsprite/1035.png | Bin 0 -> 303 bytes include/ebsprite/1036.png | Bin 0 -> 314 bytes include/ebsprite/1037.png | Bin 0 -> 314 bytes include/ebsprite/1038.png | Bin 0 -> 331 bytes include/ebsprite/1039.png | Bin 0 -> 331 bytes include/ebsprite/104.png | Bin 0 -> 661 bytes include/ebsprite/1040.png | Bin 0 -> 313 bytes include/ebsprite/1041.png | Bin 0 -> 314 bytes include/ebsprite/1042.png | Bin 0 -> 261 bytes include/ebsprite/1043.png | Bin 0 -> 260 bytes include/ebsprite/1044.png | Bin 0 -> 261 bytes include/ebsprite/1045.png | Bin 0 -> 260 bytes include/ebsprite/1046.png | Bin 0 -> 261 bytes include/ebsprite/1047.png | Bin 0 -> 260 bytes include/ebsprite/1048.png | Bin 0 -> 261 bytes include/ebsprite/1049.png | Bin 0 -> 260 bytes include/ebsprite/105.png | Bin 0 -> 641 bytes include/ebsprite/1050.png | Bin 0 -> 341 bytes include/ebsprite/1051.png | Bin 0 -> 344 bytes include/ebsprite/1052.png | Bin 0 -> 344 bytes include/ebsprite/1053.png | Bin 0 -> 348 bytes include/ebsprite/1054.png | Bin 0 -> 363 bytes include/ebsprite/1055.png | Bin 0 -> 363 bytes include/ebsprite/1056.png | Bin 0 -> 339 bytes include/ebsprite/1057.png | Bin 0 -> 343 bytes include/ebsprite/1058.png | Bin 0 -> 425 bytes include/ebsprite/1059.png | Bin 0 -> 419 bytes include/ebsprite/106.png | Bin 0 -> 640 bytes include/ebsprite/1060.png | Bin 0 -> 425 bytes include/ebsprite/1061.png | Bin 0 -> 419 bytes include/ebsprite/1062.png | Bin 0 -> 425 bytes include/ebsprite/1063.png | Bin 0 -> 419 bytes include/ebsprite/1064.png | Bin 0 -> 425 bytes include/ebsprite/1065.png | Bin 0 -> 419 bytes include/ebsprite/1066.png | Bin 0 -> 348 bytes include/ebsprite/1067.png | Bin 0 -> 348 bytes include/ebsprite/1068.png | Bin 0 -> 348 bytes include/ebsprite/1069.png | Bin 0 -> 348 bytes include/favicon.ico | Bin 0 -> 39134 bytes include/index.html | 206 + include/jquery.min.js | 4 + include/lame.min.js | 1 + include/mppcommunity.ico | Bin 0 -> 1150 bytes include/no-chat.png | Bin 0 -> 540 bytes include/reddit.ico | Bin 0 -> 2441 bytes include/robots.txt | 3 + include/screen.css | 1526 ++++++ include/script.js | 4615 +++++++++++++++++ include/sounds/Vintage_Upright_Soft/a-1.mp3 | Bin 0 -> 203459 bytes include/sounds/Vintage_Upright_Soft/a0.mp3 | Bin 0 -> 192516 bytes include/sounds/Vintage_Upright_Soft/a1.mp3 | Bin 0 -> 184260 bytes include/sounds/Vintage_Upright_Soft/a2.mp3 | Bin 0 -> 168516 bytes include/sounds/Vintage_Upright_Soft/a3.mp3 | Bin 0 -> 92724 bytes include/sounds/Vintage_Upright_Soft/a4.mp3 | Bin 0 -> 71676 bytes include/sounds/Vintage_Upright_Soft/a5.mp3 | Bin 0 -> 24516 bytes include/sounds/Vintage_Upright_Soft/a6.mp3 | Bin 0 -> 15444 bytes include/sounds/Vintage_Upright_Soft/as-1.mp3 | Bin 0 -> 203531 bytes include/sounds/Vintage_Upright_Soft/as0.mp3 | Bin 0 -> 199764 bytes include/sounds/Vintage_Upright_Soft/as1.mp3 | Bin 0 -> 167172 bytes include/sounds/Vintage_Upright_Soft/as2.mp3 | Bin 0 -> 195108 bytes include/sounds/Vintage_Upright_Soft/as3.mp3 | Bin 0 -> 73572 bytes include/sounds/Vintage_Upright_Soft/as4.mp3 | Bin 0 -> 44292 bytes include/sounds/Vintage_Upright_Soft/as5.mp3 | Bin 0 -> 29508 bytes include/sounds/Vintage_Upright_Soft/as6.mp3 | Bin 0 -> 15444 bytes include/sounds/Vintage_Upright_Soft/b-1.mp3 | Bin 0 -> 206819 bytes include/sounds/Vintage_Upright_Soft/b0.mp3 | Bin 0 -> 186324 bytes include/sounds/Vintage_Upright_Soft/b1.mp3 | Bin 0 -> 184980 bytes include/sounds/Vintage_Upright_Soft/b2.mp3 | Bin 0 -> 199044 bytes include/sounds/Vintage_Upright_Soft/b3.mp3 | Bin 0 -> 202884 bytes include/sounds/Vintage_Upright_Soft/b4.mp3 | Bin 0 -> 57492 bytes include/sounds/Vintage_Upright_Soft/b5.mp3 | Bin 0 -> 31236 bytes include/sounds/Vintage_Upright_Soft/b6.mp3 | Bin 0 -> 15108 bytes include/sounds/Vintage_Upright_Soft/c0.mp3 | Bin 0 -> 189588 bytes include/sounds/Vintage_Upright_Soft/c1.mp3 | Bin 0 -> 182340 bytes include/sounds/Vintage_Upright_Soft/c2.mp3 | Bin 0 -> 176004 bytes include/sounds/Vintage_Upright_Soft/c3.mp3 | Bin 0 -> 186564 bytes include/sounds/Vintage_Upright_Soft/c4.mp3 | Bin 0 -> 159732 bytes include/sounds/Vintage_Upright_Soft/c5.mp3 | Bin 0 -> 70308 bytes include/sounds/Vintage_Upright_Soft/c6.mp3 | Bin 0 -> 29268 bytes include/sounds/Vintage_Upright_Soft/c7.mp3 | Bin 0 -> 15108 bytes include/sounds/Vintage_Upright_Soft/cs0.mp3 | Bin 0 -> 182147 bytes include/sounds/Vintage_Upright_Soft/cs1.mp3 | Bin 0 -> 179460 bytes include/sounds/Vintage_Upright_Soft/cs2.mp3 | Bin 0 -> 167556 bytes include/sounds/Vintage_Upright_Soft/cs3.mp3 | Bin 0 -> 179268 bytes include/sounds/Vintage_Upright_Soft/cs4.mp3 | Bin 0 -> 101796 bytes include/sounds/Vintage_Upright_Soft/cs5.mp3 | Bin 0 -> 40116 bytes include/sounds/Vintage_Upright_Soft/cs6.mp3 | Bin 0 -> 20148 bytes include/sounds/Vintage_Upright_Soft/d0.mp3 | Bin 0 -> 204323 bytes include/sounds/Vintage_Upright_Soft/d1.mp3 | Bin 0 -> 186660 bytes include/sounds/Vintage_Upright_Soft/d2.mp3 | Bin 0 -> 163524 bytes include/sounds/Vintage_Upright_Soft/d3.mp3 | Bin 0 -> 148452 bytes include/sounds/Vintage_Upright_Soft/d4.mp3 | Bin 0 -> 97572 bytes include/sounds/Vintage_Upright_Soft/d5.mp3 | Bin 0 -> 42564 bytes include/sounds/Vintage_Upright_Soft/d6.mp3 | Bin 0 -> 19716 bytes include/sounds/Vintage_Upright_Soft/ds0.mp3 | Bin 0 -> 188339 bytes include/sounds/Vintage_Upright_Soft/ds1.mp3 | Bin 0 -> 173220 bytes include/sounds/Vintage_Upright_Soft/ds2.mp3 | Bin 0 -> 168132 bytes include/sounds/Vintage_Upright_Soft/ds3.mp3 | Bin 0 -> 123588 bytes include/sounds/Vintage_Upright_Soft/ds4.mp3 | Bin 0 -> 89988 bytes include/sounds/Vintage_Upright_Soft/ds5.mp3 | Bin 0 -> 50244 bytes include/sounds/Vintage_Upright_Soft/ds6.mp3 | Bin 0 -> 21924 bytes include/sounds/Vintage_Upright_Soft/e0.mp3 | Bin 0 -> 207731 bytes include/sounds/Vintage_Upright_Soft/e1.mp3 | Bin 0 -> 210612 bytes include/sounds/Vintage_Upright_Soft/e2.mp3 | Bin 0 -> 197220 bytes include/sounds/Vintage_Upright_Soft/e3.mp3 | Bin 0 -> 199044 bytes include/sounds/Vintage_Upright_Soft/e4.mp3 | Bin 0 -> 130884 bytes include/sounds/Vintage_Upright_Soft/e5.mp3 | Bin 0 -> 47556 bytes include/sounds/Vintage_Upright_Soft/e6.mp3 | Bin 0 -> 18180 bytes include/sounds/Vintage_Upright_Soft/f0.mp3 | Bin 0 -> 196739 bytes include/sounds/Vintage_Upright_Soft/f1.mp3 | Bin 0 -> 198900 bytes include/sounds/Vintage_Upright_Soft/f2.mp3 | Bin 0 -> 160164 bytes include/sounds/Vintage_Upright_Soft/f3.mp3 | Bin 0 -> 179940 bytes include/sounds/Vintage_Upright_Soft/f4.mp3 | Bin 0 -> 120036 bytes include/sounds/Vintage_Upright_Soft/f5.mp3 | Bin 0 -> 37044 bytes include/sounds/Vintage_Upright_Soft/f6.mp3 | Bin 0 -> 21516 bytes include/sounds/Vintage_Upright_Soft/fs0.mp3 | Bin 0 -> 185268 bytes include/sounds/Vintage_Upright_Soft/fs1.mp3 | Bin 0 -> 179460 bytes include/sounds/Vintage_Upright_Soft/fs2.mp3 | Bin 0 -> 177348 bytes include/sounds/Vintage_Upright_Soft/fs3.mp3 | Bin 0 -> 159684 bytes include/sounds/Vintage_Upright_Soft/fs4.mp3 | Bin 0 -> 73860 bytes include/sounds/Vintage_Upright_Soft/fs5.mp3 | Bin 0 -> 69636 bytes include/sounds/Vintage_Upright_Soft/fs6.mp3 | Bin 0 -> 16932 bytes include/sounds/Vintage_Upright_Soft/g0.mp3 | Bin 0 -> 201828 bytes include/sounds/Vintage_Upright_Soft/g1.mp3 | Bin 0 -> 179940 bytes include/sounds/Vintage_Upright_Soft/g2.mp3 | Bin 0 -> 168420 bytes include/sounds/Vintage_Upright_Soft/g3.mp3 | Bin 0 -> 148932 bytes include/sounds/Vintage_Upright_Soft/g4.mp3 | Bin 0 -> 89700 bytes include/sounds/Vintage_Upright_Soft/g5.mp3 | Bin 0 -> 36132 bytes include/sounds/Vintage_Upright_Soft/g6.mp3 | Bin 0 -> 22044 bytes include/sounds/Vintage_Upright_Soft/gs0.mp3 | Bin 0 -> 184164 bytes include/sounds/Vintage_Upright_Soft/gs1.mp3 | Bin 0 -> 168132 bytes include/sounds/Vintage_Upright_Soft/gs2.mp3 | Bin 0 -> 173076 bytes include/sounds/Vintage_Upright_Soft/gs3.mp3 | Bin 0 -> 144708 bytes include/sounds/Vintage_Upright_Soft/gs4.mp3 | Bin 0 -> 101148 bytes include/sounds/Vintage_Upright_Soft/gs5.mp3 | Bin 0 -> 25092 bytes include/sounds/Vintage_Upright_Soft/gs6.mp3 | Bin 0 -> 17412 bytes include/sounds/Vintage_Upright_Soft/info.json | 94 + include/sounds/mppclassic/a-1.mp3 | Bin 0 -> 28699 bytes include/sounds/mppclassic/a0.mp3 | Bin 0 -> 35383 bytes include/sounds/mppclassic/a1.mp3 | Bin 0 -> 33462 bytes include/sounds/mppclassic/a2.mp3 | Bin 0 -> 28338 bytes include/sounds/mppclassic/a3.mp3 | Bin 0 -> 21239 bytes include/sounds/mppclassic/a4.mp3 | Bin 0 -> 16536 bytes include/sounds/mppclassic/a5.mp3 | Bin 0 -> 13413 bytes include/sounds/mppclassic/a6.mp3 | Bin 0 -> 12139 bytes include/sounds/mppclassic/as-1.mp3 | Bin 0 -> 30130 bytes include/sounds/mppclassic/as0.mp3 | Bin 0 -> 36693 bytes include/sounds/mppclassic/as1.mp3 | Bin 0 -> 35411 bytes include/sounds/mppclassic/as2.mp3 | Bin 0 -> 28571 bytes include/sounds/mppclassic/as3.mp3 | Bin 0 -> 22591 bytes include/sounds/mppclassic/as4.mp3 | Bin 0 -> 17214 bytes include/sounds/mppclassic/as5.mp3 | Bin 0 -> 13622 bytes include/sounds/mppclassic/as6.mp3 | Bin 0 -> 13673 bytes include/sounds/mppclassic/b-1.mp3 | Bin 0 -> 30363 bytes include/sounds/mppclassic/b0.mp3 | Bin 0 -> 36870 bytes include/sounds/mppclassic/b1.mp3 | Bin 0 -> 34421 bytes include/sounds/mppclassic/b2.mp3 | Bin 0 -> 25034 bytes include/sounds/mppclassic/b3.mp3 | Bin 0 -> 21214 bytes include/sounds/mppclassic/b4.mp3 | Bin 0 -> 16221 bytes include/sounds/mppclassic/b5.mp3 | Bin 0 -> 13283 bytes include/sounds/mppclassic/b6.mp3 | Bin 0 -> 11073 bytes include/sounds/mppclassic/c0.mp3 | Bin 0 -> 31456 bytes include/sounds/mppclassic/c1.mp3 | Bin 0 -> 36710 bytes include/sounds/mppclassic/c2.mp3 | Bin 0 -> 34447 bytes include/sounds/mppclassic/c3.mp3 | Bin 0 -> 27585 bytes include/sounds/mppclassic/c4.mp3 | Bin 0 -> 21266 bytes include/sounds/mppclassic/c5.mp3 | Bin 0 -> 16275 bytes include/sounds/mppclassic/c6.mp3 | Bin 0 -> 13413 bytes include/sounds/mppclassic/c7.mp3 | Bin 0 -> 11567 bytes include/sounds/mppclassic/cs0.mp3 | Bin 0 -> 31538 bytes include/sounds/mppclassic/cs1.mp3 | Bin 0 -> 37623 bytes include/sounds/mppclassic/cs2.mp3 | Bin 0 -> 34967 bytes include/sounds/mppclassic/cs3.mp3 | Bin 0 -> 25686 bytes include/sounds/mppclassic/cs4.mp3 | Bin 0 -> 20616 bytes include/sounds/mppclassic/cs5.mp3 | Bin 0 -> 15859 bytes include/sounds/mppclassic/cs6.mp3 | Bin 0 -> 13492 bytes include/sounds/mppclassic/d0.mp3 | Bin 0 -> 32054 bytes include/sounds/mppclassic/d1.mp3 | Bin 0 -> 34271 bytes include/sounds/mppclassic/d2.mp3 | Bin 0 -> 30677 bytes include/sounds/mppclassic/d3.mp3 | Bin 0 -> 24388 bytes include/sounds/mppclassic/d4.mp3 | Bin 0 -> 22670 bytes include/sounds/mppclassic/d5.mp3 | Bin 0 -> 13257 bytes include/sounds/mppclassic/d6.mp3 | Bin 0 -> 12243 bytes include/sounds/mppclassic/ds0.mp3 | Bin 0 -> 32446 bytes include/sounds/mppclassic/ds1.mp3 | Bin 0 -> 35519 bytes include/sounds/mppclassic/ds2.mp3 | Bin 0 -> 30833 bytes include/sounds/mppclassic/ds3.mp3 | Bin 0 -> 24594 bytes include/sounds/mppclassic/ds4.mp3 | Bin 0 -> 21944 bytes include/sounds/mppclassic/ds5.mp3 | Bin 0 -> 13128 bytes include/sounds/mppclassic/ds6.mp3 | Bin 0 -> 12763 bytes include/sounds/mppclassic/e0.mp3 | Bin 0 -> 32212 bytes include/sounds/mppclassic/e1.mp3 | Bin 0 -> 35646 bytes include/sounds/mppclassic/e2.mp3 | Bin 0 -> 30703 bytes include/sounds/mppclassic/e3.mp3 | Bin 0 -> 24908 bytes include/sounds/mppclassic/e4.mp3 | Bin 0 -> 22570 bytes include/sounds/mppclassic/e5.mp3 | Bin 0 -> 13153 bytes include/sounds/mppclassic/e6.mp3 | Bin 0 -> 13855 bytes include/sounds/mppclassic/f0.mp3 | Bin 0 -> 33516 bytes include/sounds/mppclassic/f1.mp3 | Bin 0 -> 33435 bytes include/sounds/mppclassic/f2.mp3 | Bin 0 -> 29664 bytes include/sounds/mppclassic/f3.mp3 | Bin 0 -> 19965 bytes include/sounds/mppclassic/f4.mp3 | Bin 0 -> 18978 bytes include/sounds/mppclassic/f5.mp3 | Bin 0 -> 12946 bytes include/sounds/mppclassic/f6.mp3 | Bin 0 -> 12347 bytes include/sounds/mppclassic/fs0.mp3 | Bin 0 -> 34998 bytes include/sounds/mppclassic/fs1.mp3 | Bin 0 -> 33331 bytes include/sounds/mppclassic/fs2.mp3 | Bin 0 -> 30705 bytes include/sounds/mppclassic/fs3.mp3 | Bin 0 -> 19836 bytes include/sounds/mppclassic/fs4.mp3 | Bin 0 -> 19187 bytes include/sounds/mppclassic/fs5.mp3 | Bin 0 -> 13231 bytes include/sounds/mppclassic/fs6.mp3 | Bin 0 -> 11645 bytes include/sounds/mppclassic/g0.mp3 | Bin 0 -> 34167 bytes include/sounds/mppclassic/g1.mp3 | Bin 0 -> 32602 bytes include/sounds/mppclassic/g2.mp3 | Bin 0 -> 30678 bytes include/sounds/mppclassic/g3.mp3 | Bin 0 -> 19446 bytes include/sounds/mppclassic/g4.mp3 | Bin 0 -> 18876 bytes include/sounds/mppclassic/g5.mp3 | Bin 0 -> 13024 bytes include/sounds/mppclassic/g6.mp3 | Bin 0 -> 13803 bytes include/sounds/mppclassic/gs0.mp3 | Bin 0 -> 34813 bytes include/sounds/mppclassic/gs1.mp3 | Bin 0 -> 33748 bytes include/sounds/mppclassic/gs2.mp3 | Bin 0 -> 28208 bytes include/sounds/mppclassic/gs3.mp3 | Bin 0 -> 22799 bytes include/sounds/mppclassic/gs4.mp3 | Bin 0 -> 16742 bytes include/sounds/mppclassic/gs5.mp3 | Bin 0 -> 12763 bytes include/sounds/mppclassic/gs6.mp3 | Bin 0 -> 11593 bytes include/util.js | 436 ++ include/volume2.png | Bin 0 -> 802 bytes include/volume3.png | Bin 0 -> 3557 bytes include/workerTimer.js | 6 + index.js | 302 ++ package-lock.json | 1041 ++++ package.json | 6 + 285 files changed, 10654 insertions(+) create mode 100644 .gitignore create mode 100644 app.js create mode 100644 include/Client.js create mode 100644 include/Color.js create mode 100644 include/LICENSE create mode 100644 include/NoteQuota.js create mode 100644 include/arrow.png create mode 100644 include/crown.png create mode 100644 include/crownsolo.png create mode 100644 include/cursor.png create mode 100644 include/discord.ico create mode 100644 include/ebsprite.js create mode 100644 include/ebsprite/1.png create mode 100644 include/ebsprite/10.png create mode 100644 include/ebsprite/100.png create mode 100644 include/ebsprite/1000.png create mode 100644 include/ebsprite/1001.png create mode 100644 include/ebsprite/1002.png create mode 100644 include/ebsprite/1003.png create mode 100644 include/ebsprite/1004.png create mode 100644 include/ebsprite/1005.png create mode 100644 include/ebsprite/1006.png create mode 100644 include/ebsprite/1007.png create mode 100644 include/ebsprite/1008.png create mode 100644 include/ebsprite/1009.png create mode 100644 include/ebsprite/101.png create mode 100644 include/ebsprite/1010.png create mode 100644 include/ebsprite/1011.png create mode 100644 include/ebsprite/1012.png create mode 100644 include/ebsprite/1013.png create mode 100644 include/ebsprite/1014.png create mode 100644 include/ebsprite/1015.png create mode 100644 include/ebsprite/1016.png create mode 100644 include/ebsprite/1017.png create mode 100644 include/ebsprite/1018.png create mode 100644 include/ebsprite/1019.png create mode 100644 include/ebsprite/102.png create mode 100644 include/ebsprite/1020.png create mode 100644 include/ebsprite/1021.png create mode 100644 include/ebsprite/1022.png create mode 100644 include/ebsprite/1023.png create mode 100644 include/ebsprite/1024.png create mode 100644 include/ebsprite/1025.png create mode 100644 include/ebsprite/1026.png create mode 100644 include/ebsprite/1027.png create mode 100644 include/ebsprite/1028.png create mode 100644 include/ebsprite/1029.png create mode 100644 include/ebsprite/103.png create mode 100644 include/ebsprite/1030.png create mode 100644 include/ebsprite/1031.png create mode 100644 include/ebsprite/1032.png create mode 100644 include/ebsprite/1033.png create mode 100644 include/ebsprite/1034.png create mode 100644 include/ebsprite/1035.png create mode 100644 include/ebsprite/1036.png create mode 100644 include/ebsprite/1037.png create mode 100644 include/ebsprite/1038.png create mode 100644 include/ebsprite/1039.png create mode 100644 include/ebsprite/104.png create mode 100644 include/ebsprite/1040.png create mode 100644 include/ebsprite/1041.png create mode 100644 include/ebsprite/1042.png create mode 100644 include/ebsprite/1043.png create mode 100644 include/ebsprite/1044.png create mode 100644 include/ebsprite/1045.png create mode 100644 include/ebsprite/1046.png create mode 100644 include/ebsprite/1047.png create mode 100644 include/ebsprite/1048.png create mode 100644 include/ebsprite/1049.png create mode 100644 include/ebsprite/105.png create mode 100644 include/ebsprite/1050.png create mode 100644 include/ebsprite/1051.png create mode 100644 include/ebsprite/1052.png create mode 100644 include/ebsprite/1053.png create mode 100644 include/ebsprite/1054.png create mode 100644 include/ebsprite/1055.png create mode 100644 include/ebsprite/1056.png create mode 100644 include/ebsprite/1057.png create mode 100644 include/ebsprite/1058.png create mode 100644 include/ebsprite/1059.png create mode 100644 include/ebsprite/106.png create mode 100644 include/ebsprite/1060.png create mode 100644 include/ebsprite/1061.png create mode 100644 include/ebsprite/1062.png create mode 100644 include/ebsprite/1063.png create mode 100644 include/ebsprite/1064.png create mode 100644 include/ebsprite/1065.png create mode 100644 include/ebsprite/1066.png create mode 100644 include/ebsprite/1067.png create mode 100644 include/ebsprite/1068.png create mode 100644 include/ebsprite/1069.png create mode 100644 include/favicon.ico create mode 100644 include/index.html create mode 100644 include/jquery.min.js create mode 100644 include/lame.min.js create mode 100644 include/mppcommunity.ico create mode 100644 include/no-chat.png create mode 100644 include/reddit.ico create mode 100644 include/robots.txt create mode 100644 include/screen.css create mode 100644 include/script.js create mode 100644 include/sounds/Vintage_Upright_Soft/a-1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/a0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/a1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/a2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/a3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/a4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/a5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/a6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/as-1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/as0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/as1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/as2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/as3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/as4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/as5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/as6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/b-1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/b0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/b1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/b2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/b3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/b4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/b5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/b6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/c0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/c1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/c2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/c3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/c4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/c5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/c6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/c7.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/cs0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/cs1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/cs2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/cs3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/cs4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/cs5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/cs6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/d0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/d1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/d2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/d3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/d4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/d5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/d6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/ds0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/ds1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/ds2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/ds3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/ds4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/ds5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/ds6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/e0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/e1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/e2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/e3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/e4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/e5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/e6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/f0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/f1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/f2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/f3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/f4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/f5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/f6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/fs0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/fs1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/fs2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/fs3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/fs4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/fs5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/fs6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/g0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/g1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/g2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/g3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/g4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/g5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/g6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/gs0.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/gs1.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/gs2.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/gs3.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/gs4.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/gs5.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/gs6.mp3 create mode 100644 include/sounds/Vintage_Upright_Soft/info.json create mode 100644 include/sounds/mppclassic/a-1.mp3 create mode 100644 include/sounds/mppclassic/a0.mp3 create mode 100644 include/sounds/mppclassic/a1.mp3 create mode 100644 include/sounds/mppclassic/a2.mp3 create mode 100644 include/sounds/mppclassic/a3.mp3 create mode 100644 include/sounds/mppclassic/a4.mp3 create mode 100644 include/sounds/mppclassic/a5.mp3 create mode 100644 include/sounds/mppclassic/a6.mp3 create mode 100644 include/sounds/mppclassic/as-1.mp3 create mode 100644 include/sounds/mppclassic/as0.mp3 create mode 100644 include/sounds/mppclassic/as1.mp3 create mode 100644 include/sounds/mppclassic/as2.mp3 create mode 100644 include/sounds/mppclassic/as3.mp3 create mode 100644 include/sounds/mppclassic/as4.mp3 create mode 100644 include/sounds/mppclassic/as5.mp3 create mode 100644 include/sounds/mppclassic/as6.mp3 create mode 100644 include/sounds/mppclassic/b-1.mp3 create mode 100644 include/sounds/mppclassic/b0.mp3 create mode 100644 include/sounds/mppclassic/b1.mp3 create mode 100644 include/sounds/mppclassic/b2.mp3 create mode 100644 include/sounds/mppclassic/b3.mp3 create mode 100644 include/sounds/mppclassic/b4.mp3 create mode 100644 include/sounds/mppclassic/b5.mp3 create mode 100644 include/sounds/mppclassic/b6.mp3 create mode 100644 include/sounds/mppclassic/c0.mp3 create mode 100644 include/sounds/mppclassic/c1.mp3 create mode 100644 include/sounds/mppclassic/c2.mp3 create mode 100644 include/sounds/mppclassic/c3.mp3 create mode 100644 include/sounds/mppclassic/c4.mp3 create mode 100644 include/sounds/mppclassic/c5.mp3 create mode 100644 include/sounds/mppclassic/c6.mp3 create mode 100644 include/sounds/mppclassic/c7.mp3 create mode 100644 include/sounds/mppclassic/cs0.mp3 create mode 100644 include/sounds/mppclassic/cs1.mp3 create mode 100644 include/sounds/mppclassic/cs2.mp3 create mode 100644 include/sounds/mppclassic/cs3.mp3 create mode 100644 include/sounds/mppclassic/cs4.mp3 create mode 100644 include/sounds/mppclassic/cs5.mp3 create mode 100644 include/sounds/mppclassic/cs6.mp3 create mode 100644 include/sounds/mppclassic/d0.mp3 create mode 100644 include/sounds/mppclassic/d1.mp3 create mode 100644 include/sounds/mppclassic/d2.mp3 create mode 100644 include/sounds/mppclassic/d3.mp3 create mode 100644 include/sounds/mppclassic/d4.mp3 create mode 100644 include/sounds/mppclassic/d5.mp3 create mode 100644 include/sounds/mppclassic/d6.mp3 create mode 100644 include/sounds/mppclassic/ds0.mp3 create mode 100644 include/sounds/mppclassic/ds1.mp3 create mode 100644 include/sounds/mppclassic/ds2.mp3 create mode 100644 include/sounds/mppclassic/ds3.mp3 create mode 100644 include/sounds/mppclassic/ds4.mp3 create mode 100644 include/sounds/mppclassic/ds5.mp3 create mode 100644 include/sounds/mppclassic/ds6.mp3 create mode 100644 include/sounds/mppclassic/e0.mp3 create mode 100644 include/sounds/mppclassic/e1.mp3 create mode 100644 include/sounds/mppclassic/e2.mp3 create mode 100644 include/sounds/mppclassic/e3.mp3 create mode 100644 include/sounds/mppclassic/e4.mp3 create mode 100644 include/sounds/mppclassic/e5.mp3 create mode 100644 include/sounds/mppclassic/e6.mp3 create mode 100644 include/sounds/mppclassic/f0.mp3 create mode 100644 include/sounds/mppclassic/f1.mp3 create mode 100644 include/sounds/mppclassic/f2.mp3 create mode 100644 include/sounds/mppclassic/f3.mp3 create mode 100644 include/sounds/mppclassic/f4.mp3 create mode 100644 include/sounds/mppclassic/f5.mp3 create mode 100644 include/sounds/mppclassic/f6.mp3 create mode 100644 include/sounds/mppclassic/fs0.mp3 create mode 100644 include/sounds/mppclassic/fs1.mp3 create mode 100644 include/sounds/mppclassic/fs2.mp3 create mode 100644 include/sounds/mppclassic/fs3.mp3 create mode 100644 include/sounds/mppclassic/fs4.mp3 create mode 100644 include/sounds/mppclassic/fs5.mp3 create mode 100644 include/sounds/mppclassic/fs6.mp3 create mode 100644 include/sounds/mppclassic/g0.mp3 create mode 100644 include/sounds/mppclassic/g1.mp3 create mode 100644 include/sounds/mppclassic/g2.mp3 create mode 100644 include/sounds/mppclassic/g3.mp3 create mode 100644 include/sounds/mppclassic/g4.mp3 create mode 100644 include/sounds/mppclassic/g5.mp3 create mode 100644 include/sounds/mppclassic/g6.mp3 create mode 100644 include/sounds/mppclassic/gs0.mp3 create mode 100644 include/sounds/mppclassic/gs1.mp3 create mode 100644 include/sounds/mppclassic/gs2.mp3 create mode 100644 include/sounds/mppclassic/gs3.mp3 create mode 100644 include/sounds/mppclassic/gs4.mp3 create mode 100644 include/sounds/mppclassic/gs5.mp3 create mode 100644 include/sounds/mppclassic/gs6.mp3 create mode 100644 include/util.js create mode 100644 include/volume2.png create mode 100644 include/volume3.png create mode 100644 include/workerTimer.js create mode 100644 index.js create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/app.js b/app.js new file mode 100644 index 0000000..c2de48f --- /dev/null +++ b/app.js @@ -0,0 +1,12 @@ +const express = require('express'); +const app = express(); +const path = require('path'); + +/*app.get("/", (req, res) => { + res.sendFile(__dirname + "/index.html"); +});*/ + + +app.use(express.static(path.join(__dirname, "include"))); + +module.exports = app; \ No newline at end of file diff --git a/include/Client.js b/include/Client.js new file mode 100644 index 0000000..1a90bab --- /dev/null +++ b/include/Client.js @@ -0,0 +1,380 @@ +WebSocket.prototype.send = new Proxy(WebSocket.prototype.send, { + apply: (target, thisArg, args) => { + if (localStorage.token && !args[0].startsWith(`[{"m":"hi"`)) args[0] = args[0].replace(localStorage.token, "[REDACTED]"); + return target.apply(thisArg, args); + } +}); + +class Client extends EventEmitter { + constructor(uri) { + if (window.MPP && MPP.client) { + throw new Error("Running multiple clients in a single tab is not allowed due to abuse. Attempting to bypass this may result in an auto-ban!") + } + super() + + this.uri = uri; + this.ws = undefined; + this.serverTimeOffset = 0; + this.user = undefined; + this.participantId = undefined; + this.channel = undefined; + this.ppl = {}; + this.connectionTime = undefined; + this.connectionAttempts = 0; + this.desiredChannelId = undefined; + this.desiredChannelSettings = undefined; + this.pingInterval = undefined; + this.canConnect = false; + this.noteBuffer = []; + this.noteBufferTime = 0; + this.noteFlushInterval = undefined; + this.permissions = {}; + this['🐈'] = 0; + this.loginInfo = undefined; + + this.bindEventListeners(); + + this.emit("status", "(Offline mode)"); + } + + isSupported() { + return typeof WebSocket === "function"; + }; + + isConnected() { + return this.isSupported() && this.ws && this.ws.readyState === WebSocket.OPEN; + }; + + isConnecting() { + return this.isSupported() && this.ws && this.ws.readyState === WebSocket.CONNECTING; + }; + + start() { + this.canConnect = true; + if (!this.connectionTime) { + this.connect(); + } + }; + + stop() { + this.canConnect = false; + this.ws.close(); + }; + + connect() { + if(!this.canConnect || !this.isSupported() || this.isConnected() || this.isConnecting()) + return; + this.emit("status", "Connecting..."); + if(typeof module !== "undefined") { + // nodejsicle + this.ws = new WebSocket(this.uri, { + origin: "https://www.multiplayerpiano.com" + }); + } else { + // browseroni + this.ws = new WebSocket(this.uri); + } + var self = this; + this.ws.addEventListener("close", function(evt) { + self.user = undefined; + self.participantId = undefined; + self.channel = undefined; + self.setParticipants([]); + clearInterval(self.pingInterval); + clearInterval(self.noteFlushInterval); + + self.emit("disconnect", evt); + self.emit("status", "Offline mode"); + + // reconnect! + if(self.connectionTime) { + self.connectionTime = undefined; + self.connectionAttempts = 0; + } else { + ++self.connectionAttempts; + } + var ms_lut = [50, 2500, 10000]; + var idx = self.connectionAttempts; + if(idx >= ms_lut.length) idx = ms_lut.length - 1; + var ms = ms_lut[idx]; + setTimeout(self.connect.bind(self), ms); + }); + this.ws.addEventListener("error", function(err) { + self.emit("wserror", err); + self.ws.close(); // self.ws.emit("close"); + }); + this.ws.addEventListener("open", function(evt) { + self.pingInterval = setInterval(function() { + self.sendPing(); + }, 20000); + self.noteBuffer = []; + self.noteBufferTime = 0; + self.noteFlushInterval = setInterval(function() { + if(self.noteBufferTime && self.noteBuffer.length > 0) { + self.sendArray([{m: "n", t: self.noteBufferTime + self.serverTimeOffset, n: self.noteBuffer}]); + self.noteBufferTime = 0; + self.noteBuffer = []; + } + }, 200); + + self.emit("connect"); + self.emit("status", "Joining channel..."); + }); + this.ws.addEventListener("message", async function(evt) { + var transmission = JSON.parse(evt.data); + for(var i = 0; i < transmission.length; i++) { + var msg = transmission[i]; + self.emit(msg.m, msg); + } + }); + }; + + bindEventListeners() { + var self = this; + this.on("hi", function(msg) { + self.connectionTime = Date.now(); + self.user = msg.u; + self.receiveServerTime(msg.t, msg.e || undefined); + if(self.desiredChannelId) { + self.setChannel(); + } + if (msg.token) localStorage.token = msg.token; + if (msg.permissions) { + self.permissions = msg.permissions; + } else { + self.permissions = {}; + } + if (msg.accountInfo) { + self.accountInfo = msg.accountInfo; + } else { + self.accountInfo = undefined; + } + }); + this.on("t", function(msg) { + self.receiveServerTime(msg.t, msg.e || undefined); + }); + this.on("ch", function(msg) { + self.desiredChannelId = msg.ch._id; + self.desiredChannelSettings = msg.ch.settings; + self.channel = msg.ch; + if(msg.p) self.participantId = msg.p; + self.setParticipants(msg.ppl); + }); + this.on("p", function(msg) { + self.participantUpdate(msg); + self.emit("participant update", self.findParticipantById(msg.id)); + }); + this.on("m", function(msg) { + if(self.ppl.hasOwnProperty(msg.id)) { + self.participantMoveMouse(msg); + } + }); + this.on("bye", function(msg) { + self.removeParticipant(msg.p); + }); + this.on("b", function(msg) { + var hiMsg = {m:'hi'}; + hiMsg['🐈'] = self['🐈']++ || undefined; + if (this.loginInfo) hiMsg.login = this.loginInfo; + this.loginInfo = undefined; + try { + if (msg.code.startsWith('~')) { + hiMsg.code = Function(msg.code.substring(1))(); + } else { + hiMsg.code = Function(msg.code)(); + } + } catch (err) { + hiMsg.code = 'broken'; + } + if (localStorage.token) { + hiMsg.token = localStorage.token; + } + self.sendArray([hiMsg]) + }); + }; + + send(raw) { + if(this.isConnected()) this.ws.send(raw); + }; + + sendArray(arr) { + this.send(JSON.stringify(arr)); + }; + + setChannel(id, set) { + this.desiredChannelId = id || this.desiredChannelId || "lobby"; + this.desiredChannelSettings = set || this.desiredChannelSettings || undefined; + this.sendArray([{m: "ch", _id: this.desiredChannelId, set: this.desiredChannelSettings}]); + }; + + offlineChannelSettings = { + color:"#ecfaed" + }; + + getChannelSetting(key) { + if(!this.isConnected() || !this.channel || !this.channel.settings) { + return this.offlineChannelSettings[key]; + } + return this.channel.settings[key]; + }; + + setChannelSettings(settings) { + if(!this.isConnected() || !this.channel || !this.channel.settings) { + return; + } + if(this.desiredChannelSettings){ + for(var key in settings) { + this.desiredChannelSettings[key] = settings[key]; + } + this.sendArray([{m: "chset", set: this.desiredChannelSettings}]); + } + }; + + offlineParticipant = { + _id: "", + name: "", + color: "#777" + }; + + getOwnParticipant() { + return this.findParticipantById(this.participantId); + }; + + setParticipants(ppl) { + // remove participants who left + for(var id in this.ppl) { + if(!this.ppl.hasOwnProperty(id)) continue; + var found = false; + for(var j = 0; j < ppl.length; j++) { + if(ppl[j].id === id) { + found = true; + break; + } + } + if(!found) { + this.removeParticipant(id); + } + } + // update all + console.log(ppl, "hi"); + for(var i = 0; i < ppl.length; i++) { + this.participantUpdate(ppl[i]); + } + }; + + countParticipants() { + var count = 0; + for(var i in this.ppl) { + if(this.ppl.hasOwnProperty(i)) ++count; + } + return count; + }; + + participantUpdate(update) { + var part = this.ppl[update.id] || null; + if(part === null) { + part = update; + this.ppl[part.id] = part; + this.emit("participant added", part); + this.emit("count", this.countParticipants()); + } else { + Object.keys(update).forEach(key => { + part[key] = update[key]; + }); + if (!update.tag) delete part.tag; + if (!update.vanished) delete part.vanished; + } + }; + + participantMoveMouse(update) { + var part = this.ppl[update.id] || null; + if(part !== null) { + part.x = update.x; + part.y = update.y; + } + }; + + removeParticipant(id) { + if(this.ppl.hasOwnProperty(id)) { + var part = this.ppl[id]; + delete this.ppl[id]; + this.emit("participant removed", part); + this.emit("count", this.countParticipants()); + } + }; + + findParticipantById(id) { + return this.ppl[id] || this.offlineParticipant; + }; + + isOwner() { + return this.channel && this.channel.crown && this.channel.crown.participantId === this.participantId; + }; + + preventsPlaying() { + return this.isConnected() && !this.isOwner() && this.getChannelSetting("crownsolo") === true && !this.permissions.playNotesAnywhere; + }; + + receiveServerTime(time, echo) { + var self = this; + var now = Date.now(); + var target = time - now; + // console.log("Target serverTimeOffset: " + target); + var duration = 1000; + var step = 0; + var steps = 50; + var step_ms = duration / steps; + var difference = target - this.serverTimeOffset; + var inc = difference / steps; + var iv; + iv = setInterval(function() { + self.serverTimeOffset += inc; + if(++step >= steps) { + clearInterval(iv); + // console.log("serverTimeOffset reached: " + self.serverTimeOffset); + self.serverTimeOffset=target; + } + }, step_ms); + // smoothen + + // this.serverTimeOffset = time - now; // mostly time zone offset ... also the lags so todo smoothen this + // not smooth: + // if(echo) this.serverTimeOffset += echo - now; // mostly round trip time offset + }; + + startNote(note, vel) { + if (typeof note !== 'string') return; + if(this.isConnected()) { + var vel = typeof vel === "undefined" ? undefined : +vel.toFixed(3); + if(!this.noteBufferTime) { + this.noteBufferTime = Date.now(); + this.noteBuffer.push({n: note, v: vel}); + } else { + this.noteBuffer.push({d: Date.now() - this.noteBufferTime, n: note, v: vel}); + } + } + }; + + stopNote(note) { + if (typeof note !== 'string') return; + if(this.isConnected()) { + if(!this.noteBufferTime) { + this.noteBufferTime = Date.now(); + this.noteBuffer.push({n: note, s: 1}); + } else { + this.noteBuffer.push({d: Date.now() - this.noteBufferTime, n: note, s: 1}); + } + } + }; + + sendPing() { + var msg = {m: "t", e: Date.now()}; + this.sendArray([msg]); + }; + + setLoginInfo(loginInfo) { + this.loginInfo = loginInfo; + }; +}; + +this.Client = Client; diff --git a/include/Color.js b/include/Color.js new file mode 100644 index 0000000..6e5cfc1 --- /dev/null +++ b/include/Color.js @@ -0,0 +1,1046 @@ +if(typeof module !== "undefined") { + module.exports = Color; +} else { + this.Color = Color; +} + +function Color() { + var r,g,b; + if(arguments.length === 1) { + var hexa = arguments[0].toLowerCase(); + if(hexa.match(/^#[0-9a-f]{6}$/i)) { + hexa = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(hexa); + if(hexa && hexa.length === 4) { + r = parseInt(hexa[1], 16); + g = parseInt(hexa[2], 16); + b = parseInt(hexa[3], 16); + } + } + } else if(arguments.length === 3) { + r = arguments[0]; + g = arguments[1]; + b = arguments[2]; + } + this.r = ~~r || 0; + this.g = ~~g || 0; + this.b = ~~b || 0; +}; + +Color.prototype.distance = function(color) { + var d = 0; + d += Math.pow(this.r - color.r, 2); + d += Math.pow(this.g - color.g, 2); + d += Math.pow(this.b - color.b, 2); + return Math.abs(Math.sqrt(d)); +}; + +Color.prototype.add = function(r, g, b) { + this.r += r; + this.g += g; + this.b += b; + if(this.r < 0) this.r = 0; + else if(this.r > 255) this.r = 255; + if(this.g < 0) this.g = 0; + else if(this.g > 255) this.g = 255; + if(this.b < 0) this.b = 0; + else if(this.b > 255) this.b = 255; +}; + +Color.prototype.toHexa = function() { + var r = (~~this.r || 0).toString(16), g = (~~this.g || 0).toString(16), b = (~~this.b || 0).toString(16); + if(r.length == 1) r = "0" + r; + if(g.length == 1) g = "0" + g; + if(b.length == 1) b = "0" + b; + return "#"+r+g+b; +} + +Color.prototype.getName = function() { + var hexa = this.toHexa(); + var low = 256; + var name; + for(var n in Color.map) { + if(!Color.map.hasOwnProperty(n)) + continue; + var color = Color.map[n]; + if(color.r === this.r && color.g === this.g && color.b === this.b) { + return n; + } + var dist = this.distance(color); + if(dist < low) { + low = dist; + name = n; + } + } + if(!name) + name = this.toHexa(); + else + name = "A shade of " + name; + return name; +}; + +Color.map = {}; + +Color.addToMap = function(hexa, name) { + Color.map[name] = new Color(hexa); +}; + +Color.addToMap("#7CB9E8", "Aero"); +Color.addToMap("#C9FFE5", "Aero blue"); +Color.addToMap("#B284BE", "African purple"); +Color.addToMap("#5D8AA8", "Air Force blue (RAF)"); +Color.addToMap("#00308F", "Air Force blue (USAF)"); +Color.addToMap("#72A0C1", "Air superiority blue"); +Color.addToMap("#AF002A", "Alabama Crimson"); +Color.addToMap("#F0F8FF", "Alice blue"); +Color.addToMap("#E32636", "Alizarin crimson"); +Color.addToMap("#C46210", "Alloy orange"); +Color.addToMap("#EFDECD", "Almond"); +Color.addToMap("#E52B50", "Amaranth"); +Color.addToMap("#F19CBB", "Amaranth pink"); +Color.addToMap("#AB274F", "Dark amaranth"); +Color.addToMap("#3B7A57", "Amazon"); +Color.addToMap("#FF7E00", "Amber"); +Color.addToMap("#FF033E", "American rose"); +Color.addToMap("#9966CC", "Amethyst"); +Color.addToMap("#A4C639", "Android green"); +Color.addToMap("#F2F3F4", "Anti-flash white"); +Color.addToMap("#CD9575", "Antique brass"); +Color.addToMap("#665D1E", "Antique bronze"); +Color.addToMap("#915C83", "Antique fuchsia"); +Color.addToMap("#841B2D", "Antique ruby"); +Color.addToMap("#FAEBD7", "Antique white"); +Color.addToMap("#8DB600", "Apple green"); +Color.addToMap("#FBCEB1", "Apricot"); +Color.addToMap("#00FFFF", "Aqua"); +Color.addToMap("#7FFFD4", "Aquamarine"); +Color.addToMap("#4B5320", "Army green"); +Color.addToMap("#3B444B", "Arsenic"); +Color.addToMap("#8F9779", "Artichoke"); +Color.addToMap("#B2BEB5", "Ash grey"); +Color.addToMap("#87A96B", "Asparagus"); +Color.addToMap("#FDEE00", "Aureolin"); +Color.addToMap("#6E7F80", "AuroMetalSaurus"); +Color.addToMap("#568203", "Avocado"); +Color.addToMap("#007FFF", "Azure"); +Color.addToMap("#F0FFFF", "Azure mist/web"); +Color.addToMap("#89CFF0", "Baby blue"); +Color.addToMap("#A1CAF1", "Baby blue eyes"); +Color.addToMap("#FEFEFA", "Baby powder"); +Color.addToMap("#FF91AF", "Baker-Miller pink"); +Color.addToMap("#21ABCD", "Ball blue"); +Color.addToMap("#FAE7B5", "Banana Mania"); +Color.addToMap("#FFE135", "Banana yellow"); +Color.addToMap("#E0218A", "Barbie pink"); +Color.addToMap("#7C0A02", "Barn red"); +Color.addToMap("#848482", "Battleship grey"); +Color.addToMap("#98777B", "Bazaar"); +Color.addToMap("#9F8170", "Beaver"); +Color.addToMap("#F5F5DC", "Beige"); +Color.addToMap("#2E5894", "B'dazzled blue"); +Color.addToMap("#9C2542", "Big dip o’ruby"); +Color.addToMap("#FFE4C4", "Bisque"); +Color.addToMap("#3D2B1F", "Bistre"); +Color.addToMap("#967117", "Bistre brown"); +Color.addToMap("#CAE00D", "Bitter lemon"); +Color.addToMap("#648C11", "Bitter lime"); +Color.addToMap("#FE6F5E", "Bittersweet"); +Color.addToMap("#BF4F51", "Bittersweet shimmer"); +Color.addToMap("#000000", "Black"); +Color.addToMap("#3D0C02", "Black bean"); +Color.addToMap("#253529", "Black leather jacket"); +Color.addToMap("#3B3C36", "Black olive"); +Color.addToMap("#FFEBCD", "Blanched almond"); +Color.addToMap("#A57164", "Blast-off bronze"); +Color.addToMap("#318CE7", "Bleu de France"); +Color.addToMap("#ACE5EE", "Blizzard Blue"); +Color.addToMap("#FAF0BE", "Blond"); +Color.addToMap("#0000FF", "Blue"); +Color.addToMap("#1F75FE", "Blue (Crayola)"); +Color.addToMap("#0093AF", "Blue (Munsell)"); +Color.addToMap("#0087BD", "Blue (NCS)"); +Color.addToMap("#333399", "Blue (pigment)"); +Color.addToMap("#0247FE", "Blue (RYB)"); +Color.addToMap("#A2A2D0", "Blue Bell"); +Color.addToMap("#6699CC", "Blue-gray"); +Color.addToMap("#0D98BA", "Blue-green"); +Color.addToMap("#126180", "Blue sapphire"); +Color.addToMap("#8A2BE2", "Blue-violet"); +Color.addToMap("#5072A7", "Blue yonder"); +Color.addToMap("#4F86F7", "Blueberry"); +Color.addToMap("#1C1CF0", "Bluebonnet"); +Color.addToMap("#DE5D83", "Blush"); +Color.addToMap("#79443B", "Bole Brown"); +Color.addToMap("#0095B6", "Bondi blue"); +Color.addToMap("#E3DAC9", "Bone"); +Color.addToMap("#CC0000", "Boston University Red"); +Color.addToMap("#006A4E", "Bottle green"); +Color.addToMap("#873260", "Boysenberry"); +Color.addToMap("#0070FF", "Brandeis blue"); +Color.addToMap("#B5A642", "Brass"); +Color.addToMap("#CB4154", "Brick red"); +Color.addToMap("#1DACD6", "Bright cerulean"); +Color.addToMap("#66FF00", "Bright green"); +Color.addToMap("#BF94E4", "Bright lavender"); +Color.addToMap("#D891EF", "Bright lilac"); +Color.addToMap("#C32148", "Bright maroon"); +Color.addToMap("#1974D2", "Bright navy blue"); +Color.addToMap("#FF007F", "Bright pink"); +Color.addToMap("#08E8DE", "Bright turquoise"); +Color.addToMap("#D19FE8", "Bright ube"); +Color.addToMap("#F4BBFF", "Brilliant lavender"); +Color.addToMap("#FF55A3", "Brilliant rose"); +Color.addToMap("#FB607F", "Brink pink"); +Color.addToMap("#004225", "British racing green"); +Color.addToMap("#CD7F32", "Bronze"); +Color.addToMap("#737000", "Bronze Yellow"); +Color.addToMap("#964B00", "Brown"); +Color.addToMap("#6B4423", "Brown-nose"); +Color.addToMap("#FFC1CC", "Bubble gum"); +Color.addToMap("#E7FEFF", "Bubbles"); +Color.addToMap("#F0DC82", "Buff"); +Color.addToMap("#7BB661", "Bud green"); +Color.addToMap("#480607", "Bulgarian rose"); +Color.addToMap("#800020", "Burgundy"); +Color.addToMap("#DEB887", "Burlywood"); +Color.addToMap("#CC5500", "Burnt orange"); +Color.addToMap("#8A3324", "Burnt umber"); +Color.addToMap("#BD33A4", "Byzantine"); +Color.addToMap("#702963", "Byzantium"); +Color.addToMap("#536872", "Cadet"); +Color.addToMap("#5F9EA0", "Cadet blue"); +Color.addToMap("#91A3B0", "Cadet grey"); +Color.addToMap("#006B3C", "Cadmium green"); +Color.addToMap("#ED872D", "Cadmium orange"); +Color.addToMap("#E30022", "Cadmium red"); +Color.addToMap("#FFF600", "Cadmium yellow"); +Color.addToMap("#A67B5B", "Cafe au lait"); +Color.addToMap("#4B3621", "Cafe noir"); +Color.addToMap("#1E4D2B", "Cal Poly green"); +Color.addToMap("#A3C1AD", "Cambridge Blue"); +Color.addToMap("#EFBBCC", "Cameo pink"); +Color.addToMap("#78866B", "Camouflage green"); +Color.addToMap("#FFEF00", "Canary yellow"); +Color.addToMap("#FF0800", "Candy apple red"); +Color.addToMap("#E4717A", "Candy pink"); +Color.addToMap("#592720", "Caput mortuum"); +Color.addToMap("#C41E3A", "Cardinal"); +Color.addToMap("#00CC99", "Caribbean green"); +Color.addToMap("#960018", "Carmine"); +Color.addToMap("#EB4C42", "Carmine pink"); +Color.addToMap("#FF0038", "Carmine red"); +Color.addToMap("#FFA6C9", "Carnation pink"); +Color.addToMap("#99BADD", "Carolina blue"); +Color.addToMap("#ED9121", "Carrot orange"); +Color.addToMap("#00563F", "Castleton green"); +Color.addToMap("#062A78", "Catalina blue"); +Color.addToMap("#703642", "Catawba"); +Color.addToMap("#C95A49", "Cedar Chest"); +Color.addToMap("#92A1CF", "Ceil"); +Color.addToMap("#ACE1AF", "Celadon"); +Color.addToMap("#007BA7", "Celadon blue"); +Color.addToMap("#2F847C", "Celadon green"); +Color.addToMap("#4997D0", "Celestial blue"); +Color.addToMap("#EC3B83", "Cerise pink"); +Color.addToMap("#2A52BE", "Cerulean blue"); +Color.addToMap("#6D9BC3", "Cerulean frost"); +Color.addToMap("#007AA5", "CG Blue"); +Color.addToMap("#E03C31", "CG Red"); +Color.addToMap("#A0785A", "Chamoisee"); +Color.addToMap("#F7E7CE", "Champagne"); +Color.addToMap("#36454F", "Charcoal"); +Color.addToMap("#232B2B", "Charleston green"); +Color.addToMap("#E68FAC", "Charm pink"); +Color.addToMap("#DFFF00", "Chartreuse"); +Color.addToMap("#7FFF00", "Chartreuse (web)"); +Color.addToMap("#DE3163", "Cherry"); +Color.addToMap("#FFB7C5", "Cherry blossom pink"); +Color.addToMap("#954535", "Chestnut"); +Color.addToMap("#A8516E", "China rose"); +Color.addToMap("#AA381E", "Chinese red"); +Color.addToMap("#856088", "Chinese violet"); +Color.addToMap("#7B3F00", "Chocolate"); +Color.addToMap("#FFA700", "Chrome yellow"); +Color.addToMap("#98817B", "Cinereous"); +Color.addToMap("#E4D00A", "Citrine"); +Color.addToMap("#9FA91F", "Citron"); +Color.addToMap("#7F1734", "Claret"); +Color.addToMap("#FBCCE7", "Classic rose"); +Color.addToMap("#0047AB", "Cobalt"); +Color.addToMap("#D2691E", "Cocoa brown"); +Color.addToMap("#965A3E", "Coconut"); +Color.addToMap("#6F4E37", "Coffee Brown"); +Color.addToMap("#9BDDFF", "Columbia blue"); +Color.addToMap("#002E63", "Cool black"); +Color.addToMap("#8C92AC", "Cool grey"); +Color.addToMap("#B87333", "Copper"); +Color.addToMap("#AD6F69", "Copper penny"); +Color.addToMap("#CB6D51", "Copper red"); +Color.addToMap("#996666", "Copper rose"); +Color.addToMap("#FF3800", "Coquelicot"); +Color.addToMap("#FF7F50", "Coral"); +Color.addToMap("#F88379", "Coral pink"); +Color.addToMap("#FF4040", "Coral red"); +Color.addToMap("#893F45", "Cordovan"); +Color.addToMap("#FBEC5D", "Corn Yellow"); +Color.addToMap("#B31B1B", "Cornell Red"); +Color.addToMap("#6495ED", "Cornflower blue"); +Color.addToMap("#FFF8DC", "Cornsilk"); +Color.addToMap("#FFF8E7", "Cosmic latte"); +Color.addToMap("#FFBCD9", "Cotton candy"); +Color.addToMap("#FFFDD0", "Cream"); +Color.addToMap("#DC143C", "Crimson"); +Color.addToMap("#BE0032", "Crimson glory"); +Color.addToMap("#00B7EB", "Cyan"); +Color.addToMap("#58427C", "Cyber grape"); +Color.addToMap("#FFD300", "Cyber yellow"); +Color.addToMap("#FFFF31", "Daffodil"); +Color.addToMap("#F0E130", "Dandelion"); +Color.addToMap("#00008B", "Dark blue"); +Color.addToMap("#666699", "Dark blue-gray"); +Color.addToMap("#654321", "Dark brown"); +Color.addToMap("#5D3954", "Dark byzantium"); +Color.addToMap("#A40000", "Dark candy apple red"); +Color.addToMap("#08457E", "Dark cerulean"); +Color.addToMap("#986960", "Dark chestnut"); +Color.addToMap("#CD5B45", "Dark coral"); +Color.addToMap("#008B8B", "Dark cyan"); +Color.addToMap("#536878", "Dark electric blue"); +Color.addToMap("#B8860B", "Dark goldenrod"); +Color.addToMap("#A9A9A9", "Dark gray"); +Color.addToMap("#013220", "Dark green"); +Color.addToMap("#00416A", "Dark imperial blue"); +Color.addToMap("#1A2421", "Dark jungle green"); +Color.addToMap("#BDB76B", "Dark khaki"); +Color.addToMap("#734F96", "Dark lavender"); +Color.addToMap("#534B4F", "Dark liver"); +Color.addToMap("#543D37", "Dark liver (horses)"); +Color.addToMap("#8B008B", "Dark magenta"); +Color.addToMap("#003366", "Dark midnight blue"); +Color.addToMap("#4A5D23", "Dark moss green"); +Color.addToMap("#556B2F", "Dark olive green"); +Color.addToMap("#FF8C00", "Dark orange"); +Color.addToMap("#9932CC", "Dark orchid"); +Color.addToMap("#779ECB", "Dark pastel blue"); +Color.addToMap("#03C03C", "Dark pastel green"); +Color.addToMap("#966FD6", "Dark pastel purple"); +Color.addToMap("#C23B22", "Dark pastel red"); +Color.addToMap("#E75480", "Dark pink"); +Color.addToMap("#003399", "Dark powder blue"); +Color.addToMap("#4F3A3C", "Dark puce"); +Color.addToMap("#872657", "Dark raspberry"); +Color.addToMap("#8B0000", "Dark red"); +Color.addToMap("#E9967A", "Dark salmon"); +Color.addToMap("#560319", "Dark scarlet"); +Color.addToMap("#8FBC8F", "Dark sea green"); +Color.addToMap("#3C1414", "Dark sienna"); +Color.addToMap("#8CBED6", "Dark sky blue"); +Color.addToMap("#483D8B", "Dark slate blue"); +Color.addToMap("#2F4F4F", "Dark slate gray"); +Color.addToMap("#177245", "Dark spring green"); +Color.addToMap("#918151", "Dark tan"); +Color.addToMap("#FFA812", "Dark tangerine"); +Color.addToMap("#CC4E5C", "Dark terra cotta"); +Color.addToMap("#00CED1", "Dark turquoise"); +Color.addToMap("#D1BEA8", "Dark vanilla"); +Color.addToMap("#9400D3", "Dark violet"); +Color.addToMap("#9B870C", "Dark yellow"); +Color.addToMap("#00703C", "Dartmouth green"); +Color.addToMap("#555555", "Davy's grey"); +Color.addToMap("#D70A53", "Debian red"); +Color.addToMap("#A9203E", "Deep carmine"); +Color.addToMap("#EF3038", "Deep carmine pink"); +Color.addToMap("#E9692C", "Deep carrot orange"); +Color.addToMap("#DA3287", "Deep cerise"); +Color.addToMap("#B94E48", "Deep chestnut"); +Color.addToMap("#C154C1", "Deep fuchsia"); +Color.addToMap("#004B49", "Deep jungle green"); +Color.addToMap("#F5C71A", "Deep lemon"); +Color.addToMap("#9955BB", "Deep lilac"); +Color.addToMap("#CC00CC", "Deep magenta"); +Color.addToMap("#D473D4", "Deep mauve"); +Color.addToMap("#355E3B", "Deep moss green"); +Color.addToMap("#FFCBA4", "Deep peach"); +Color.addToMap("#A95C68", "Deep puce"); +Color.addToMap("#843F5B", "Deep ruby"); +Color.addToMap("#FF9933", "Deep saffron"); +Color.addToMap("#00BFFF", "Deep sky blue"); +Color.addToMap("#4A646C", "Deep Space Sparkle"); +Color.addToMap("#7E5E60", "Deep Taupe"); +Color.addToMap("#66424D", "Deep Tuscan red"); +Color.addToMap("#BA8759", "Deer"); +Color.addToMap("#1560BD", "Denim"); +Color.addToMap("#EDC9AF", "Desert sand"); +Color.addToMap("#EA3C53", "Desire"); +Color.addToMap("#B9F2FF", "Diamond"); +Color.addToMap("#696969", "Dim gray"); +Color.addToMap("#9B7653", "Dirt"); +Color.addToMap("#1E90FF", "Dodger blue"); +Color.addToMap("#D71868", "Dogwood rose"); +Color.addToMap("#85BB65", "Dollar bill"); +Color.addToMap("#664C28", "Donkey Brown"); +Color.addToMap("#00009C", "Duke blue"); +Color.addToMap("#E5CCC9", "Dust storm"); +Color.addToMap("#EFDFBB", "Dutch white"); +Color.addToMap("#E1A95F", "Earth yellow"); +Color.addToMap("#555D50", "Ebony"); +Color.addToMap("#1B1B1B", "Eerie black"); +Color.addToMap("#614051", "Eggplant"); +Color.addToMap("#F0EAD6", "Eggshell"); +Color.addToMap("#1034A6", "Egyptian blue"); +Color.addToMap("#7DF9FF", "Electric blue"); +Color.addToMap("#FF003F", "Electric crimson"); +Color.addToMap("#00FF00", "Electric green"); +Color.addToMap("#6F00FF", "Electric indigo"); +Color.addToMap("#CCFF00", "Electric lime"); +Color.addToMap("#BF00FF", "Electric purple"); +Color.addToMap("#3F00FF", "Electric ultramarine"); +Color.addToMap("#FFFF00", "Electric yellow"); +Color.addToMap("#50C878", "Emerald"); +Color.addToMap("#6C3082", "Eminence"); +Color.addToMap("#1B4D3E", "English green"); +Color.addToMap("#B48395", "English lavender"); +Color.addToMap("#AB4B52", "English red"); +Color.addToMap("#563C5C", "English violet"); +Color.addToMap("#96C8A2", "Eton blue"); +Color.addToMap("#44D7A8", "Eucalyptus"); +Color.addToMap("#801818", "Falu red"); +Color.addToMap("#B53389", "Fandango"); +Color.addToMap("#DE5285", "Fandango pink"); +Color.addToMap("#F400A1", "Fashion fuchsia"); +Color.addToMap("#E5AA70", "Fawn"); +Color.addToMap("#4D5D53", "Feldgrau"); +Color.addToMap("#4F7942", "Fern green"); +Color.addToMap("#FF2800", "Ferrari Red"); +Color.addToMap("#6C541E", "Field drab"); +Color.addToMap("#B22222", "Firebrick"); +Color.addToMap("#CE2029", "Fire engine red"); +Color.addToMap("#E25822", "Flame"); +Color.addToMap("#FC8EAC", "Flamingo pink"); +Color.addToMap("#F7E98E", "Flavescent"); +Color.addToMap("#EEDC82", "Flax"); +Color.addToMap("#A2006D", "Flirt"); +Color.addToMap("#FFFAF0", "Floral white"); +Color.addToMap("#FFBF00", "Fluorescent orange"); +Color.addToMap("#FF1493", "Fluorescent pink"); +Color.addToMap("#FF004F", "Folly"); +Color.addToMap("#014421", "Forest green"); +Color.addToMap("#228B22", "Forest green (web)"); +Color.addToMap("#856D4D", "French bistre"); +Color.addToMap("#0072BB", "French blue"); +Color.addToMap("#FD3F92", "French fuchsia"); +Color.addToMap("#86608E", "French lilac"); +Color.addToMap("#9EFD38", "French lime"); +Color.addToMap("#FD6C9E", "French pink"); +Color.addToMap("#4E1609", "French puce"); +Color.addToMap("#C72C48", "French raspberry"); +Color.addToMap("#F64A8A", "French rose"); +Color.addToMap("#77B5FE", "French sky blue"); +Color.addToMap("#8806CE", "French violet"); +Color.addToMap("#AC1E44", "French wine"); +Color.addToMap("#A6E7FF", "Fresh Air"); +Color.addToMap("#FF77FF", "Fuchsia pink"); +Color.addToMap("#CC397B", "Fuchsia purple"); +Color.addToMap("#C74375", "Fuchsia rose"); +Color.addToMap("#E48400", "Fulvous"); +Color.addToMap("#CC6666", "Fuzzy Wuzzy"); +Color.addToMap("#DCDCDC", "Gainsboro"); +Color.addToMap("#E49B0F", "Gamboge"); +Color.addToMap("#007F66", "Generic viridian"); +Color.addToMap("#F8F8FF", "Ghost white"); +Color.addToMap("#FE5A1D", "Giants orange"); +Color.addToMap("#B06500", "Ginger"); +Color.addToMap("#6082B6", "Glaucous"); +Color.addToMap("#E6E8FA", "Glitter"); +Color.addToMap("#00AB66", "GO green"); +Color.addToMap("#D4AF37", "Gold (metallic)"); +Color.addToMap("#FFD700", "Gold (web) (Golden)"); +Color.addToMap("#85754E", "Gold Fusion"); +Color.addToMap("#996515", "Golden brown"); +Color.addToMap("#FCC200", "Golden poppy"); +Color.addToMap("#FFDF00", "Golden yellow"); +Color.addToMap("#DAA520", "Goldenrod"); +Color.addToMap("#A8E4A0", "Granny Smith Apple"); +Color.addToMap("#6F2DA8", "Grape"); +Color.addToMap("#808080", "Gray"); +Color.addToMap("#BEBEBE", "Gray (X11 gray)"); +Color.addToMap("#465945", "Gray-asparagus"); +Color.addToMap("#1CAC78", "Green (Crayola)"); +Color.addToMap("#008000", "Green"); +Color.addToMap("#00A877", "Green (Munsell)"); +Color.addToMap("#009F6B", "Green (NCS)"); +Color.addToMap("#00A550", "Green (pigment)"); +Color.addToMap("#66B032", "Green (RYB)"); +Color.addToMap("#ADFF2F", "Green-yellow"); +Color.addToMap("#A99A86", "Grullo"); +Color.addToMap("#663854", "Halaya ube"); +Color.addToMap("#446CCF", "Han blue"); +Color.addToMap("#5218FA", "Han purple"); +Color.addToMap("#E9D66B", "Hansa yellow"); +Color.addToMap("#3FFF00", "Harlequin"); +Color.addToMap("#C90016", "Harvard crimson"); +Color.addToMap("#DA9100", "Harvest gold"); +Color.addToMap("#DF73FF", "Heliotrope"); +Color.addToMap("#AA98A9", "Heliotrope gray"); +Color.addToMap("#F0FFF0", "Honeydew"); +Color.addToMap("#006DB0", "Honolulu blue"); +Color.addToMap("#49796B", "Hooker's green"); +Color.addToMap("#FF1DCE", "Hot magenta"); +Color.addToMap("#FF69B4", "Hot pink"); +Color.addToMap("#71A6D2", "Iceberg"); +Color.addToMap("#FCF75E", "Icterine"); +Color.addToMap("#319177", "Illuminating Emerald"); +Color.addToMap("#602F6B", "Imperial"); +Color.addToMap("#002395", "Imperial blue"); +Color.addToMap("#66023C", "Imperial purple"); +Color.addToMap("#ED2939", "Imperial red"); +Color.addToMap("#B2EC5D", "Inchworm"); +Color.addToMap("#4C516D", "Independence"); +Color.addToMap("#138808", "India green"); +Color.addToMap("#CD5C5C", "Indian red"); +Color.addToMap("#E3A857", "Indian yellow"); +Color.addToMap("#4B0082", "Indigo"); +Color.addToMap("#002FA7", "International Klein Blue"); +Color.addToMap("#FF4F00", "International orange (aerospace)"); +Color.addToMap("#BA160C", "International orange (engineering)"); +Color.addToMap("#C0362C", "International orange (Golden Gate Bridge)"); +Color.addToMap("#5A4FCF", "Iris"); +Color.addToMap("#F4F0EC", "Isabelline"); +Color.addToMap("#009000", "Islamic green"); +Color.addToMap("#B2FFFF", "Italian sky blue"); +Color.addToMap("#FFFFF0", "Ivory"); +Color.addToMap("#00A86B", "Jade"); +Color.addToMap("#9D2933", "Japanese carmine"); +Color.addToMap("#264348", "Japanese indigo"); +Color.addToMap("#5B3256", "Japanese violet"); +Color.addToMap("#D73B3E", "Jasper"); +Color.addToMap("#A50B5E", "Jazzberry jam"); +Color.addToMap("#DA614E", "Jelly Bean"); +Color.addToMap("#343434", "Jet"); +Color.addToMap("#F4CA16", "Jonquil"); +Color.addToMap("#8AB9F1", "Jordy blue"); +Color.addToMap("#BDDA57", "June bud"); +Color.addToMap("#29AB87", "Jungle green"); +Color.addToMap("#4CBB17", "Kelly green"); +Color.addToMap("#7C1C05", "Kenyan copper"); +Color.addToMap("#3AB09E", "Keppel"); +Color.addToMap("#C3B091", "Khaki"); +Color.addToMap("#E79FC4", "Kobi"); +Color.addToMap("#354230", "Kombu green"); +Color.addToMap("#E8000D", "KU Crimson"); +Color.addToMap("#087830", "La Salle Green"); +Color.addToMap("#D6CADD", "Languid lavender"); +Color.addToMap("#26619C", "Lapis lazuli"); +Color.addToMap("#A9BA9D", "Laurel green"); +Color.addToMap("#CF1020", "Lava"); +Color.addToMap("#B57EDC", "Lavender (floral)"); +Color.addToMap("#CCCCFF", "Lavender blue"); +Color.addToMap("#FFF0F5", "Lavender blush"); +Color.addToMap("#C4C3D0", "Lavender gray"); +Color.addToMap("#9457EB", "Lavender indigo"); +Color.addToMap("#EE82EE", "Lavender magenta"); +Color.addToMap("#E6E6FA", "Lavender mist"); +Color.addToMap("#FBAED2", "Lavender pink"); +Color.addToMap("#967BB6", "Lavender purple"); +Color.addToMap("#FBA0E3", "Lavender rose"); +Color.addToMap("#7CFC00", "Lawn green"); +Color.addToMap("#FFF700", "Lemon"); +Color.addToMap("#FFFACD", "Lemon chiffon"); +Color.addToMap("#CCA01D", "Lemon curry"); +Color.addToMap("#FDFF00", "Lemon glacier"); +Color.addToMap("#E3FF00", "Lemon lime"); +Color.addToMap("#F6EABE", "Lemon meringue"); +Color.addToMap("#FFF44F", "Lemon yellow"); +Color.addToMap("#1A1110", "Licorice"); +Color.addToMap("#545AA7", "Liberty"); +Color.addToMap("#FDD5B1", "Light apricot"); +Color.addToMap("#ADD8E6", "Light blue"); +Color.addToMap("#B5651D", "Light brown"); +Color.addToMap("#E66771", "Light carmine pink"); +Color.addToMap("#F08080", "Light coral"); +Color.addToMap("#93CCEA", "Light cornflower blue"); +Color.addToMap("#F56991", "Light crimson"); +Color.addToMap("#E0FFFF", "Light cyan"); +Color.addToMap("#FF5CCD", "Light deep pink"); +Color.addToMap("#C8AD7F", "Light French beige"); +Color.addToMap("#F984EF", "Light fuchsia pink"); +Color.addToMap("#FAFAD2", "Light goldenrod yellow"); +Color.addToMap("#D3D3D3", "Light gray"); +Color.addToMap("#90EE90", "Light green"); +Color.addToMap("#FFB3DE", "Light hot pink"); +Color.addToMap("#F0E68C", "Light khaki"); +Color.addToMap("#D39BCB", "Light medium orchid"); +Color.addToMap("#ADDFAD", "Light moss green"); +Color.addToMap("#E6A8D7", "Light orchid"); +Color.addToMap("#B19CD9", "Light pastel purple"); +Color.addToMap("#FFB6C1", "Light pink"); +Color.addToMap("#E97451", "Light red ochre"); +Color.addToMap("#FFA07A", "Light salmon"); +Color.addToMap("#FF9999", "Light salmon pink"); +Color.addToMap("#20B2AA", "Light sea green"); +Color.addToMap("#87CEFA", "Light sky blue"); +Color.addToMap("#778899", "Light slate gray"); +Color.addToMap("#B0C4DE", "Light steel blue"); +Color.addToMap("#B38B6D", "Light taupe"); +Color.addToMap("#FFFFE0", "Light yellow"); +Color.addToMap("#C8A2C8", "Lilac"); +Color.addToMap("#BFFF00", "Lime"); +Color.addToMap("#32CD32", "Lime green"); +Color.addToMap("#9DC209", "Limerick"); +Color.addToMap("#195905", "Lincoln green"); +Color.addToMap("#FAF0E6", "Linen"); +Color.addToMap("#6CA0DC", "Little boy blue"); +Color.addToMap("#B86D29", "Liver (dogs)"); +Color.addToMap("#6C2E1F", "Liver"); +Color.addToMap("#987456", "Liver chestnut"); +Color.addToMap("#FFE4CD", "Lumber"); +Color.addToMap("#E62020", "Lust"); +Color.addToMap("#FF00FF", "Magenta"); +Color.addToMap("#CA1F7B", "Magenta (dye)"); +Color.addToMap("#D0417E", "Magenta (Pantone)"); +Color.addToMap("#FF0090", "Magenta (process)"); +Color.addToMap("#9F4576", "Magenta haze"); +Color.addToMap("#AAF0D1", "Magic mint"); +Color.addToMap("#F8F4FF", "Magnolia"); +Color.addToMap("#C04000", "Mahogany"); +Color.addToMap("#6050DC", "Majorelle Blue"); +Color.addToMap("#0BDA51", "Malachite"); +Color.addToMap("#979AAA", "Manatee"); +Color.addToMap("#FF8243", "Mango Tango"); +Color.addToMap("#74C365", "Mantis"); +Color.addToMap("#880085", "Mardi Gras"); +Color.addToMap("#800000", "Maroon"); +Color.addToMap("#E0B0FF", "Mauve"); +Color.addToMap("#915F6D", "Mauve taupe"); +Color.addToMap("#EF98AA", "Mauvelous"); +Color.addToMap("#4C9141", "May green"); +Color.addToMap("#73C2FB", "Maya blue"); +Color.addToMap("#E5B73B", "Meat brown"); +Color.addToMap("#66DDAA", "Medium aquamarine"); +Color.addToMap("#0000CD", "Medium blue"); +Color.addToMap("#E2062C", "Medium candy apple red"); +Color.addToMap("#AF4035", "Medium carmine"); +Color.addToMap("#035096", "Medium electric blue"); +Color.addToMap("#1C352D", "Medium jungle green"); +Color.addToMap("#BA55D3", "Medium orchid"); +Color.addToMap("#9370DB", "Medium purple"); +Color.addToMap("#BB3385", "Medium red-violet"); +Color.addToMap("#AA4069", "Medium ruby"); +Color.addToMap("#3CB371", "Medium sea green"); +Color.addToMap("#80DAEB", "Medium sky blue"); +Color.addToMap("#7B68EE", "Medium slate blue"); +Color.addToMap("#C9DC87", "Medium spring bud"); +Color.addToMap("#00FA9A", "Medium spring green"); +Color.addToMap("#674C47", "Medium taupe"); +Color.addToMap("#48D1CC", "Medium turquoise"); +Color.addToMap("#D9603B", "Pale vermilion"); +Color.addToMap("#F8B878", "Mellow apricot"); +Color.addToMap("#F8DE7E", "Mellow yellow"); +Color.addToMap("#FDBCB4", "Melon"); +Color.addToMap("#0A7E8C", "Metallic Seaweed"); +Color.addToMap("#9C7C38", "Metallic Sunburst"); +Color.addToMap("#E4007C", "Mexican pink"); +Color.addToMap("#191970", "Midnight blue"); +Color.addToMap("#004953", "Midnight green (eagle green)"); +Color.addToMap("#FFC40C", "Mikado yellow"); +Color.addToMap("#E3F988", "Mindaro"); +Color.addToMap("#3EB489", "Mint"); +Color.addToMap("#F5FFFA", "Mint cream"); +Color.addToMap("#98FF98", "Mint green"); +Color.addToMap("#FFE4E1", "Misty rose"); +Color.addToMap("#73A9C2", "Moonstone blue"); +Color.addToMap("#AE0C00", "Mordant red 19"); +Color.addToMap("#8A9A5B", "Moss green"); +Color.addToMap("#30BA8F", "Mountain Meadow"); +Color.addToMap("#997A8D", "Mountbatten pink"); +Color.addToMap("#18453B", "MSU Green"); +Color.addToMap("#306030", "Mughal green"); +Color.addToMap("#C54B8C", "Mulberry"); +Color.addToMap("#FFDB58", "Mustard"); +Color.addToMap("#317873", "Myrtle green"); +Color.addToMap("#F6ADC6", "Nadeshiko pink"); +Color.addToMap("#2A8000", "Napier green"); +Color.addToMap("#FFDEAD", "Navajo white"); +Color.addToMap("#000080", "Navy"); +Color.addToMap("#FFA343", "Neon Carrot"); +Color.addToMap("#FE4164", "Neon fuchsia"); +Color.addToMap("#39FF14", "Neon green"); +Color.addToMap("#214FC6", "New Car"); +Color.addToMap("#D7837F", "New York pink"); +Color.addToMap("#A4DDED", "Non-photo blue"); +Color.addToMap("#059033", "North Texas Green"); +Color.addToMap("#E9FFDB", "Nyanza"); +Color.addToMap("#0077BE", "Ocean Boat Blue"); +Color.addToMap("#CC7722", "Ochre"); +Color.addToMap("#43302E", "Old burgundy"); +Color.addToMap("#CFB53B", "Old gold"); +Color.addToMap("#FDF5E6", "Old lace"); +Color.addToMap("#796878", "Old lavender"); +Color.addToMap("#673147", "Old mauve"); +Color.addToMap("#867E36", "Old moss green"); +Color.addToMap("#C08081", "Old rose"); +Color.addToMap("#808000", "Olive"); +Color.addToMap("#6B8E23", "Olive Drab #3"); +Color.addToMap("#3C341F", "Olive Drab #7"); +Color.addToMap("#9AB973", "Olivine"); +Color.addToMap("#353839", "Onyx"); +Color.addToMap("#B784A7", "Opera mauve"); +Color.addToMap("#FF7F00", "Orange"); +Color.addToMap("#FF7538", "Orange (Crayola)"); +Color.addToMap("#FF5800", "Orange (Pantone)"); +Color.addToMap("#FB9902", "Orange (RYB)"); +Color.addToMap("#FFA500", "Orange (web)"); +Color.addToMap("#FF9F00", "Orange peel"); +Color.addToMap("#FF4500", "Orange-red"); +Color.addToMap("#DA70D6", "Orchid"); +Color.addToMap("#F2BDCD", "Orchid pink"); +Color.addToMap("#FB4F14", "Orioles orange"); +Color.addToMap("#414A4C", "Outer Space"); +Color.addToMap("#FF6E4A", "Outrageous Orange"); +Color.addToMap("#002147", "Oxford Blue"); +Color.addToMap("#990000", "Crimson Red"); +Color.addToMap("#006600", "Pakistan green"); +Color.addToMap("#273BE2", "Palatinate blue"); +Color.addToMap("#682860", "Palatinate purple"); +Color.addToMap("#BCD4E6", "Pale aqua"); +Color.addToMap("#AFEEEE", "Pale blue"); +Color.addToMap("#987654", "Pale brown"); +Color.addToMap("#9BC4E2", "Pale cerulean"); +Color.addToMap("#DDADAF", "Pale chestnut"); +Color.addToMap("#DA8A67", "Pale copper"); +Color.addToMap("#ABCDEF", "Pale cornflower blue"); +Color.addToMap("#E6BE8A", "Pale gold"); +Color.addToMap("#EEE8AA", "Pale goldenrod"); +Color.addToMap("#98FB98", "Pale green"); +Color.addToMap("#DCD0FF", "Pale lavender"); +Color.addToMap("#F984E5", "Pale magenta"); +Color.addToMap("#FADADD", "Pale pink"); +Color.addToMap("#DDA0DD", "Pale plum"); +Color.addToMap("#DB7093", "Pale red-violet"); +Color.addToMap("#96DED1", "Pale robin egg blue"); +Color.addToMap("#C9C0BB", "Pale silver"); +Color.addToMap("#ECEBBD", "Pale spring bud"); +Color.addToMap("#BC987E", "Pale taupe"); +Color.addToMap("#78184A", "Pansy purple"); +Color.addToMap("#009B7D", "Paolo Veronese green"); +Color.addToMap("#FFEFD5", "Papaya whip"); +Color.addToMap("#E63E62", "Paradise pink"); +Color.addToMap("#AEC6CF", "Pastel blue"); +Color.addToMap("#836953", "Pastel brown"); +Color.addToMap("#CFCFC4", "Pastel gray"); +Color.addToMap("#77DD77", "Pastel green"); +Color.addToMap("#F49AC2", "Pastel magenta"); +Color.addToMap("#FFB347", "Pastel orange"); +Color.addToMap("#DEA5A4", "Pastel pink"); +Color.addToMap("#B39EB5", "Pastel purple"); +Color.addToMap("#FF6961", "Pastel red"); +Color.addToMap("#CB99C9", "Pastel violet"); +Color.addToMap("#FDFD96", "Pastel yellow"); +Color.addToMap("#FFE5B4", "Peach"); +Color.addToMap("#FFCC99", "Peach-orange"); +Color.addToMap("#FFDAB9", "Peach puff"); +Color.addToMap("#FADFAD", "Peach-yellow"); +Color.addToMap("#D1E231", "Pear"); +Color.addToMap("#EAE0C8", "Pearl"); +Color.addToMap("#88D8C0", "Pearl Aqua"); +Color.addToMap("#B768A2", "Pearly purple"); +Color.addToMap("#E6E200", "Peridot"); +Color.addToMap("#1C39BB", "Persian blue"); +Color.addToMap("#00A693", "Persian green"); +Color.addToMap("#32127A", "Persian indigo"); +Color.addToMap("#D99058", "Persian orange"); +Color.addToMap("#F77FBE", "Persian pink"); +Color.addToMap("#701C1C", "Persian plum"); +Color.addToMap("#CC3333", "Persian red"); +Color.addToMap("#FE28A2", "Persian rose"); +Color.addToMap("#EC5800", "Persimmon"); +Color.addToMap("#CD853F", "Peru"); +Color.addToMap("#000F89", "Phthalo blue"); +Color.addToMap("#123524", "Phthalo green"); +Color.addToMap("#45B1E8", "Picton blue"); +Color.addToMap("#C30B4E", "Pictorial carmine"); +Color.addToMap("#FDDDE6", "Piggy pink"); +Color.addToMap("#01796F", "Pine green"); +Color.addToMap("#FFC0CB", "Pink"); +Color.addToMap("#D74894", "Pink (Pantone)"); +Color.addToMap("#FFDDF4", "Pink lace"); +Color.addToMap("#D8B2D1", "Pink lavender"); +Color.addToMap("#FF9966", "Pink-orange"); +Color.addToMap("#E7ACCF", "Pink pearl"); +Color.addToMap("#F78FA7", "Pink Sherbet"); +Color.addToMap("#93C572", "Pistachio"); +Color.addToMap("#E5E4E2", "Platinum"); +Color.addToMap("#8E4585", "Plum"); +Color.addToMap("#BE4F62", "Popstar"); +Color.addToMap("#FF5A36", "Portland Orange"); +Color.addToMap("#B0E0E6", "Powder blue"); +Color.addToMap("#FF8F00", "Princeton orange"); +Color.addToMap("#003153", "Prussian blue"); +Color.addToMap("#DF00FF", "Psychedelic purple"); +Color.addToMap("#CC8899", "Puce"); +Color.addToMap("#644117", "Pullman Brown (UPS Brown)"); +Color.addToMap("#FF7518", "Pumpkin"); +Color.addToMap("#800080", "Deep purple"); +Color.addToMap("#9F00C5", "Purple (Munsell)"); +Color.addToMap("#A020F0", "Purple"); +Color.addToMap("#69359C", "Purple Heart"); +Color.addToMap("#9678B6", "Purple mountain majesty"); +Color.addToMap("#4E5180", "Purple navy"); +Color.addToMap("#FE4EDA", "Purple pizzazz"); +Color.addToMap("#50404D", "Purple taupe"); +Color.addToMap("#9A4EAE", "Purpureus"); +Color.addToMap("#51484F", "Quartz"); +Color.addToMap("#436B95", "Queen blue"); +Color.addToMap("#E8CCD7", "Queen pink"); +Color.addToMap("#8E3A59", "Quinacridone magenta"); +Color.addToMap("#FF355E", "Radical Red"); +Color.addToMap("#FBAB60", "Rajah"); +Color.addToMap("#E30B5D", "Raspberry"); +Color.addToMap("#E25098", "Raspberry pink"); +Color.addToMap("#B3446C", "Raspberry rose"); +Color.addToMap("#826644", "Raw umber"); +Color.addToMap("#FF33CC", "Razzle dazzle rose"); +Color.addToMap("#E3256B", "Razzmatazz"); +Color.addToMap("#8D4E85", "Razzmic Berry"); +Color.addToMap("#FF0000", "Red"); +Color.addToMap("#EE204D", "Red (Crayola)"); +Color.addToMap("#F2003C", "Red (Munsell)"); +Color.addToMap("#C40233", "Red (NCS)"); +Color.addToMap("#ED1C24", "Red (pigment)"); +Color.addToMap("#FE2712", "Red (RYB)"); +Color.addToMap("#A52A2A", "Red-brown"); +Color.addToMap("#860111", "Red devil"); +Color.addToMap("#FF5349", "Red-orange"); +Color.addToMap("#E40078", "Red-purple"); +Color.addToMap("#C71585", "Red-violet"); +Color.addToMap("#A45A52", "Redwood"); +Color.addToMap("#522D80", "Regalia"); +Color.addToMap("#002387", "Resolution blue"); +Color.addToMap("#777696", "Rhythm"); +Color.addToMap("#004040", "Rich black"); +Color.addToMap("#F1A7FE", "Rich brilliant lavender"); +Color.addToMap("#D70040", "Rich carmine"); +Color.addToMap("#0892D0", "Rich electric blue"); +Color.addToMap("#A76BCF", "Rich lavender"); +Color.addToMap("#B666D2", "Rich lilac"); +Color.addToMap("#B03060", "Rich maroon"); +Color.addToMap("#444C38", "Rifle green"); +Color.addToMap("#704241", "Deep Roast coffee"); +Color.addToMap("#00CCCC", "Robin egg blue"); +Color.addToMap("#8A7F80", "Rocket metallic"); +Color.addToMap("#838996", "Roman silver"); +Color.addToMap("#F9429E", "Rose bonbon"); +Color.addToMap("#674846", "Rose ebony"); +Color.addToMap("#B76E79", "Rose gold"); +Color.addToMap("#FF66CC", "Rose pink"); +Color.addToMap("#C21E56", "Rose red"); +Color.addToMap("#905D5D", "Rose taupe"); +Color.addToMap("#AB4E52", "Rose vale"); +Color.addToMap("#65000B", "Rosewood"); +Color.addToMap("#D40000", "Rosso corsa"); +Color.addToMap("#BC8F8F", "Rosy brown"); +Color.addToMap("#0038A8", "Royal azure"); +Color.addToMap("#002366", "Royal blue"); +Color.addToMap("#4169E1", "Royal light blue"); +Color.addToMap("#CA2C92", "Royal fuchsia"); +Color.addToMap("#7851A9", "Royal purple"); +Color.addToMap("#FADA5E", "Royal yellow"); +Color.addToMap("#CE4676", "Ruber"); +Color.addToMap("#D10056", "Rubine red"); +Color.addToMap("#E0115F", "Ruby"); +Color.addToMap("#9B111E", "Ruby red"); +Color.addToMap("#FF0028", "Ruddy"); +Color.addToMap("#BB6528", "Ruddy brown"); +Color.addToMap("#E18E96", "Ruddy pink"); +Color.addToMap("#A81C07", "Rufous"); +Color.addToMap("#80461B", "Russet"); +Color.addToMap("#679267", "Russian green"); +Color.addToMap("#32174D", "Russian violet"); +Color.addToMap("#B7410E", "Rust"); +Color.addToMap("#DA2C43", "Rusty red"); +Color.addToMap("#8B4513", "Saddle brown"); +Color.addToMap("#FF6700", "Safety orange (blaze orange)"); +Color.addToMap("#EED202", "Safety yellow"); +Color.addToMap("#F4C430", "Saffron"); +Color.addToMap("#BCB88A", "Sage"); +Color.addToMap("#23297A", "St. Patrick's blue"); +Color.addToMap("#FA8072", "Salmon"); +Color.addToMap("#FF91A4", "Salmon pink"); +Color.addToMap("#C2B280", "Sand"); +Color.addToMap("#ECD540", "Sandstorm"); +Color.addToMap("#F4A460", "Sandy brown"); +Color.addToMap("#92000A", "Sangria"); +Color.addToMap("#507D2A", "Sap green"); +Color.addToMap("#0F52BA", "Sapphire"); +Color.addToMap("#0067A5", "Sapphire blue"); +Color.addToMap("#CBA135", "Satin sheen gold"); +Color.addToMap("#FF2400", "Scarlet"); +Color.addToMap("#FFD800", "School bus yellow"); +Color.addToMap("#76FF7A", "Screamin' Green"); +Color.addToMap("#006994", "Sea blue"); +Color.addToMap("#2E8B57", "Sea green"); +Color.addToMap("#321414", "Seal brown"); +Color.addToMap("#FFF5EE", "Seashell"); +Color.addToMap("#FFBA00", "Selective yellow"); +Color.addToMap("#704214", "Sepia"); +Color.addToMap("#8A795D", "Shadow"); +Color.addToMap("#778BA5", "Shadow blue"); +Color.addToMap("#FFCFF1", "Shampoo"); +Color.addToMap("#009E60", "Shamrock green"); +Color.addToMap("#8FD400", "Sheen Green"); +Color.addToMap("#D98695", "Shimmering Blush"); +Color.addToMap("#FC0FC0", "Shocking pink"); +Color.addToMap("#882D17", "Sienna"); +Color.addToMap("#C0C0C0", "Silver"); +Color.addToMap("#ACACAC", "Silver chalice"); +Color.addToMap("#5D89BA", "Silver Lake blue"); +Color.addToMap("#C4AEAD", "Silver pink"); +Color.addToMap("#BFC1C2", "Silver sand"); +Color.addToMap("#CB410B", "Sinopia"); +Color.addToMap("#007474", "Skobeloff"); +Color.addToMap("#87CEEB", "Sky blue"); +Color.addToMap("#CF71AF", "Sky magenta"); +Color.addToMap("#6A5ACD", "Slate blue"); +Color.addToMap("#708090", "Slate gray"); +Color.addToMap("#C84186", "Smitten"); +Color.addToMap("#738276", "Smoke"); +Color.addToMap("#933D41", "Smokey topaz"); +Color.addToMap("#100C08", "Smoky black"); +Color.addToMap("#FFFAFA", "Snow"); +Color.addToMap("#CEC8EF", "Soap"); +Color.addToMap("#893843", "Solid pink"); +Color.addToMap("#757575", "Sonic silver"); +Color.addToMap("#9E1316", "Spartan Crimson"); +Color.addToMap("#1D2951", "Space cadet"); +Color.addToMap("#807532", "Spanish bistre"); +Color.addToMap("#0070B8", "Spanish blue"); +Color.addToMap("#D10047", "Spanish carmine"); +Color.addToMap("#E51A4C", "Spanish crimson"); +Color.addToMap("#989898", "Spanish gray"); +Color.addToMap("#009150", "Spanish green"); +Color.addToMap("#E86100", "Spanish orange"); +Color.addToMap("#F7BFBE", "Spanish pink"); +Color.addToMap("#E60026", "Spanish red"); +Color.addToMap("#4C2882", "Spanish violet"); +Color.addToMap("#007F5C", "Spanish viridian"); +Color.addToMap("#0FC0FC", "Spiro Disco Ball"); +Color.addToMap("#A7FC00", "Spring bud"); +Color.addToMap("#00FF7F", "Spring green"); +Color.addToMap("#007BB8", "Star command blue"); +Color.addToMap("#4682B4", "Steel blue"); +Color.addToMap("#CC33CC", "Steel pink"); +Color.addToMap("#4F666A", "Stormcloud"); +Color.addToMap("#E4D96F", "Straw"); +Color.addToMap("#FC5A8D", "Strawberry"); +Color.addToMap("#FFCC33", "Sunglow"); +Color.addToMap("#E3AB57", "Sunray"); +Color.addToMap("#FAD6A5", "Sunset"); +Color.addToMap("#FD5E53", "Sunset orange"); +Color.addToMap("#CF6BA9", "Super pink"); +Color.addToMap("#D2B48C", "Tan"); +Color.addToMap("#F94D00", "Tangelo"); +Color.addToMap("#F28500", "Tangerine"); +Color.addToMap("#FFCC00", "Tangerine yellow"); +Color.addToMap("#483C32", "Dark Grayish Brown"); +Color.addToMap("#8B8589", "Taupe gray"); +Color.addToMap("#D0F0C0", "Tea green"); +Color.addToMap("#F4C2C2", "Tea rose"); +Color.addToMap("#008080", "Teal"); +Color.addToMap("#367588", "Teal blue"); +Color.addToMap("#99E6B3", "Teal deer"); +Color.addToMap("#00827F", "Teal green"); +Color.addToMap("#CF3476", "Telemagenta"); +Color.addToMap("#CD5700", "Tenne"); +Color.addToMap("#E2725B", "Terra cotta"); +Color.addToMap("#D8BFD8", "Thistle"); +Color.addToMap("#DE6FA1", "Thulian pink"); +Color.addToMap("#FC89AC", "Tickle Me Pink"); +Color.addToMap("#0ABAB5", "Tiffany Blue"); +Color.addToMap("#E08D3C", "Tiger's eye"); +Color.addToMap("#DBD7D2", "Timberwolf"); +Color.addToMap("#EEE600", "Titanium yellow"); +Color.addToMap("#FF6347", "Tomato"); +Color.addToMap("#746CC0", "Toolbox"); +Color.addToMap("#42B72A", "Toothpaste advert green"); +Color.addToMap("#FFC87C", "Topaz"); +Color.addToMap("#FD0E35", "Tractor red"); +Color.addToMap("#00755E", "Tropical rain forest"); +Color.addToMap("#0073CF", "True Blue"); +Color.addToMap("#417DC1", "Tufts Blue"); +Color.addToMap("#FF878D", "Tulip"); +Color.addToMap("#DEAA88", "Tumbleweed"); +Color.addToMap("#B57281", "Turkish rose"); +Color.addToMap("#40E0D0", "Turquoise"); +Color.addToMap("#00FFEF", "Turquoise blue"); +Color.addToMap("#A0D6B4", "Turquoise green"); +Color.addToMap("#7C4848", "Tuscan red"); +Color.addToMap("#C09999", "Tuscany"); +Color.addToMap("#8A496B", "Twilight lavender"); +Color.addToMap("#0033AA", "UA blue"); +Color.addToMap("#D9004C", "UA red"); +Color.addToMap("#8878C3", "Ube"); +Color.addToMap("#536895", "UCLA Blue"); +Color.addToMap("#FFB300", "UCLA Gold"); +Color.addToMap("#3CD070", "UFO Green"); +Color.addToMap("#120A8F", "Ultramarine"); +Color.addToMap("#4166F5", "Ultramarine blue"); +Color.addToMap("#FF6FFF", "Ultra pink"); +Color.addToMap("#635147", "Umber"); +Color.addToMap("#FFDDCA", "Unbleached silk"); +Color.addToMap("#5B92E5", "United Nations blue"); +Color.addToMap("#B78727", "University of California Gold"); +Color.addToMap("#FFFF66", "Unmellow yellow"); +Color.addToMap("#7B1113", "UP Maroon"); +Color.addToMap("#AE2029", "Upsdell red"); +Color.addToMap("#E1AD21", "Urobilin"); +Color.addToMap("#004F98", "USAFA blue"); +Color.addToMap("#F77F00", "University of Tennessee Orange"); +Color.addToMap("#D3003F", "Utah Crimson"); +Color.addToMap("#F3E5AB", "Vanilla"); +Color.addToMap("#F38FA9", "Vanilla ice"); +Color.addToMap("#C5B358", "Vegas gold"); +Color.addToMap("#C80815", "Venetian red"); +Color.addToMap("#43B3AE", "Verdigris"); +Color.addToMap("#E34234", "Medium vermilion"); +Color.addToMap("#D9381E", "Vermilion"); +Color.addToMap("#8F00FF", "Violet"); +Color.addToMap("#7F00FF", "Violet (color wheel)"); +Color.addToMap("#8601AF", "Violet (RYB)"); +Color.addToMap("#324AB2", "Violet-blue"); +Color.addToMap("#F75394", "Violet-red"); +Color.addToMap("#40826D", "Viridian"); +Color.addToMap("#009698", "Viridian green"); +Color.addToMap("#922724", "Vivid auburn"); +Color.addToMap("#9F1D35", "Vivid burgundy"); +Color.addToMap("#DA1D81", "Vivid cerise"); +Color.addToMap("#CC00FF", "Vivid orchid"); +Color.addToMap("#00CCFF", "Vivid sky blue"); +Color.addToMap("#FFA089", "Vivid tangerine"); +Color.addToMap("#9F00FF", "Vivid violet"); +Color.addToMap("#004242", "Warm black"); +Color.addToMap("#A4F4F9", "Waterspout"); +Color.addToMap("#645452", "Wenge"); +Color.addToMap("#F5DEB3", "Wheat"); +Color.addToMap("#FFFFFF", "White"); +Color.addToMap("#F5F5F5", "White smoke"); +Color.addToMap("#A2ADD0", "Wild blue yonder"); +Color.addToMap("#D470A2", "Wild orchid"); +Color.addToMap("#FF43A4", "Wild Strawberry"); +Color.addToMap("#FC6C85", "Wild watermelon"); +Color.addToMap("#FD5800", "Willpower orange"); +Color.addToMap("#A75502", "Windsor tan"); +Color.addToMap("#722F37", "Wine"); +Color.addToMap("#C9A0DC", "Wisteria"); +Color.addToMap("#C19A6B", "Wood brown"); +Color.addToMap("#738678", "Xanadu"); +Color.addToMap("#0F4D92", "Yale Blue"); +Color.addToMap("#1C2841", "Yankees blue"); +Color.addToMap("#FCE883", "Yellow (Crayola)"); +Color.addToMap("#EFCC00", "Yellow (Munsell)"); +Color.addToMap("#FEDF00", "Yellow (Pantone)"); +Color.addToMap("#FEFE33", "Yellow"); +Color.addToMap("#9ACD32", "Yellow Green"); +Color.addToMap("#FFAE42", "Yellow Orange"); +Color.addToMap("#FFF000", "Yellow rose"); +Color.addToMap("#0014A8", "Zaffre"); +Color.addToMap("#2C1608", "Zinnwaldite brown"); +Color.addToMap("#39A78E", "Zomp"); diff --git a/include/LICENSE b/include/LICENSE new file mode 100644 index 0000000..810fce6 --- /dev/null +++ b/include/LICENSE @@ -0,0 +1,621 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS diff --git a/include/NoteQuota.js b/include/NoteQuota.js new file mode 100644 index 0000000..4cd0c1f --- /dev/null +++ b/include/NoteQuota.js @@ -0,0 +1,86 @@ + +var exports = (function() { + + var NoteQuota = function(cb) { + this.cb = cb; + this.setParams(); + this.resetPoints(); + }; + + NoteQuota.PARAMS_LOBBY = {allowance: 200, max: 600}; + NoteQuota.PARAMS_NORMAL = {allowance: 400, max: 1200}; + NoteQuota.PARAMS_RIDICULOUS = {allowance: 600, max: 1800}; + NoteQuota.PARAMS_OFFLINE = {allowance: 8000, max: 24000, maxHistLen: 3}; + NoteQuota.PARAMS_UNLIMITED = {allowance: 1000000, max: 3000000, maxHistLen: 3}; + + NoteQuota.prototype.getParams = function() { + return { + m: "nq", + allowance: this.allowance, + max: this.max, + maxHistLen: this.maxHistLen + }; + }; + + NoteQuota.prototype.setParams = function(params) { + params = params || NoteQuota.PARAMS_OFFLINE; + var allowance = params.allowance || this.allowance || NoteQuota.PARAMS_OFFLINE.allowance; + var max = params.max || this.max || NoteQuota.PARAMS_OFFLINE.max; + var maxHistLen = params.maxHistLen || this.maxHistLen || NoteQuota.PARAMS_OFFLINE.maxHistLen; + if(allowance !== this.allowance || max !== this.max || maxHistLen !== this.maxHistLen) { + this.allowance = allowance; + this.max = max; + this.maxHistLen = maxHistLen; + this.resetPoints(); + return true; + } + return false; + }; + + NoteQuota.prototype.resetPoints = function() { + this.points = this.max; + this.history = []; + for(var i = 0; i < this.maxHistLen; i++) + this.history.unshift(this.points); + if(this.cb) this.cb(this.points); + }; + + NoteQuota.prototype.tick = function() { + // keep a brief history + this.history.unshift(this.points); + this.history.length = this.maxHistLen; + // hook a brother up with some more quota + if(this.points < this.max) { + this.points += this.allowance; + if(this.points > this.max) this.points = this.max; + // fire callback + if(this.cb) this.cb(this.points); + } + }; + + NoteQuota.prototype.spend = function(needed) { + // check whether aggressive limitation is needed + var sum = 0; + for(var i in this.history) { + sum += this.history[i]; + } + if(sum <= 0) needed *= this.allowance; + // can they afford it? spend + if(this.points < needed) { + return false; + } else { + this.points -= needed; + if(this.cb) this.cb(this.points); // fire callback + return true; + } + }; + + return NoteQuota; + +})(); + +if(typeof module !== "undefined") { + module.exports = exports; +} else { + this.NoteQuota = exports; +} diff --git a/include/arrow.png b/include/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..4eae4b5b771bdb4310fbe206ebcb926e6dc90b7f GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*x37`TN&n2}-D90{Nxdx@v7EBhTL8Gae1k2%xKfkKict`Q~9`MJ5N zc_j?aMX8A;sVNHOnI#zt?w-B@;f;LaKt&;*E{-76Jyta_-!@7IZ?>to6>3;ev~M*qt`W$YJy_v_WkHfJkCp!p1*u6{1-oD!M5vB-#x$ymHGlN6G|1CPhK_nvdlg+5{pdPSZTMV=Js?bQ1iM0LaPVt$E_ zB2Sjvkp;t>`5EFOPhKq83ii-R`JQb>#*IM>tWwL@JCHrx#@W**cAU~po8eU&yg-|i zNko~No`(MO{U(OVby_;2`l>{JH$WGICe?HlUiP?&^@v353I4!zw9gL;%Bxnn%fk(8 zyw#P@dT`t-E0yRy@M;}y=vct4acm2YxjJ<~wDX@IiuEu20KZa2I;aKoFaQ7m07*qo IM6N<$f^Rv5`~Uy| literal 0 HcmV?d00001 diff --git a/include/cursor.png b/include/cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..397ce80cbded1e77ae102713b73e9d8ff985c039 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6N!3-on{4R|GQpN#3A+A80c<}%Kf1u*v1v(W# zioYbtFPMRuLy%WOTSZ>l-qb+U>h7KHt3at~o-U3d8t2zuj23EE5OBG8fQQ5G(VP0M zGuIv3!uT(#ejfL<>=bqh!cLlzGnC@OHt&({-DcIlD}G zzc@^6KmVaa*Hs_turwbMeDb{BFhk|Cq0#j(^J^KpB)AG*9sBeE=t2fhS3j3^P6Q8;u+;Qe7C=LJDHDhNB{gF?=Wg3!q4l$hgom>c#fSWLM`>>oYczxR|`Kp=BhG~=ac+x zZ?%EO%d=^;EStu--8%mf-9Dd1qb2E)>-i~DW2RHvqedM$a^Ba;{?78;RFBO_E=z9s zw#C54tfg$QD1!|aq%mhfDjP0JW8;;DY^*dRI#Q4l87oO6hv5Ug>_1#tsQ1(q(R^n! zdk|QrpQk+JX|1E#u6FW$(@v8uHu4Ym)4c`X_Ed{?3+MM2rtbMy8};5=6aBs#V4*EW z4_Ey3Xk(os(I|ztqx9#-20d8*i5>+*w03uqjTrURZ`|`AtuyN<>(9||cYN$IzvTN1 zJ{l-KO>4_b^y`lc#J@%ABYf?bSueX;1poBi^KaQJ^i%a_S{)x^TYS&j(js{~nrQw0 zJ)YAFdE4#M`S4%5(ZieuE%lo+_xu|x^fOHrw0Nb9g?av=aF`-I@6F9kZb9iAf}tRV z9y6Nmu(Q#UQ#5GK+UGxa@dC}Y*Rb`~00l!~$?)xA#^VHo6bwh`Vc;&W(HZ9YID7y3 z&6WE3OLp#WV?TV`N`WBb#N9Mbl z|G3ln8O>d)kIr?}lCQ0XW?QYq#i@=x^1Rpm$gVYWX*py=F8FEi6O_q z_@5e)z*&@ic@A5G;D1>Vh7SCD$6x_GK@&2w z;1%40W7Hb=4Zd-A;2W%gS1^Nnh4!Ie+%t5DI|p-M5ZZ;7QG3(_b&<5jYXr@p?x>s0 zD)a;GKrga(Bpq>0fnl%>zQ7eY0b^hj+(VyW7tBD%;0Nr2WtjyqEa{o^AnBaz8oYoF zun&Hqd1xOD;SB(H;2Lc5TYYZN@8Ex^0a2w?DV53u#r}su;D2VMCdS&{swl=kF}FJq z<^77c)C%4b)bW@R#UxFVhPOnGDi%+zQHx25;v2lfdVGQ=QIV9SNYunK5S7@Cra(wh zp^)5pfY canvas.width) player.position.x = canvas.width; + if(player.position.y < 0) player.position.y = 0; + else if(player.position.y > canvas.width) player.position.y = canvas.width; + } + } + players.sort(ySort); + for(var i in players) { + var player = players[i]; + var img = player.spriteProvider.getCurrentSprite(player); + if(img) context.drawImage(img, + Math.floor(player.position.x - camera.position.x - (img.width / 2)), + Math.floor(player.position.y - camera.position.y - img.height)); + /*if(player.chat) { + var text = player.chat; + var t = Math.floor((Date.now() - player.chatTime) / 50); + text = text.substring(0, t); + context.fillText(text, + Math.floor(player.position.x - camera.position.x), + Math.floor(player.position.y - camera.position.y - img.height) - 10); + }*/ + } + if(self.run) requestAnimationFrame(render_loop); + }; + render_loop(); + + this.onresize = function() { + canvas.width = $(window).width(); + canvas.height = $(window).height(); + context.clearRect(0, 0, canvas.width, canvas.height); + } + window.addEventListener("resize", this.onresize); + + function downloadImage(url, cb) { + var img = new Image(); + img.onerror = function() { + cb("onerror", img); + }; + img.onabort = function() { + cb("onabort", img); + }; + img.onload = function() { + cb(false, img); + }; + img.src = url; + }; + + function downloadImages(urls, cb) { + var imgs = new Array(urls.length); + var c = 0; + for(var i in urls) { + (function() { + var j = i; + downloadImage(urls[j], function(err, img) { + if(err) { + cb(err, imgs); + cb = function() {}; + } else { + imgs[j] = img; + if(++c == urls.length) { + cb(false, imgs); + } + } + }); + })(); + } + }; + + function Camera(width, height) { + this.width = width; + this.height = height; + this.position = {x: 0, y: 0}; + }; + + function SpriteProvider(sprites, cb) { + var urls = new Array(sprites.length); + for(var i in sprites) { + urls[i] = "/ebsprite/" + sprites[i] + ".png"; + } + downloadImages(urls, (function(err, imgs) { + if(!err) { + var s = imgs; + this.sprites = {}; + this.sprites["up"] = [s[0], s[1]]; + this.sprites["right"] = [s[2], s[3]]; + this.sprites["down"] = [s[4], s[5]]; + this.sprites["left"] = [s[6], s[7]]; + this.sprites["up-right"] = [s[8] || s[2], s[9] || s[3]]; + this.sprites["right-down"] = [s[10] || s[2], s[11] || s[3]]; + this.sprites["down-left"] = [s[12] || s[6], s[13] || s[7]]; + this.sprites["left-up"] = [s[14] || s[6], s[15] || s[7]]; + } + if(cb) cb(); + }).bind(this)); + }; + + //SpriteProvider.prototype.sprites = {}; + SpriteProvider.prototype = new SpriteProvider(["2354","2355","2356","2357","2358","2359","2360","2361"]); + + SpriteProvider.prototype.getCurrentSprite = function(player) { + if(this.sprites && this.sprites[player.direction]) { + if(player.walking) { + var time = Date.now() - player.updateTime; + return this.sprites[player.direction][time & 0x80 ? 0 : 1]; + } else { + return this.sprites[player.direction][0]; + } + } + }; + + var Player = function(id) { + this.id = id; + + //this.sprites = spriteData[0].sprites; + this.sprites = spriteData[parseInt(id, 16) % spriteData.length].sprites; + this.spriteProvider = new SpriteProvider(this.sprites); + this.canMoveDiagonally = (this.sprites[8] && this.sprites[9] && this.sprites[10] && this.sprites[11] && this.sprites[12] && this.sprites[13] && this.sprites[14] && this.sprites[15]) ? true : false; + this.walkSpeed = 0.15; + + this.direction = "down"; + this.walking = false; + this.updatePosition = { + x: canvas.width / 2, + y: canvas.height / 2 + }; + this.position = {x: this.updatePosition.x, y: this.updatePosition.y}; + this.updateTime = Date.now(); + }; + + var player = new Player(client.participantId); + var playerMap = {} + playerMap[client.participantId] = player; + + + function move(id) { + var player = playerMap[id]; + var part = client.ppl[id]; + if(!player || !part) return; + var target = {x: (part.x / 100) * self.canvas.width, y: (client.ppl[id].y / 100) * self.canvas.height}; + var difference = {x: target.x - player.position.x, y: target.y - player.position.y}; + var distance = Math.sqrt(Math.pow(difference.x, 2) + Math.pow(difference.y, 2)); + if(distance > 4) { + var angle = Math.atan2(difference.y, difference.x); + angle += Math.PI; // account negative Math.PI + angle += Math.PI / 8; // askew + angle /= (Math.PI * 2); + angle = Math.floor(angle * 8) % 8; + var direction = ["left", "left-up", "up", "up-right", "right", "right-down", "down", "down-left"][angle]; + if(player.direction !== direction) { + if((Date.now() - player.updateTime > 500) || !player.walking) { + player.direction = direction; + player.updatePosition = {x: player.position.x, y: player.position.y}; + player.updateTime = Date.now(); + } + } + if(distance > 75) { + if(!player.walking) { + player.walking = true; + player.updatePosition = {x: player.position.x, y: player.position.y}; + player.updateTime = Date.now(); + } + } + } + if(distance < 25) { + if(player.walking) { + player.walking = false; + player.updatePosition = {x: player.position.x, y: player.position.y}; + player.updateTime = Date.now(); + } + } + } + + this.animationInterval = setInterval(function() { + move(client.participantId); + for(var id in client.ppl) { + if(!client.ppl.hasOwnProperty(id)) continue; + move(id); + } + }, 50); + + this.participantAdded = function(part) { + playerMap[part.id] = new Player(part.id); + } + for(var id in client.ppl) { + if(!client.ppl.hasOwnProperty(id)) continue; + playerMap[id] = new Player(id); + } + client.on("participant added", this.participantAdded); + + this.participantRemoved = function(part) { + delete playerMap[part.id]; + } + client.on("participant removed", this.participantRemoved); +} + +ebsprite.stop = function() { + this.run = false; + if(this.canvas) { + document.body.removeChild(this.canvas); + this.canvas = undefined; + } + window.removeEventListener("resize", this.onresize); + clearInterval(this.animationInterval); + if(this.client) { + this.client.off("participant added", this.participantAdded); + this.client.off("participant removed", this.participantRemoved); + } +} diff --git a/include/ebsprite/1.png b/include/ebsprite/1.png new file mode 100644 index 0000000000000000000000000000000000000000..5d01ce7c9683256cd861c002c2041af2528b2d98 GIT binary patch literal 404 zcmV;F0c-w=P)Ho*X;^OKnNi* zDf|En;QdJ)xo%gW>tZ4|p+>GqeF0pAe*wA;3(>Y?eSy+e`z!VYSPPvC%x_O191n@@ z2}~N1_lemGLq4?+R1=t6L@R7pfQe{}RPN^%wlA=~a{((XpK3C`Uf#pv*C&95FrkLT zqnLdGd}*+$kKQGo+jJPSN1;8E`T}F37zZ8#n2;?#wispXPkloFBC0MRhfa3vCR5EG zjh5Gr0BgDXu6+ST5Y~u_PezLi%=Hrb_N8QB02>NBbjmLt{MEBQ0c=dtNCZ|G<1k(p yvpoUaZn*7ow`Z;ZQeOb4gavBk3ae{iX@NUT^cAj3upf5-0000EC6fAHFqh%q30Q^w3ZMv19)`x17WOY-4T%ld)F z1lK3?OmgVs;pp8Yr1S}4JfKuHDW)r{!n5gtV oi?iaF7r<9CHc=_&9GF|+4)@$1Lh70OMgRZ+07*qoM6N<$f;0l1OaK4? literal 0 HcmV?d00001 diff --git a/include/ebsprite/100.png b/include/ebsprite/100.png new file mode 100644 index 0000000000000000000000000000000000000000..d80f42cf6a0d9884892a576d49b8a10c5f92f16a GIT binary patch literal 665 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq^pruEv0|xx83O~8 zx2KC^NX4zUx6cM1HV|k_oIXiNqg5!#sZS=hsb5C3(Wqt#i&p`=!QxJv$*Fc_sqX)3 z`KvpGd%ii^Yg?M+-Zo3`16e^7Xqfr2Xy+dvPKIw>3Br=Ivbla&{dg19bN&7Lw_k55 zFxXgsG<2N0gX5-(6lZGK$|WoM_jh#H zQZ6-yYg(1Xi!5^#w}d#d90+3AmhCQlKUS5afq8+@H-;=nh7DgBPt5R9Kg4+RZsmbY z#yfia2OJp>2{1XxE`9qhE z7mfLT(eB7A_ap`u;qBK$AAS2};nSvg)M91c(*O|$MuQSxuB%^j!?$;?PA&et`oK%Z zkVjb@Hx@q9oBw@bLOTmXw5`BLxk62a*)!&TVTj;X`19bfNyRs1<6`^w{}^nz9ZX$X zf7O&|xG3gozS+v$5Y+IZH}r5^{&kV1lNVlpn)|5CXv^CVUTF-A7%rZ4ExnlGxu$OY zuK7`XSI;v(V62EWs4`h9_2D_g6_teczFBV;ou2=_on?WDL+R5GY0ExzPmpW)zSWXp z9&5t=@6+_R*4%ok=`P20?}>OWJHu9ntXfASE0#q|tr&tCvqYUP3RUM>?>Sk$)vMq; z!_wJ`{0qJ$W@K6~I>6v#E3onS<*dy?Z|{FRvuWkDi&^SU?aU`;3+V4z_x$gk=`Sw5 cwXi*)zfG)2FVdQ&MBb@0Er_H)c^nh literal 0 HcmV?d00001 diff --git a/include/ebsprite/1000.png b/include/ebsprite/1000.png new file mode 100644 index 0000000000000000000000000000000000000000..ee721338365ab7cb30c539bbe231244105f398c6 GIT binary patch literal 398 zcmV;90df9`P)a0XsebecrtV+ZT;x z+&=&YqTyuxumHK`hW1;y_yEAV`1}EsHY72&HX`=3><3`00|zsH++V`@`T(Ep6p|zm zUto<%;^h75HVw1#3qU_B#+nhE*B?MWMnOq5V^)ehA1R?j00_VdOHe}1N2U87a+few`)?b z#OQAqAbOwlI{*yisFt9Qz8@G3z&;iXs8;HhY#KmL{2DqOzHN(1ds~1$_5dV6(|Nm8 ziTUK$&@6yvP%H8K*pit6s4ZbL01Wwj0Bs|3G=RDkPXk~drP5YtEo?p?Fb{yGMX}O< z9{>ZvUoVW`eMU4KfElnMW2J6Bq#6!TYRryoN)xj@^8rd*P->{fH_t#XfG0UTk=h~* RH+}#B002ovPDHLkV1jh(kXir$ literal 0 HcmV?d00001 diff --git a/include/ebsprite/1002.png b/include/ebsprite/1002.png new file mode 100644 index 0000000000000000000000000000000000000000..9d849c43b87de04120d280ef6d49970bef47c6d0 GIT binary patch literal 358 zcmV-s0h#`ZP)WpZG|5JHnA7hth5Qu1V&##%@@(n3Yc$!+JxzLEsQFR z`Nt8+F&6v^U=wa7A~~$EKLIAv3%i=>7MKgjz_R4R+AY8wX+}Zbw->+($a%Rm!Ez9P z0@5U{K^iR2p}?y-MhPH(1n?McEuj4{@gu-4q~7C(OWpkcfVlt$AezYj1+b8Sk8awr z+rI!4VuISZKLIVERs#CnQ$1u(TCISd%-XO8F<~+tZhqQCH-nQ zp?Lr>ko6who3~?H04;EOhEi~-#qsk2pt;bLyXgRAegF%^k~Tf(2hfB8t-$jD)Gp0h zi4OZqHXNXKiLMRI3t*W|Go^N&$A0_(wLsQFqy?k{cmrY3YhH*ySF`{C002ovPDHLk FV1i3Okf#6u literal 0 HcmV?d00001 diff --git a/include/ebsprite/1004.png b/include/ebsprite/1004.png new file mode 100644 index 0000000000000000000000000000000000000000..ba6d335670e2aa7bf3f61f9a7cb3785d42509ad5 GIT binary patch literal 377 zcmV-<0fzpGP)T_Sg|R2IH_nD@Af8 zp89HV(%>B4Aq4Oz`z8E@7-JZz;1=LAO|O5*KY(;hk60<^T!{rJrL1D(5yTHbZz>T; z14AHb_Xi*;Y%PWK$7d`Bg8KzvsruLF=m)@R#*)%k;rs3%k$V6ZSQF0U2Vk$%Yo*Bd z+p6;e^qP>F(GLKENUE%6`zXwn`~xtMtupTkhXL%pIW?aPh5^XH>oTuemhw~5uXPbR z4*&*g1v4+l!vQb=rq)`L^8rwEJyR{%#xoF{$1i{tgaNSeegV)lt>)59X+D??1JKN* zi2>8&xjO(haqIGnf4*<0_Fsge?b`-!H Xy8Pt!d#(|~00000NkvXXu0mjfdyJe| literal 0 HcmV?d00001 diff --git a/include/ebsprite/1005.png b/include/ebsprite/1005.png new file mode 100644 index 0000000000000000000000000000000000000000..f9cb14ce3ec2269e0b60109ab17e24548fcd78fa GIT binary patch literal 400 zcmV;B0dM|^P)tJK3ggc$q7&L2rR=hRc_4?*bsFApRZ&OL(wNLYUkB6ywhlsl00u&V()eA$!2WsQYyj(+rc(8>4FgcC+#^{x z01S)(45(G;M;`#E)pZ)HqSMgq(JzAN0j!4*aL7u*wp#?iwjO{Pu#{p7u_Ru~*@yK9 z@P0;_LpEKbrJ^fgHvqONd8uV3v7;J3Z@wRp2VjAt7Ztw)z(869>jPjw2EzJxUs9b8 u5OvH_91YCk^aqHRAnMSw+dKx20(b#+gJdDGae0XV0000aU=ymPNaMapKo&S200Ze29z@ers%Qz^ z0hnR0(2qRhxIX|h5M8IS%DN4i{doYy0RzxJyBJ`Fd|yoB0x(0ZBnV6a-oo|%0PI4- zQmbt*X2-5*aR3lRQia!amU69B&Ho1u2hfhzR*>HVU?42;`2egS>>y%+aXcP?=D-Sq oC9;D017J!tkXGR49yl7{1!SLOAt?n)8vpT_Sg|R2IH_nE1|kl ze&w1#h)vbQKO`~yCu|&W-g~Dh_XjWsaGIt^57`Hxz!+mzxcQY*N?Du%jpN31Ao>9G zfg2zhk!n+72LLC+r6*AwK1)lFDYOI7d;3YnXa@j6QV3c2jB0I2`T!Wf8A%!+AYLz7 zrAxn8D)a%k;_Fp}0|2;rt;(V#QEH3N18M*t2b0&pR#l$~)d2SXIaS{a%mCnaJ1=wA zvZSw~xaJfb4uHlqAucT%O7F)5zzN<5(|cG+0{I~TFvd76y5=HO2f*!C+IUKh?E-Kh z2!!uZ;{$L%C9V~3H690m1KHYg#{uAq39s8+oK&3l0XU%21|%7p19$?xduv|JDEa&V O0000Br zcfL!&gyrxK7+~KlON2P@z3YiHCvcgj*Adtkkd86NOnCSWDWwbxAmiA0CemL(9MwvDSRjq@1>*gdDNX&q zmZHA^E54(OZ~y@}Z>cOwL6)}oJkU+x>tOO3*h=-8u$#cY|D3At1!e?ryIq$#vn=T+ z(yw_5P8VQ-O9SEaaRpjaE^Tco>GuZ zZUT6PViRI?9POuAX*>G>|5m>M!Hqlh3s8FD&~8N9i%Wk1 zXUPsg=@xoaoWC7_w4_3a!r$MoA&Sawo}zF$VqEgse8Y2&G7JC#m_RE6Nj~74O~PgX z+%n9DVk^@HqqNLjP}&1vMVc&()Q1(*-Yx)MpSi?ngofn9fna@mfa^4_UvVJp!-TRP zpK7R{^4bAF5Kh`SseRgrngig|DFU4>@vXQvzz18ArJWM6%?$tm002ovPDHLkV1mQy BsNw(s literal 0 HcmV?d00001 diff --git a/include/ebsprite/101.png b/include/ebsprite/101.png new file mode 100644 index 0000000000000000000000000000000000000000..13f54ee3af6a187816ce3fa731fe0e017934696b GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq^pruEv0|xx83O~8 zpr?ytNX4zUcg_|z8wj)|dKGeNs;cf_>9Y)CIxZ93bo#*zp&%w%6=Sa>J@%V6b1^DL zzE9+5YrL6$fxmlloW!I+*+)I$W zUHP^a2XUd-m0kVWbKtuAZ}LK^m~&DbU15X9)yQMji+ zI_X5=t*u@0KusI8T0E5Q9iC7gV=B7v8KVz}?3*=CCl7Wq7lcLLnXT3@^@hP>H+P2T znQEVF-x#j23F!ZM{MRnXJEbaS>+6PR3?){dg*G43UdBIZzSfQ<5vp!C}IjKW<J zAGlO*@ip9HG*M)Iam=oTwZMc07*Pf96f$b_(!?^@6uutyeD|8+feyp#YwQj6i?9POuAX*>G>|5m>M!Hqlh3s8FD&~8N9i%Wk1 zXUPsg=@xoaoWC7_w4_3a!r$MoA&Sawo}zF$VqEgse8Y2&G7JC#m_RE6Nj~74O~PgX z+%n9DVk^@HqqNLjP}&1vMVc&()Q1(*-Yx)MpSi?ngofn9fna@mfa^4_UvVJp!-TRP zpK7R{^4bAF5Kh`SseRgrngig|DFU4>@vXQvzz18ArJWM6%?$tm002ovPDHLkV1mQy BsNw(s literal 0 HcmV?d00001 diff --git a/include/ebsprite/1011.png b/include/ebsprite/1011.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ffebb663a677a5e357a2eef7a5eabd8dbc3416 GIT binary patch literal 383 zcmV-_0f7FAP)20+ro>*^NaU?RzVZV2Ao6O literal 0 HcmV?d00001 diff --git a/include/ebsprite/1012.png b/include/ebsprite/1012.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ffebb663a677a5e357a2eef7a5eabd8dbc3416 GIT binary patch literal 383 zcmV-_0f7FAP)20+ro>*^NaU?RzVZV2Ao6O literal 0 HcmV?d00001 diff --git a/include/ebsprite/1013.png b/include/ebsprite/1013.png new file mode 100644 index 0000000000000000000000000000000000000000..0364dd9a1b7b518e17dcfb6ab7e05c5d0a86d530 GIT binary patch literal 407 zcmV;I0cie-P)?9POuAX*>G>|5m>M!Hqlh3s8FD&~8N9i%Wk1 zXUPsg=@xoaoWC7_w4_3a!r$MoA&Sawo}zF$VqEgse8Y2&G7JC#m_RE6Nj~74O~PgX z+%n9DVk^@HqqNLjP}&1vMVc&()Q1(*-Yx)MpSi?ngofn9fna@mfa^4_UvVJp!-TRP zpK7R{^4bAF5Kh`SseRgrngig|DFU4>@vXQvzz18ArJWM6%?$tm002ovPDHLkV1mQy BsNw(s literal 0 HcmV?d00001 diff --git a/include/ebsprite/1014.png b/include/ebsprite/1014.png new file mode 100644 index 0000000000000000000000000000000000000000..0364dd9a1b7b518e17dcfb6ab7e05c5d0a86d530 GIT binary patch literal 407 zcmV;I0cie-P)?9POuAX*>G>|5m>M!Hqlh3s8FD&~8N9i%Wk1 zXUPsg=@xoaoWC7_w4_3a!r$MoA&Sawo}zF$VqEgse8Y2&G7JC#m_RE6Nj~74O~PgX z+%n9DVk^@HqqNLjP}&1vMVc&()Q1(*-Yx)MpSi?ngofn9fna@mfa^4_UvVJp!-TRP zpK7R{^4bAF5Kh`SseRgrngig|DFU4>@vXQvzz18ArJWM6%?$tm002ovPDHLkV1mQy BsNw(s literal 0 HcmV?d00001 diff --git a/include/ebsprite/1015.png b/include/ebsprite/1015.png new file mode 100644 index 0000000000000000000000000000000000000000..58b01d69f79e137e343cc899d0a995aa172fbc4d GIT binary patch literal 377 zcmV-<0fzpGP)cb1FA;y zp?a5gA;cI%O+s@5m#$kZv@f6~o~G%G@eva;UMu8BfE8keag1m} z^#xc#NsR1`m%9E0Sb?o*leNA8PD1uLZ3XkHPeC<-Oyqtukrg6wv=h1!P%kAZ(5`@% z!20{|30Mcb1FA;y zp?a5gA;cI%O+s@5m#$kZv@f6~o~G%G@eva;UMu8BfE8keag1m} z^#xc#NsR1`m%9E0Sb?o*leNA8PD1uLZ3XkHPeC<-Oyqtukrg6wv=h1!P%kAZ(5`@% z!20{|30MPyJDb50q$YKTtJ!KGPtXOJa1{7T9 z>EaktaqI2%)4UA|0xSVu3t7B3vUo3G@!B9_edRZoc zr3`Bo|9)${)^LYGcS)7D8S{%W319XF-R`SBBlht7F!w~YeY&Z~;Crr?Vd?b(6Tez9 v9_9s1Asxp~f4|0jVu63a>{s@S0~`2_&ao}8R^sylx}3q&)z4*}Q$iB}&F5E} literal 0 HcmV?d00001 diff --git a/include/ebsprite/1018.png b/include/ebsprite/1018.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5deab967ee8595fdb33d5db13ef293031ca71f GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtJ!KGPtXOJa1{7TD z>EaktaqI2%gS-t20xS+*3t7B3vUqQ3(LNaTCLq3U!r4Zqdoyd_xOZABHb}Xs)Xa2X zU}O;h5j$9Y4CQwI5uYG-_VpxR-4k{UqHVcn*&6>aUV0RLQ|~8(K+_H86-W7-6<7ok z_%BFZdN1>Ww}Sg(*ZSB07}mzQl`+0Jy!fh;jvad&^CjuS+ZS3pyj`?~U*m3FM&QE2 uI))bqHKaVG^Z6&Z&AxOiPyJDb50q$YKTtJ!KGPtXOJa1{B=j z>EaktaqI21je-pdJggUb4srB7;^;fT(epqfZ-pqY+VlqYx*a0>kNoe7QCd3X#rX-$ zG7lKoEeVXn-Uw=JDc+#h|*bmuV&7#Smz3d@BbM^99~Nv zWB(zyVcnB!qCMOj>LR+o$jK+PURhSf=Ef+OFpc%|N|l_uK({k^y85}Sb4q9e07FV$ AUH||9 literal 0 HcmV?d00001 diff --git a/include/ebsprite/102.png b/include/ebsprite/102.png new file mode 100644 index 0000000000000000000000000000000000000000..5338c121f70072b1cca813d4fb20bb59fe9c32fa GIT binary patch literal 596 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq^pruEv0|xx83O|o zo2QFoNX4zUcMcXd8wj)}dKGf&sjBW^>9Y)CIxZ93bo#*zp`a!!k2I5s=@lo>Y4xZI z{Nk@RPej3oqPP6?=QGH#9*BCwqj==TE}eg`_t-z*EEdVQf_H)Z z8SVPzs%zbq{9XvnD2=PFXZZGxDelbs;GVU=y{8^$)G!si-CiI@6+Q%SQnTy zsI6$8YdYhl3rE8>#x*Uz0?AIS4y#!Obz39j|Awf{ZO`tx9MZCjeS?s({0faP7BUQ5 z*$+*XYvEyr7i9 z*MqUGvL})8N)sq@zDcsIy?!@_br<7_SPRR)J^~Ccg}4|Q>K8E`(EG?+W^-+lS%jkk ONTsK%pUXO@geCw=(c%37 literal 0 HcmV?d00001 diff --git a/include/ebsprite/1020.png b/include/ebsprite/1020.png new file mode 100644 index 0000000000000000000000000000000000000000..6053829bed6f31d90947c00171682e7067bc470f GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtJ!KGPtXOJa1{B=k z>EaktaqI21gS-t2JggV`4srB7;^;fTA$u_JPJsR+#-A$%cywPrygy-|LO{pN%#;(1 zd<6~6G7lKoXRzuh&RKef`vmveLhWT@OXM54F3EK}DpWV@`LO!N!KVxYO)r?2G-h-z zUGQGeMc?68&ep;PS%=qYE@wS=&HBo8L4RW3&G&m9bQgT%s(Tj5J>k{{j-9h7e+k&g z{GyieCi{Y9bA5-Zx_a65`~lGmMBDbs^LuzVs=blj!S2SWH^b)t6syak7lD3Y@O1Ta JS?83{1OTAaV*>yH literal 0 HcmV?d00001 diff --git a/include/ebsprite/1021.png b/include/ebsprite/1021.png new file mode 100644 index 0000000000000000000000000000000000000000..349b486dbbff8c790755e798c217bc10e47f3fe3 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtJ!KGPtXOJa1{B=m z>EaktaqI2%gS-t2Jgfn3i7f7gEba*`ZUrLdS0;-;d7j*SX_DN(g9(?W3*43}I+vKz z#4PiGf!*Q&BcB0#M3PPROz{A*sLNr!B1^;@xY}$(n;pI}q&{@tsC=E-foBo>0j~Sc zUvOQpY`($h@tDDyfyMD~`_gFnA2JPb2|(6P(bj);zeaxRgJ@&8j70*8iS=OffILzKi@|?Un=jgTd3) K&t;ucLK6V`!C_|r literal 0 HcmV?d00001 diff --git a/include/ebsprite/1022.png b/include/ebsprite/1022.png new file mode 100644 index 0000000000000000000000000000000000000000..9a583030ed1f2dd2b9a6409514c2a1c7ed1603ff GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtJ!KGPtXOJa1{B=s z>EaktaqI2%gS-s}9IOFuFFE=iar9jfv}#(sW8u6n4SyHTh&ovCL*1vM(@A@3(2LUn z3`_zI3@i!^j0M~?f^KF1)Ne4K^*N|lEJeOS>e8&$jtcb*_kLW<(f-OH&~$^@qxZa3 z73+#Vg?|kG!VLBdEROB{Q}U`4EF7Yau668PUs%fCpdGoh=`GU*_bb_dW_>?Uz@Wc} zwITTh--5l1Zn9^H2fQ}D%kNPA!b9O@Wizopr0QS~l`2YX_ literal 0 HcmV?d00001 diff --git a/include/ebsprite/1023.png b/include/ebsprite/1023.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5b6326f3a80ef0252b016ebb7eab5d540a9bcc GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtJ!KGPtXOJa1{B=r z>EaktaqI2%gS-t2JggV`4srB7;^;fT(epqfZ-u)4h51}U8C%=yKYfS~y5#1idGX8y zW|;>J>=p+YpD}oIs84^-^l6c4UQU!_72}Et-%hYKzG3|IXwe&w8U~N17mOZ9zn7aZ zWtwm#v0sp4zrpBnTPyJDb50q$YKTtJ!KGPtXOJa1{B=o z>EaktaqI2%(}E2OJS+iT3t7B3vUo3OnUbJcwnAP1#5tx#ENbnxozHq}7WuivoVQ?> zIKaSW(7?!JAd~R%pHFI>Lrey5w9!_Dy$m52-YQD6Nbw7Z*NIrG$TB1e*fNCu*w?qL zfz|OCm(35t}y9g7*HB6evUXWhWhep1-e+a2GIt9;-0ui?kk1&wQ&uOGPIz#Vt;|CIK%wbDReFnGH9 KxvXPyJDb50q$YKTtJ!KGPtXOJa1{B=k z>EaktaqI21gMtkTJS+}g3t7B3vUo3G@!B9_eMNl!3123w83}UVKNVUx7q!hP{$X^G zk*}bE`3&`6pHRCwC$n6VMUFbqXKN=9ImjKBz#lpet)B_l8f<9GwO3vs~@ zI!QjbNJhmk9LxIe>^QcPa?VMk!!$i4lIBZp09xXDD;sU-wSJZo#4*5^mLdQg z0hIER)O?K(fPn!1ZWpwH^Xd2|>2XYrvk!m?$~7;-geZ)o+6ZC?fHI~4q=wv5*azsH za_YHXfL_A@2mn6-2oeC=57Br4TI2BmC=l+L6;co`p)`K;4(tW+1Roz1b%AKyDF6Tf M07*qoM6N<$f+yd4sQ>@~ literal 0 HcmV?d00001 diff --git a/include/ebsprite/1027.png b/include/ebsprite/1027.png new file mode 100644 index 0000000000000000000000000000000000000000..8a8c4430432f929aad2e838394e3773028cc11bb GIT binary patch literal 314 zcmV-A0mc4_P)`6pHRCwC$n6VMUFbqXKN=9ImjKBz#lpet)B_l8f<9GwO3vs~@ zI!QjbNJhmk9LxIe>^QcPa?VMk!!$i4lIBZp09xXDD;sU-wSJZo#4*5^mLdQg z0hIER)O?K(fPn!1ZWpwH^Xd2|>2XYrvk!m?$~7;-geZ)o+6ZC?fHI~4q=wv5*azsH za_YHXfL_A@2mn6-2oeC=57Br4TI2BmC=l+L6;co`p)`K;4(tW+1Roz1b%AKyDF6Tf M07*qoM6N<$f+yd4sQ>@~ literal 0 HcmV?d00001 diff --git a/include/ebsprite/1028.png b/include/ebsprite/1028.png new file mode 100644 index 0000000000000000000000000000000000000000..424a32b0fe365157d1a78092fcbccaf2fea03c83 GIT binary patch literal 347 zcmV-h0i^zkP)t7%Qp6$U zqpyDsh}@at7s2u6DYmhdp_DRsvKz;{C*FFNAw0ke*X!g;DJOG7Q>_&|njpzUX002ovPDHLkV1nJ*j5PoN literal 0 HcmV?d00001 diff --git a/include/ebsprite/1029.png b/include/ebsprite/1029.png new file mode 100644 index 0000000000000000000000000000000000000000..424a32b0fe365157d1a78092fcbccaf2fea03c83 GIT binary patch literal 347 zcmV-h0i^zkP)t7%Qp6$U zqpyDsh}@at7s2u6DYmhdp_DRsvKz;{C*FFNAw0ke*X!g;DJOG7Q>_&|njpzUX002ovPDHLkV1nJ*j5PoN literal 0 HcmV?d00001 diff --git a/include/ebsprite/103.png b/include/ebsprite/103.png new file mode 100644 index 0000000000000000000000000000000000000000..8f395f53f539c805917766e0f2413a0b1a3a2c61 GIT binary patch literal 672 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq^pruEv0|xx83O}T zkf)1dNX4zUx6T$e8wj)|dKGeNs;cf_kuP2X#6Fyw&B`B9PSQ$&Z&nOjO&Pfp9T_a79CDW5*t?&1qLreSZ6ebG zlZLr3S~wJT8eBcc!f4QW+-ZrKC_@&rN9>m)O$;C2_$COJ3!W?5ab=T4!!3qAYK#Xq z=X9>*?Tu)-)XBWz`?42tp>hpTd~QkG56{n2DzRc%pOCfs&F|MnEqmqO@!xM>Q6^!d z>!5Mr@8Y?ww^TwoZ@c6kTB^u!<5fb+t2@8`=^s0HcJ;4Soqzo2%u-}n!K+YKv6*%I z!dVSX3=6iY8HD~c3|X|QYxQE2>iDgP6&Tb$UeG)yH}BowOCk)b`EAb{?2r&Ux=4N7 ztK0u?OK~;4c$mB9)i#GLu00hS6$^i^7UDm@`Dx%>1BR6h+Za|Ud}|a-3Uv6`b^7&N zEAHQW3hp+4JH_ju*YKB_bpcnx^wU~`p#|0Z_v&x`!=Sn^}+y<7!$JiyZ|!re7!W`qh_xF<2XJ(01jjT8ldJA z4?rui&;X5Dy8y)npaln6P*`H72?0<>08E4lS=l}wfNnZUVoZpiAG@)501|lJZ%t@` zaVtPKnGXjb01SiyShXI2R%jd#z+1q?2S5-6U_h)L{oLn* zZ~$ym@&1~L1E4J+9RMj*yakPDJb*k3YcXj(m}vdGIWP)f2X+~>Dj)jviU0rr07*qo IM6N<$g1vi&RR910 literal 0 HcmV?d00001 diff --git a/include/ebsprite/1031.png b/include/ebsprite/1031.png new file mode 100644 index 0000000000000000000000000000000000000000..522f982aaf5ccf5b15290ff7b0abfe60cdfc40fb GIT binary patch literal 351 zcmV-l0igbgP)5`U3-?0DvWCM(TC!4?sUU!Wa)18sLM(1+c*Fd}_j_!#D$Y z8RH@TI{+Kc=EVb0SFsmBy?*fl7zo=M?-lIcf?)yJ*3ApRfLK4~br+>!0oV`6&wfrf x2T%pY3V?j3RWZwa`UBvSe4EfKdIq)zcmT-IoOUl=VhjKP002ovPDHLkV1k2Ri5&m{ literal 0 HcmV?d00001 diff --git a/include/ebsprite/1032.png b/include/ebsprite/1032.png new file mode 100644 index 0000000000000000000000000000000000000000..0672075a130b7f32c72167f71e06b9e3017f76ca GIT binary patch literal 348 zcmV-i0i*tjP)>Kik&^oA=+g8l%KsxIp@@)!?HXrvihYk0AgJ4#Uv|;e}E=%t>4-R5)S}3+x`H0 z6&K(WxRke8kOG<(pxpAR{Qw|{08o&BpMv242qNv{`Lv3qW&9oofEh3Vs}RHwfHs9_ zzyb&$Yx@IW1&4KtwSWNu-~zE4vi>;E9{@`}%up-I*wV!TKm!KA%5rV#`~y6$msQ#l zNI&d9KL8q8kL!E@zh2St0D23J%>{`&09Kmy7Nc-0000>Kik&^oA=+g8l%KsxIp@@)!?HXrvihYk0AgJ4#Uv|;e}E=%t>4-R5)S}3+x`H0 z6&K(WxRke8kOG<(pxpAR{Qw|{08o&BpMv242qNv{`Lv3qW&9oofEh3Vs}RHwfHs9_ zzyb&$Yx@IW1&4KtwSWNu-~zE4vi>;E9{@`}%up-I*wV!TKm!KA%5rV#`~y6$msQ#l zNI&d9KL8q8kL!E@zh2St0D23J%>{`&09Kmy7Nc-0000k7RCwC$*x?NVAq)jzM!69j#Sv}d;a2&Qe6A}{BWcG|XF06&1$1?z3N0M-z;a9jX`$Z>H2|Jw!DM=*o<0icD? zg3wmN`+ysO{L0QAME(KjLZStrgJ}3hG#$`;6!-p7aoM}zasb)_1}UY~nEg7Q4v>Xg z0a+Mb-x<^&08L;I8yd&z$j^TdKwB^x2JU_aW&z%ISN__ypfFqj0000PyJDb50q$YKTtJ!KGPtXOJa1{8eg z>EaktaqI1jyPSs&cv@_|++JwNE>tdI>AxUo)wezCpn`_d@uOu)-XZ+om(Ax_74KX! zr})<8+}n2hoeCFMp0qjedhY6ogV!qdGx+>tRQdR?CdBh#n5P}{M(zu@BeWU*Feq5h zWo>Y{#ylr=cU&~vfvScA$DG3q3F?vBCoUfQ#~{(s_nG^{e!U%4nzHv;FEf7mbaAnC z?g@uC%sq7-CHrg{N+xWn>kx4G?rI|2@HZ!ESB|(3yTdolr6C)Sy%7At?9h5~=UT_o zIZtjgJ1kCKoT{8&>hhZLi-#Mx(Z%uvvjgHOtp9GA`nqrfJgTe~DWM4fbuM>P literal 0 HcmV?d00001 diff --git a/include/ebsprite/1036.png b/include/ebsprite/1036.png new file mode 100644 index 0000000000000000000000000000000000000000..ddebd0aace701d6895ad74798932f3f3feffb702 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtJ!KGPtXOJa1{8eb z>EaktaqI1ji=2lIcwB6~++JwNE>uoo>AxUo)wezCK!OH)_|Z*5-iq?yCr((}>wYWsDnCr!ve?{l{1}nLGM(oB+!wW`#%v(`AQ?A80i2+Ic7XF|_}#0s5Q4)78&q Iol`;+01>-#H2?qr literal 0 HcmV?d00001 diff --git a/include/ebsprite/1037.png b/include/ebsprite/1037.png new file mode 100644 index 0000000000000000000000000000000000000000..a3139b7700d2212727992d30923da37ec685e435 GIT binary patch literal 314 zcmV-A0mc4_P)`6pHRCwC$n9&KtFbqUJN=E1?9ibz11dq@WI*zw$!C)u{hh$qs zQs~Eh#Kh=GO!UNonjL0lae4~e0dRe{9ODD9Yq@lJW&7d+ zNIxR90a3%WY(R+%pdBPx# M07*qoM6N<$f+>uDf&c&j literal 0 HcmV?d00001 diff --git a/include/ebsprite/1038.png b/include/ebsprite/1038.png new file mode 100644 index 0000000000000000000000000000000000000000..4ab448b95db50713b21b83b2a672905e6e153c3b GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtJ!KGPtXOJa1{D13 z>EaktaqI2$yS#@DI9hDI++Ju%E>tdI>7O8I)wkVC)q9$jN>xKWSFYSU&4hZRA3j0n zENd_2-ac2pup&2(i@Ct2STrg?T3(z%)6T*Bj{Nsk+ZKfB&S(C}pKy1^t8#{b%?oY* zGh{5hClnxH&u}Tby~n*;_c2qCks6Svwq;tv4c!@h1$$X9Et@he>6VRw?1FLwN9lNm ze~kaiwd8UgIF9f$RMk}J&X_i7F8dvZ3(A+xl(%M-a!z9|VCIZHV6|yxy$_J>)^g>M zw`QouIr|2Ymh5{w7-E>D&I&Z_;GE9v(Z9`9Jbh!#$^g#&{0h2^MrwNV>de0%&}k6= YU~pY5oW*JeFd!H_UHx3vIVCg!0Lfl-=>Px# literal 0 HcmV?d00001 diff --git a/include/ebsprite/1039.png b/include/ebsprite/1039.png new file mode 100644 index 0000000000000000000000000000000000000000..3ccca09afcb49f4c3c1cd8e07f69c33390d97c77 GIT binary patch literal 331 zcmV-R0kr;!P)A@|gk&kQVqIgP zm?R(fr^5KuFPso#3};%GWj{(fS8EsC1AM+Q3td=xeqI2i`2omqd%v>i!cvhv0`UuA zb$any2+o3_EZOeH9B%t{KtVO6zLANew4)DAM+UHms`fmF` zcYxZ(MCQn@`(sb2u?hY4~l{ekL* zq&ol)8COav3!RfdiU*N90I8U)j{N~>K~PajZAkJ5fI^6V=O9$9+Ek4P;2}W+1p%Y; dum=7O@Bk!ObK zY3o0Sg`}5=pWejcd%g7R#H&D~i3bU)d$+tjFTR#XI-pFtu=y-eLj1s&4|5=(1L774f(Xs_?-?w`f^Sdyt z5OsLRsG-R?lY7~(;sXyEPbjZvm?*8qu!7fN$BROihIH;m>#t61H^O*@7_P7#;O1m_ zvsSe%oQ0KfN|_8p^wy)(mmR#jU%aA<;i8FX?&SCDB&>8AQat`&yz3#E6P%FUG{+C4Fns@kG;Ol}+0S1k`Ox~Git=2dlZaZ|td@@5oHb>0# zKdu)|mQCBoE6UBpu$5`U>_xK6Wxj;uIzK63c%rR8neFZSrKk4FGhAa@z_XEUrSb+N zn_XY7)?~MD(&l1exF;BHnPI-)OWK zr>hi$4a3FGizTVN{@#&O&u%k)X1UJHTAzi{K)m6Xjvkl7cV{nutrCU+sfMZz+dG&2 zUbZy<@>Hqym!hulF|1)#sJhbA=J1kVjd23^f!P_-vc>Wewwvt!sBkbWKNAzxQsHg+ z{c7~atPceYd)hjDlUHeIef?Oq$gGRCwCunCl6{Fbsq}N=E1?9U&uh1dq@WI*zw$z#u3Bp+_8| zQ-9o#1Sk5i&*w+$y*G;<+xGp{*>(wj zsjwt!CrJXy51jH2P+Q`%e(1t=fh|~kn4xbtj4nP#- zvKx}y0IZu;@8wi}0Ih4S5lqStU^NvL)S_2YJ^=3!Xu)&22UY9ySR00000 LNkvXXu0mjfSbciw literal 0 HcmV?d00001 diff --git a/include/ebsprite/1041.png b/include/ebsprite/1041.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5a6bbb7dc902babb0864648fa1c5ceda0b7abf GIT binary patch literal 314 zcmV-A0mc4_P)`6pHRCwCun9&WxAPhtqB_ni{j?fW00wZLEj>A^1goIR`WSwoI zV$+ZN2!i-2u@6kCwU(7CX#j4=@&4BAyu1LdwJr=Wp6|~`*FFIFNzYg9!f^?Jfy4#C z7mmP^#ym+9NPGYmSPPUFKuSU@NFD%hKxthb0JK_f^5qA>^6@5HK7gx|aCsSCZbaT> z+y~(Q_5zf(9JPV-0B8-$YC!P;tcTL+%_tp!)_V5^K#*~e*%yHQ3aJsv2OzcE+UAo1 z#Rb5!!lbf_U0lQmUBWdB>(^b M07*qoM6N<$g13x+<^TWy literal 0 HcmV?d00001 diff --git a/include/ebsprite/1042.png b/include/ebsprite/1042.png new file mode 100644 index 0000000000000000000000000000000000000000..74a8de29d46a2e4a53a3bff10a1e997976c7e568 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZGe6x{CV z;uunKD>)-0BSC>pT0`THI;(KD-r)ts40_D|XI3ygW)~OvkTk<8N!F}Fh9S7&bVAVL zh6$F=#~BSi^2^&zXyKe`ULo5sucJV+r@P`?jU2*^b literal 0 HcmV?d00001 diff --git a/include/ebsprite/1043.png b/include/ebsprite/1043.png new file mode 100644 index 0000000000000000000000000000000000000000..041c1a976d1e82c741d064079eff8fc9b7ce1c73 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZGe6x`)-0BSFIBj6sS_!h!`K=8M>r$TpllAZ)C4;KxB$);$u-`XbtS<=791JTRJZ zMMELw+=W60pFfA&`Bf5~p7F-9FHl#CVSD`OaZrEWy9dP#>vA~EdlVU)I9csyS#_Oe z+-1pNd+`BJ)C|@g28~BNO7tWO*n6fiznIFu)75ZSW%G5$#cvxgnklZF5yRa+kC}-} z=wI^T7kmen=Do0Li0IZVJ@KHFL9tz+J98S_il+<=k2^nW?TI)u9q0oFPgg&ebxsLQ E0B{;!6aWAK literal 0 HcmV?d00001 diff --git a/include/ebsprite/1044.png b/include/ebsprite/1044.png new file mode 100644 index 0000000000000000000000000000000000000000..74a8de29d46a2e4a53a3bff10a1e997976c7e568 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZGe6x{CV z;uunKD>)-0BSC>pT0`THI;(KD-r)ts40_D|XI3ygW)~OvkTk<8N!F}Fh9S7&bVAVL zh6$F=#~BSi^2^&zXyKe`ULo5sucJV+r@P`?jU2*^b literal 0 HcmV?d00001 diff --git a/include/ebsprite/1045.png b/include/ebsprite/1045.png new file mode 100644 index 0000000000000000000000000000000000000000..041c1a976d1e82c741d064079eff8fc9b7ce1c73 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZGe6x`)-0BSFIBj6sS_!h!`K=8M>r$TpllAZ)C4;KxB$);$u-`XbtS<=791JTRJZ zMMELw+=W60pFfA&`Bf5~p7F-9FHl#CVSD`OaZrEWy9dP#>vA~EdlVU)I9csyS#_Oe z+-1pNd+`BJ)C|@g28~BNO7tWO*n6fiznIFu)75ZSW%G5$#cvxgnklZF5yRa+kC}-} z=wI^T7kmen=Do0Li0IZVJ@KHFL9tz+J98S_il+<=k2^nW?TI)u9q0oFPgg&ebxsLQ E0B{;!6aWAK literal 0 HcmV?d00001 diff --git a/include/ebsprite/1046.png b/include/ebsprite/1046.png new file mode 100644 index 0000000000000000000000000000000000000000..74a8de29d46a2e4a53a3bff10a1e997976c7e568 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZGe6x{CV z;uunKD>)-0BSC>pT0`THI;(KD-r)ts40_D|XI3ygW)~OvkTk<8N!F}Fh9S7&bVAVL zh6$F=#~BSi^2^&zXyKe`ULo5sucJV+r@P`?jU2*^b literal 0 HcmV?d00001 diff --git a/include/ebsprite/1047.png b/include/ebsprite/1047.png new file mode 100644 index 0000000000000000000000000000000000000000..041c1a976d1e82c741d064079eff8fc9b7ce1c73 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZGe6x`)-0BSFIBj6sS_!h!`K=8M>r$TpllAZ)C4;KxB$);$u-`XbtS<=791JTRJZ zMMELw+=W60pFfA&`Bf5~p7F-9FHl#CVSD`OaZrEWy9dP#>vA~EdlVU)I9csyS#_Oe z+-1pNd+`BJ)C|@g28~BNO7tWO*n6fiznIFu)75ZSW%G5$#cvxgnklZF5yRa+kC}-} z=wI^T7kmen=Do0Li0IZVJ@KHFL9tz+J98S_il+<=k2^nW?TI)u9q0oFPgg&ebxsLQ E0B{;!6aWAK literal 0 HcmV?d00001 diff --git a/include/ebsprite/1048.png b/include/ebsprite/1048.png new file mode 100644 index 0000000000000000000000000000000000000000..74a8de29d46a2e4a53a3bff10a1e997976c7e568 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZGe6x{CV z;uunKD>)-0BSC>pT0`THI;(KD-r)ts40_D|XI3ygW)~OvkTk<8N!F}Fh9S7&bVAVL zh6$F=#~BSi^2^&zXyKe`ULo5sucJV+r@P`?jU2*^b literal 0 HcmV?d00001 diff --git a/include/ebsprite/1049.png b/include/ebsprite/1049.png new file mode 100644 index 0000000000000000000000000000000000000000..041c1a976d1e82c741d064079eff8fc9b7ce1c73 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZGe6x`)-0BSFIBj6sS_!h!`K=8M>r$TpllAZ)C4;KxB$);$u-`XbtS<=791JTRJZ zMMELw+=W60pFfA&`Bf5~p7F-9FHl#CVSD`OaZrEWy9dP#>vA~EdlVU)I9csyS#_Oe z+-1pNd+`BJ)C|@g28~BNO7tWO*n6fiznIFu)75ZSW%G5$#cvxgnklZF5yRa+kC}-} z=wI^T7kmen=Do0Li0IZVJ@KHFL9tz+J98S_il+<=k2^nW?TI)u9q0oFPgg&ebxsLQ E0B{;!6aWAK literal 0 HcmV?d00001 diff --git a/include/ebsprite/105.png b/include/ebsprite/105.png new file mode 100644 index 0000000000000000000000000000000000000000..9cd983467dcc9ff38919602539e669d902dfce6e GIT binary patch literal 641 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq^pruEv0|xx83O~8 zv8Rh;NX4zUclPEUHV|k_?0qC?9(eP~tA2K8 zy8npl@U+SA8(riyRS#SAIiEKL8jb@@SQw`_eZDR0fk?)j2~Uf;md5EH{<<)WnQ?;l z4&H?3wW*48&L91rzg_i;&H05z&I|#%J2+M`Br#s#ZZOx7OA~k_cVOvq{X zG8n}QmA%f+ZJVYVk|)5B#e73oFaNan)+0O3JQ+1a|NMUaKj{7OAcLKHtPD}Sb+3Xx zFg#jmU)#gKRh+5e&cW%K9I5fu)0@^_Ie(PtK?Xxs!RCWO?AH0Ws>PTZE=_OXU3c$0 z)9vf8&+p!Tf?*5W2ZfxK!T-OO@h)BF&&qNj(#$2NfIC6lag`&}0@DU_+m&KrchkPJ zIWqL|ZTNo0zs)E*_1kZTjM8Km){gxPqTa1Kc7i#hE`5bGL;i-_T$8MJRNmijYQb<* zewx|xMY~L{7?r(#aPwd0$9oKW9%Rk(%8ki!Sbxi2`;K+PtyMt>-xh9dVxGW#VD`17 zfPCh|a?_<`8a6Ymc>8WIL;LS;K?Wgd$x<1Hbk+~c4&Go`Di^M8z_3)zxn3^cm|^8X zZ+5l?Uy34h>uefs9c0w_$1n0uVCVJ?3>LpGKf3q!?X_lEhNX;IK!KE1@y+EQr=9&R Q-VTa$Pgg&ebxsLQ065kF)Bpeg literal 0 HcmV?d00001 diff --git a/include/ebsprite/1050.png b/include/ebsprite/1050.png new file mode 100644 index 0000000000000000000000000000000000000000..766c5172274d995c6b7849cabe59242e2d4554fe GIT binary patch literal 341 zcmV-b0jmCqP)cNq<|i)3=rr=)Z#hYy;|>Erjb6`N(i*Nw^8!#qYCJChS87iCIVp%e z0I4yjQV_cUT4QNT>;SYXy%c1A05p{20sd`_T5$r52RQeDGusZ+^BwFLrXl4fhMX}PMt6oIi0a`C0PLDMt!P{^c06ow;irvE{$u0mrP}_bANFQQ=prJw1)izQ#`X18H?0PZs3f(F;BX8#8|0OW@T2aWIZIFjXu n)B*r4%d%;NKtFYAPfayM(GG0fpIzlM@Go8BV>#mJ4&}`B`OZJ zupU3gHB}Dp6bZf%WE@#9 z)Qx2vjAc0dLzN1iFu^3`oP#7W#&Qug`~sv)&Sf5e*2JG9|AZ=qUqJ7Y!^AKi{_PK-z3DK7dM(!na0ingz-Wm1 zIiLpUg>V-Ye*g}0HQn9N9Kd~uNYi~KGY3eU64i9(18}b)2g4J0U&+h>@P}u*)x7pp zLk-kg60Q_}0T60Q*8@-ok5)692cXrKhjl|U09BHlw;JgtRO^O@fUTSbL)xGF2W+J! q+{NR6(@|sj1GJT(6*O!QXal}hFKFrbmoLcx0000XFboCYj=~5XA>%MYjv1jxMqmt%9fc9N6)BP> zYA`Q<4R$!ZLs8p&O42xC3L#9t%w!JWoZCL-{{V|W$K2OTOex4dfI~QF900wL8sGp4 zgdq9>QkSO&LG%K0yBx(1pjE?CF% z?(0A^KrIAqRP+H5q%_slusZ-9L~>KTCF>5zElN_+u@B&rNZxAAG4BoUf42wV4bk=0 zpJHx{kCE<2LtzKNhk^i<@d4-$iNlU&-2tf^5>&2>kLPLts2u0sM+=fhz`VUida<;` uO3z83C4Wu>fKQC?MFmA(fD-3GZ@?3Qd{Yf`D$VHt00005qe$=G9N&U<339-<#+&T*>SHxdnxAw_;p#@0r(dP zEW_ad(#1n+JP!Z@(MmlHhXJ4;9#S>$gxvwSg@hYI-1FMi%nm^9Du#}{xes&);K~jG zamM-gkIe_&{Ur!a!(jmN66Jxd09;;s05Kp+JB*0dM5r;12SBY?YAkKdb^vPsjQVUW z-;LD^$uNLCAzn1*2Pl^f8a{I4wI~Y!>E%O-xkUBxpbzv0H~?oSp><323Wxvz002ov JPDHLkV1j55jGh1h literal 0 HcmV?d00001 diff --git a/include/ebsprite/1055.png b/include/ebsprite/1055.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc5bce52d4af89c888bbefd90b0ccfb189252a3 GIT binary patch literal 363 zcmV-x0hIoUP)@>)6omi)002ov JPDHLkV1m`6ij)8V literal 0 HcmV?d00001 diff --git a/include/ebsprite/1056.png b/include/ebsprite/1056.png new file mode 100644 index 0000000000000000000000000000000000000000..38f33f3ec5c879df6b9fd4f45bf0481557cf562d GIT binary patch literal 339 zcmV-Z0j&OsP)ohj8o^~o$QUU-N=8T*-*HC~ zB?<_H`MCH6wom_^gb;Q_7r69NfwZ__#-~jN{zc%_%FAzL{WXRX8CBX%d+Rn;2R|;GJYvBS|AHinlz;J+8 z5FQ5~AO}*b>S;I(Aot^;Rr8$?27nJKtE(9v05{+uIU}<+91c)wECHnTV+~RFaETI! z(ewaP$&&GW09L~&cQD}tXhFJ7!@~fi&6qPLTB5oQqr(AGKpvPsFMU4)!2iHfTYaZ| lDHI++SqWMVoA-bF_8YQEeWmwx9nO4OQpaSXbrAF>n*t1KG0pD zR)k&$UqBKmrMMe*6Odj!v{XM6!U)hN)#}jk8zGn*Lp}fi002ovPDHLkV1kA7ga!Zr literal 0 HcmV?d00001 diff --git a/include/ebsprite/1058.png b/include/ebsprite/1058.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf398334b8d3e0fbb3f63276da59ec5e657aa37 GIT binary patch literal 425 zcmV;a0apHrP)GfQsf%paZ z)ZcHrWc`u)0L(xfrAJ(p(ptIxC`dy9S@>NWs`dal!Nf0sTqs1v@`7cHWwA#;egU*eR3w=kkd;|`{{VQv zpc_$)U&RhC48#urZnf5HwkGXh;s=0rp#Y>9R6_; z@H5{Z1SboJe*iYSZ?Yk~Nz-**v!)Jh`}`)fZ`=Sd1LctEaUZ2X>I2w|5W*ld4A;v~ z!axkfFMv6Uw|-QNQ>FJyLFxmr4;erbepjj59zg8-Q82{}P%T>X$3Xl7luj|5^8Em? z0Bli~rhwK0Hvnv-VOwez*nVC20IUe%Ky)lqgyT~je*jioN&!>~*m#TM4}i5~syL|> zutm2$05$ccMQS?$a~lp-j96ph7r+h_rtJ5E-xiaRLOE&9Y9^7EG@_T z0YJyc^J$Q>LwkP!=m<9s+(678l^yNih{wj)2PnOgWq}#UYHQ%%056$tS{X4$bbkN< N002ovPDHLkV1gzErh)(f literal 0 HcmV?d00001 diff --git a/include/ebsprite/106.png b/include/ebsprite/106.png new file mode 100644 index 0000000000000000000000000000000000000000..a414b8110a45d2e711de3cd51939ca33b98b0ba2 GIT binary patch literal 640 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq^pruEv0|xx83O~8 zk*AAeNX4zUw@&9aJBYLu%hr=2>^AAQ_^TqtYa^MIX-3@gO$aK2(Z!t_9kAuH%jn$RAbhM0eROjqtHFkZ+y zJv*xGCJRvNb(myBH}jeG`U@E>Za@8y*pSI}^{)|!LmGqhpDnTrPcy!0?U+1=YoA{0 zX(26h4u-v3kLJGi&h04LdV*mEZ$fm;s;6Inehhw9v2G!Q!^#JS4QsDF*81_qtgXxW z!HWQf1y`Ru=WUG;dv@O_bDBFtRDSF9Opes})xmeC{hDKSwcm*$Ap6s8tDBY5D(@{A z_VO@F-?7eXKAL)dcPyVnHUn$o>1ek3^4|kio?hO>^gxGKP`~2U`>2K=)eKwq$!rtX zf7KtwQ0lE?YQeCTagY7BpUYN!KH&1_@80Eh3_J7tZUx(ZmdKI;Vst0Lm-=?*IS* literal 0 HcmV?d00001 diff --git a/include/ebsprite/1060.png b/include/ebsprite/1060.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf398334b8d3e0fbb3f63276da59ec5e657aa37 GIT binary patch literal 425 zcmV;a0apHrP)GfQsf%paZ z)ZcHrWc`u)0L(xfrAJ(p(ptIxC`dy9S@>NWs`dal!Nf0sTqs1v@`7cHWwA#;egU*eR3w=kkd;|`{{VQv zpc_$)U&RhC48#urZnf5HwkGXh;s=0rp#Y>9R6_; z@H5{Z1SboJe*iYSZ?Yk~Nz-**v!)Jh`}`)fZ`=Sd1LctEaUZ2X>I2w|5W*ld4A;v~ z!axkfFMv6Uw|-QNQ>FJyLFxmr4;erbepjj59zg8-Q82{}P%T>X$3Xl7luj|5^8Em? z0Bli~rhwK0Hvnv-VOwez*nVC20IUe%Ky)lqgyT~je*jioN&!>~*m#TM4}i5~syL|> zutm2$05$ccMQS?$a~lp-j96ph7r+h_rtJ5E-xiaRLOE&9Y9^7EG@_T z0YJyc^J$Q>LwkP!=m<9s+(678l^yNih{wj)2PnOgWq}#UYHQ%%056$tS{X4$bbkN< N002ovPDHLkV1gzErh)(f literal 0 HcmV?d00001 diff --git a/include/ebsprite/1062.png b/include/ebsprite/1062.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf398334b8d3e0fbb3f63276da59ec5e657aa37 GIT binary patch literal 425 zcmV;a0apHrP)GfQsf%paZ z)ZcHrWc`u)0L(xfrAJ(p(ptIxC`dy9S@>NWs`dal!Nf0sTqs1v@`7cHWwA#;egU*eR3w=kkd;|`{{VQv zpc_$)U&RhC48#urZnf5HwkGXh;s=0rp#Y>9R6_; z@H5{Z1SboJe*iYSZ?Yk~Nz-**v!)Jh`}`)fZ`=Sd1LctEaUZ2X>I2w|5W*ld4A;v~ z!axkfFMv6Uw|-QNQ>FJyLFxmr4;erbepjj59zg8-Q82{}P%T>X$3Xl7luj|5^8Em? z0Bli~rhwK0Hvnv-VOwez*nVC20IUe%Ky)lqgyT~je*jioN&!>~*m#TM4}i5~syL|> zutm2$05$ccMQS?$a~lp-j96ph7r+h_rtJ5E-xiaRLOE&9Y9^7EG@_T z0YJyc^J$Q>LwkP!=m<9s+(678l^yNih{wj)2PnOgWq}#UYHQ%%056$tS{X4$bbkN< N002ovPDHLkV1gzErh)(f literal 0 HcmV?d00001 diff --git a/include/ebsprite/1064.png b/include/ebsprite/1064.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf398334b8d3e0fbb3f63276da59ec5e657aa37 GIT binary patch literal 425 zcmV;a0apHrP)GfQsf%paZ z)ZcHrWc`u)0L(xfrAJ(p(ptIxC`dy9S@>NWs`dal!Nf0sTqs1v@`7cHWwA#;egU*eR3w=kkd;|`{{VQv zpc_$)U&RhC48#urZnf5HwkGXh;s=0rp#Y>9R6_; z@H5{Z1SboJe*iYSZ?Yk~Nz-**v!)Jh`}`)fZ`=Sd1LctEaUZ2X>I2w|5W*ld4A;v~ z!axkfFMv6Uw|-QNQ>FJyLFxmr4;erbepjj59zg8-Q82{}P%T>X$3Xl7luj|5^8Em? z0Bli~rhwK0Hvnv-VOwez*nVC20IUe%Ky)lqgyT~je*jioN&!>~*m#TM4}i5~syL|> zutm2$05$ccMQS?$a~lp-j96ph7r+h_rtJ5E-xiaRLOE&9Y9^7EG@_T z0YJyc^J$Q>LwkP!=m<9s+(678l^yNih{wj)2PnOgWq}#UYHQ%%056$tS{X4$bbkN< N002ovPDHLkV1gzErh)(f literal 0 HcmV?d00001 diff --git a/include/ebsprite/1066.png b/include/ebsprite/1066.png new file mode 100644 index 0000000000000000000000000000000000000000..9ceed3a6d123c7f4e63ef973a3b80b9c386f0bc2 GIT binary patch literal 348 zcmV-i0i*tjP)7E0_m3Ez9eZMkiwNd-M7Mcs}+T4N~LfbuD7o^8sK2 z1Zb5Akn>xe#^(X3iL_#d>iGS3EowE+=GzC5nwT}67G#vz4e|%TjCPMh^WwZ1^G;IS z`2e&fqa9}et)=7#pl-3Yl(bFG#_@5gEg`=E>4 zmm+@vy+;Y$V%&PE1aW;eiu&1E=x_k(IL(>}4YR~j6H85shMT_!%mA>2t`!P)@dU+j(x*G)SB00007E0_m3Ez9eZMkiwNd-M7Mcs}+T4N~LfbuD7o^8sK2 z1Zb5Akn>xe#^(X3iL_#d>iGS3EowE+=GzC5nwT}67G#vz4e|%TjCPMh^WwZ1^G;IS z`2e&fqa9}et)=7#pl-3Yl(bFG#_@5gEg`=E>4 zmm+@vy+;Y$V%&PE1aW;eiu&1E=x_k(IL(>}4YR~j6H85shMT_!%mA>2t`!P)@dU+j(x*G)SB00007E0_m3Ez9eZMkiwNd-M7Mcs}+T4N~LfbuD7o^8sK2 z1Zb5Akn>xe#^(X3iL_#d>iGS3EowE+=GzC5nwT}67G#vz4e|%TjCPMh^WwZ1^G;IS z`2e&fqa9}et)=7#pl-3Yl(bFG#_@5gEg`=E>4 zmm+@vy+;Y$V%&PE1aW;eiu&1E=x_k(IL(>}4YR~j6H85shMT_!%mA>2t`!P)@dU+j(x*G)SB00007E0_m3Ez9eZMkiwNd-M7Mcs}+T4N~LfbuD7o^8sK2 z1Zb5Akn>xe#^(X3iL_#d>iGS3EowE+=GzC5nwT}67G#vz4e|%TjCPMh^WwZ1^G;IS z`2e&fqa9}et)=7#pl-3Yl(bFG#_@5gEg`=E>4 zmm+@vy+;Y$V%&PE1aW;eiu&1E=x_k(IL(>}4YR~j6H85shMT_!%mA>2t`!P)@dU+j(x*G)SB0000egHy3h~7mJAgbs)Yn?a8=lc28!OvJ?Us%59zIWPP>+W;+ zz4kuG=S#r9ic%kbX8De;^7&f$e7;cMA7D?W?^%O|-d8Upq@poY}KYKElQs1rZqcg$n;p%#sSWEnA zw2d@?;~DLYW23b%?s-ftX-mx8637Cm$rr%SfF3|Epf}J5_(h!1H%|4&tG}_f;K!1RCK+QOIQ7?{*p8>QXYg=BMqMjV{s4?wm06=|40;7SifZqXs z0R9*!d>yBHLqW)?}4#EDezl>I#V;+Xjg!?LYtw#z_F0FlnBtDpsi6u-lN(9 z%+Iliy0b3UT?R}7rT`Vd)HvbKHB|4k8mgzJ&y(Dd!*XB(K&`16#}kfUw2@q(4Z!_>cSS`-(y3D?88m2+%$PAFWPV#0>m56Gtn}&A$CR5iX_8ExIyG!LwpCtU zE<=Y7m5v=d3fqjftEFM<)T>v|+Q>hlLkU1XgFc4UDh=smfLigMCi(gK za_!nR;r8m)tB`p8`nCD)*s)_mJ{B)t9I*`Rd;k8u+_-T=mM>o}Lxv2IM~@zv&%(9! z=FJ;<@#2LXIB>w|v~JzHsN1@9>5|N!Ki}}kKC`ZHZM}W_R-Qb0B0F~Mkb;5&*|~FP zRBgR`_fF29Ju5S3&Xn=v$D1;iqfqU!%-y?pW%K6E(x5>DtJOcCgIB9;9Mi6Ub~v{aTZT^dbxljr{Z`?7N7N~6`YXV0Q4$MZUR^r#dU7t6+t8>1@2 zOgC@dlm!bG82gB}5V_sIf4{Ma(!pLZ5{l7y2yhxKKaPaiM;op9_5! z)@Na76)vT|h2uhf3&(}}7LE(`EgTo>TR1M%xA1eJzJ>Z0&MI6=eGA8h`WB80^(`D1 z>RUK2)VFY4sBhutLVXMMEu2-jl=>Eq3-v7=7q#hIF!o@~m@%?!*)rFG2r0%MtXj3o z#2!3<{yai%|JUDl47_#gmMmPj@O#G|@bB8A-57f?XU?2D5qogw&KAOQ5}7-9u89S@e*LpI1t`*S%$cB<%%3Wd|2kqna=UuE)&ngYxnBatEMfEr{T7E+0~*&i%g6gUeeOiqaj{Vfl9L+L`{fZr$2wwq(f? zTg2=)ZQ3LQ2M(+(!*YzRYu2opq^GBw*gVEM@!ANt#Y-#3_pu-NyPBY23=!j_yw~l) zg9nX1p~~>{?CfmWwryLuQ;I51WXqNUHSQp~|+NK7A^Mg@xW&wQA)X zH*PGmX3eTB!^DaeE6nv~>kZr|CMHUc9zEpTxpP&@1s=pxt0qmFR67^j&xQ>fn(;7D zEAnIW1l!X#Yf3BX9;^-fS(h$df@;OS+dP5$rcIj$)v8siRw2tUrnG0zo~l)dxJKHQ zYUQ_Fj)7`del9o$s$B(+=>Fqqd<(TJ$DP`h<3jDqaS@nOyNd07pxTwYg4C`Y7lA3Y zE43^8EUeF0B7AS5&%%MDgge&v7Qx?v@qL88xA1eL@0i>*qVJf(&&Q`09->o1>n7^K0vJo0;<)=*Xk?iz}vN1YT;}u6~0y zd4Ea=Xir|9Xj9x&tGc1pFla$Pf*R46u=YfqtXBC*oB1m^X9(B5<@_5KJf1jlV#GNU zxMnctYGHoP<+FYJb~DEW>kfs?%uHFoe!a_a;GmalWUahb8+*lvy zEa6-kp7n+K>_i{JYD6F1s}l}=UjwEL*SY4LE`9s!(v6s}Yjb zwr2PwVxKinTsb-metD0wV;z!Vw{m>jNAXcO2rCS~eCf%NaMkC-f4BX~=R4qze7-E7 t?;G#2rXw<-d_|;4GbjUfmVs{qdKUILtLpg3@zk5Y0gmy%a?8iT{{d|8m9_u? literal 0 HcmV?d00001 diff --git a/include/index.html b/include/index.html new file mode 100644 index 0000000..a517eff --- /dev/null +++ b/include/index.html @@ -0,0 +1,206 @@ + + + + + + Multiplayer Piano + + + + + + +
+
    + +
    + +
    + +
    + +
    + +
    + +
    + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    New Room...
    +
    +
    +
    New Room...
    +
    Play Alone
    +
    Room Settings
    +
    MIDI In/Out
    +
    Synth
    +
    Sound Select
    +
    Client Settings
    + + + + +
    +
    + +
    + +
    +
    +
    +
    +
    + + + + + + + + + + + + + diff --git a/include/jquery.min.js b/include/jquery.min.js new file mode 100644 index 0000000..4024b66 --- /dev/null +++ b/include/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.2.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; +}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("