[1.3.1]=========================================================
    
    Agemo Coin Client v1.3.1
    
    New:
    - Added a new config option: `make-log-symlinks`,
      see `config.yml` for more details. With this,
      the config version has been bumped to 2.
    
    Internal Changes:
    - Updated YamlDotNet to v18.1.0.
    
    Bugfixes:
    - Fixed Agemo Coin crashing at startup on Windows.
    - Address an issue that caused embedded runtime builds
      to always think they were in a debug environment.
    - Fixed a potential issue that may have caused default
      compiler constants to be discarded.
    - Fixed a bug where `config.yml` wouldn't be reset to default
      in certain cases. This would cause a crash at startup if
      the user's YAML syntax was invalid.
    
[1.3.0]=========================================================
    
    Agemo Coin Client v1.3.0
    
    This is a major update that coincides with the release of Benjcore API v1.1.0.
    These two projects have been in the works for around two and a half years now!
    Thank you for using Agemo Coin and giving me an enjoyable hobby to dedicate myself to!
    
    Major Features:
        
        Config File (`config.yml`):
            
            You can now customize the behavior of Agemo Coin via the new YAML config
            file located at `/config/config.yml` (relative to the installation directory).
            This should be a lot more convenient and user-friendly compared to passing
            command line arguments to Agemo Coin itself. Pretty much all of the existing
            command line arguments have been ported to `config.yml`, but passing them as
            command line arguments is still supported, and will override the preferences
            set in the config.
            
            The config system supports automated config updates, reformatting, and backups.
            Whenever the config is updated (as the result of a new config version being released),
            a backup of the previous version will be saved in `/config/Backups`. If you make a
            mistake in your config, or your config gets corrupted, a backup of the old config
            will be made before the config is restored to the default state.
            
            Currently, the following config options are available:
            - `update-branch`
            - `dotnet-runtime-type`
            - `aggressive-runtime-switching`
            - `embedded-runtime-migration-opt-in` *(Temporary)*
            - `auto-screen-clearing`
            - `local-mode`
            - `local-url`
            - `disable-local-dependency-updates`
            - `allow-local-updates`
            These options are extensively documented in `config.yml`, so refer to the config file
            itself for more information.
        
        New Login Screen:
            
            The login screen has been completely redesigned! Notably, the following
            quality-of-life improvements have been made:
            - When your credentials aren't accepted, you no longer have to retype your username.
            - You can now choose to switch user by pressing the escape key.
            - The remaining amount of PIN login attempts is now displayed.
            - Added caching for PIN login eligibility, speeding up subsequent login attempts.
        
        Preview Versions:
            
            It's now possible for in-progress/experimental versions of Agemo Coin to be automatically
            installed via the updater for testing, if desired. This can be done either by setting
            `update-branch` to `preview` in `config.yml`, or interactively by passing
            `--switch-update-branch` (`-b` for short) to the new `version` command.
        
        Embedded Runtime Support:
            
            Agemo Coin now provides builds with an embedded .NET runtime, meaning you will no longer
            be required to manually manage and update your system .NET installation in order to use
            Agemo Coin. The classic runtime-dependent builds are still supported if you prefer, but
            they will no longer be the default going forwards.
            
            If you're updating from a version that only supported runtime-dependent builds (any version
            prior to 1.3.0), you will be asked whether you wish to migrate to an embedded runtime build.
            If no explicit decision is made, you will remain using runtime-dependent builds for now, but
            will be automatically migrated to embedded runtime builds when a new major .NET version is
            required by Agemo Coin. (This is expected to be .NET 10 for the release of Agemo Coin 1.4.0.)
            
            Regardless, you can change your runtime preference at any time either by setting
            `dotnet-runtime-type` in `config.yml`, or interactively by passing `--switch-runtime-type`
            (`-r` for short) to the new `version` command. If you intend to manually change your runtime
            via the config, it's recommended you also have a look at `aggressive-runtime-switching`, so you
            can decide when you want to switch.
        
        Overhauled the `changelog` Command:
            
            The `changelog` command now supports filtering! The following filtering options
            are available (you can even use multiple together):
            - `--from` (≥)
            - `--to` (≤)
            - `--after` (>)
            - `--before` (<)
            - `--new` (Since the last time you updated or logged in)
            Additionally, the command now allows you to see the changelog of a single,
            specific version by passing the version number as an argument.
    
    Also New:
    - Added a selection screen UI, as well as a minimal alternative that can be used
      when automatic screen clearing is disabled.
    - Improved the first run since update logic and message.
    - Added a simple loading spinner animation that will play while waiting for
      commands to finish.
    - Agemo Coin now creates symlinks to the most recent, and second most recent log
      files called `latest.log` and `previous.log`, respectively. These symlinks will
      be stored in the `logs` directory, along with all your other logs.
    - New command: `version`. Used to show build information, interactively configure
      build/update preferences, and manually check for updates.
    - New command line argument: `--version` (`-v` for short), prints information about
      the current Agemo Coin build, then exits.
    - If you're using a runtime-dependent build, you will now be notified before an
      update that requires a new major .NET version is installed. When this happens,
      you will be given an option to switch to an embedded runtime build.
    - Improved the accuracy of the loading bar, including adding the ability for it to
      track download progress.
    - The admin `code view-all` command can now print the raw Unix timestamp of expiry times
      using the new `--raw` option along with the existing `--show-expiries`/`-e` option.
    - You can now use control plus the left or right arrow keys to quickly navigate between
      words, similar to many terminals and text editors.
    
    Changes:
    - Retroactively improved some older changelogs.
    - The `pin set` command now uses the escape key to cancel user input rather than space.
    - The login screen no longer accepts empty inputs.
    - A warning will now be automatically logged when Agemo Coin uses a deprecated
      Benjcore API endpoint.
    - More information about the build, environment, and configuration will now be logged.
    - Reworded the description of the `--reverse`/`-r` option on the `changelog` command.
    
    Internal Changes:
    - Renamed `AgemoCoinConfiguration` to `AgemoCoinCLIOptions` to avoid confusion with the
      new config system (`AgemoCoinConfig`).
    - Removed `MutableCLIOptions`.
    - Moved `IsDebugEnvironment` to `Entrypoint`.
    - `IsDebugEnvironment` will be `true` for any `DEBUG` build.
    - Removed the old `debug` file that was previously used to identify development environments.
    - Refactored various code to use C# collection expressions.
    - `Commands.Identifier` is now a `readonly record struct`.
    - All embedded resources are now located in `/src/AgemoCoin/Resources`.
    - Various improvements to the `ShellHelper` class.
    - Command output is now done through a new `CommandOutput` class, an instance of which will
      be passed by the shell when the command is executed. This was mainly done to circumvent
      conflicts with the new loading spinner animation.
    - The update script can now preserve certain files during an update.
    - Some internal state information is now tracked in a JSON file called `AppState.json`.
      Unlike `config.yml`, this file is not intended to be manually modified by the user.
    - Reworked the remote directory structure for updates and relevant installation files.
    - Moved some Linux update logic to native code.
    - Moved some common strings to the new `static` `UserFriendlyStrings` class.
    - Added the ability to use `BenjcoreUtil` `PreviewVersion`s as command arguments.
    - Added more methods to control the state of the loading screen.
    - Migrated to Benjcore API version 1.1.
    - Updated to `BenjcoreUtil` version `2.2.0`.
    - Other dependency updates.
    - Various internal documentation improvements.
    - Various other internal refactoring and improvements.
    
    Bugfixes:
    - Fixed a typo in the `--no-clear` command line argument documentation.
    - Addresses various instances of exceptions not being properly printed/logged.
    - Fixed an issue that could cause the first command argument or CLI argument to be
      ignored under certain circumstances.
    - Fixed line breaks being inconsistent on the login screen.
    - Fixed a typo in the `pin check` command.
    - Agemo Coin will no longer attempt to print the escape key when pressed.
    - Fixed an issue that caused Unicode characters to be printed incorrectly on Windows.
    - Fixed potential socket exhaustion in the updater.
      (Unlikely to have been possible in practice.)
    - Fixed a potential use-after-free/arbitrary pointer dereference that could occur
      during update installation on Linux.
    - Addresses a Linux-specific issue that could cause libraries to be loaded from disk
      after the updater had replaced the installation files, but before Agemo Coin had
      properly restarted. This could've resulted in crashes or undefined behavior in the
      event of missing libraries or mismatched dependency versions.
    - Addresses an IO conflict that could occur if a 7-Zip update were to fail on Windows,
      typically resulting in a crash.
    - Fixed an issue where the loading screen didn't indicate when it was checking for updates.
    - Addresses an issue where the loading screen could become misaligned when an update
      was being installed.
    
[1.2.6]=========================================================
    
    Agemo Coin Client v1.2.6
    
    Changes:
    - Updated copyright year to 2026.
    - On Linux, the updater now explicitly checks
      that gzip is installed.
    
    Bugfixes:
    - Addresses an issue that caused the 'help' command
      to not work correctly when a command was passed
      as an argument.
    - Addresses an issue where the loading screen may
      display abnormally when an error is logged.
    - Fixed an uncaught exception that occurred when
      attempting to pay yourself with the 'pay' command.
    - Fixed a typo in a log message.
    
    Internal Changes:
    - Updated BenjcoreAPI to v1.0.0.9.
    - Improved state tracking for `LoadingScreenStatus`.
    - `LoadingScreenStatus` is now thread-safe.
    
[1.2.5]=========================================================
    
    Agemo Coin Client v1.2.5
    
    Bugfixes:
    - Addresses an issue that caused the login screen
      to display abnormally.
    
[1.2.4]=========================================================
    
    Agemo Coin Client v1.2.4
    
    Changes:
    - Multiline inputs are now properly supported.
    - Improved console resize handling.
    - Updated copyright year to 2025.
    
    Bugfixes:
    - Addresses issues that would previously occur
      when input text was too long and had to be
      wrapped to another line.
    - Fixed a bug that caused Agemo Coin to behave
      abnormally if TAB was pressed when the cursor
      was not at the end of the line.
    
    Internal Changes:
    - Large internal changes to the user input system.
    - Thread-safety improvements.
    - Agemo Coin will no longer rely on the
      app version provided by Benjcore API.
    - Updated BenjcoreAPI to v1.0.0.6.
    - Updated BenjcoreUtil to v2.1.2.
    - Miscellaneous dependency updates.
    
[1.2.3]=========================================================
    
    Agemo Coin Client v1.2.3
    
    Changes:
    - Updated BenjcoreAPI to v1.0.0.4
    
    Bugfixes:
    - Fixed an issue where errors thrown by the
      background authenticator were ignored.
    - Potential fix for the background authenticator
      not working on Windows in some cases.
    - Fixed an issue where, in some cases, the fatal
      error screen would break when invoked from another
      thread.
    - Addresses an issue where the client may fetch
      the wrong Agemo Coin version from the server.
    - Fixed an issue where macros could be bypassed
      by holding SHIFT on Windows.
    - When updating Agemo Coin on Windows, command
      line arguments will now be preserved.
    - Agemo Coin will no longer fatal error on an
      empty username.
    
[1.2.2]=========================================================
    
    Agemo Coin Client v1.2.2
    
    Changes:
    - Dependency updates
    
    Bugfixes:
    - Potential fix for an issue where your
      device ID would randomly change.
    
[1.2.1]=========================================================
    
    Agemo Coin Client v1.2.1
    
    Changes:
    - Only redraw the loading screen when
      something actually needs to be changed.
    - If the windows size hasn't changed,
      don't redraw the whole loading screen.
    
    Bugfixes:
    - Fixed 2 edge cases that would cause a fatal
      error if the window was super small.
    - Potential fix for the loading screen
      flickering excessively.
    - Fixed an issue where the prompt was not wiped
      when switch back to PIN login from password.
    
[1.2.0]=========================================================
    
    Agemo Coin Client v1.2.0
    
    This update is a complete rewrite of both the
    client and server, as such, this changelog is
    far from conclusive.
    
    Major Features:
    - Added native support for GNU / Linux
    - Added Agemo Coin code expiries.
    - Added PIN login system
    - Added the `pin` command
    - Added admin prompt (`admin` command)
      with several new commands for admins.
    - Added macro system
    - You can now autocomplete commands by
      pressing TAB.
    - Added a new loading screen
    
    Notable Changes:
    - Updated to .NET 8
    - Updated to Benjcore API v1.0.0.0
    - Overhauled command line options
    - Major technical improvements
    
[1.1.4]=========================================================
    
    Agemo Coin Client v1.1.4
    
    Changes:
    - Agemo Coin can once again be run as
      administrator, although doing so is
      still not recommended. (Removed in v1.1.1)
    
    Bugfixes:
    - Agemo Coin will now use the correct
      directory when run as administrator.
    - Fixed an issue that prevented Agemo
      Coin from running under Wine / Proton.
    
[1.1.3]=========================================================
    
    Agemo Coin Client v1.1.3
    
    Bugfixes:
    - Fixed various issues that would have caused the
      updater to no longer work after the release of
      Benjcore API v1.0.
    
[1.1.2]=========================================================
    
    Agemo Coin Client v1.1.2
    
    Changes:
    - Update BenjcoreUtil to v2.1.1
    
    Developer Note:
    The main point of this update is to address an issue
    where there were a lot of unneeded files in the build
    of the previous version due to an unneeded dependency
    in BenjcoreUtil which the new version removes.
    
[1.1.1]=========================================================
    
    Agemo Coin Client v1.1.1
    
    New:
    - Added a notification to check the changelog after an update. (#11)
    
    Changes:
    - Update BenjcoreUtil to v2.1.0
    - Update BenjcoreAPI to v0.2.3
    - Migrated to the new BenjcoreUtil v2.1 versioning system
    
    Bugfixes:
    - Agemo Coin can longer be run as administrator
      as this will break the updater. (#10)
    - Potential fix for random whitespace around
      the user's username. (#9)
    
[1.1.0]=========================================================
    
    Agemo Coin Client v1.1.0
    
    New:
    - Added indications about the currently logged-in user
      on the window title and command prompt.
    
    Major Changes:
    - Update to .NET 6
    - Major performance improvements to the updater.
    
    Minor Changes:
    - Allow PDB files in production builds.
    - Benjcore API forwards compatibility improvements.
    - Update BenjcoreUtil to v2.0.2
    - Update BenjcoreAPI to v0.2.2
    
    Bugfixes:
    - Retry on failed update to prevent
      occasional fatal errors on startup.

[1.0.2]=========================================================

    Agemo Coin Client v1.0.2
    
    Bugfixes:
    - Wrong "Type 'help <command>'" printouts. (#4)
    - Fatal Error when attempting to pay an invalid amount. (#5)

[1.0.1]=========================================================

    Agemo Coin Client v1.0.1
    
    New:
    - Added 'changelog' command
    - Added changelog file ('changelog.txt')
    
    Bugfixes:
    - Fatal error when using the 'user' or 'pay'
      commands without parameters. (#2)
    
[1.0.0]=========================================================

    Agemo Coin Client v1.0.0
    
    - Initial Release
    