text: # Copyright (c) Twisted Matrix Laboratories.
  # See LICENSE for details.
  
  
  def parse(s):
      s = s.strip()
      expr = []
      while s:
          if s[0:1] == b"(":
              newSexp = []
              if expr:
                  expr[-1].append(newSexp)
              expr.append(newSexp)
              s = s[1:]
              continue
          if s[0:1] == b")":
              aList = expr.pop()
              s = s[1:]
              if not expr:
                  assert not s
                  return aList
              continue
          i = 0
          while s[i : i + 1].isdigit():
              i += 1
          assert i
          length = int(s[:i])
          data = s[i + 1 : i + 1 + length]
          expr[-1].append(data)
          s = s[i + 1 + length :]
      assert False, "this should not happen"
  
  
  def pack(sexp):
      return b"".join(
          b"(%b)" % (pack(o),)
          if type(o) in (type(()), type([]))
          else b"%d:%b" % (len(o), o)
          for o in sexp
      )
  