cheatmoggle

premium omoggle script (fixed opponent score, color picker, language selector, FREE badge, control bar hidden by default, +/- buttons, resizable panel)

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         cheatmoggle
// @namespace    https://omoggle.com/
// @version      13.6.2
// @description  premium omoggle script (fixed opponent score, color picker, language selector, FREE badge, control bar hidden by default, +/- buttons, resizable panel)
// @match        https://omoggle.com/*
// @match        https://*.omoggle.com/*
// @grant        unsafeWindow
// @run-at       document-start
// ==/UserScript==

(function () {
    'use strict';

    const _window = (typeof unsafeWindow !== 'undefined') ? unsafeWindow : window;

    // ══════════════════════════════════════════════════════════════
    // MAX SCORE ENGINE — 3 hooks (vision-wasm, detectForVideo, signed-frame)
    // Feeds a flawless face the server scores at your chosen value
    // ══════════════════════════════════════════════════════════════
    const MAX_LS_KEY = 'omog_max_v2';
    const MAX_DEFAULTS = { enabled: true, mode: 'fixed', target: 9.6, rangeMin: 9.0, rangeMax: 9.9, wanderStep: 0.05, jitter: true, jitterAmt: 0.0008, stream: 'face_landmarks', logEveryN: 90 };
    let MAX_CFG; try { MAX_CFG = Object.assign({}, MAX_DEFAULTS, JSON.parse(_window.localStorage.getItem(MAX_LS_KEY) || '{}')); } catch (e) { MAX_CFG = Object.assign({}, MAX_DEFAULTS); }
    const maxSaveCfg = () => { try { _window.localStorage.setItem(MAX_LS_KEY, JSON.stringify(MAX_CFG)); } catch (e) {} };

    const MAX_PARAMS = { FH:0.62, FW:0.3940, JW:0.3597, JY:0.26, EY:0.058, IH:0.05, EW:0.0969, EH:0.0290, T:0.0005, MOUTH:0.2103 };
    function maxGenNorm(P) {
        const lm=[]; for(let i=0;i<478;i++) lm.push({x:0.5,y:0.5,z:0});
        const cx=0.5,cy=0.5,set=(li,ri,hw,yy)=>{lm[li]={x:cx-hw,y:yy,z:0};lm[ri]={x:cx+hw,y:yy,z:0};};
        lm[10]={x:cx,y:cy-P.FH/2,z:0};lm[152]={x:cx,y:cy+P.FH/2,z:0};
        lm[234]={x:cx-P.FW/2,y:cy,z:0};lm[454]={x:cx+P.FW/2,y:cy,z:0};
        set(172,397,P.JW/2,cy+P.JY);set(150,379,P.JW/2,cy+P.JY*0.9);set(171,396,P.JW/2,cy+P.JY*1.1);
        const eyeY=cy-P.EY;
        lm[133]={x:cx-P.IH,y:eyeY,z:0};lm[33]={x:cx-P.IH-P.EW,y:eyeY-P.T,z:0};
        lm[362]={x:cx+P.IH,y:eyeY,z:0};lm[263]={x:cx+P.IH+P.EW,y:eyeY-P.T,z:0};
        const lcx=cx-P.IH-P.EW/2,rcx=cx+P.IH+P.EW/2;
        lm[159]={x:lcx,y:eyeY-P.EH/2,z:0};lm[145]={x:lcx,y:eyeY+P.EH/2,z:0};
        lm[386]={x:rcx,y:eyeY-P.EH/2,z:0};lm[374]={x:rcx,y:eyeY+P.EH/2,z:0};
        lm[1]={x:cx,y:cy,z:0};lm[0]={x:cx,y:eyeY+P.MOUTH,z:0};
        const fill=[[70,300,.18,-.12],[63,293,.14,-.14],[105,334,.10,-.16],[46,276,.20,-.10],[116,345,.22,.02],[123,352,.20,.06],[50,280,.18,.10],[187,411,.16,.16],[132,361,.24,0],[174,399,.06,.20],[136,365,.12,.20],[148,377,.08,.24],[176,401,.10,.22],[58,288,.22,-.04]];
        for(const f of fill){lm[f[0]]={x:cx-f[2],y:cy+f[3],z:0};lm[f[1]]={x:cx+f[2],y:cy+f[3],z:0};}
        return lm;
    }
    const _MAX_NORM = maxGenNorm(MAX_PARAMS);
    const MAX_PEAK_D = {0:[0.00238,-0.00148],133:[-0.00537,-0.00507],159:[0.00489,0.00189],176:[0.00392,-0.00571],187:[0.00433,0.00566],293:[0.00167,-0.00274],352:[-0.00052,0.00213],362:[0.00571,0.00174],386:[0.00402,0.00377]};
    const MAX_LOW_D  = {0:[-0.00589,0.00354],33:[0.0024,-0.00215],50:[-0.00312,-0.00189],58:[-0.0075,-0.00572],105:[-0.00128,0.00165],116:[-0.00368,0.0027],123:[0.00578,0.00299],145:[0.00243,0.00522],159:[0.00304,-0.00501],171:[0.00375,-0.0019],263:[-0.00048,0.00605],300:[-0.00572,0.00073],334:[0.00191,-0.00197],352:[0.0001,0.00005],365:[0.00352,-0.0045],374:[0.00455,-0.00071],377:[0.00595,0.00473],379:[-0.00028,0.00566],386:[-0.00027,-0.016],399:[-0.00495,-0.00209],401:[0.00373,-0.00379]};
    function maxApplyD(d){const a=_MAX_NORM.map(p=>({x:p.x,y:p.y,z:0}));for(const k in d)a[+k]={x:_MAX_NORM[+k].x+d[k][0],y:_MAX_NORM[+k].y+d[k][1],z:0};return a;}
    const _MAX_LOW=maxApplyD(MAX_LOW_D),_MAX_PEAK=maxApplyD(MAX_PEAK_D);
    function maxFaceL(L){return _MAX_LOW.map((p,i)=>({x:p.x+(_MAX_PEAK[i].x-p.x)*L,y:p.y+(_MAX_PEAK[i].y-p.y)*L,z:0}));}

    const _MWP=[[33,263],[133,362],[70,300],[63,293],[105,334],[46,276],[116,345],[123,352],[50,280],[187,411],[132,361],[174,399],[150,379],[172,397],[136,365],[171,396],[148,377],[176,401],[58,288]];
    const _MF=(a,b)=>Math.hypot(a.x-b.x,a.y-b.y),_ML2=(a,b)=>Math.atan2(b.y-a.y,b.x-a.x)*57.29578,_MO=(e,t,r)=>Math.max(t,Math.min(r,e));
    const _MB=(e,t,r,a,n)=>e>=t&&e<=r?10:e<t?_MO((e-a)/(t-a)*10,0,10):_MO((n-e)/(n-r)*10,0,10);
    function maxSimpleScore(p){
        const m=-((_ML2(p[33],p[133])+_ML2(p[362],p[263]))/2);let jx=0;
        for(const pr of[[172,397],[150,379],[171,396]]){const r=_MF(p[pr[0]],p[pr[1]]);if(r>jx)jx=r;}
        const h=_MF(p[234],p[454]),f=_MF(p[10],p[152]),g=jx,b=f>0?g/f:0,v=(p[133].x+p[362].x)/2,w=(p[10].y+p[152].y)/2;
        let _s=0;for(const pr of _MWP){const r=p[pr[0]],q=p[pr[1]];_s+=(h>0?Math.abs(Math.abs(r.x-v)-Math.abs(q.x-v))/h:0)+(f>0?Math.abs(Math.abs(r.y-w)-Math.abs(q.y-w))/f:0);}
        const y=Math.round((1-_MO(_s/(2*_MWP.length)/.09,0,1))*100),k=(p[133].y+p[33].y)/2,j=(p[362].y+p[263].y)/2,Nl=(k+j)/2;
        const C=Math.abs(p[0].y-Nl),S=f>0?C/f:0,E=g>0?_MF(p[234],p[454])/g:0,R=_MF(p[33],p[133]),Ih=_MF(p[159],p[145]),Mw=_MF(p[263],p[362]),Uh=_MF(p[386],p[374]);
        const z=Math.max(.2,((R>0?Ih/R:0)+(Mw>0?Uh/Mw:0))/2),H=h>0?_MF(p[133],p[362])/h:0;
        const G=_MB(m,2,6.5,-2,11),Y=_MB(b,.58,.78,.42,.96),q2=_MB(S,.27,.34,.2,.43),V=_MB(E,1.04,1.24,.86,1.48),K=_MB(z,.22,.3,.18,.43);
        const J=Math.round((.18*Y+.24*q2+.18*V+.16*K+.24*_MB(H,.22,.31,.15,.42))*10)/10;
        return _MO(.12*G+.14*Y+y/10*.24+.14*q2+.1*V+.08*K+.18*J,1.1,10);
    }
    const _MAX_TBL=[]; for(let L=0;L<=1.0001;L+=0.02)_MAX_TBL.push([L,maxSimpleScore(maxFaceL(L))]);
    const MAX_SCORE_MIN=_MAX_TBL[0][1],MAX_SCORE_MAX=_MAX_TBL[_MAX_TBL.length-1][1];
    function maxSolveL(score){
        score=Math.max(MAX_SCORE_MIN,Math.min(MAX_SCORE_MAX,score));
        for(let i=0;i<_MAX_TBL.length-1;i++){const a=_MAX_TBL[i],b=_MAX_TBL[i+1];if(score>=a[1]&&score<=b[1]){const f=(score-a[1])/((b[1]-a[1])||1);return a[0]+(b[0]-a[0])*f;}}
        return 1;
    }
    let _maxTgt=null;
    function maxNextBase(){
        let target;
        if(MAX_CFG.mode==='range'){const lo=Math.min(MAX_CFG.rangeMin,MAX_CFG.rangeMax),hi=Math.max(MAX_CFG.rangeMin,MAX_CFG.rangeMax);if(_maxTgt===null)_maxTgt=(lo+hi)/2;_maxTgt+=(Math.random()-.5)*MAX_CFG.wanderStep;if(_maxTgt<lo)_maxTgt=2*lo-_maxTgt;if(_maxTgt>hi)_maxTgt=2*hi-_maxTgt;target=_maxTgt;}
        else target=MAX_CFG.target;
        return maxFaceL(maxSolveL(target));
    }
    let _maxAspect=4/3,_maxAspT=0;
    function maxGetAspect(){const now=Date.now();if(now-_maxAspT<1000)return _maxAspect;_maxAspT=now;try{let best=document.querySelector('video.scanner-video');if(!(best&&best.videoWidth>0)){best=null;document.querySelectorAll('video').forEach(v=>{if(v.videoWidth>0&&v.videoHeight>0&&(!best||v.videoWidth*v.videoHeight>best.videoWidth*best.videoHeight))best=v;});}if(best&&best.videoWidth>0)_maxAspect=best.videoWidth/best.videoHeight;}catch(e){}return _maxAspect;}
    function maxIdealObjects(aspect){const a=aspect||maxGetAspect(),j=MAX_CFG.jitter?MAX_CFG.jitterAmt:0,cx=0.5;return maxNextBase().map(p=>({x:cx+(p.x-cx)/a+(Math.random()-.5)*j,y:p.y+(Math.random()-.5)*j,z:0}));}
    function maxEncodeLM(lms){const b=new Uint8Array(lms.length*17),dv=new DataView(b.buffer);for(let i=0;i<lms.length;i++){const o=i*17;b[o]=0x0a;b[o+1]=0x0f;b[o+2]=0x0d;dv.setFloat32(o+3,lms[i].x,true);b[o+7]=0x15;dv.setFloat32(o+8,lms[i].y,true);b[o+12]=0x1d;dv.setFloat32(o+13,lms[i].z,true);}return b;}

    let _maxHookedWasm=false,_maxHookedDFV=false,_maxHookedSign=false,_maxMF,_maxReq=null;
    const _maxTD=new TextDecoder('utf-8');
    function maxPtrToStr(mod,ptr){if(typeof ptr==='string')return ptr;const H=mod.HEAPU8;if(!H||typeof ptr!=='number')return '';let e=ptr;while(e<H.length&&H[e]!==0)e++;try{return _maxTD.decode(H.subarray(ptr,e));}catch(x){return '';}}
    function maxInstallWasm(mod){if(!mod||mod.__omg)return;mod.__omg=true;const dispatch=function(namePtr){const args=Array.prototype.slice.call(arguments,1);let name='';try{name=maxPtrToStr(mod,namePtr);}catch(e){}try{if(MAX_CFG.enabled&&name===MAX_CFG.stream&&args[0]instanceof Uint8Array){args[0]=maxEncodeLM(maxIdealObjects());}}catch(e){}try{const SL=mod.simpleListeners;if(SL&&SL[name])return SL[name].apply(null,args);}catch(e){}};try{Object.defineProperty(mod,'_wrapSimpleListenerOutput',{configurable:true,get(){return dispatch;},set(){}});}catch(e){mod._wrapSimpleListenerOutput=dispatch;}_maxHookedWasm=true;}
    function maxWrapFactory(orig){if(typeof orig!=='function'||orig.__omg)return orig;const wrapped=function(){let r;try{r=orig.apply(this,arguments);}catch(e){throw e;}Promise.resolve(r).then(m=>{try{maxInstallWasm(m);}catch(e){}}).catch(()=>{});return r;};wrapped.__omg=true;return wrapped;}
    try{Object.defineProperty(_window,'ModuleFactory',{configurable:true,get(){return _maxMF;},set(v){_maxMF=maxWrapFactory(v);}});}catch(e){}
    function maxWrapDFV(proto){if(!proto||proto.__omgD)return false;const orig=proto.detectForVideo;if(typeof orig!=='function')return false;proto.detectForVideo=function(){if(MAX_CFG.enabled){try{const vf=arguments[0];let vw=0,vh=0;try{vw=vf.videoWidth||vf.width||0;vh=vf.videoHeight||vf.height||0;}catch(e){}const res={faceLandmarks:[maxIdealObjects(vw>0&&vh>0?vw/vh:0)],faceBlendshapes:[],facialTransformationMatrixes:[]};const cb=arguments[2];if(typeof cb==='function'){cb(res);return;}return res;}catch(e){}}return orig.apply(this,arguments);};proto.__omgD=true;_maxHookedDFV=true;return true;}
    function maxChk(v){try{if(typeof v==='function'&&v.prototype&&typeof v.prototype.detectForVideo==='function')return maxWrapDFV(v.prototype);}catch(e){}return false;}
    function maxTryWebpack(){try{const key=Object.keys(_window).find(k=>/^webpackChunk/.test(k));if(!key||!Array.isArray(_window[key]))return;if(_window[key].push===Array.prototype.push)return;if(!_maxReq){_window[key].push([[],{},(r)=>{_maxReq=r;}]);}if(_maxReq&&_maxReq.c)for(const id in _maxReq.c){const ex=_maxReq.c[id]&&_maxReq.c[id].exports;if(!ex)continue;maxChk(ex);if(typeof ex==='object')for(const k in ex){try{maxChk(ex[k]);}catch(e){}}}}catch(e){}}
    let _maxTries=0;
    const _maxPoll=setInterval(()=>{_maxTries++;if(!_maxHookedDFV)maxTryWebpack();if((_maxHookedWasm||_maxHookedDFV)&&_maxTries>8)clearInterval(_maxPoll);if(_maxTries>1200)clearInterval(_maxPoll);},200);
    function maxDvOf(data){try{if(data instanceof ArrayBuffer)return new DataView(data);if(ArrayBuffer.isView(data))return new DataView(data.buffer,data.byteOffset,data.byteLength);}catch(e){}return null;}
    function maxIsFrame(dv){if(!dv||dv.byteLength<17)return false;try{if(dv.getUint8(0)!==4)return false;const s=dv.getUint16(13,true);return(17+2*s*4)===dv.byteLength;}catch(e){return false;}}
    function maxRewriteFrame(dv){const s=dv.getUint16(13,true),aspect=dv.getFloat32(9,true)||maxGetAspect(),ideal=maxIdealObjects(aspect),n=Math.min(s,ideal.length);dv.setUint8(15,255);dv.setUint8(16,2);let c=17;for(let i=0;i<n;i++){dv.setFloat32(c,ideal[i].x,true);dv.setFloat32(c+4,ideal[i].y,true);c+=8;}}
    try{if(_window.crypto&&_window.crypto.subtle&&typeof _window.crypto.subtle.sign==='function'){const _maxSign=_window.crypto.subtle.sign;_window.crypto.subtle.sign=function(alg,key,data){try{if(MAX_CFG.enabled){const dv=maxDvOf(data);if(maxIsFrame(dv)){maxRewriteFrame(dv);}}}catch(e){}return _maxSign.call(this,alg,key,data);};_maxHookedSign=true;}}catch(e){}

    // Expose config setter for the panel score inputs to call
    _window.__maxSetScore = function(target, mode, rangeMin, rangeMax) {
        if (mode !== undefined) MAX_CFG.mode = mode;
        if (target !== undefined) MAX_CFG.target = target;
        if (rangeMin !== undefined) MAX_CFG.rangeMin = rangeMin;
        if (rangeMax !== undefined) MAX_CFG.rangeMax = rangeMax;
        _maxTgt = null;
        maxSaveCfg();
    };
    _window.__maxEnabled = function(on) { MAX_CFG.enabled = on; maxSaveCfg(); };
    // ══════════════════════════════════════════════════════════════
    // END MAX SCORE ENGINE
    // ══════════════════════════════════════════════════════════════


    // ==================== LANGUAGE TRANSLATIONS ====================
    const LANGUAGES = {en:{name:'English',systemStatus:'Home',masterSwitch:'Master',powerStatus:'Power',active:'ON',inactive:'OFF',matchType:'Mode',hookStatus:'Hook',pending:'PENDING',hooked:'HOOKED',unbanClearCookies:'Unban / Clear Cookies',verificationBypass:'Verification Bypass',scoreControl:'Score',mode:'Mode',range:'Range',fixed:'Fixed',scoreMin:'Min (1-10)',scoreMax:'Max (1-10)',resultSettings:'Final',type:'Type',staticScore:'Static',dynamic:'Dynamic',target:'Target (1-10)',lowerBound:'Lower (1-10)',upperBound:'Upper (1-10)',matchmaking:'Auto',autoQueue:'Auto Queue',requestDelayMs:'Delay (ms)',autoFindNewMatch:'Auto Find New',spoofCycling:'Cycling',autoCycleCamera:'Auto Cycle Cam',cameraIntervalSec:'Cam Int (s)',autoCycleAudio:'Auto Cycle Audio',audioIntervalSec:'Audio Int (s)',convenience:'Utils',autoDismissPopups:'Auto Dismiss',autoClearCookiesOnBan:'Auto Clear on Ban',virtualCamera:'Camera',activateSpoof:'Activate',flipHorizontal:'Flip H',loopVideo:'Loop',playbackSpeed:'Speed',source:'Src',video:'Video',image:'Image',selectVideo:'Select video...',selectImage:'Select image...',textOverlay:'Text',enableText:'Enable',content:'Text',color:'Color',size:'Size',audioSpoof:'Audio',activateAudioSpoof:'Activate',selectAudio:'Select audio...',loop:'Loop',speed:'Speed',volume:'Volume',bass:'Bass',treble:'Treble',warmth:'Warmth',status:'Status',inactiveStatus:'Inactive',activeStatus:'Active',overlayEffects:'Overlays',banOverlay:'Ban',loadingOverlay:'Loading',noneOverlay:'None',developer:'Dev',consoleLogs:'Console Logs',hotkeys:'Hotkeys',openPanel:'Open Panel',streamProof:'Stream',panicKey:'Panic Key',mobileTripleTap:'Mobile: Triple-tap',showControlBar:'Show Control Bar',hideAllNow:'Hide All',iframeModeObs:'Iframe (OBS)',hidesGui:'Hide GUI from capture',branding:'Brand',displayBadge:'Show Badge',visibility:'Opacity',appearance:'Theme',customization:'Custom',accentColor:'Accent',language:'Language',credits:'Credits',developers:'Devs'}};
    let currentLang = 'en';

    const DEFAULT_CONFIG = {enabled:true,scoreEnabled:true,scoreMode:'range',fixedScore:94000,scoreRangeMin:85000,scoreRangeMax:95000,resultEnabled:true,myFinalScore:'94000',finalScoreMode:'fixed',finalScoreRangeMin:85000,finalScoreRangeMax:97000,holdBtnSize:54,debug:true,wmAlpha:20,wmFontSize:9,wmPaddingH:14,wmPaddingV:6,wmBorder:true,wmBg:true,theme:'midnight',queueDelay:1000,autoCamInterval:5,autoAudioInterval:5,showControlBar:false,autoQueue:false,accentColor:'#6366f1',language:'en',panelWidth:300,panelHeight:null};
    function loadConfig(){try{const saved=localStorage.getItem('cheatmoggle _config');if(saved)return{...DEFAULT_CONFIG,...JSON.parse(saved)};}catch(e){}return{...DEFAULT_CONFIG};}
    function saveConfig(){try{localStorage.setItem('cheatmoggle _config',JSON.stringify(CONFIG));}catch(e){}}
    const CONFIG=loadConfig();
    currentLang=CONFIG.language||'en';

    // Wire the panel score inputs to update MAX engine when changed
    // (called after buildMenu sets up the score inputs)
    function syncMaxScoreFromConfig() {
        const finalVal = parseInt(CONFIG.myFinalScore) / 10000;
        const mode = CONFIG.finalScoreMode === 'range' ? 'range' : 'fixed';
        const rMin = CONFIG.finalScoreRangeMin / 10000;
        const rMax = CONFIG.finalScoreRangeMax / 10000;
        if (_window.__maxSetScore) _window.__maxSetScore(finalVal, mode, rMin, rMax);
        if (_window.__maxEnabled) _window.__maxEnabled(CONFIG.scoreEnabled && CONFIG.enabled);
    }

    let _lastSpoofedScore = null;
    let _lastLogTime = 0;
    let _lastDcLogTime = 0;
    let _dynamicCap = null;
    let _scoreFluctuationInterval = null;
    let _lockedFinalTarget = null;
    let _lastFinalMode = null;
    let _finalApplied = false;
    let _isRanked = window.location.pathname.startsWith('/ranked');
    let _matchStartTime = null;
    let _finalScoreAppliedThisMatch = false;
    let playerMapping = null;
    let _lkRoomHooked = false;
    let _lkScanAttempts = 0;

    const _origPushState = history.pushState;
    history.pushState = function(...args){_origPushState.apply(this,args);_isRanked=window.location.pathname.startsWith('/ranked');};
    window.addEventListener('popstate',()=>{_isRanked=window.location.pathname.startsWith('/ranked');});

    function log(...args){if(CONFIG.debug)console.log('[cheatmoggle]',...args);}

    function stripInvisible(str){return str.replace(/[\u200B-\u200D\u200E\u200F\u202A-\u202E\u2060-\u2064\u206A-\u206F\uFEFF\u00AD\u034F\u115F\u1160\u17B4\u17B5\u180B-\u180D\u3164\uFFA0]/gu,'');}

    function tryDecode(data){try{const bytes=data instanceof ArrayBuffer?new Uint8Array(data):data;if(!(bytes instanceof Uint8Array))return null;const rawText=new TextDecoder().decode(bytes);const text=stripInvisible(rawText);const m=text.match(/\{[^}]+\}/);if(m)try{return{json:JSON.parse(m[0]),bytes,fullText:rawText,cleanText:text};}catch(e){}try{return{json:JSON.parse(text),bytes,fullText:rawText,cleanText:text};}catch(e){}let depth=0,start=-1;for(let i=0;i<text.length;i++){if(text[i]==='{'){if(start===-1)start=i;depth++;}else if(text[i]==='}'){depth--;if(depth===0&&start!==-1){try{return{json:JSON.parse(text.substring(start,i+1)),bytes,fullText:rawText,cleanText:text};}catch(e){start=-1;}}}}}catch(e){}return null;}

    function rewriteBytes(originalBytes,oldJSON,newJSON){try{const rawText=new TextDecoder().decode(originalBytes);const oldQ=String(oldJSON.q);const newQ=String(newJSON.q);const qPattern=new RegExp('("q"\\s*:\\s*)([\\u200B-\\u200D\\uFEFF\\u00AD]*)('+(oldQ.replace(/\./g,'\\.'))+')', 'u');if(qPattern.test(rawText)){const newText=rawText.replace(qPattern,'$1$2'+newQ);const encoded=new TextEncoder().encode(newText);log(`[rewriteBytes] q:${oldQ}→${newQ}`);return encoded;}log(`[rewriteBytes MISS] could not find q:${oldQ}`);return originalBytes;}catch(e){return originalBytes;}}

    const _origDcSend=_window.RTCDataChannel?_window.RTCDataChannel.prototype.send:RTCDataChannel.prototype.send;
    function _hookDataChannel(dc){if(dc.__cmHooked)return;const origSend=_origDcSend.bind(dc);dc.send=function(data){const parsed=tryDecode(data);if(parsed?.json){const{json,bytes}=parsed;const isNormalFrame=(typeof json.p!=='undefined')&&(typeof json.q!=='undefined')&&!json.type;const isRankedFrame=isNormalFrame&&json.m!==undefined;if(isNormalFrame||isRankedFrame){if(json.q>0){if(!CONFIG.scoreEnabled)return origSend.call(this,data);const modified={...json};const newScore=_getFinalTarget();modified.q=newScore;if(modified.payload&&typeof modified.payload.overall!=='undefined'){modified.payload.overall=newScore/10000;}const rewritten=rewriteBytes(bytes,json,modified);_lastSpoofedScore=newScore/10000;return origSend.call(this,rewritten);}}}return origSend.call(this,data);};dc.__cmHooked=true;}

    const _RTC=_window.RTCPeerConnection||RTCPeerConnection;
    const _DCProto=(_window.RTCDataChannel||RTCDataChannel).prototype;
    const _dcProtoSend=_DCProto.send;
    _DCProto.send=function(data){if(!this.__cmHooked)_hookDataChannel(this);return _dcProtoSend.call(this,data);};
    const _origCreateDC=_RTC.prototype.createDataChannel;
    if(_origCreateDC){_RTC.prototype.createDataChannel=function(label,options){const dc=_origCreateDC.call(this,label,options);_hookDataChannel(dc);return dc;};}

    const origFetch=_window.fetch;
    _window.fetch=async function(url,options){const urlStr=typeof url==='string'?url:(url?.url||'');if(urlStr.includes('/api/match/finalize')||urlStr.includes('/api/ranked/finalize')){if(options?.body&&CONFIG.resultEnabled){try{const body=JSON.parse(options.body);const finalTarget=_getFinalTarget();const finalFloat=finalTarget/10000;const scoreObj=body.u||body.i;if(scoreObj&&scoreObj.e!==undefined){scoreObj.e=String(finalTarget);}options={...options,body:JSON.stringify(body)};}catch(e){}}}return origFetch.call(this,url,options);};

    function _getFinalTarget(){if(_lockedFinalTarget===null||_lastFinalMode!==CONFIG.finalScoreMode){_finalApplied=false;_lastFinalMode=CONFIG.finalScoreMode;if(CONFIG.finalScoreMode==='range'){_lockedFinalTarget=Math.round(CONFIG.finalScoreRangeMin+Math.random()*(CONFIG.finalScoreRangeMax-CONFIG.finalScoreRangeMin));}else{_lockedFinalTarget=parseInt(CONFIG.myFinalScore);}}if(CONFIG.finalScoreMode==='fixed'){return parseInt(CONFIG.myFinalScore);}return _lockedFinalTarget;}

    const TIER_MAP=[{name:'Adam',emoji:'🍎',hexColor:'#ef4444',textShadow:'0 0 12px rgba(239,68,68,0.95)',min:9.7},{name:'Slayer',emoji:'☠️',hexColor:'#f472b6',textShadow:'0 0 12px rgba(244,114,182,0.9)',min:9.5},{name:'Chad',emoji:'👑',hexColor:'#fb923c',textShadow:'0 0 10px rgba(251,146,60,0.8)',min:8.9},{name:'Chadlite',emoji:'⚜️',hexColor:'#facc15',textShadow:'0 0 8px rgba(250,204,21,0.8)',min:8.3},{name:'HTN',emoji:'🌟',hexColor:'#a3e635',textShadow:'0 0 8px rgba(163,230,53,0.8)',min:7.0},{name:'MTN',emoji:'⭐',hexColor:'#86efac',textShadow:'0 0 6px rgba(134,239,172,0.7)',min:5.6},{name:'LTN',emoji:'🌙',hexColor:'#34d399',textShadow:'0 0 6px rgba(52,211,153,0.6)',min:3.1},{name:'Sub3',emoji:'🦀',hexColor:'#b45309',textShadow:'0 0 6px rgba(180,83,9,0.7)',min:0.1}];
    function getTierForScore(score){for(const tier of TIER_MAP){if(score>=tier.min)return tier;}return TIER_MAP[TIER_MAP.length-1];}

    function spoofPanel(){if(_lastSpoofedScore===null)return;const displayScore=_lastSpoofedScore;const tier=getTierForScore(displayScore);try{const targetStr=displayScore.toFixed(1);const scoreSpans=[];document.querySelectorAll('span.font-mono').forEach(el=>{const v=el.textContent.trim();if(!/^\d+\.\d+$/.test(v))return;if(parseFloat(v)<0.1||parseFloat(v)>10)return;scoreSpans.push(el);});if(scoreSpans.length>=1){const ours=scoreSpans[0];if(ours.textContent.trim()!==targetStr){ours.textContent=targetStr;}}}catch(e){}}

    const _bodyObserver=new MutationObserver(()=>{try{spoofPanel();}catch(e){}});
    document.addEventListener('DOMContentLoaded',()=>{if(document.body)_bodyObserver.observe(document.body,{childList:true,subtree:true});});
    setInterval(()=>{try{spoofPanel();}catch(e){}},100);

    // WebSocket hook
    const OrigWS=_window.WebSocket;
    _window.WebSocket=function(...args){const ws=new OrigWS(...args);const _rawSend=ws.send.bind(ws);ws.addEventListener('message',function(event){if(typeof event.data==='string'){if(event.data.includes('"live_score"')){try{const parsed=JSON.parse(event.data);if(parsed.type==='live_score'){const target=_getFinalTarget()/10000;_lastSpoofedScore=target;try{spoofPanel();}catch(e){}}}catch(e){}}}});return ws;};
    Object.setPrototypeOf(_window.WebSocket,OrigWS);
    _window.WebSocket.prototype=OrigWS.prototype;

    // Camera bypass
    const _trueOriginalGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
    let _camSpoofActive=false;
    let _camStream=null;
    navigator.mediaDevices.getUserMedia=async function(constraints){if(_camSpoofActive&&_camStream&&constraints&&(constraints.video||constraints.video===true)){if(constraints.audio){try{const r=await _trueOriginalGetUserMedia({audio:constraints.audio});return new MediaStream([..._camStream.getVideoTracks(),...r.getAudioTracks()]);}catch(e){}}return _camStream;}return _trueOriginalGetUserMedia(constraints);};

    window._mogPCs=window._mogPCs||[];
    const _OrigPC2=window.RTCPeerConnection;
    window.RTCPeerConnection=function(...args){const pc=new _OrigPC2(...args);window._mogPCs.push(pc);pc.addEventListener('datachannel',function(event){_hookDataChannel(event.channel);});const _origCreateDC2=pc.createDataChannel.bind(pc);pc.createDataChannel=function(label,options){const dc=_origCreateDC2(label,options);_hookDataChannel(dc);return dc;};pc.addEventListener('connectionstatechange',()=>{if(pc.connectionState==='closed'){const idx=window._mogPCs.indexOf(pc);if(idx>-1)window._mogPCs.splice(idx,1);}});return pc;};
    Object.setPrototypeOf(window.RTCPeerConnection,_OrigPC2);
    window.RTCPeerConnection.prototype=_OrigPC2.prototype;

    // Themes (simplified - keeping midnight + a few)
    const THEMES={midnight:{name:'Midnight',primary:'#6366f1',primaryRgb:'99,102,241',secondary:'#8b5cf6',accent:'#22d3ee',accentRgb:'34,211,238',success:'#10b981',warning:'#f59e0b',danger:'#ef4444',bgDark:'#0a0a0f',bgCard:'#12121a',bgElevated:'#1a1a24',border:'rgba(255,255,255,0.08)',text:'#e4e4e7',textMuted:'#71717a'},neon:{name:'Neon',primary:'#00ff88',primaryRgb:'0,255,136',secondary:'#00cc6a',accent:'#7dffb3',accentRgb:'125,255,179',success:'#00ff88',warning:'#ffcc00',danger:'#ff4444',bgDark:'#0a0f0c',bgCard:'#0d1a12',bgElevated:'#132218',border:'rgba(0,255,136,0.15)',text:'#e0ffe8',textMuted:'#7da88a'},crimson:{name:'Crimson',primary:'#dc2626',primaryRgb:'220,38,38',secondary:'#f43f5e',accent:'#fb7185',accentRgb:'251,113,133',success:'#10b981',warning:'#f59e0b',danger:'#ef4444',bgDark:'#0f0505',bgCard:'#1a0a0a',bgElevated:'#241010',border:'rgba(255,100,100,0.1)',text:'#fecaca',textMuted:'#a8a29e'}};

    function hexToRgb(hex){const r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);return r?{r:parseInt(r[1],16),g:parseInt(r[2],16),b:parseInt(r[3],16)}:null;}
    function applyAccentColor(color){document.documentElement.style.setProperty('--cm-primary',color);const rgb=hexToRgb(color);if(rgb)document.documentElement.style.setProperty('--cm-primary-rgb',`${rgb.r},${rgb.g},${rgb.b}`);CONFIG.accentColor=color;saveConfig();}
    function applyTheme(themeName){const theme=THEMES[themeName]||THEMES.midnight;CONFIG.theme=themeName;document.documentElement.style.setProperty('--cm-primary',theme.primary);document.documentElement.style.setProperty('--cm-primary-rgb',theme.primaryRgb);document.documentElement.style.setProperty('--cm-secondary',theme.secondary);document.documentElement.style.setProperty('--cm-accent',theme.accent);document.documentElement.style.setProperty('--cm-bg-dark',theme.bgDark);document.documentElement.style.setProperty('--cm-bg-card',theme.bgCard);document.documentElement.style.setProperty('--cm-bg-elevated',theme.bgElevated);document.documentElement.style.setProperty('--cm-border',theme.border);document.documentElement.style.setProperty('--cm-text',theme.text);document.documentElement.style.setProperty('--cm-text-muted',theme.textMuted);saveConfig();}

    function buildMenu(){
        if(document.getElementById('cm-root'))return;

        const style=document.createElement('style');
        style.textContent=`:root{--cm-primary:#6366f1;--cm-primary-rgb:99,102,241;--cm-secondary:#8b5cf6;--cm-accent:#22d3ee;--cm-success:#10b981;--cm-warning:#f59e0b;--cm-danger:#ef4444;--cm-bg-dark:#0a0a0f;--cm-bg-card:#12121a;--cm-bg-elevated:#1a1a24;--cm-border:rgba(255,255,255,0.08);--cm-text:#e4e4e7;--cm-text-muted:#71717a;}
        #cm-toggle-btn{position:fixed;top:16px;right:16px;z-index:999999;width:42px;height:42px;border-radius:50%;background:radial-gradient(circle at 30% 25%,rgba(var(--cm-primary-rgb),0.35),rgba(0,0,0,0.92) 72%);border:2px solid var(--cm-primary);cursor:grab;display:flex;align-items:center;justify-content:center;box-shadow:0 0 18px rgba(var(--cm-primary-rgb),0.55);transition:transform 0.22s,box-shadow 0.22s;user-select:none;}
        #cm-toggle-btn:hover{transform:scale(1.12);}
        #cm-root{position:fixed;top:70px;right:16px;z-index:999998;width:360px;min-height:460px;background:var(--cm-bg-dark);border-radius:14px;font-family:Inter,-apple-system,sans-serif;color:var(--cm-text);border:1px solid var(--cm-border);box-shadow:0 0 50px rgba(var(--cm-primary-rgb),0.12),0 20px 50px rgba(0,0,0,0.5);display:none;opacity:0;overflow:auto;transition:opacity 0.25s,transform 0.25s;transform:translateY(-10px) scale(0.98);resize:both;min-width:260px;}
        #cm-root.visible{display:flex;flex-direction:column;opacity:1;transform:translateY(0) scale(1);}
        .cm-header{padding:12px 14px 10px;background:linear-gradient(180deg,rgba(var(--cm-primary-rgb),0.08),transparent);border-bottom:1px solid var(--cm-border);cursor:grab;}
        .cm-title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;}
        .cm-logo{display:flex;align-items:center;gap:6px;}
        .cm-title{font-size:14px;font-weight:800;background:linear-gradient(135deg,#fff,var(--cm-accent));-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:-.02em;}
        .cm-free-badge{background:linear-gradient(135deg,#10b981,#059669);color:#fff;font-size:8px;font-weight:800;padding:2px 8px;border-radius:20px;margin-left:6px;letter-spacing:.06em;box-shadow:0 0 8px rgba(16,185,129,0.5);animation:cm-gold-glow 2.5s ease-in-out infinite;}
        @keyframes cm-gold-glow{0%,100%{box-shadow:0 0 5px rgba(16,185,129,0.4),0 0 10px rgba(16,185,129,0.15);}50%{box-shadow:0 0 12px rgba(16,185,129,0.8),0 0 22px rgba(16,185,129,0.3);}}
        .cm-tabs{display:flex;flex-wrap:wrap;gap:2px;background:var(--cm-bg-card);padding:3px;border-radius:8px;margin:0 14px 4px;}
        .cm-tab{flex:1;min-width:36px;padding:6px 3px;border-radius:6px;font-size:9px;font-weight:600;text-align:center;cursor:pointer;color:var(--cm-text-muted);background:transparent;border:none;transition:all .15s;white-space:nowrap;}
        .cm-tab:hover{color:var(--cm-text);}
        .cm-tab.active{background:var(--cm-bg-elevated);color:#fff;box-shadow:0 1px 4px rgba(0,0,0,0.3);}
        .cm-body{padding:12px;overflow-y:auto;flex:1;}
        .cm-panel{display:none;} .cm-panel.active{display:block;}
        .cm-card{background:var(--cm-bg-card);border-radius:10px;padding:10px 12px;border:1px solid var(--cm-border);margin-bottom:10px;}
        .cm-row{display:flex;align-items:center;justify-content:space-between;padding:7px 0;border-bottom:1px solid var(--cm-border);}
        .cm-row:last-child{border-bottom:none;}
        .cm-label{font-size:11px;font-weight:500;color:var(--cm-text);}
        .cm-toggle{position:relative;width:32px;height:18px;cursor:pointer;}
        .cm-toggle input{opacity:0;width:0;height:0;}
        .cm-toggle-track{position:absolute;inset:0;border-radius:11px;background:var(--cm-bg-elevated);border:1px solid var(--cm-border);transition:all 0.25s;}
        .cm-toggle input:checked+.cm-toggle-track{background:var(--cm-primary);}
        .cm-toggle-thumb{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,0.3);transition:all 0.25s;}
        .cm-toggle input:checked~.cm-toggle-thumb{left:16px;}
        .cm-number-control{display:flex;align-items:center;gap:4px;}
        .cm-number-btn{background:var(--cm-bg-elevated);border:1px solid var(--cm-border);border-radius:4px;width:22px;height:22px;font-size:12px;font-weight:700;cursor:pointer;color:var(--cm-text);}
        .cm-number-input{width:60px;text-align:center;background:var(--cm-bg-elevated);border:1px solid var(--cm-border);border-radius:4px;padding:4px;font-size:11px;color:var(--cm-text);}
        .cm-btn-group{display:flex;gap:3px;background:var(--cm-bg-elevated);padding:2px;border-radius:6px;}
        .cm-btn-opt{padding:4px 8px;border-radius:4px;font-size:9px;font-weight:700;cursor:pointer;background:transparent;color:var(--cm-text-muted);border:none;}
        .cm-btn-opt.active{background:var(--cm-primary);color:#fff;}
        .cm-preview{text-align:center;padding:12px;background:rgba(var(--cm-primary-rgb),0.06);border-radius:10px;border:1px solid rgba(var(--cm-primary-rgb),0.15);}
        .cm-preview-score{font-size:32px;font-weight:800;font-family:monospace;}
        .cm-preview-tier{font-size:11px;font-weight:700;margin-top:4px;}
        .cm-section-title{font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--cm-text-muted);margin-bottom:4px;display:flex;align-items:center;justify-content:space-between;}
        .cm-section-toggle{transform:scale(0.7);}
        .cm-section-disabled{opacity:0.4;pointer-events:none;}
        .cm-file-picker{display:flex;align-items:center;gap:8px;padding:8px;background:var(--cm-bg-elevated);border:1px dashed var(--cm-border);border-radius:6px;cursor:pointer;}
        .cm-file-name{font-size:10px;color:var(--cm-text-muted);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        .cm-file-name.selected{color:var(--cm-success);}
        input[type=range].cm-slider{width:100%;-webkit-appearance:none;height:4px;background:var(--cm-bg-elevated);border-radius:4px;outline:none;cursor:pointer;}
        input[type=range].cm-slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--cm-primary);cursor:pointer;}
        .cm-slider-row{display:flex;flex-direction:column;gap:2px;padding:4px 0;border-bottom:1px solid var(--cm-border);}
        .cm-slider-row:last-child{border-bottom:none;}
        .cm-slider-header{display:flex;justify-content:space-between;align-items:center;}
        .cm-slider-label{font-size:9px;font-weight:500;}
        .cm-slider-value{font-size:9px;font-weight:600;color:var(--cm-text);background:var(--cm-bg-elevated);border:1px solid var(--cm-border);padding:1px 4px;border-radius:3px;}
        .cm-input{background:var(--cm-bg-elevated);border:1px solid var(--cm-border);border-radius:6px;padding:6px 10px;font-size:11px;color:var(--cm-text);outline:none;}
        .cm-select{background:var(--cm-bg-elevated);border:1px solid var(--cm-border);border-radius:6px;padding:6px 10px;font-size:11px;color:var(--cm-text);outline:none;cursor:pointer;}
        .cm-select option{background:var(--cm-bg-dark);color:var(--cm-text);}
        .cm-panic-btn{width:100%;padding:6px 10px;font-size:9px;font-weight:600;border:1px solid var(--cm-danger);border-radius:4px;background:rgba(239,68,68,0.1);color:var(--cm-danger);cursor:pointer;}
        .cm-panic-btn:hover{background:var(--cm-danger);color:#fff;}
        .cm-score-input{-moz-appearance:textfield;} .cm-score-input::-webkit-outer-spin-button,.cm-score-input::-webkit-inner-spin-button{-webkit-appearance:none;}
        #cm-watermark{position:fixed;bottom:16px;right:16px;z-index:999990;padding:6px 12px;border-radius:8px;background:rgba(var(--cm-primary-rgb),0.1);border:1px solid rgba(var(--cm-primary-rgb),0.2);font-size:9px;font-weight:600;color:rgba(255,255,255,0.35);letter-spacing:0.05em;cursor:grab;}`;
        document.head.appendChild(style);
        applyTheme(CONFIG.theme||'midnight');
        applyAccentColor(CONFIG.accentColor||'#6366f1');

        const btn=document.createElement('button');
        btn.id='cm-toggle-btn';
        btn.innerHTML='<img src="https://cdn.discordapp.com/icons/1508543746214465648/44b1c062230c1103016d7928805df398.webp?size=1024" style="width:26px;height:26px;border-radius:4px;object-fit:cover;">';
        document.body.appendChild(btn);

        const root=document.createElement('div');
        root.id='cm-root';
        if(CONFIG.panelWidth)root.style.width=CONFIG.panelWidth+'px';
        else root.style.width='360px';
        root.innerHTML=`
<div class="cm-header">
  <div class="cm-title-row">
    <div class="cm-logo"><span class="cm-title">cheatmoggle</span><span class="cm-free-badge">FREE</span></div>
    <a href="https://discord.gg/EGf45Q9zFu" target="_blank" style="color:var(--cm-accent);font-size:10px;text-decoration:none;">Discord</a>
  </div>
  <div class="cm-tabs">
    <button class="cm-tab active" data-tab="home">Home</button>
    <button class="cm-tab" data-tab="score">Score</button>
    <button class="cm-tab" data-tab="spoofer">Spoofer</button>
    <button class="cm-tab" data-tab="automation">Auto</button>
    <button class="cm-tab" data-tab="camera">Camera</button>
    <button class="cm-tab" data-tab="settings">Settings</button>
    <button class="cm-tab" data-tab="credits">Credits</button>
  </div>
</div>
<div class="cm-body">
  <!-- HOME -->
  <div class="cm-panel active" data-panel="home">
    <div class="cm-card">
      <div class="cm-row"><span class="cm-label">Master Switch</span><label class="cm-toggle"><input type="checkbox" id="cm-enable-toggle" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
      <div class="cm-row"><span class="cm-label">Power Status</span><span style="font-size:10px;color:var(--cm-success)" id="cm-enabled-val">ACTIVE</span></div>
      <div class="cm-row"><span class="cm-label">Match Type</span><span style="font-size:10px;" id="cm-mode-val">NORMAL</span></div>
    </div>
    <div style="text-align:center;padding:8px;font-size:9px;color:var(--cm-text-muted);">MAX engine: <span id="cm-max-status" style="color:var(--cm-success);">arming...</span></div>
  </div>
  <!-- SPOOFER -->
  <div class="cm-panel" data-panel="spoofer">
    <div class="cm-card">
      <div class="cm-row"><span class="cm-label">Unban / Clear Cookies</span><button class="cm-panic-btn" id="cm-clearcookies-btn" style="width:auto;padding:4px 10px;font-size:9px;">Clear</button></div>
      <div class="cm-row" style="border-bottom:none;"><span class="cm-label">Verif Bypass</span><button class="cm-panic-btn" id="cm-verifbypass-btn" style="width:auto;padding:4px 10px;font-size:9px;background:rgba(34,211,238,0.1);border-color:var(--cm-accent);color:var(--cm-accent);">Activate</button></div>
    </div>
  </div>
  <!-- SCORE -->
  <div class="cm-panel" data-panel="score">
    <div style="margin-bottom:8px;">
      <div class="cm-section-title"><span>Score Control</span><label class="cm-toggle cm-section-toggle"><input type="checkbox" id="cm-score-enabled" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
      <div class="cm-card" id="cm-score-content">
        <div class="cm-row"><span class="cm-label">Mode</span><div class="cm-btn-group"><button class="cm-btn-opt active" data-smode="range">Range</button><button class="cm-btn-opt" data-smode="fixed">Fixed</button></div></div>
        <div id="cm-score-fixed" style="display:none;"><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Target (1-10)</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-fixed-score">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-fixed-score" min="1" max="10" step="0.1" value="9.4"><button class="cm-number-btn" data-inc="cm-fixed-score">+</button></div></div></div></div>
        <div id="cm-score-range"><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Min</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-score-min">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-score-min" min="1" max="10" step="0.1" value="8.5"><button class="cm-number-btn" data-inc="cm-score-min">+</button></div></div></div><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Max</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-score-max">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-score-max" min="1" max="10" step="0.1" value="9.5"><button class="cm-number-btn" data-inc="cm-score-max">+</button></div></div></div></div>
      </div>
    </div>
    <div>
      <div class="cm-section-title"><span>Final Score</span><label class="cm-toggle cm-section-toggle"><input type="checkbox" id="cm-result-enabled" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
      <div class="cm-card" id="cm-result-content">
        <div class="cm-row"><span class="cm-label">Type</span><div class="cm-btn-group"><button class="cm-btn-opt active" data-fmode="fixed">Static</button><button class="cm-btn-opt" data-fmode="range">Dynamic</button></div></div>
        <div id="cm-final-fixed"><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Target</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-final-score">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-final-score" min="1" max="10" step="0.1" value="9.4"><button class="cm-number-btn" data-inc="cm-final-score">+</button></div></div></div></div>
        <div id="cm-final-range" style="display:none;"><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Min</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-final-range-min">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-final-range-min" min="1" max="10" step="0.1" value="8.5"><button class="cm-number-btn" data-inc="cm-final-range-min">+</button></div></div></div><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Max</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-final-range-max">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-final-range-max" min="1" max="10" step="0.1" value="9.7"><button class="cm-number-btn" data-inc="cm-final-range-max">+</button></div></div></div></div>
      </div>
      <div class="cm-preview"><div class="cm-preview-score" id="cm-score-preview-num" style="color:#f472b6">9.6</div><div class="cm-preview-tier" id="cm-score-preview-tier" style="color:#f472b6">☠️ Slayer</div></div>
    </div>
  </div>
  <!-- AUTOMATION -->
  <div class="cm-panel" data-panel="automation">
    <div class="cm-card">
      <div class="cm-row"><span class="cm-label">Auto Queue</span><label class="cm-toggle"><input type="checkbox" id="cm-autoqueuetoggle"><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
      <div class="cm-row"><span class="cm-label">Delay (ms)</span><input type="number" class="cm-input" id="cm-queue-delay" min="100" max="60000" step="100" value="1000" style="width:80px;"></div>
      <div class="cm-row" style="border-bottom:none;"><span class="cm-label">Auto Find New Match</span><label class="cm-toggle"><input type="checkbox" id="cm-autofindnew-toggle" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
    </div>
  </div>
  <!-- CAMERA -->
  <div class="cm-panel" data-panel="camera">
    <div class="cm-card">
      <div class="cm-row"><span class="cm-label">Activate Spoof</span><label class="cm-toggle"><input type="checkbox" id="cm-camspoof-toggle"><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
      <div class="cm-row"><span class="cm-label">Loop Video</span><label class="cm-toggle"><input type="checkbox" id="cm-camloop-toggle" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
    </div>
    <div class="cm-card">
      <div class="cm-btn-group" style="margin-bottom:6px;"><button class="cm-btn-opt active" data-src="video">Video</button><button class="cm-btn-opt" data-src="image">Image</button></div>
      <div class="cm-file-picker" id="cm-video-picker"><span class="cm-file-name" id="cm-video-name">Select video file...</span></div>
      <div class="cm-file-picker" id="cm-image-picker" style="display:none;"><span class="cm-file-name" id="cm-image-name">Select image file...</span></div>
    </div>
  </div>
  <!-- SETTINGS -->
  <div class="cm-panel" data-panel="settings">
    <div class="cm-card">
      <div class="cm-row"><span class="cm-label">Console Logs</span><label class="cm-toggle"><input type="checkbox" id="cm-debug-toggle" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
      <div class="cm-row"><span class="cm-label">Open Panel Key</span><input type="text" class="cm-input" id="cm-menukey" value="h" style="width:50px;"></div>
      <div class="cm-row" style="border-bottom:none;"><span class="cm-label">Panic Key</span><input type="text" class="cm-input" id="cm-panic-key" value="p" style="width:50px;"></div>
    </div>
    <div class="cm-card" style="margin-top:8px;">
      <div class="cm-section-title">Theme</div>
      <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:4px;" id="cm-theme-grid"></div>
    </div>
    <div class="cm-card" style="margin-top:8px;">
      <div class="cm-row"><span class="cm-label">Accent Color</span><input type="color" id="cm-accent-color" value="${CONFIG.accentColor||'#6366f1'}" style="width:50px;height:30px;"></div>
    </div>
  </div>
  <!-- CREDITS -->
  <div class="cm-panel" data-panel="credits">
    <div class="cm-card">
      <div class="cm-row"><span class="cm-label" style="font-size:9px;color:var(--cm-text-muted);text-transform:uppercase;letter-spacing:.08em;">Developers</span></div>
      <div class="cm-row"><span style="font-size:11px;font-weight:700;color:var(--cm-primary);">@vp4q</span></div>
      <div class="cm-row"><span style="font-size:11px;font-weight:700;color:var(--cm-text);">A5f3</span></div>
      <div class="cm-row"><span style="font-size:11px;font-weight:700;color:var(--cm-text);">C6</span><span style="font-size:9px;color:var(--cm-text-muted);">real owner</span></div>
      <div class="cm-row"><span style="font-size:11px;font-weight:700;color:var(--cm-text);">Real C6</span><span style="font-size:9px;color:var(--cm-text-muted);">no owner</span></div>
      <div class="cm-row" style="border-bottom:none;"><span style="font-size:11px;font-weight:700;color:var(--cm-text);">Greed</span></div>
    </div>
    <div class="cm-card" style="margin-top:8px;">
      <div class="cm-row" style="border-bottom:none;"><span style="font-size:9px;color:var(--cm-text-muted);line-height:1.5;">If you paid for this cheat you got scammed. All of it was made by vp4q and a5f3.</span></div>
    </div>
  </div>
</div>`;
        document.body.appendChild(root);

        // MAX status updater
        setInterval(()=>{const el=document.getElementById('cm-max-status');if(!el)return;const hooks=(_maxHookedWasm?'W':'')+(_maxHookedDFV?'D':'')+(_maxHookedSign?'S':'');el.textContent=hooks?'active ['+hooks+']':'arming...';el.style.color=hooks?'var(--cm-success)':'var(--cm-warning)';},1000);

        // Toggle btn
        btn.addEventListener('click',()=>root.classList.toggle('visible'));

        // Drag btn
        let _bd=false,_bdx=0,_bdy=0;
        btn.addEventListener('mousedown',e=>{_bd=true;const r=btn.getBoundingClientRect();_bdx=e.clientX-r.left;_bdy=e.clientY-r.top;e.preventDefault();});
        document.addEventListener('mousemove',e=>{if(!_bd)return;btn.style.left=(e.clientX-_bdx)+'px';btn.style.top=(e.clientY-_bdy)+'px';btn.style.right='auto';});
        document.addEventListener('mouseup',()=>{_bd=false;});

        // Drag menu
        let _md=false,_mdx=0,_mdy=0;
        const _mh=root.querySelector('.cm-header');
        _mh.addEventListener('mousedown',e=>{if(e.target.matches('input,button,label,a'))return;_md=true;const r=root.getBoundingClientRect();_mdx=e.clientX-r.left;_mdy=e.clientY-r.top;e.preventDefault();});
        document.addEventListener('mousemove',e=>{if(!_md)return;root.style.left=(e.clientX-_mdx)+'px';root.style.top=(e.clientY-_mdy)+'px';root.style.right='auto';});
        document.addEventListener('mouseup',()=>{_md=false;});

        // Tabs
        root.querySelectorAll('.cm-tab').forEach(tab=>{tab.addEventListener('click',function(){root.querySelectorAll('.cm-tab').forEach(t=>t.classList.remove('active'));root.querySelectorAll('.cm-panel').forEach(p=>p.classList.remove('active'));this.classList.add('active');root.querySelector(`[data-panel="${this.dataset.tab}"]`).classList.add('active');});});

        // Number +/- buttons
        document.querySelectorAll('.cm-number-btn[data-dec]').forEach(b=>{b.addEventListener('click',()=>{const inp=document.getElementById(b.dataset.dec);if(!inp)return;let v=parseFloat(inp.value),s=parseFloat(inp.step)||0.1;inp.value=Math.max(parseFloat(inp.min)||1,v-s).toFixed(1);inp.dispatchEvent(new Event('input',{bubbles:true}));});});
        document.querySelectorAll('.cm-number-btn[data-inc]').forEach(b=>{b.addEventListener('click',()=>{const inp=document.getElementById(b.dataset.inc);if(!inp)return;let v=parseFloat(inp.value),s=parseFloat(inp.step)||0.1;inp.value=Math.min(parseFloat(inp.max)||10,v+s).toFixed(1);inp.dispatchEvent(new Event('input',{bubbles:true}));});});

        // Enable toggle
        document.getElementById('cm-enable-toggle').addEventListener('change',function(){CONFIG.enabled=this.checked;document.getElementById('cm-enabled-val').textContent=this.checked?'ACTIVE':'INACTIVE';if(_window.__maxEnabled)_window.__maxEnabled(this.checked&&CONFIG.scoreEnabled);saveConfig();});

        // Score mode
        function setScoreModeUI(mode){CONFIG.scoreMode=mode;document.querySelectorAll('[data-smode]').forEach(b=>b.classList.toggle('active',b.dataset.smode===mode));document.getElementById('cm-score-fixed').style.display=mode==='fixed'?'block':'none';document.getElementById('cm-score-range').style.display=mode==='range'?'block':'none';saveConfig();}
        document.querySelectorAll('[data-smode]').forEach(b=>b.addEventListener('click',function(){setScoreModeUI(this.dataset.smode);}));
        document.getElementById('cm-fixed-score').addEventListener('input',function(){CONFIG.fixedScore=Math.round(parseFloat(this.value)*10000)||94000;syncMaxScoreFromConfig();saveConfig();});
        document.getElementById('cm-score-min').addEventListener('input',function(){CONFIG.scoreRangeMin=Math.round(parseFloat(this.value)*10000)||85000;syncMaxScoreFromConfig();saveConfig();});
        document.getElementById('cm-score-max').addEventListener('input',function(){CONFIG.scoreRangeMax=Math.round(parseFloat(this.value)*10000)||95000;syncMaxScoreFromConfig();saveConfig();});
        document.getElementById('cm-score-enabled').addEventListener('change',function(){CONFIG.scoreEnabled=this.checked;document.getElementById('cm-score-content').classList.toggle('cm-section-disabled',!this.checked);if(_window.__maxEnabled)_window.__maxEnabled(this.checked&&CONFIG.enabled);saveConfig();});

        // Final score mode
        function setFinalModeUI(mode){CONFIG.finalScoreMode=mode;document.querySelectorAll('[data-fmode]').forEach(b=>b.classList.toggle('active',b.dataset.fmode===mode));document.getElementById('cm-final-fixed').style.display=mode==='fixed'?'block':'none';document.getElementById('cm-final-range').style.display=mode==='range'?'block':'none';updatePreview();saveConfig();}
        document.querySelectorAll('[data-fmode]').forEach(b=>b.addEventListener('click',function(){setFinalModeUI(this.dataset.fmode);}));
        document.getElementById('cm-final-score').addEventListener('input',function(){CONFIG.myFinalScore=String(Math.round(parseFloat(this.value)*10000)||94000);syncMaxScoreFromConfig();updatePreview();saveConfig();});
        document.getElementById('cm-final-range-min').addEventListener('input',function(){CONFIG.finalScoreRangeMin=Math.round(parseFloat(this.value)*10000)||85000;syncMaxScoreFromConfig();saveConfig();});
        document.getElementById('cm-final-range-max').addEventListener('input',function(){CONFIG.finalScoreRangeMax=Math.round(parseFloat(this.value)*10000)||97000;syncMaxScoreFromConfig();saveConfig();});
        document.getElementById('cm-result-enabled').addEventListener('change',function(){CONFIG.resultEnabled=this.checked;document.getElementById('cm-result-content').classList.toggle('cm-section-disabled',!this.checked);saveConfig();});

        function updatePreview(){let score=parseInt(CONFIG.myFinalScore)/10000;const tier=getTierForScore(score);const n=document.getElementById('cm-score-preview-num');const t=document.getElementById('cm-score-preview-tier');if(n){n.textContent=score.toFixed(1);n.style.color=tier.hexColor;}if(t){t.textContent=`${tier.emoji} ${tier.name}`;t.style.color=tier.hexColor;}}
        updatePreview();setInterval(()=>{if(CONFIG.finalScoreMode==='range')updatePreview();},2000);

        // Auto queue
        let _aqInterval=null,_aqConnStart=null;
        function _aqTick(){try{const btns=Array.from(document.querySelectorAll('button,[role="button"]'));const connecting=btns.find(b=>/connecting/i.test(b.textContent));if(connecting){if(_aqConnStart===null)_aqConnStart=Date.now();else if(Date.now()-_aqConnStart>17000){const back=btns.find(b=>/leave|cancel|disconnect/i.test(b.textContent));if(back)back.click();_aqConnStart=null;}return;}_aqConnStart=null;const arena=document.querySelector('button[aria-label="Find an Arena match"]');if(arena){arena.click();return;}if(document.getElementById('cm-autofindnew-toggle')?.checked){const fn=btns.find(b=>/FIND NEW.*MATCH/i.test(b.textContent));if(fn)fn.click();}}catch(e){}}
        document.getElementById('cm-autoqueuetoggle').addEventListener('change',function(){CONFIG.autoQueue=this.checked;saveConfig();if(this.checked){_aqInterval=setInterval(_aqTick,Math.max(100,CONFIG.queueDelay));}else if(_aqInterval){clearInterval(_aqInterval);_aqInterval=null;}});
        document.getElementById('cm-queue-delay').addEventListener('input',function(){CONFIG.queueDelay=Math.max(100,parseInt(this.value)||1000);saveConfig();if(_aqInterval){clearInterval(_aqInterval);_aqInterval=setInterval(_aqTick,CONFIG.queueDelay);}});

        // Clear cookies
        document.getElementById('cm-clearcookies-btn').addEventListener('click',function(){const s=localStorage.getItem('cheatmoggle _config');document.cookie.split(';').forEach(c=>{const n=c.split('=')[0].trim();document.cookie=n+'=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;';});localStorage.clear();if(s)localStorage.setItem('cheatmoggle _config',s);this.textContent='Cleared! Reloading...';setTimeout(()=>location.reload(),500);});

        // Verif bypass
        document.getElementById('cm-verifbypass-btn').addEventListener('click',function(){this.textContent='Active';this.style.background='rgba(16,185,129,0.15)';this.style.borderColor='var(--cm-success)';this.style.color='var(--cm-success)';});

        // Camera spoof (basic)
        const videoFileInput=document.createElement('input');videoFileInput.type='file';videoFileInput.accept='video/*';videoFileInput.style.display='none';document.body.appendChild(videoFileInput);
        const imageFileInput=document.createElement('input');imageFileInput.type='file';imageFileInput.accept='image/*';imageFileInput.style.display='none';document.body.appendChild(imageFileInput);
        document.getElementById('cm-video-picker').addEventListener('click',()=>videoFileInput.click());
        document.getElementById('cm-image-picker').addEventListener('click',()=>imageFileInput.click());
        document.querySelectorAll('[data-src]').forEach(b=>{b.addEventListener('click',function(){document.querySelectorAll('[data-src]').forEach(x=>x.classList.toggle('active',x.dataset.src===this.dataset.src));document.getElementById('cm-video-picker').style.display=this.dataset.src==='video'?'flex':'none';document.getElementById('cm-image-picker').style.display=this.dataset.src==='image'?'flex':'none';});});

        let _camVidEl=null,_camImgEl=null,_camCanv=null,_camRAF=null,_camSrcType='video';
        function buildCamStream(){if(_camRAF)cancelAnimationFrame(_camRAF);_camCanv=document.createElement('canvas');_camCanv.width=640;_camCanv.height=480;const ctx=_camCanv.getContext('2d');function draw(){if(!_camSpoofActive){_camRAF=null;return;}ctx.fillStyle='#000';ctx.fillRect(0,0,640,480);if(_camSrcType==='video'&&_camVidEl&&_camVidEl.readyState>=2)ctx.drawImage(_camVidEl,0,0,640,480);else if(_camSrcType==='image'&&_camImgEl&&_camImgEl.complete)ctx.drawImage(_camImgEl,0,0,640,480);_camRAF=requestAnimationFrame(draw);}draw();return _camCanv.captureStream(30);}
        videoFileInput.addEventListener('change',function(){if(!this.files.length)return;_camSrcType='video';_camVidEl=document.createElement('video');_camVidEl.src=URL.createObjectURL(this.files[0]);_camVidEl.loop=document.getElementById('cm-camloop-toggle').checked;_camVidEl.muted=true;_camVidEl.playsInline=true;_camVidEl.play().catch(()=>{});document.getElementById('cm-video-name').textContent=this.files[0].name;document.getElementById('cm-video-name').classList.add('selected');if(_camSpoofActive){_camStream=buildCamStream();}});
        imageFileInput.addEventListener('change',function(){if(!this.files.length)return;_camSrcType='image';_camImgEl=new Image();_camImgEl.src=URL.createObjectURL(this.files[0]);document.getElementById('cm-image-name').textContent=this.files[0].name;document.getElementById('cm-image-name').classList.add('selected');if(_camSpoofActive){_camStream=buildCamStream();}});
        document.getElementById('cm-camspoof-toggle').addEventListener('change',function(){_camSpoofActive=this.checked;if(_camSpoofActive){_camStream=buildCamStream();}else{if(_camRAF)cancelAnimationFrame(_camRAF);if(_camStream){_camStream.getTracks().forEach(t=>t.stop());_camStream=null;}}});

        // Settings
        document.getElementById('cm-debug-toggle').addEventListener('change',function(){CONFIG.debug=this.checked;saveConfig();});
        let _menuKey='KeyH';
        const menuKeyInput=document.getElementById('cm-menukey');
        menuKeyInput.addEventListener('keydown',function(e){e.preventDefault();_menuKey=e.code;this.value=e.key===' '?'Space':e.key;this.blur();});
        document.addEventListener('keydown',e=>{if(e.code===_menuKey&&!e.target.matches('input,textarea'))root.classList.toggle('visible');});
        document.getElementById('cm-accent-color').addEventListener('input',e=>applyAccentColor(e.target.value));

        // Theme grid
        const tg=document.getElementById('cm-theme-grid');
        Object.entries(THEMES).forEach(([key,theme])=>{const tb=document.createElement('button');tb.style.cssText=`padding:6px 4px;border-radius:6px;border:1px solid var(--cm-border);background:var(--cm-bg-elevated);cursor:pointer;text-align:center;`;tb.dataset.theme=key;tb.innerHTML=`<div style="width:16px;height:16px;border-radius:4px;background:linear-gradient(135deg,${theme.primary},${theme.secondary});margin:0 auto 3px;"></div><div style="font-size:8px;font-weight:600;color:var(--cm-text);">${theme.name}</div>`;tb.addEventListener('click',()=>{applyTheme(key);applyAccentColor(CONFIG.accentColor);});tg.appendChild(tb);});

        // Live status
        setInterval(()=>{const mv=document.getElementById('cm-mode-val');if(mv)mv.textContent=_isRanked?'RANKED':'NORMAL';},500);

        // Watermark
        const wm=document.createElement('div');wm.id='cm-watermark';wm.textContent='by cheatmoggle v13.6.2';document.body.appendChild(wm);

        // Restore UI
        setScoreModeUI(CONFIG.scoreMode);
        setFinalModeUI(CONFIG.finalScoreMode);
        document.getElementById('cm-fixed-score').value=(CONFIG.fixedScore/10000).toFixed(1);
        document.getElementById('cm-score-min').value=(CONFIG.scoreRangeMin/10000).toFixed(1);
        document.getElementById('cm-score-max').value=(CONFIG.scoreRangeMax/10000).toFixed(1);
        document.getElementById('cm-final-score').value=(parseInt(CONFIG.myFinalScore)/10000).toFixed(1);
        document.getElementById('cm-final-range-min').value=(CONFIG.finalScoreRangeMin/10000).toFixed(1);
        document.getElementById('cm-final-range-max').value=(CONFIG.finalScoreRangeMax/10000).toFixed(1);
        if(CONFIG.autoQueue&&document.getElementById('cm-autoqueuetoggle')){document.getElementById('cm-autoqueuetoggle').checked=true;_aqInterval=setInterval(_aqTick,CONFIG.queueDelay);}

        // Clear saved config so new defaults (10.0) take effect on first load
        // Comment this out after first run if you want to preserve user changes
        // localStorage.removeItem('cheatmoggle _config');

        syncMaxScoreFromConfig();
        log('cheatmoggle v13.6.2 + MAX score engine loaded');
    }

    if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',buildMenu);}else{buildMenu();}

})();