diff --git a/src/edu/nps/moves/dis7/utilities/DisNetworking.java b/src/edu/nps/moves/dis7/utilities/DisNetworking.java
index fd01d7609338b951cb230e44cbf73c4989383f18..d99daef5fd257a686678e0d9ac5f818df2ffef07 100644
--- a/src/edu/nps/moves/dis7/utilities/DisNetworking.java
+++ b/src/edu/nps/moves/dis7/utilities/DisNetworking.java
@@ -48,7 +48,7 @@ public class DisNetworking
 
   public DisNetworking()
   {
-    this(DisThreadedNetIF.DEFAULT_DIS_PORT, DisThreadedNetIF.DEFAULT_MCAST_GROUP);
+    this(DisThreadedNetIF.DEFAULT_DIS_PORT, DisThreadedNetIF.DEFAULT_MULTICAST_ADDRESS);
   }
 
   public DisNetworking(int port, String mcastgroup)
diff --git a/src/edu/nps/moves/dis7/utilities/DisThreadedNetIF.java b/src/edu/nps/moves/dis7/utilities/DisThreadedNetIF.java
index e71139f9d56c9bca0d27daf75a95847b938f80d3..70f5c5f7b75357e984a31122cb1f6d5a50e9dbe5 100644
--- a/src/edu/nps/moves/dis7/utilities/DisThreadedNetIF.java
+++ b/src/edu/nps/moves/dis7/utilities/DisThreadedNetIF.java
@@ -60,7 +60,7 @@ public class DisThreadedNetIF
   /************ Begin class ***************/
   
   public static int DEFAULT_DIS_PORT = 3000;
-  public static String DEFAULT_MCAST_GROUP = "225.4.5.6";
+  public static String DEFAULT_MULTICAST_ADDRESS = "225.4.5.6";
   
   /** 8192: This has actually been superseded by a larger buffer size, but good enough for now */
   public static final int MAX_DIS_PDU_SIZE = 8192;
@@ -82,7 +82,7 @@ public class DisThreadedNetIF
    */
   public DisThreadedNetIF()
   {
-    this(DEFAULT_DIS_PORT, DEFAULT_MCAST_GROUP);
+    this(DEFAULT_DIS_PORT, DEFAULT_MULTICAST_ADDRESS);
   }
 
   /**
@@ -237,17 +237,20 @@ public class DisThreadedNetIF
 
                     pdu = pduFactory.createPdu(buffer);
 
-                    if (pdu != null) {
+                    if (pdu != null)
+                    {
                         counter++; // TODO experimental, add to generator as a commented-out diagnostic; consider adding diagnostic mode
                         System.err.println(counter + ". received " + pdu.getPduType().name());
                         toListeners(pdu);
                     }
                     buffer.clear();
                 }
-            } catch (IOException ex) {
+            } 
+            catch (IOException ex) {
                 System.err.println("Exception in DisThreadedNetIF receive thread: " + ex.getLocalizedMessage());
                 System.err.println("Retrying new socket in 1 second");
-            } finally {
+            } 
+            finally {
                 if (socket != null && !socket.isClosed()) {
                     try {
                         ((MulticastSocket)socket).leaveGroup(group, ni);
diff --git a/src/edu/nps/moves/dis7/utilities/PduFactory.java b/src/edu/nps/moves/dis7/utilities/PduFactory.java
index 6fb183a25ad8e98bf7ae416d67a8f62837658c93..106f2ae81f51cccf528d037dffd5d3200a973f86 100644
--- a/src/edu/nps/moves/dis7/utilities/PduFactory.java
+++ b/src/edu/nps/moves/dis7/utilities/PduFactory.java
@@ -1462,13 +1462,13 @@ public class PduFactory
    * PDU builder. Pass in a data buffer, get the correct type of pdu back
    * based on the PDU type field contained in the underlying array.
    *
-   * @param buff the buffer containing PDU data to input
+   * @param byteBuffer the buffer containing PDU data to input
    * @return A PDU of the appropriate concrete subclass of PDU or null if there was an error
    */
-  public Pdu createPdu(ByteBuffer buff)
+  public Pdu createPdu(ByteBuffer byteBuffer)
   {
-    DISPDUType type = getTypeFromByteArray(buff.array());
-    return createPdu(type, buff);
+    DISPDUType pduType = getTypeFromByteArray(byteBuffer.array());
+    return createPdu(pduType, byteBuffer);
   }
 
   /**
@@ -1493,7 +1493,7 @@ public class PduFactory
     return createPdu(pduType, null);
   }
   
-  private Pdu createPdu(DISPDUType pduType, ByteBuffer buff)
+  private Pdu createPdu(DISPDUType pduType, ByteBuffer byteBuffer)
   {
     Pdu aPdu = null;
     switch (pduType) {
@@ -1797,15 +1797,14 @@ public class PduFactory
     }   // end switch
 
     if (aPdu != null) {
-      if (buff != null) {
+      if (byteBuffer != null) {
           try {
-              aPdu.unmarshal(buff);
+              aPdu.unmarshal(byteBuffer);
           } catch (Exception ex) {
               Logger.getLogger(PduFactory.class.getName()).log(Level.SEVERE, null, ex);
           }
       }
     }
-
     return aPdu;
   }
 
diff --git a/src/edu/nps/moves/dis7/utilities/stream/PduRecorder.java b/src/edu/nps/moves/dis7/utilities/stream/PduRecorder.java
index 6ad38e2df057c379494edf1528ad02e8d84a5b36..511ef1de9edfe28edb899bb242c928216ea7d418 100644
--- a/src/edu/nps/moves/dis7/utilities/stream/PduRecorder.java
+++ b/src/edu/nps/moves/dis7/utilities/stream/PduRecorder.java
@@ -30,8 +30,8 @@ public class PduRecorder implements PduReceiver
 {
   public static final String COMMENT_MARKER = "#";
   
-  static String DEFAULT_OUTDIR = "./pduLog";
-  static String DEFAULT_FILEPREFIX = "Pdusave"; // TODO better name
+  static String outputDirectoryPath   = "./pduLog";
+  static String DEFAULT_FILE_PREFIX   = "PduCaptureLog";
   static String DISLOG_FILE_EXTENSION = ".dislog";
   
   static final String START_COMMENT_MARKER           = COMMENT_MARKER + " Start, ";
@@ -42,72 +42,72 @@ public class PduRecorder implements PduReceiver
   static final String ENCODING_XML                   = "ENCODING_XML";     // TODO, repeat Open-DIS version 4 effort
   static final String ENCODING_EXI                   = "ENCODING_EXI";     // TODO, use Exificient or Nagasena libraries
   static final String ENCODING_JSON                  = "ENCODING_JSON";    // TODO, repeat Open-DIS version 4 effort
-  static final String ENCODING_MAK_DATA_LOGGER       = "ENCODING_MAK_DATA_LOGGER";        // verbose pretty-print. perhaps output only (MAK format itself is binary)
+  static final String ENCODING_MAK_DATA_LOGGER       = "ENCODING_MAK_DATA_LOGGER";       // verbose pretty-print. perhaps output only (MAK format itself is binary)
   static final String ENCODING_WIRESHARK_DATA_LOGGER = "ENCODING_WIRESHARK_DATA_LOGGER"; // 
   static final String ENCODING_CDIS                  = "ENCODING_CDIS";    // future work based on new SISO standard
   
   private static String pduLogEncoding = ENCODING_PLAINTEXT; // TODO use Java enumerations, generalize/share across library
 
-  private Writer writer;
+  private Writer logFileWriter;
   private File   logFile;
-  private DisThreadedNetIF disThreadedNetIF;
-  private DisThreadedNetIF.RawPduListener lis;
+  private DisThreadedNetIF                disThreadedNetIF;
+  private DisThreadedNetIF.RawPduListener disRawPduListener;
   
-  Long startNanoTime = null;
-  StringBuilder sb = new StringBuilder();
-  Base64.Encoder base64Encoder = Base64.getEncoder();
-  int pduCount = 0;
-  boolean headerWritten = false;
-  boolean doSave = true;
+  private Long      startNanoTime = null;
+  private final  StringBuilder sb = new StringBuilder();
+  private final  Base64.Encoder base64Encoder = Base64.getEncoder();
+  private static int     port     = DisThreadedNetIF.DEFAULT_DIS_PORT; // self-test via port 1 when main() invoked
+  private final  int     pduCount = 0;    // debug
+  private boolean headerWritten   = false;
+  private boolean running         = true; // starts recording by default
   
   /**
-   * Default constructor that uses default values for output directory, multicast
-   * address and port.
+   * Default constructor that uses default values for output directory, multicast address and port.
    * 
    * @throws IOException if something goes wrong during instantiation
    */
   public PduRecorder() throws IOException
   {
-    this(DEFAULT_OUTDIR, DisThreadedNetIF.DEFAULT_MCAST_GROUP, DisThreadedNetIF.DEFAULT_DIS_PORT);
+      this(outputDirectoryPath, DisThreadedNetIF.DEFAULT_MULTICAST_ADDRESS, port);
   }
   
   /**
    * Constructor to let the use specify an output directory. Uses default values 
    * for multicast address and port.
    * 
-   * @param dir the directory to write log files to
-   * 
+   * @param directoryPath the directory to write log files to
    * @throws IOException if something goes wrong during instantiation
    */
-  public PduRecorder(String dir) throws IOException
+  public PduRecorder(String directoryPath) throws IOException
   {
-    this(dir, DisThreadedNetIF.DEFAULT_MCAST_GROUP, DisThreadedNetIF.DEFAULT_DIS_PORT);
+    this(directoryPath, DisThreadedNetIF.DEFAULT_MULTICAST_ADDRESS, DisThreadedNetIF.DEFAULT_DIS_PORT);
   }
   
   /** Constructor to let the user specify all required parameters
    * 
-   * @param outputDir the directory to write log files to
-   * @param mcastaddr the multicast group address to receive data from
+   * @param outputPath local path to the directory to write log files to
+   * @param multicastAddress the multicast group address to receive data from (TODO allow unicast UDP)
    * @param port the port to receive data through
    * @throws IOException if something goes wrong during instantiation
    */
-  public PduRecorder(String outputDir, String mcastaddr, int port) throws IOException
+  @SuppressWarnings("Convert2Lambda")
+  public PduRecorder(String outputPath, String multicastAddress, int port) throws IOException
   {
-    DEFAULT_OUTDIR = outputDir;
-    logFile = makeFile(new File(outputDir).toPath(), DEFAULT_FILEPREFIX+DISLOG_FILE_EXTENSION );
-    writer = new PrintWriter(new BufferedWriter(new FileWriter(logFile)));
+    outputDirectoryPath = outputPath;
+    logFile       = createUniquePduLogFile(new File(outputPath).toPath(), DEFAULT_FILE_PREFIX + DISLOG_FILE_EXTENSION );
+    logFileWriter = new PrintWriter(new BufferedWriter(new FileWriter(logFile)));
     
-    disThreadedNetIF = new DisThreadedNetIF(port, mcastaddr);
+    disThreadedNetIF = new DisThreadedNetIF(port, multicastAddress);
     
-    lis = new DisThreadedNetIF.RawPduListener() {
+    disRawPduListener = new DisThreadedNetIF.RawPduListener() {
         @Override
         public void incomingPdu(DisThreadedNetIF.BuffAndLength bAndL) {
             receivePdu(bAndL.buff, bAndL.length);
         }
     };
     
-    disThreadedNetIF.addRawListener(lis);
-    System.out.println(getClass() + " listening to IP address " + mcastaddr + " on port: " + port);
+    disThreadedNetIF.addRawListener(disRawPduListener);
+    System.out.println(getClass() + " listening to IP address " + multicastAddress + " on port " + port);
   }
   
     /**
@@ -115,48 +115,54 @@ public class PduRecorder implements PduReceiver
      *
      * @return the pduLogEncoding
      */
-    public static String getEncoding() {
+    public static String getPduLogEncoding()
+    {
         return pduLogEncoding;
     }
 
     /**
-     * @param aEncoding the pduLogEncoding to set
+     * @param newPduLogEncoding the pduLogEncoding to set
      */
-    public static void setEncoding(String aEncoding) {
-        pduLogEncoding = aEncoding;
+    public static void setPduLogEncoding(String newPduLogEncoding) {
+        pduLogEncoding = newPduLogEncoding;
     }
   
   public void startResume()
   {
-    doSave = true;
+    running = true;
   }
   
   public void stopPause()
   {
-    doSave = false;
+    running = false;
   }
   
   public File end()
   {
-    doSave = false;
-    disThreadedNetIF.removeRawListener(lis);
+    running = false;
+    disThreadedNetIF.removeRawListener(disRawPduListener);
     disThreadedNetIF.kill();
 
     writeFooter();
     try {
-        writer.close(); // a flush occurs first during a close
-    } catch (IOException ex) {
+        System.out.println();
+        System.out.println("Closing recorder log file: " + logFile.getCanonicalPath());
+        logFileWriter.close(); // a flush occurs first during a close
+    } 
+    catch (IOException ex) {
         Logger.getLogger(PduRecorder.class.getName()).log(Level.SEVERE, null, ex);
     }
-    System.out.println();
-    System.out.println("Recorder log file closed: " + logFile.getPath());
     return logFile;
   }
+  byte[] oldBuffer;
   
   @Override
-  public void receivePdu(byte[] buff, int len)
+  public void receivePdu(byte[] newBuffer, int newLength)
   {
-    if(!doSave)
+    if (java.util.Arrays.equals(newBuffer, oldBuffer))
+        System.err.println ("PduRecorder warning: PDU newBuffer equals PDU oldBuffer"); // debug
+    
+    if(!isRunning())
       return;
     
     long packetRcvNanoTime = System.nanoTime();
@@ -166,8 +172,8 @@ public class PduRecorder implements PduReceiver
     byte[] timeByteArray = Longs.toByteArray(packetRcvNanoTime - startNanoTime);
     //System.out.println("wrote time "+(packetRcvNanoTime - startNanoTime));
 
-    byte[] buffsized = Arrays.copyOf(buff, len);
-    DISPDUType type;
+    byte[] buffsized = Arrays.copyOf(newBuffer, newLength);
+    DISPDUType pduType;
     
     switch (pduLogEncoding)
     {
@@ -183,8 +189,8 @@ public class PduRecorder implements PduReceiver
             sb.append(',');
             sb.append(Arrays.toString(buffsized).replace(" ", ""));
             sb.append(" # ");
-            type = DISPDUType.getEnumForValue(Byte.toUnsignedInt(buffsized[2])); // 3rd byte
-            sb.append(type);
+            pduType = DISPDUType.getEnumForValue(Byte.toUnsignedInt(buffsized[2])); // 3rd byte
+            sb.append(pduType);
             break;
         
         default:
@@ -195,8 +201,8 @@ public class PduRecorder implements PduReceiver
       headerWritten = true;
     }
     try {
-      writer.write(sb.toString());
-      ((PrintWriter)writer).println();
+      logFileWriter.write(sb.toString());
+      ((PrintWriter)logFileWriter).println();
     }
     catch (IOException ex) {
       throw new RuntimeException("Fatal exception writing DIS log file in PduRecorder thread: " + ex);
@@ -210,7 +216,7 @@ public class PduRecorder implements PduReceiver
    * 
    * @return the path to the log file
    */
-  public String getLogFile()
+  public String getLogFilePath()
   {
     return logFile.getAbsolutePath();
   }
@@ -224,24 +230,30 @@ public class PduRecorder implements PduReceiver
   
   private void writeHeader()
   {
-    String timeStamp = getTimeStamp();
-    
-    try {
-          writer.write(START_COMMENT_MARKER + pduLogEncoding + ", " + timeStamp + ", DIS capture file, " + logFile.getPath());
-          ((PrintWriter)writer).println();
-      } catch (IOException ex) {
+      String timeStamp = getTimeStamp();
+
+      try
+      {
+          logFileWriter.write(START_COMMENT_MARKER + pduLogEncoding + ", " + timeStamp + ", DIS capture file, " + logFile.getPath());
+          ((PrintWriter) logFileWriter).println();
+      } 
+      catch (IOException ex)
+      {
           Logger.getLogger(PduRecorder.class.getName()).log(Level.SEVERE, null, ex);
       }
   }
 
   private void writeFooter()
   {   
-    String timeStamp = getTimeStamp();
-    
-      try {
-          writer.write(FINISH_COMMENT_MARKER + pduLogEncoding + ", " + timeStamp + ", DIS capture file, " + logFile.getPath());
-          ((PrintWriter)writer).println();
-      } catch (IOException ex) {
+      String timeStamp = getTimeStamp();
+
+      try
+      {
+          logFileWriter.write(FINISH_COMMENT_MARKER + pduLogEncoding + ", " + timeStamp + ", DIS capture file, " + logFile.getPath());
+          ((PrintWriter) logFileWriter).println();
+      } 
+      catch (IOException ex)
+      {
           Logger.getLogger(PduRecorder.class.getName()).log(Level.SEVERE, null, ex);
       }
   }
@@ -259,30 +271,44 @@ public class PduRecorder implements PduReceiver
    * @return a File reference to the log file
    * @throws IOException if something goes awry
    */
-  private File makeFile(Path outputDir, String filename) throws IOException
+  private File createUniquePduLogFile(Path outputDir, String filename) throws IOException
   {
-    String bname = FilenameUtils.getBaseName(filename);
-    String ext = FilenameUtils.getExtension(filename);
+    String baseName  = FilenameUtils.getBaseName(filename);
+    String extension = FilenameUtils.getExtension(filename);
 
-    Integer count = null;
-    File f;
+    Integer fileCounter = null;
+    File    newFile;
     boolean fileExists;
     outputDir.toFile().mkdirs();
     do {
-      String fn = bname + (count == null ? "" : count) + "." + ext;
-      f = new File(outputDir.toFile(), fn);
-      fileExists = f.exists();
-      if (count == null)
-        count = 1;
+      String nextFileName = baseName + (fileCounter == null ? "" : fileCounter) + "." + extension;
+      newFile = new File(outputDir.toFile(), nextFileName);
+      fileExists = newFile.exists();
+      if (fileCounter == null)
+        fileCounter = 1;
       else
-        count++;
+        fileCounter++;
     } while (fileExists);
-    if (!f.createNewFile()) {
-      System.out.println("Cannot create dis log file at " + f.getAbsolutePath());
+    
+    if (newFile.createNewFile()) 
+    {
+        System.out.println("Recorder log file open: " + newFile.getCanonicalPath());
+    }
+    else
+    {
+      System.out.println("Cannot create dis log file at " + newFile.getAbsolutePath());
       throw new RuntimeException("File creation error");
     }
-    return f;
+    return newFile;
   }
+
+    /**
+     * @return the pduRecorderRunning
+     */
+    public boolean isRunning()
+    {
+        return running;
+    }
   
   /** Entry point invocation. Saves a PDU output log to ./pduLog. Invoking the
    *  edu.nps.moves.dis7.examples.PduReaderPlayer will playback all logs written
@@ -292,29 +318,36 @@ public class PduRecorder implements PduReceiver
    */
   public static void main(String[] args)
   {
+    System.out.println("dis7.utilities.stream.PduRecorder main() performs self-test by sending full set of PDUs via port " + port);
+    port = 1; // avoid listening to other PDU streams during self test
+    
     PduFactory factory = new PduFactory(); //default appid, country, etc.
 
-    PduRecorder recorder;
+    PduRecorder pduRecorder;
     try {
-        recorder = new PduRecorder(); // default addr, port, output dir
+        pduRecorder = new PduRecorder(); // default address, port, output directory path
     } 
     catch(IOException ex) {
-      System.err.println("Exception creating recorder: "+ex.getLocalizedMessage());
+      System.err.println("Exception creating recorder: " + ex.getLocalizedMessage());
       return;
     }
+    System.out.println("dis7.utilities.stream.PduRecorder pduRecorder created... isRunning()=" + pduRecorder.isRunning());
      
-    DISPDUType all[] = DISPDUType.values();
-    Arrays.stream(all).forEach(typ-> {
-      if(typ != DISPDUType.OTHER) {
+    DISPDUType allPDUTypesArray[] = DISPDUType.values();
+    System.out.println("dis7.utilities.stream.PduRecorder allPDUTypesArray created, length=" + allPDUTypesArray.length + " ...");
+    Arrays.stream(allPDUTypesArray).forEach(pduTypeValue-> {
+      if(pduTypeValue != DISPDUType.OTHER) 
+      {
         try {
-            recorder.getDisThreadedNetIF().send(factory.createPdu(typ));
+            pduRecorder.getDisThreadedNetIF().send(factory.createPdu(pduTypeValue));
         }
         catch(Exception ex) {
           System.err.println("Exception sending Pdu: "+ex.getLocalizedMessage());
         }
       }
     });
-
-    recorder.end();
+    System.err.flush(); // ensure all output sent
+    pduRecorder.end();
+    System.out.println("dis7.utilities.stream.PduRecorder pduRecorder complete... isRunning()=" + pduRecorder.isRunning());
   }
 }
diff --git a/src/edu/nps/moves/dis7/utilities/stream/PduRecorderSelfTest.dislog b/src/edu/nps/moves/dis7/utilities/stream/PduRecorderSelfTest.dislog
new file mode 100644
index 0000000000000000000000000000000000000000..59b8786848f71751fafbc61b609bc4bbd4232509
--- /dev/null
+++ b/src/edu/nps/moves/dis7/utilities/stream/PduRecorderSelfTest.dislog
@@ -0,0 +1,74 @@
+# Start, ENCODING_PLAINTEXT, 20200825_215401, DIS capture file, .\pduLog\PduCaptureLog1.dislog
+[0,0,0,0,0,0,0,0],[7,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 1 ENTITY_STATE
+[0,0,0,0,3,20,-29,20],[7,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 2 FIRE
+[0,0,0,0,3,124,30,8],[7,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 3 DETONATION
+[0,0,0,0,3,-92,-124,56],[7,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 4 COLLISION
+[0,0,0,0,3,-85,58,-8],[7,0,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 5 SERVICE_REQUEST
+[0,0,0,0,3,-80,-88,-48],[7,0,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 6 RESUPPLY_OFFER
+[0,0,0,0,3,-75,-52,112],[7,0,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 7 RESUPPLY_RECEIVED
+[0,0,0,0,3,-70,122,124],[7,0,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 8 RESUPPLY_CANCEL
+[0,0,0,0,3,-64,-6,-116],[7,0,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 9 REPAIR_COMPLETE
+[0,0,0,0,3,-49,-81,100],[7,0,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 10 REPAIR_RESPONSE
+[0,0,0,0,3,-45,-18,28],[7,0,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 11 CREATE_ENTITY
+[0,0,0,0,3,-38,92,-4],[7,0,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 12 REMOVE_ENTITY
+[0,0,0,0,3,-34,67,108],[7,0,13,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 13 START_RESUME
+[0,0,0,0,3,-30,29,92],[7,0,14,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 14 STOP_FREEZE
+[0,0,0,0,3,-24,36,84],[7,0,15,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0] # DISPDUType: 15 ACKNOWLEDGE
+[0,0,0,0,3,-2,38,80],[7,0,16,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 16 ACTION_REQUEST
+[0,0,0,0,4,49,89,88],[7,0,17,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 17 ACTION_RESPONSE
+[0,0,0,0,4,53,-25,92],[7,0,18,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 18 DATA_QUERY
+[0,0,0,0,4,57,29,-96],[7,0,19,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 19 SET_DATA
+[0,0,0,0,4,61,36,-32],[7,0,20,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 20 DATA
+[0,0,0,0,4,70,55,-20],[7,0,21,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 21 EVENT_REPORT
+[0,0,0,0,4,82,121,-48],[7,0,22,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 22 COMMENT
+[0,0,0,0,4,-105,-6,100],[7,0,23,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 23 ELECTROMAGNETIC_EMISSION
+[0,0,0,0,5,6,-91,64],[7,0,24,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 24 DESIGNATOR
+[0,0,0,0,6,-3,-90,-56],[7,0,25,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 25 TRANSMITTER
+[0,0,0,0,7,119,96,28],[7,0,26,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0] # DISPDUType: 26 SIGNAL
+[0,0,0,0,7,-89,35,116],[7,0,27,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 27 RECEIVER
+[0,0,0,0,8,46,-67,32],[7,0,28,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 28 IDENTIFICATION_FRIEND_OR_FOE
+[0,0,0,0,8,99,121,-24],[7,0,29,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 29 UNDERWATER_ACOUSTIC
+[0,0,0,0,8,105,12,20],[7,0,30,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 30 SUPPLEMENTAL_EMISSION_ENTITY_STATE
+[0,0,0,0,8,-121,106,-80],[7,0,31,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0] # DISPDUType: 31 INTERCOM_SIGNAL
+[0,0,0,0,8,-13,-78,-100],[7,0,32,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 32 INTERCOM_CONTROL
+[0,0,0,0,9,-44,-16,84],[7,0,33,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 33 AGGREGATE_STATE
+[0,0,0,0,9,-10,115,60],[7,0,34,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 34 ISGROUPOF
+[0,0,0,0,10,65,-109,-88],[7,0,35,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 35 TRANSFER_OWNERSHIP
+[0,0,0,0,10,-23,95,-124],[7,0,36,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 36 ISPARTOF
+[0,0,0,0,11,-48,82,-112],[7,0,37,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 37 MINEFIELD_STATE
+[0,0,0,0,11,-6,95,-52],[7,0,38,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 38 MINEFIELD_QUERY
+[0,0,0,0,12,16,86,16],[7,0,39,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 39 MINEFIELD_DATA
+[0,0,0,0,12,24,114,-96],[7,0,40,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 40 MINEFIELD_RESPONSE_NACK
+[0,0,0,0,12,-115,-26,-4],[7,0,41,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 41 ENVIRONMENTAL_PROCESS
+[0,0,0,0,13,1,49,-44],[7,0,42,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 42 GRIDDED_DATA
+[0,0,0,0,14,96,-120,4],[7,0,43,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 43 POINT_OBJECT_STATE
+[0,0,0,0,14,-77,-45,16],[7,0,44,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 44 LINEAR_OBJECT_STATE
+[0,0,0,0,15,54,-28,-108],[7,0,45,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 45 AREAL_OBJECT_STATE
+[0,0,0,0,16,73,-40,120],[7,0,46,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 46 TIME_SPACE_POSITION_INFORMATION
+[0,0,0,0,17,42,-36,96],[7,0,47,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 47 APPEARANCE
+[0,0,0,0,17,54,2,72],[7,0,48,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 48 ARTICULATED_PARTS
+[0,0,0,0,17,99,115,-32],[7,0,49,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 49 LIVE_ENTITY_FIRE
+[0,0,0,0,17,-72,1,48],[7,0,50,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 50 LIVE_ENTITY_DETONATION
+[0,0,0,0,17,-60,104,-108],[7,0,51,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 51 CREATE_ENTITY_RELIABLE
+[0,0,0,0,17,-3,31,84],[7,0,52,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 52 REMOVE_ENTITY_RELIABLE
+[0,0,0,0,18,37,-2,56],[7,0,53,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 53 START_RESUME_RELIABLE
+[0,0,0,0,18,64,19,-12],[7,0,54,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 54 STOP_FREEZE_RELIABLE
+[0,0,0,0,18,67,-27,-80],[7,0,55,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0] # DISPDUType: 55 ACKNOWLEDGE_RELIABLE
+[0,0,0,0,18,-111,-21,32],[7,0,56,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 56 ACTION_REQUEST_RELIABLE
+[0,0,0,0,18,-103,99,60],[7,0,57,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 57 ACTION_RESPONSE_RELIABLE
+[0,0,0,0,18,-90,2,-32],[7,0,58,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 58 DATA_QUERY_RELIABLE
+[0,0,0,0,18,-69,43,72],[7,0,59,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 59 SET_DATA_RELIABLE
+[0,0,0,0,18,-45,-102,-64],[7,0,60,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 60 DATA_RELIABLE
+[0,0,0,0,18,-16,-107,-128],[7,0,61,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 61 EVENT_REPORT_RELIABLE
+[0,0,0,0,19,18,-47,-112],[7,0,62,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 62 COMMENT_RELIABLE
+[0,0,0,0,19,57,45,-32],[7,0,63,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 63 RECORD_RELIABLE
+[0,0,0,0,19,62,-29,-104],[7,0,64,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 64 SET_RECORD_RELIABLE
+[0,0,0,0,19,102,112,-4],[7,0,65,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 65 RECORD_QUERY_RELIABLE
+[0,0,0,0,19,106,-66,-116],[7,0,66,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 66 COLLISION_ELASTIC
+[0,0,0,0,19,121,19,-80],[7,0,67,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 67 ENTITY_STATE_UPDATE
+[0,0,0,0,19,-7,-77,-48],[7,0,68,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 68 DIRECTED_ENERGY_FIRE
+[0,0,0,0,20,5,-24,8],[7,0,69,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 69 ENTITY_DAMAGE_STATUS
+[0,0,0,0,20,-12,108,48],[7,0,70,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 70 INFORMATION_OPERATIONS_ACTION
+[0,0,0,0,21,25,-88,-100],[7,0,71,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # DISPDUType: 71 INFORMATION_OPERATIONS_REPORT
+[0,0,0,0,25,39,-94,24],[7,0,72,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0] # DISPDUType: 72 ATTRIBUTE
+# Finish, ENCODING_PLAINTEXT, 20200825_215401, DIS capture file, .\pduLog\PduCaptureLog1.dislog