code: void ReconstructPrivateDict(int Font,OffsetItem[] fdPrivate,IndexBaseItem[] fdPrivateBase,
  			OffsetItem[] fdSubrs)
  	{
  		
  		// For each fdarray private dict check if that FD is used.
  	    // if is used build a new one by changing the subrs offset
  	    // Else do nothing
  		for (int i=0;i<fonts[Font].fdprivateOffsets.length;i++)
  		{
  			if (FDArrayUsed.containsKey(Integer.valueOf(i)))
  			{
  				// Mark beginning
  		        OutputList.addLast(new MarkerItem(fdPrivate[i]));
  		        fdPrivateBase[i] = new IndexBaseItem();
  		        OutputList.addLast(fdPrivateBase[i]);
  				// Goto beginning of objects
  	            seek(fonts[Font].fdprivateOffsets[i]);
  	            while (getPosition() < fonts[Font].fdprivateOffsets[i]+fonts[Font].fdprivateLengths[i])
  	            {
  	            	int p1 = getPosition();
  	            	getDictItem();
  	            	int p2 = getPosition();
  	            	// If the dictItem is the "Subrs" then, 
  	            	// use marker for offset and write operator number
  	            	if (key=="Subrs") {
  	            		fdSubrs[i] = new DictOffsetItem();
  	            		OutputList.addLast(fdSubrs[i]);
  	            	    OutputList.addLast(new UInt8Item((char)19)); // Subrs
  	            	}
  	            	// Else copy the entire range
  	            	else
  	            		OutputList.addLast(new RangeItem(buf,p1,p2-p1));
  	            }
  			}
  		}
  	}
docs: Function Adds the new private dicts (only for the FDs used) to the list
  @param Font the font
  @param fdPrivate OffsetItem array one element for each private
  @param fdPrivateBase IndexBaseItem array one element for each private
  @param fdSubrs OffsetItem array one element for each private