OpenFst - Release 1.2

   * Added lookahead matching and filtering for faster composition
   * Added EditFst for mutation of o.w. immutable FSTs
   * Added script sub-namespace defining type FstClass - a non-templated
     Fst<Arc> to hold the arc template type internally. This and FST
     operations on it allow easier I/O and scripting at the cost of some
     runtime dispatching.
   * Added per-arc-iterator control of Fst caching.
   * Added PowerWeight and Power Arc.
   * Added SparsePowerWeight and SparsePowerArc (1.2.4)
   * Added SignedLogWeight and SignedLogArc (1.2.4)
   * Added ExpectationWeight and ExpectationArc (1.2.4)
   * Added AStarQueue, PruneQueue and NaturalPruneQueue disciplines (1.2.6)
   * Added Log64Weight and Log64Arc to FST library throughout, including 
     support throughout scripts/bins/dsos (1.2.8)
   * Added delayed RandGenFst that outputs tree of paths weighted
     by count (1.2.8)
   * Added fstsymbols shell-level command
   * Added total weight removal option to pushing
   * Changed methods for symbol table mutation:
     use MutableInputSymbols()/MutableOutputSymbols().
   * Numerous efficiency improvements esp in composition, replace, and caching
   * Made "fstmap" handle semiring conversion by adding "to_std", "to_log"
     and "to_log64" as supported 'map_type' arguments (1.2.8).
   * Made the destructive implementation of RmEpsilon skip over states
     admitting no non-epsilon incoming transition (1.2.8). 
   * Fixed numerous bugs (1.2 through 1.2.9) including:
     - improper types of some approximation deltas
     - sub-optimal hashing functions
     - issues in internal reuse of shortest distance
     - hashing bug in FloatWeight       
     - bug in shortest path queue 
     - symbol table checksumming issues
     - various C++ standards issues
     - Visit() behavior when visitation aborted
     - Decode() hash performance bug (1.2.1)
     - EditFst::Copy(bool) method when the boolean parameter is true (1.2.7)
     - SymbolTable memory leak in Invert() (1.2.8)
     - Added escaping of " and \ in labels in fstdraw, needed for dot to
       function properly (1.2.8) 
     - Fixed handling of final weight of start state in fstpush (1.2.8)
     - Added FST_LL_FORMAT to fix 64-bit integer printf issues (1.2.9)
     - Fixed missing <functional> includes (1.2.9)
     - Fixed reused local variable names (1.2.9)
     - Fixed passing string by reference in FstDraw args (1.2.9)
   * Added extensions directories including:
     - finite-state archive (FAR) utilities,
       added stlist format supporting writing/reading to/from standard out/in
       at the library-level (1.2.8)
     - compact fsts
     - lookahead fsts
     - pushdown transducers (improved in 1.2.1 through 1.2.7).
   * Added StateMap/StateMapFst; renamed Map/MapFst to ArcMap/ArcMapFst;
     map/MapFst retained (but deprecated) (1.2.9)
   * Deleted ArcSum() and ArcMerge; use StateMap w/ ArcSumMapper and 
     ArcUniqueMapper (1.2.9).
   * Incremented version of ConstFst/CompactFsts to stop memory alignment
     that fails on pipes. Made old version raises errors when read on 
     pipes (1.2.9).
   * Improved determinize hash (1.2.9)
   * Removed stdio uses (1.2.10)
   * Fixed library ordering issues esp. with newer GNU build tools (1.2.10)

OpenFst - Release 1.1
   * Added compat.h to src/include/fst to fix missing defines
   * Fixed bug in acyclic minimization that led to non-minimal 
     (but equiv) results
   * Fixed missing FST typedef in various matchers in matcher.h
     so that they can be cascaded
   * Opened file streams binary where appropriate

OpenFst - Release 1.0

   Additions to beta version:

   * Matcher class added for matching labels at FST states. Includes
     special matchers for sigma (any), rho ('rest'), and phi ('fail')
     labels. (see matcher.h)
   * Composition generalized with arbitrary filters, matchers, and state tables.
     Sequence and matching composition filters provided. (see compose.h, 
     compose-filter.h, matcher.h, state-table.h)
   * Unique n-best (see shortest-path.h)
   * Pruning in determinization and epsilon removal (see determinize.h, 
     rmepsilon.h)
   * New Fst classes: 
      * Compact Fsts for space-efficient representation (see compact-fst.h)
   * New Weight classes: 
      * MinMax
      * Lexicographic
   * Miscellaneous bug fixes
