import quickjs,json
s=open('commonChunk.AUoCIbzg.js',encoding='utf-8',errors='ignore').read()
def brace_extract(src,start_key):
    i=src.find(start_key); j=src.find('{',i); depth=0;k=j;instr=None;esc=False
    while k<len(src):
        c=src[k]
        if instr:
            if esc:esc=False
            elif c=='\\':esc=True
            elif c==instr:instr=None
        else:
            if c in '"\'`':instr=c
            elif c=='{':depth+=1
            elif c=='}':
                depth-=1
                if depth==0:return src[i:k+1]
        k+=1
    return src[i:]
kg=brace_extract(s,'function Kg'); mr=brace_extract(s,'function mr')
ctx=quickjs.Context()
ctx.eval(kg); ctx.eval(mr)
L=ctx.eval('Kg().length'); print('len',L)
# grab base array as JSON
import json
base=json.loads(ctx.eval('JSON.stringify(Kg())'))
tests=[("n5]A",187),("Q9se",189),("F(ai",210),("!x&[",238),("^vv9",249),("AZtO",191),("(kpj",245),("bcY]",248),("suG5",194)]
def printable(x):
    return all(32<=ord(c)<127 for c in x) and len(x)>0
found=[]
for r in range(L):
    # left rotate by r
    rot=base[r:]+base[:r]
    ctx.set('_ROT', json.dumps(rot))
    ctx.eval('Kg=function(){return _ROT}')
    ok=True; outs=[]
    for key,idx in tests:
        try:
            v=ctx.eval(f'mr({idx+196},{json.dumps(key)})')
        except Exception as e:
            ok=False;break
        outs.append(v)
        if not printable(v): ok=False;break
    if ok:
        found.append((r,outs))
        print('ROT FOUND r=',r, outs)
print('total found',len(found))
