PageSourceSearch

https://powerballhelper.com/dhkspeedkeno/

html powerballhelper.com collected 2026-10-02 01:39:34 UTC 139,633 bytes, 3,932 lines download raw bytes

1<!doctype html>
2<html lang="ko">
3<head>
4<meta charset="utf-8">
5<meta name="viewport" id="meta_viewport" content="width=device-width,initial-scale=1.0,minimum-scale=0,maximum-scale=1.0,user-scalable=no,viewport-fit=cover,interactive-widget=resizes-content">
6<meta name="HandheldFriendly" content="true">
7<meta name="format-detection" content="telephone=no">
8<title>동행 스피드키노 행운 홀/짝 실시간 결과·분석 | 파워볼헬퍼</title>
9<meta name="robots" content="index,follow,max-image-preview:large,max-snippet:-1,max-video-preview:-1">
10<link rel="canonical" href="https://powerballhelper.com/dhkspeedkeno/?checkType=1">
11<meta name="description" content="파워볼헬퍼 — 동행 스피드키노 행운 홀/짝 실시간 결과·패턴(도로)·매수보기·채팅·랭킹·픽을 확인하세요.">
12<meta name="keywords" content="파워볼헬퍼, 동행 스피드키노, 행운 홀/짝, 파워볼, 실시간 결과, 파워볼 분석, powerballhelper">
13<meta name="application-name" content="파워볼헬퍼">
14<meta property="og:type" content="website">
15<meta property="og:site_name" content="파워볼헬퍼">
16<meta property="og:url" content="https://powerballhelper.com/dhkspeedkeno/?checkType=1">
17<meta property="og:title" content="동행 스피드키노 행운 홀/짝 실시간 결과·분석 | 파워볼헬퍼">
18<meta property="og:description" content="파워볼헬퍼 — 동행 스피드키노 행운 홀/짝 실시간 결과·패턴(도로)·매수보기·채팅·랭킹·픽을 확인하세요.">
19<meta property="og:image" content="https://powerballhelper.com/img/main_logo.png">
20<meta property="og:locale" content="ko_KR">
21<meta name="twitter:card" content="summary_large_image">
22<meta name="twitter:title" content="동행 스피드키노 행운 홀/짝 실시간 결과·분석 | 파워볼헬퍼">
23<meta name="twitter:description" content="파워볼헬퍼 — 동행 스피드키노 행운 홀/짝 실시간 결과·패턴(도로)·매수보기·채팅·랭킹·픽을 확인하세요.">
24<meta name="twitter:image" content="https://powerballhelper.com/img/main_logo.png">
25<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"동행 스피드키노 행운 홀/짝 실시간 결과·분석 | 파워볼헬퍼","description":"파워볼헬퍼 — 동행 스피드키노 행운 홀/짝 실시간 결과·패턴(도로)·매수보기·채팅·랭킹·픽을 확인하세요.","url":"https://powerballhelper.com/dhkspeedkeno/?checkType=1","inLanguage":"ko-KR","isPartOf":{"@type":"WebSite","name":"파워볼헬퍼","url":"https://powerballhelper.com/"}}</script>
25
26<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,&lt;svg xmlns=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 32 32&#039;&gt;&lt;rect width=&#039;32&#039; height=&#039;32&#039; rx=&#039;8&#039; fill=&#039;%230c0546&#039;/&gt;&lt;circle cx=&#039;16&#039; cy=&#039;16&#039; r=&#039;7&#039; fill=&#039;%23facc15&#039;/&gt;&lt;/svg&gt;">
27<link rel="shortcut icon" href="data:image/svg+xml,&lt;svg xmlns=&#039;http://www.w3.org/2000/svg&#039; viewBox=&#039;0 0 32 32&#039;&gt;&lt;rect width=&#039;32&#039; height=&#039;32&#039; rx=&#039;8&#039; fill=&#039;%230c0546&#039;/&gt;&lt;circle cx=&#039;16&#039; cy=&#039;16&#039; r=&#039;7&#039; fill=&#039;%23facc15&#039;/&gt;&lt;/svg&gt;">
28<link rel="stylesheet" href="https://powerballhelper.com/theme/games/css/mobile.css?ver=20261002103933">
29<link rel="stylesheet" href="https://powerballhelper.com/theme/games/css/layout.css?ver=20261002103933">
30<!--[if lte IE 8]>
31<script src="https://powerballhelper.com/js/html5.js"></script>
31
32<![endif]-->
33<script>
34// 자바스크립트에서 사용하는 전역변수 선언
35var g5_url       = "https://powerballhelper.com";
36var g5_bbs_url   = "https://powerballhelper.com/bbs";
37var g5_is_member = "";
38var g5_is_admin  = "";
39var g5_is_mobile = "1";
40var g5_bo_table  = "";
41var g5_sca       = "";
42var g5_editor    = "";
43var g5_cookie_domain = ".powerballhelper.com";
44var g5_theme_shop_url = "https://powerballhelper.com/theme/games/shop";
45var g5_shop_url = "https://powerballhelper.com/shop";
46</script>
vendor: 1 bytes, line 46
46
47<script>(function(){var w=window;var h=w.HybridApp;if(typeof h==="undefined"){w.HybridApp={tokenRegister:function(){}};}else if(h&&typeof h.tokenRegister!=="function"){h.tokenRegister=function(){};}})();</script>
47
48<link rel="stylesheet" as="style" crossorigin href="https://cdn.jsdelivr.net/gh/orioncactus/[email protected]/dist/web/variable/pretendardvariable-dynamic-subset.css" />
49<link rel="stylesheet" href="https://powerballhelper.com/theme/games/css/lib/animate.min.css"/>
50
51<!-- Tailwind: 로컬 plugin/tailwind/tailwind.min.js 사용 -->
52<link rel="stylesheet" href="https://powerballhelper.com/theme/games/css/lib/tailwind.min.css" />
53<link href="https://powerballhelper.com/theme/games/css/lib/flowbite.min.css" rel="stylesheet" />
54<script src="https://powerballhelper.com/theme/games/js/lib/flowbite.min.js"></script>
vendor: 1 bytes, line 54
54
55<script>
56/*tailwind.config = {
57  darkMode: "class",
58  theme: {}
59}*/
60</script>
60
61<style>
62html, body { background-color: #fff; }
63</style>
64
65<link rel="stylesheet" href="https://powerballhelper.com/theme/games/plugin/sweetalert2/sweetalert2.min.css?ver=20261002103933">
66<link rel="stylesheet" href="https://powerballhelper.com/js/font-awesome/css/font-awesome.min.css?ver=20261002103933">
67<link rel="stylesheet" href="https://powerballhelper.com/theme/games/plugin/swiper/swiper-bundle.min.css?ver=20261002103933">
68<link rel="stylesheet" href="https://powerballhelper.com/theme/games/mobile/css/minions_ladder_chat_cards.css?ver=20261002103933">
69<link rel="stylesheet" href="https://powerballhelper.com/theme/games/mobile/skin/outlogin/basic/style.css?ver=20261002103933">
70<script src="https://powerballhelper.com/js/jquery-1.12.4.min.js?ver=2304171"></script>
vendor: 1 bytes, line 70
70
71<script src="https://powerballhelper.com/js/jquery-migrate-1.4.1.min.js?ver=2304171"></script>
vendor: 1 bytes, line 71
71
72<script src="https://powerballhelper.com/js/jquery.menu.js?ver=2304171"></script>
vendor: 1 bytes, line 72
72
73<script src="https://powerballhelper.com/js/common.js?ver=2304171"></script>
vendor: 1 bytes, line 73
73
74<script src="https://powerballhelper.com/js/wrest.js?ver=2304171"></script>
vendor: 1 bytes, line 74
74
75<script src="https://powerballhelper.com/js/placeholders.min.js?ver=2304171"></script>
vendor: 1 bytes, line 75
75
76<script src="https://powerballhelper.com/theme/games/plugin/sweetalert2/sweetalert2.min.js?ver=2304171"></script>
vendor: 1 bytes, line 76
76
77<script src="https://powerballhelper.com/theme/games/plugin/tailwind/tailwind.min.js?ver=2304171"></script>
vendor: 1 bytes, line 77
77
78<script src="https://powerballhelper.com/theme/games/plugin/swiper/swiper-bundle.min.js?ver=2304171"></script>
vendor: 1 bytes, line 78
78
79<script src="https://powerballhelper.com/js/modernizr.custom.70111.js?ver=2304171"></script>
vendor: 1 bytes, line 79
79
80<script src="https://powerballhelper.com/theme/games/js/chatKeyboardInset.js?ver=1788491555"></script>
80
81</head>
82<body  class="bg-white">
83
84<header id="hd" class="no-drag" onmousedown="return false" oncontextmenu="return false" onselectstart="return false" ondragstart="return false">
85	
86
87    <h1 id="hd_h1">동행 스피드키노 행운 홀/짝 실시간 결과·분석</h1>
88
89    <div class="to_content"><a href="#container">본문 바로가기</a></div>
90
91    
92    <div id="hd_wrapper" class="relative">
93        <div id="logo">
94            <a href="https://powerballhelper.com/dhkspeedkeno"><b class="text-[26px] text-white leading-[30px] inline-block">동행 스피드키노</b></a>
95        </div>
96
97        <button type="button" id="gnb_open" class="hd_opener relative">
98			<div id="newShowIcon" class="hidden absolute text-[14px] w-[20px] h-[20px] leading-[20px] bg-red-600 text-[#fff] font-bold rounded-[50%] top-0 right-0">N</div>
99			<i class="fa fa-bars" aria-hidden="true"></i><span class="sound_only"> 메뉴열기</span>
100		</button>
101
102        <div id="gnb" class="hd_div">
103            <button type="button" id="gnb_close" class="hd_closer"><span class="sound_only">메뉴 닫기</span><i class="fa fa-times" aria-hidden="true"></i></button>
104			
105<aside id="ol_before" class="ol">
106    <h2>회원로그인</h2>
107    <a href="https://powerballhelper.com/bbs/login.php" class="btn_b01">로그인</a>
108	<a href="https://powerballhelper.com/bbs/register.php" class="btn_b02">회원가입</a>
109</aside>
110
111<!-- 로그인 전 외부로그인 끝 -->
112            <ul id="gnb_1dul">
113				<li class="gnb_1dli"><a href="https://powerballhelper.com/futures?coin=BTCUSDT" style="display: none;" class="gnb_1da">코인선물</a></li>
114				<li class="gnb_1dli">
115					<a href="#none" class="gnb_1da" id="powerballMenu">파워볼헬퍼</a>
116					<ul class="px-5 hidden" id="powerballBar">
117												<li>
118							<a href="https://powerballhelper.com/dhkspeedkeno" class="text-[14px] font-bold pl-4 border-b">동행 스피드키노</a>
119						</li>
120												<li>
121							<a href="https://powerballhelper.com/dhkenoladder" class="text-[14px] font-bold pl-4 border-b">동행 키노 사다리</a>
122						</li>
123												<li>
124							<a href="https://powerballhelper.com/dh" class="text-[14px] font-bold pl-4 border-b">동행파워볼</a>
125						</li>
126												<li>
127							<a href="https://powerballhelper.com/hilo" class="text-[14px] font-bold pl-4 border-b">토큰게임</a>
128						</li>
129												<li>
130							<a href="https://powerballhelper.com/bp" class="text-[14px] font-bold pl-4 border-b">베픽파워볼</a>
131						</li>
132												<li>
133							<a href="https://powerballhelper.com/coinpowerball3" class="text-[14px] font-bold pl-4 border-b">코인 파워볼 3분</a>
134						</li>
135												<li>
136							<a href="https://powerballhelper.com/coinladder3" class="text-[14px] font-bold pl-4 border-b">코인 사다리 3분</a>
137						</li>
138												<li>
139							<a href="https://powerballhelper.com/pbg" class="text-[14px] font-bold pl-4 border-b">PBG파워볼</a>
140						</li>
141												<li>
142							<a href="https://powerballhelper.com/eos5" class="text-[14px] font-bold pl-4 border-b">EOS 5분</a>
143						</li>
144											</ul>
145				</li>
146				<li class="gnb_1dli" style="display:none;"><a href="https://powerballhelper.com/theme/games/mobile/futures/test.php" class="gnb_1da">코인트레이딩</a></li>
147				
148            				<li class="gnb_1dli hidden">
149					<a href="#none" class="gnb_1da" id="blockchainMenu">블록체인게임</a>
150					<ul class="px-5 hidden" id="blockchainBar">
151						<li>
152							<a href="https://powerballhelper.com/minions" class="text-[14px] font-bold pl-4 border-b">미니언즈 사다리</a>
153						</li>
154						<li>
155							<a href="https://powerballhelper.com/slot2" class="text-[14px] font-bold pl-4 border-b">이더리움 슬롯</a>
156						</li>
157					</ul>
158				</li>
159				                				<li class="gnb_1dli">
160					<a href="#none" class="gnb_1da js-incident-menu" id="incidentMenu_community" data-incident-bar="incidentBar_community">커뮤니티</a>
161					<ul class="px-5 hidden" id="incidentBar_community">
162						<li><a href="https://powerballhelper.com/bbs/board.php?bo_table=new" class="text-[14px] font-bold pl-4 border-b">가입인사</a></li><li><a href="https://powerballhelper.com/bbs/board.php?bo_table=free" class="text-[14px] font-bold pl-4 border-b">자유게시판</a></li><li><a href="https://powerballhelper.com/bbs/board.php?bo_table=humor" class="text-[14px] font-bold pl-4 border-b">유머게시판</a></li><li><a href="https://powerballhelper.com/bbs/board.php?bo_table=youtube" class="text-[14px] font-bold pl-4 border-b">유튜브쇼츠/숏폼</a></li>					</ul>
163				</li>
164								<li class="gnb_1dli">
165					<a href="#none" class="gnb_1da js-incident-menu" id="incidentMenu_verificati" data-incident-bar="incidentBar_verificati">사건사고</a>
166					<ul class="px-5 hidden" id="incidentBar_verificati">
167						<li><a href="https://powerballhelper.com/bbs/board.php?bo_table=ear" 
167class="text-[14px] font-bold pl-4 border-b">먹튀신고</a></li><li><a href="https://powerballhelper.com/bbs/board.php?bo_table=scam" class="text-[14px] font-bold pl-4 border-b">사기꾼제보</a></li>					</ul>
168				</li>
169								<li class="gnb_1dli">
170					<a href="#none" class="gnb_1da js-incident-menu" id="incidentMenu_minigame" data-incident-bar="incidentBar_minigame">유저이야기</a>
171					<ul class="px-5 hidden" id="incidentBar_minigame">
172						<li><a href="https://powerballhelper.com/bbs/board.php?bo_table=buy" class="text-[14px] font-bold pl-4 border-b">거래게시판</a></li><li><a href="https://powerballhelper.com/bbs/board.php?bo_table=request" class="text-[14px] font-bold pl-4 border-b">요청&구해요 게시판</a></li>					</ul>
173				</li>
174								<!--<li class="gnb_1dli"><a href="https://powerballhelper.com/baccara" class="gnb_1da">바카라</a></li>-->
175								<li class="gnb_1dli">
176					<a href="#none" class="gnb_1da" id="serviceMenu">고객센터<div id="newShowIcon" class="hidden text-center ml-1 text-[14px] w-[20px] h-[20px] leading-[20px] bg-red-600 rounded-[6px] text-[#fff] font-bold">N</div></a>
177					<ul class="px-5 hidden" id="serviceBar">
178						<li>
179							<a href="https://powerballhelper.com/bbs/board.php?bo_table=notice" class="text-[14px] font-bold pl-4 border-b">공지사항<div id="newShowIcon" class="hidden text-center ml-1 text-[14px] w-[20px] h-[20px] leading-[20px] bg-red-600 rounded-[6px] text-[#fff] font-bold">N</div></a>
180						</li>
181												<li>
182							<a href="https://powerballhelper.com/bbs/board.php?bo_table=inquiry" class="text-[14px] font-bold pl-4 border-b">비회원문의</a>
183						</li>
184												<li>
185							<a href="https://powerballhelper.com/bbs/faq.php" class="text-[14px] font-bold pl-4 border-b">이용자가이드</a>
186						</li>
187						<li>
188							<a href="https://powerballhelper.com/bbs/content.php?co_id=privacy" class="text-[14px] font-bold pl-4 border-b">개인정보처리방침</a>
189						</li>
190						<li>
191							<a href="https://powerballhelper.com/bbs/content.php?co_id=provision" class="text-[14px] font-bold pl-4 border-b">서비스이용약관</a>
192						</li>
193						
194					</ul>
195				</li>
196                <!--<li class="gnb_1dli"><a href="https://powerballhelper.com/bbs/content.php?co_id=company" class="gnb_1da">회사소개</a></li>-->
197                
198				<li class="gnb_1dli"><a href="https://powerballhelper.com/bbs/board.php?bo_table=event" class="gnb_1da">이벤트<div id="newShowIcon" class="hidden text-center ml-1 text-[14px] w-[20px] h-[20px] leading-[20px] bg-red-600 rounded-[6px] text-[#fff] font-bold">N</div></a></li>
199				<li class="gnb_1dli"><a href="https://powerballhelper.com/attendance" class="gnb_1da">출석부</a></li>
200				<li class="gnb_1dli"><a onclick="questToggle()" href="#none" class="gnb_1da">퀘스트</a></li>
201				            </ul>
202            
203            <!--<ul id="hd_nb">
204            	<li class="hd_nb1"><a href="https://powerballhelper.com/bbs/faq.php" id="snb_faq"><i class="fa fa-question" aria-hidden="true"></i>FAQ</a></li>
205                <li class="hd_nb2"><a href="https://powerballhelper.com/bbs/qalist.php" id="snb_qa"><i class="fa fa-comments" aria-hidden="true"></i>1:1문의</a></li>
206            </ul>-->
207        </div>
208		
209				<a href="https://powerballhelper.com" class="absolute top-[50%] right-[10px] translate-y-[-50%] flex items-center">
210			<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#ffffff"><path d="M200-160v-366L88-440l-48-64 440-336 160 122v-82h120v174l160 122-48 64-112-86v366H520v-240h-80v240H200Zm80-80h80v-240h240v240h80v-347L480-739 280-587v347Zm120-319h160q0-32-24-52.5T480-632q-32 0-56 20.5T400-559Zm-40 319v-240h240v240-240H360v240Z"/></svg>
211		</a>
212				<a href="#none" onclick="changePush()" class="absolute top-[50%] right-[40px] translate-y-[-50%] flex items-center">
213						<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#ffffff"><path d="M160-200v-80h80v-280q0-83 50-147.5T420-792v-28q0-25 17.5-42.5T480-880q25 0 42.5 17.5T540-820v28q80 20 130 84.5T720-560v280h80v80H160Zm320-300Zm0 420q-33 0-56.5-23.5T400-160h160q0 33-23.5 56.5T480-80ZM320-280h320v-280q0-66-47-113t-113-47q-66 0-113 47t-47 113v280Z"/></svg>
214		</a>
215				
216        
216<script>
217		function changePush() {
218						Swal.fire(
219				'알림',
220				'로그인 후 이용해주세요',
221				'warning'
222			)
223					}
224		
225		function oneChatingOpen() {
226			$.ajax({
227				url: "https://powerballhelper.com/theme/games/ajax/getOneChattingList.php",
228				type: "post",
229				dataType: "json",
230				success: function(res) {
231					//console.log(res);
232					if (res.code == 200) {
233						if (res.html) {
234							$("#gnb").hide();
235							Swal.fire({
236								html: res.html,
237								confirmButtonColor: '#FD6F22',
238								confirmButtonText: '닫기',
239								didClose: () => {
240									pickModal = false;
241								},
242								customClass: {
243									container: 'layoutPickBox'
244								}
245							});
246						}
247					} else {
248						Swal.fire(
249						   '알림',
250							res.message,
251						   'warning'
252						)
253					}
254				}
255			});
256		}
257		
258		function OneToOne(toID) {
259			$.ajax({
260				url: "https://powerballhelper.com/theme/games/ajax/setOneToOneRoom.php",
261				type: "post",
262				data: {toID},
263				dataType: "json",
264				success: function(res) {
265					//console.log(res);
266					
267					if (res.code == 200) {
268						location.href=res.url;
269					} else {
270						Swal.fire(
271						   '알림',
272						   res.message,
273						   'warning'
274						)
275					}
276				}
277			});
278		}
279		
280        $(function () {
281			$("#communityMenu").click(function() {
282				if ($("#communityBar").css("display") == "none") {
283					$("#communityBar").slideDown();
284				} else {
285					$("#communityBar").slideUp();
286				}
287			});
288
289			$(document).on("click", ".js-incident-menu", function() {
290				var barId = $(this).attr("data-incident-bar");
291				if (!barId) return;
292				var $bar = $("#" + barId);
293				if ($bar.css("display") == "none") {
294					$bar.slideDown();
295				} else {
296					$bar.slideUp();
297				}
298			});
299
300			$(document).on("click", ".js-sub-group-menu", function(e) {
301				e.preventDefault();
302				var barId = $(this).attr("data-sub-bar");
303				if (!barId) return;
304				var $bar = $("#" + barId);
305				if ($bar.css("display") == "none") {
306					$bar.slideDown();
307				} else {
308					$bar.slideUp();
309				}
310			});
311			
312			$("#powerballMenu").click(function() {
313				if ($("#powerballBar").css("display") == "none") {
314					$("#powerballBar").slideDown();
315				} else {
316					$("#powerballBar").slideUp();
317				}
318			});
319			
320			$("#rankingMenu").click(function() {
321				if ($("#rankingBar").css("display") == "none") {
322					$("#rankingBar").slideDown();
323				} else {
324					$("#rankingBar").slideUp();
325				}
326			});
327
328			$("#blockchainMenu").click(function() {
329				if ($("#blockchainBar").css("display") == "none") {
330					$("#blockchainBar").slideDown();
331				} else {
332					$("#blockchainBar").slideUp();
333				}
334			});
335
336			$("#serviceMenu").click(function() {
337				if ($("#serviceBar").css("display") == "none") {
338					$("#serviceBar").slideDown();
339				} else {
340					$("#serviceBar").slideUp();
341				}
342			});
343			
344            //폰트 크기 조정 위치 지정
345            var font_resize_class = get_cookie("ck_font_resize_add_class");
346            if( font_resize_class == 'ts_up' ){
347                $("#text_size button").removeClass("select");
348                $("#size_def").addClass("select");
349            } else if (font_resize_class == 'ts_up2') {
350                $("#text_size button").removeClass("select");
351                $("#size_up").addClass("select");
352            }
353
354            $(".hd_opener").on("click", function() {
355                var $this = $(this);
356                var $hd_layer = $this.next(".hd_div");
357
358                if($hd_layer.is(":visible")) {
359                    $hd_layer.hide();
360                    $this.find("span").text("열기");
361                } else {
362                    var $hd_layer2 = $(".hd_div:visible");
363                    $hd_layer2.prev(".hd_opener").find("span").text("열기");
364                    $hd_layer2.hide();
365
366                    $hd_layer.show();
367                    $this.find("span").text("닫기");
368                }
369            });
370
371            $("#container").on("click", function() {
372                $(".hd_div").hide();
373
374            });
375
376            $(".btn_gnb_op").click(function(){
377                $(this).toggleClass("btn_gnb_cl").next(".gnb_2dul").slideToggle(300);
378                
379            });
380
381            $(".hd_closer").on("click", function() {
382                var idx = $(".hd_closer").index($(this));
383                $(".hd_div:visible").hide();
384                $(".hd_opener:eq("+idx+")").find("span").text("열기");
385            });
386        });
387        </script>
387
388        
389    </div>
390</header>
391
392
393
394<div class="absolute w-[calc(100%)] h-full z-[1100] top-0 left-0 bg-white hidden" id="questBox"></div>
395<div class="absolute w-[calc(100%-40px)] h-[500px] z-[1100] top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-white hidden rounded-[12px] overflow-hidden" id="inventoryBox"></div>
396<script>
397function questToggle() {
398	if ($("#questBox").css("display") == "none") {
399		questHTML();
400		$("#questBox").fadeIn();
401	} else {
402		$("#questBox").hide();
403		$("#questBox").html("");
404	}
405	$("#gnb").hide();
406}
407
408function questHTML() {
409	$.ajax({
410		url: "https://powerballhelper.com/theme/games/ajax/getQuestHtml.php",
411		type: "post",
412		dataType: "json",
413		success: function(res) {
414			//console.log(res);
415			if (res.code == 200) {
416				if (res.html) {
417					$("#questBox").html(res.html);
418				}
419			} else {
420				$("#questBox").hide();
421				$("#questBox").html("");
422				Swal.fire(
423				   '알림',
424				   res.message,
425				   'warning'
426				)
427			}
428		}
429	});
430}
431
432var questClaiming = false;
433function checkQuest(id) {
434	if (questClaiming) {
435		return;
436	}
437	questClaiming = true;
438	$.ajax({
439		url: "https://powerballhelper.com/theme/games/ajax/setQuestUpdate.php",
440		type: "post",
441		data: {id},
442		dataType: "json",
443		success: function(res) {
444			questClaiming = false;
445			questHTML();
446
447			if (res.code == 200) {
448				Swal.fire({
449					icon: 'success',
450					title: res.message,
451					toast: true,
452					position: 'bottom-end',
453					showConfirmButton: false,
454					timer: 3000,
455					timerProgressBar: true,
456					didOpen: (toast) => {
457						toast.addEventListener('mouseenter', Swal.stopTimer);
458						toast.addEventListener('mouseleave', Swal.resumeTimer);
459					}
460				});
461			} else {
462				Swal.fire(
463				   '알림',
464				   res.message,
465				   'warning'
466				)
467			}
468		},
469		error: function() {
470			questClaiming = false;
471			questHTML();
472			Swal.fire('알림', '보상 지급 요청에 실패했습니다. 다시 시도해주세요.', 'warning');
473		}
474	});
475}
476</script>
476
477
478<div id="wrapper" class="no-drag">
479    <div id="container">
480    <section class="h-full relative">
481    <div class="w-full h-[320px] relative">
482        
483<div class="w-full h-full">
484	<div class="w-full h-[calc(100%-30px)] relative flex flex-col min-h-0">
485				<div class="w-full shrink-0 leading-[40px] relative">
486			<input type="hidden" id="selectMemberID" value="">
487			<input type="hidden" id="gameTypeName" value="ALL">
488			<div class="absolute w-[50%] top-[40px] h-full flex justify-left items-center text-[16px] font-bold px-3">
489				<!--<span class="mr-3" id="roundBox">0 회차</span>-->
490				<span id="timerBox" class="text-red-600">00:00</span>
491				
492			</div>
493			<div class="flex items-center justify-between pl-2 pr-1 border-r border-gray-300 dark:border-gray-900 cursor-pointer hidden" onclick="slideEvent(this)">
494				<span class="text-[14px] font-bold" id="selectGameName">행운 홀/짝</span>
495				<svg fill="currentColor" class="w-[1.25rem]" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path clip-rule="evenodd" fill-rule="evenodd" d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"></path></svg>
496			</div>
497			<ul id="selectGameUL" class="flex w-full shrink-0 text-center text-[12px] leading-tight border-t border-gray-300 dark:border-gray-900 font-bold bg-white dark:bg-gray-900">
498								<li class="dataViewTab flex-1 min-h-[42px] flex items-center justify-center px-1 py-2 border-b border-r cursor-pointer border-gray-300 dark:border-gray-900 selectedView on" data-type="1">행운 홀/짝</li>
499								<li class="dataViewTab flex-1 min-h-[42px] flex items-center justify-center px-1 py-2 border-b border-r cursor-pointer border-gray-300 dark:border-gray-900 selectedView " data-type="3">행운 언/오</li>
500								<li class="dataViewTab flex-1 min-h-[42px] flex items-center justify-center px-1 py-2 border-b border-r cursor-pointer border-gray-300 dark:border-gray-900 selectedView " data-type="2">숫자합 홀/짝</li>
501								<li class="dataViewTab flex-1 min-h-[42px] flex items-center justify-center px-1 py-2 border-b border-r cursor-pointer border-gray-300 dark:border-gray-900 selectedView " data-type="4">숫자합 언/오</li>
502							</ul>
503		</div>
504		<div id="dataViewBody" class="flex-1 min-h-0 border-b border-gray-300"></div>
505		<div class="absolute z-[500] w-full h-full bg-white top-0 left-0" id="dataViewLoading">
506	<div class="inline-block h-12 w-12 animate-spin rounded-full border-4 border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite] absolute top-[45%] left-[45%]" role="status">
507		<span class="!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]">Loading...</span>
508	</div>
509</div>	</div>
510		<div class="w-full h-[30px] leading-[30px] overflow-hideen bg-[#194ec6] text-[#ffff00] px-2 border-b border-b-[4px] border-[#000]">
511		<div class="swiper noticeSwiper w-full h-full">
512			<div class="swiper-wrapper">
513								<div class="swiper-slide font-bold">불법광고 시 경고 없이 차단 조치 됩니다.</div>
514								<div class="swiper-slide font-bold">변형된 비속어 사용 시 경고 없이 차단 조치 됩니다.</div>
515								<div class="swiper-slide font-bold">매너있는 채팅 부탁드립니다.</div>
516								<div class="swiper-slide font-bold">카톡, 연락처, 개인정보, 계좌 공개 시 아이디 영구정지 처리 됩니다.</div>
517								<div class="swiper-slide font-bold">파워볼 헬퍼 I O S 앱 출시 완료!</div>
518								<div class="swiper-slide font-bold">레벨 업 방식은 이용자 가이드를 확인해 주세요!</div>
519								<div class="swiper-slide font-bold">지속적인 포인트 요구 도배성 채팅은 경고없이 차단조치됩니다.</div>
520							</div>
521		</div>
522	</div>
523</div>
524
525
526<script>
527	var swiper = new Swiper(".noticeSwiper", {
528		direction: "vertical",
529		autoplay: true,
530		loop: true,
531		speed: 1000
532    });
533
534    var gameType = "dhkspeedkeno";
535	const dataViewTabLabels = {"1":"행운 홀\/짝","2":"숫자합 홀\/짝","3":"행운 언\/오","4":"숫자합 언\/오"};
536	
537	
538		let checkType = 1;
539		
540	$("#showViewBtn").click(function() {
541		if ($("#viewBodyBox").css("display") == "none") {
542			$("#viewBodyBox").slideDown();
543		} else {
544			$("#viewBodyBox").slideUp();
545		}
546	});
547	
548    $(".selectedView").click(function() {
549        $(".selectedView").removeClass("on");
550		$(this).addClass("on");
551		const thisType = $(this).data("type");
552		if (thisType != checkType) {
553			checkType = thisType;
554			
555			$("#selectGameName").text(dataViewTabLabels[String(thisType)] || dataViewTabLabels["1"]);
556			//$("#selectGameUL").hide();
557			dataViewHtml(checkType, gameType);
558			// 사다리: 상단 탭(출발·줄·홀짝·조합)과 픽 등록 selectType 동기화
559			if (typeof gameType !== "undefined" && (gameType === "coinladder3" || gameType === "dhkenoladder") && typeof selectType !== "undefined") {
560				if (checkType == 2) selectType = "줄";
561				else if (checkType == 3) selectType = "홀짝";
562				else if (checkType == 4) selectType = "조합";
563				else selectType = "출발";
564			}
565			
566		}
567    });
568	
569	var ticketValue = 8;
570
571	function ticketHTML(ticketVal) {
572		var checkGames;
573		var isLadderGame = (typeof gameType !== "undefined" && (gameType === "coinladder3" || gameType === "dhkenoladder"));
574		if (checkType == 1) {
575			checkGames = "powerballOE"+ticketVal+".php";
576		} else if (checkType == 4) {
577			checkGames = "normalballUO"+ticketVal+".php";
578		} else if (isLadderGame && checkType == 2) {
579			checkGames = "powerballUO"+ticketVal+".php";
580		} else if (isLadderGame && checkType == 3) {
581			checkGames = "normalballOE"+ticketVal+".php";
582		} else if (checkType == 3) {
583			checkGames = "powerballUO"+ticketVal+".php";
584		} else if (checkType == 2) {
585			checkGames = "normalballOE"+ticketVal+".php";
586		} else {
587			checkGames = "powerballOE"+ticketVal+".php";
588		}
589		$.ajax({
590			// 정적 PHP 파일이라 브라우저 캐시에 막히기 쉬움 → 캐시 버스터 추가
591			url: "https://powerballhelper.com/theme/games/result/dhkspeedkeno/"+checkGames + "?_=" + Date.now(),
592			type: "get",
593			cache: false,
594			dataType: "html",
595			success: function(res) {
596				$("#ticketHTMLBox").html(res);
597				ticketValue = ticketVal;
598			},
599			error: function() {
600				$("#ticketHTMLBox").html('<div class="p-4 text-center text-red-600 text-[12px]">티켓을 불러오지 못했습니다.</div>');
601			}
602		});
603	}
604	
605    $(function() {
606		dataViewHtml(checkType, gameType);
607	});
608    function dataViewHtml(type, gameType) {
609		$("#dataViewLoading").show();
610        $.ajax({
611            url: "https://powerballhelper.com/theme/games/ajax/getDataHtml.php",
612            type: "post",
613            data: {type, gameType},
614            dataType: "json",
615            success: function(res) {
616				//console.log(res);
617				if (res.code == 200) {
618					$("#dataViewBody").html(res.html);
619					$("#totalDataBody").html(res.html2);
620					if (res.chart !== undefined && res.chart !== null && String(res.chart).trim() !== "") {
621						$("#chartContainerBox").html(res.chart);
622					}
623					ticketHTML(ticketValue);
624					setTimeout(function() {
625						$(".dataViewBodyScroll").scrollLeft(100000);
626						$("#dataViewLoading").fadeOut();
627					},300);
628					
629				}
630            }
631        });
632    }
633
634	// 백그라운드에서 타이머가 밀려 회차·결과 패널이 갱신되지 않는 현상 보완
635	// 주의: PickListHTML()은 항상 Swal로 픽 내역을 "새로 연다". 포그라운드 복귀마다 호출하면
636	// (모바일 visibility 이벤트가 잦을 때) 회차 끝날 때마다 모달이 뜨는 것처럼 보일 수 있음.
637	function isPowerballPickListSwalOpen() {
638		try {
639			if (typeof Swal === "undefined" || typeof Swal.isVisible !== "function" || !Swal.isVisible()) {
640				return false;
641			}
642			var hc = Swal.getHtmlContainer();
643			return !!(hc && hc.querySelector && hc.querySelector("[data-pick-list-modal=\"1\"]"));
644		} catch (e) {
645			return false;
646		}
647	}
648
649	function schedulePowerballGameForegroundRefresh() {
650		clearTimeout(window.__powerballGameForegroundRefreshTimer);
651		window.__powerballGameForegroundRefreshTimer = setTimeout(function() {
652			if (document.visibilityState !== "visible") return;
653			if (typeof setClock === "function") {
654				try { setClock(); } catch (e) {}
655			}
656			if (typeof dataViewHtml === "function") {
657				try { dataViewHtml(checkType, gameType); } catch (e2) {}
658			}
659			if (typeof leftRanking === "function") {
660				try { leftRanking(); } catch (e3) {}
661			}
662			if (typeof getMemberCount === "function") {
663				try { getMemberCount(); } catch (e4) {}
664			}
665			if (typeof $ !== "undefined" && $("#selectMemberID").length) {
666				var _mbid = $("#selectMemberID").val();
667				if (_mbid && typeof PickListHTML === "function" && isPowerballPickListSwalOpen()) {
668					try { PickListHTML(_mbid); } catch (e5) {}
669				}
670			}
671		}, 200);
672	}
673	(function installPowerballGameForegroundRefresh() {
674		if (window.__powerballGameForegroundRefreshInstalled) return;
675		window.__powerballGameForegroundRefreshInstalled = true;
676		var tabHadHidden = false;
677		document.addEventListener("visibilitychange", function() {
678			if (document.visibilityState === "hidden") {
679				tabHadHidden = true;
680			} else if (document.visibilityState === "visible" && tabHadHidden) {
681				tabHadHidden = false;
682				schedulePowerballGameForegroundRefresh();
683			}
684		});
685		window.addEventListener("pageshow", function(ev) {
686			if (ev.persisted) schedulePowerballGameForegroundRefresh();
687		});
688	})();
689</script>
689
690    </div>
691    <div class="w-full h-[calc(100%-320px)]">
692        <div class="w-full h-[50px] border-b border-gray-300 flex items-center justify-between gap-1 px-1">
693	<div class="flex items-center shrink-0 min-w-0">
694	<div class="ml-2 flex items-center shrink-0">
695		<div class="min-w-[75px] flex items-center" >
696			<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#0c0546"><path d="M0 0h24v24H0z" fill="none"/><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>
697			<span class="text-[#0c0546] ml-2"><b id="gamePeople">0</b> 명</span>
698		</div>
699		<button type="button" id="refreshGamePageBtn" class="inline-flex items-center justify-center ml-1 p-1 cursor-pointer" onclick="location.reload()" title="새로고침">
700			<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#0c0546"><path d="M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z"/></svg>
701			<span class="sound_only">새로고침</span>
702		</button>
703	</div>
704	
705					</div>
706
707		<div class="flex-1 flex justify-center items-center min-w-0 px-1">
708			</div>
709
710		<div class="shrink-0 h-full flex items-center justify-end">
711		<ul class="flex items-center">
712			<li class="font-bold text-[16px] cursor-pointer px-2" id="showPickContainer">
713				<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#0c0546"><g><rect fill="none" height="24" width="24"/></g><g><path d="M19.98,14.82l-0.63,4.46C19.21,20.27,18.36,21,17.37,21h-6.16c-0.53,0-1.29-0.21-1.66-0.59L5,15.62l0.83-0.84 c0.24-0.24,0.58-0.35,0.92-0.28L10,15.24V4.5C10,3.67,10.67,3,11.5,3S13,3.67,13,4.5v6h0.91c0.31,0,0.62,0.07,0.89,0.21l4.09,2.04 C19.66,13.14,20.1,13.97,19.98,14.82z"/></g></svg>
714			</li>
715			<li class="font-bold text-[22px] cursor-pointer px-2" id="moreMenuBtn" onclick="openPowerballMoreMenu()">
716				<svg xmlns="http://www.w3.org/2000/svg" height="26px" viewBox="0 -960 960 960" width="26px" fill="#0c0546"><path d="M240-400q-33 0-56.5-23.5T160-480q0-33 23.5-56.5T240-560q33 0 56.5 23.5T320-480q0 33-23.5 56.5T240-400Zm240 0q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm240 0q-33 0-56.5-23.5T640-480q0-33 23.5-56.5T720-560q33 0 56.5 23.5T800-480q0 33-23.5 56.5T720-400Z"/></svg>
717				<span class="sound_only">메뉴</span>
718			</li>
719			<!--<li class="font-bold text-[16px] cursor-pointer px-2" id="showAnalyzerContainer">
720				<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#0c0546"><path d="M280-280h80v-200h-80v200Zm320 0h80v-400h-80v400Zm-160 0h80v-120h-80v120Zm0-200h80v-80h-80v80ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z"/></svg>
721			</li>-->
722			<li class="font-bold text-[16px] cursor-pointer px-2 hidden" data-mbid="" id="showPickListContainer">
723				<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#0c0546"><path d="M0 0h24v24H0z" fill="none"/><path d="M21 3H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.1-.9-2-2-2zm0 14H3V5h18v12zm-2-9H8v2h11V8zm0 4H8v2h11v-2zM7 8H5v2h2V8zm0 4H5v2h2v-2z"/></svg>
724			</li>
725						<li class="font-bold text-[16px] cursor-pointer px-2 hidden">
726				<a data-clickable="true" data-mbid="" id="showPickListContainer2">
727					<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#0c0546"><path d="m590-160 80 80H240q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h360l200 240v480q0 20-8.5 36.5T768-96L560-302q-17 11-37 16.5t-43 5.5q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 23-5.5 43T618-360l102 104v-356L562-800H240v640h350ZM480-360q33 0 56.5-23.5T560-440q0-33-23.5-56.5T480-520q-33 0-56.5 23.5T400-440q0 33 23.5 56.5T480-360Zm0-80Zm0 0Z"/></svg>
728				</a>
729			</li>
730						<!--<li class="font-bold text-[16px] cursor-pointer px-2" onclick="oneChatingOpen()">
731				<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#0c0546"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 9h12v2H6V9zm8 5H6v-2h8v2zm4-6H6V6h12v2z"/></svg>
732			</li>-->
733			<li class="font-bold text-[16px] cursor-pointer px-2 hidden" id="showInventoryContainer" onclick="inventoryOpen('', 0)">
734				<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#0c0546"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M20 2H4c-1 0-2 .9-2 2v3.01c0 .72.43 1.34 1 1.69V20c0 1.1 1.1 2 2 2h14c.9 0 2-.9 2-2V8.7c.57-.35 1-.97 1-1.69V4c0-1.1-1-2-2-2zm-5 12H9v-2h6v2zm5-7H4V4l16-.02V7z"/></svg>
735			</li>
736			<li class="font-bold text-[16px] cursor-pointer px-2 hidden" onclick="showRankHTML()">
737				<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#0c0546"><g><rect fill="none" height="24" width="24"/></g><g><path d="M17,10.43V2H7v8.43c0,0.35,0.18,0.68,0.49,0.86l4.18,2.51l-0.99,2.34l-3.41,0.29l2.59,2.24L9.07,22L12,20.23L14.93,22 l-0.78-3.33l2.59-2.24l-3.41-0.29l-0.99-2.34l4.18-2.51C16.82,11.11,17,10.79,17,10.43z M13,12.23l-1,0.6l-1-0.6V3h2V12.23z"/></g></svg>
738			</li>
739			<li class="font-bold text-[16px] cursor-pointer px-2 hidden" id="showChartContainer">
740				<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#0c0546"><rect fill="none" height="24" width="24"/><g><path d="M7.5,21H2V9h5.5V21z M14.75,3h-5.5v18h5.5V3z M22,11h-5.5v10H22V11z"/></g></svg>
741			</li>
742			<li class="font-bold text-[16px] cursor-pointer px-2 hidden" id="showTicketContainer">
743				<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#0c0546"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 12c0-1.1.9-2 2-2V6c0-1.1-.9-2-2-2H4c-1.1 0-1.99.9-1.99 2v4c1.1 0 1.99.9 1.99 2s-.89 2-2 2v4c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-4c-1.1 0-2-.9-2-2zm-4.42 4.8L12 14.5l-3.58 2.3 1.08-4.12-3.29-2.69 4.24-.25L12 5.8l1.54 3.95 4.24.25-3.29 2.69 1.09 4.11z"/></svg>
744			</li>
745			<li class="font-bold text-[16px] cursor-pointer px-2 hidden" onclick="runningListOpen()">
746				<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#0c0546"><path d="M0 0h24v24H0z" fill="none"/><path d="M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5.1-.8.1l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z"/></svg>
747			</li>
748		</ul>
749	</div>
750	</div>
751
752<style>
753/* 파워볼 상단 · 더보기 메뉴 팝업 */
754.pb-more-menu-swal.swal2-popup {
755	padding: 0;
756	border-radius: 18px;
757	overflow: hidden;
758	box-shadow: 0 22px 50px rgba(12, 5, 70, 0.28), 0 0 0 1px rgba(255, 255, 255, 0.08) inset;
759	max-width: 92vw;
760	width: 340px;
761}
762.pb-more-menu-swal .swal2-content,
763.pb-more-menu-swal .swal2-html-container {
764	margin: 0 !important;
765	padding: 0 !important;
766	width: 100% !important;
767	max-width: 100% !important;
768	box-sizing: border-box;
769}
770.pb-more-menu-swal .swal2-title {
771	display: none !important;
772	margin: 0 !important;
773	padding: 0 !important;
774	height: 0 !important;
775	min-height: 0 !important;
776}
777.pb-more-menu-swal .swal2-close {
778	top: 12px;
779	right: 12px;
780	width: 36px;
781	height: 36px;
782	border-radius: 50%;
783	background: rgba(255, 255, 255, 0.18);
784	color: #fff;
785	font-size: 1.35rem;
786	line-height: 36px;
787	transition: background 0.2s ease, transform 0.15s ease;
788}
789.pb-more-menu-swal .swal2-close:hover {
790	background: rgba(255, 255, 255, 0.32);
791	transform: scale(1.05);
792}
793.pb-more-menu-head {
794	background: linear-gradient(135deg, #0c0546 0%, #1a237e 45%, #283593 100%);
795	padding: 22px 48px 18px 20px;
796	position: relative;
797}
798.pb-more-menu-head::after {
799	content: "";
800	position: absolute;
801	left: 0;
802	right: 0;
803	bottom: 0;
804	height: 48px;
805	background: linear-gradient(to top, rgba(245, 247, 250, 1), transparent);
806	pointer-events: none;
807	opacity: 0.35;
808}
809.pb-more-menu-head h3 {
810	margin: 0;
811	font-size: 1.15rem;
812	font-weight: 800;
813	color: #fff;
814	letter-spacing: -0.02em;
815	text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
816}
817.pb-more-menu-head p {
818	margin: 6px 0 0;
819	font-size: 0.78rem;
820	color: rgba(255, 255, 255, 0.78);
821	font-weight: 500;
822}
823.pb-more-menu-body {
824	padding: 12px 14px 18px;
825	background: linear-gradient(180deg, #f8fafc 0%, #eef2f7 100%);
826}
827.pb-more-menu-btn {
828	display: flex;
829	align-items: center;
830	gap: 12px;
831	width: 100%;
832	text-align: left;
833	padding: 12px 14px;
834	margin-bottom: 8px;
835	border: none;
836	border-radius: 14px;
837	background: #fff;
838	box-shadow: 0 2px 8px rgba(12, 5, 70, 0.06), 0 0 0 1px rgba(12, 5, 70, 0.06);
839	cursor: pointer;
840	transition: transform 0.15s ease, box-shadow 0.2s ease, background 0.2s ease;
841	-webkit-tap-highlight-color: transparent;
842}
843.pb-more-menu-btn:last-child {
844	margin-bottom: 0;
845}
846.pb-more-menu-btn:hover,
847.pb-more-menu-btn:focus {
848	transform: translateY(-1px);
849	box-shadow: 0 8px 20px rgba(12, 5, 70, 0.12), 0 0 0 1px rgba(12, 5, 70, 0.1);
850	background: #fafbff;
851	outline: none;
852}
853.pb-more-menu-btn:active {
854	transform: translateY(0);
855}
856.pb-more-menu-btn-icon {
857	flex-shrink: 0;
858	width: 44px;
859	height: 44px;
860	border-radius: 12px;
861	display: flex;
862	align-items: center;
863	justify-content: center;
864	background: linear-gradient(145deg, #e8ecf8 0%, #dce4f5 100%);
865	color: #0c0546;
866	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
867}
868.pb-more-menu-btn-icon svg {
869	width: 22px;
870	height: 22px;
871	fill: currentColor;
872}
873.pb-more-menu-btn-text {
874	flex: 1;
875	min-width: 0;
876}
877.pb-more-menu-btn-text strong {
878	display: block;
879	font-size: 0.92rem;
880	font-weight: 800;
881	color: #0c0546;
882	letter-spacing: -0.02em;
883}
884.pb-more-menu-btn-text span {
885	display: block;
886	margin-top: 2px;
887	font-size: 0.72rem;
888	color: #64748b;
889	font-weight: 500;
890}
891.pb-more-menu-btn-chevron {
892	flex-shrink: 0;
893	color: #94a3b8;
894	opacity: 0.85;
895}
896.pb-more-menu-btn-chevron svg {
897	width: 18px;
898	height: 18px;
899	fill: currentColor;
900}
901.pb-macro-analyzer-swal.swal2-popup {
902	max-width: 94vw;
903	width: 380px;
904	padding: 0 0 14px;
905	border-radius: 16px;
906}
907.pb-macro-analyzer-head {
908	padding: 16px 18px 12px;
909	background: linear-gradient(135deg, #0c0546 0%, #283593 100%);
910	color: #fff;
911}
912.pb-macro-analyzer-head h3 {
913	margin: 0;
914	font-size: 1.05rem;
915	font-weight: 800;
916}
917.pb-macro-analyzer-head p {
918	margin: 6px 0 0;
919	font-size: 0.72rem;
920	opacity: 0.85;
921	line-height: 1.35;
922}
923.pb-macro-analyzer-list {
924	max-height: min(58vh, 420px);
925	overflow-y: auto;
926	padding: 10px 12px 4px;
927	text-align: left;
928}
929.pb-macro-analyzer-row {
930	display: flex;
931	align-items: center;
932	justify-content: space-between;
933	gap: 10px;
934	width: 100%;
935	padding: 12px 12px;
936	margin-bottom: 8px;
937	border: none;
938	border-radius: 12px;
939	background: #fff;
940	box-shadow: 0 2px 8px rgba(12, 5, 70, 0.08);
941	cursor: pointer;
942	-webkit-tap-highlight-color: transparent;
943	text-align: left;
944	font: inherit;
945	color: inherit;
946}
947.pb-macro-analyzer-row:active {
948	transform: scale(0.99);
949}
950.pb-macro-analyzer-row .nick {
951	font-weight: 800;
952	font-size: 0.9rem;
953	color: #0c0546;
954}
955.pb-macro-analyzer-row .id {
956	font-size: 0.7rem;
957	color: #64748b;
958	margin-top: 2px;
959}
960.pb-macro-analyzer-row .stat {
961	text-align: right;
962	flex-shrink: 0;
963}
964.pb-macro-analyzer-row .rate {
965	font-weight: 800;
966	font-size: 1rem;
967	color: #0c0546;
968}
969.pb-macro-analyzer-row .wl {
970	font-size: 0.68rem;
971	color: #64748b;
972	margin-top: 2px;
973}
974.pb-macro-analyzer-empty {
975	padding: 28px 16px;
976	text-align: center;
977	font-size: 0.85rem;
978	color: #64748b;
979}
980</style>
981
982<script>
983/**
984 * 공식 홈 열기 (모바일 파워볼 상단 · 앱 WebView / 일반 브라우저 공통).
985 * 1) 네이티브 브릿지(Android JavascriptInterface / iOS WKWebView) — 앱에서 외부 브라우저 연동 시
986 * 2) Android 일반·WebView: intent:// … #Intent;scheme=…;S.browser_fallback_url=… (시스템 뷰어/브라우저)
987 * 3) 그 외: window.open 폴백
988 */
989function openOfficialHomeExternal(url) {
990	if (!url || typeof url !== 'string') return false;
991	var u = String(url).trim();
992	if (!/^https?:\/\//i.test(u)) return false;
993
994	if (typeof window.Android !== 'undefined') {
995		if (typeof window.Android.openExternalBrowser === 'function') {
996			window.Android.openExternalBrowser(u);
997			return true;
998		}
999		if (typeof window.Android.openUrl === 'function') {
1000			window.Android.openUrl(u);
1001			return true;
1002		}
1003		if (typeof window.Android.openInExternalBrowser === 'function') {
1004			window.Android.openInExternalBrowser(u);
1005			return true;
1006		}
1007	}
1008	if (typeof window.AppBridge !== 'undefined' && typeof window.AppBridge.openExternalUrl === 'function') {
1009		window.AppBridge.openExternalUrl(u);
1010		return true;
1011	}
1012
1013	try {
1014		if (window.webkit && window.webkit.messageHandlers) {
1015			var mh = window.webkit.messageHandlers;
1016			if (mh.openExternalBrowser && typeof mh.openExternalBrowser.postMessage === 'function') {
1017				mh.openExternalBrowser.postMessage(u);
1018				return true;
1019			}
1020			if (mh.openBrowser && typeof mh.openBrowser.postMessage === 'function') {
1021				mh.openBrowser.postMessage({ url: u });
1022				return true;
1023			}
1024			if (mh.openURL && typeof mh.openURL.postMessage === 'function') {
1025				mh.openURL.postMessage(u);
1026				return true;
1027			}
1028		}
1029	} catch (e) {}
1030
1031	if (/Android/i.test(navigator.userAgent || '')) {
1032		try {
1033			var noHash = u.split('#')[0];
1034			var parsed = new URL(noHash);
1035			var scheme = (parsed.protocol || 'https:').replace(':', '');
1036			var rest = parsed.hostname + (parsed.port ? ':' + parsed.port : '') + (parsed.pathname || '/') + (parsed.search || '');
1037			var intent = 'intent://' + rest.replace(/^\/+/, '') + '#Intent;scheme=' + scheme + ';action=android.intent.action.VIEW;category=android.intent.category.BROWSABLE;S.browser_fallback_url=' + encodeURIComponent(u) + ';end';
1038			window.location.href = intent;
1039			setTimeout(function() { window.open(u, '_blank', 'noopener,noreferrer'); }, 500);
1040			return true;
1041		} catch (e2) {}
1042	}
1043
1044	window.open(u, '_blank', 'noopener,noreferrer');
1045	return true;
1046}
1047
1048function pbMoreMenuIconSvg(kind) {
1049	var common = 'xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"';
1050	if (kind === 'macro') return '<svg ' + common + '><path d="M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.64l-1.92-3.32c-.12-.22-.39-.31-.61-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.49 0-.61.22L2.74 8.87c-.12.22-.07.49.12.64l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.64l1.92 3.32c.12.22.39.31.61.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.49 0 .61-.22l1.92-3.32c.12-.22.07-.49-.12-.64l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/></svg>';
1051	if (kind === 'pick') return '<svg ' + common + '><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z"/></svg>';
1052	if (kind === 'inv') return '<svg ' + common + '><path d="M20 2H4c-1 0-2 .9-2 2v3.01c0 .72.43 1.34 1 1.69V20c0 1.1 1.1 2 2 2h14c.9 0 2-.9 2-2V8.7c.57-.35 1-.97 1-1.69V4c0-1.1-1-2-2-2zm-5 12H9v-2h6v2zm5-7H4V4l16-.02V7z"/></svg>';
1053	if (kind === 'rank') return '<svg ' + common + '><path d="M17 10.43V2H7v8.43c0 .35.18.68.49.86l4.18 2.51-.99 2.34-3.41.29 2.59 2.24L9.07 22 12 20.23l2.93 1.77-.78-3.33 2.59-2.24-3.41-.29-.99-2.34 4.18-2.51c.31-.18.49-.51.49-.86zM13 12.23l-1 .6-1-.6V3h2v9.23z"/></svg>';
1054	if (kind === 'chart') return '<svg ' + common + '><path d="M7.5 21H2V9h5.5v12zm7.25-18h-5.5v18h5.5V3zM22 11h-5.5v10H22V11z"/></svg>';
1055	if (kind === 'ticket') return '<svg ' + common + '><path d="M20 12c0-1.1.9-2 2-2V6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v4c1.1 0 2 .9 2 2s-.9 2-2 2v4c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-4c-1.1 0-2-.9-2-2zm-4.42 4.8L12 14.5l-3.58 2.3 1.08-4.12-3.29-2.69 4.24-.25L12 5.8l1.54 3.95 4.24.25-3.29 2.69 1.09 4.11z"/></svg>';
1056	if (kind === 'analyzer') return '<svg ' + common + '><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/></svg>';
1057	return '<svg ' + common + '><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></svg>';
1058}
1059
1060function openPowerballMoreMenu() {
1061	try { if (typeof wheelHide === 'function') wheelHide(); } catch (e) {}
1062
1063	var items = [];
1064
1065	
1066	
1067		items.push({
1068		label: '픽 리스트',
1069		desc: '로그인 후 이용 가능',
1070		icon: 'pick',
1071		action: function() { try { $("#showPickListContainer2").trigger("click"); } catch (e) {} }
1072	});
1073	
1074	items.push({
1075		label: '지갑',
1076		desc: '보유 아이템 확인',
1077		icon: 'inv',
1078		action: function() { try { inventoryOpen("", 0); } catch (e) {} }
1079	});
1080	items.push({
1081		label: '랭킹',
1082		desc: '순위·전적 랭킹',
1083		icon: 'rank',
1084		action: function() { if (typeof showRankHTML === 'function') showRankHTML(); }
1085	});
1086	items.push({
1087		label: '차트',
1088		desc: '차트 분석 보기',
1089		icon: 'chart',
1090		action: function() { try { $("#showChartContainer").trigger("click"); } catch (e) {} }
1091	});
1092	items.push({
1093		label: '티켓',
1094		desc: '티켓·분석 도구',
1095		icon: 'ticket',
1096		action: function() { try { $("#showTicketContainer").trigger("click"); } catch (e) {} }
1097	});
1098
1099	var chevron = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg>';
1100	var html = ''
1101		+ '<div class="pb-more-menu-wrap">'
1102		+ '<div class="pb-more-menu-head">'
1103		+ '<h3>빠른 메뉴</h3>'
1104		+ '<p>원하는 기능을 선택하세요</p>'
1105		+ '</div>'
1106		+ '<div class="pb-more-menu-body">';
1107	for (var i = 0; i < items.length; i++) {
1108		var ic = pbMoreMenuIconSvg(items[i].icon || '');
1109		var desc = items[i].desc ? items[i].desc : '';
1110		html += ''
1111			+ '<button type="button" class="pb-more-menu-btn" data-menu-idx="' + i + '">'
1112			+ '<span class="pb-more-menu-btn-icon">' + ic + '</span>'
1113			+ '<span class="pb-more-menu-btn-text"><strong>' + items[i].label + '</strong>'
1114			+ (desc ? '<span>' + desc + '</span>' : '')
1115			+ '</span>'
1116			+ '<span class="pb-more-menu-btn-chevron">' + chevron + '</span>'
1117			+ '</button>';
1118	}
1119	html += '</div></div>';
1120
1121	Swal.fire({
1122		title: '',
1123		html: html,
1124		showConfirmButton: false,
1125		showCloseButton: true,
1126		customClass: {
1127			container: 'layoutPickBox',
1128			popup: 'pb-more-menu-swal'
1129		},
1130		didOpen: () => {
1131			var root = Swal.getHtmlContainer();
1132			if (!root) return;
1133			var btns = root.querySelectorAll('button[data-menu-idx]');
1134			for (var j = 0; j < btns.length; j++) {
1135				btns[j].addEventListener('click', function() {
1136					var idx = parseInt(this.getAttribute('data-menu-idx'), 10);
1137					Swal.close();
1138					setTimeout(function() {
1139						try { if (items[idx] && typeof items[idx].action === 'function') items[idx].action(); } catch (e) {}
1140					}, 10);
1141				});
1142			}
1143		}
1144	});
1145}
1146
1147function pbMacroAnalyzerEsc(s) {
1148	return String(s == null ? '' : s)
1149		.replace(/&/g, '&amp;')
1150		.replace(/</g, '&lt;')
1151		.replace(/"/g, '&quot;');
1152}
1153
1154function openMacroAnalyzer() {
1155		Swal.fire('알림', '로그인 후 이용해 주세요.', 'warning');
1156	return;
1157		$.ajax({
1158		url: "https://powerballhelper.com/theme/games/ajax/getMacroAnalyzerList.php",
1159		type: "post",
1160		dataType: "json",
1161		success: function(res) {
1162			if (!res || res.code !== 200) {
1163				Swal.fire('알림', (res && res.message) ? res.message : '목록을 불러오지 못했습니다.', 'warning');
1164				return;
1165			}
1166			var rows = res.rows || [];
1167			rows.sort(function(a, b) {
1168				var ra = (a.rate != null && a.rate !== '') ? Number(a.rate) : -1;
1169				var rb = (b.rate != null && b.rate !== '') ? Number(b.rate) : -1;
1170				if (rb !== ra) return rb - ra;
1171				return (Number(b.settled) || 0) - (Number(a.settled) || 0);
1172			});
1173			var sub = '최근 7일 · 파워볼 픽 기준 (당첨/낙첨만 집계)';
1174			var body = '';
1175			if (!rows.length) {
1176				body = '<div class="pb-macro-analyzer-empty">매크로로 등록된 계정이 없습니다.</div>';
1177			} else {
1178				body = '<div class="pb-macro-analyzer-list">';
1179				for (var i = 0; i < rows.length; i++) {
1180					var r = rows[i];
1181					var rateTxt = (r.settled > 0 && r.rate != null) ? (r.rate + '%') : '-';
1182					var wl = '승 ' + (r.wins || 0) + ' / 패 ' + (r.loses || 0);
1183					if ((r.macro_on || 0) > 0) {
1184						wl += ' · 매크로 ' + r.macro_on + '개 작동';
1185					}
1186					body += ''
1187						+ '<button type="button" class="pb-macro-analyzer-row" data-mb-id="' + pbMacroAnalyzerEsc(r.mb_id) + '">'
1188						+ '<span><div class="nick">' + pbMacroAnalyzerEsc(r.mb_nick) + '</div>'
1189						+ '<div class="id">' + pbMacroAnalyzerEsc(r.mb_id) + '</div></span>'
1190						+ '<span class="stat"><div class="rate">' + pbMacroAnalyzerEsc(rateTxt) + '</div>'
1191						+ '<div class="wl">' + pbMacroAnalyzerEsc(wl) + '</div></span>'
1192						+ '</button>';
1193				}
1194				body += '</div>';
1195			}
1196			var html = ''
1197				+ '<div class="pb-macro-analyzer-wrap">'
1198				+ '<div class="pb-macro-analyzer-head"><h3>분석기</h3><p>' + pbMacroAnalyzerEsc(sub) + '</p></div>'
1199				+ body
1200				+ '</div>';
1201			Swal.fire({
1202				title: '',
1203				html: html,
1204				showConfirmButton: true,
1205				confirmButtonText: '닫기',
1206				showCloseButton: true,
1207				customClass: {
1208					container: 'layoutPickBox',
1209					popup: 'pb-macro-analyzer-swal'
1210				},
1211				didOpen: function() {
1212					var root = Swal.getHtmlContainer();
1213					if (!root) return;
1214					var btns = root.querySelectorAll('.pb-macro-analyzer-row[data-mb-id]');
1215					for (var j = 0; j < btns.length; j++) {
1216						btns[j].addEventListener('click', function() {
1217							var mid = this.getAttribute('data-mb-id');
1218							Swal.close();
1219							setTimeout(function() {
1220								try {
1221									$("#selectMemberID").val(mid);
1222									if (typeof PickListHTML === "function") PickListHTML(mid);
1223								} catch (e2) {}
1224							}, 10);
1225						});
1226					}
1227				}
1228			});
1229		},
1230		error: function() {
1231			Swal.fire('알림', '목록을 불러오지 못했습니다.', 'warning');
1232		}
1233	});
1234}
1235</script>
1235
1236
1237
1238<audio id="chipS" class="hidden">
1239	<source src="https://powerballhelper.com/sound/chip_click.mp3" type="audio/mpeg">
1240</audio>
1241
1242<audio id="pickS" class="hidden">
1243	<source src="https://powerballhelper.com/sound/pick_click.mp3" type="audio/mpeg">
1244</audio>
1245
1246<div class="w-full h-[calc(100%-50px)] relative">
1247	<div class="w-full h-full flex" id="chatContainerBox">
1248		<style>
1249#chat_list .chat-clan-tag { display: inline-flex; align-items: center; flex-shrink: 0; min-height: 18px; margin-left: 5px; vertical-align: middle; }
1250#chat_list .chat-clan-tag .chat-clan-badge { display: inline-flex; align-items: center; padding: 2px 6px; font-size: 9px; font-weight: 700; line-height: 1.2; color: #fde047; background: linear-gradient(135deg, rgba(251,191,36,0.28) 0%, rgba(245,158,11,0.18) 100%); border: 1px solid rgba(251,191,36,0.55); border-radius: 9999px; letter-spacing: 0.04em; box-shadow: 0 0 10px rgba(251,191,36,0.15); white-space: nowrap; text-transform: uppercase; }
1251#chat_list .chat-clan-tag .chat-clan-badge::before { content: '['; opacity: 0.9; margin-right: 1px; font-weight: 600; }
1252#chat_list .chat-clan-tag .chat-clan-badge::after { content: ']'; opacity: 0.9; margin-left: 1px; font-weight: 600; }
1253/* 픽 채팅 카드: 상위 채팅/다크모드 색상 상속으로 닉네임이 안 보이는 현상 방지 */
1254#chat_list .pick-chat-card { color: #111827 !important; background: #e1fafa !important; }
1255#chat_list .pick-chat-card .pick-chat-nick,
1256#chat_list .pick-chat-card .pick-chat-nick-label,
1257#chat_list .pick-chat-card > span:not(.chat-clan-tag) { color: #111827 !important; opacity: 1 !important; visibility: visible !important; }
1258#chat_list .pick-chat-card p { color: #111827 !important; }
1259html.dark #chat_list .pick-chat-card .pick-chat-nick,
1260.dark #chat_list .pick-chat-card .pick-chat-nick,
1261html.dark #chat_list .pick-chat-card .pick-chat-nick-label,
1262.dark #chat_list .pick-chat-card .pick-chat-nick-label { color: #111827 !important; }
1263</style>
1264<div class="w-[60px] h-full border-r">
1265	<div id="chatingRoomListBox" class="h-[calc(100%)] overflow-y-auto scroll">
1266		<ul id="chatingRoomList" class="p-1 pb-0"></ul>
1267	</div>
1268	<div id="chatingRoomAdd" class="h-[30px] leading-[30px] text-center font-bold bg-black text-white cursor-pointer hidden">방 만들기</div>
1269</div>
1270<div class="w-[calc(100%-60px)] h-full relative">
1271	
1271<script src="https://powerballhelper.com:8443/socket.io/socket.io.js"></script>
1271
1272	
1272<script>window.GAMES_BLOCKED_IDS = window.GAMES_BLOCKED_IDS || {};
1273
1274function refreshBlockedIds() {
1275	$.ajax({
1276		url: "https://powerballhelper.com/theme/games/ajax/getBlockList.php",
1277		type: "post",
1278		data: { ids_only: "1" },
1279		dataType: "json",
1280		success: function(res) {
1281			if (res && res.code == 200 && Array.isArray(res.ids)) {
1282				var map = {};
1283				for (var i = 0; i < res.ids.length; i++) {
1284					map[String(res.ids[i])] = 1;
1285				}
1286				window.GAMES_BLOCKED_IDS = map;
1287			}
1288		}
1289	});
1290}
1291
1292function isBlocked(mb_id) {
1293	if (!mb_id) return false;
1294	return !!(window.GAMES_BLOCKED_IDS && window.GAMES_BLOCKED_IDS[String(mb_id)]);
1295}
1296
1297/**
1298 * HTML 문자열에서 차단된 유저 요소만 제거한다.
1299 * - data-mb-id, data-pick-mb 속성 기반으로 삭제 (서버에서 심어줘야 함)
1300 * - 제거 후 내용이 비면 빈 문자열 반환(append 방지)
1301 */
1302function filterBlockedHtml(html) {
1303	if (!html || typeof html !== 'string') return html;
1304	if (typeof isBlocked !== 'function') return html;
1305
1306	// 빠른 탈출: 차단 목록이 비어있으면 그대로
1307	if (!window.GAMES_BLOCKED_IDS || Object.keys(window.GAMES_BLOCKED_IDS).length === 0) {
1308		return html;
1309	}
1310
1311	try {
1312		var wrap = document.createElement('div');
1313		wrap.innerHTML = html;
1314
1315		var nodes = wrap.querySelectorAll('[data-mb-id],[data-pick-mb]');
1316		for (var i = 0; i < nodes.length; i++) {
1317			var n = nodes[i];
1318			var id = n.getAttribute('data-mb-id') || n.getAttribute('data-pick-mb');
1319			if (id && isBlocked(String(id))) {
1320				var card = n.closest ? n.closest('[data-pick-chat-id], .pick-chat-card') : null;
1321				if (card) {
1322					card.remove();
1323				} else {
1324					n.remove();
1325				}
1326			}
1327		}
1328
1329		// 공백/구분자만 남는 경우 방지 (`,`, `, `)
1330		var cleaned = (wrap.innerHTML || '').replace(/,\s*(?=<\/(li|ul|div|span)>)/gi, '');
1331		cleaned = cleaned.replace(/^\s*,\s*/g, '').replace(/\s*,\s*$/g, '');
1332		cleaned = cleaned.trim();
1333		return cleaned;
1334	} catch (e) {
1335		return html;
1336	}
1337}
1338
1339// 초기 로드
1340setTimeout(function() {
1341	refreshBlockedIds();
1342}, 10);
1343
1344</script>
1344
1345	<span class="" id="top_btn" style="display:none">↓</span>
1346		<div class="w-full h-[calc(100%-34px)]">
1347			<ul class="h-[100%] overflow-y-auto px-1" id="chat_list"></ul>
1348	</div>
1349		<div class="w-full h-[32px] relative border border-[#0c0546] mb-[2px]">
1350				<input type="text" id="input_box" class="input_txt w-[80%]" name="input_box" autocomplete="off" onKeyDown="if(event.keyCode==13){$('#input_button').trigger('click');}" readonly placeholder="로그인시 채팅에 참여하실 수 있습니다.">
1351				<input type="button" id="input_button" class="w-[20%] input_btn right center font-bold pointer radius3 !bg-[#0c0546]" value="보내기" onClick="send_msg($('#input_box').val());" onFocus="$('#input_box').focus()">
1352	</div>
1353	<div class="absolute w-[260px] z-10 left-[6px] top-[6px] hidden bg-white border" id="userInfoBox"></div>
1354</div>
1355<script>
1356function declaration(de_id, de_nick) {
1357	var prev_count = 0;
1358	var next_count = 0;
1359	var prev_class = '';
1360	var next_class = '';
1361	var chat_text = [];
1362	var count_chk = 0;
1363	var tag_text = $("#chat_list li.selectOn").find(".chatText").text();
1364	var tag = "#chat_list li.selectOn";
1365	$(tag).prevAll().each(function (i) {
1366		prev_class = $(this).find(".chatText").length;
1367		if (prev_class > 0) {
1368			chat_text[count_chk] = $(this).find(".chatText").text().replace(" ","");
1369			prev_count++;
1370			count_chk++;
1371		}
1372		if (prev_count == 10) {
1373			return false;
1374		}
1375	});
1376	
1377	chat_text.reverse();
1378	//console.log(tag_text);
1379	chat_text[count_chk] = "<font color=\"red\">" + tag_text + "</font>";
1380	count_chk++;
1381	
1382	$(tag).nextAll().each(function (i) {
1383		next_class = $(this).find(".chatText").length;
1384		if (next_class > 0) {
1385			chat_text[count_chk] = $(this).find(".chatText").text().replace(" ","");
1386			next_count++;
1387			count_chk++;
1388		}
1389		if (next_count == 10) {
1390			return false;
1391		}
1392	});
1393	$("#de_nickname").text(de_nick);
1394	$('#layer_de_move').attr("onClick", "declaration_run('"+de_id+"','"+de_nick+"','"+chat_text+"')");
1395	$("#layer_de_box").show();
1396}
1397
1398function declaration_run(de_id, de_nick, de_chat) {
1399	var de_type = $("#de_select").val();
1400	var de_content = $("#layer_de_text").val();
1401	
1402	var checkboxCheck = $('#block_use').is(':checked');
1403	var block_use = 0;
1404	if (checkboxCheck) {
1405		block_use = 1;
1406	}
1407	
1408	$.ajax({
1409		url : "https://powerballhelper.com/theme/games/ajax/setDeclaration.php",
1410		type : "post",
1411		data : {"de_id" : de_id, "de_nick" : de_nick, "de_type" : de_type, "de_content" : de_content, "de_chat" : de_chat, block_use},
1412		dataType : "json",
1413		success : function(rst) {
1414			//console.log(rst);
1415			$("#layer_de_box").hide();
1416			$("#de_form")[0].reset();
1417			alert(rst.msg);
1418		}
1419	});
1420}
1421
1422
1423
1424function refreshPickListModal() {
1425	if (typeof PickListHTML !== 'function') {
1426		return;
1427	}
1428	var mbId = $("#selectMemberID").val();
1429	if (!mbId) {
1430		return;
1431	}
1432	setTimeout(function() {
1433		PickListHTML(mbId);
1434	}, 200);
1435}
1436/** 픽 카드 HTML이 이스케이프된 경우 복원 */
1437function unescapePickChatHtmlIfNeeded(msg) {
1438	if (!msg || typeof msg !== 'string') return msg;
1439	if (msg.indexOf('pick-chat-card') < 0 && msg.indexOf('data-pick-chat-id') < 0) return msg;
1440	if (msg.indexOf('&lt;') >= 0) {
1441		var _ta = document.createElement('textarea');
1442		_ta.innerHTML = msg;
1443		msg = _ta.value;
1444	}
1445	if (msg.indexOf('<div') < 0 && /\(div\s+class="pick-chat-card/.test(msg)) {
1446		msg = msg.replace(/\((div|span|strong|b|p|svg)(\s)/gi, '<$1$2').replace(/\(\/(div|span|strong|b|p|svg)\)/gi, '</$1>');
1447	}
1448	return msg;
1449}
1450
1451/** 표시 대상 채팅 목록 (#chat_list가 여러 개일 때 게임 채팅 우선) */
1452function getPickChatListEl() {
1453	var $game = $('#chatContainerBox #chat_list');
1454	if ($game.length) return $game;
1455	var $box = $('#chatBoxContainer #chat_list');
1456	if ($box.length) return $box;
1457	var lists = document.querySelectorAll('#chat_list');
1458	if (lists.length) return $(lists[lists.length - 1]);
1459	return $();
1460}
1461
1462function removePickChatCardFromList($list, pid) {
1463	if (!$list || !$list.length || !pid || pid === '0') return;
1464	$list.find('[data-pick-chat-id="' + pid + '"]').each(function() {
1465		var $li = $(this).closest('li');
1466		if ($li.length) $li.remove();
1467		else $(this).remove();
1468	});
1469}
1470
1471function appendPickChatHtmlToListDom($list, html) {
1472	if (!$list || !$list.length || !html) return false;
1473	try {
1474		var li = document.createElement('li');
1475		li.innerHTML = html;
1476		$list[0].appendChild(li);
1477		return true;
1478	} catch (e) {
1479		try {
1480			$list.append('<li>' + html + '</li>');
1481			return true;
1482		} catch (e2) {
1483			return false;
1484		}
1485	}
1486}
1487
1488/** 현재 게임 페이지와 픽 카드 게임이 일치하는지 확인 */
1489window.pickChatMatchesCurrentGame = function(html, gameName, socketGameName) {
1490	if (!html || String(html).indexOf('pick-chat-card') < 0) return true;
1491	gameName = gameName || window.PB_PICK_GAME_NAME || '';
1492	if (!gameName) return false;
1493	if (socketGameName && String(socketGameName) !== String(gameName)) return false;
1494	var m = String(html).match(/data-pick-game\s*=\s*"([^"]+)"/i);
1495	if (m && m[1] && String(m[1]) !== String(gameName)) return false;
1496	return true;
1497};
1498
1499/** 픽 채팅 카드 HTML을 #chat_list에 중복 없이 추가 */
1500window.appendPickChatHtmlToList = function(html, options) {
1501	try {
1502		html = unescapePickChatHtmlIfNeeded(html);
1503		if (!html || String(html).trim() === '') return false;
1504		options = options || {};
1505		if (!pickChatMatchesCurrentGame(html, options.gameName, options.socketGameName)) return false;
1506		var $list = options.$list || getPickChatListEl();
1507		if (!$list || !$list.length) return false;
1508
1509		var pid = options.pickId != null ? String(options.pickId) : '';
1510		if (!pid) {
1511			var mm = String(html).match(/data-pick-chat-id\s*=\s*"(\d+)"/);
1512			if (mm) pid = mm[1];
1513		}
1514
1515		if (pid && pid !== '0' && $list.find('[data-pick-chat-id="' + pid + '"]').length) {
1516			if (!options.force) return false;
1517			removePickChatCardFromList($list, pid);
1518		}
1519
1520		var processedMsg = html;
1521		if (typeof pbInjectClanTag === 'function') {
1522			processedMsg = pbInjectClanTag(processedMsg);
1523		}
1524		if (!options.skipBlockFilter && typeof filterBlockedHtml === 'function') {
1525			processedMsg = filterBlockedHtml(processedMsg);
1526			if (!processedMsg || String(processedMsg).trim() === '') return false;
1527		}
1528
1529		var pm = processedMsg && String(processedMsg).match(/data-pick-chat-id\s*=\s*"(\d+)"/);
1530		if (pm && pm[1] && pm[1] !== '0' && $list.find('[data-pick-chat-id="' + pm[1] + '"]').length) {
1531			if (!options.force) return false;
1532			removePickChatCardFromList($list, pm[1]);
1533		}
1534
1535		if (!appendPickChatHtmlToListDom($list, processedMsg)) return false;
1536
1537		if (typeof loadPowerballClanTags === 'function') loadPowerballClanTags();
1538		if (typeof loadSidePageClanTags === 'function') loadSidePageClanTags();
1539		if (options.scroll !== false) {
1540			var el = $list[0];
1541			if (el) $list.scrollTop(Number(el.scrollHeight) + 9999);
1542		}
1543		return true;
1544	} catch (e) {
1545		return false;
1546	}
1547};
1548
1549/** pick_id 단건 HTML 조회 후 표시 (AJAX html 누락·append 실패 시) */
1550window.fetchAndAppendPickChatCard = function(pickId, gameName, force) {
1551	if (!pickId || !gameName) return;
1552	var themeUrl = "https:\/\/powerballhelper.com\/theme\/games";
1553	if (!themeUrl) return;
1554	$.ajax({
1555		url: themeUrl + "/ajax/getPickChatHistory.php",
1556		type: "post",
1557		data: { name: gameName, pick_id: pickId },
1558		dataType: "json",
1559		success: function(res) {
1560			if (!res || res.code != 200 || !Array.isArray(res.list) || !res.list.length) return;
1561			appendPickChatHtmlToList(res.list[0], { pickId: pickId, force: !!force, skipBlockFilter: true });
1562		}
1563	});
1564};
1565
1566/** setPick AJAX 응답으로 본인 화면에 픽 카드 보강 */
1567window.appendPickChatLiIfNeeded = function(res, gameName) {
1568	if (!res || res.code != 200) return;
1569	gameName = gameName || window.PB_PICK_GAME_NAME || '';
1570	var pickId = res.pick_id != null ? String(res.pick_id) : '';
1571	var opts = { pickId: pickId, force: true, skipBlockFilter: true };
1572
1573	function tryAppend(html) {
1574		if (!html) return false;
1575		return appendPickChatHtmlToList(html, opts);
1576	}
1577
1578	if (res.html) {
1579		if (!tryAppend(res.html)) {
1580			setTimeout(function() { tryAppend(res.html); }, 200);
1581			setTimeout(function() { tryAppend(res.html); }, 700);
1582		}
1583	}
1584
1585	function ensureVisible() {
1586		var $list = getPickChatListEl();
1587		if (!$list.length) return;
1588		if (pickId && $list.find('[data-pick-chat-id="' + pickId + '"]').length) return;
1589		if (res.html) {
1590			tryAppend(res.html);
1591			return;
1592		}
1593		if (pickId && gameName) fetchAndAppendPickChatCard(pickId, gameName, true);
1594	}
1595
1596	setTimeout(ensureVisible, 900);
1597	setTimeout(ensureVisible, 1800);
1598};
1599
1600
1601function showPick(pick_id, mb_id, f) {		Swal.fire(
1602	   '알림',
1603	   "로그인 후 이용가능합니다",
1604	   'warning'
1605	)
1606	}
1607setTimeout(function() {
1608	hideShow();
1609}, 500);
1610
1611function hideShow() {
1612	var hideList = [];
1613	$(".hidePick").each(function() {
1614		hideList.push($(this).attr("data-pickid"));
1615	});
1616	
1617	if (hideList.length > 0) {
1618		$.ajax({
1619			url: "https://powerballhelper.com/theme/games/ajax/getShowPick.php",
1620			type: "post",
1621			data: {"list": hideList},
1622			dataType: "json",
1623			success: function(res) {
1624				//console.log(res);
1625				if (res.code == 200) {
1626					$(".hidePick").each(function() {
1627						var showBox = $(this);
1628						var checkID = $(this).attr("data-pickid");
1629						for (let [key, value] of Object.entries(res.returnList)) {
1630							if (checkID == key) {
1631								showBox.before(value);
1632								showBox.remove();
1633							}
1634						}
1635					});
1636				}
1637			}
1638		});
1639	}
1640}
1641
1642leftRanking();
1643function leftRanking() {
1644	$.ajax({
1645		url: "https://powerballhelper.com/theme/games/ajax/setLeftRanking.php",
1646		type: "post",
1647		dataType: "json",
1648		success: function(res) {
1649			//console.log(res);
1650			$("#chatingRoomList").html("");
1651			$("#chatingRoomList").append(res.html);
1652		}
1653	});
1654}
1655
1656$(document).on("click", "#chatingRoomList .leftRankingUserBox", function() {
1657	var mb_id = $(this).attr("data-mb-id");
1658	if (mb_id && typeof showInfo === "function") {
1659		showInfo(mb_id);
1660	}
1661});
1662
1663var socket = io.connect('https://powerballhelper.com:8443', {rejectUnauthorized: false});
1664var CHAT_USER_HAS_CLAN_API_PB = 'https://powerballhelper.com/theme/games/api/chat_user_has_clan.php';
1665var PB_MY_MB_ID   = 'guest';
1666window.PB_PICK_GAME_NAME = 'dhkspeedkeno';
1667
1668function getClanApiUrlPb() {
1669	var base = (typeof CHAT_USER_HAS_CLAN_API_PB !== 'undefined' && CHAT_USER_HAS_CLAN_API_PB) ? CHAT_USER_HAS_CLAN_API_PB : '';
1670	if (!base) return '';
1671	if (base.indexOf('http://') === 0 || base.indexOf('https://') === 0) return base;
1672	return (window.location.origin || '') + (base.indexOf('/') === 0 ? '' : '/') + base;
1673}
1674
1675/** 픽 카드 HTML에 클랜 태그 placeholder 삽입 (닉네임은 숨기지 않음) */
1676function pbInjectClanTag(html) {
1677	if (!html || typeof html !== 'string') return html;
1678	if (html.indexOf('pick-chat-card') < 0 && html.indexOf('data-pick-mb=') < 0) return html;
1679	try {
1680		var wrap = document.createElement("div");
1681		wrap.innerHTML = html;
1682		var nicks = wrap.querySelectorAll('.pick-chat-nick[data-pick-mb]');
1683		for (var i = 0; i < nicks.length; i++) {
1684			var nick = nicks[i];
1685			var mbId = (nick.getAttribute('data-pick-mb') || '').trim();
1686			if (!mbId) continue;
1687			var card = nick.closest ? nick.closest('.pick-chat-card') : null;
1688			if (!card) continue;
1689			var existing = card.querySelectorAll('.pick-chat-clan-tag[data-mb-id]');
1690			var dup = false;
1691			for (var d = 0; d < existing.length; d++) {
1692				if (existing[d].getAttribute('data-mb-id') === mbId) { dup = true; break; }
1693			}
1694			if (dup) continue;
1695			var span = document.createElement('span');
1696			span.className = 'chat-clan-tag pick-chat-clan-tag';
1697			span.setAttribute('data-mb-id', mbId);
1698			if (nick.nextSibling) {
1699				nick.parentNode.insertBefore(span, nick.nextSibling);
1700			} else {
1701				nick.parentNode.appendChild(span);
1702			}
1703		}
1704		return wrap.innerHTML;
1705	} catch (e) {
1706		return html;
1707	}
1708}
1709
1710function loadPowerballClanTags() {
1711	var list = document.getElementById('chat_list');
1712	var apiUrl = getClanApiUrlPb();
1713	if (!list || !apiUrl) return;
1714	var tags = list.querySelectorAll('.pick-chat-clan-tag[data-mb-id]:not(.loaded), .chat-clan-tag[data-mb-id]:not(.loaded)');
1715	if (!tags.length) return;
1716	if (window.__loadPowerballClanTagsBusy) return;
1717	window.__loadPowerballClanTagsBusy = true;
1718	requestAnimationFrame(function() {
1719		window.__loadPowerballClanTagsBusy = false;
1720	});
1721	function setClanTagEl(t, hasClan, clanTagText) {
1722		t.innerHTML = '';
1723		if (!hasClan) return;
1724		var raw = (clanTagText && String(clanTagText).trim()) ? clanTagText : '클랜';
1725		var tag = raw.replace(/^\[|\]$/g, '');
1726		var span = document.createElement('span');
1727		span.className = 'chat-clan-badge';
1728		span.textContent = tag;
1729		t.appendChild(span);
1730	}
1731	tags.forEach(function(tag) {
1732		var mbId = (tag.getAttribute('data-mb-id') || '').trim();
1733		if (!mbId) { tag.classList.add('loaded'); return; }
1734		var cached = window.chatClanCache && window.chatClanCache[mbId];
1735		if (cached && typeof cached === 'object' && cached.has_clan !== undefined) {
1736			setClanTagEl(tag, cached.has_clan, cached.clan_tag);
1737			tag.classList.add('loaded');
1738			return;
1739		}
1740		if (cached === true) {
1741			setClanTagEl(tag, true, '');
1742			tag.classList.add('loaded');
1743			return;
1744		}
1745		if (cached === false) {
1746			tag.classList.add('loaded');
1747			return;
1748		}
1749		if (cached === 'pending') return;
1750		window.chatClanCache = window.chatClanCache || {};
1751		window.chatClanCache[mbId] = 'pending';
1752		fetch(apiUrl + (apiUrl.indexOf('?') >= 0 ? '&' : '?') + 'mb_id=' + encodeURIComponent(mbId)).then(function(r) { return r.json(); }).then(function(data) {
1753			var hasClan = data.has_clan === true;
1754			window.chatClanCache[mbId] = { has_clan: hasClan, clan_tag: (data.clan_tag && String(data.clan_tag).trim()) ? data.clan_tag : '' };
1755			list.querySelectorAll('.chat-clan-tag[data-mb-id="' + mbId + '"], .pick-chat-clan-tag[data-mb-id="' + mbId + '"]').forEach(function(t) {
1756				setClanTagEl(t, hasClan, data.clan_tag);
1757				t.classList.add('loaded');
1758			});
1759		}).catch(function() {
1760			window.chatClanCache[mbId] = { has_clan: false, clan_tag: '' };
1761			list.querySelectorAll('.chat-clan-tag[data-mb-id="' + mbId + '"], .pick-chat-clan-tag[data-mb-id="' + mbId + '"]').forEach(function(t) {
1762				t.classList.add('loaded');
1763			});
1764		});
1765	});
1766}
1767
1768function pbApplyTierImgInWrap(wrap, mc) {
1769	if (!wrap || mc == null) return;
1770	var imgs = wrap.querySelectorAll('img[src*="/img/tier/"]');
1771	for (var x = 0; x < imgs.length; x++) {
1772		if (imgs[x].getAttribute('data-custom-tier') === '1') continue;
1773		var src = imgs[x].getAttribute('src') || '';
1774		imgs[x].setAttribute('src', src.indexOf('.gif') >= 0 ? '/img/tier/' + mc + '.gif' : '/img/tier/' + mc + '.png');
1775	}
1776}
1777
1778function pbApplyMemberClassSync(payload) {
1779	try {
1780		var list = (payload && payload.updates) ? payload.updates : [];
1781		if (!list.length) return;
1782		var byId = {};
1783		for (var i = 0; i < list.length; i++) {
1784			var u = list[i];
1785			if (u && u.mb_id != null && u.mb_class != null) {
1786				byId[String(u.mb_id)] = Number(u.mb_class);
1787			}
1788		}
1789		var pickNodes = document.querySelectorAll('[data-pick-mb]');
1790		for (var k = 0; k < pickNodes.length; k++) {
1791			var el = pickNodes[k];
1792			var mid = el.getAttribute('data-pick-mb');
1793			if (!mid || byId[mid] === undefined) continue;
1794			var wrap = el.closest ? el.closest('.pick-chat-card') : null;
1795			if (!wrap) wrap = el.parentElement;
1796			pbApplyTierImgInWrap(wrap, byId[mid]);
1797		}
1798		var chatRows = document.querySelectorAll('#chat_list [data-chat-mb-id]');
1799		for (var c = 0; c < chatRows.length; c++) {
1800			var row = chatRows[c];
1801			var cid = row.getAttribute('data-chat-mb-id');
1802			if (!cid || byId[cid] === undefined) continue;
1803			pbApplyTierImgInWrap(row, byId[cid]);
1804		}
1805		var clanTags = document.querySelectorAll('#chat_list .chat-clan-tag[data-mb-id]');
1806		for (var j = 0; j < clanTags.length; j++) {
1807			var tag = clanTags[j];
1808			var tid = tag.getAttribute('data-mb-id');
1809			if (!tid || byId[tid] === undefined) continue;
1810			var row2 = tag.closest ? tag.closest('[data-chat-mb-id]') : null;
1811			if (!row2) row2 = tag.closest ? tag.closest('.chat-user-msg') : null;
1812			if (!row2) row2 = tag.closest ? tag.closest('.flex.mb-1') : null;
1813			pbApplyTierImgInWrap(row2, byId[tid]);
1814		}
1815		if (typeof PB_MY_MB_ID !== 'undefined' && PB_MY_MB_ID && byId[PB_MY_MB_ID] !== undefined) {
1816			window.__pbMyMbClass = byId[PB_MY_MB_ID];
1817		}
1818	} catch (e) {}
1819}
1820
1821var myRoomCheck = false;
1822var DOBAE = false;
1823var MSGTERMS = new Array();
1824var MSGUID = 0;
1825var LASTMSGTIME = new Date().getTime();
1826var MSGFILTERING = "18아,18놈,18새끼,18뇬,18노,18것,18넘,개년,개놈,개뇬,개새,개색끼,개세끼,개세이,개쉐이,개쉑,개쉽,개시키,개자식,개좆,게색기,게색끼,광뇬,뇬,눈깔,뉘미럴,니귀미,니기미,니미,도촬,되질래,뒈져라,뒈진다,디져라,디진다,디질래,병쉰,병신,뻐큐,뻑큐,뽁큐,삐리넷,새꺄,쉬발,쉬밸,쉬팔,쉽알,스패킹,스팽,시벌,시부랄,시부럴,시부리,시불,시브랄,시팍,시팔,시펄,실밸,십8,십쌔,십창,싶알,쌉년,썅놈,쌔끼,쌩쑈,썅,써벌,썩을년,쎄꺄,쎄엑,쓰바,쓰발,쓰벌,쓰팔,씨8,씨댕,씨바,씨발,씨뱅,씨봉알,씨부랄,씨부럴,씨부렁,씨부리,씨불,씨브랄,씨빠,씨빨,씨뽀랄,씨팍,씨팔,씨펄,씹,아가리,아갈이,엄창,접년,잡놈,재랄,저주글,조까,조빠,조쟁이,조지냐,조진다,조질래,존나,존니,좀물,좁년,좃,좆,좇,쥐랄,쥐롤,쥬디,지랄,지럴,지롤,지미랄,쫍빱,凸,퍽큐,뻑큐,빠큐,ㅅㅂㄹㅁ".split(",");
1827var MSGSTOPTIME = 10;
1828var roomMember = [];
1829var roomMemberData = {};
1830var roomMemberDataWinList = [];
1831var roomMemberDataWinListEncode = {};
1832
1833function pbJoinRoomPayloadPow() {
1834	return {'master': '@dhkspeedkeno', 'mb_id': 'guest', 'mb_nick': '손님', 'icon1': '1', 'icon2': '2', 'mb_lv': '1', 'premium': false};
1835}
1836function pbEmitJoinGameRoomPow() {
1837	socket.emit('join_room', pbJoinRoomPayloadPow());
1838}
1839function pbAfterPickChatJoin() {
1840	if (typeof restorePickChatHistoryFromDb === 'function') {
1841		restorePickChatHistoryFromDb('dhkspeedkeno');
1842	}
1843	if (typeof startPickChatLiveSync === 'function') {
1844		startPickChatLiveSync('dhkspeedkeno', 12000);
1845	}
1846}
1847
1848var chat_list_position = 0;
1849var chat_list_innerHeight = 0;
1850var chat_list_scrollHeight = 0;
1851socket.on('send_msg', function(data){
1852	data = data || {};
1853	var msg = data.html;
1854	if (msg === undefined || msg === null || msg === '') {
1855		msg = data.msg;
1856	}
1857	if (msg !== undefined && msg !== null && typeof msg !== 'string') {
1858		msg = String(msg);
1859	}
1860	msg = (typeof unescapePickChatHtmlIfNeeded === 'function') ? unescapePickChatHtmlIfNeeded(msg) : msg;
1861	// 차단된 유저의 채팅/픽 메시지는 표시하지 않음 (본인 픽 카드는 항상 표시)
1862	var isOwnPickMsg = data.mb_id && PB_MY_MB_ID && String(data.mb_id) === String(PB_MY_MB_ID);
1863	if (!isOwnPickMsg && typeof isBlocked === 'function' && data.mb_id && isBlocked(data.mb_id)) {
1864		return;
1865	}
1866	if (msg && typeof msg === 'string' && msg.indexOf('minions-ladder') >= 0) {
1867		if (msg.indexOf('&lt;') >= 0) {
1868			var _ta = document.createElement('textarea');
1869			_ta.innerHTML = msg;
1870			msg = _ta.value;
1871		}
1872		if (msg.indexOf('<div') < 0 && /\(div\s+class="minions-ladder/.test(msg)) {
1873			msg = msg.replace(/\((div|span|strong)(\s)/gi, '<$1$2').replace(/\(\/(div|span|strong)\)/gi, '</$1>');
1874		}
1875	}
1876	
1877	if (data.roundReset) {
1878		dataViewHtml(checkType, gameType);
1879		leftRanking();
1880		$(".pickPendingBox").hide();
1881		$(".pickContainerBox").show();
1882		pickSetUse = true;
1883	}
1884	
1885	if (data.toast) {
1886		Swal.fire({
1887			icon: 'info',
1888			title: msg,
1889			toast: true,
1890			position: 'bottom-end',
1891			showConfirmButton: false,
1892			timer: 5000,
1893			timerProgressBar: true,
1894			didOpen: (toast) => {
1895				toast.addEventListener('mouseenter', Swal.stopTimer);
1896				toast.addEventListener('mouseleave', Swal.resumeTimer);
1897			}
1898		});
1899	} else if (data.onechat) {
1900		Swal.fire({
1901			html: msg,
1902			showCancelButton: true,
1903			reverseButtons: true,
1904			confirmButtonColor: '#0c0546',
1905			confirmButtonText: '1:1채팅 이동',
1906			cancelButtonText: '거절',
1907			timer: 20000,
1908			timerProgressBar: true,
1909		}).then((result) => {
1910			if (result.isConfirmed) {
1911				location.href="https://powerballhelper.com/chatting?room="+data.roomID;
1912			} else {
1913				$.ajax({
1914					url: "https://powerballhelper.com/theme/games/ajax/setOneRefusal.php",
1915					type: "post",
1916					data: {"roomID" : data.roomID},
1917					dataType: "json",
1918					success: function(res) {}
1919				});
1920			}
1921		});
1922	} else if (msg != null && msg !== undefined && String(msg).trim() !== '' && String(msg) !== 'undefined') {
1923		if(msg == '<clear>'){
1924			$('#chat_list').html('');
1925		}else if (String(msg).indexOf('usdt-gift-msg') >= 0) {
1926			// USDT 선물 메시지는 트레이딩헬퍼(futures) 페이지에서만 표시
1927			return;
1928		}else{
1929			// clan-tag placeholder 주입 후 append
1930			var processedMsg = (typeof pbInjectClanTag === 'function') ? pbInjectClanTag(msg) : msg;
1931			// 결과/적중자 목록 등 한 메시지에 여러 유저가 섞인 경우: 차단된 mb_id 요소만 제거
1932			if (typeof filterBlockedHtml === 'function') {
1933				processedMsg = filterBlockedHtml(processedMsg);
1934				if (!processedMsg || String(processedMsg).trim() === '') return;
1935			}
1936			var pickIdDup = processedMsg && String(processedMsg).match(/data-pick-chat-id\s*=\s*"(\d+)"/);
1937			var pickDupId = pickIdDup && pickIdDup[1] ? pickIdDup[1] : '';
1938			var isPickCard = processedMsg && (processedMsg.indexOf('pick-chat-card') >= 0 || processedMsg.indexOf('data-pick-chat-id') >= 0);
1939			if (isPickCard && typeof pickChatMatchesCurrentGame === 'function' && !pickChatMatchesCurrentGame(processedMsg, window.PB_PICK_GAME_NAME, data.gameName)) {
1940				return;
1941			}
1942			var isOwnPickMsg = isPickCard && data.mb_id && PB_MY_MB_ID && String(data.mb_id) === String(PB_MY_MB_ID);
1943			var $chatList = (typeof getPickChatListEl === 'function') ? getPickChatListEl() : $('#chat_list');
1944			var appended = false;
1945			if (isPickCard && typeof appendPickChatHtmlToList === 'function') {
1946				appended = appendPickChatHtmlToList(processedMsg, {
1947					pickId: pickDupId,
1948					force: !!isOwnPickMsg,
1949					skipBlockFilter: !!isOwnPickMsg,
1950					socketGameName: data.gameName
1951				});
1952			}
1953			if (!appended) {
1954				if (isPickCard) return;
1955				if (pickDupId && pickDupId !== '0' && $chatList.find('[data-pick-chat-id="' + pickDupId + '"]').length) return;
1956				if (typeof appendPickChatHtmlToListDom === 'function') {
1957					appendPickChatHtmlToListDom($chatList, processedMsg);
1958				} else {
1959					$chatList.append('<li>' + processedMsg + '</li>');
1960				}
1961				if (typeof loadPowerballClanTags === 'function') loadPowerballClanTags();
1962			}
1963
1964			//스크롤 한칸 내리기
1965			if (chat_list_position == 0) {
1966				chatScrollDown();
1967			} if (chat_list_position + chat_list_innerHeight >= chat_list_scrollHeight) {
1968				chatScrollDown();
1969			}
1970		}
1971	}
1972});
1973
1974// 중요: join_room은 send_msg 핸들러 등록 이후에 호출해야
1975// 서버가 join 시점에 내려주는 히스토리(send_msg)를 누락하지 않는다.
1976socket.on('connect', function() {
1977	pbEmitJoinGameRoomPow();
1978	setTimeout(pbAfterPickChatJoin, 600);
1979});
1980socket.on('reconnect', function() {
1981	pbEmitJoinGameRoomPow();
1982	setTimeout(pbAfterPickChatJoin, 600);
1983});
1984socket.on('no_room', function() {
1985	setTimeout(pbEmitJoinGameRoomPow, 450);
1986	setTimeout(pbEmitJoinGameRoomPow, 2000);
1987});
1988socket.on('member_class_sync', pbApplyMemberClassSync);
1989if (socket.connected) {
1990	pbEmitJoinGameRoomPow();
1991	setTimeout(pbAfterPickChatJoin, 600);
1992}
1993
1994var totalPeople = 0;
1995socket.emit('show_room_list');
1996socket.on('show_room_list', function(data){
1997	//console.log(data);
1998	totalPeople = 0;
1999	roomMember = [];
2000	roomMemberData = {};
2001	roomMemberDataWinList = [];
2002	roomMemberDataWinListEncode = {};
2003	//$("#chatingRoomList").html("");
2004	for (let [key, value] of Object.entries(data)) {
2005		//var checkArrays = key.split("_");
2006		totalPeople += value.count_people;
2007		//console.log(checkArrays[0].slice(0,1));
2008		//console.log(key);
2009		if (key.slice(0,1) != '@') {
2010			if (key == "") {
2011				myRoomCheck = true;
2012			}
2013			
2014			roomMember.push(key);
2015			roomMemberData[key] = value;
2016			roomMemberDataWinList.push(value);
2017		}
2018		
2019			}
2020	
2021	/*roomMemberDataWinListEncode = JSON.parse(JSON.stringify(roomMemberDataWinList))
2022	roomMemberDataWinListEncode = sortJSON(roomMemberDataWinListEncode, "game_win", "desc");
2023	
2024	for (let [key, value] of Object.entries(roomMemberDataWinListEncode)) {
2025		//console.log(value);
2026		var roomHTML = '<li class="pb-1 cursor-pointer" onclick="showRoomInfo(\''+value.master+'\')">';
2027		roomHTML += value.icon2;
2028		roomHTML += '</li>';
2029		
2030		$("#chatingRoomList").append(roomHTML);
2031	}*/
2032	$("#gamePeople").text(totalPeople);
2033	
2034});
2035
2036
2037var sortJSON = function(data, key, type) {
2038	if (type == undefined) {
2039		type = "asc";
2040	}
2041	return data.sort(function(a, b) {
2042		var x = a[key];
2043		var y = b[key];
2044		if (type == "desc") {
2045			return x > y ? -1 : x < y ? 1 : 0;
2046		} else if (type == "asc") {
2047			return x < y ? -1 : x > y ? 1 : 0;
2048		}
2049	});
2050};
2051
2052function showRoomInfo(mb_id) {
2053	//var roomData = ;
2054	$.ajax({
2055		url: "https://powerballhelper.com/theme/games/ajax/setRoomInfo.php",
2056		type: "post",
2057		data: roomMemberData[mb_id],
2058		dataType: "json",
2059		success: function(res) {
2060			//console.log(res);
2061			
2062			if (res.code == 200) {
2063				Swal.fire({
2064					html: res.html,
2065					showCancelButton: true,
2066					reverseButtons: true,
2067					confirmButtonColor: '#FD6F22',
2068					confirmButtonText: '참여',
2069					cancelButtonText: '취소',
2070					customClass: {
2071						container: 'layoutPickBox'
2072					}
2073				}).then((result) => {
2074					if (result.isConfirmed) {
2075						location.href="https://powerballhelper.com/room?master="+mb_id;
2076					}
2077				});
2078			} else {
2079				Swal.fire(
2080				   '알림',
2081				   res.message,
2082				   'warning'
2083				)
2084			}
2085		}
2086	});
2087	
2088	//var roomInfoHTML = '';
2089	
2090	
2091	
2092	
2093	/*$.ajax({
2094		
2095	});*/
2096}
2097
2098
2099function chatScrollDown() {
2100	$('#chat_list').scrollTop(Number($('#chat_list')[0].scrollHeight) + 9999);
2101}
2102
2103setTimeout(function() {
2104	chatScrollDown();
2105},100);
2106
2107setTimeout(function() {
2108	chatScrollDown();
2109},1000);
2110
2111function send_msg(msg){
2112	}
2113var selectUserId = "";
2114var presentUse = 0;
2115function showInfo(mb_id) {
2116	$.ajax({
2117		url: "https://powerballhelper.com/theme/games/ajax/setUserInfo.php",
2118		type: "post",
2119		data: {"name": "dhkspeedkeno", mb_id, roomMember},
2120		dataType: "json",
2121		success: function(res) {
2122			//console.log(res);
2123			if (res.html) {
2124				selectUserId = mb_id;
2125				if (mb_id != "") {
2126					presentUse = 1;
2127				}
2128				
2129				$("#userInfoBox").html(res.html);
2130				if ($("#userInfoBox").css("display") == "none") {
2131					$("#userInfoBox").slideDown();
2132				}
2133			}
2134		}
2135	});
2136}
2137
2138function showInfo2(mb_id, f) {
2139	$("#chat_list").find("li").removeClass("selectOn");
2140	$.ajax({
2141		url: "https://powerballhelper.com/theme/games/ajax/setUserInfo.php",
2142		type: "post",
2143		data: {"name": "dhkspeedkeno", mb_id, roomMember},
2144		dataType: "json",
2145		success: function(res) {
2146			//console.log(res);
2147			if (res.html) {
2148				selectUserId = mb_id;
2149				if (mb_id != "") {
2150					presentUse = 1;
2151				}
2152				
2153				$(f).closest("li").addClass("selectOn");
2154				$("#userInfoBox").html(res.html);
2155				if ($("#userInfoBox").css("display") == "none") {
2156					$("#userInfoBox").slideDown();
2157				}
2158			}
2159		}
2160	});
2161}
2162
2163function hideInfo() {
2164	$("#userInfoBox").slideUp();
2165	$("#chat_list").find("li").removeClass("selectOn");
2166}
2167
2168function checkWord(msg){
2169	
2170		//영문금지
2171	if(msg.substring(0,1) != '"') {
2172		var regType = /[A-Za-z]/;
2173		if (regType.test(msg)) {
2174			SYSTEMMESSAGE('<span class="chatbox_ok block text-center p-2 rounded-[6px] border border-gray-400 border-dashed my-1 text-[14px] font-bold">[안내] <strong>영문</strong> 사용이 금지되어 있습니다.</span>',"info");
2175			$("#input_box").val('');
2176			return false;
2177		}
2178	}
2179	//특수문자금지
2180	/*if(msg.substring(0,1) != '"') {
2181		var RegExp = /[\{\}\[\]\/?.,;:|\)*~`!^\-_+┼<>@\#$%&\'\"\\\(\=]/gi;
2182		if (RegExp.test(msg)) {
2183			SYSTEMMESSAGE('<span class="chatbox_ok block text-center p-2 rounded-[6px] border border-gray-400 border-dashed my-1 text-[14px] font-bold">[안내] <strong>특수문자</strong> 사용이 금지되어 있습니다.</span>',"info");
2184			$("#input_box").val('');
2185			return false;
2186		}
2187		
2188	}*/
2189	
2190	
2191	var msg = strip_tags(msg);
2192	if (msg == '' || msg == null) {
2193		
2194	} else {
2195		var msgCheck = msg.replace(" ", "");
2196		var msgNum = msg.length;
2197	}
2198	for(i=0;i<MSGFILTERING.length;i++){
2199		if (msg == '' || msg == null) {
2200		
2201		} else {
2202			if(msg.indexOf(MSGFILTERING[i]) >= 0) {
2203				SYSTEMMESSAGE('<span class="chatbox_ok block text-center p-2 rounded-[6px] border border-gray-400 border-dashed my-1 text-[14px] font-bold">[안내] <strong>\"' +MSGFILTERING[i] + '\"</strong> 단어는 금지어입니다.</span>',"info");
2204				$("#input_box").val('');
2205				return false;
2206			}
2207		}
2208	}
2209	
2210	return true;
2211}
2212
2213//도배체크
2214// @@ selfnick @@ 도배체크
2215function checkDOBAE() {
2216
2217	//return true; //도베금지 일단 기능정지
2218		var result = 0;
2219	var tdate = new Date();
2220	MSGTERMS[MSGUID % 5] = tdate.getTime() - LASTMSGTIME;
2221		LASTMSGTIME = tdate.getTime();
2222	MSGUID++;
2223	for (var i = 0; i < MSGTERMS.length; i++) {
2224		result += MSGTERMS[i];
2225	}
2226	
2227	if(MSGTERMS.length == 5 && result < 5 * 1000) { //
2228		DOBAE = true;
2229		SYSTEMMESSAGE('<span class="chatbox_ok block text-center p-2 rounded-[6px] border border-gray-400 border-dashed my-1 text-[14px] font-bold">[도배금지] ' + MSGSTOPTIME + '초 후 채팅이 가능합니다.</span>',"chatbox_info");
2230		//console.log("도배금지" + MSGSTOPTIME + "초 후 채팅이 가능합니다." );
2231		setTimeout(clearDOBAE, MSGSTOPTIME * 1000);
2232		return true;
2233	} else {
2234		return false;
2235	}
2236}
2237
2238// @@ selfnick @@ 도배초기화
2239function clearDOBAE(){
2240	MSGUID = 0;
2241	MSGTERMS = new Array();
2242	DOBAE = false;
2243}
2244
2245//채팅을 돌릴때 이방을 써서 필터링을 하자
2246function SYSTEMMESSAGE(msg,type,input,total,clear,to)
2247{
2248	var html = '<li class="'+type+'" rel="'+to+'">'+msg+'</li>';
2249	if(clear == true) $('#chat').empty();
2250	$('#chat_list').append(html);
2251	$('#chat_list').scrollTop($('#chat_list')[0].scrollHeight);
2252	if(total == true){
2253		$('#total').text(0);
2254		$('#total-room').text(0);
2255	}
2256}
2257
2258// @@ selfnick @@ 태그제거
2259function strip_tags(input, allowed) {
2260    allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('');
2261    var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi;
2262	var	commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
2263    if (input == '' || input == null || input == "undefined") {
2264
2265	} else {
2266		return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
2267			return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
2268		});
2269	}
2270}
2271
2272var input_box_temp="";
2273$("#input_box").keydown(function(evt){
2274		
2275	if($('#input_box').val()!='') input_box_temp=$('#input_box').val();
2276	
2277	if((evt.keyCode || evt.which) == 13){
2278		var msg = strip_tags(input_box_temp);
2279		var msgCheck = msg.replace(" ", "");
2280		var msgNum = msg.length;
2281		
2282		if(DOBAE == true) {
2283			STOPTIME = 10 - ((new Date()).getTime() - LASTMSGTIME) /1000;
2284			SYSTEMMESSAGE('<span class="chatbox_ok block text-center p-2 rounded-[6px] border border-gray-400 border-dashed my-1 text-[14px] font-bold">[도배금지] ' + parseInt(STOPTIME) + '초 후 채팅이 가능합니다.</span>',"chatbox_info");
2285			return false;
2286		} else {
2287			if(checkDOBAE()) {
2288				return false;
2289			}
2290		}
2291		if(msgNum > 60){
2292			SYSTEMMESSAGE('<span class="chatbox_ok block text-center p-2 rounded-[6px] border border-gray-400 border-dashed my-1 text-[14px] font-bold">[안내] 60글자 이상 사용 불가능 합니다.</span>',"info");
2293			$("#input_box").val("");
2294			$('#input_box').focus();
2295			return false;
2296		}
2297		if(msgCheck.length < 1) {
2298			$('#input_box').focus();
2299			$('#input_box').val('');
2300			return false;
2301		}
2302		if(msg.substring(0,1) == '/') {
2303			SENDSYSTEM(msg);
2304			$('#input_box').val('');
2305			ChatHISTORY = 0;
2306		}else if(msg.substring(0,1) == '"') {
2307			SENDWHISPER(msg);
2308			var data = msg.split(" ");
2309			var value = data[0]+" ";
2310			$('#input_box').val(value);
2311			ChatHISTORY = 0;
2312		}else {
2313			$('#input_box').val('');
2314			ChatHISTORY = 0;
2315		}
2316	}
2317});
2318
2319$(document).ready(function() {
2320	
2321	$('#chat_list').scroll(function() {  
2322		chat_list_position = $('#chat_list').scrollTop() + 300;
2323		chat_list_innerHeight = $(this).innerHeight();
2324		chat_list_scrollHeight = $(this).prop('scrollHeight');
2325		
2326		if (chat_list_position + chat_list_innerHeight >= chat_list_scrollHeight) {
2327			$("#top_btn").fadeOut();
2328		} else {
2329			$("#top_btn").fadeIn();
2330		}
2331	});
2332	
2333	$("#top_btn").on("click", function() {
2334		$('#chat_list').scrollTop($('#chat_list').scrollTop()+parseInt($("li:last-child", "#chat_list").css('height').replace(/[^-\d\.]/g, '')+9999));
2335	});
2336	
2337	$("#chatingRoomAdd").click(function() {
2338				Swal.fire(
2339		   '알림',
2340		   '로그인 후 이용해주세요',
2341		   'warning'
2342		)
2343			});
2344});
2345</script>
2345	</div>
2346	
2347	<div class="closeContainer w-full h-full hidden absolute top-0 left-0 overflow-auto bg-white" id="chartContainerBox">
2348		<p class="p-4 text-center text-gray-500 text-[12px]">차트를 불러오는 중입니다.</p>
2349	</div>
2350	
2351	<div class="closeContainer w-full h-full hidden absolute top-0 left-0 overflow-auto bg-white" id="ticketContainerBox">
2352		<ul class="grid grid-cols-8 text-center">
2353			<li class="changeTicketBtn py-3 font-bold cursor-pointer on" data-ticket="8" onclick="changeTicket(this)">8매</li>
2354			<li class="changeTicketBtn py-3 font-bold cursor-pointer border-l" data-ticket="7" onclick="changeTicket(this)">7매</li>
2355			<li class="changeTicketBtn py-3 font-bold cursor-pointer border-l" data-ticket="6" onclick="changeTicket(this)">6매</li>
2356			<li class="changeTicketBtn py-3 font-bold cursor-pointer border-l" data-ticket="5" onclick="changeTicket(this)">5매</li>
2357			<li class="changeTicketBtn py-3 font-bold cursor-pointer border-l" data-ticket="4" onclick="changeTicket(this)">4매</li>
2358			<li class="changeTicketBtn py-3 font-bold cursor-pointer border-l" data-ticket="3" onclick="changeTicket(this)">3매</li>
2359			<li class="changeTicketBtn py-3 font-bold cursor-pointer border-l" data-ticket="2" onclick="changeTicket(this)">2매</li>
2360			<li class="changeTicketBtn py-3 font-bold cursor-pointer border-l" data-ticket="1" onclick="changeTicket(this)">1매</li>
2361		</ul>
2362		<div class="h-[calc(100%-44px)]" id="ticketHTMLBox"></div>
2363	</div>
2364	
2365	<div class="closeContainer w-full h-full hidden absolute top-0 left-0 overflow-auto bg-white" id="analyzerContainerBox">
2366		
2367<div class="w-full h-full">
2368	<div class="w-full h-[40px] leading-[40px]">
2369		<h2 class="text-center font-bold text-[16px]">게임 픽 분석기</h2>
2370	</div>
2371	<div class="w-full h-[calc(100%-40px)] bg-gray-200 px-2 pb-2 overflow-auto">
2372		<ul class="w-full">
2373					</ul>
2374	</div>
2375</div>	</div>
2376</div>
2377
2378
2379<div class="rank_box" style="display:none; -webkit-tap-highlight-color : transparent;">
2380	<div class="rank_content_box p-2">
2381		<div class="text-center font-bold text-[16px] pt-1 pb-2">랭킹 순위</div>
2382		<div class="border-t border-b border-l overflow-x-auto">
2383			<ul class="grid grid-cols-4 text-center">
2384				<li class="selectedView2 border-r p-2 cursor-pointer rankBtn on" id="rankBtn1" onclick="rankHTML(1)">오늘의 연승자</li>
2385				<li class="selectedView2 border-r p-2 cursor-pointer rankBtn" id="rankBtn2" onclick="rankHTML(2)">오늘의 다승자</li>
2386				<li class="selectedView2 border-r p-2 cursor-pointer rankBtn" id="rankBtn3" onclick="rankHTML(3)">오늘의 경험치 획득</li>
2387				<li class="selectedView2 border-r p-2 cursor-pointer rankBtn" id="rankBtn4" onclick="rankHTML(4)">레벨 순위</li>
2388			</ul>
2389		</div>
2390		<div class="rankListBox text-center h-[calc(100%-120px)] overflow-auto"></div>
2391		<div class="w-full h-[50px] text-center py-[6px] grid grid-cols-1">
2392			<button onclick='$(".rank_box").hide();' type="button" class="w-full py-2 px-4 border border-[#0c0546] rounded-[6px] text-[14px] text-[#0c0546] bg-white">닫기</button>
2393		</div>
2394	</div>
2395</div>
2396
2397<div class="rolling_box" style="display:none; -webkit-tap-highlight-color : transparent;">
2398	<div class="rolling_content_box p-2">
2399		<div class="text-center font-bold text-[16px] pt-1 pb-2">롤링 지급 내역</div>
2400		<div class="rollingListBox text-center h-[calc(100%-80px)] overflow-auto"></div>
2401		<div class="w-full h-[50px] text-center py-[6px] grid grid-cols-2 gap-2">
2402			<button onclick='rollingChange()' type="button" class="w-full py-2 px-4 border border-[#0c0546] rounded-[6px] text-[14px] text-white bg-[#0c0546]">전환</button>
2403			<button onclick='$(".rolling_box").hide();' type="button" class="w-full py-2 px-4 border border-[#0c0546] rounded-[6px] text-[14px] text-[#0c0546] bg-white">닫기</button>
2404		</div>
2405	</div>
2406</div>
2407
2408<div class="send_box" style="display:none; -webkit-tap-highlight-color : transparent;">
2409	<div class="send_content_box p-2">
2410		<div class="text-center font-bold text-[16px] pt-1 pb-2">송금</div>
2411		<div class="sendListBox text-center h-[calc(100%-80px)] overflow-auto">
2412			<div class="flex justify-center items-center text-[14px] border rounded-[6px] py-1 font-bold">
2413				<p>잔액 : </p>
2414				<span id="sendPointValue">0</span>
2415			</div>
2416			<div class="text-left text-[14px] py-4">
2417				<label for="sendAddress" class="block font-bold">송금 주소</label>
2418				<input type="text" id="sendAddress" class="block p-1 border rounded-[6px] border-[#0c0546] w-full">
2419			</div>
2420			<div class="text-left text-[14px]">
2421				<label for="sendAmount" class="block font-bold">금액</label>
2422				<input type="number" id="sendAmount" class="block p-1 border rounded-[6px] border-[#0c0546] w-full">
2423			</div>
2424		</div>
2425		<div class="grid grid-cols-2 gap-[10px] w-full h-[50px] text-center py-[6px]">
2426			<button onclick="sendAction()" type="button" class="w-full py-2 px-4 border border-[#0c0546] rounded-[6px] text-[14px] text-white bg-[#0c0546] bg-white">전송</button>
2427			<button onclick='$(".send_box").hide();' type="button" class="w-full py-2 px-4 border border-[#0c0546] rounded-[6px] text-[14px] text-[#0c0546] bg-white">닫기</button>
2428		</div>
2429	</div>
2430</div>
2431
2432<script>
2433(function () {
2434	var expSendUrl = "https:\/\/powerballhelper.com\/theme\/games\/ajax\/setEXPSend.php";
2435	var expFetchUrl = "https:\/\/powerballhelper.com\/theme\/games\/ajax\/getMemberExp.php";
2436	/** 관리자 설정 최대 픽 경험치 (cf_exp_max). 0 이하면 상한 없음 */
2437	window.gamesPickExpMaxConfig = 20000000;
2438
2439	window.gamesFormatExpNum = function (n) {
2440		n = parseInt(n, 10) || 0;
2441		return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
2442	};
2443
2444	/** 보유분과 cf_exp_max 중 더 작은 값 — MAX 버튼용 */
2445	window.gamesPickMaxAllowed = function (held) {
2446		held = parseInt(String(held == null ? 0 : held).replace(/[^0-9]/g, ''), 10) || 0;
2447		var cfgMax = parseInt(window.gamesPickExpMaxConfig, 10) || 0;
2448		var el = document.getElementById('cf_exp_max');
2449		if (el) {
2450			var v = parseInt(String(el.value || '').replace(/[^0-9]/g, ''), 10);
2451			if (!isNaN(v) && v > 0) {
2452				cfgMax = v;
2453			}
2454		}
2455		if (cfgMax > 0 && held > cfgMax) {
2456			return cfgMax;
2457		}
2458		return Math.max(0, held);
2459	};
2460
2461	window.gamesHeldExpFromUi = function () {
2462		var raw = $('#my_value').val();
2463		if (raw !== undefined && raw !== null && raw !== '') {
2464			return parseInt(String(raw).replace(/[^0-9]/g, ''), 10) || 0;
2465		}
2466		var txt = ($('#pointValueBox').text() || $('#myValueEXP').text() || '');
2467		return parseInt(String(txt).replace(/[^0-9]/g, ''), 10) || 0;
2468	};
2469
2470	window.gamesSyncExpUi = function (exp) {
2471		exp = parseInt(exp, 10) || 0;
2472		if ($('#my_value').length) {
2473			$('#my_value').val(exp);
2474		}
2475		if ($('#maxEXP').length) {
2476			$('#maxEXP').val(exp);
2477		}
2478		var fmt = gamesFormatExpNum(exp);
2479		if ($('#pointValueBox').length) {
2480			$('#pointValueBox').text(fmt);
2481		}
2482		if ($('#myValueEXP').length) {
2483			$('#myValueEXP').text(fmt);
2484		}
2485	};
2486
2487	/** 픽 컨테이너에 올려둔 칩(아직 서버 미전송) 합계 */
2488	window.gamesPendingPickExpTotal = function () {
2489		var total = 0;
2490		$('.pickContainerBox .valueCheck').each(function () {
2491			total += parseInt($(this).val(), 10) || 0;
2492		});
2493		return total;
2494	};
2495
2496	/**
2497	 * 서버 보유 EXP 반영 — pending 칩 금액을 빼서 픽 컨테이너 표시값(배팅 가능 EXP)과 맞춤.
2498	 * maxEXP·pointValueBox 는 서버 총액, my_value·myValueEXP 는 배팅 가능 잔액.
2499	 */
2500	window.gamesSyncExpUiFromServer = function (serverExp) {
2501		serverExp = parseInt(serverExp, 10) || 0;
2502		var pending = gamesPendingPickExpTotal();
2503		var available = Math.max(0, serverExp - pending);
2504		var availFmt = gamesFormatExpNum(available);
2505		var totalFmt = gamesFormatExpNum(serverExp);
2506		if ($('#my_value').length) {
2507			$('#my_value').val(available);
2508		}
2509		if ($('#myValueEXP').length) {
2510			$('#myValueEXP').text(availFmt);
2511		}
2512		if ($('#maxEXP').length) {
2513			$('#maxEXP').val(serverExp);
2514		}
2515		if ($('#pointValueBox').length) {
2516			$('#pointValueBox').text(totalFmt);
2517		}
2518	};
2519
2520	window.gamesSendExpGift = function (targetMbId) {
2521		var fallback = gamesHeldExpFromUi();
2522		var openDialog = function (heldExp) {
2523			gamesSyncExpUi(heldExp);
2524			Swal.fire({
2525				title: "<span class='text-[18px]'>선물하실 EXP를 입력해주세요</span><p class='text-[14px]'>보유 EXP : " + gamesFormatExpNum(heldExp) + " EXP</p><p class='text-[14px]'>최소 선물 EXP : 5,000 EXP</p>",
2526				input: 'number',
2527				inputAttributes: { autocapitalize: 'off' },
2528				showCancelButton: true,
2529				confirmButtonText: '선물하기',
2530				cancelButtonText: '취소',
2531				showLoaderOnConfirm: true,
2532				allowOutsideClick: function () { return !Swal.isLoading(); }
2533			}).then(function (result) {
2534				if (!result.isConfirmed) {
2535					return;
2536				}
2537				var exp = Number(result.value);
2538				if (exp <= 0) {
2539					Swal.fire('알림', 'EXP 입력이 잘못되었습니다.', 'warning');
2540					return;
2541				}
2542				$.ajax({
2543					url: expSendUrl,
2544					type: 'post',
2545					data: { mb_id: targetMbId, exp: exp },
2546					dataType: 'json',
2547					success: function (res) {
2548						if (res.code == 200) {
2549							if (res.exp != null) {
2550								gamesSyncExpUi(res.exp);
2551							}
2552							Swal.fire({
2553								icon: 'success',
2554								title: '선물 완료',
2555								toast: true,
2556								position: 'bottom-end',
2557								showConfirmButton: false,
2558								timer: 3000,
2559								timerProgressBar: true,
2560								didOpen: function (toast) {
2561									toast.addEventListener('mouseenter', Swal.stopTimer);
2562									toast.addEventListener('mouseleave', Swal.resumeTimer);
2563								}
2564							});
2565						} else {
2566							Swal.fire('알림', res.message, 'warning');
2567						}
2568					}
2569				});
2570			});
2571		};
2572
2573		$.ajax({
2574			url: expFetchUrl,
2575			type: 'post',
2576			dataType: 'json',
2577			success: function (res) {
2578				var held = (res.code == 200 && res.exp != null) ? Number(res.exp) : fallback;
2579				openDialog(held);
2580			},
2581			error: function () {
2582				openDialog(fallback);
2583			}
2584		});
2585	};
2586})();
2587</script>
vendor: 2 bytes, line 2587
2587
2588<script>
2589function wheelShow() {
2590	$("#wheelContainer").show();
2591}
2592
2593function wheelHide() {
2594	$("#wheelContainer").hide();
2595}
2596
2597
2598function getMemberCount() {
2599	$.ajax({
2600		url: "https://powerballhelper.com/theme/games/ajax/getChatCount.php",
2601		type: "post",
2602		dataType: "json",
2603		success: function(res) {
2604			if (res.count) {
2605				$("#gamePeople").text(res.count);
2606			}
2607		}
2608	});
2609}
2610
2611function freeAction() {
2612	$.ajax({
2613		url: "https://powerballhelper.com/theme/games/ajax/setFreeAction.php",
2614		type: "post",
2615		dataType: "json",
2616		success: function(res) {
2617			if (res.code == 200) {
2618				$("#freeBtnBox").hide();
2619				if (typeof gamesSyncExpUi === 'function') {
2620					gamesSyncExpUi(res.exp);
2621				} else {
2622					$("#pointValueBox").text(res.exp);
2623					$("#maxEXP").val(res.exp);
2624					$("#my_value").val(res.exp);
2625				}
2626				$("#expStatusBox").show();
2627				/*Swal.fire(
2628					'알림',
2629					res.message,
2630					'success'
2631				)*/
2632			} else {
2633				Swal.fire(
2634					'알림',
2635					res.message,
2636					'warning'
2637				)
2638			}
2639			//console.log(res);
2640		}
2641	});
2642}
2643
2644function sendAction() {
2645	var sendAddress = $("#sendAddress").val();
2646	var sendAmount = $("#sendAmount").val();
2647	
2648	if (sendAddress != "" && sendAmount > 0) {
2649		$("#sendAddress").val("");
2650		$("#sendAmount").val("");
2651		$(".send_box").hide();
2652		
2653		Swal.fire({
2654			html: '송금중',
2655			timer: 20000,
2656			timerProgressBar: false,
2657			didOpen: () => {
2658				Swal.showLoading()
2659				const b = Swal.getHtmlContainer().querySelector('b')
2660				timerInterval = setInterval(() => {
2661					//b.textContent = Swal.getTimerLeft()
2662				}, 100)
2663			},
2664			willClose: () => {
2665				clearInterval(timerInterval)
2666			}
2667		})
2668		$.ajax({
2669			url: "https://powerballhelper.com/theme/games/ajax/setSendAction.php",
2670			type: "post",
2671			data: {sendAddress, sendAmount},
2672			dataType: "json",
2673			success: function(res) {
2674				if (res.code == 200) {
2675					Swal.fire(
2676					   '알림',
2677						"송금이 완료되었습니다",
2678					   'success'
2679					)
2680				} else {
2681					Swal.fire(
2682					   '알림',
2683						res.message,
2684					   'warning'
2685					)
2686				}
2687				console.log(res);
2688			}
2689		});
2690	}
2691}
2692
2693function showRollingHTML() {
2694	wheelHide();
2695	rollingHTML(1);
2696	if ($(".rolling_box").css("display") == "none") {
2697		closeContainer();
2698		$(".rolling_box").show();
2699	} else {
2700		$(".rolling_box").hide();
2701	}
2702}
2703
2704function rollingHTML(page) {
2705	$.ajax({
2706		url: "https://powerballhelper.com/theme/games/ajax/getRollingList.php",
2707		type: "post",
2708		data: {page},
2709		dataType: "json",
2710		success: function(res) {
2711			//console.log(res);
2712			if (res.html) {
2713				$(".rollingListBox").html(res.html);
2714			}
2715		}
2716	});
2717}
2718
2719function rollingChange() {
2720	Swal.fire({
2721				title: "<span class='text-[18px]'>전환하실 수량을 입력해주세요</span><p class='text-[14px]'>보유 롤링 : 0 P</p>",
2722				input: "number",
2723		inputAttributes: {
2724			autocapitalize: "off"
2725		},
2726		showCancelButton: true,
2727		confirmButtonText: '전환하기',
2728		cancelButtonText: '취소',
2729		showLoaderOnConfirm: true,
2730		allowOutsideClick: () => !Swal.isLoading()
2731	}).then((result) => {
2732		if (result.isConfirmed) {
2733			
2734			var exp = Number(result.value);
2735			//console.log(exp);
2736			if (exp <= 0) {
2737				Swal.fire(
2738					'알림',
2739					"수량 입력이 잘못되었습니다.",
2740					'warning'
2741				)
2742			} else {
2743				$.ajax({
2744					url: "https://powerballhelper.com/theme/games/ajax/setRollingChange.php",
2745					type: "post",
2746					data: {exp},
2747					dataType: "json",
2748					success: function(res) {
2749						if (res.code == 200) {
2750							Swal.fire({
2751								icon: 'success',
2752								title: "전환 완료",
2753								toast: true,
2754								position: 'bottom-end',
2755								showConfirmButton: false,
2756								timer: 3000,
2757								timerProgressBar: true,
2758								didOpen: (toast) => {
2759									toast.addEventListener('mouseenter', Swal.stopTimer);
2760									toast.addEventListener('mouseleave', Swal.resumeTimer);
2761								}
2762							});
2763						} else {
2764							Swal.fire(
2765							   '알림',
2766								res.message,
2767							   'warning'
2768							)
2769						}
2770					}
2771				});
2772			}
2773			
2774			/*Swal.fire({
2775				title: `${result.value.login}'s avatar`,
2776				imageUrl: result.value.avatar_url
2777			});*/
2778		}
2779	});
2780}
2781
2782function showRankHTML() {
2783	wheelHide();
2784	rankHTML(1);
2785	if ($(".rank_box").css("display") == "none") {
2786		closeContainer();
2787		$(".rank_box").show();
2788	} else {
2789		$(".rank_box").hide();
2790	}
2791}
2792var prevType = 0;
2793
2794function rankHTML(type) {
2795	if (prevType != type) {
2796		$(".selectedView2").removeClass("on");
2797		$("#rankBtn"+type).addClass("on");
2798		
2799		$.ajax({
2800			url: "https://powerballhelper.com/theme/games/ajax/getRankList.php",
2801			type: "post",
2802			data: {"name": "dhkspeedkeno", type},
2803			dataType: "json",
2804			success: function(res) {
2805				if (res.html) {
2806					var btnCheck = "#rankBtn"+type;
2807					$(".rankBtn").removeClass("on");
2808					$(btnCheck).addClass("on");
2809					$(".rankListBox").html(res.html);
2810				}
2811			}
2812		});
2813	}
2814	
2815}
2816
2817	var selectType = "파워볼";
2818	function slideEvent(f) {
2819		var checkMenus = $(f).next().attr("data-menus");
2820		$(".menuNavSlide").each(function() {
2821			if (checkMenus != $(this).attr("data-menus")) {
2822				$(this).stop().slideUp();
2823			}
2824		});
2825		var checkDisplay = $(f).next().css("display");
2826		if (checkDisplay == "none") {
2827			$(f).next().stop().slideDown();
2828		} else {
2829			$(f).next().stop().slideUp();
2830		}
2831	}
2832	
2833	function selectGame(type, title) {
2834		if (typeof gameType !== "undefined" && (gameType === "coinladder3" || gameType === "dhkenoladder")) {
2835			$(".menuNavSlide").stop().slideUp();
2836			$("#selectGameTitle").text(title);
2837			$(".gameTypeSelectBox").removeClass("on");
2838			$(".gameTypeSelectBody").children("li").eq(Number(type) - 1).addClass("on");
2839			selectType = title;
2840			picksType = "";
2841			try { $("#pick_game").val(""); } catch (e) {}
2842			$(".valueCheck").val(0);
2843			$(".chipPickStatus").html("");
2844			$(".chipPickIcon").hide();
2845			// Tailwind .hidden 은 display:none !important → jQuery .css("flex")만으로는 안 먹음
2846			$(".pickGameBox").addClass("hidden").hide();
2847			$("[data-games=" + type + "]").removeClass("hidden").show().css("display", "flex");
2848			return;
2849		}
2850		$(".menuNavSlide").stop().slideUp();
2851		$("#selectGameTitle").text(title);
2852		$(".gameTypeSelectBox").removeClass("on");
2853		$(".gameTypeSelectBody").children("li").eq((Number(type) - 1)).addClass("on");
2854		//console.log((Number(type) - 1));
2855		selectType = type;
2856		var pickPanelKey = type;
2857		var gameRadioName = "game";
2858		if (type == "1" || type == "2") {
2859			if (type == "1") {
2860				selectType = "파워볼";
2861			} else {
2862				selectType = "일반볼";
2863			}
2864			pickPanelKey = 1;
2865		}
2866		
2867		if (type == "3") {
2868			gameRadioName = "size";
2869			selectType = "소중대";
2870		}
2871		
2872		if (type == "4") {
2873			gameRadioName = "number";
2874			selectType = "파워볼숫자";
2875		}
2876		
2877		if (type == "5" || type == "6") {
2878			if (type == "5") {
2879				selectType = "파워볼조합";
2880			} else {
2881				selectType = "일반볼조합";
2882			}
2883			pickPanelKey = 5;
2884			gameRadioName = "combi";
2885		}
2886		
2887		var gameCheckedName = "#pick_"+gameRadioName+"1";
2888		// Tailwind .hidden 은 !important → hide()/css("flex")만으로는 탭 패널 전환이 안 될 수 있음 (픽등록 모달)
2889		$(".pickGameBox").addClass("hidden").hide();
2890		$(gameCheckedName).prop("checked", true);
2891		$("[data-games="+pickPanelKey+"]").removeClass("hidden").show().css("display", "flex");
2892	}
2893	
2894		var setPoints = 100;
2895	function setPoint(f) {
2896		try {
2897			var _chipS = document.getElementById("chipS");
2898			if (_chipS && _chipS.play) _chipS.play();
2899		} catch (e) {}
2900		const pointValue = $(f).val();
2901		
2902		if (pointValue == "초기화") {
2903			$("#pointInput").val('');
2904			$("#pickPoint").val(0);
2905			$("#pick_point_select1").prop("checked", true);
2906			$(".valueCheck").each(function() {
2907				$(this).val(0);
2908			});
2909			$(".chipPickIcon").hide();
2910			$(".chipPickStatus").html("");
2911			return;
2912		}
2913		if (pointValue == "MAX") {
2914			var maxRaw = $("#maxEXP").val();
2915			if (maxRaw === undefined || maxRaw === null || maxRaw === "") {
2916				maxRaw = $("#my_value").val();
2917			}
2918			var maxNum = parseInt(String(maxRaw).replace(/[^0-9]/g, ""), 10);
2919			if (isNaN(maxNum)) maxNum = 0;
2920			if (typeof gamesPickMaxAllowed === "function") {
2921				maxNum = gamesPickMaxAllowed(maxNum);
2922			}
2923			$("#pointInput").val(maxNum.toLocaleString());
2924			$("#pickPoint").val(maxNum);
2925			return;
2926		}
2927		var nextValue = parseInt(String(pointValue).replace(/[^0-9]/g, ""), 10);
2928		if (isNaN(nextValue)) nextValue = 0;
2929		$("#pointInput").val(nextValue > 0 ? nextValue.toLocaleString() : "");
2930		$("#pickPoint").val(nextValue);
2931	}
2932	var picksType = "";
2933	function chipPickAdd(f) {
2934		$("#pickS")[0].play();
2935		var myValue = Number($("#my_value").val());
2936		var thisValue = Number($(f).find(".valueCheck").val());
2937		var thisType = $(f).find(".valueCheck").data('type');
2938		// 모달이 다시 렌더링되면(#pick_game DOM 교체) picksType 전역값만 남아
2939		// 동일 타입을 첫 클릭했을 때 pick_game 이 세팅되지 않는 케이스가 발생함.
2940		// 항상 현재 타입을 전송값으로 반영한다.
2941		$("#pick_game").val(thisType);
2942		
2943		if (thisType != picksType) {
2944			$(".valueCheck").val(0);
2945			$(".chipPickStatus").html("");
2946			$(".chipPickIcon").hide();
2947			picksType = thisType;
2948		}
2949		//console.log(thisType);
2950		//console.log(picksType);
2951		
2952		var selectPoint = $("input:radio[name='pick_point_select']:checked").val();
2953		var maxAllowed = (typeof gamesPickMaxAllowed === "function") ? gamesPickMaxAllowed(myValue) : myValue;
2954		
2955		if (selectPoint == "MAX") {
2956			selectPoint = maxAllowed;
2957		} else {
2958			selectPoint = Number(selectPoint);
2959		}
2960		
2961		var totalValue = thisValue + selectPoint;
2962		
2963		if (totalValue > maxAllowed) {
2964			totalValue = maxAllowed;
2965		}
2966		
2967		$(f).find(".valueCheck").val(totalValue);
2968		$(f).find(".chipPickStatus").html(addCommas(totalValue));
2969		$(f).find(".chipPickIcon").show();
2970		//console.log(totalValue);
2971		$("#pickPoint").val(totalValue);
2972		
2973		$("#pointInput").val(totalValue.toLocaleString());
2974		navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate;
2975		//console.log(navigator.vibrate);
2976		if (navigator.vibrate) {
2977			//console.log("vibrate : working");
2978			navigator.vibrate(200);
2979		}
2980		
2981	}
2982	
2983	function addCommas(amount) {
2984		return amount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
2985	}
2986
2987	/** 픽등록 모달(ladderPickNew2 등) 안쪽 '픽등록' 버튼 — Swal '등록'과 동일하게 제출 */
2988	function setPickAdd() {
2989		if (times <= checkTimes || !pickSetUse) {
2990			if (times < 0) {
2991				Swal.fire('알림', '픽 등록 대기중입니다', 'warning');
2992			} else {
2993				Swal.fire('알림', '픽 등록이 마감되었습니다', 'warning');
2994			}
2995			return;
2996		}
2997		var pickPoint = $("#pickPoint").val();
2998		if (!pickPoint || Number(pickPoint) <= 0) {
2999			Swal.fire('알림', '픽 등록에 실패했습니다', 'warning');
3000			return;
3001		}
3002		var queryString = $("form[name=pickForm]").serializeArray();
3003		var formData = new FormData();
3004		queryString.forEach(function(data) {
3005			formData.append(data["name"], data["value"]);
3006		});
3007		formData.append("selectType", selectType);
3008		formData.append("name", "dhkspeedkeno");
3009		$.ajax({
3010			url: "https://powerballhelper.com/theme/games/ajax/setPick.php",
3011			type: "post",
3012			data: formData,
3013			dataType: "json",
3014			contentType: false,
3015			processData: false,
3016			success: function(res) {
3017				if (res.code == 200) {
3018					if (typeof appendPickChatLiIfNeeded === 'function') appendPickChatLiIfNeeded(res, "dhkspeedkeno");
3019					Swal.fire({
3020						icon: 'success',
3021						title: res.message,
3022						toast: true,
3023						position: 'bottom-end',
3024						showConfirmButton: false,
3025						timer: 3000,
3026						timerProgressBar: true,
3027						didOpen: function(toast) {
3028							toast.addEventListener('mouseenter', Swal.stopTimer);
3029							toast.addEventListener('mouseleave', Swal.resumeTimer);
3030						}
3031					});
3032				} else {
3033					Swal.fire('알림', res.message || '오류', 'warning');
3034				}
3035			}
3036		});
3037	}
3038		
3039	function setPointValue(f) {
3040		const pointValue = $(f).val();
3041		
3042		$.ajax({
3043			url: "https://powerballhelper.com/theme/games/ajax/getPointValue.php",
3044			type: "post",
3045			data: {pointValue},
3046			dataType: "json",
3047			success: function(res) {
3048				//console.log(res);
3049				
3050				if (res.code == 200) {
3051					$("#pointValueBox").html(res.point);
3052					if (pointValue == "USDT") {
3053						$(".walletBox").show();
3054						
3055					} else {
3056						$(".walletBox").hide();
3057					}
3058					$("#walletText").text(res.address);
3059					$(".walletBoxSend").show();
3060					$("#walletText").show();
3061					$("#walletBtn").hide();
3062				} if (res.code == 402) {
3063					if (pointValue == "USDT") {
3064						$(".walletBox").show();
3065					} else {
3066						$(".walletBox").hide();
3067					}
3068					$("#walletText").hide();
3069					$("#walletBtn").show();
3070					$(".walletBoxSend").hide();
3071				}
3072				
3073			}
3074		});
3075	}
3076	
3077	function createWallet() {
3078		$.ajax({
3079			url: "https://powerballhelper.com/theme/games/ajax/createAddress.php",
3080			type: "post",
3081			dataType: "json",
3082			success: function(res) {
3083				//console.log(res);
3084				if (res.code == 200) {
3085					$("#walletText").text(res.address);
3086					$(".walletBoxSend").show();
3087					$("#walletText").show();
3088					$("#walletBtn").hide();
3089				} else {
3090					Swal.fire(
3091					   '알림',
3092					   "지갑 생성에 실패했습니다",
3093					   'warning'
3094					)
3095				}
3096			}
3097		});
3098	}
3099	
3100	function sendLayout() {
3101		$(".send_box").show();
3102		$.ajax({
3103			url: "https://powerballhelper.com/theme/games/ajax/getPointValue.php",
3104			type: "post",
3105			data: {"pointValue" : "USDT"},
3106			dataType: "json",
3107			success: function(res) {
3108				if (res.code == 200) {
3109					$("#sendPointValue").html(res.point);
3110				}
3111			}
3112		});
3113		
3114	}
3115	
3116	function copyText(id) {
3117		var r = document.createRange();
3118		r.selectNode(document.getElementById(id));
3119		window.getSelection().removeAllRanges();
3120		window.getSelection().addRange(r);
3121		document.execCommand('copy');
3122		window.getSelection().removeAllRanges();
3123		Swal.fire(
3124		   '알림',
3125		   "복사되었습니다",
3126		   'success'
3127		)
3128	}
3129	
3130	function setPointInput(f) {
3131		var myValue = Number($("#my_value").val());
3132		var pointCheck = Number($(f).val().replace(/[^0-9]/g,''));
3133		
3134		if (pointCheck > myValue) {
3135			pointCheck = myValue;
3136		}
3137		const pointValue = pointCheck.toLocaleString();
3138
3139		$(".valueCheck").each(function() {
3140			var thisDataType = $(this).data("type");
3141			
3142			if (thisDataType == picksType) {
3143				//console.log(thisDataType);
3144				$(this).next().find(".chipPickStatus").text(pointValue);
3145			}
3146		});
3147		
3148		$("#pickPoint").val(pointCheck);
3149		$(f).val(pointValue);
3150	}
3151	
3152	$(document).click(function(e){
3153		if(!$(e.target).closest(".layerMenu").hasClass("layerMenu")){
3154			$(".menuNavSlide").each(function() {
3155				$(this).stop().slideUp();
3156			});
3157		}
3158	});
3159</script>
3159
3160
3161<script>
3162function inventoryOpen(mb_id, type) {
3163	wheelHide();
3164	presentUse = type;
3165	if (mb_id != "") { 
3166		if ($("#inventoryBox").css("display") == "none") {
3167			inventoryHTML(mb_id);
3168			$("#inventoryBox").fadeIn();
3169		} else {
3170			$("#inventoryBox").hide();
3171			$("#inventoryBox").html("");
3172		}
3173	} else {
3174		Swal.fire(
3175			'알림',
3176			'로그인 후 이용해주세요',
3177			'warning'
3178		)
3179	}
3180	
3181}
3182
3183function inventoryHTML(mb_id) {
3184	$.ajax({
3185		url: "https://powerballhelper.com/theme/games/ajax/getInventoryHtml.php",
3186		type: "post",
3187		data: {mb_id, selectUserId, presentUse},
3188		dataType: "json",
3189		success: function(res) {
3190			//console.log(res);
3191			if (res.html) {
3192				$("#inventoryBox").html(res.html);
3193			}
3194		}
3195	});
3196}
3197
3198function sendEXP() {
3199	gamesSendExpGift(typeof selectUserId !== 'undefined' ? selectUserId : '');
3200}
3201
3202function sendItem(id, name) {
3203	Swal.fire({
3204		html: name+" 카드를 선물하시겠습니까?",
3205		showCancelButton: true,
3206		confirmButtonColor: '#0c0546',
3207		confirmButtonText: '네',
3208		cancelButtonText: '아니오'
3209   }).then((result) => {
3210		if (result.isConfirmed) {
3211			$.ajax({
3212				url: "https://powerballhelper.com/theme/games/ajax/setItemSend.php",
3213				type: "post",
3214				data: {id, selectUserId},
3215				dataType: "json",
3216				success: function(res) {
3217					//console.log(res);
3218					if (res.code == 200) {
3219						inventoryHTML('');
3220						Swal.fire({
3221							icon: 'success',
3222							title: "선물 완료",
3223							toast: true,
3224							position: 'bottom-end',
3225							showConfirmButton: false,
3226							timer: 3000,
3227							timerProgressBar: true,
3228							didOpen: (toast) => {
3229								toast.addEventListener('mouseenter', Swal.stopTimer);
3230								toast.addEventListener('mouseleave', Swal.resumeTimer);
3231							}
3232						});
3233					} else {
3234						Swal.fire(
3235						   '알림',
3236							res.message,
3237						   'warning'
3238						)
3239					}
3240				}
3241			});
3242			
3243		}
3244   });
3245}
3246
3247function inventorySend(id, name) {
3248	Swal.fire({
3249		title: "<span class='text-[18px]'>"+name+"를 선물하시겠습니까?</span><p class='text-[14px]'>선물하기 위한 상대방 닉네임을 입력해주세요</p>",
3250		input: "text",
3251		inputAttributes: {
3252			autocapitalize: "off"
3253		},
3254		showCancelButton: true,
3255		confirmButtonText: '선물하기',
3256		cancelButtonText: '취소',
3257		showLoaderOnConfirm: true,
3258		allowOutsideClick: () => !Swal.isLoading()
3259	}).then((result) => {
3260		if (result.isConfirmed) {
3261			var searchNick = result.value;
3262			//console.log(exp);
3263			if (searchNick == "") {
3264				Swal.fire(
3265					'알림',
3266					"닉네임을 입력해주세요",
3267					'warning'
3268				)
3269			} else {
3270				$.ajax({
3271					url: "https://powerballhelper.com/theme/games/ajax/setInventorySend.php",
3272					type: "post",
3273					data: {"mb_nick" : searchNick, id},
3274					dataType: "json",
3275					success: function(res) {
3276						if (res.code == 200) {
3277							inventoryHTML('');
3278							Swal.fire({
3279								icon: 'success',
3280								title: "선물 완료",
3281								toast: true,
3282								position: 'bottom-end',
3283								showConfirmButton: false,
3284								timer: 3000,
3285								timerProgressBar: true,
3286								didOpen: (toast) => {
3287									toast.addEventListener('mouseenter', Swal.stopTimer);
3288									toast.addEventListener('mouseleave', Swal.resumeTimer);
3289								}
3290							});
3291						} else {
3292							Swal.fire(
3293							   '알림',
3294								res.message,
3295							   'warning'
3296							)
3297						}
3298					}
3299				});
3300			}
3301		}
3302	});
3303}
3304
3305function inventoryUse(id, name) {
3306	Swal.fire({
3307		html: name+"를 사용하시겠습니까?",
3308		showCancelButton: true,
3309		confirmButtonColor: '#0c0546',
3310		confirmButtonText: '네',
3311		cancelButtonText: '아니오'
3312   }).then((result) => {
3313		if (result.isConfirmed) {
3314			$.ajax({
3315				url: "https://powerballhelper.com/theme/games/ajax/setInventoryUse.php",
3316				type: "post",
3317				data: {id},
3318				dataType: "json",
3319				success: function(res) {
3320					console.log(res);
3321					if (res.code == 200) {
3322						Swal.fire({
3323							html: res.message,
3324							confirmButtonColor: '#0c0546',
3325							confirmButtonText: '확인',
3326					   }).then((result) => {
3327							if (result.isConfirmed) {
3328								inventoryHTML('');
3329							}
3330					   });
3331					   
3332					   /*setTimeout(function() {
3333						   $(".openResultText").slideDown();
3334					   }, 2200);*/
3335					   
3336					   setTimeout(function() {
3337						   $(".openBoxImage").attr("srcset", 'https://powerballhelper.com/img/box/'+res.changeColor+'_opened.webp');
3338					   }, 2400);
3339					   
3340					} else {
3341						Swal.fire(
3342						   '알림',
3343							res.message,
3344						   'warning'
3345						)
3346						inventoryHTML('');
3347					}
3348				}
3349			});
3350			
3351		}
3352   });
3353}
3354
3355function sendLetter() {
3356		Swal.fire(
3357		'알림',
3358		'로그인 후 이용해주세요',
3359		'warning'
3360	)
3361	}
3362
3363var pickModal = false;
3364var times;
3365var pickSetUse = true;
3366var checkTimes = 30;
3367
3368function setClock(){
3369    var dateInfo = new Date(); 
3370	
3371	const time = Date.now();
3372	let seconds = Math.floor(time/1000);
3373	const date = new Date('2026-10-02 00:00:00');
3374	let seconds2 = Math.floor(date/1000);
3375	let todaySecond = seconds - seconds2;
3376	
3377	let todayRound = Math.floor(todaySecond / 300) + 1;
3378	
3379	if (gameType == "ball1") {
3380		var min = modifyNumber(0);
3381		var sec = modifyNumber(59 - dateInfo.getSeconds());
3382		times = Number(sec);
3383	} else if (gameType == "eos4") {
3384		var min = modifyNumber(3 - ((dateInfo.getMinutes()) % 4));
3385		var sec = modifyNumber(59 - dateInfo.getSeconds());
3386		times = (Number(min) * 60) + Number(sec);
3387	} else if (gameType == "eos3") {
3388		var min = modifyNumber(2 - ((dateInfo.getMinutes()) % 3));
3389		var sec = modifyNumber(59 - dateInfo.getSeconds());
3390		times = (Number(min) * 60) + Number(sec);
3391	} else if (gameType == "eos2") {
3392		var min = modifyNumber(1 - ((dateInfo.getMinutes()) % 2));
3393		var sec = modifyNumber(59 - dateInfo.getSeconds());
3394		times = (Number(min) * 60) + Number(sec);
3395	} else if (gameType == "eos1") {
3396		todayRound = Math.floor(todaySecond / 60) + 1;
3397		var min = modifyNumber(0);
3398		var sec = modifyNumber(59 - dateInfo.getSeconds());
3399		times = (Number(min) * 60) + Number(sec);
3400	} else if (gameType == "coinpowerball3" || gameType == "coinladder3") {
3401		todayRound = Math.floor(todaySecond / 180) + 1;
3402		var min = modifyNumber(2 - ((dateInfo.getMinutes()) % 3));
3403		var sec = modifyNumber(59 - dateInfo.getSeconds());
3404		times = (Number(min) * 60) + Number(sec);
3405	} else if (gameType == "dhkenoladder" || gameType == "dhkspeedkeno") {
3406		todayRound = Math.floor(todaySecond / 300) + 1;
3407		var min = modifyNumber(4 - ((dateInfo.getMinutes()) % 5));
3408		var sec = modifyNumber(59 - dateInfo.getSeconds());
3409		times = (Number(min) * 60) + Number(sec);
3410		
3411		// 베픽 키노/키노사다리 결과 반영 타이밍이 :00 이 아니라 :15 전후라
3412		// 타이머도 동일 기준으로 맞춘다. (sec=59 기반이라 15초에 0이 되도록 44초 보정)
3413		// 예: 결과 처리 15:49:15, 15:54:15 ...
3414		times = times - 44;
3415		if (times < 0) {
3416			times = 300 + times;
3417		}
3418		min = modifyNumber(Math.floor(times / 60));
3419		sec = modifyNumber(times % 60);
3420	} else {
3421		var min = modifyNumber(4 - ((dateInfo.getMinutes()) % 5));
3422		var sec = modifyNumber(59 - dateInfo.getSeconds());
3423		times = (Number(min) * 60) + Number(sec);
3424		
3425		if (gameType == "dh") {
3426			times = times - 27;
3427			
3428			if (times < 0) {
3429				times = 300 + times;
3430			}
3431			
3432			min = modifyNumber(Math.floor(times / 60));
3433			sec = modifyNumber(times % 60);
3434		}
3435	}
3436	$("#roundBox").text(todayRound + " 회차");
3437	$("#nextRoundValue").text(todayRound);
3438	if (times <= checkTimes) {
3439		if (times < 0) {
3440			$("#timerBox").text("대기중");
3441			$("#nextTimeValue").text("대기중");
3442		} else {
3443			$("#timerBox").text("추첨중");
3444			$("#nextTimeValue").text("추첨중");
3445		}
3446		
3447		$(".pickPendingBox").show();
3448		$(".pickContainerBox").hide();
3449		pickSetUse = false;
3450		if (pickModal) {
3451			pickModal = false;
3452			
3453			/*pickModal = false;
3454			Swal.fire({
3455				html: '추첨중',
3456				timer: 10000,
3457				timerProgressBar: true,
3458				didOpen: () => {
3459					Swal.showLoading()
3460					const b = Swal.getHtmlContainer().querySelector('b')
3461					timerInterval = setInterval(() => {
3462						//b.textContent = Swal.getTimerLeft()
3463					}, 100)
3464				},
3465				willClose: () => {
3466					clearInterval(timerInterval)
3467				}
3468			})*/
3469		}
3470	} else {
3471		$("#timerBox").text(min+":"+sec);
3472		$("#nextTimeValue").text(min+":"+sec);
3473
3474		$(".pickPendingBox").hide();
3475		$(".pickContainerBox").show();
3476		pickSetUse = true;
3477	}
3478}
3479function modifyNumber(time){
3480    if(parseInt(time) < 10) {
3481        return "0"+ time;
3482    } else {
3483        return time;
3484	}
3485}
3486window.onload = function(){
3487    setClock();
3488    setInterval(setClock,1000);
3489}
3490
3491function changeTicket(f) {
3492	const dataTicket = $(f).data("ticket");
3493	//console.log(dataTicket);
3494	ticketHTML(dataTicket);
3495	$(".changeTicketBtn").removeClass("on");
3496	$(f).addClass("on");
3497}
3498
3499function closeContainer() {
3500	$(".closeContainer").hide();
3501}
3502
3503function gameTypeNameChange(changes) {
3504	//console.log(changes);
3505	$("#gameTypeName").val(changes);
3506	const mb_id = $("#selectMemberID").val();
3507	//console.log(mb_id);
3508	PickListHTML(mb_id);
3509}
3510
3511function PickListHTML(mb_id) {
3512	
3513		Swal.fire(
3514	   '알림',
3515	   '로그인 후 이용해주세요',
3516	   'warning'
3517	)
3518	}
3519
3520function filterGameType(f, filterName) {
3521	$(".gamesTypes").removeClass("bg-blue-600 text-white");
3522	$(f).addClass("bg-blue-600 text-white");
3523	/*if (filterName != "전체") {
3524		$(".filterGameList").each(function() {
3525			var types = $(this).data("types");
3526			console.log(types);
3527			if (filterName)
3528		});
3529	} else {
3530		$(".filterGameList").removeClass("hidden");
3531	}*/
3532	
3533}
3534
3535
3536function chipIcon(f) {
3537	$(".chipIcon").removeClass("on");
3538	$(f).addClass("on");
3539}
3540
3541$(document).ready(function() {
3542				
3543	$("#showTicketContainer").click(function() {
3544		wheelHide();
3545		if ($("#ticketContainerBox").css("display") == "none") {
3546			closeContainer();
3547			ticketHTML(ticketValue);
3548			$("#ticketContainerBox").show();
3549		} else {
3550			$("#ticketContainerBox").hide();
3551		}
3552	});
3553	
3554	$("#showChartContainer").click(function() {
3555		wheelHide();
3556		if ($("#chartContainerBox").css("display") == "none") {
3557			closeContainer();
3558			$("#chartContainerBox").show();
3559		} else {
3560			$("#chartContainerBox").hide();
3561		}
3562	});
3563	
3564	$("#showAnalyzerContainer").click(function() {
3565		wheelHide();
3566		if ($("#analyzerContainerBox").css("display") == "none") {
3567			closeContainer();
3568			$("#analyzerContainerBox").show();
3569		} else {
3570			$("#analyzerContainerBox").hide();
3571		}
3572	});
3573	
3574	
3575	
3576	
3577	$('.macro_icon').click(function(){
3578		/*if ($('.macro_box').css("display") == "none") {
3579			$("div[id=content_hide]").each(function(i) {
3580				$("div[id=content_hide]").eq(i).css('display','none');
3581			});
3582			$('.macro_box').toggle();
3583		} else {
3584			$("div[id=content_hide]").each(function(i) {
3585				$("div[id=content_hide]").eq(i).css('display','none');
3586			});
3587			$('.macro_box').hide();
3588		}		
3589
3590		$('#menu_slide').slideUp();*/
3591		
3592		location.href="https://powerballhelper.com/macro/settingList.php";
3593	});
3594	
3595	$("#showPickListContainer").click(function() {
3596		wheelHide();
3597				Swal.fire(
3598		   '알림',
3599		   '로그인 후 이용해주세요',
3600		   'warning'
3601		)
3602			});
3603	
3604	$("#showPickListContainer2").click(function() {
3605		wheelHide();
3606				Swal.fire(
3607		   '알림',
3608		   '로그인 후 이용해주세요',
3609		   'warning'
3610		)
3611			});
3612	
3613	$("#showPickContainer").click(function() {
3614		wheelHide();
3615				Swal.fire(
3616		   '알림',
3617		   '로그인 후 이용해주세요',
3618		   'warning'
3619		)
3620			});
3621});
3622</script>
3622    </div>
3623	<div class="layer_popup" id="layer_de_box" style="display: none">
3624	<div id="layer_de" class="layer_box">
3625		<div class="layer_header">
3626			<span><b id="de_nickname"></b> 님 신고하기</span>
3627		</div>
3628		<div class="layer_body">
3629			<form id="de_form">
3630				<div>
3631					<label>신고 구분</label>
3632					<select id="de_select" name="de_select">
3633						<option value="욕설">욕설</option>
3634						<option value="불법광고">불법광고</option>
3635						<option value="카카오톡 노출">카카오톡 노출</option>
3636						<option value="도박">도박</option>
3637						<option value="음란">음란</option>
3638						<option value="위법행위">위법행위</option>
3639						<option value="명예훼손">명예훼손</option>
3640						<option value="어플비방">어플비방</option>
3641						<option value="시스템악용">시스템악용</option>
3642						<option value="기타">기타</option>
3643					</select>
3644				</div>
3645				<span>신고 내용을 입력해주세요.</span>
3646				<textarea id="layer_de_text"></textarea>
3647				
3648				<!--<input type="checkbox" name="block_use" id="block_use" value="1" class="hidden checkRedStyle">
3649				<label for="block_use" class="border rounded-[6px] w-full text-[14px] py-1 inline-block text-center font-bold cursor-pointer mb-3">12시간 차단</label>-->
3650				
3651			</form>
3652			<font color="red" style="font-weight: bolder; word-break: keep-all;">허위신고나 도배성 신고는 제재대상이 될 수 있습니다.</font>
3653			<!--<br>
3654			<font color="red" style="font-weight: bolder; word-break: keep-all;">차단기능을 활성화하면 대상자의 1:1채팅, 쪽지가 12시간동안 차단됩니다.</font>-->
3655		</div>
3656		<div class="layer_footer">
3657			<button id="layer_de_move" onclick="">확인</button>
3658			<button id="layer_de_close" onclick="$('#layer_de_box').hide();">취소</button>
3659		</div>
3660	</div>
3661</div>
3662<div class="absolute w-[calc(100%-20px)] z-[1100] top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-white border-t rounded-[12px] p-3 hidden" id="runningBox">
3663	<div class="text-center font-bold text-[16px]">달리기 리스트</div>
3664	<div class="py-2">
3665		<div>
3666			<ul class="p-2 grid grid-cols-4 gap-x-[20px] text-center">
3667				<li class="runningTypes text-[12px] px-2 py-1 border rounded-[6px] cursor-pointer mb-2 font-bold" onclick="filterRunningType(this, 'ALL')">전체</li>
3668				<li class="runningTypes text-[12px] px-2 py-1 border rounded-[6px] cursor-pointer bg-blue-600 text-white mb-2 font-bold" onclick="filterRunningType(this, '1')">진행중</li>
3669				<li class="runningTypes text-[12px] px-2 py-1 border rounded-[6px] cursor-pointer mb-2 font-bold" onclick="filterRunningType(this, '0')">진행예정</li>
3670				<li class="runningTypes text-[12px] px-2 py-1 border rounded-[6px] cursor-pointer mb-2 font-bold" onclick="filterRunningType(this, '2')">종료</li>
3671			</ul>
3672		</div>
3673		<div class="h-[300px] overflow-y-auto">
3674			<ul>
3675							</ul>
3676		</div>
3677	</div>
3678	<div>
3679		<button class="w-full font-bold text-center bg-red-600 text-white py-2 text-[14px] rounded-[6px] border-0" onclick="runningListOpen()">닫기</button>
3680	</div>
3681</div>
3682
3683<script>
3684function runningRankOpen(id) {
3685	$.ajax({
3686		url: "https://powerballhelper.com/theme/games/ajax/getRunningRank.php",
3687		type: "post",
3688		data: {id},
3689		dataType: "json",
3690		success: function(res) {
3691			//console.log(res);
3692			if (res.html) {
3693				Swal.fire({
3694					html: res.html,
3695					confirmButtonColor: '#FD6F22',
3696					confirmButtonText: '닫기',
3697					didClose: () => {
3698						pickModal = false;
3699					},
3700					customClass: {
3701						container: 'layoutPickBox'
3702					}
3703				});
3704			}
3705			
3706			/*if (res.html) {
3707				Swal.fire({
3708					html: res.html,
3709					confirmButtonText: '닫기',
3710					customClass: {
3711						container: 'layoutPickBox'
3712					}
3713			   });
3714			}*/
3715		}
3716	});
3717}
3718
3719function runningListOpen() {
3720	wheelHide();
3721	if ($("#runningBox").css("display") == "none") {
3722		$("#runningBox").fadeIn();
3723	} else {
3724		$("#runningBox").hide();
3725	}
3726}
3727
3728function filterRunningType(f, type) {
3729	$(".runningTypes").removeClass("bg-blue-600 text-white");
3730	$(f).addClass("bg-blue-600 text-white");
3731	
3732	if (type != "ALL") {
3733		$(".runningLi").each(function() {
3734			$(this).addClass("hidden");
3735			var status = $(this).data("status");
3736			
3737			if (status == type) {
3738				//console.log(type);
3739				//console.log(status);
3740				$(this).removeClass("hidden");
3741			}
3742		});
3743	} else {
3744		$(".runningLi").removeClass("hidden");
3745	}
3746}
3747</script>
3747</section>
3748
3749<script>
3750function inReady() {
3751	Swal.fire(
3752	   '알림',
3753	   '준비중입니다',
3754	   'warning'
3755	)
3756}
3757</script>
3757
3758    </div>
3759</div>
3760
3761<div class="block_box" style="display:none; -webkit-tap-highlight-color : transparent;">
3762	<div class="block_content_box p-2">
3763		<div class="text-center font-bold text-[16px] pt-1 pb-2">차단 목록</div>
3764		<div class="blockListBox text-center h-[calc(100%-80px)] overflow-auto"></div>
3765		<div class="w-full h-[50px] text-center py-[6px]">
3766			<button onclick='$(".block_box").hide();' type="button" class="w-full py-2 px-4 border border-[#0c0546] rounded-[6px] text-[14px] text-[#0c0546] bg-white">닫기</button>
3767		</div>
3768	</div>
3769</div>
3770
3771<script>
3772function showBlockList() {
3773	$('#gnb').hide();
3774	blockListHtml();
3775	$('.block_box').show();
3776}
3777
3778function blockListHtml() {
3779	$.ajax({
3780		url : "https://powerballhelper.com/theme/games/ajax/getBlockList.php",
3781		type : "post",
3782		dataType : "json",
3783		success : function(res) {
3784			if (res.code == 200) {
3785				$(".blockListBox").html(res.html);
3786			} else {
3787				Swal.fire(
3788				   '알림',
3789				   res.message,
3790				   'warning'
3791				)
3792			}
3793		}
3794	});
3795}
3796
3797function userBlock(mb_id, mb_nick,block_use, resetUse) {
3798	if (block_use == 1) {
3799		var titleText = '<div class="text-[16px]">'+mb_nick+'님을 차단하시겠습니까?</div>';
3800		var confirmText = "차단";
3801	} else {
3802		var titleText = '<div class="text-[16px]">'+mb_nick+'님의 차단을 해제하시겠습니까?</div>';
3803		var confirmText = "차단해제";
3804	}
3805	
3806	
3807	Swal.fire({
3808		title: titleText,
3809		showCancelButton: true,
3810		reverseButtons: true,
3811		confirmButtonColor: '#0c0546',
3812		confirmButtonText: confirmText,
3813		cancelButtonText: '취소',
3814	}).then((result) => {
3815		if (result.isConfirmed) {
3816			$.ajax({
3817				url : "https://powerballhelper.com/theme/games/ajax/setUserBlockUpdate.php",
3818				type : "post",
3819				data : {mb_id, block_use},
3820				dataType : "json",
3821				success : function(res) {
3822					if (res.code == 200) {
3823						if (resetUse) {
3824							blockListHtml();
3825						}
3826						
3827						Swal.fire({
3828							icon: 'success',
3829							title: res.message,
3830							toast: true,
3831							position: 'bottom-end',
3832							showConfirmButton: false,
3833							timer: 3000,
3834							timerProgressBar: true,
3835							didOpen: (toast) => {
3836								toast.addEventListener('mouseenter', Swal.stopTimer);
3837								toast.addEventListener('mouseleave', Swal.resumeTimer);
3838							}
3839						});
3840					} else {
3841						Swal.fire(
3842						   '알림',
3843						   res.message,
3844						   'warning'
3845						)
3846					}
3847				}
3848			});
3849			
3850		}
3851	});
3852}
3853
3854
3855//setTimeout(function() {
3856//	$("#bodyLoadingBox").fadeOut();
3857//}, 50);
3858
3859jQuery(function($) {
3860
3861    $( document ).ready( function() {
3862
3863        // 폰트 리사이즈 쿠키있으면 실행
3864        font_resize("container", get_cookie("ck_font_resize_rmv_class"), get_cookie("ck_font_resize_add_class"));
3865        
3866        //상단고정
3867        if( $(".top").length ){
3868            var jbOffset = $(".top").offset();
3869            $( window ).scroll( function() {
3870                if ( $( document ).scrollTop() > jbOffset.top ) {
3871                    $( '.top' ).addClass( 'fixed' );
3872                }
3873                else {
3874                    $( '.top' ).removeClass( 'fixed' );
3875                }
3876            });
3877        }
3878
3879        //상단으로
3880        $("#top_btn").on("click", function() {
3881            $("html, body").animate({scrollTop:0}, '500');
3882            return false;
3883        });
3884
3885		/*$("html").on("click", function(e) {
3886			if ($(e.target).parents("#userInfoBox").length < 1) {
3887				//console.log(1);
3888				$("#userInfoBox").slideUp();
3889				$("#chat_list").find("li").removeClass("selectOn");
3890			} else {
3891				//console.log(2);
3892				
3893			}
3894            //return false;
3895        });*/
3896    });
3897});
3898</script>
vendor: 1 bytes, line 3898
3898
3899<script>
3900(function () {
3901	var t = null;
3902	function clearStuckOverlayStyles() {
3903		if (!(window.matchMedia && window.matchMedia('(orientation: landscape)').matches)) return;
3904		try {
3905			document.documentElement.classList.remove('kb-open', 'ios-chat-kb');
3906			document.documentElement.style.removeProperty('--app-vh');
3907			document.documentElement.style.setProperty('--kb-inset', '0px');
3908			if (document.body && document.body.style.position === 'fixed') {
3909				document.body.style.position = '';
3910				document.body.style.top = '';
3911				document.body.style.left = '';
3912				document.body.style.right = '';
3913				document.body.style.width = '';
3914			}
3915		} catch (e) {}
3916	}
3917	window.addEventListener('orientationchange', function () {
3918		if (t) clearTimeout(t);
3919		t = setTimeout(clearStuckOverlayStyles, 150);
3920	});
3921	window.addEventListener('resize', function () {
3922		if (t) clearTimeout(t);
3923		t = setTimeout(clearStuckOverlayStyles, 150);
3924	});
3925})();
3926</script>
3926
3927
3928
3929
3930
3931</body>
3932</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.