Greasy Fork

Greasy Fork is available in English.

치지직 추가 볼륨

치지직 추가 증폭 볼륨을 구현합니다.

当前为 2024-07-23 提交的版本,查看 最新版本

// ==UserScript==
// @name          치지직 추가 볼륨
// @namespace     치지직 추가 볼륨
// @match         *://chzzk.naver.com/*
// @version       0.2
// @description   치지직 추가 증폭 볼륨을 구현합니다.
// @icon          data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAB/CSURBVHgB7d09jFzXlSfwI44DQwrcAnaBjaRSNoxMQYmThcuRuJG7N5qFBFgMJOxGbDqaMQw0CYx2PMl0K1rICkgDErDRko5WilTCJN5AEBVJGUuKFpgFTCWCJ9qpw2KJzWZ/vFf13qv73vv9gMtmf9CALZn3/86597zngjHbebyuPP44WayfHPv68bUyCaBUDx+vND/29fz9N8d+P3/8c/NjP8/IPBcM3WqDnyzWTx9/XG34OwGM3SoIrFYGhfuPl3AwYALAsFx5vH567Pc2eWBdGQBWYeCzWAaE+8EgCAD9lRv7dLF+HjZ7oDsnQ8EsVAp6SQDoj9zcd2P5dJ8fJwFQhlUg+GMIBL0hAJRtGssn/OnjBdAHGQZm8SQQUCABoCyrA3u/iuVTvpI+0HfzeBIG7gXFEAC2z6YPjEW2BjIECAMFEAC2Z7pYv1yst8KmD4zPKgz8IbQJtkIA6FZu9NcXaz9s+gAr81iGgffi6QFGtEgA6MZ0sQ7CQT6Ai8xiWRW4E7RKAGiPp32A9c0X6yiW5wXmQeMEgOZNw4E+gCbdWaxbIQg0SgBozjSU+QHatDonMAs2JgBsbho2foAuzWJZEZgFaxMA1jcNGz/ANs0X61oIAmu5FNQ1XaxPH69pALAtk/D38dpUAKqbLNbt8C8ZQKnuhMOClakAXCxP8h8u1oOw+QOU7K1Y/l2dD2uT4Fx/FZwne/z/M2z8AH2S71fJq9hZ5f5TcCotgNNNQ4IEGIL5Yt0ILx96hgrA07Lc/z9iOX3KEB+A/su/y/8mlg90X8byJUSEAHBcju3NhPizAGBoVm2B7xbrfqAFEE73A4zNLJbzA+YxYmOvAORTfx7y++sAYCwmsbwx8K8x4kOCY60ATMJTPwAjrgaMsQKQPaD/HZ76AVg+EI7ybMCYAkCeBP2HWJ7w/3EAwFLuD6tXuP+fxfpLjMBYWgCTWM6KngQAnG2+WL+IEbQExjAKOA/6fRE2fwAuNonlnrEfAzfkFsCq5H8zlPwBqC73jKux3Ec+iYEaagtgslh3Yzn4AQDWNY+BtgSG2ALITf/TsPkDsLlJDHRPGVoA0O8HoGmTGOC5gCGdAchX9/4uAKAdVx9//CwGYCgBIKf6Df7EJgBbN42BHA7s+yHA/Ieg3w9A13JqYB4O7O3rhfscACZhuA8A2zOPHt8Q6GsAmITNH4Dtm0dPQ0AfA8AkbP4AlGMePQwBfbsGuLrjPwkAKMMkerg39akCsNr8dwIAypMHArMS0IvXCvclANj8AeiD3oSAPgSASSwnMNn8AeiDXoSA0s8ATMKTPwD9kntWvpBuEgUruQIwCQf+AOiveRR8O6DUADAJmz8A/TePQkNAiQEgSyfe6AfAUMwX69UobGxwiQEgN3+z/QEYkjwQ+GoUpLRDgIdh8wdgeHJvux0FKel1wAeL9bcBAMO0esD9LApQSgC4vli/CwAYtulifbdYf4otK+EMQCaiLwIAxiPPA2x1UNC2zwBMYjksAQDGZOuDgrZdAXgQrvsBME5ZAcgZAVu5HrjNMwB54v9qAMA4/YfF+vFifRJbsK0AkIf+bgYAjNvPYkuHArfRApiEt/sBwEq2APJQ4Dw61HUAMOYXAJ41j47HBXfdAviH0PcHgJPyAbnT8wBdVgDeisLGIAJAYfYW6150oKsAMAmv9wWAi3R2HqCrQUD55D8JAOA82QropFrexRmAvPL3XwMAqGISHVwNbLsFMAlX/gCgrtZbAW23ALKMYfMHgHpabwW02QJ4a7H2AwBYxyRabAW01QKYhFP/ALCpbAW8Ei0MCGqrBXAQNn8A2FS2Ag6jBW1UAHZj+Z5jAKAZ+drgWTSojQDwIDz9A0CT5rFsBTSm6UOAeef/bwIAaFK2AvKhfRYNabICMAkH/wCgLY0eCGyyApCHFKYBALThx9HgGwObqgBMYtn7BwDalVWAeWyoqWuABwEAdKGRCYFNVACmsez9AwDd2PhaYBMVAE//ANCtjffeTQPANBz8A4CuTWPD/XfTFoChPwCwHbNYtgLWskkFYBo2fwDYlmlsUAXYJADo/QPAdq29F68bAKah9w8A2zaNNffjdQPA9QAASrBWFWCdQ4CTMPUPAEpSey7AOhUAvX8AKMuvoqa6FYBJePoHgNLUflNg3QrAbgAApdlZrP06f6BuBcDgHwAoUz79v1j1h+tUAN4Kmz8AlCqrANOqP1wnANQ+YAAAdKryQf2qLYBJOPwHAH2QbYALDwNWrQDUOlgAAGxNpT27agXA4T8A6IdKhwGrVACmYfMHgL6odBiwSgBw+A8A+uXCuT1VWgB/jmWaAAD64cLJgBdVADJB2PwBoF9y775y3g9cFAB+GQBAH53bwr+oBaD8DwD9dG4b4Efn/EHlf2jT7muL/4e9EBRm/i8Rs68CBmDVBpid9s3zAoDyP7Tl+usRR28GBXrlRsCAZBtgdto3zjsDMA2geZN/b/Mv1a3/tagA/L+AATnzOuBZAWAahv9AOz79TVCge59H3LwbMDBnDgU6KwBcOEAAWMPhG4to/e+CwmTf/8aHAQM1Pe2LZwWAnwfQrLf+Y8T+1aBA1z5Q+mfITt3TTwsAFw4PAGrKvv/Bfw4KlH1/p/4Ztmmccqvv0hk/CDTp9ttK/yXK0r++P+PwTGv/tADg+h80KZ/8p5eDwjz8PuIX/z1gJJ6p7F+q8kPAmrL0f3MvKFAe+tP3Zzyeebg/GQD0/6Epufm78lemO/+8XDAekzhxDuBkAJgG0IyDPX3/Ernyx3hNj38iAEAbctRvXvujPNn3z/4/jM/0+CcnA8BPA9jMo76/K39FMuqXcXtqjz/5OmCv/4VNPThU+i/R7OvF0/+7ASOWrwV+cfXJ8QpAHv6z+cMm8sqfzb882fe/9n7AyD110P94AJgEsL7d11z5K9WNj5T+YenUADANYD3Z9z/0it8iZd8/3/QHpFMDgAOAsC5v+SuTUb9w0g97/ckzAEBd2ffP8j9lMeoXTvNMBWAnHACE+oz6Ldetu/r+8Kwf9vtVAPD0D3XtvGDUb6lyzO/RxwGc6tGeLwDAuvT9y5R9/zz4B5xlkr9cOv4JUFGO+TXqt0x7R0r/cL6nKgAvB1CNK3/lyif/+98GcK5J/qICAHVl33/n+aAwOerXlT+o4tFVQAEA6jDqt0xG/UIdP9wCcAUQqpheduWvVK78QR2P9v0MAJMAzpd9/9vvBAV675PltT+gjp1VBQA4z8Ge0n+JsvS//2EAtV1RAYCLZN/flb8yGfUL69ICgHMZ9Vsur/iFTUwuBXA6o37LZdQvbEoFAM50sKvvXyKjfqEJP8kAYAognJQ9//2rQYGufaD0D5t7UQsATsq+fx78ozz55D/7KoCN/UQAgJPu7iv9lyhL/0b9QlOcAYCn5JP/lZeCwuTm78ofNGlHBQBWrrzsyl+pjPqFxpkECCn7/ln6pzxG/UIrBABIRv2W6VHf35U/aIFBQBDXXzfqt1TZ93/4fQDNEwAYt0ejfl35K1Je+dP3h9Y8t1j/P2CsHhwq/Zcon/qz9095cgSzqswg/ChgrA7fsPmXauf55bkMypJVGZv/YKgAME7Z87/9TgAV5YHMV34dDIczAIyPUb9QTz71G8Q0OAIA43P7baV/qMMgpkESABiXfPKfXg6gohzClAf/GBxnABiPLP0/+KcAKlq9g8HT/yCpADAOOy9EfPqbAGrYO7L5D5gAwDi48gf15JW/+98GwyUAMHxG/UI9s68jbt4Nhk0AYNiM+oV6su9/7f1g+AQAhi37/jlVDqjGlb/REAAYrrzyp+8P1eX7F/LaH6PgGiDDtPtaxN39ACoy6nd0VAAYnuz7H74ZQA1G/Y6OAMDwuPIH9dz4SN9/hAQAhiX7/ln+B6ox6ne0nAFgOIz6hXqM+h01FQCGwahfqO/aBzb/ERMAGIaDXX1/qCNH/c6+CsZLC4D+yzG/t98JoCJX/ggVAPou+/4HRv1CZau+P6MnANBv2fdX+ofqjPrlMQGA/jLqF+ox6pdjnAGgn6aXnfqHOrL0/+pvIx5+H5BUAOif7Ps79Af1ZN/f5s8xAgD9c7Cn9A915JU/fX9OEADol+uvL6/9AdXc+zzi5t2Ak5wBoD+M+oV6jPrlHCoA9IdDf1CPUb+cQwCgH7ziF+ox6pcLaAFQPqN+oR6jfqlABYCyGfUL9eRVP6N+qUAAoGx395X+oY4bH+r7U4kAQLnyyf/KSwFUlGN+jfqlImcAKNOVlyO++PsAKjLql5pUAChP9v2z9A9UZ9QvNQkAlMeoX6jHqF/WIABQFqN+oZ7Z10b9shYBgHJk6f+mK39QWfb9r70fsA4BgHLkqN+d5wOo6NZdpX/WJgBQhrzyp+8P1WXf35U/NuAaINtn1C/UY9QvDVABYLuM+oV6jPqlIQIA23X7baV/qEPfn4YIAGxPPvlPLwdQUfb8jz4OaIIzAGxHlv4f/FMAFWXfP0v/nv5piAoA3dt5YXnlD6hu78jmT6MEALp3+Ia+P9SRV/7ufxvQJAGAbuWVP6N+obr73xj1SysEALqTff/DNwOoKPv+WfqHFggAdMeoX6jHlT9aJADQDaN+oZ73PjHql1a5Bkj78q6/U/9QXZb+X/3tcuoftEQFgHZl39+cf6gn7/vb/GmZAEC7XPmDem58pO9PJwQA2pN9/93XAqjIqF865AwA7TDqF+ox6peOqQDQPKN+ob5rH9j86ZQAQPMOdvX9oY4c9Tv7KqBLWgA0K8f8OvUP1WXp/5VfB3RNBYDmZN8/D/4B1az6/rAFAgDNubuv9A91GPXLFgkANCOf/K+8FEBFRv2yZc4AsDmjfqEeo34pgAoAmzHqF+oz6pcCCABs5mBP3x/qyCt/+v4UQABgfddfX177A6q593nEzbsBJXAGgPUY9Qv1GPVLYVQAWI9Df1CPt/xRGAGA+rziF+rJvn+W/6EgWgDUY9Qv1GPUL4VSAaA6o36hnrzqZ9QvhRIAqO7220r/UIdRvxRMC4Bqcszv9atBYXaej9h9LShQjvm99vuAUgkA0Gd5HsMshvIY9UsPaAFAX+XGb/Mvk1G/9IAAAH2UBzIP3wwKZNQvPaEFAH304NCBzBLNvl48/b8b0AcqANA3eRXT5l+e7Ptfez+gLwQA6JPp5Yibe0GBXPmjZwQA6Ivs+5vCWKb3Plle+4MeEQCgL7yDoUxZ+t//MKBvBADog+z7G/hTHqN+6TEBAEqXpX99/zLp+9NjAgCUbOeFiE9/ExQoe/5HHwf0lQAAJTvY1fcvUfb9c+AP9JgAAKXKMb/7XsBUpL0jpX96TwCAEmXfPw/+UZ588r//bUDfGQUMJfri3eUrmCnL/W+Wb/mDAVABgNLkk7/NvzzZ98/SPwyEAAAlMeq3XK78MTACAJTCqN9yGfXLAAkAUIqDPVf+SpSl/5uu/DE8AgCU4Prry2t/lCdH/ebIXxgYAQC2LUv/R28GBcorf/r+DJQAANtm1G+Zsud/827AUAkAsE1e8Vsmo34ZAQEAtsWo33Jd+0Dpn8ETAGAbjPotVz75z74KGDqjgGEbsu+fQ38oS5b+X/l1wBioAEDX8snf5l+evOqXV/5gJAQA6FKW/o36LdOND/X9GRUBALqSm78rf2XKK39G/TIyAgB0xajfMmXfP5/+YWQEAOiCUb/lMuqXkRIAoG2P+v6u/BXJqF9GzDVAaNuDQ6X/Et37PGLvKGCsVACgTXnlz+ZfHn1/EACgNbuvufJXqhsfKf0zegIAtCH7/ode8Vuk7Ptn+R9GTgCANnjLX5my9O8Vv/CIAABNy75/lv8pi1G/8BQBAJpk1G+5bt3V94djBABoys4LRv2WKsf8Hn0cwBMCADRF379M2ffPg3/AUwQAaEKO+TXqt0zZ91f6h2cIALApV/7KZdQvnMkoYNiUUb9lmn29ePp/N4DTqQDAJoz6LVP2/a+9H8DZBABY1/SyK3+lcuUPLiQAwDqy73/7naBA732yvPYHnEsAgHUc7Cn9lyhL//ve8gdVCABQV/b9Xfkrk1G/UJkAAHUY9Vsur/iFWgQAqMqo33IZ9Qu1CQBQ1cGuvn+JjPqFtQgAUEX2/PevBgW69oHSP6xBAICLZN8/D/5Rnnzyn30VQH1GAcNFvng34spLQWHufxPx6m8DWI8KAJwnn/xt/uXJvv/eUQDrEwDgLFdeduWvVEb9wsYEADhN9v3v7gcFMuoXGiEAwGmM+i1Tlv5vuvIHTRAA4KTrrxv1W6oc9fvw+wA2JwDAcY9G/bryV6S88qfvD41xDRCOe3Co9F+ie5879Q8NUwGAlcM3bP4lyr7/Da/4haYJAJCM+i2XUb/QCgEAjPotl1G/0BpnACBf8Tu9HBQmS/+v/DqAdqgAMG755G/zL09e9csrf0BrBADG69GVP6N+i5SH/vT9oVUCAOO088Ky9E95csyvUb/QOgGAcXLlr0yu/EFnBADGx6jfchn1C50RABgXo37LZdQvdMo1QMbFqN8yzb5ePP2/G0B3VAAYj7zyZ/MvT/b9r70fQLcEAMZh9zVX/kp1667SP2yBAMDwZd//8M2gQNn3d+UPtkIAYPhc+StTlv5v3g1gOwQAhi37/ln+pyxG/cLWCQAMl1G/5dL3h60TABgmo37LlT3/o48D2C4BgGE62NX3L1H2/fPgH7B1AgDDk2N+968GBdo7UvqHQggADEv2/Q+M+i1SPvnf/zaAMhgFzLAY9Vsmo36hOCoADIdRv2Uy6heKJAAwDNPLrvyVypU/KJIAQP9l3//2O0GB3vvEqF8olABA/x3sKf2XKEv/+x8GUCYBgH67/vry2h/lMeoXiiYA0F9Z+j/ylr8i3fhI3x8KJwDQT0b9lsuoX+gFAYB+Muq3TEb9Qm8IAPSPUb/luvaB0j/0hABAvxj1W6588p99FUA/GAVMv3zxbsSVl4LCZOn/lV8H0B8qAPRHPvnb/MuTm78rf9A7AgD9cOVlo35LZdQv9JIAQPmy7393PyiQUb/QWwIA5TPqt0xZ+r/pyh/0lQBA2Yz6LVf2/R9+H0A/uQVAubL0/8XfR+w8HxRI338Y8urmtd8H4/OjgFLlqF+bf7m0ZYbBP8fR0gKgTHnlz19MAK0RAChP9vxd+QNolQBAWYz6BeiEAEBZbr+t9A/QAQGAcuST//RyANA+AYAyZOlf3x+gMwIA27fzwvLKHwCdEQDYvsM39P0BOiYAsF155c+oX4DOCQBsT/b9D98MALonALA9Rv0CbI0AwHYY9QuwVQIA3cu7/q78AWyVAEC3su9/+50AYLsEALrlyh9AEQQAupN9/93XAoDtEwDohlG/AEURAGifUb8AxREAaN/Brr4/QGEEANqVY373rwYAZREAaE/2/fPgHwDFEQBoT/b9lf4BiiQA0A6jfgGKJgDQPKN+AYonANAso34BekEAoFkHe0r/AD0gANCc668vr/0BUDwBgGZk6f/ozQCgHwQAmmHUL0CvCABszit+AXpHAGAzRv0C9JIAwPqM+gXoLQGA9d1+W+kfoKcEANaTT/458Q+AXhIAqO/Ky0b9AvScAEA92fe/ux8A9JsAQD1G/QIMggBAdUb9AgyGAEA1Wfq/6cofwFAIAFSTo353ng8AhkEA4GJ55U/fH2BQBADOt/uaK38AAyQAcLbs+x96xS/AEAkAnM2oX4DBEgA4nVG/AIMmAPCsR1f+9P0BhkwA4Gk7Lyyv/AEwaAIATzt8Q98fYAQEAJ7IMb9G/QKMggDAkit/AKMiALBk1C/AqAgAGPULMEIZAObBeOVdf1f+AMbmoQrAmGXf//Y7AcDoCACjdrCn9A8wUhkAHgbjk31/V/4AxmouAIyRUb8AoycAjI1RvwBEfJcB4LtgPA529f0B+LMKwJhkz3//agAwet8IAGORff88+AcAYRDQeNzdV/oHYMUtgFHIJ/8rLwUAPPYoANwPhuvKy678AXDSQxWAIcu+f5b+AeBpP7QAhIAhMuoXgGc92vcvHfuEIbn+ulG/AJxmnr+sAoBzAEOSpf+jNwMATvFN/nLp+CcMhFG/AJxtnr+oAAzN4Rv6/gCcZ56/XDr+CT1n1C8AF3v00K8CMBRG/QJQzVMBwFXAvrv9ttI/ABf5Yb+/dOyLqgB9lU/+08sBABf4Ya//0bEvfrlY06B/8sn/zj8HQG3zfwlG5cvVb44HABWAvrr2+wCACmar32gBAMB4zFe/ee7EN/68WDsBAAxNHv57cfXJpRPfVAUAgGF6ao8/GQC+DABgiJ7a408GgFkAAEM0O/7JyTMA2f//cwAAQ5P9/x+G/p2sAOQ35gEADEn2/5+a+HvplB/6YwAAQ/LMIf9LVX4IAOi1Zx7unzvlh5wDAIBhear/n06rAOQPzAIAGIJn+v/p0hk//FkAAENw6p5+VgCYBQAwBPdO++Jz5/wB7wUAgH6bL9Yrp33j0jl/yHVAAOi32VnfOC8A3AkAoM/OfJg/rwWQ5f8HoQ0AAH301Ot/T7p0wR/UBgCAfrp33jfPCwDpTgAAfXTuQ/x5LYCkDQAA/XNu+T9dVAHI/4A/BADQJ/cu+oGLAkCl/xAAoCgXPrxf1AJYMRQIAPphHmcM/zmuSgUgvRcAQB9UusFXtQLgFcEA0A/59D+/6IeqVgC8IhgAyjeLCpt/qhoA0q0AAEpW+eZe1RbAisOAAFCmeVQ4/LdSpwKQHAYEgDLV2qPrVgBMBgSAMlU6/LdStwLgBUEAUJ47UWPzT3UrAGm6WJ8GAFCKWk//qW4FIM3ClUAAKEVW5udR0zoBILkSCABlOIo1rBsAZqEKAADbNos19+N1A0BSBQCA7Vp7L17nEOBxeRhwGgBA1+ZRY/DPSZtUAJIqAABsx7XYwKYBYBbOAgBA12ax4f67aQBIqgAA0K2N994mAsAsVAEAoCt3ooF9d9NDgCuTWL4jAABoV+2pf6dpogKQ5uFNgQDQtjvRwOafmqoAJG8KBID2zBfrF9FQAGiqApDyTYGqAADQjtxj59GQJisAK1kFmAQA0JR5bDD05zRNVgBWNhpMAAA840Y07K+iefNYppQrAQBs6s5i/WM0rI0WQHIgEAA2N48GD/4d10YFIP1lsf51sa4GALCuLP3PogVtVQBWvC0QANYzi+XTfyvaDgCTxfoitAIAoI68Wv9qtFD6X2mrBbCS/wW0AgCgnr9brI+jRW1XAFa0AgCgmlm0WPpf6SoATEIrAAAuMo+WTv2f1MYgoNPMw4AgALjIrehg809tnwE47uvFenGxfhYAwEk56/930ZGuWgAr2QLIVsAkAICVeSxP/T+MjnQdANIknAcAgJXWr/ydpssWwIqrgQDwROtX/k6zjQCQ/hTOAwBA9v1vxhZsowWwki2AnA/grYEAjNE8lm/P3YqurgGeJlsBe9FxzwMACjCPDob9nGebFYCVrAB8EQAwHnno735s0bbOABz3fxfru3AoEIBxyFf83ostKyEApDwUmNWIaQDAcOWkv86G/ZynlACQZrE8DOFQIABDlCf+/zYKUcIZgJPyPIAQAMCQZL//1ShIiQHAuGAAhmQeHY/5rWKb1wDPkv8DdfIqRABo2TyWe1pRm38qsQKwMonloKBJAED/zKPgB9qSA0CahBAAQP/Mo/BqdukBIOWBwAwB3h4IQB9s5e1+dZV4BuCkPDlZZP8EAE7ozTm2PlQAVlQCACjZavPf6ojfqvpQAVhZ3aGcBwCUZR492vxTnyoAK5NwMBCAcsyjh9fX+xgA0iSEAAC2bx49nV3T1wCQJiEEALA98+jx4Lo+B4CUBwIzBHh3AABd6v0NtT4dAjzN6q7lewEA3fhDFDjbv66SXge8iY9jWc2YBgC059Zi7ccADCUApNlifbdYVwMAmndjsX4XA9H3MwCnyfMAd8PhQACaMV+svejRHf8qhhgA0iTcEABgc7np5+Y/j4Hp+yHAs8wX65VwOBCA9eUe0ttrfhcZ0hmA0+ThwDwX8LPF+nEAwMXydP/fLdbNxfpLDNRQWwAnTUJLAICLzWPAT/3HDbUFcNI8zAsA4Hy5R4zmpXNDbwEcl2WcbAl8E8ubAl4rDEDKkv9/WayjGHDJ/6SxtABOmizW7TA4CGDsZot1LUb4qvkxVQCOy7SXoxwdEAQYp9VBv/8WPR/pu66xVgCOm4RqAMCYzGKkT/3HjeUQ4HnmsTzxOfp/GQAGLp/0c5zvKE75X2SsLYDT5LSnPy7Wi+H1wgBDc2ex/lMsn/4JLYCz7C7WYZgbANB381hWeGfBU1QATvd1LO+D5iHBvw5XBgH6Jsv9/xgDnePfBAHgfH8KbQGAvskHuNz4Pw7OpAVQ3SSWc6F/FQCUaBYOdFfmFkB188V6K5anR2cBQClmsfy72en+GlQA1jeN5fyASQCwDbPFuhUeytaiArC+2WK9EioCAF2bxZMn/lmwFhWA5kwX63osrxAC0LxZeOJvjADQvEk4LAjQlLzOdy+W72+ZBY0RANoziWU14Ho4JwBQV278eZ3vKEb6sp62CQDdeCuWFYFpAHCeWSjzd0IA6NZksfYX65ehKgCw4ml/CwSA7ZnGsjKQYcCoYWBscqPPvn7292dB5wSAMuw+XsIAMGTHD/TdD0/7WyUAlGcVBn4e2gRA/9n0CyUAlG0aT8KAlxEBfTFbrM8ef5wFRRIA+iNbA9NYBoKfhkAAlGMeyzen5hN+Pu17yu8BAaC/VoEg1yoQOD8AtC0399zov4wnT/g2/B4SAIYlQ8AkhAKgGcc3+/vHFgMgAAxfBoAr8SQcvPz44ySEA2C5ya82+m8ef5yHA3uDJwCMWwaAybGPk8dffzmevoEwOfbzQgOUa37s9w9PrO8ef5zHkw1/9T1G6N8AzvaR91YsoeMAAAAASUVORK5CYII=
// @author        mickey90427 <[email protected]>
// @grant         none
// @license       MIT
// ==/UserScript==

(function() {
    'use strict';

    const maxVolume = 16; // 최대 볼륨 증폭 비율
    let gainValue = getSavedVolume() || 1; // 쿠키에서 저장된 볼륨 값 불러오기, 기본값 1
    const originalVolume = 1;
    let hideTimeout;

    // 볼륨 증폭 기능
    function boostVolume(video, boost) {
        let audioContext = video.audioContext;
        let gainNode = video.gainNode;

        if (!audioContext) {
            audioContext = new (window.AudioContext || window.webkitAudioContext)();
            let source = audioContext.createMediaElementSource(video);
            gainNode = audioContext.createGain();
            source.connect(gainNode);
            gainNode.connect(audioContext.destination);
            video.audioContext = audioContext;
            video.gainNode = gainNode;

            video.addEventListener('play', () => {
                audioContext.resume();
            }, { once: true });
        }

        gainNode.gain.value = boost ? gainValue : originalVolume;
    }

    // 증폭 적용 기능
    function applyVolumeBoost() {
        let videos = document.querySelectorAll('video');
        videos.forEach(video => {
            boostVolume(video, true);
        });
        saveVolume(gainValue); // 볼륨 값 저장
    }

    // 증폭 해제 기능
    function removeVolumeBoost() {
        let videos = document.querySelectorAll('video');
        videos.forEach(video => {
            boostVolume(video, false);
        });
    }

    // 슬라이더와 버튼을 페이지에 추가
    function addVolumeSlider() {
        const targetElement = document.querySelector('.pzp-pc__bottom-buttons-left');
        if (targetElement) {
            // 기존에 추가된 슬라이더가 있는지 확인
            if (document.querySelector('#volumeBoostSlider')) return;

            const container = document.createElement('div');
            container.style.display = 'flex';
            container.style.alignItems = 'center';
            container.style.marginLeft = '10px';
            container.style.opacity = '0'; // 초기에는 숨김
            container.style.transition = 'opacity 0.3s';

            const slider = document.createElement('input');
            slider.id = 'volumeBoostSlider';
            slider.type = 'range';
            slider.min = 1;
            slider.max = maxVolume;
            slider.value = gainValue;
            slider.style.width = '150px';
            slider.style.marginRight = '10px';
            slider.style.cursor = 'pointer';

            const label = document.createElement('span');
            label.id = 'volumeBoostLabel';
            label.textContent = `볼륨: ${((gainValue - 1) / (maxVolume - 1) * 100).toFixed(2)}%`;
            label.style.color = '#fff';

            slider.oninput = () => {
                gainValue = parseFloat(slider.value);
                const percentage = ((gainValue - 1) / (maxVolume - 1) * 100).toFixed(2);
                label.textContent = `볼륨: ${percentage}%`;
                applyVolumeBoost(); // 볼륨 적용
            };

            container.appendChild(slider);
            container.appendChild(label);
            container.id = 'volumeBoostControl';
            targetElement.parentNode.insertBefore(container, targetElement.nextSibling);

            // 슬라이더 표시 및 숨기기
            function showSlider() {
                container.style.opacity = '1'; // 슬라이더 표시
                resetHideTimeout();
            }

            function hideSlider() {
                container.style.opacity = '0'; // 슬라이더 숨김
            }

            function resetHideTimeout() {
                clearTimeout(hideTimeout);
                hideTimeout = setTimeout(hideSlider, 3000); // 3초 후 슬라이더 숨김
            }

            function setupEventListeners() {
                const videoContainer = document.querySelector('.webplayer-internal-video');
                if (videoContainer) {
                    videoContainer.addEventListener('mousemove', showSlider);
                    videoContainer.addEventListener('keydown', showSlider);

                    // 하위 요소들에도 마우스 이벤트 추가
                    const shadowElements = document.querySelectorAll('.pzp-pc__bottom-shadow, .pzp-pc__bottom');
                    shadowElements.forEach(element => {
                        element.addEventListener('mousemove', showSlider);
                        element.addEventListener('keydown', showSlider);
                    });

                    // 입력이 있을 때마다 슬라이더를 다시 보이게 하고 타이머를 리셋
                    document.addEventListener('mousemove', resetHideTimeout);
                    document.addEventListener('keydown', resetHideTimeout);
                }
            }

            setupEventListeners();
        } else {
            console.log('targetElement를 찾을 수 없습니다.');
        }
    }

    // 쿠키에 볼륨 값 저장
    function saveVolume(value) {
        const domain = window.location.hostname;
        document.cookie = `volumeBoost_${domain}=${value}; path=/;`;
    }

    // 쿠키에서 볼륨 값 불러오기
    function getSavedVolume() {
        const domain = window.location.hostname;
        const name = `volumeBoost_${domain}=`;
        const decodedCookie = decodeURIComponent(document.cookie);
        const cookies = decodedCookie.split(';');
        for (let i = 0; i < cookies.length; i++) {
            let cookie = cookies[i];
            while (cookie.charAt(0) === ' ') {
                cookie = cookie.substring(1);
            }
            if (cookie.indexOf(name) === 0) {
                return parseFloat(cookie.substring(name.length, cookie.length));
            }
        }
        return null; // 쿠키에 저장된 볼륨 값이 없으면 null 반환
    }

    // 비디오가 로드된 후에 볼륨을 적용하는 함수
    function init() {
        function waitForVideoAndApply() {
            const videos = document.querySelectorAll('video');
            if (videos.length > 0) {
                applyVolumeBoost(); // 비디오가 존재할 때 볼륨 적용
                addVolumeSlider(); // 슬라이더 추가
            } else {
                // 비디오가 없으면 100ms 후에 다시 시도
                setTimeout(waitForVideoAndApply, 100);
            }
        }

        waitForVideoAndApply(); // 비디오 로드 확인 후 볼륨 적용 시작

        // MutationObserver를 사용하여 새로운 비디오 요소가 추가되었을 때 다시 시도
        const observer = new MutationObserver((mutations) => {
            mutations.forEach((mutation) => {
                if (mutation.addedNodes.length > 0) {
                    waitForVideoAndApply(); // 비디오가 추가되었을 때 볼륨 적용 시도
                }
            });
        });

        observer.observe(document.body, { childList: true, subtree: true });
    }

    init();
})();