docs: protected static final ManagedObject restoreFromSerializedBytes(byte serializedBytes[],
                                                                      ObjectManagerState objectManagerState)
                      throws ObjectManagerException {
          String methodName = "restoreFromSerializedBytes";
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.entry(cclass,
                          methodName,
                          new Object[] { serializedBytes,
                                        objectManagerState });
  
          ManagedObject managedObjectToReturn = null;
  
          java.io.ByteArrayInputStream byteArrayInputStream = new java.io.ByteArrayInputStream(serializedBytes);
  
          // Discover what to deserialize and how to deserialize it.
          int objectSignature;
          java.io.DataInputStream dataInputStream = new java.io.DataInputStream(byteArrayInputStream);
          try {
              objectSignature = dataInputStream.readInt();
  
          } catch (java.io.IOException exception) {
              // No FFDC Code Needed.
              ObjectManager.ffdc.processException(cclass, "restoreFromSerializedBytes", exception, "1:310:1.34");
  
              if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
                  trace.exit(cclass,
                             methodName,
                             exception);
              throw new PermanentIOException(cclass,
                                             exception);
          } // catch.
          switch (objectSignature) {
              case SimplifiedSerialization.signature_DefaultSerialization:
                  managedObjectToReturn = restoreSerializedDefault(byteArrayInputStream, objectManagerState);
                  break;
  
              case SimplifiedSerialization.signature_ConcurrentSublist_Link:
                  managedObjectToReturn = new ConcurrentSubList.Link();
                  ((ConcurrentSubList.Link) managedObjectToReturn).readObject(dataInputStream
                                                                              , objectManagerState
                                  );
                  break;
  
              case SimplifiedSerialization.signature_ConcurrentSublist:
                  managedObjectToReturn = new ConcurrentSubList();
                  ((ConcurrentSubList) managedObjectToReturn).readObject(dataInputStream
                                                                         , objectManagerState
                                  );
                  break;
  
              case SimplifiedSerialization.signature_LinkedList_Link:
                  managedObjectToReturn = new LinkedList.Link();
                  ((LinkedList.Link) managedObjectToReturn).readObject(dataInputStream
                                                                       , objectManagerState
                                  );
                  break;
  
              case SimplifiedSerialization.signature_LinkedList:
                  managedObjectToReturn = new LinkedList();
                  ((LinkedList) managedObjectToReturn).readObject(dataInputStream
                                                                  , objectManagerState
                                  );
                  break;
  
              case SimplifiedSerialization.signature_TreeMap:
                  managedObjectToReturn = new TreeMap();
                  ((TreeMap) managedObjectToReturn).readObject(dataInputStream
                                                               , objectManagerState
                                  );
                  break;
  
              case SimplifiedSerialization.signature_TreeMap_Entry:
                  managedObjectToReturn = new TreeMap.Entry();
                  ((TreeMap.Entry) managedObjectToReturn).readObject(dataInputStream
                                                                     , objectManagerState
                                  );
                  break;
  
              case SimplifiedSerialization.signature_ConcurrentLinkedList:
                  managedObjectToReturn = new ConcurrentLinkedList();
                  ((ConcurrentLinkedList) managedObjectToReturn).readObject(dataInputStream
                                                                            , objectManagerState
                                  );
                  break;
  
              case SimplifiedSerialization.signature_ObjectManagerState:
                  managedObjectToReturn = new ObjectManagerState();
                  ((ObjectManagerState) managedObjectToReturn).readObject(dataInputStream
                                                                          , objectManagerState
                                  );
                  break;
  
              case SimplifiedSerialization.signature_Generic:
                  final String className;
                  try
                  {
                      className = dataInputStream.readUTF();
                  } catch (java.io.IOException exception)
                  {
                      // No FFDC Code Needed.
                      ObjectManager.ffdc.processException(cclass, methodName, exception, "1:390:1.34");
                      if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
                          trace.exit(cclass, methodName, exception);
                      throw new PermanentIOException(cclass, exception);
                  } // catch. 
  
                  try
                  {
                      Constructor constructor = (Constructor) _genericConstructors.get(className);
                      if (constructor == null)
                      {
                          // Defect 609434
                          // If we need a constructor then create one in a doPrivileged block
                          // to allow us to set access to the constructor with system level
                          // privileges.
                          constructor = (Constructor) AccessController.doPrivileged(new PrivilegedExceptionAction()
                          {
                              public Object run() throws Exception
                              {
                                  Class classToInstantiate = Class.forName(className);
                                  Constructor retval = classToInstantiate.getDeclaredConstructor(new Class[0]);
                                  retval.setAccessible(true);
                                  _genericConstructors.put(className, retval);
                                  return retval;
                              }
                          });
                      }
                      managedObjectToReturn = (ManagedObject) constructor.newInstance(new Object[0]);
                  } catch (java.security.PrivilegedActionException exception)
                  {
                      // No FFDC Code Needed.
                      Throwable cause = exception.getCause();
                      if (cause instanceof java.lang.ClassNotFoundException)
                      {
                          ObjectManager.ffdc.processException(cclass, methodName, cause, "1:424:1.34");
                          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
                              trace.exit(cclass, methodName, cause);
                          throw new com.ibm.ws.objectManager.ClassNotFoundException(cclass, (java.lang.ClassNotFoundException) cause);
                      }
                      else if (cause instanceof Exception)
                      {
                          ObjectManager.ffdc.processException(cclass, methodName, cause, "1:430:1.34");
                          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
                              trace.exit(cclass, methodName, cause);
                          throw new UnexpectedExceptionException(cclass, (Exception) cause);
                      }
                      else
                      {
                          ObjectManager.ffdc.processException(cclass, methodName, cause, "1:436:1.34");
                          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
                              trace.exit(cclass, methodName, cause);
                          throw (Error) cause;
                      }
                  } catch (Exception exception)
                  {
                      // No FFDC Code Needed.
                      ObjectManager.ffdc.processException(cclass, methodName, exception, "1:444:1.34");
                      if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
                          trace.exit(cclass, methodName, "via UnexpectedExceptionException");
                      throw new UnexpectedExceptionException(cclass, exception);
                  } // catch.  
  
                  // readObject is allowed to Throw java.io.IOException because it is a public interface
                  // and may not want to throw ObjectManagerException. 
                  try {
                      ((SimplifiedSerialization) managedObjectToReturn).readObject(dataInputStream,
                                                                                   objectManagerState);
                  } catch (java.io.IOException exception) {
                      // No FFDC Code Needed.
                      ObjectManager.ffdc.processException(cclass,
                                                          methodName,
                                                          exception,
                                                          "1:459:1.34");
  
                      if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
                          trace.exit(cclass,
                                     methodName,
                                     "via PermanentIOException");
                      throw new PermanentIOException(cclass, exception);
                  } // try. 
                  break;
  
              default:
                  ObjectSignatureNotFoundException objectSignatureNotFoundException = new ObjectSignatureNotFoundException(cclass, objectSignature);
                  ObjectManager.ffdc.processException(cclass, methodName, objectSignatureNotFoundException, "1:471:1.34");
  
                  if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled()) {
                      trace.bytes(cclass,
                                  serializedBytes,
                                  0, Math.min(serializedBytes.length, 1000)
                                      );
                      trace.exit(cclass,
                                 methodName,
                                 objectSignatureNotFoundException);
                  } // if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled()).
  
                  throw objectSignatureNotFoundException;
          } // Switch (objectSignature).                        
  
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.exit(cclass,
                         methodName,
                         new Object[] { managedObjectToReturn });
          return managedObjectToReturn;
      }