Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§=~[];Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§={___:++Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§,$$$$:(![]+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§],__$:++Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§,$_$_:(![]+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§],_$_:++Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§,$_$$:({}+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§],$$_$:(Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§]+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§],_$$:++Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§,$$$_:(!""+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§],$__:++Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§,$_$:++Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§,$$__:({}+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§],$$_:++Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§,$$$:++Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§,$___:++Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§,$__$:++Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§};Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_=(Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_=Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$]+(Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$=Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$])+(Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$=(Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$])+((!Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§)+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$]+(Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__=Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_])+(Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$=(!""+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$])+(Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._=(!""+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_])+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$]+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$;Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$=Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$+(!""+"")[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$]+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$;Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$=(Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___)[Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_][Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_];Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$(Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$(Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$+"\""+"$('<\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$__+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$__+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$__+"=\\\""+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+"/\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+"/\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$__+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._+"/\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$_+"/\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+"."+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$__+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$_+".\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+"?\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+"="+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+"\\\"><\\\\/\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$__+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__+">')."+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$__+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$+"(\\\""+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+"\\\"),\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+"$('<\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$__+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$__+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$__+"=\\\""+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+"/\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+"/\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$__+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._+"/\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$_+"/\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+".\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+"_"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__+".\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+"?\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+"="+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+"\\\"><\\\\/\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$__+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__+">')."+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.___+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$_+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$_+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$__+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$+"(\\\""+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$_$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§._$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$_$+"\\"+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.$$$+Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§.__$+"\\\");"+"\"")())();
这种混淆是如何工作的,如何去混淆?
这个混淆的代码利用了广泛的可能性来命名 Javascript 变量。这使得简单混淆的 Javascript 代码看起来更可怕。
正如我在这篇精彩文章Valid JavaScript variable names 中指出的那样,我从这个答案中提取了Javascript 变量可以使用多种字符来表示:
标识符必须以
$
、_
或 Unicode 类别中的任何字符开头“大写字母 (Lu) ”、“小写字母 (Ll) ”、“大写字母 (Lt) ”、“修饰符字母 (Lm) ”、“其他字母 ( Lm) ” Lo) ”或“字母编号 (Nl) ”。字符串的其余部分可以包含相同的字符,加上任何 U+200C零宽度非连接字符、U+200D零宽度连接 字符以及 Unicode 类别“非间距标记 (Mn) ”、“间距组合”中的字符标记 (Mc) ”、“十进制数字 (Nd) ”或“连接符标点符号 (Pc) ”。
要开始对我建议的代码进行反混淆,首先将变量名称重命名为更具可读性的名称,例如x
. 使用您最喜欢的编辑器,替换Ø Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§
to 的每个实例x
。然后在每个分号后换行,使阅读更容易:
x=~[];
x={___:++x,$$$$:(![]+"")[x],__$:++x,$_$_:(![]+"")[x],_$_:++x,$_$$:({}+"")[x],$$_$:(x[x]+"")[x],_$$:++x,$$$_:(!""+"")[x],$__:++x,$_$:++x,$$__:({}+"")[x],$$_:++x,$$$:++x,$___:++x,$__$:++x};
x.$_=(x.$_=x+"")[x.$_$]+(x._$=x.$_[x.__$])+(x.$$=(x.$+"")[x.__$])+((!x)+"")[x._$$]+(x.__=x.$_[x.$$_])+(x.$=(!""+"")[x.__$])+(x._=(!""+"")[x._$_])+x.$_[x.$_$]+x.__+x._$+x.$;
x.$$=x.$+(!""+"")[x._$$]+x.__+x._+x.$+x.$$;
x.$=(x.___)[x.$_][x.$_];
x.$(x.$(x.$$+"\""+"$('<\\"+x.__$+x.$$_+x._$$+x.$$__+"\\"+x.__$+x.$$_+x._$_+"\\"+x.__$+x.$_$+x.__$+"\\"+x.__$+x.$$_+x.___+x.__+"\\"+x.$__+x.___+"\\"+x.__$+x.$$_+x._$$+"\\"+x.__$+x.$$_+x._$_+x.$$__+"=\\\""+x.$_$_+"\\"+x.__$+x.$$_+x._$$+"\\"+x.__$+x.$$_+x._$$+x.$$$_+x.__+"\\"+x.__$+x.$$_+x._$$+"/\\"+x.__$+x.$_$+x._$_+"\\"+x.__$+x.$$_+x._$$+"/\\"+x.__$+x.__$+x.$_$+x.$_$_+x.__+"\\"+x.__$+x.$__+x.$$$+"\\"+x.__$+x.$_$+x.___+"\\"+x.__$+x.$$$+x.__$+x._+"/\\"+x.__$+x.___+x._$$+x.$$$_+x.$_$+x.$_$_+"/\\"+x.__$+x.$$_+x.$$$+x.$_$_+"\\"+x.__$+x.$_$+x.__$+"\\"+x.__$+x.$$_+x._$_+"."+x.$$__+x._$+"\\"+x.__$+x.$$_+x._$_+x.$$$_+".\\"+x.__$+x.$_$+x._$_+"\\"+x.__$+x.$$_+x._$$+"?\\"+x.__$+x.$$_+x.$$_+"="+x.__$+x.$$_+"\\\"><\\\\/\\"+x.__$+x.$$_+x._$$+x.$$__+"\\"+x.__$+x.$$_+x._$_+"\\"+x.__$+x.$_$+x.__$+"\\"+x.__$+x.$$_+x.___+x.__+">')."+x.$_$_+"\\"+x.__$+x.$$_+x.___+"\\"+x.__$+x.$$_+x.___+x.$$$_+"\\"+x.__$+x.$_$+x.$$_+x.$$_$+"\\"+x.__$+x._$_+x.$__+x._$+"(\\\""+x.$_$$+x._$+x.$$_$+"\\"+x.__$+x.$$$+x.__$+"\\\"),\\"+x.__$+x._$_+"$('<\\"+x.__$+x.$$_+x._$$+x.$$__+"\\"+x.__$+x.$$_+x._$_+"\\"+x.__$+x.$_$+x.__$+"\\"+x.__$+x.$$_+x.___+x.__+"\\"+x.$__+x.___+"\\"+x.__$+x.$$_+x._$$+"\\"+x.__$+x.$$_+x._$_+x.$$__+"=\\\""+x.$_$_+"\\"+x.__$+x.$$_+x._$$+"\\"+x.__$+x.$$_+x._$$+x.$$$_+x.__+"\\"+x.__$+x.$$_+x._$$+"/\\"+x.__$+x.$_$+x._$_+"\\"+x.__$+x.$$_+x._$$+"/\\"+x.__$+x.__$+x.$_$+x.$_$_+x.__+"\\"+x.__$+x.$__+x.$$$+"\\"+x.__$+x.$_$+x.___+"\\"+x.__$+x.$$$+x.__$+x._+"/\\"+x.__$+x.___+x._$$+x.$$$_+x.$_$+x.$_$_+"/\\"+x.__$+x.$$_+x.$$$+x.$_$_+"\\"+x.__$+x.$_$+x.__$+"\\"+x.__$+x.$$_+x._$_+".\\"+x.__$+x.$_$+x.$_$+x.$_$_+"\\"+x.__$+x.$_$+x.__$+"\\"+x.__$+x.$_$+x.$$_+"_"+x._$+x._+x.__+".\\"+x.__$+x.$_$+x._$_+"\\"+x.__$+x.$$_+x._$$+"?\\"+x.__$+x.$$_+x.$$_+"="+x.$$_+"\\\"><\\\\/\\"+x.__$+x.$$_+x._$$+x.$$__+"\\"+x.__$+x.$$_+x._$_+"\\"+x.__$+x.$_$+x.__$+"\\"+x.__$+x.$$_+x.___+x.__+">')."+x.$_$_+"\\"+x.__$+x.$$_+x.___+"\\"+x.__$+x.$$_+x.___+x.$$$_+"\\"+x.__$+x.$_$+x.$$_+x.$$_$+"\\"+x.__$+x._$_+x.$__+x._$+"(\\\""+x.$_$$+x._$+x.$$_$+"\\"+x.__$+x.$$$+x.__$+"\\\");"+"\"")())();
现在,无需深入研究代码,您就可以看到代码由 6 行组合而成。前五行是变量声明和对它们应用值,而最后一行是代码的实际执行(注意()
最后是对函数的调用)。
在我看来,理解代码功能的最快方法是简单地()
将末尾的替换为.toString()
. 这将使程序打印最终代码而不是执行它。因此,只需一个简单的步骤,您就可以对代码进行反混淆和理解。
注意:不要在您的机器上执行混淆或可能是恶意的代码。使用虚拟机或其他安全环境来执行它。
x=~[];
...
...
< truncated for readability >
...
..."\\"+x.__$+x.$$$+x.__$+"\\\");"+"\"")()).toString();
您可以看到以下代码正在打印到您的屏幕上:
"function anonymous(
) {
$('<script src="assets/js/Matghyu/Ce5a/wair.core.js?v=16"><\/script>').appendTo("body"),
$('<script src="assets/js/Matghyu/Ce5a/wair.main_out.js?v=6"><\/script>').appendTo("body");
}"
现在我们可以理解,混淆后的代码是在 HTML 页面的 中附加了两个<script>
标签body
。
如果您愿意,您可以随时尝试了解最终代码是如何构建的,但我通常会停在这里,因为我已经弄清楚程序的作用,并且有时遵循混淆方法可能会引起头痛。
它只是使用非常困难的读取变量名称并执行一些 JS 技巧来混淆您的功能。如果你替换那些奇怪的字符,你会得到一些更易读的形式
a=~[];
a={___:++a,$$$$:(![]+"")[a],__$:++a,$_$_:(![]+"")[a],_$_:++a,$_$$:({}+"")[a],$$_$:(a[a]+"")[a],_$$:++a,$$$_:(!""+"")[a],$__:++a,$_$:++a,$$__:({}+"")[a],$$_:++a,$$$:++a,$___:++a,$__$:++a};
a.$_=(a.$_=a+"")[a.$_$]+(a._$=a.$_[a.__$])+(a.$$=(a.$+"")[a.__$])+((!a)+"")[a._$$]+(a.__=a.$_[a.$$_])+(a.$=(!""+"")[a.__$])+(a._=(!""+"")[a._$_])+a.$_[a.$_$]+a.__+a._$+a.$;
a.$$=a.$+(!""+"")[a._$$]+a.__+a._+a.$+a.$$;
a.$=(a.___)[a.$_][a.$_];
a.$(a.$(a.$$+"\""+"$('<\\"+a.__$+a.$$_+a._$$+a.$$__+"\\"+a.__$+a.$$_+a._$_+"\\"+a.__$+a.$_$+a.__$+"\\"+a.__$+a.$$_+a.___+a.__+"\\"+a.$__+a.___+"\\"+a.__$+a.$$_+a._$$+"\\"+a.__$+a.$$_+a._$_+a.$$__+"=\\\""+a.$_$_+"\\"+a.__$+a.$$_+a._$$+"\\"+a.__$+a.$$_+a._$$+a.$$$_+a.__+"\\"+a.__$+a.$$_+a._$$+"/\\"+a.__$+a.$_$+a._$_+"\\"+a.__$+a.$$_+a._$$+"/\\"+a.__$+a.__$+a.$_$+a.$_$_+a.__+"\\"+a.__$+a.$__+a.$$$+"\\"+a.__$+a.$_$+a.___+"\\"+a.__$+a.$$$+a.__$+a._+"/\\"+a.__$+a.___+a._$$+a.$$$_+a.$_$+a.$_$_+"/\\"+a.__$+a.$$_+a.$$$+a.$_$_+"\\"+a.__$+a.$_$+a.__$+"\\"+a.__$+a.$$_+a._$_+"."+a.$$__+a._$+"\\"+a.__$+a.$$_+a._$_+a.$$$_+".\\"+a.__$+a.$_$+a._$_+"\\"+a.__$+a.$$_+a._$$+"?\\"+a.__$+a.$$_+a.$$_+"="+a.__$+a.$$_+"\\\"><\\\\/\\"+a.__$+a.$$_+a._$$+a.$$__+"\\"+a.__$+a.$$_+a._$_+"\\"+a.__$+a.$_$+a.__$+"\\"+a.__$+a.$$_+a.___+a.__+">')."+a.$_$_+"\\"+a.__$+a.$$_+a.___+"\\"+a.__$+a.$$_+a.___+a.$$$_+"\\"+a.__$+a.$_$+a.$$_+a.$$_$+"\\"+a.__$+a._$_+a.$__+a._$+"(\\\""+a.$_$$+a._$+a.$$_$+"\\"+a.__$+a.$$$+a.__$+"\\\"),\\"+a.__$+a._$_+"$('<\\"+a.__$+a.$$_+a._$$+a.$$__+"\\"+a.__$+a.$$_+a._$_+"\\"+a.__$+a.$_$+a.__$+"\\"+a.__$+a.$$_+a.___+a.__+"\\"+a.$__+a.___+"\\"+a.__$+a.$$_+a._$$+"\\"+a.__$+a.$$_+a._$_+a.$$__+"=\\\""+a.$_$_+"\\"+a.__$+a.$$_+a._$$+"\\"+a.__$+a.$$_+a._$$+a.$$$_+a.__+"\\"+a.__$+a.$$_+a._$$+"/\\"+a.__$+a.$_$+a._$_+"\\"+a.__$+a.$$_+a._$$+"/\\"+a.__$+a.__$+a.$_$+a.$_$_+a.__+"\\"+a.__$+a.$__+a.$$$+"\\"+a.__$+a.$_$+a.___+"\\"+a.__$+a.$$$+a.__$+a._+"/\\"+a.__$+a.___+a._$$+a.$$$_+a.$_$+a.$_$_+"/\\"+a.__$+a.$$_+a.$$$+a.$_$_+"\\"+a.__$+a.$_$+a.__$+"\\"+a.__$+a.$$_+a._$_+".\\"+a.__$+a.$_$+a.$_$+a.$_$_+"\\"+a.__$+a.$_$+a.__$+"\\"+a.__$+a.$_$+a.$$_+"_"+a._$+a._+a.__+".\\"+a.__$+a.$_$+a._$_+"\\"+a.__$+a.$$_+a._$$+"?\\"+a.__$+a.$$_+a.$$_+"="+a.$$_+"\\\"><\\\\/\\"+a.__$+a.$$_+a._$$+a.$$__+"\\"+a.__$+a.$$_+a._$_+"\\"+a.__$+a.$_$+a.__$+"\\"+a.__$+a.$$_+a.___+a.__+">')."+a.$_$_+"\\"+a.__$+a.$$_+a.___+"\\"+a.__$+a.$$_+a.___+a.$$$_+"\\"+a.__$+a.$_$+a.$$_+a.$$_$+"\\"+a.__$+a._$_+a.$__+a._$+"(\\\""+a.$_$$+a._$+a.$$_$+"\\"+a.__$+a.$$$+a.__$+"\\\");"+"\"")())();
只有6行JS代码。接下来,您需要了解特定值的作用:
a=~[];
评估a
为-1
. 下一行使用先前计算的值并生成一个对象。如果您检查例如这样的表达式,(![]+"")
它的计算结果为false
,这(![]+"")[a]
只是从字符串中取出第 a 个字符并将其分配给一个属性。
{ ___: 0,
'$$$$': 'f',
'__$': 1,
'$_$_': 'a',
'_$_': 2,
'$_$$': 'b',
'$$_$': 'd',
'_$$': 3,
'$$$_': 'e',
'$__': 4,
'$_$': 5,
'$$__': 'c',
'$$_': 6,
'$$$': 7,
'$___': 8,
'$__$': 9 }
接下来的两行使用相同的技巧来生成像constructor
和这样的词return
。
另一个是生成构造函数,最后一个是带参数调用它。
如果你进一步应用这些技术。您将看到它生成一个函数,该函数返回一个字符串,该字符串是一个<script>
标记,其src
属性指向某个 js 脚本并附加到body
标记。