return parseString(str, true, false);
char[] buffer = new char[81920];  int pos = 0; int ipos = 0;  CCNode activeNode = ccTable, prevNode = null;  boolean opcode = false, endcc = false; int arglevel = 0; int menulevel = 0;  int curcode = 0;  int ch;  for (int i = 0; i < str.length(); i++) { ch = str.charAt(ipos++) & 0xFF;     if (arglevel > 0) { if (showCC) { addCode(buffer, ch, pos); pos += 4; }  arglevel--; if (arglevel == 0) buffer[pos++] = '\u1234'; continue; } if (endcc) break;   if (!opcode) { if (isCC(ch)) { curcode = ch; opcode = true; if (codesOnly && showCC) { buffer[pos++] = '\u1234'; } } }                if (opcode) {    int n = searchNode(activeNode, ch); if (n == -1) {  opcode = false; activeNode = ccTable; prevNode = null; } else {  prevNode = activeNode; activeNode = (CCNode) activeNode.nodes.get(n); }       if (activeNode.type == TYPE_ARGLIST) {   arglevel = activeNode.num_arg - 1;    if (activeNode.arg_multiplier && ch < MAX_ARG_MULT) { CCNode t = prevNode; while (!t.isTerminator) t = (CCNode) t.nodes.get(0); arglevel = ((t.num_arg - 1) * ch);                         }    if (curcode == 0x15 || curcode == 0x16 || curcode == 0x17) { if (codesOnly) { if (showCC) { addCode(buffer, curcode, pos); pos += 4; addCode(buffer, ch, pos); pos += 4; } } else { int c = ((curcode - 0x15) * 256) + ch;  for (int p = 0; p < comprTable[c].length;) { buffer[pos++] = comprTable[c][p++]; } } } else if (showCC) { addCode(buffer, ch, pos); pos += 4; } } if (activeNode.type == TYPE_CODE) {   if (curcode != 0x15 && curcode != 0x16 && curcode != 0x17 && showCC) { addCode(buffer, ch, pos); pos += 4; } }     if (activeNode.menu_lower) { if (menulevel > 0) menulevel--; else break; }   if (activeNode.endcc && activeNode.cc != null) { endcc = true; }         if (activeNode.isTerminator) {  if (arglevel == 0) buffer[pos++] = '\u1234'; opcode = false;  if (activeNode.menu_raise) menulevel++;    activeNode = ccTable; } } else {    char cht = (crdChr ? EbHackModule .simpCreditsToRegChar((char) ch) : (char) (ch - asciiOff));  if (codesOnly && showCC) { addCode(buffer, ch, pos); pos += 4; } else { if (cht == '[' || cht == ']') { if (showCC) { addCode(buffer, ch, pos); pos += 4; buffer[pos++] = '\u1234'; } } else { buffer[pos++] = cht; } } } }  return parseGrouping(new String(buffer, 0, pos));
    public String parseString(String str)    {        return parseString(str, true, false);    }