Realer Name (21.03.2025)
Thema: Aktueller Huffman-Tree
- 
	18.01.2025, 13:33 #1U-Labs Elite  
 - Registriert seit
- 28.10.2011
- Beiträge
- 630
 Thanked 283 Times in 171 Posts Aktueller Huffman-Tree Aktueller Huffman-TreeHey ho! 
 
 Ich versuche aktuell den neusten Huffman-Tree zu verwenden, da er sich wohl minimal verändetr hat.
 Egal in welcher Form das Tree verwendet wird, das parsen habe ich erstmal gelassen und mache es aktuell auf anderem Wege:
 Ich lese den fertigen Tree direkt aus die StApp aus und speichere diese als JSON. So brauche ich den Baum nicht builden, sondern kann direkt den Decompressor verwenden:
 import java.awt.Font; 
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.lang.reflect.AccessFlag;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.nio.charset.Charset;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.io.*;
 import java.nio.charset.Charset;
 import org.json.JSONArray;
 
 import javassist.ClassPool;
 import javassist.CtClass;
 import javassist.CtField;
 import javassist.CtMethod;
 import javassist.Modifier;
 import javassist.bytecode.CodeAttribute;
 import javassist.bytecode.CodeIterator;
 import javassist.bytecode.MethodInfo;
 import javassist.bytecode.analysis.Type;
 import java.util.Base64;
 
 public class Demo extends hn {
 private String HuffmanTree = null;
 private String GenericProtocol = null;
 private HashMap<String, String> data = new HashMap();
 
 public Demo(String hostname, int port) {
 super(hostname, port);
 
 try {
 ClassPool classPool = ClassPool.getDefault();
 Class<?> groupChat = this.getClass();
 Class<?> client = groupChat.getSuperclass();
 
 for(Field f : client.getDeclaredFields()) {
 f.setAccessible(true);
 
 if(f.getGenericType().getTypeName().equals("java.lang.String")) {
 String value = (String) f.get(this);
 
 if(value == null) {
 continue;
 }
 
 if(value.startsWith("\b") && value.length() > 10) {
 this.HuffmanTree = value;
 
 data.put("HUFFMAN", f.getName());
 } else if(value.startsWith("-") && value.length() > 10) {
 this.GenericProtocol = value;
 
 data.put("GENERIC_PROTOCOL", f.getName());
 }
 } else {
 //System.out.println(f.getGenericType().getTypeName());
 }
 }
 
 // private final void hn.v2(java.lang.String)
 Method found = null;
 int count = 0;
 
 for(Method m : client.getDeclaredMethods()) {
 if(found != null) {
 break;
 }
 
 if(m.accessFlags().contains(AccessFlag.PRIVATE) && m.accessFlags().contains(AccessFlag.FINAL)) {
 if(m.getGenericReturnType().getTypeName().equals("void")) {
 java.lang.reflect.Type[] params = m.getGenericParameterTypes();
 
 if(params.length == 1) {
 if(params[0].getTypeName().equals("java.lang.String")) {
 CtMethod method = classPool.get(client.getName()).getDeclaredMethod(m.getName());
 MethodInfo methodInfo = method.getMethodInfo();
 CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
 CodeIterator codeIterator = codeAttribute.iterator();
 
 while (codeIterator.hasNext()) {
 int index = codeIterator.next();
 int opcode = codeIterator.byteAt(index);
 
 if(javassist.bytecode.Mnemonic.OPCODE[opcode] == "new") {
 ++count;
 
 if(count == 2) {
 found = m;
 break;
 }
 }
 }
 }
 }
 }
 }
 }
 
 /* Init Huffman */
 Method method = client.getDeclaredMethod(found.getName(), String.class);
 method.setAccessible(true);
 method.invoke(this, this.HuffmanTree);
 
 /* Get Decoder */
 Field field = client.getDeclaredField("ra");
 field.setAccessible(true);
 Object fieldValue = field.get(client);
 
 Class<? extends Object> Encoder = fieldValue.getClass();
 
 /* Call the Decoder */
 Method mm = Encoder.getDeclaredMethod("v", byte[].class);
 method.setAccessible(true);
 Object result = mm.invoke(fieldValue, new byte[] { (byte) 0xb4, (byte) 0x1b, (byte) 0xf8, (byte) 0x16,(byte) 0x8d, (byte) 0x51, (byte) 0xb5, (byte) 0x44, (byte) 0x5f, (byte) 0xb5, (byte) 0xa4 });
 System.out.println("Method Result: " + result);
 
 
 Field parsed = Encoder.getDeclaredField("o");
 parsed.setAccessible(true);
 Object[] parsedValue = (Object[]) parsed.get(fieldValue);
 String json = new JSONArray(parsedValue).toString();
 System.out.println(Base64.getEncoder().encodeToString(json.getBytes()));
 //System.out.println("o = " + new JSONArray(parsedValue).toString());
 
 try (FileOutputStream fos = new FileOutputStream("TreeJS.json")) {
 System.err.println("SAVE TREE");
 fos.write(json.getBytes());
 
 
 
 
 // Eingabestream mit Cp-1215 Encoding
 InputStream inputStream = new FileInputStream("TreeJS.json");
 Reader reader = new InputStreamReader(inputStream, Charset.forName("cp1252"));
 
 // Ausgabestream mit UTF-8 Encoding
 OutputStream outputStream = new FileOutputStream("TreeUC.json");
 Writer writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));
 
 // Puffer für die Daten
 char[] buffer = new char[1024];
 int bytesRead;
 while ((bytesRead = reader.read(buffer)) != -1) {
 writer.write(buffer, 0, bytesRead);
 }
 
 // Streams schließen
 reader.close();
 writer.close();
 
 
 
 } catch (IOException e) {
 e.printStackTrace();
 }
 Field e = Encoder.getDeclaredField("e");
 e.setAccessible(true);
 System.out.println("e = " + e.get(fieldValue));
 
 Field t = Encoder.getDeclaredField("t");
 t.setAccessible(true);
 System.out.println("t = " + t.get(fieldValue));
 
 Field p = Encoder.getDeclaredField("p");
 p.setAccessible(true);
 System.out.println("p = " + p.get(fieldValue));
 
 Field z = Encoder.getDeclaredField("z");
 z.setAccessible(true);
 System.out.println("z = " + z.get(fieldValue));
 
 Field k = Encoder.getDeclaredField("k");
 k.setAccessible(true);
 System.out.println("k = " + k.get(fieldValue));
 
 Field v = Encoder.getDeclaredField("v");
 v.setAccessible(true);
 System.out.println("v = " + v.get(fieldValue));
 
 Field r = Encoder.getDeclaredField("r");
 r.setAccessible(true);
 byte[] rVal = (byte[]) r.get(fieldValue);
 System.out.println("r = " + new JSONArray(rVal).toString());
 
 
 
 
 /*
 /* Get Encoder var
 for(Field dd : Encoder.getDeclaredFields()) {
 System.out.println(dd.getName());
 dd.setAccessible(true);
 
 System.out.println(dd.get(fieldValue));
 }
 */
 
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
 
 
 public static void main(String[] args) {
 new Demo("chat.knuddels.de", 2710);
 }
 
 @Override
 public void n(String arg0) {}
 
 @Override
 public void nf() {}
 
 @Override
 public void oc() {}
 
 @Override
 public void ow(Font arg0, Font arg1, String arg2) {}
 
 @Override
 public void ro() {}
 
 @Override
 public void v(String arg0, String arg1) {}
 }
 
 
 Das Resultat schaut dann wie folgt aus:
 [[[[[[[[[null,"y"],[null,"|/serverpp \""]],[[[null,"tt"],[null,"D"]],[[[[[null,"ea"],[[null,"ud"],[[[null,"\u0083"],[[[null,"з"],[[null,"Ú"],[null,"Þ"]]],[null,"\u20ac"]]],[[null,"\u203e"],[null,"\u0085"]]]]],[[null,"ür"],[null,"È"]]],[[null,"Ste"],[null,"eck"]]],[[null,"06"],[[null,"Mafia"],[[[null,"67"],[null,"NI"]],[[null,"lb"],[null,"ou"]]]]]]]],[null,"#"]],[null,"\n"]],[null,"°"]],[[[[[[[[null,"si"],[null,"pla"]],[[null,"ti"],[null,"for"]]],[null,"\f"]],[[[[[null,"boy"],[null,"\r"]],[[null,"man"],[[null,"Kl"],[[null,"97"],[null,"ub"]]]]],[[[null,"urg"],[null,"kte"]],[[null,"OK"],[null,"ue"]]]],[null,"b"]]],[[[[[[null,"op"],[[null,"ev"],[null,"Ob"]]],[[[null,"per"],[null,"Ko"]],[null,"Mo"]]],[null,"_°>_h"]],[null,"m"]],[[[[null,"di"],[null,"ra"]],[[[null,"j"],[[[[[null,"\u0082"],[[[[null,"ÏŠ"],[null,"Ù"]],[null,"Æ"]],[null,"Å¡"]]],[[null,"¹"],[[null,"â–¬"],[[null,"É"],[null,"ø"]]]]],[null,"53"]],[[null,"lh"],[[null,"\u2022"],[null,"`"]]]]],[null,"py"]]],[[null,"13"],[null,"nn"]]]]],[[[null,"ã"],[[[[[null,"rc"],[null,"_nicklist_"]],[[null,"ef"],[null,"bra"]]],[[null,"ee"],[[null,"ten"],[null,"nc"]]]],[[[null,"?d="],[[null,"Wo"],[[[null,"77"],[null,"ú"]],[null,"94"]]]],[[null,"ing"],[[null,"\u000e"],[null,"02"]]]]]],[[[[[null,"De"],[null,"au"]],[[[[null,"Ru"],[[null,"oy"],[null,"km"]]],[null,"eig"]],[[null,"Es"],[[null,"ks"],[null,"Ol"]]]]],[null,"5"]],[[[null,"E"],[[null,"ii"],[[null,"\u0016"],[[[null,"mf"],[null,"Fo"]],[[null,"sk"],[[[[null,"²"],[[null,"â•�"],[null,"\u009e"]]],[[[[null,"ï*¼"],[null,"ﺡ"]],[[null,"ﺦ"],[null,"\u2019"]]],[[null,"Ä™"],[[null,"ﮎ"],[null,"ï»¶"]]]]],[null,"\u0015"]]]]]]],[[[[null,"Er"],[[null,"use"],[null,"On"]]],[[null,"ol"],[[null,"89"],[[null,"kö"],[null,"Ze"]]]]],[[null,"art"],[null,"ri"]]]]]]],[[[[[null,"w"],[[[[null,"co"],[[[[null,"\u0019"],[null,"Ä"]],[null,"Ct"]],[null,"va"]]],[null,"bi"]],[[null,"lin"],[[null,"hr"],[null,"id"]]]]],[[[[[null,"do"],[null,"nk"]],[[null,"xx"],[[[null,"wb"],[[null,"\u0018"],[[[null,"к"],[null,"Ã�"]],[null,"\u008b"]]]],[[null,"ph"],[null,"fw"]]]]],[[[null,"noc"],[null,"we"]],[null,"yer"]]],[[[null,"fe"],[[null,"ko"],[null,"ht"]]],[[null,"mi"],[[null,"100"],[null,"31"]]]]]],[[null,"3"],[null,"l"]]],[[[[[[null,"W"],[null,"fc"]],[[[[[null,"kü"],[[[null,"в"],[[null,"ù"],[[[null,"Ò“"],[null,"â„¢"]],[null,"а"]]]],[null,"´"]]],[null,"iz"]],[null,"09"]],[null,"BN"]]],[[null,"im"],[null,"\u0001"]]],[[null,"\u0000p\u0000"],[[[[[null,"Kr"],[[null,"Oo"],[null,"eg"]]],[null,"Pun"]],[[null,"yl"],[null,"eh"]]],[[[null,"Ro"],[null,"Su"]],[[[null,"xe"],[null,"hel"]],[null,"hlt"]]]]]],[[[[[null,"et"],[null,"sm"]],[[null,"M"],[[null,"pa"],[null,"38"]]]],[[null,"z"],[[[[null,"Fl"],[null,"48"]],[null,"uf"]],[[null,"Knu"],[null,"Ni"]]]]],[[[[[null,"hi"],[[[null,"lz"],[null,"Ü"]],[null,"her"]]],[[null,"So"],[[[null,"Sü"],[null,"uh"]],[[[[null,"→"],[null,"â–‘"]],[null,"н"]],[null,"rü"]]]]],[null,"Fh"]],[[[null,"Min"],[null,"ba"]],[[null,"pl"],[null,"0,0,0"]]]]]]]]],[[[[[[[[null,"17"],[null," "]],[[[[null,"bin"],[[null,"Gl"],[null,"Nu"]]],[null,"Mafia2"]],[[null,"da"],[[[null,"Rh"],[null,"ken"]],[null,"Sl"]]]]],[[[[null,"I"],[[null,"knuddel"],[null,"Fb"]]],[[null,"Bo"],[[[null,"To"],[[null,"za"],[[[[null,"Æ’"],[[null,"µ"],[null,"â–“"]]],[null,"\u0086"]],[null,"и"]]]],[[null,"Go"],[null,"56"]]]]],[[[[null,"ois"],[null,"ce"]],[null,"N"]],[[[null,"03"],[[null,"rb"],[null,"hn"]]],[[null,"rie"],[[null,"Je"],[null,"Dr"]]]]]]],[[[null,"4"],[[[[null,"Fuß"],[[null,"Ju"],[[null,"ny"],[null,"Yo"]]]],[null,"36"]],[[[null,"hei"],[[[null,"58"],[null,"ov"]],[null,"$"]]],[null,"BB"]]]],[[null,"&"],[[[null,"Bingo"],[[null,"lie"],[[null,"by"],[null,"Ig"]]]],[[null,"ste"],[null,"\u0011"]]]]]],[[[null,"2"],[[[[null,"G"],[[null,"ic"],[[null,"kle"],[[[[[[[null,"ï»»"],[null,"Я"]],[null,"Ñ’"]],[null,"Ã*"]],[[null,"Û—"],[[[null,"е"],[null,"Ã�"]],[[null,"Õ"],[null,"│"]]]]],[[[[null,"î"],[null,"â•”"]],[null,""]],[null,"Ö"]]],[null,"64"]]]]],[[null,"se"],[null,"23"]]],[[[null,"ng"],[[null,"wa"],[[null,"Dü"],[null,"fl"]]]],[[null,"ar"],[[null,"rs"],[null,"Bi"]]]]]],[null,"\u0000p\u0000B\u0000-\u0000"]]],[[[[null,"õ"],[null,","]],[[[null,"Â"],[[[null,"ute"],[null,"ve"]],[[null,"@"],[[[null,"sl"],[null,"ac"]],[null,"He"]]]]],[null,"B"]]],[[[[null,"20"],[[[[null,"Wi"],[[[null,"cl"],[null,"Mö"]],[null,"dm"]]],[null,"Ma"]],[null,"le"]]],[null,"i"]],[[[[[[null,"ot"],[[[null,"sc"],[null,"uu"]],[null,"\t"]]],[null,"S"]],[[[null,"geb"],[null,"Me"]],[[null,"female.b.my_4.gif"],[null,"tl"]]]],[[null,"16"],[[null,"cht"],[[[[null,"lä"],[null,"pu"]],[[null,"sb"],[null,"51"]]],[null,"Fif"]]]]],[[[[[null,"90"],[null,"erh"]],[null,"255"]],[[null,"K"],[null,"ig"]]],[null,"|"]]]]]],[[[[[[[null,"ma"],[[[null,"29"],[[[null,"Am"],[[[null,"♫"],[[null,"\u203a"],[[null,"\u009d"],[null," "]]]],[[[[null,"þ"],[null,"â†�"]],[[null,"\u0099"],[null,"Å�"]]],[null,"м"]]]],[null,"Kö"]]],[[null,"von"],[null,"Ki"]]]],[[[[[[null,"äu"],[null,"Ce"]],[[null,"78"],[null,"Gi"]]],[null,"nu"]],[null,"gen"]],[[[null,"du"],[[null,"Mar"],[null,"ru"]]],[[[null,"vo"],[null,"ju"]],[[[null,"â„“"],[null,"bs"]],[null,"uhp"]]]]]],[[[null,"FotoContest"],[[[null,"Cp"],[[null,"tor"],[null,"rea"]]],[[null,"zi"],[null,"kann"]]]],[[null,"ll"],[null,"?"]]]],[[[null,"û"],[null,"¾"]],[[[[[null,"mp"],[[null,"ln"],[null,"Spi"]]],[null,"us"]],[null,"st"]],[[[[[null,"rf"],[[null,"\u0006"],[null,"\u008f"]]],[null,"ff"]],[[null,"sh"],[[null,"44"],[null,"Ic"]]]],[[null,"hat"],[[null,"ja"],[[null,".w_"],[null,"\u0014"]]]]]]]],[[[[null,"g"],[[[[null,"27"],[[[null,"Ar"],[null,"Ñ”"]],[null,"üb"]]],[null,"ie"]],[null,"10"]]],[[[[[[null,"Und"],[null,"ies"]],[[null,"91"],[[[null,"¶"],[[null,"é"],[[null,"Ø"],[[[null,"Å‹"],[null,"â–€"]],[null,"ç"]]]]],[null,"II"]]]],[[null,"go"],[[null,"ob"],[null,"'"]]]],[null,"knuddels.de"]],[null,"x"]]],[[[[[null,"["],[[null,"nge"],[[null,"lt"],[[null,"88"],[null,"Zi"]]]]],[[[null,"Na"],[null,"Fa"]],[null,"]"]]],[null,"¼"]],[[[[null,"ä"],[[null,"aus"],[null,"sich"]]],[null,"icon"]],[[null,"6"],[[[[null,"â–ˆ"],[null,"Gr"]],[null,"po"]],[null,"30"]]]]]]],[[[[null,">"],[[[[null,"Sch"],[[[null,"par"],[null,"ey"]],[[null,"Ga"],[null,"Nor"]]]],[null,"mafia"]],[[null,"12"],[[[[null,"Ja"],[null,"sü"]],[[[[[null,"¸"],[null,"\u008a"]],[[null,"\u001b"],[null,"\u0087"]]],[null,"ön"]],[null,"mag"]]],[null,"ver"]]]]],[[[[[[null,"Ge"],[null,"¤"]],[null,"22"]],[[[[null,"ag"],[[null,"72"],[[null,"\u0090"],[[null,"ô"],[null,"\u0088"]]]]],[null,"hal"]],[null,"21"]]],[[[[null,"ro"],[[null,"Ps"],[[null,"59"],[null,"Fu"]]]],[null,"la"]],[[[null,"60"],[null,"P"]],[[null,"Stu"],[[null,"mu"],[[null,"Aa"],[null,"62"]]]]]]],[null,"n"]]],[[[null,":"],[[[[[null,"dt"],[[null,"ONL"],[null,"92"]]],[null,"|/go "]],[[null,"Channel"],[[null,"bei"],[null,"Hi"]]]],[[null,"\u0002"],[null,"8"]]]],[[[[null,"f"],[[null,"200"],[[[[null,"fo"],[null,"hm"]],[null,"ros"]],[null,"gl"]]]],[null,"0"]],[[[[[[null,"49"],[null,"ens"]],[null,"34"]],[[[null,"swh"],[null,"bt"]],[[[null,"HP"],[[[[[[null,"Ó"],[null,"â–’"]],[[null,"Ç"],[null,"Ñ"]]],[[null,"√"],[null,"↓"]]],[null,"â"]],[[[null,"±"],[null,"Ξ"]],[null,"\u0084"]]]],[null,"Bad"]]]],[[null,"ed"],[[[null,"\u000f"],[null,"tde"]],[null,".png"]]]],[[null,"d"],[[[[null,"mb"],[null,"kn"]],[null,"Da"]],[[null,"ir"],[[null,"Gir"],[null,"2009"]]]]]]]]]]]],[[[[[[[[null,"00"],[[[[null,"Pri"],[[null,"Bre"],[null,"Te"]]],[[[[null,"Ve"],[null,"54"]],[null,"Sh"]],[null,"Who"]]],[[[[null,"ft"],[null,"Ne"]],[null,"Xx"]],[null,"James"]]]],[[[[[null,"Cl"],[null,"mo"]],[[[null,"ang"],[null,"ÃŒ"]],[[null,"Wu"],[null,"04"]]]],[null,"9"]],[[[[null,"0065"],[[[null,"CH"],[null,"ci"]],[null,"gh"]]],[null,"ke"]],[[[[null,"ur"],[null,"ak"]],[[null,"ia"],[null,"wu"]]],[null,"pics/"]]]]],[[[[[null,"den"],[[null,"Lo"],[null,"sta"]]],[[[[[null,"GB"],[null,"sbu"]],[[null,"oh"],[null,"qu"]]],[null,"Sa"]],[null,"li"]]],[[null,"a"],[[null,"O"],[[[null,"Fe"],[[null,"xy"],[[[[[[null,"£"],[null,"о"]],[null,"\u009a"]],[null,"©"]],[[[null,"÷"],[null,"â•—"]],[[[null,"─"],[null,"\u201c"]],[[null,"Â*"],[null,"½"]]]]],[[null,"«"],[[[null,"╚"],[[null,"Ë"],[null,"ò"]]],[[null,"Â¥"],[null,"ó"]]]]]]],[null,"nich"]]]]],[[[[[[null,"bes"],[null,"tc"]],[[null,"¬"],[null,"♥"]]],[[null,"men"],[null,"St"]]],[[null,"bur"],[null,"rt"]]],[[[[[null,"93"],[null,"Wa"]],[[null,"Ti"],[null,"07"]]],[[null,"ga"],[[null,"ds"],[[null,"99"],[null,"Mu"]]]]],[null,"sch"]]]]],[[[[[[[[null,"Jo"],[null,"Her"]],[[[null,"gg"],[null,"vb"]],[null,"ib"]]],[[null,"ent"],[[[null,"87"],[null,"ya"]],[null,"lf"]]]],[[[null,"or"],[[null,"eb"],[null,"aw"]]],[[null,"\u0012"],[null,"tz"]]]],[null,"ch"]],[[[[[[null,"rl"],[null,".shadow_"]],[null,"sp"]],[[[null,"to"],[null,"oo"]],[null,"*"]]],[null,"15"]],[[null,"o"],[[[[[null,"nf"],[null,"86"]],[null,"95"]],[[null,"INE"],[null,"Si"]]],[[null,"Foto"],[[null,"ys"],[[null,"96"],[[[null,"\u001a"],[null,"\u001f"]],[[null,"\u0098"],[[null,"á"],[[null,"Ô"],[[null,"Ñ—"],[null,"ì"]]]]]]]]]]]]],[[null,"r"],[[[[null,"ist"],[[[null,"Lad"],[null,"Mom"]],[[null,"Th"],[null,"Pro"]]]],[[[null,"ka"],[null,"Ch"]],[null,"ni"]]],[[null,"ss"],[[null,".my_"],[[null,"vi"],[[null,"Mon"],[null,"pi"]]]]]]]]],[[[[[[[[[null,"Qf"],[[null,"oc"],[null,"sg"]]],[[[null,"Ta"],[null,"tw"]],[[null,"if"],[null,"zz"]]]],[null,"na"]],[[[[null,"Au"],[null,"ai"]],[null,"Knuddels"]],[null,"X"]]],[null,"°>_h"]],[[[[[[[[null,"ug"],[null,"My"]],[null,"Pe"]],[[null,"ex"],[null,"No"]]],[null,"Ka"]],[[null,"no"],[[[null,"xt"],[null,"hp"]],[[null,"kr"],[null,"Pu"]]]]],[null,"18"]],[[null,"R"],[[[null,"Sin"],[null,"An"]],[[[[null,"Ri"],[null,"sel"]],[null,"bea"]],[[null,"Vo"],[[null,"ah"],[null,"Qu"]]]]]]]],[[null,"+"],[[[[null,"c"],[[[null,"ts"],[null,"Tr"]],[null,"We"]]],[[null,"L"],[null,"icon_gender_"]]],[[[null,"me"],[[null,".h_"],[[null,"www"],[[null,"yo"],[null,"hu"]]]]],[[null,"|/fotowhois \""],[[null,"mit"],[null,"so"]]]]]]],[[[[null,"\u000b"],[[[null,"Fre"],[[[null,"max"],[null,"reg"]],[[null,"Va"],[null,"wer"]]]],[[null,"u"],[[[null,"wie"],[null,"icons/"]],[[null,"En"],[[[[null,"â•�"],[[null,"\u0095"],[null,"×"]]],[null,"\u009f"]],[null,"jo"]]]]]]],[null,"%"]],[[[[[null,"255,255,255"],[[null,"ei"],[[null,"dr"],[null,"ip"]]]],[[[null,"Du"],[[[null,"kf"],[null,"57"]],[null,"Pl"]]],[null,"lo"]]],[[[[null,"Sta"],[[[[null,"α"],[[null,"\u001d"],[[[null,"Ï„"],[null,"Ã’"]],[null,"\u0091"]]]],[null,"ER"]],[null,"ku"]]],[[null,"ls"],[[null,"act"],[null,"Fr"]]]],[[null,"\\"],[[null,"fotos/knuddels.de?n="],[null,"H"]]]]],[[null," "],[[[[[null,"Lu"],[null,"dem"]],[null,"end"]],[[[[[null,"Bü"],[null,"ap"]],[null,"74"]],[null,"chl"]],[null,"gle"]]],[null,"40"]]]]]]],[[[[[[[null,"!"],[null,"32"]],[[[null,"ein"],[[null,"sei"],[[null,"Ke"],[null,"ß"]]]],[[[null,"fg"],[null,"bal"]],[null,"ta"]]]],[[[null,"19"],[[null,"nde"],[[[null,"Men"],[null,"Lie"]],[null,"ad"]]]],[[[null,"Sf"],[null,"§"]],[null,"in"]]]],[[[[[[[[[null,"ec"],[[null,"\u001e"],[[null,"\u2039"],[[null,"Ã�"],[[null,"¦"],[null,"ê"]]]]]],[[null,"ι"],[null,"Hü"]]],[null,"os"]],[null,"rn"]],[[null,".mx_"],[null,"wei"]]],[null,".."]],[[[[[null,"ler"],[null,"rk"]],[null,"q"]],[[[[null,"tf"],[null,"Un"]],[null,"Po"]],[null,"Ver"]]],[null,"p"]]],[null,"/"]]],[[[[[[[[null,"}"],[[[null,"dw"],[[null,"Ñ•"],[[null,"\u0092"],[null,"ë"]]]],[null,"az"]]],[[null,"lu"],[null,"Fi"]]],[[[null,"kl"],[null,"wo"]],[null,"80"]]],[null,"\u0000p\u0000B\u0000pics/icon_fullChannel.gif\u0000-\u0000"]],[[null,"el"],[[null,"ty"],[[[null,"Neu"],[[null,"52"],[null,"lm"]]],[null,"01"]]]]],[[null,"|/w \"<"],[[[[[null,".quadcut_"],[[[null,"69"],[null,"dä"]],[null,"tu"]]],[[null,"fre"],[[null,"ih"],[[null,"ez"],[null,"98"]]]]],[null,"te"]],[[[null,"gir"],[null,"cnt"]],[[null,".border_"],[null,"it"]]]]]],[[[[[[null,"Y"],[null,"fullChannel.gif"]],[[[[null,"zo"],[null,"kc"]],[[null,"Ab"],[[[null,"Ï…"],[[[[null,"â–ª"],[[null,"â•©"],[null,"â„®"]]],[null,"Ê"]],[null,"\u008d"]]],[null,"82"]]]],[null,"33"]]],[[null,"nd"],[null,"F"]]],[[[[null,"Sp"],[null,"^"]],[[[null,"ach"],[null,"uc"]],[null,"ki"]]],[[null,"ich"],[[[[null,"fel"],[[null,"83"],[[null,"¿"],[null,"Û"]]]],[null,"br"]],[[null,"Fri"],[null,"dor"]]]]]],[[[[null,"de"],[null,"50"]],[[[[null,"aa"],[[null,"gb"],[null,"lc"]]],[[null,"für"],[null,"75"]]],[[null,"th"],[null,"Ber"]]]],[[[[[null,"Bal"],[null,"70"]],[[null,"45"],[[null,"Sw"],[null,"41"]]]],[[null,"il"],[[null,"hfl"],[[null,"Ih"],[null,"~"]]]]],[[null,"pics/female.gif"],[[null,"htt"],[[[[[[null,"♪"],[[[null,"¡"],[null,"è"]],[[null,"ı"],[[null,"\u2014"],[[null,"\\\\\\"],[null,"Ó™"]]]]]],[null,"·"]],[null,"At"]],[[null,"LE"],[null,"Sk"]]],[null,"2010"]]]]]]]]],[[[[[null,".gif"],[[[[null,"foto"],[[null,"Lan"],[[null,"\u0013"],[null,"ik"]]]],[null,"°>gt.gif<°"]],[[[null,"Ho"],[[[null,"dy"],[null,"Pi"]],[null,"alt"]]],[[null,"28"],[null,".jpg"]]]]],[null,"e"]],[[[null,"s"],[[[[null,"El"],[[null,"mer"],[null,"male.b.my_3.gif"]]],[null,"\u0000Flirt "]],[[[[[[null,"Ñ�"],[null,"76"]],[null,"nb"]],[null,"La"]],[null,"ns"]],[[[null,"rg"],[null,"08"]],[null,"Be"]]]]],[[[[[null,"v"],[[[null,"ml"],[[null,"cd"],[null,"73"]]],[null,"Bu"]]],[[null,"tr"],[null,"wi"]]],[[null,"mm"],[[[null,"sf"],[null,"Die"]],[null,"nt"]]]],[[[[null,"ly"],[[null,"em"],[null,"tmu"]]],[[[[null,"od"],[null,"sd"]],[null,"Kis"]],[[[null,"DD"],[[[[null,"\u0097"],[[null,"¨"],[null,"ÃŽ"]]],[null,"η"]],[null,"68"]]],[null,"Q"]]]],[[null,"ge"],[[[[[null,"84"],[null,"FC"]],[null,"gs"]],[null,"Ra"]],[[null,"su"],[[null,"iv"],[[null,"hh"],[null,"Pr"]]]]]]]]]],[[[null,"<"],[[[[null,"ha"],[null,"on"]],[[null,"T"],[null,"che"]]],[null,"h"]]],[[null,"\""],[[[[[[null,"cloudsblue.gif"],[[null,"Ci"],[null,"\u0003"]]],[[[null,"lig"],[[null,"\u0017"],[[[null,"\u008e"],[null,"\u0096"]],[[[[null,"ñ"],[null,"ý"]],[[null,"®"],[null,"у"]]],[[[[null,"ή"],[null,"İ"]],[[null,"Å‚"],[null,"Å„"]]],[null,"Ï�"]]]]]],[null,"bb"]]],[[null,"ber"],[null,"Li"]]],[[[[null,"Di"],[[null,"¯"],[null,"lg"]]],[[null,"Al"],[null,"Out"]]],[[null,"24"],[null,"un"]]]],[[[[null,"39"],[[[null,"urt"],[[null,"Is"],[null,"Rf"]]],[null,"71"]]],[[[null,"hl"],[null,"Bl"]],[null,"Ba"]]],[[[null,"ear"],[[null,"ech"],[[null,"Us"],[null,"47"]]]],[[[null,"ipi"],[null,";"]],[null,"ze"]]]]]]]]]],[[[[[[null,"."],[[[null,"7"],[[null,"at"],[[[[null,"wä"],[[null,"Hu"],[[null,"∂"],[[null,"º"],[[null,"ð"],[null,"ﻹ"]]]]]],[null,"ße"]],[[null,"ut"],[null,"fu"]]]]],[[[null,">--<"],[null,"an"]],[[[null,"Le"],[null,"sa"]],[[[[null,"\u0004"],[null,"gt"]],[null,"je"]],[null,"pwd"]]]]]],[[[[[[null,"Re"],[null,"he"]],[[null,"ho"],[[[null,"om"],[null,"ok"]],[null,"55"]]]],[[null,"war"],[[null,"hen"],[[[null,"pe"],[[null,"ek"],[null,"LL"]]],[null,"bu"]]]]],[[[null,"re"],[[[[null,"wü"],[null,"66"]],[null,"Se"]],[null,"Z"]]],[[[[null,"üc"],[[null,"Cr"],[null,"gu"]]],[null,"zu"]],[[[null,"J"],[[null,"mä"],[null,"42"]]],[[null,"bo"],[null,"Ca"]]]]]],[[[[null,"es"],[[[null,"Tag"],[[[null,"RR"],[null,"ry"]],[null,"\u0005"]]],[null,"26"]]],[[[[[null,"rr"],[null,"of"]],[null,"Dor"]],[null,"res"]],[[null,"cgi"],[[null,"dd"],[null,"|http://www3.knuddels.de:8080/txtl/click?d=knuddels.de&id="]]]]],[[[[[null,"Sm"],[[null,"43"],[null,"af"]]],[null,"ine"]],[[[null,"Co"],[[[[[[[null,"ª"],[null,"³"]],[null,"Σ"]],[null,"\u0089"]],[null,"»"]],[null,"CE"]],[null,"lk"]]],[null,"am"]]],[[[null,"pp"],[[null,"sw"],[[[null,"63"],[null,"my"]],[[null,"pf"],[[[[null,"\u009c"],[null,"æ"]],[null,"\u008c"]],[null,"\u001c"]]]]]],[[[null,"fhe"],[[null,"\b"],[null,"Vi"]]],[null,"ter"]]]]]]],[[[[[[null,"ÿ"],[null,"11"]],[[[[null,"fa"],[[[null,"sr"],[null,"Mf"]],[null,"\u0010"]]],[[null,"°>sm_"],[null,"Anz"]]],[null,"A"]]],[[[[null,"as"],[[[[null,"NR"],[null,"lr"]],[[null,"NT"],[null,"61"]]],[null,"nz"]]],[[[null,"ab"],[null,"gi"]],[[null,"dpg"],[null,"gr"]]]],[null,"("]]],[[[[null,"pics/male.gif"],[[null,"pg"],[[[[null,"Cu"],[[[[[[null,"δ"],[null,"Ï‚"]],[[null,"Ûš"],[null,"↔"]]],[[null,"Ñ–"],[null,"â–º"]]],[[null,"Û–"],[[[null,"Ä‘"],[null,"ħ"]],[[null,"Ƨ"],[null,"Û™"]]]]],[[[[null,"ν"],[null,"Ñ�"]],[null,"Ã�"]],[[null,"Ã*"],[[null,"â—�"],[null,"\u201d"]]]]]],[null,"Os"]],[null,"ow"]]]],[[null,"ck"],[[null,"Ã¥"],[null,"Ha"]]]],[[[[[[[null,"gd"],[null,"It"]],[null,"kt"]],[null,"len"]],[[null,"Ei"],[[null,"\u0007"],[null,"fr"]]]],[null,"C"]],[null,")"]]]],[[[[[[[null,"min"],[null,"Sie"]],[[null,"{"],[[null,"65"],[null,"Mü"]]]],[[null,"ö"],[[[[null,"Nü"],[null,"Do"]],[null,"io"]],[null,"Pf"]]]],[[[[null,"das"],[null,"V"]],[null,"Flirt"]],[[null,"ü"],[[[null,"rz"],[[null,"Gu"],[null,"fm"]]],[null,"Ham"]]]]],[null,"t"]],[[null,"en"],[null,"er"]]]]],[null,"\u0000"]],[[[[[[[[null,"der"],[[[null,"Cc"],[null,"Alt"]],[null,"Mix"]]],[[[[[[null,"As"],[null,"tp"]],[null,"nen"]],[null,"ld"]],[null,"05"]],[null,"is"]]],[[[[null,"Ã"],[[[null,"Lü"],[[[null,"Û˜"],[null,"Û¡"]],[[null,"Û¢"],[null,"¢"]]]],[null,"Ges"]]],[[[null,"auf"],[null,"and"]],[[null,"blg"],[null,"pr"]]]],[[null,"und"],[null,"al"]]]],[[[[[[[null,"In"],[null,"Wü"]],[null,"hie"]],[[null,"ges"],[[null,"öß"],[null,"ps"]]]],[null,"be"]],[[[null,"25"],[[null,"140"],[[[null,"hs"],[[[null,"ω"],[null,"ï"]],[[null,"\u0093"],[null,"σ"]]]],[null,"46"]]]],[null,"\u0080"]]],[[[null,"14"],[[null,"35"],[[null,"Em"],[null,"ger"]]]],[[null,"cg"],[null,"k"]]]]],[null,"-"]],[[[[[[[[[null,"wh"],[[null,"rp"],[[[[null,"\u0094"],[[null,"Λ"],[null,"\u009b"]]],[null,"â•‘"]],[[null,"\u0081"],[[null,"Ã�"],[[[null,"ÄŸ"],[null,"Æ�"]],[[null,"â–*"],[null,"â—„"]]]]]]]],[null,"Pa"]],[null,"U"]],[[null,"bl"],[[null,"ca"],[null,"vat"]]]],[[[[null,"37"],[[null,"eu"],[null,"ms"]]],[[null,"Mi"],[null,"cs"]]],[[null,"die"],[[null,"ay"],[null,"fi"]]]]],[[[null,"À"],[[null,"um"],[null,"sen"]]],[null,"="]]],[[[[[[null,"Br"],[[null,"ul"],[null,"fy"]]],[null,"vor"]],[[[null,"Wl"],[null,"tsc"]],[null,"rd"]]],[[null,"ne"],[[[[null,"Ku"],[[[null,"ε"],[null,"Ñ‚"]],[null,"Rü"]]],[null,"Par"]],[[[[null,"85"],[null,"wc"]],[null,"cr"]],[null,"rm"]]]]],[null,"1"]]],[null,"_"]]],[null," "]]]]]
 
 Und so nun in Javascript mein Decompressor:
 import Tree from '../../../Data/Tree.json' with { type: 'json' };
 
 export default (new class Huffman {
 constructor() {
 this.compressedData = "\\\\\\";
 this.buffer = Tree; //new Array(2);
 this.totalBytesProcessed = 0;
 this.totalBytesWritten = 0;
 this.finished = false;
 this.rawData = undefined;
 this.readIndex = 0;
 this.writeIndex = 0;
 }
 
 decompress(buffer) {
 if(typeof(buffer) === 'undefined' || buffer === null) {
 return null;
 }
 
 let uncompressed = [];
 this.rawData = buffer;
 this.readIndex = 0;
 this.writeIndex = 0;
 this.finished = false;
 let ast = [ this.buffer ];
 
 do {
 try {
 ast = ast[this.getBitValue()];
 
 if(ast[0] == null) {
 if(ast[1] == this.compressedData) {
 let i = 0;
 
 for(let j = 0; j < 16; j++) {
 i += this.getBitValue() << j;
 }
 
 uncompressed.push(String.fromCharCode(i));
 } else {
 uncompressed.push(ast[1]);
 }
 
 ast = this.buffer;
 }
 } catch(e) {}
 } while(!this.finished);
 
 let result = uncompressed.join('');
 this.totalBytesWritten += result.length;
 this.totalBytesProcessed += buffer.length;
 
 return result;
 }
 
 
 getBitValue() {
 try {
 let result = 0;
 
 if((this.rawData[this.writeIndex] & 1 << this.readIndex) != 0) {
 result = 1;
 }
 
 this.readIndex++;
 
 if(this.readIndex > 7) {
 ++this.writeIndex;
 this.readIndex = 0;
 this.finished = (this.writeIndex === this.rawData.length);
 }
 
 return result;
 } catch(e) {
 return 0;
 }
 }
 }());
 
 Das Problem, was ich allerdings habe:
 Er ermittelt nicht richtig das Resultat.
 In dem Java-Crapper, der den Tree holt wird es korrekt dargestellt:
 5\0James\0Mentorsystem 
 
 Über Javascript allerdings:
 i\0James\0Mentorsystem 
 
 Im SYSTEM-BOT Packet "5", da es so klein ist, ist nur der Opcode betroffen.
 
 Das lesen des Paketes aus dem Stream scheint auch korrekt zu funktionieren:
 
 export default (new class Packet {
 DecodeKey = null;
 
 decode(buff) {
 let pos = 0;
 let first = buff[pos++];
 
 if(first === null) {
 return null;
 }
 
 if(first == -1) {
 return null;
 }
 
 let length = 0;
 
 if(first >= 0) {
 length = first + 1;
 } else {
 length = (first & 0x1F) + 1;
 let count = (first & 0x60) >>> 5;
 
 for(let i = 1; i < count; i++) {
 let nextByte = buff[pos++];
 
 if(nextByte == -1) {
 throw new IOException("Unexpected end of stream");
 }
 
 length += nextByte << (i - 1) * 8;
 }
 }
 
 let buffer = Buffer.alloc(length);
 
 for(let i = 0; i < length; i++) {
 let readByte = buff[pos++];
 
 if(readByte == -1) {
 throw new IOException("Unexpected end of stream");
 }
 
 buffer[i] = (readByte ^ (this.DecodeKey != null && i < this.DecodeKey.length ? this.DecodeKey[i] : 0));
 }
 
 //console.log('[Packet]', length, buffer.length);
 
 return new Uint8Array(buffer);
 }
 
 encode(message) {
 if(typeof(message) === 'undefined') {
 return null;
 }
 
 const length = message.length - 1;
 let len;
 
 if(length < 128) {
 len = Buffer.from([ length ]);
 } else {
 let count = 0;
 console.log("ZWO");
 while((32 << ((count + 1) << 3)) <= length) {
 //while(32 << (count + 1 << 3) <= length) {
 count++;
 }
 
 count++;
 
 len = Buffer.alloc(count + 1);
 len[0] = (count << 5) | 0x80 | (length & 0x1F);
 //len[0] = (count << 5 | 0x80 | length & 0x1F);
 
 for(let i = 1; i < len.length; i++) {
 len[i] = (length >>> (8 * (i - 1)) + 5) & 0xFF;
 //len[i] = (length >>> 8 * (i - 1) + 5);
 }
 }
 
 return Buffer.concat([ len, message ]);
 }
 }());
 
 
 Der Unterschied zwischen 32/64-bit-Behandlung zwischen Java und Node.js soll wohl keine Probleme bereiten, auch das bit-shifting & co soll wie gewohnt in Java funktionieren.
 
 Hat vielleicht jemand eine Idee, übersehe ich etwas?
 
- 
	18.01.2025, 15:19 #2U-Labs Elite  
 - Registriert seit
- 28.10.2011
- Beiträge
- 630
 Thanked 283 Times in 171 Posts AW: Aktueller Huffman-Tree AW: Aktueller Huffman-TreeIch hab nun durch einige Änderungen ein besseres Ergebnis erzielt. 
 Hier ist der aktualisierte Code:
 
 import Tree from '../../../Data/Tree.json' with { type: 'json' };
 
 export default (new class Huffman {
 constructor() {
 this.compressedData = "\\\\\\";
 this.buffer = Tree;
 this.totalBytesProcessed = 0;
 this.totalBytesWritten = 0;
 this.finished = false;
 this.rawData = undefined;
 this.readIndex = 0;
 this.writeIndex = 0;
 }
 
 decompress(buffer) {
 if (typeof (buffer) === 'undefined' || buffer === null) {
 return null;
 }
 
 let uncompressed = [];
 this.rawData = buffer;
 this.readIndex = 0;
 this.writeIndex = 0;
 this.finished = false;
 let ast = this.buffer;
 
 while (true) {
 if (this.finished) {
 let result = uncompressed.join('');
 this.totalBytesWritten += result.length;
 this.totalBytesProcessed += buffer.length;
 return result;
 }
 
 try {
 ast = ast[this.getBitValue()];
 
 if (ast[0] == null) {
 if (ast[1] != this.compressedData) {
 uncompressed.push(ast[1]);
 } else {
 let code = 0;
 
 for (let index = 0; index < 16; index++) {
 code |= this.getBitValue() << index;
 }
 
 uncompressed.push(String.fromCharCode(code));
 }
 
 ast = this.buffer; // Reset AST after finding a leaf
 }
 } catch (e) { }
 }
 }
 
 getBitValue() {
 if (!this.rawData || this.writeIndex >= this.rawData.length) {
 this.finished = true;
 return 0;
 }
 
 let result = (this.rawData[this.writeIndex] >> this.readIndex) & 1;
 this.readIndex++;
 
 if (this.readIndex > 7) {
 this.writeIndex++;
 this.readIndex = 0;
 this.finished = (this.writeIndex === this.rawData.length);
 }
 
 return result;
 }
 }());
 
 Es scheint aber immer noch an einigen Ecken zu hapern:
 
 
- 
	21.01.2025, 01:48 #3Nachrichtendienst  
 - Registriert seit
- 17.12.2011
- Beiträge
- 152
 Thanked 87 Times in 60 Posts AW: Aktueller Huffman-Tree AW: Aktueller Huffman-TreeIst das überhaupt noch notwendig? Warum nicht einfach direkt im Browser manipulieren (zum Beispiel per Userscript)? Wenn es sowieso auf dem PC ausgeführt werden muss, könnte man doch direkt den Browser-Tab offen lassen, den Token mitnehmen und über GraphQL kommunizieren oder geht es bei deinem Beispiel eher um einen Lernzweck? 
 
 Per Userscript hast du halt auch viele Vorteile: Du kannst es plattformunabhängig nutzen, auch mobil über die Stay Safari-Erweiterung für iOS oder den Kiwi Browser mit Userscript-Erweiterung unter Android. So müsstest du dich gar nicht so tief mit dem Protokoll beschäftigen. Kannst halt direkt den DOM manipulieren und direkt auf beispielsweise HTML Elemente zugreifen bzw diese modifizieren
 
- 
	07.02.2025, 10:12 #4U-Labs Elite  
 - Registriert seit
- 28.10.2011
- Beiträge
- 630
 Thanked 283 Times in 171 Posts AW: Aktueller Huffman-Tree AW: Aktueller Huffman-TreeEs geht hier ausschließlich um die Java-Version. 
 
 Über K3 mit GraphQL gibt es weder alle Chatbefehle, noch wurden alle Features implementiert (typisch Knuddels). Die Java-Version ist demnach viel umfangreicher und für so einige Zwecke besser geeignet.
 
- 
	28.02.2025, 02:48 #5 AW: Aktueller Huffman-Tree AW: Aktueller Huffman-TreeMoin, 
 ich verfolge deine Projekte immer gerne auf github, da ich einen ähnlichen Plan hatte und habe.
 Den Huffmantree hab ich auch vor Monaten mal aus der StApp gezogen, hat auch funktioniert gehabt. Keine Ahnung ob und wie stark er sich geändert hat 
 
- 
	28.02.2025, 10:26 #6U-Labs Elite  
 - Registriert seit
- 28.10.2011
- Beiträge
- 630
 Thanked 283 Times in 171 Posts AW: Aktueller Huffman-Tree AW: Aktueller Huffman-TreeIch könnte bei Gelegengeit die Sachen auf GitHub mal öffentlich stellen, das ganze sollte sowieso irgendwann OpenSource sein. 
 
 Ich hab diverse Bot-Ansätze bereits umgesetzt, das sind alles aber teilweise schlecht funktionierende Skeletons (auch in verschiedenen Programmiersprachen).
 
- 
	01.03.2025, 03:34 #7 AW: Aktueller Huffman-Tree AW: Aktueller Huffman-TreeIch hab vor ca. eineinhalb Jahren in Java ne Library gebastelt, die die GraphQL API von Knuddels nutzt und sich mit dem Websocket verbindet um Nachrichten zu verarbeiten. Mit der StApp hab ich bisher noch keinen richtigen Erfolg gehabt. 
 
 Würde mich auf jeden Fall interessieren, welche Ansätze du sonst noch verfolgt hast. Wenn Interesse deinerseits besteht, könnte man sich ja auch mal zusammensetzen? 
 
- 
	13.03.2025, 21:20 #8U-Labs Elite  
 - Registriert seit
- 28.10.2011
- Beiträge
- 630
 Thanked 283 Times in 171 Posts AW: Aktueller Huffman-Tree AW: Aktueller Huffman-TreeIch hab mal zwei Ansätze für K3 hochgeladen: 
 
 https://github.com/Bizarrus/K3-Bot
 
 Das eine ist eine Browser-Extension, was sich nur im Netzwerk zwischenhängen soll und das andere ein Standalone-Clienten.
 
 Der Standalone-Client hat schon einige Features eingebaut, die ziemlich nice sind, steht aber auch in der Readme:
 Edit:Features
 Automatic response to ping-Events
 Subscriptionable Events
 Automatic Session-Renewing
 Automatic Keep-Online Events
 Full GraphQL fragments, querys, enums, subscriptions & mutations (See Protocol)
 
 Implemented Bots
 StayOnline (sends each 4 Minutes a random Text)
 DailyLogin (automatically collects the daily login)
 QuestSolver (automatically solve quests)
 Hier ist noch das Proxy-Projekt, wo ich Probleme mit dem Huffman habe:
 https://github.com/Bizarrus/KnoxyGeändert von Bubble Gum (14.03.2025 um 09:16 Uhr) 
 
- 
	The Following User Says Thank You to Bubble Gum For This Useful Post:
 
Ähnliche Themen
- 
  [C#] HuffmanVon SeBi im Forum SourcecodeAntworten: 8Letzter Beitrag: 27.05.2020, 11:19
- 
  [C#] HuffmanVon Brainy im Forum SourcecodeAntworten: 2Letzter Beitrag: 27.05.2020, 09:59
- 
  [Release] Huffman (Java Library)Von Flav im Forum ProtokollAntworten: 2Letzter Beitrag: 05.07.2013, 15:17
- 
  Module Tree Viewer Tool - Wer war des? oÔVon Bubble Gum im Forum RessourcenAntworten: 8Letzter Beitrag: 20.05.2013, 15:41
- 
  [Java] HuffmanVon Flav im Forum SourcecodeAntworten: 2Letzter Beitrag: 14.04.2012, 10:27
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.
 
									 
														 
														 
					
					
					
						 Zitieren
  Zitieren