summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgrothedev <grothedev@gmail.com>2026-05-29 21:34:16 -0400
committergrothedev <grothedev@gmail.com>2026-05-29 21:34:16 -0400
commit27dc5849c3eaf4824d79938e7077abdbe2c82e24 (patch)
tree4a6e963d291132ad6f5a22841ea2404b60949366
parent73d75835e18a33c7f6c1b09bbcef93b16a7a9bfa (diff)
updates from claude. need to review. archiving rust and cpp stuff, going completely TS
-rw-r--r--.old/AGENTS.md (renamed from AGENTS.md)0
-rw-r--r--.old/Cargo.lock (renamed from rs/Cargo.lock)1016
-rw-r--r--.old/Cargo.toml15
-rw-r--r--.old/ast/main.json9497
-rw-r--r--.old/spec.md538
-rw-r--r--.old/src/data_sources.rs411
-rw-r--r--.old/src/main.rs820
-rw-r--r--.old/src/shader.wgsl30
-rw-r--r--.old/target/.rustc_info.json1
-rw-r--r--.old/target/debug/deps/ab_glyph_rasterizer-27b922fbcd76da11.d9
-rw-r--r--.old/target/debug/deps/ahash-3b30e8efbe0ac73f.d14
-rw-r--r--.old/target/debug/deps/ahash-56cd099ae3727908.d12
-rw-r--r--.old/target/debug/deps/arrayvec-bb6b6edd6045d7e7.d11
-rw-r--r--.old/target/debug/deps/bit_set-babb7026cba23d46.d7
-rw-r--r--.old/target/debug/deps/bytes-b94b70994929e7fa.d22
-rw-r--r--.old/target/debug/deps/calloop_wayland_source-2732cc7727d54d33.d7
-rw-r--r--.old/target/debug/deps/cfg_aliases-88ae697f10203bf0.d7
-rw-r--r--.old/target/debug/deps/cfg_aliases-b2db2de728aa1d5a.d7
-rw-r--r--.old/target/debug/deps/cfg_if-38b89ea812352f6a.d5
-rw-r--r--.old/target/debug/deps/codespan_reporting-409545ec2899c231.d13
-rw-r--r--.old/target/debug/deps/crc32fast-ca1a06947e107b75.d12
-rw-r--r--.old/target/debug/deps/crossbeam_utils-f71d546a09bcfd59.d19
-rw-r--r--.old/target/debug/deps/cursor_icon-d9e286303a073472.d5
-rw-r--r--.old/target/debug/deps/dlib-8e238b2fc721a3a3.d7
-rw-r--r--.old/target/debug/deps/equivalent-742118f59cddfc47.d7
-rw-r--r--.old/target/debug/deps/flate2-ee779fd4d3d10e0f.d25
-rw-r--r--.old/target/debug/deps/foldhash-e9a63aa83b123e6e.d10
-rw-r--r--.old/target/debug/deps/getrandom-cb7121397d0c8bff.d14
-rw-r--r--.old/target/debug/deps/gpu_descriptor-632fbbde1a938011.d8
-rw-r--r--.old/target/debug/deps/gpu_descriptor_types-4bb2fd7cfb804b5e.d9
-rw-r--r--.old/target/debug/deps/hashbrown-8a411dd26e90247c.d21
-rw-r--r--.old/target/debug/deps/hexf_parse-1efd1e1aa0e17306.d7
-rw-r--r--.old/target/debug/deps/hexf_parse-f62c9fa671297209.d5
-rw-r--r--.old/target/debug/deps/indexmap-5501a5e82919e3f6.d22
-rw-r--r--.old/target/debug/deps/indexmap-cf1292f23fa8db2e.d20
-rw-r--r--.old/target/debug/deps/khronos_egl-127b7bdd26f0cf07.d7
-rw-r--r--.old/target/debug/deps/khronos_egl-3fe426bc4ace6691.d7
-rw-r--r--.old/target/debug/deps/libab_glyph_rasterizer-27b922fbcd76da11.rmetabin0 -> 31456 bytes
-rw-r--r--.old/target/debug/deps/libahash-3b30e8efbe0ac73f.rlibbin0 -> 304332 bytes
-rw-r--r--.old/target/debug/deps/libapprox-e0be4cbe078fa532.rmetabin0 -> 105801 bytes
-rw-r--r--.old/target/debug/deps/libarrayref-70eb58486769037f.rlibbin0 -> 18386 bytes
-rw-r--r--.old/target/debug/deps/libarrayref-70eb58486769037f.rmetabin0 -> 16880 bytes
-rw-r--r--.old/target/debug/deps/libas_raw_xcb_connection-c3090eca1a9ac072.rmetabin0 -> 10350 bytes
-rw-r--r--.old/target/debug/deps/libash-679a01be1d833e49.rmetabin0 -> 62262952 bytes
-rw-r--r--.old/target/debug/deps/libash-d60b3f37add1da0c.rmetabin0 -> 66851852 bytes
-rw-r--r--.old/target/debug/deps/libautocfg-8894a47441bd56dd.rmetabin0 -> 80388 bytes
-rw-r--r--.old/target/debug/deps/libbit_set-7285bf21a6e9f43c.rmetabin0 -> 58228 bytes
-rw-r--r--.old/target/debug/deps/libbit_set-babb7026cba23d46.rmetabin0 -> 88146 bytes
-rw-r--r--.old/target/debug/deps/libbit_vec-c8bd294870835986.rlibbin0 -> 263372 bytes
-rw-r--r--.old/target/debug/deps/libbit_vec-e82831e3b97ed645.rmetabin0 -> 88180 bytes
-rw-r--r--.old/target/debug/deps/libbitflags-1c68ba442dcd81d7.rmetabin0 -> 197507 bytes
-rw-r--r--.old/target/debug/deps/libbitflags-a27c004994d2fc4f.rlibbin0 -> 424828 bytes
-rw-r--r--.old/target/debug/deps/libbitflags-b4c3be1feed9090f.rlibbin0 -> 45042 bytes
-rw-r--r--.old/target/debug/deps/libbitflags-b4c3be1feed9090f.rmetabin0 -> 43529 bytes
-rw-r--r--.old/target/debug/deps/libbytemuck-ce33f7dcccd57d8e.rmetabin0 -> 387910 bytes
-rw-r--r--.old/target/debug/deps/libbytemuck-e62baa57f51665d8.rmetabin0 -> 452535 bytes
-rwxr-xr-x.old/target/debug/deps/libbytemuck_derive-b70018812684f4cb.sobin0 -> 6989280 bytes
-rw-r--r--.old/target/debug/deps/libbytes-b971fec643874c18.rlibbin0 -> 1816816 bytes
-rw-r--r--.old/target/debug/deps/libbytes-b971fec643874c18.rmetabin0 -> 836647 bytes
-rw-r--r--.old/target/debug/deps/libc-3978a69e9378dacb.d24
-rw-r--r--.old/target/debug/deps/libcalloop-0cf1db7b38301379.rlibbin0 -> 2229000 bytes
-rw-r--r--.old/target/debug/deps/libcfg_aliases-88ae697f10203bf0.rmetabin0 -> 17616 bytes
-rw-r--r--.old/target/debug/deps/libcfg_aliases-b2db2de728aa1d5a.rmetabin0 -> 17076 bytes
-rw-r--r--.old/target/debug/deps/libcfg_if-ce7a778126ca8001.rmetabin0 -> 5379 bytes
-rw-r--r--.old/target/debug/deps/libcrc32fast-ca1a06947e107b75.rmetabin0 -> 46131 bytes
-rw-r--r--.old/target/debug/deps/libcrossbeam_channel-b0e3e285a99fe058.rlibbin0 -> 1227028 bytes
-rw-r--r--.old/target/debug/deps/libcrossbeam_utils-f71d546a09bcfd59.rlibbin0 -> 1753624 bytes
-rw-r--r--.old/target/debug/deps/libdowncast_rs-49d6ca08d84255cc.rlibbin0 -> 37672 bytes
-rw-r--r--.old/target/debug/deps/libdowncast_rs-cb4bca6f60b6285e.rmetabin0 -> 35212 bytes
-rw-r--r--.old/target/debug/deps/libdpi-d08f847aebd73359.rmetabin0 -> 131080 bytes
-rw-r--r--.old/target/debug/deps/libequivalent-742118f59cddfc47.rlibbin0 -> 9438 bytes
-rw-r--r--.old/target/debug/deps/libequivalent-8b054abaa056da40.rmetabin0 -> 7369 bytes
-rw-r--r--.old/target/debug/deps/libflate2-ee779fd4d3d10e0f.rmetabin0 -> 532561 bytes
-rw-r--r--.old/target/debug/deps/libgetrandom-3397c23ca89a5799.rmetabin0 -> 77895 bytes
-rw-r--r--.old/target/debug/deps/libgpu_alloc-06af16a7d79beb43.rmetabin0 -> 428658 bytes
-rw-r--r--.old/target/debug/deps/libgpu_alloc_types-98d79fd181598131.rlibbin0 -> 581388 bytes
-rw-r--r--.old/target/debug/deps/libgpu_alloc_types-98d79fd181598131.rmetabin0 -> 219048 bytes
-rw-r--r--.old/target/debug/deps/libgpu_descriptor-632fbbde1a938011.rlibbin0 -> 295338 bytes
-rw-r--r--.old/target/debug/deps/libgpu_descriptor-632fbbde1a938011.rmetabin0 -> 172669 bytes
-rw-r--r--.old/target/debug/deps/libgpu_descriptor-8fa99644532e7644.rlibbin0 -> 291978 bytes
-rw-r--r--.old/target/debug/deps/libgpu_descriptor-b581ac0b18547051.rmetabin0 -> 101636 bytes
-rw-r--r--.old/target/debug/deps/libhashbrown-61bba8eb3e81e221.rmetabin0 -> 792333 bytes
-rw-r--r--.old/target/debug/deps/libhexf_parse-f62c9fa671297209.rmetabin0 -> 16342 bytes
-rw-r--r--.old/target/debug/deps/libindexmap-5501a5e82919e3f6.rlibbin0 -> 1202722 bytes
-rw-r--r--.old/target/debug/deps/libinstant-1b2fa9cffafaa25c.rlibbin0 -> 19466 bytes
-rw-r--r--.old/target/debug/deps/libinstant-1b2fa9cffafaa25c.rmetabin0 -> 3496 bytes
-rw-r--r--.old/target/debug/deps/libkhronos_egl-3fe426bc4ace6691.rlibbin0 -> 790478 bytes
-rw-r--r--.old/target/debug/deps/liblazy_static-ffebef2c0e161fa7.rlibbin0 -> 21600 bytes
-rw-r--r--.old/target/debug/deps/liblibc-131c8752ac6ccc62.rlibbin0 -> 5564994 bytes
-rw-r--r--.old/target/debug/deps/liblibc-131c8752ac6ccc62.rmetabin0 -> 5228421 bytes
-rw-r--r--.old/target/debug/deps/liblinux_raw_sys-501ed64292a9e1b5.rlibbin0 -> 4484394 bytes
-rw-r--r--.old/target/debug/deps/liblinux_raw_sys-501ed64292a9e1b5.rmetabin0 -> 4442551 bytes
-rw-r--r--.old/target/debug/deps/liblinux_raw_sys-cf0feb498ceaa66f.rmetabin0 -> 4147319 bytes
-rw-r--r--.old/target/debug/deps/liblitrs-1d817a9e13b38440.rlibbin0 -> 961664 bytes
-rw-r--r--.old/target/debug/deps/liblitrs-1d817a9e13b38440.rmetabin0 -> 367466 bytes
-rw-r--r--.old/target/debug/deps/liblock_api-59ccc7edac88d070.rmetabin0 -> 356505 bytes
-rw-r--r--.old/target/debug/deps/liblog-caa596a096de7a2c.rmetabin0 -> 197605 bytes
-rw-r--r--.old/target/debug/deps/libmemchr-6709e545d5a75bbd.rmetabin0 -> 1273689 bytes
-rw-r--r--.old/target/debug/deps/libmemchr-9cf49672ca1b09c8.rmetabin0 -> 958950 bytes
-rw-r--r--.old/target/debug/deps/libmemchr-ddb1f17df6c8a224.rmetabin0 -> 1273689 bytes
-rw-r--r--.old/target/debug/deps/libmemmap2-c420ca3b3d7cee19.rlibbin0 -> 355290 bytes
-rw-r--r--.old/target/debug/deps/libmio-e5461234a92fae15.rlibbin0 -> 1804676 bytes
-rw-r--r--.old/target/debug/deps/libmio-e5461234a92fae15.rmetabin0 -> 419973 bytes
-rw-r--r--.old/target/debug/deps/libnaga-7c6b38cefadfa9db.rmetabin0 -> 3978396 bytes
-rw-r--r--.old/target/debug/deps/libnaga-b4e65e42a9689c7e.rmetabin0 -> 6046314 bytes
-rw-r--r--.old/target/debug/deps/libnu_ansi_term-f0dd67bbc4fc7bc7.rlibbin0 -> 682864 bytes
-rw-r--r--.old/target/debug/deps/liboverload-36d6dc4b2c1d5222.rmetabin0 -> 26273 bytes
-rw-r--r--.old/target/debug/deps/libparking_lot-734fe1c1505cffdb.rlibbin0 -> 1214458 bytes
-rw-r--r--.old/target/debug/deps/libparking_lot-965a2a9eca020d75.rmetabin0 -> 146225 bytes
-rw-r--r--.old/target/debug/deps/libparking_lot_core-9d53afdf505a034a.rlibbin0 -> 685218 bytes
-rw-r--r--.old/target/debug/deps/libparking_lot_core-e2f5b4fce531c206.rmetabin0 -> 163457 bytes
-rw-r--r--.old/target/debug/deps/libpercent_encoding-e44e7ec6fb763c39.rmetabin0 -> 32702 bytes
-rw-r--r--.old/target/debug/deps/libpin_project_lite-dbb7ad05ebc1034f.rmetabin0 -> 93938 bytes
-rw-r--r--.old/target/debug/deps/libpolling-34693332330a00c8.rmetabin0 -> 107168 bytes
-rw-r--r--.old/target/debug/deps/libpollster-7f0c20abffc76682.rmetabin0 -> 16352 bytes
-rw-r--r--.old/target/debug/deps/libpollster-bb942735a89fb59e.rmetabin0 -> 14071 bytes
-rw-r--r--.old/target/debug/deps/libproc_macro2-bda2a3cd8d039fb5.rlibbin0 -> 1201128 bytes
-rw-r--r--.old/target/debug/deps/libquote-85758243a08bc240.rlibbin0 -> 554746 bytes
-rw-r--r--.old/target/debug/deps/libquote-85758243a08bc240.rmetabin0 -> 251327 bytes
-rw-r--r--.old/target/debug/deps/libraw_window_handle-045a7f813338ed5d.rmetabin0 -> 318524 bytes
-rw-r--r--.old/target/debug/deps/librenderdoc_sys-04e676ab5af521c0.rmetabin0 -> 53351 bytes
-rw-r--r--.old/target/debug/deps/librustc_hash-79bd06606779b665.rmetabin0 -> 14216 bytes
-rw-r--r--.old/target/debug/deps/librustix-2279050c80cce053.rmetabin0 -> 8097505 bytes
-rw-r--r--.old/target/debug/deps/libryu-37d53b4f77257f86.rlibbin0 -> 310898 bytes
-rw-r--r--.old/target/debug/deps/libscoped_tls-947d207027aa3d7d.rmetabin0 -> 11168 bytes
-rw-r--r--.old/target/debug/deps/libsctk_adwaita-2f6ef4f16053a20e.rlibbin0 -> 3871924 bytes
-rwxr-xr-x.old/target/debug/deps/libserde_derive-9c1eeda2419ac537.sobin0 -> 8898928 bytes
-rw-r--r--.old/target/debug/deps/libserde_json-7f531e5853cff0f4.rmetabin0 -> 931695 bytes
-rw-r--r--.old/target/debug/deps/libsignal_hook_registry-14a19e68287ab283.rmetabin0 -> 81984 bytes
-rw-r--r--.old/target/debug/deps/libsignal_hook_registry-56c9b79afea0981c.rlibbin0 -> 1733782 bytes
-rw-r--r--.old/target/debug/deps/libslab-310234d692715ce3.rmetabin0 -> 78072 bytes
-rw-r--r--.old/target/debug/deps/libsmithay_client_toolkit-9472249ffb6b3fe2.rmetabin0 -> 1878723 bytes
-rw-r--r--.old/target/debug/deps/libsmithay_client_toolkit-bd47079a3bbdb3f9.rlibbin0 -> 5285886 bytes
-rw-r--r--.old/target/debug/deps/libsmithay_client_toolkit-d463b851c580ef65.rmetabin0 -> 1593767 bytes
-rw-r--r--.old/target/debug/deps/libsmol_str-194da2e0b9ad88a8.rmetabin0 -> 138569 bytes
-rw-r--r--.old/target/debug/deps/libstatic_assertions-a2f250d3376c1838.rlibbin0 -> 51532 bytes
-rw-r--r--.old/target/debug/deps/libstatic_assertions-a2f250d3376c1838.rmetabin0 -> 49986 bytes
-rw-r--r--.old/target/debug/deps/libstrict_num-1becda3bfa29f924.rlibbin0 -> 96094 bytes
-rw-r--r--.old/target/debug/deps/libstrict_num-1becda3bfa29f924.rmetabin0 -> 94571 bytes
-rw-r--r--.old/target/debug/deps/libstrict_num-800bd13c1bbdfb48.rmetabin0 -> 66717 bytes
-rw-r--r--.old/target/debug/deps/libsyn-3f96890d1c0558f3.rmetabin0 -> 3084320 bytes
-rw-r--r--.old/target/debug/deps/libsyn-89bce6a93f3c3a67.rmetabin0 -> 2213893 bytes
-rw-r--r--.old/target/debug/deps/libthiserror-7a08c7fb75317ff1.rlibbin0 -> 25676 bytes
-rw-r--r--.old/target/debug/deps/libthiserror-7a08c7fb75317ff1.rmetabin0 -> 24160 bytes
-rw-r--r--.old/target/debug/deps/libthiserror-e74cf0fb6b2e18cf.rmetabin0 -> 22714 bytes
-rw-r--r--.old/target/debug/deps/libthiserror-f8a0cf06aea04752.rmetabin0 -> 24160 bytes
-rwxr-xr-x.old/target/debug/deps/libthiserror_impl-b9529f4240c8b1d8.sobin0 -> 7909200 bytes
-rw-r--r--.old/target/debug/deps/libtiny_skia-dfad77f4d3fa7722.rmetabin0 -> 1637699 bytes
-rw-r--r--.old/target/debug/deps/libtiny_skia_path-938b866606d12a5a.rmetabin0 -> 325156 bytes
-rw-r--r--.old/target/debug/deps/libtiny_skia_path-d7b6903a407cff70.rmetabin0 -> 385662 bytes
-rwxr-xr-x.old/target/debug/deps/libtokio_macros-f630775fe714cbf3.sobin0 -> 7480080 bytes
-rw-r--r--.old/target/debug/deps/libtracing-ad65eba9c26e0c66.rlibbin0 -> 648332 bytes
-rw-r--r--.old/target/debug/deps/libtracing-e63f0fd6878a6640.rmetabin0 -> 538470 bytes
-rw-r--r--.old/target/debug/deps/libtracing_core-7989f104de9120c1.rmetabin0 -> 600776 bytes
-rw-r--r--.old/target/debug/deps/libtracing_log-ee35a40da66db16f.rlibbin0 -> 503156 bytes
-rw-r--r--.old/target/debug/deps/libtracing_subscriber-545b31b8a530e079.rlibbin0 -> 7098842 bytes
-rw-r--r--.old/target/debug/deps/libunicode_ident-5762da66a5bfba8e.rmetabin0 -> 34339 bytes
-rw-r--r--.old/target/debug/deps/libvec_map-7a6b12f1cc07f3f0.rlibbin0 -> 118016 bytes
-rw-r--r--.old/target/debug/deps/libvec_map-7a6b12f1cc07f3f0.rmetabin0 -> 116508 bytes
-rw-r--r--.old/target/debug/deps/libwayland_backend-8ebd4fff2f2e0181.rlibbin0 -> 5604134 bytes
-rw-r--r--.old/target/debug/deps/libwayland_client-2876c544f709a6d4.rlibbin0 -> 6512916 bytes
-rw-r--r--.old/target/debug/deps/libwayland_commons-ca7fc9d9b8dba295.rlibbin0 -> 1388794 bytes
-rw-r--r--.old/target/debug/deps/libwayland_commons-ca7fc9d9b8dba295.rmetabin0 -> 230222 bytes
-rw-r--r--.old/target/debug/deps/libwayland_csd_frame-0c339fa5d5829989.rmetabin0 -> 248953 bytes
-rw-r--r--.old/target/debug/deps/libwayland_protocols-4d17970ffc2adbfd.rlibbin0 -> 26498626 bytes
-rw-r--r--.old/target/debug/deps/libwayland_protocols-e123b4c5a47e94a0.rlibbin0 -> 38246002 bytes
-rw-r--r--.old/target/debug/deps/libwayland_protocols_wlr-c1ccc3095ec8c560.rmetabin0 -> 1591852 bytes
-rw-r--r--.old/target/debug/deps/libwayland_scanner-14da512d11ff82b6.rlibbin0 -> 1216676 bytes
-rw-r--r--.old/target/debug/deps/libwayland_scanner-14da512d11ff82b6.rmetabin0 -> 263034 bytes
-rw-r--r--.old/target/debug/deps/libwgpu-0622e3ad0d6b9a25.rlibbin0 -> 62840366 bytes
-rw-r--r--.old/target/debug/deps/libwgpu-0622e3ad0d6b9a25.rmetabin0 -> 1938779 bytes
-rw-r--r--.old/target/debug/deps/libwgpu_core-a7d442c878bb374f.rmetabin0 -> 3014100 bytes
-rw-r--r--.old/target/debug/deps/libwgpu_core-b4f1dd42a9332eaa.rmetabin0 -> 5665850 bytes
-rw-r--r--.old/target/debug/deps/libwgpu_hal-8d5be10925799804.rlibbin0 -> 33668086 bytes
-rw-r--r--.old/target/debug/deps/libwgpu_hal-98126f530bacc970.rlibbin0 -> 33698332 bytes
-rw-r--r--.old/target/debug/deps/libwgpu_hal-98126f530bacc970.rmetabin0 -> 2995952 bytes
-rw-r--r--.old/target/debug/deps/libwgpu_types-21203fac3b1be598.rmetabin0 -> 2506386 bytes
-rw-r--r--.old/target/debug/deps/libwinit-0135c0e67e9d97d5.rlibbin0 -> 35324026 bytes
-rw-r--r--.old/target/debug/deps/libwinit-0135c0e67e9d97d5.rmetabin0 -> 4062920 bytes
-rw-r--r--.old/target/debug/deps/libwinit-0d7eda34b53aee67.rmetabin0 -> 2683459 bytes
-rw-r--r--.old/target/debug/deps/libwinit-4fadca74212bd92c.rlibbin0 -> 35082524 bytes
-rw-r--r--.old/target/debug/deps/libwinit-b864db7ddc73df13.rmetabin0 -> 2878057 bytes
-rw-r--r--.old/target/debug/deps/libx11_dl-529fae40c2816ad8.rlibbin0 -> 8659178 bytes
-rw-r--r--.old/target/debug/deps/libx11_dl-ab1a2213fc394a4b.rmetabin0 -> 2288829 bytes
-rw-r--r--.old/target/debug/deps/libx11rb-ab62fcfcf70cb2f0.rlibbin0 -> 6812932 bytes
-rw-r--r--.old/target/debug/deps/libx11rb-ab62fcfcf70cb2f0.rmetabin0 -> 2700829 bytes
-rw-r--r--.old/target/debug/deps/libx11rb-c1def47bb7d7b0a1.rmetabin0 -> 1468445 bytes
-rw-r--r--.old/target/debug/deps/libx11rb_protocol-7648e18e332b3c2e.rmetabin0 -> 8512494 bytes
-rw-r--r--.old/target/debug/deps/libxcursor-08657c2b3a174fba.rlibbin0 -> 1555560 bytes
-rw-r--r--.old/target/debug/deps/libxcursor-08657c2b3a174fba.rmetabin0 -> 64118 bytes
-rw-r--r--.old/target/debug/deps/libxkbcommon_dl-a9de440c743ed994.rmetabin0 -> 162194 bytes
-rw-r--r--.old/target/debug/deps/libxkeysym-5f68b5da6eaed5c6.rlibbin0 -> 2945040 bytes
-rw-r--r--.old/target/debug/deps/libzerocopy-19ff0a49874433f9.rlibbin0 -> 4374716 bytes
-rw-r--r--.old/target/debug/deps/linux_raw_sys-501ed64292a9e1b5.d16
-rw-r--r--.old/target/debug/deps/linux_raw_sys-f407e2b712cc9845.d14
-rw-r--r--.old/target/debug/deps/lock_api-79a07689fae3c8c4.d8
-rw-r--r--.old/target/debug/deps/log-034efab62c7fbfc8.d10
-rw-r--r--.old/target/debug/deps/memchr-6709e545d5a75bbd.d33
-rw-r--r--.old/target/debug/deps/memmap2-c420ca3b3d7cee19.d9
-rw-r--r--.old/target/debug/deps/mio-11c27f1a740cf3eb.d40
-rw-r--r--.old/target/debug/deps/mio-e5f40431e402393e.d38
-rw-r--r--.old/target/debug/deps/naga-4b3a1e8a6318d0dd.d73
-rw-r--r--.old/target/debug/deps/naga-7c6b38cefadfa9db.d71
-rw-r--r--.old/target/debug/deps/nix-e7204a1d635ea85d.d26
-rw-r--r--.old/target/debug/deps/nu_ansi_term-f0dd67bbc4fc7bc7.d17
-rw-r--r--.old/target/debug/deps/overload-36d6dc4b2c1d5222.d10
-rw-r--r--.old/target/debug/deps/owned_ttf_parser-b06601a019a29880.d10
-rw-r--r--.old/target/debug/deps/parking_lot_core-9d53afdf505a034a.d13
-rw-r--r--.old/target/debug/deps/percent_encoding-e44e7ec6fb763c39.d5
-rw-r--r--.old/target/debug/deps/pin_project_lite-5d9e80b75b3eef3f.d5
-rw-r--r--.old/target/debug/deps/profiling-bd63ccd3d77c6c91.d6
-rw-r--r--.old/target/debug/deps/raw_window_handle-5e4b75a356ebfcd3.d15
-rw-r--r--.old/target/debug/deps/rustc_hash-79bd06606779b665.d7
-rw-r--r--.old/target/debug/deps/ryu-9d8193471ee70b21.d16
-rw-r--r--.old/target/debug/deps/scoped_tls-fccb04c9f627bfb7.d7
-rw-r--r--.old/target/debug/deps/serde-cfdc13fdebaddf47.d24
-rw-r--r--.old/target/debug/deps/serde-f3019f65dae2a769.d22
-rw-r--r--.old/target/debug/deps/simd_adler32-0032f95de74ec7da.d15
-rw-r--r--.old/target/debug/deps/slab-2f88cc462e1fe922.d8
-rw-r--r--.old/target/debug/deps/smallvec-f2b0a108f87ec86e.d7
-rw-r--r--.old/target/debug/deps/smithay_client_toolkit-9472249ffb6b3fe2.d35
-rw-r--r--.old/target/debug/deps/socket2-0fc0429a34d75b95.d11
-rw-r--r--.old/target/debug/deps/socket2-5699d2852efdcbaa.d9
-rw-r--r--.old/target/debug/deps/static_assertions-f0a9439e0694ace3.d14
-rw-r--r--.old/target/debug/deps/strict_num-800bd13c1bbdfb48.d5
-rw-r--r--.old/target/debug/deps/syn-89bce6a93f3c3a67.d49
-rw-r--r--.old/target/debug/deps/thiserror-48476edc3b53c953.d7
-rw-r--r--.old/target/debug/deps/thiserror_impl-18f04be846c9d48e.d14
-rw-r--r--.old/target/debug/deps/thiserror_impl-438c02baa125bc3f.d14
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.0g688e14pk3if2ovecfl3m4l5.0c54iii.rcgu.obin0 -> 17664 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.0gbbnciwf3i0wl7k8aj9cauzi.0c54iii.rcgu.obin0 -> 724744 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.0ghp3d3j8a5nxudzcmkdwyw0s.0c54iii.rcgu.obin0 -> 666344 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.0hjryizp23bcpbvha6fy0ggwu.0c54iii.rcgu.obin0 -> 249160 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.12t50zr191e342mg1qpauuuag.0c54iii.rcgu.obin0 -> 24080 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.15teke8tiwjs6fr6gdslbzaw8.0c54iii.rcgu.obin0 -> 17888 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.18zjmpuz5fybyzcrds87f93pg.0c54iii.rcgu.obin0 -> 802528 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.1yy2zzxqqwbtr190wf2fc7i1n.0c54iii.rcgu.obin0 -> 262624 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.26klwamt57idkkrbjwlq6knti.0c54iii.rcgu.obin0 -> 440808 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.2ghl9cla2byttpjbxh1r55ehp.0c54iii.rcgu.obin0 -> 10224 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.2mme4gejvpy0hmm3wxcy3kn6l.0c54iii.rcgu.obin0 -> 343304 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.2mp1pp9t18xxt7wcxl7ne3jgh.0c54iii.rcgu.obin0 -> 484168 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.2or7wohnr34oz6i79pc2n9dj5.0c54iii.rcgu.obin0 -> 23056 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.361jyf3q6kf4xin6zudyikmdi.0c54iii.rcgu.obin0 -> 15504 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.3ego2g5qnfa8yyftnvy9zei5n.0c54iii.rcgu.obin0 -> 8896 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.3kdq4s0rt3qelm5wp1xm3a4gu.0c54iii.rcgu.obin0 -> 13344 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.3pizhl2uabkvcklb8iwivmrb5.0c54iii.rcgu.obin0 -> 9784 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.3vkkvisdkkvdxay21jmaq1oyz.0c54iii.rcgu.obin0 -> 674512 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.41sv5spu03vaqqcwi9vjd44co.0c54iii.rcgu.obin0 -> 6120 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.434j0nbvuoqnv48nr4kf94vb4.0c54iii.rcgu.obin0 -> 9896 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.43agwiw9rdjem3os9s0zd9v1m.0c54iii.rcgu.obin0 -> 104328 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.45g9na2wa4jvar8nlnj23tghi.0c54iii.rcgu.obin0 -> 29360 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.4qf1fxhkn8jghh0nklb8dlg6l.0c54iii.rcgu.obin0 -> 327160 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.4y2ww3f7odzk7c0bfr9sryhi3.0c54iii.rcgu.obin0 -> 7528 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.5bnmordw07a5nd8roye1d7rdc.0c54iii.rcgu.obin0 -> 21056 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.5iau2j1e6vyuqncsll72x7u6j.0c54iii.rcgu.obin0 -> 597712 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.5lun85jxevone837w116iwrjm.0c54iii.rcgu.obin0 -> 576216 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.5o19yk28nonkdopbe0x3f35ra.0c54iii.rcgu.obin0 -> 226312 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.69415ikgwko2cole5fvibzmea.0c54iii.rcgu.obin0 -> 36272 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.6fsi4wvlt78tjq2334xag15l2.0c54iii.rcgu.obin0 -> 11336 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.6hmxbzbpdjrvu0hfa2qdnwvqc.0c54iii.rcgu.obin0 -> 30912 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.6i5gwudukupt50l1ei9b6yv5v.0c54iii.rcgu.obin0 -> 61512 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.7zdw265287xny2goxn2eheugr.0c54iii.rcgu.obin0 -> 619464 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.87od8ryk9c0x78he567a4c6kr.0c54iii.rcgu.obin0 -> 12672 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.8d7xc7ad776mscet1qlbf6b45.0c54iii.rcgu.obin0 -> 31056 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.8n7fceb7t4f3u1n213dvrxdrm.0c54iii.rcgu.obin0 -> 9288 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.8qqpoiw698frcbzhkgmvs5vwg.0c54iii.rcgu.obin0 -> 81008 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.8v8sooj1eim7up8v3n1i89pqp.0c54iii.rcgu.obin0 -> 18312 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.8x4yxvhl5q0ub00w5smav2wn7.0c54iii.rcgu.obin0 -> 819576 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.8yoqnocrm9gp7rq9g096954ml.0c54iii.rcgu.obin0 -> 20448 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.9atiwbya8w2ctyd46ol728mzh.0c54iii.rcgu.obin0 -> 55192 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.9ichlhi7dj2iwmp9di2iec822.0c54iii.rcgu.obin0 -> 22664 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.9v6gwsp8hs85rqkdgwekryr46.0c54iii.rcgu.obin0 -> 21920 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.a3ffibme3paoozjxs75og90mg.0c54iii.rcgu.obin0 -> 252080 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.a5spr7316iyy73126dgevrc2g.0c54iii.rcgu.obin0 -> 9024 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.ae8nhakm9kw6a4e063hypfqiz.0c54iii.rcgu.obin0 -> 348864 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.asuo3q1u1uwj0fnfo11jf6n76.0c54iii.rcgu.obin0 -> 736144 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.avnpj0oubb3o3se60yvyc5fpn.0c54iii.rcgu.obin0 -> 66680 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.b8y5dde7iseehkslzezh2t6sj.0c54iii.rcgu.obin0 -> 5248 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.bpjkqmbc4tpzcssy1k2yd7of6.0c54iii.rcgu.obin0 -> 202440 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.cu2qv1zpcn44nnw69w4irsgbw.0c54iii.rcgu.obin0 -> 138760 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.cvt6kbsm6173fophaphw7oi5g.0c54iii.rcgu.obin0 -> 30336 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.cwhzfhi5o42my15lhog78e2cz.0c54iii.rcgu.obin0 -> 11472 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.czgzyw9ti9f24q5ofyht61hiw.0c54iii.rcgu.obin0 -> 361952 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.d0iqr5gon1zk11wzxkxj35ztf.0c54iii.rcgu.obin0 -> 340528 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.d5zens22ygih1n34531oz961i.0c54iii.rcgu.obin0 -> 124456 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.dic3wzonm0ntzrjq3h7kvr8ky.0c54iii.rcgu.obin0 -> 11128 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.dkcex5nojl4o1wj0khh0jzafk.0c54iii.rcgu.obin0 -> 6920 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.dn3zzxa6uzr5kaf5gle96mhsr.0c54iii.rcgu.obin0 -> 201344 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.dn45na1dix3u6x436hui1s0fb.0c54iii.rcgu.obin0 -> 21816 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.dolh1r503kgpujr9huf2enba6.0c54iii.rcgu.obin0 -> 17448 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.dt2gyvosv2r2wr42cx16hvf39.0c54iii.rcgu.obin0 -> 67832 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.dzqnl44o3uok4ol7ox0ds6v3y.0c54iii.rcgu.obin0 -> 34592 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.euquzxdqmn5b9tesubxtxa0wj.0c54iii.rcgu.obin0 -> 264608 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.eus466wcgrletm1igudse2f6q.0c54iii.rcgu.obin0 -> 10848 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.euz0kj0mkqi38a61rryklz9w6.0c54iii.rcgu.obin0 -> 582376 bytes
-rw-r--r--.old/target/debug/deps/timeplot-01b339007221b45b.f1osno67mdbithxcizvlcqe7w.0c54iii.rcgu.obin0 -> 263392 bytes
-rw-r--r--.old/target/debug/deps/timeplot-260c93071255135f.d7
-rw-r--r--.old/target/debug/deps/timeplot-2e709988b8a48e0a.d6
-rw-r--r--.old/target/debug/deps/timeplot-93dad8ed3f4d84e0.d22
-rw-r--r--.old/target/debug/deps/tiny_skia-b893cb5d231908e6.d49
-rw-r--r--.old/target/debug/deps/tiny_skia_path-938b866606d12a5a.d17
-rw-r--r--.old/target/debug/deps/tiny_skia_path-c785cf4b52f2591e.d19
-rw-r--r--.old/target/debug/deps/tokio-077af445a0e8fe36.d0
-rw-r--r--.old/target/debug/deps/tokio-da63c2f385685ac7.d285
-rw-r--r--.old/target/debug/deps/tokio_macros-f630775fe714cbf3.d7
-rw-r--r--.old/target/debug/deps/tracing_core-6a12f673cc8b6a05.d18
-rw-r--r--.old/target/debug/deps/tracing_subscriber-545b31b8a530e079.d37
-rw-r--r--.old/target/debug/deps/wayland_backend-8ebd4fff2f2e0181.d28
-rw-r--r--.old/target/debug/deps/wayland_backend-c5fc11466b2e2202.d26
-rw-r--r--.old/target/debug/deps/wayland_client-2876c544f709a6d4.d10
-rw-r--r--.old/target/debug/deps/wayland_client-4b1cb93356682ac2.d18
-rw-r--r--.old/target/debug/deps/wayland_csd_frame-0c339fa5d5829989.d7
-rw-r--r--.old/target/debug/deps/wayland_cursor-448351953e88f0e3.d7
-rw-r--r--.old/target/debug/deps/wayland_cursor-934379a7419ce0b2.d7
-rw-r--r--.old/target/debug/deps/wayland_protocols-e123b4c5a47e94a0.d54
-rw-r--r--.old/target/debug/deps/wayland_scanner-6a56f9d4e0508f2e.d14
-rw-r--r--.old/target/debug/deps/wayland_sys-048cd416a428213a.d10
-rw-r--r--.old/target/debug/deps/wgpu_core-9177b27276cbeb6e.d62
-rw-r--r--.old/target/debug/deps/wgpu_core-a7d442c878bb374f.d60
-rw-r--r--.old/target/debug/deps/wgpu_core-b4f1dd42a9332eaa.d62
-rw-r--r--.old/target/debug/deps/wgpu_hal-89ff4f825cd382d4.d25
-rw-r--r--.old/target/debug/deps/wgpu_hal-98126f530bacc970.d25
-rw-r--r--.old/target/debug/deps/wgpu_hal-bad918ba06dbd821.d23
-rw-r--r--.old/target/debug/deps/winit-4fadca74212bd92c.d82
-rw-r--r--.old/target/debug/deps/winit-83180b602a687aee.d80
-rw-r--r--.old/target/debug/deps/x11_dl-529fae40c2816ad8.d37
-rw-r--r--.old/target/debug/deps/xkeysym-5f68b5da6eaed5c6.d8
-rw-r--r--cpp-timeplot/CMakeLists.txt86
-rw-r--r--cpp-timeplot/README.md32
-rw-r--r--cpp-timeplot/shaders/waterfall.wgsl22
-rw-r--r--cpp-timeplot/src/main.cpp210
-rw-r--r--cpp-timeplot/src/renderer.cpp249
-rw-r--r--cpp-timeplot/src/renderer.h35
-rw-r--r--cpp-timeplot/src/waterfall.cpp170
-rw-r--r--cpp-timeplot/src/waterfall.h39
-rw-r--r--cpp-timeplot/src/webgpu_impl.cpp2
-rw-r--r--rs/Cargo.toml12
-rw-r--r--rs/metrics.csv1045
-rw-r--r--rs/src/graph.rs122
-rw-r--r--rs/src/main.rs89
-rw-r--r--rs/src/metrics.rs290
-rw-r--r--rs/src/renderer.rs682
-rw-r--r--rs/src/shader.wgsl22
-rw-r--r--rs/src/vertex.rs27
-rw-r--r--web-timeplot/.gitignore1
-rw-r--r--web-timeplot/ARCHITECTURE.md37
-rw-r--r--web-timeplot/README.md81
-rw-r--r--web-timeplot/WEBSOCKET_FORMAT.md117
-rw-r--r--web-timeplot/package-lock.json24
-rw-r--r--web-timeplot/package.json6
-rw-r--r--web-timeplot/public/demo-data/chirp-ramp.csv47
-rw-r--r--web-timeplot/public/demo-data/step-bursts.csv42
-rw-r--r--web-timeplot/public/demo-data/telemetry-sweep.csv42
-rw-r--r--web-timeplot/scripts/demo-websocket-server.mjs131
-rw-r--r--web-timeplot/src/app/create-app.js361
-rw-r--r--web-timeplot/src/core/store.js212
-rw-r--r--web-timeplot/src/data-sources.js517
-rw-r--r--web-timeplot/src/data/csv-replay-source.js60
-rw-r--r--web-timeplot/src/data/parse-replay-csv.js108
-rw-r--r--web-timeplot/src/data/source-registry.js85
-rw-r--r--web-timeplot/src/data/synthetic-wave-source.js1
-rw-r--r--web-timeplot/src/data/websocket-source.js224
-rw-r--r--web-timeplot/src/demos.js697
-rw-r--r--web-timeplot/src/example-usage.js535
-rw-r--r--web-timeplot/src/metrics.js142
-rw-r--r--web-timeplot/src/plot-connections.js392
-rw-r--r--web-timeplot/src/plot/timeplot-view.js360
-rw-r--r--web-timeplot/src/state.js420
-rw-r--r--web-timeplot/src/styles.css232
-rw-r--r--web-timeplot/src/template-for-standard-site.js75
-rw-r--r--web-timeplot/src/test-data-generators.js530
-rw-r--r--web-timeplot/src/timeseries-plot.js277
-rw-r--r--web-timeplot/src/ui/panel-manager.js363
-rw-r--r--web-timeplot/src/waterfall.js219
374 files changed, 19883 insertions, 4055 deletions
diff --git a/AGENTS.md b/.old/AGENTS.md
index 0ceee95..0ceee95 100644
--- a/AGENTS.md
+++ b/.old/AGENTS.md
diff --git a/rs/Cargo.lock b/.old/Cargo.lock
index f99e0bf..bc58eba 100644
--- a/rs/Cargo.lock
+++ b/.old/Cargo.lock
@@ -4,9 +4,9 @@ version = 4
[[package]]
name = "ab_glyph"
-version = "0.2.32"
+version = "0.2.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2"
+checksum = "e074464580a518d16a7126262fffaaa47af89d4099d4cb403f8ed938ba12ee7d"
dependencies = [
"ab_glyph_rasterizer",
"owned_ttf_parser",
@@ -19,6 +19,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618"
[[package]]
+name = "addr2line"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler2"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
+
+[[package]]
name = "ahash"
version = "0.8.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -32,22 +47,13 @@ dependencies = [
]
[[package]]
-name = "aho-corasick"
-version = "1.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
-dependencies = [
- "memchr",
-]
-
-[[package]]
name = "android-activity"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046"
dependencies = [
"android-properties",
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"cc",
"cesu8",
"jni",
@@ -77,54 +83,10 @@ dependencies = [
]
[[package]]
-name = "anstream"
-version = "0.6.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192"
-dependencies = [
- "anstyle",
- "anstyle-parse",
- "anstyle-query",
- "anstyle-wincon",
- "colorchoice",
- "is_terminal_polyfill",
- "utf8parse",
-]
-
-[[package]]
-name = "anstyle"
-version = "1.0.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
-
-[[package]]
-name = "anstyle-parse"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
-dependencies = [
- "utf8parse",
-]
-
-[[package]]
-name = "anstyle-query"
-version = "1.1.4"
+name = "anyhow"
+version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2"
-dependencies = [
- "windows-sys 0.60.2",
-]
-
-[[package]]
-name = "anstyle-wincon"
-version = "3.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a"
-dependencies = [
- "anstyle",
- "once_cell_polyfill",
- "windows-sys 0.60.2",
-]
+checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
[[package]]
name = "arrayref"
@@ -154,6 +116,17 @@ dependencies = [
]
[[package]]
+name = "async-trait"
+version = "0.1.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.106",
+]
+
+[[package]]
name = "atomic-waker"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -166,6 +139,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
+name = "backtrace"
+version = "0.3.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
+dependencies = [
+ "addr2line",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
name = "bit-set"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -188,9 +176,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.9.4"
+version = "2.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
+checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
[[package]]
name = "block"
@@ -245,7 +233,7 @@ version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"log",
"polling",
"rustix 0.38.44",
@@ -267,11 +255,10 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.2.39"
+version = "1.2.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f"
+checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f"
dependencies = [
- "find-msvc-tools",
"jobserver",
"libc",
"shlex",
@@ -285,9 +272,9 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
[[package]]
name = "cfg-if"
-version = "1.0.3"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
+checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
[[package]]
name = "cfg_aliases"
@@ -312,12 +299,6 @@ dependencies = [
]
[[package]]
-name = "colorchoice"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
-
-[[package]]
name = "com"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -408,48 +389,6 @@ dependencies = [
]
[[package]]
-name = "cosmic-text"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59fd57d82eb4bfe7ffa9b1cec0c05e2fd378155b47f255a67983cb4afe0e80c2"
-dependencies = [
- "bitflags 2.9.4",
- "fontdb",
- "log",
- "rangemap",
- "rayon",
- "rustc-hash 1.1.0",
- "rustybuzz",
- "self_cell",
- "swash",
- "sys-locale",
- "ttf-parser 0.21.1",
- "unicode-bidi",
- "unicode-linebreak",
- "unicode-script",
- "unicode-segmentation",
-]
-
-[[package]]
-name = "crossbeam-deque"
-version = "0.8.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
-dependencies = [
- "crossbeam-epoch",
- "crossbeam-utils",
-]
-
-[[package]]
-name = "crossbeam-epoch"
-version = "0.9.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
-dependencies = [
- "crossbeam-utils",
-]
-
-[[package]]
name = "crossbeam-utils"
version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -467,7 +406,7 @@ version = "22.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdbd1f579714e3c809ebd822c81ef148b1ceaeb3d535352afc73fd0c4c6a0017"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"libloading",
"winapi",
]
@@ -509,35 +448,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
[[package]]
-name = "either"
-version = "1.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
-
-[[package]]
-name = "env_filter"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0"
-dependencies = [
- "log",
- "regex",
-]
-
-[[package]]
-name = "env_logger"
-version = "0.11.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
-dependencies = [
- "anstream",
- "anstyle",
- "env_filter",
- "jiff",
- "log",
-]
-
-[[package]]
name = "equivalent"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -545,78 +455,21 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "errno"
-version = "0.3.14"
+version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
+checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
dependencies = [
"libc",
- "windows-sys 0.61.1",
-]
-
-[[package]]
-name = "etagere"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc89bf99e5dc15954a60f707c1e09d7540e5cd9af85fa75caa0b510bc08c5342"
-dependencies = [
- "euclid",
- "svg_fmt",
-]
-
-[[package]]
-name = "euclid"
-version = "0.22.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48"
-dependencies = [
- "num-traits",
+ "windows-sys 0.60.2",
]
[[package]]
-name = "find-msvc-tools"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959"
-
-[[package]]
name = "foldhash"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]]
-name = "font-types"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b3971f9a5ca983419cdc386941ba3b9e1feba01a0ab888adf78739feb2798492"
-dependencies = [
- "bytemuck",
-]
-
-[[package]]
-name = "fontconfig-parser"
-version = "0.5.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646"
-dependencies = [
- "roxmltree",
-]
-
-[[package]]
-name = "fontdb"
-version = "0.16.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3"
-dependencies = [
- "fontconfig-parser",
- "log",
- "memmap2",
- "slotmap",
- "tinyvec",
- "ttf-parser 0.20.0",
-]
-
-[[package]]
name = "foreign-types"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -645,12 +498,12 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
[[package]]
name = "gethostname"
-version = "1.0.2"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55"
+checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818"
dependencies = [
- "rustix 1.1.2",
- "windows-targets 0.52.6",
+ "libc",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -662,10 +515,16 @@ dependencies = [
"cfg-if",
"libc",
"r-efi",
- "wasi",
+ "wasi 0.14.2+wasi-0.2.4",
]
[[package]]
+name = "gimli"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
+
+[[package]]
name = "gl_generator"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -698,25 +557,12 @@ dependencies = [
]
[[package]]
-name = "glyphon"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b11b1afb04c1a1be055989042258499473d0a9447f16450b433aba10bc2a46e7"
-dependencies = [
- "cosmic-text",
- "etagere",
- "lru",
- "rustc-hash 2.1.1",
- "wgpu",
-]
-
-[[package]]
name = "gpu-alloc"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"gpu-alloc-types",
]
@@ -726,7 +572,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
]
[[package]]
@@ -748,9 +594,9 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"gpu-descriptor-types",
- "hashbrown 0.15.5",
+ "hashbrown",
]
[[package]]
@@ -759,7 +605,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
]
[[package]]
@@ -772,18 +618,12 @@ dependencies = [
]
[[package]]
-name = "hashbrown"
-version = "0.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
-
-[[package]]
name = "hassle-rs"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"com",
"libc",
"libloading",
@@ -806,43 +646,30 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
[[package]]
name = "indexmap"
-version = "2.11.4"
+version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
+checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
dependencies = [
"equivalent",
- "hashbrown 0.16.0",
+ "hashbrown",
]
[[package]]
-name = "is_terminal_polyfill"
-version = "1.70.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
-
-[[package]]
-name = "jiff"
-version = "0.2.15"
+name = "io-uring"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49"
+checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b"
dependencies = [
- "jiff-static",
- "log",
- "portable-atomic",
- "portable-atomic-util",
- "serde",
+ "bitflags 2.9.1",
+ "cfg-if",
+ "libc",
]
[[package]]
-name = "jiff-static"
-version = "0.2.15"
+name = "itoa"
+version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "jni"
@@ -868,9 +695,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
name = "jobserver"
-version = "0.1.34"
+version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
+checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
dependencies = [
"getrandom",
"libc",
@@ -878,9 +705,9 @@ dependencies = [
[[package]]
name = "js-sys"
-version = "0.3.81"
+version = "0.3.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
dependencies = [
"once_cell",
"wasm-bindgen",
@@ -905,33 +732,27 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
[[package]]
name = "libc"
-version = "0.2.176"
+version = "0.2.175"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174"
+checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
[[package]]
name = "libloading"
-version = "0.8.9"
+version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
+checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
dependencies = [
"cfg-if",
- "windows-link",
+ "windows-targets 0.53.3",
]
[[package]]
-name = "libm"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
-
-[[package]]
name = "libredox"
-version = "0.1.10"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
+checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"libc",
"redox_syscall 0.5.17",
]
@@ -944,9 +765,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
[[package]]
name = "linux-raw-sys"
-version = "0.11.0"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
+checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
[[package]]
name = "litrs"
@@ -966,15 +787,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
-
-[[package]]
-name = "lru"
-version = "0.12.5"
+version = "0.4.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
+checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
[[package]]
name = "malloc_buf"
@@ -987,15 +802,15 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.7.6"
+version = "2.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
+checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
[[package]]
name = "memmap2"
-version = "0.9.8"
+version = "0.9.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7"
+checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28"
dependencies = [
"libc",
]
@@ -1006,7 +821,7 @@ version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"block",
"core-graphics-types",
"foreign-types",
@@ -1016,6 +831,26 @@ dependencies = [
]
[[package]]
+name = "miniz_oxide"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
+dependencies = [
+ "adler2",
+]
+
+[[package]]
+name = "mio"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
+dependencies = [
+ "libc",
+ "wasi 0.11.1+wasi-snapshot-preview1",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
name = "naga"
version = "22.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1023,13 +858,13 @@ checksum = "8bd5a652b6faf21496f2cfd88fc49989c8db0825d1f6746b1a71a6ede24a63ad"
dependencies = [
"arrayvec",
"bit-set",
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"cfg_aliases 0.1.1",
"codespan-reporting",
"hexf-parse",
"indexmap",
"log",
- "rustc-hash 1.1.0",
+ "rustc-hash",
"spirv",
"termcolor",
"thiserror",
@@ -1042,7 +877,7 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"jni-sys",
"log",
"ndk-sys 0.6.0+11769913",
@@ -1076,15 +911,6 @@ dependencies = [
]
[[package]]
-name = "num-traits"
-version = "0.2.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
name = "num_enum"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1137,7 +963,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"block2",
"libc",
"objc2",
@@ -1153,7 +979,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"block2",
"objc2",
"objc2-core-location",
@@ -1177,7 +1003,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"block2",
"objc2",
"objc2-foundation",
@@ -1219,7 +1045,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"block2",
"dispatch",
"libc",
@@ -1244,7 +1070,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"block2",
"objc2",
"objc2-foundation",
@@ -1256,7 +1082,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"block2",
"objc2",
"objc2-foundation",
@@ -1279,7 +1105,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"block2",
"objc2",
"objc2-cloud-kit",
@@ -1311,7 +1137,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"block2",
"objc2",
"objc2-core-location",
@@ -1319,16 +1145,19 @@ dependencies = [
]
[[package]]
-name = "once_cell"
-version = "1.21.3"
+name = "object"
+version = "0.36.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
+dependencies = [
+ "memchr",
+]
[[package]]
-name = "once_cell_polyfill"
-version = "1.70.1"
+name = "once_cell"
+version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "orbclient"
@@ -1345,7 +1174,7 @@ version = "0.25.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"
dependencies = [
- "ttf-parser 0.25.1",
+ "ttf-parser",
]
[[package]]
@@ -1379,9 +1208,9 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
name = "percent-encoding"
-version = "2.3.2"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pin-project"
@@ -1417,16 +1246,16 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
[[package]]
name = "polling"
-version = "3.11.0"
+version = "3.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
+checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829"
dependencies = [
"cfg-if",
"concurrent-queue",
"hermit-abi",
"pin-project-lite",
- "rustix 1.1.2",
- "windows-sys 0.61.1",
+ "rustix 1.0.8",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -1436,21 +1265,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2"
[[package]]
-name = "portable-atomic"
-version = "1.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
-
-[[package]]
-name = "portable-atomic-util"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
-dependencies = [
- "portable-atomic",
-]
-
-[[package]]
name = "presser"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1458,18 +1272,18 @@ checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
[[package]]
name = "proc-macro-crate"
-version = "3.4.0"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983"
+checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
dependencies = [
"toml_edit",
]
[[package]]
name = "proc-macro2"
-version = "1.0.101"
+version = "1.0.97"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
+checksum = "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1"
dependencies = [
"unicode-ident",
]
@@ -1491,9 +1305,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.41"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
dependencies = [
"proc-macro2",
]
@@ -1511,48 +1325,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde"
[[package]]
-name = "rangemap"
-version = "1.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223"
-
-[[package]]
name = "raw-window-handle"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
[[package]]
-name = "rayon"
-version = "1.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
-dependencies = [
- "either",
- "rayon-core",
-]
-
-[[package]]
-name = "rayon-core"
-version = "1.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
-dependencies = [
- "crossbeam-deque",
- "crossbeam-utils",
-]
-
-[[package]]
-name = "read-fonts"
-version = "0.22.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69aacb76b5c29acfb7f90155d39759a29496aebb49395830e928a9703d2eec2f"
-dependencies = [
- "bytemuck",
- "font-types",
-]
-
-[[package]]
name = "redox_syscall"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1567,49 +1345,20 @@ version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
dependencies = [
- "bitflags 2.9.4",
-]
-
-[[package]]
-name = "regex"
-version = "1.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-automata",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.4.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
+ "bitflags 2.9.1",
]
[[package]]
-name = "regex-syntax"
-version = "0.8.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
-
-[[package]]
name = "renderdoc-sys"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
[[package]]
-name = "roxmltree"
-version = "0.20.0"
+name = "rustc-demangle"
+version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
+checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
[[package]]
name = "rustc-hash"
@@ -1618,18 +1367,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
-name = "rustc-hash"
-version = "2.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
-
-[[package]]
name = "rustix"
version = "0.38.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"errno",
"libc",
"linux-raw-sys 0.4.15",
@@ -1638,15 +1381,15 @@ dependencies = [
[[package]]
name = "rustix"
-version = "1.1.2"
+version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
+checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"errno",
"libc",
- "linux-raw-sys 0.11.0",
- "windows-sys 0.61.1",
+ "linux-raw-sys 0.9.4",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -1656,21 +1399,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
-name = "rustybuzz"
-version = "0.14.1"
+name = "ryu"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c"
-dependencies = [
- "bitflags 2.9.4",
- "bytemuck",
- "libm",
- "smallvec",
- "ttf-parser 0.21.1",
- "unicode-bidi-mirroring",
- "unicode-ccc",
- "unicode-properties",
- "unicode-script",
-]
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
name = "same-file"
@@ -1707,34 +1439,19 @@ dependencies = [
]
[[package]]
-name = "self_cell"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749"
-
-[[package]]
name = "serde"
-version = "1.0.228"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
-dependencies = [
- "serde_core",
-]
-
-[[package]]
-name = "serde_core"
-version = "1.0.228"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.228"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [
"proc-macro2",
"quote",
@@ -1742,19 +1459,30 @@ dependencies = [
]
[[package]]
+name = "serde_json"
+version = "1.0.143"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a"
+dependencies = [
+ "itoa",
+ "memchr",
+ "ryu",
+ "serde",
+]
+
+[[package]]
name = "shlex"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
-name = "skrifa"
-version = "0.22.3"
+name = "signal-hook-registry"
+version = "1.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e1c44ad1f6c5bdd4eefed8326711b7dbda9ea45dfd36068c427d332aa382cbe"
+checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
dependencies = [
- "bytemuck",
- "read-fonts",
+ "libc",
]
[[package]]
@@ -1784,7 +1512,7 @@ version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"calloop",
"calloop-wayland-source",
"cursor-icon",
@@ -1813,12 +1541,22 @@ dependencies = [
]
[[package]]
+name = "socket2"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
+dependencies = [
+ "libc",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
name = "spirv"
version = "0.3.0+sdk-1.3.268.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
]
[[package]]
@@ -1834,23 +1572,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
[[package]]
-name = "svg_fmt"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb"
-
-[[package]]
-name = "swash"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbd59f3f359ddd2c95af4758c18270eddd9c730dde98598023cdabff472c2ca2"
-dependencies = [
- "skrifa",
- "yazi",
- "zeno",
-]
-
-[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1873,15 +1594,6 @@ dependencies = [
]
[[package]]
-name = "sys-locale"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4"
-dependencies = [
- "libc",
-]
-
-[[package]]
name = "termcolor"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1914,10 +1626,13 @@ dependencies = [
name = "timeplot"
version = "0.1.0"
dependencies = [
+ "anyhow",
+ "async-trait",
"bytemuck",
- "env_logger",
- "glyphon",
"pollster",
+ "serde",
+ "serde_json",
+ "tokio",
"wgpu",
"winit",
]
@@ -1948,47 +1663,50 @@ dependencies = [
]
[[package]]
-name = "tinyvec"
-version = "1.10.0"
+name = "tokio"
+version = "1.47.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
+checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
dependencies = [
- "tinyvec_macros",
+ "backtrace",
+ "bytes",
+ "io-uring",
+ "libc",
+ "mio",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "slab",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.59.0",
]
[[package]]
-name = "tinyvec_macros"
-version = "0.1.1"
+name = "tokio-macros"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.106",
+]
[[package]]
name = "toml_datetime"
-version = "0.7.2"
+version = "0.6.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1"
-dependencies = [
- "serde_core",
-]
+checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
[[package]]
name = "toml_edit"
-version = "0.23.6"
+version = "0.22.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b"
+checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
dependencies = [
"indexmap",
"toml_datetime",
- "toml_parser",
- "winnow",
-]
-
-[[package]]
-name = "toml_parser"
-version = "1.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627"
-dependencies = [
"winnow",
]
@@ -2010,63 +1728,15 @@ checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
[[package]]
name = "ttf-parser"
-version = "0.20.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4"
-
-[[package]]
-name = "ttf-parser"
-version = "0.21.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8"
-
-[[package]]
-name = "ttf-parser"
version = "0.25.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
[[package]]
-name = "unicode-bidi"
-version = "0.3.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
-
-[[package]]
-name = "unicode-bidi-mirroring"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86"
-
-[[package]]
-name = "unicode-ccc"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656"
-
-[[package]]
name = "unicode-ident"
-version = "1.0.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
-
-[[package]]
-name = "unicode-linebreak"
-version = "0.1.5"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
-
-[[package]]
-name = "unicode-properties"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
-
-[[package]]
-name = "unicode-script"
-version = "0.5.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
[[package]]
name = "unicode-segmentation"
@@ -2087,12 +1757,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
-name = "utf8parse"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
-
-[[package]]
name = "version_check"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2110,40 +1774,36 @@ dependencies = [
[[package]]
name = "wasi"
-version = "0.14.7+wasi-0.2.4"
+version = "0.11.1+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c"
-dependencies = [
- "wasip2",
-]
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
-name = "wasip2"
-version = "1.0.1+wasi-0.2.4"
+name = "wasi"
+version = "0.14.2+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
+checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
dependencies = [
- "wit-bindgen",
+ "wit-bindgen-rt",
]
[[package]]
name = "wasm-bindgen"
-version = "0.2.104"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
dependencies = [
"cfg-if",
"once_cell",
"rustversion",
"wasm-bindgen-macro",
- "wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.104"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
dependencies = [
"bumpalo",
"log",
@@ -2155,21 +1815,22 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.45"
+version = "0.4.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b"
+checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
dependencies = [
"cfg-if",
"js-sys",
+ "once_cell",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.104"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -2177,9 +1838,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.104"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [
"proc-macro2",
"quote",
@@ -2190,9 +1851,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.104"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
dependencies = [
"unicode-ident",
]
@@ -2205,7 +1866,7 @@ checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35"
dependencies = [
"cc",
"downcast-rs",
- "rustix 1.1.2",
+ "rustix 1.0.8",
"scoped-tls",
"smallvec",
"wayland-sys",
@@ -2217,8 +1878,8 @@ version = "0.31.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d"
dependencies = [
- "bitflags 2.9.4",
- "rustix 1.1.2",
+ "bitflags 2.9.1",
+ "rustix 1.0.8",
"wayland-backend",
"wayland-scanner",
]
@@ -2229,7 +1890,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"cursor-icon",
"wayland-backend",
]
@@ -2240,7 +1901,7 @@ version = "0.31.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29"
dependencies = [
- "rustix 1.1.2",
+ "rustix 1.0.8",
"wayland-client",
"xcursor",
]
@@ -2251,7 +1912,7 @@ version = "0.32.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"wayland-backend",
"wayland-client",
"wayland-scanner",
@@ -2263,7 +1924,7 @@ version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"wayland-backend",
"wayland-client",
"wayland-protocols",
@@ -2276,7 +1937,7 @@ version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"wayland-backend",
"wayland-client",
"wayland-protocols",
@@ -2308,9 +1969,9 @@ dependencies = [
[[package]]
name = "web-sys"
-version = "0.3.72"
+version = "0.3.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112"
+checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -2359,7 +2020,7 @@ checksum = "0348c840d1051b8e86c3bcd31206080c5e71e5933dabd79be1ce732b0b2f089a"
dependencies = [
"arrayvec",
"bit-vec",
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"cfg_aliases 0.1.1",
"document-features",
"indexmap",
@@ -2369,7 +2030,7 @@ dependencies = [
"parking_lot",
"profiling",
"raw-window-handle",
- "rustc-hash 1.1.0",
+ "rustc-hash",
"smallvec",
"thiserror",
"wgpu-hal",
@@ -2386,7 +2047,7 @@ dependencies = [
"arrayvec",
"ash",
"bit-set",
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"block",
"cfg_aliases 0.1.1",
"core-graphics-types",
@@ -2412,7 +2073,7 @@ dependencies = [
"range-alloc",
"raw-window-handle",
"renderdoc-sys",
- "rustc-hash 1.1.0",
+ "rustc-hash",
"smallvec",
"thiserror",
"wasm-bindgen",
@@ -2427,7 +2088,7 @@ version = "22.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc9d91f0e2c4b51434dfa6db77846f2793149d8e73f800fa2e41f52b8eac3c5d"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"js-sys",
"web-sys",
]
@@ -2456,11 +2117,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
-version = "0.1.11"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
- "windows-sys 0.61.1",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -2490,9 +2151,9 @@ dependencies = [
[[package]]
name = "windows-link"
-version = "0.2.0"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65"
+checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
[[package]]
name = "windows-sys"
@@ -2527,16 +2188,7 @@ version = "0.60.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
dependencies = [
- "windows-targets 0.53.4",
-]
-
-[[package]]
-name = "windows-sys"
-version = "0.61.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f"
-dependencies = [
- "windows-link",
+ "windows-targets 0.53.3",
]
[[package]]
@@ -2556,6 +2208,21 @@ dependencies = [
[[package]]
name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
@@ -2572,9 +2239,9 @@ dependencies = [
[[package]]
name = "windows-targets"
-version = "0.53.4"
+version = "0.53.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b"
+checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
dependencies = [
"windows-link",
"windows_aarch64_gnullvm 0.53.0",
@@ -2595,6 +2262,12 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
@@ -2613,6 +2286,12 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
@@ -2631,6 +2310,12 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
@@ -2661,6 +2346,12 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
@@ -2679,6 +2370,12 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
@@ -2697,6 +2394,12 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
@@ -2715,6 +2418,12 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
@@ -2734,7 +2443,7 @@ dependencies = [
"ahash",
"android-activity",
"atomic-waker",
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"block2",
"bytemuck",
"calloop",
@@ -2779,18 +2488,21 @@ dependencies = [
[[package]]
name = "winnow"
-version = "0.7.13"
+version = "0.7.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf"
+checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95"
dependencies = [
"memchr",
]
[[package]]
-name = "wit-bindgen"
-version = "0.46.0"
+name = "wit-bindgen-rt"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
+checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
+dependencies = [
+ "bitflags 2.9.1",
+]
[[package]]
name = "x11-dl"
@@ -2805,24 +2517,24 @@ dependencies = [
[[package]]
name = "x11rb"
-version = "0.13.2"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414"
+checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12"
dependencies = [
"as-raw-xcb-connection",
"gethostname",
"libc",
"libloading",
"once_cell",
- "rustix 1.1.2",
+ "rustix 0.38.44",
"x11rb-protocol",
]
[[package]]
name = "x11rb-protocol"
-version = "0.13.2"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd"
+checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d"
[[package]]
name = "xcursor"
@@ -2836,7 +2548,7 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5"
dependencies = [
- "bitflags 2.9.4",
+ "bitflags 2.9.1",
"dlib",
"log",
"once_cell",
@@ -2856,31 +2568,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7"
[[package]]
-name = "yazi"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1"
-
-[[package]]
-name = "zeno"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697"
-
-[[package]]
name = "zerocopy"
-version = "0.8.27"
+version = "0.8.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
+checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.8.27"
+version = "0.8.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
+checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
dependencies = [
"proc-macro2",
"quote",
diff --git a/.old/Cargo.toml b/.old/Cargo.toml
new file mode 100644
index 0000000..493c47c
--- /dev/null
+++ b/.old/Cargo.toml
@@ -0,0 +1,15 @@
+[package]
+name = "timeplot"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+wgpu = "22.0"
+winit = "0.30"
+bytemuck = { version = "1.20", features = ["derive"] }
+anyhow = "1.0"
+pollster = "0.3"
+tokio = { version = "1.0", features = ["full"] }
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+async-trait = "0.1"
diff --git a/.old/ast/main.json b/.old/ast/main.json
new file mode 100644
index 0000000..cb0df4b
--- /dev/null
+++ b/.old/ast/main.json
@@ -0,0 +1,9497 @@
+{
+ "type": "Program",
+ "start": 0,
+ "end": 11609,
+ "body": [
+ {
+ "type": "ImportDeclaration",
+ "start": 0,
+ "end": 38,
+ "specifiers": [
+ {
+ "type": "ImportSpecifier",
+ "start": 9,
+ "end": 20,
+ "imported": {
+ "type": "Identifier",
+ "start": 9,
+ "end": 20,
+ "name": "Application"
+ },
+ "local": {
+ "type": "Identifier",
+ "start": 9,
+ "end": 20,
+ "name": "Application"
+ }
+ }
+ ],
+ "source": {
+ "type": "Literal",
+ "start": 28,
+ "end": 37,
+ "value": "pixi.js",
+ "raw": "'pixi.js'"
+ }
+ },
+ {
+ "type": "ImportDeclaration",
+ "start": 39,
+ "end": 87,
+ "specifiers": [
+ {
+ "type": "ImportSpecifier",
+ "start": 48,
+ "end": 62,
+ "imported": {
+ "type": "Identifier",
+ "start": 48,
+ "end": 62,
+ "name": "WaterfallGraph"
+ },
+ "local": {
+ "type": "Identifier",
+ "start": 48,
+ "end": 62,
+ "name": "WaterfallGraph"
+ }
+ }
+ ],
+ "source": {
+ "type": "Literal",
+ "start": 70,
+ "end": 86,
+ "value": "./waterfall.js",
+ "raw": "'./waterfall.js'"
+ }
+ },
+ {
+ "type": "ImportDeclaration",
+ "start": 88,
+ "end": 138,
+ "specifiers": [
+ {
+ "type": "ImportSpecifier",
+ "start": 97,
+ "end": 115,
+ "imported": {
+ "type": "Identifier",
+ "start": 97,
+ "end": 115,
+ "name": "PerformanceMetrics"
+ },
+ "local": {
+ "type": "Identifier",
+ "start": 97,
+ "end": 115,
+ "name": "PerformanceMetrics"
+ }
+ }
+ ],
+ "source": {
+ "type": "Literal",
+ "start": 123,
+ "end": 137,
+ "value": "./metrics.js",
+ "raw": "'./metrics.js'"
+ }
+ },
+ {
+ "type": "ImportDeclaration",
+ "start": 139,
+ "end": 181,
+ "specifiers": [
+ {
+ "type": "ImportSpecifier",
+ "start": 148,
+ "end": 160,
+ "imported": {
+ "type": "Identifier",
+ "start": 148,
+ "end": 160,
+ "name": "StateManager"
+ },
+ "local": {
+ "type": "Identifier",
+ "start": 148,
+ "end": 160,
+ "name": "StateManager"
+ }
+ }
+ ],
+ "source": {
+ "type": "Literal",
+ "start": 168,
+ "end": 180,
+ "value": "./state.js",
+ "raw": "'./state.js'"
+ }
+ },
+ {
+ "type": "ImportDeclaration",
+ "start": 182,
+ "end": 243,
+ "specifiers": [
+ {
+ "type": "ImportSpecifier",
+ "start": 191,
+ "end": 215,
+ "imported": {
+ "type": "Identifier",
+ "start": 191,
+ "end": 215,
+ "name": "example8_InteractiveDemo"
+ },
+ "local": {
+ "type": "Identifier",
+ "start": 191,
+ "end": 215,
+ "name": "example8_InteractiveDemo"
+ }
+ }
+ ],
+ "source": {
+ "type": "Literal",
+ "start": 222,
+ "end": 242,
+ "value": "./example-usage.js",
+ "raw": "'./example-usage.js'"
+ }
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 452,
+ "end": 485,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 458,
+ "end": 484,
+ "id": {
+ "type": "Identifier",
+ "start": 458,
+ "end": 463,
+ "name": "state"
+ },
+ "init": {
+ "type": "NewExpression",
+ "start": 466,
+ "end": 484,
+ "callee": {
+ "type": "Identifier",
+ "start": 470,
+ "end": 482,
+ "name": "StateManager"
+ },
+ "arguments": []
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 505,
+ "end": 575,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 509,
+ "end": 574,
+ "id": {
+ "type": "Identifier",
+ "start": 509,
+ "end": 512,
+ "name": "dom"
+ },
+ "init": {
+ "type": "ObjectExpression",
+ "start": 515,
+ "end": 574,
+ "properties": [
+ {
+ "type": "Property",
+ "start": 521,
+ "end": 536,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 521,
+ "end": 530,
+ "name": "container"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 532,
+ "end": 536,
+ "value": null,
+ "raw": "null"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 542,
+ "end": 554,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 542,
+ "end": 550,
+ "name": "controls"
+ },
+ "value": {
+ "type": "ObjectExpression",
+ "start": 552,
+ "end": 554,
+ "properties": []
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 560,
+ "end": 571,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 560,
+ "end": 567,
+ "name": "display"
+ },
+ "value": {
+ "type": "ObjectExpression",
+ "start": 569,
+ "end": 571,
+ "properties": []
+ },
+ "kind": "init"
+ }
+ ]
+ }
+ }
+ ],
+ "kind": "let"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 602,
+ "end": 617,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 606,
+ "end": 616,
+ "id": {
+ "type": "Identifier",
+ "start": 606,
+ "end": 609,
+ "name": "app"
+ },
+ "init": {
+ "type": "Literal",
+ "start": 612,
+ "end": 616,
+ "value": null,
+ "raw": "null"
+ }
+ }
+ ],
+ "kind": "let"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 640,
+ "end": 659,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 644,
+ "end": 658,
+ "id": {
+ "type": "Identifier",
+ "start": 644,
+ "end": 651,
+ "name": "metrics"
+ },
+ "init": {
+ "type": "Literal",
+ "start": 654,
+ "end": 658,
+ "value": null,
+ "raw": "null"
+ }
+ }
+ ],
+ "kind": "let"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 660,
+ "end": 676,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 664,
+ "end": 675,
+ "id": {
+ "type": "Identifier",
+ "start": 664,
+ "end": 670,
+ "name": "graphs"
+ },
+ "init": {
+ "type": "ArrayExpression",
+ "start": 673,
+ "end": 675,
+ "elements": []
+ }
+ }
+ ],
+ "kind": "let"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 764,
+ "end": 799,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 768,
+ "end": 798,
+ "id": {
+ "type": "Identifier",
+ "start": 768,
+ "end": 790,
+ "name": "isDraggingVerticalZoom"
+ },
+ "init": {
+ "type": "Literal",
+ "start": 793,
+ "end": 798,
+ "value": false,
+ "raw": "false"
+ }
+ }
+ ],
+ "kind": "let"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 800,
+ "end": 819,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 804,
+ "end": 818,
+ "id": {
+ "type": "Identifier",
+ "start": 804,
+ "end": 814,
+ "name": "dragStartY"
+ },
+ "init": {
+ "type": "Literal",
+ "start": 817,
+ "end": 818,
+ "value": 0,
+ "raw": "0"
+ }
+ }
+ ],
+ "kind": "let"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 820,
+ "end": 844,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 824,
+ "end": 843,
+ "id": {
+ "type": "Identifier",
+ "start": 824,
+ "end": 837,
+ "name": "dragStartZoom"
+ },
+ "init": {
+ "type": "Literal",
+ "start": 840,
+ "end": 843,
+ "value": 1,
+ "raw": "1.0"
+ }
+ }
+ ],
+ "kind": "let"
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1034,
+ "end": 1491,
+ "expression": {
+ "type": "CallExpression",
+ "start": 1034,
+ "end": 1490,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 1034,
+ "end": 1059,
+ "object": {
+ "type": "Identifier",
+ "start": 1034,
+ "end": 1042,
+ "name": "document"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1043,
+ "end": 1059,
+ "name": "addEventListener"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1060,
+ "end": 1078,
+ "value": "DOMContentLoaded",
+ "raw": "'DOMContentLoaded'"
+ },
+ {
+ "type": "FunctionExpression",
+ "start": 1080,
+ "end": 1489,
+ "id": null,
+ "expression": false,
+ "generator": false,
+ "async": true,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 1097,
+ "end": 1489,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 1103,
+ "end": 1131,
+ "expression": {
+ "type": "CallExpression",
+ "start": 1103,
+ "end": 1130,
+ "callee": {
+ "type": "Identifier",
+ "start": 1103,
+ "end": 1106,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1107,
+ "end": 1129,
+ "value": "TimePlot starting...",
+ "raw": "'TimePlot starting...'"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1137,
+ "end": 1153,
+ "expression": {
+ "type": "CallExpression",
+ "start": 1137,
+ "end": 1152,
+ "callee": {
+ "type": "Identifier",
+ "start": 1137,
+ "end": 1140,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1141,
+ "end": 1151,
+ "value": "init DOM",
+ "raw": "'init DOM'"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1158,
+ "end": 1174,
+ "expression": {
+ "type": "AwaitExpression",
+ "start": 1158,
+ "end": 1173,
+ "argument": {
+ "type": "CallExpression",
+ "start": 1164,
+ "end": 1173,
+ "callee": {
+ "type": "Identifier",
+ "start": 1164,
+ "end": 1171,
+ "name": "initDOM"
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1180,
+ "end": 1208,
+ "expression": {
+ "type": "CallExpression",
+ "start": 1180,
+ "end": 1207,
+ "callee": {
+ "type": "Identifier",
+ "start": 1180,
+ "end": 1183,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1184,
+ "end": 1206,
+ "value": "init PixiJS renderer",
+ "raw": "'init PixiJS renderer'"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1213,
+ "end": 1234,
+ "expression": {
+ "type": "AwaitExpression",
+ "start": 1213,
+ "end": 1233,
+ "argument": {
+ "type": "CallExpression",
+ "start": 1219,
+ "end": 1233,
+ "callee": {
+ "type": "Identifier",
+ "start": 1219,
+ "end": 1231,
+ "name": "initRenderer"
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1240,
+ "end": 1259,
+ "expression": {
+ "type": "CallExpression",
+ "start": 1240,
+ "end": 1258,
+ "callee": {
+ "type": "Identifier",
+ "start": 1240,
+ "end": 1243,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1244,
+ "end": 1257,
+ "value": "init graphs",
+ "raw": "'init graphs'"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1264,
+ "end": 1283,
+ "expression": {
+ "type": "AwaitExpression",
+ "start": 1264,
+ "end": 1282,
+ "argument": {
+ "type": "CallExpression",
+ "start": 1270,
+ "end": 1282,
+ "callee": {
+ "type": "Identifier",
+ "start": 1270,
+ "end": 1280,
+ "name": "initGraphs"
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1289,
+ "end": 1310,
+ "expression": {
+ "type": "CallExpression",
+ "start": 1289,
+ "end": 1309,
+ "callee": {
+ "type": "Identifier",
+ "start": 1289,
+ "end": 1292,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1293,
+ "end": 1308,
+ "value": "init services",
+ "raw": "'init services'"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1315,
+ "end": 1336,
+ "expression": {
+ "type": "AwaitExpression",
+ "start": 1315,
+ "end": 1335,
+ "argument": {
+ "type": "CallExpression",
+ "start": 1321,
+ "end": 1335,
+ "callee": {
+ "type": "Identifier",
+ "start": 1321,
+ "end": 1333,
+ "name": "initServices"
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1342,
+ "end": 1364,
+ "expression": {
+ "type": "CallExpression",
+ "start": 1342,
+ "end": 1363,
+ "callee": {
+ "type": "Identifier",
+ "start": 1342,
+ "end": 1345,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1346,
+ "end": 1362,
+ "value": "setup controls",
+ "raw": "'setup controls'"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1369,
+ "end": 1391,
+ "expression": {
+ "type": "AwaitExpression",
+ "start": 1369,
+ "end": 1390,
+ "argument": {
+ "type": "CallExpression",
+ "start": 1375,
+ "end": 1390,
+ "callee": {
+ "type": "Identifier",
+ "start": 1375,
+ "end": 1388,
+ "name": "setupControls"
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1397,
+ "end": 1426,
+ "expression": {
+ "type": "CallExpression",
+ "start": 1397,
+ "end": 1425,
+ "callee": {
+ "type": "Identifier",
+ "start": 1397,
+ "end": 1400,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1401,
+ "end": 1424,
+ "value": "setup state listeners",
+ "raw": "'setup state listeners'"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1431,
+ "end": 1459,
+ "expression": {
+ "type": "AwaitExpression",
+ "start": 1431,
+ "end": 1458,
+ "argument": {
+ "type": "CallExpression",
+ "start": 1437,
+ "end": 1458,
+ "callee": {
+ "type": "Identifier",
+ "start": 1437,
+ "end": 1456,
+ "name": "setupStateListeners"
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1465,
+ "end": 1487,
+ "expression": {
+ "type": "CallExpression",
+ "start": 1465,
+ "end": 1486,
+ "callee": {
+ "type": "Identifier",
+ "start": 1465,
+ "end": 1468,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1469,
+ "end": 1485,
+ "value": "TimePlot ready",
+ "raw": "'TimePlot ready'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 1682,
+ "end": 2197,
+ "id": {
+ "type": "Identifier",
+ "start": 1697,
+ "end": 1704,
+ "name": "initDOM"
+ },
+ "expression": false,
+ "generator": false,
+ "async": true,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 1707,
+ "end": 2197,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 1713,
+ "end": 1773,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 1713,
+ "end": 1772,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 1713,
+ "end": 1726,
+ "object": {
+ "type": "Identifier",
+ "start": 1713,
+ "end": 1716,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1717,
+ "end": 1726,
+ "name": "container"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "CallExpression",
+ "start": 1729,
+ "end": 1772,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 1729,
+ "end": 1752,
+ "object": {
+ "type": "Identifier",
+ "start": 1729,
+ "end": 1737,
+ "name": "document"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1738,
+ "end": 1752,
+ "name": "getElementById"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1753,
+ "end": 1771,
+ "value": "canvas-container",
+ "raw": "'canvas-container'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1778,
+ "end": 1840,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 1778,
+ "end": 1839,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 1778,
+ "end": 1798,
+ "object": {
+ "type": "MemberExpression",
+ "start": 1778,
+ "end": 1790,
+ "object": {
+ "type": "Identifier",
+ "start": 1778,
+ "end": 1781,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1782,
+ "end": 1790,
+ "name": "controls"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1791,
+ "end": 1798,
+ "name": "gridBtn"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "CallExpression",
+ "start": 1801,
+ "end": 1839,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 1801,
+ "end": 1824,
+ "object": {
+ "type": "Identifier",
+ "start": 1801,
+ "end": 1809,
+ "name": "document"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1810,
+ "end": 1824,
+ "name": "getElementById"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1825,
+ "end": 1838,
+ "value": "toggle-grid",
+ "raw": "'toggle-grid'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1845,
+ "end": 1913,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 1845,
+ "end": 1912,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 1845,
+ "end": 1868,
+ "object": {
+ "type": "MemberExpression",
+ "start": 1845,
+ "end": 1857,
+ "object": {
+ "type": "Identifier",
+ "start": 1845,
+ "end": 1848,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1849,
+ "end": 1857,
+ "name": "controls"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1858,
+ "end": 1868,
+ "name": "metricsBtn"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "CallExpression",
+ "start": 1871,
+ "end": 1912,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 1871,
+ "end": 1894,
+ "object": {
+ "type": "Identifier",
+ "start": 1871,
+ "end": 1879,
+ "name": "document"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1880,
+ "end": 1894,
+ "name": "getElementById"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1895,
+ "end": 1911,
+ "value": "toggle-metrics",
+ "raw": "'toggle-metrics'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1918,
+ "end": 1985,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 1918,
+ "end": 1984,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 1918,
+ "end": 1940,
+ "object": {
+ "type": "MemberExpression",
+ "start": 1918,
+ "end": 1930,
+ "object": {
+ "type": "Identifier",
+ "start": 1918,
+ "end": 1921,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1922,
+ "end": 1930,
+ "name": "controls"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1931,
+ "end": 1940,
+ "name": "exportBtn"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "CallExpression",
+ "start": 1943,
+ "end": 1984,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 1943,
+ "end": 1966,
+ "object": {
+ "type": "Identifier",
+ "start": 1943,
+ "end": 1951,
+ "name": "document"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1952,
+ "end": 1966,
+ "name": "getElementById"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 1967,
+ "end": 1983,
+ "value": "export-metrics",
+ "raw": "'export-metrics'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 1990,
+ "end": 2058,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 1990,
+ "end": 2057,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 1990,
+ "end": 2014,
+ "object": {
+ "type": "MemberExpression",
+ "start": 1990,
+ "end": 2001,
+ "object": {
+ "type": "Identifier",
+ "start": 1990,
+ "end": 1993,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 1994,
+ "end": 2001,
+ "name": "display"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2002,
+ "end": 2014,
+ "name": "rendererType"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "CallExpression",
+ "start": 2017,
+ "end": 2057,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 2017,
+ "end": 2040,
+ "object": {
+ "type": "Identifier",
+ "start": 2017,
+ "end": 2025,
+ "name": "document"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2026,
+ "end": 2040,
+ "name": "getElementById"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 2041,
+ "end": 2056,
+ "value": "renderer-type",
+ "raw": "'renderer-type'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 2063,
+ "end": 2128,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 2063,
+ "end": 2127,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 2063,
+ "end": 2082,
+ "object": {
+ "type": "MemberExpression",
+ "start": 2063,
+ "end": 2074,
+ "object": {
+ "type": "Identifier",
+ "start": 2063,
+ "end": 2066,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2067,
+ "end": 2074,
+ "name": "display"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2075,
+ "end": 2082,
+ "name": "metrics"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "CallExpression",
+ "start": 2085,
+ "end": 2127,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 2085,
+ "end": 2108,
+ "object": {
+ "type": "Identifier",
+ "start": 2085,
+ "end": 2093,
+ "name": "document"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2094,
+ "end": 2108,
+ "name": "getElementById"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 2109,
+ "end": 2126,
+ "value": "metrics-display",
+ "raw": "'metrics-display'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 2133,
+ "end": 2195,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 2133,
+ "end": 2194,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 2133,
+ "end": 2154,
+ "object": {
+ "type": "MemberExpression",
+ "start": 2133,
+ "end": 2144,
+ "object": {
+ "type": "Identifier",
+ "start": 2133,
+ "end": 2136,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2137,
+ "end": 2144,
+ "name": "display"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2145,
+ "end": 2154,
+ "name": "timeScale"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "CallExpression",
+ "start": 2157,
+ "end": 2194,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 2157,
+ "end": 2180,
+ "object": {
+ "type": "Identifier",
+ "start": 2157,
+ "end": 2165,
+ "name": "document"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2166,
+ "end": 2180,
+ "name": "getElementById"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 2181,
+ "end": 2193,
+ "value": "time-scale",
+ "raw": "'time-scale'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 2199,
+ "end": 3456,
+ "id": {
+ "type": "Identifier",
+ "start": 2214,
+ "end": 2226,
+ "name": "initRenderer"
+ },
+ "expression": false,
+ "generator": false,
+ "async": true,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 2229,
+ "end": 3456,
+ "body": [
+ {
+ "type": "VariableDeclaration",
+ "start": 2268,
+ "end": 2294,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 2272,
+ "end": 2293,
+ "id": {
+ "type": "Identifier",
+ "start": 2272,
+ "end": 2282,
+ "name": "preference"
+ },
+ "init": {
+ "type": "Literal",
+ "start": 2285,
+ "end": 2293,
+ "value": "webgpu",
+ "raw": "'webgpu'"
+ }
+ }
+ ],
+ "kind": "let"
+ },
+ {
+ "type": "IfStatement",
+ "start": 2299,
+ "end": 2406,
+ "test": {
+ "type": "UnaryExpression",
+ "start": 2303,
+ "end": 2317,
+ "operator": "!",
+ "prefix": true,
+ "argument": {
+ "type": "MemberExpression",
+ "start": 2304,
+ "end": 2317,
+ "object": {
+ "type": "Identifier",
+ "start": 2304,
+ "end": 2313,
+ "name": "navigator"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2314,
+ "end": 2317,
+ "name": "gpu"
+ },
+ "computed": false,
+ "optional": false
+ }
+ },
+ "consequent": {
+ "type": "BlockStatement",
+ "start": 2319,
+ "end": 2406,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 2329,
+ "end": 2370,
+ "expression": {
+ "type": "CallExpression",
+ "start": 2329,
+ "end": 2369,
+ "callee": {
+ "type": "Identifier",
+ "start": 2329,
+ "end": 2332,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 2333,
+ "end": 2368,
+ "value": "WebGPU not available, using WebGL",
+ "raw": "'WebGPU not available, using WebGL'"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 2379,
+ "end": 2400,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 2379,
+ "end": 2399,
+ "operator": "=",
+ "left": {
+ "type": "Identifier",
+ "start": 2379,
+ "end": 2389,
+ "name": "preference"
+ },
+ "right": {
+ "type": "Literal",
+ "start": 2392,
+ "end": 2399,
+ "value": "webgl",
+ "raw": "'webgl'"
+ }
+ }
+ }
+ ]
+ },
+ "alternate": null
+ },
+ {
+ "type": "TryStatement",
+ "start": 2412,
+ "end": 3454,
+ "block": {
+ "type": "BlockStatement",
+ "start": 2416,
+ "end": 3355,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 2426,
+ "end": 2450,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 2426,
+ "end": 2449,
+ "operator": "=",
+ "left": {
+ "type": "Identifier",
+ "start": 2426,
+ "end": 2429,
+ "name": "app"
+ },
+ "right": {
+ "type": "NewExpression",
+ "start": 2432,
+ "end": 2449,
+ "callee": {
+ "type": "Identifier",
+ "start": 2436,
+ "end": 2447,
+ "name": "Application"
+ },
+ "arguments": []
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 2460,
+ "end": 2784,
+ "expression": {
+ "type": "AwaitExpression",
+ "start": 2460,
+ "end": 2783,
+ "argument": {
+ "type": "CallExpression",
+ "start": 2466,
+ "end": 2783,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 2466,
+ "end": 2474,
+ "object": {
+ "type": "Identifier",
+ "start": 2466,
+ "end": 2469,
+ "name": "app"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2470,
+ "end": 2474,
+ "name": "init"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "ObjectExpression",
+ "start": 2475,
+ "end": 2782,
+ "properties": [
+ {
+ "type": "Property",
+ "start": 2489,
+ "end": 2511,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 2489,
+ "end": 2499,
+ "name": "preference"
+ },
+ "value": {
+ "type": "Identifier",
+ "start": 2501,
+ "end": 2511,
+ "name": "preference"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 2525,
+ "end": 2549,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 2525,
+ "end": 2530,
+ "name": "width"
+ },
+ "value": {
+ "type": "MemberExpression",
+ "start": 2532,
+ "end": 2549,
+ "object": {
+ "type": "Identifier",
+ "start": 2532,
+ "end": 2538,
+ "name": "window"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2539,
+ "end": 2549,
+ "name": "innerWidth"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 2563,
+ "end": 2594,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 2563,
+ "end": 2569,
+ "name": "height"
+ },
+ "value": {
+ "type": "BinaryExpression",
+ "start": 2571,
+ "end": 2594,
+ "left": {
+ "type": "MemberExpression",
+ "start": 2571,
+ "end": 2589,
+ "object": {
+ "type": "Identifier",
+ "start": 2571,
+ "end": 2577,
+ "name": "window"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2578,
+ "end": 2589,
+ "name": "innerHeight"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "operator": "-",
+ "right": {
+ "type": "Literal",
+ "start": 2592,
+ "end": 2594,
+ "value": 60,
+ "raw": "60"
+ }
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 2632,
+ "end": 2657,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 2632,
+ "end": 2647,
+ "name": "backgroundColor"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 2649,
+ "end": 2657,
+ "value": 1710630,
+ "raw": "0x1a1a26"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 2671,
+ "end": 2686,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 2671,
+ "end": 2680,
+ "name": "antialias"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 2682,
+ "end": 2686,
+ "value": true,
+ "raw": "true"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 2700,
+ "end": 2717,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 2700,
+ "end": 2711,
+ "name": "autoDensity"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 2713,
+ "end": 2717,
+ "value": true,
+ "raw": "true"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 2731,
+ "end": 2771,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 2731,
+ "end": 2741,
+ "name": "resolution"
+ },
+ "value": {
+ "type": "LogicalExpression",
+ "start": 2743,
+ "end": 2771,
+ "left": {
+ "type": "MemberExpression",
+ "start": 2743,
+ "end": 2766,
+ "object": {
+ "type": "Identifier",
+ "start": 2743,
+ "end": 2749,
+ "name": "window"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2750,
+ "end": 2766,
+ "name": "devicePixelRatio"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "operator": "||",
+ "right": {
+ "type": "Literal",
+ "start": 2770,
+ "end": 2771,
+ "value": 1,
+ "raw": "1"
+ }
+ },
+ "kind": "init"
+ }
+ ]
+ }
+ ],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 2794,
+ "end": 2832,
+ "expression": {
+ "type": "CallExpression",
+ "start": 2794,
+ "end": 2831,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 2794,
+ "end": 2819,
+ "object": {
+ "type": "MemberExpression",
+ "start": 2794,
+ "end": 2807,
+ "object": {
+ "type": "Identifier",
+ "start": 2794,
+ "end": 2797,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2798,
+ "end": 2807,
+ "name": "container"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2808,
+ "end": 2819,
+ "name": "appendChild"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "MemberExpression",
+ "start": 2820,
+ "end": 2830,
+ "object": {
+ "type": "Identifier",
+ "start": 2820,
+ "end": 2823,
+ "name": "app"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2824,
+ "end": 2830,
+ "name": "canvas"
+ },
+ "computed": false,
+ "optional": false
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 2882,
+ "end": 2921,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 2888,
+ "end": 2920,
+ "id": {
+ "type": "Identifier",
+ "start": 2888,
+ "end": 2900,
+ "name": "rendererType"
+ },
+ "init": {
+ "type": "MemberExpression",
+ "start": 2903,
+ "end": 2920,
+ "object": {
+ "type": "MemberExpression",
+ "start": 2903,
+ "end": 2915,
+ "object": {
+ "type": "Identifier",
+ "start": 2903,
+ "end": 2906,
+ "name": "app"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2907,
+ "end": 2915,
+ "name": "renderer"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2916,
+ "end": 2920,
+ "name": "type"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 2930,
+ "end": 2980,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 2930,
+ "end": 2979,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 2930,
+ "end": 2964,
+ "object": {
+ "type": "MemberExpression",
+ "start": 2930,
+ "end": 2951,
+ "object": {
+ "type": "MemberExpression",
+ "start": 2930,
+ "end": 2941,
+ "object": {
+ "type": "Identifier",
+ "start": 2930,
+ "end": 2935,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2936,
+ "end": 2941,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2942,
+ "end": 2951,
+ "name": "rendering"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2952,
+ "end": 2964,
+ "name": "rendererType"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Identifier",
+ "start": 2967,
+ "end": 2979,
+ "name": "rendererType"
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 2989,
+ "end": 3041,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 2989,
+ "end": 3040,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 2989,
+ "end": 3025,
+ "object": {
+ "type": "MemberExpression",
+ "start": 2989,
+ "end": 3013,
+ "object": {
+ "type": "MemberExpression",
+ "start": 2989,
+ "end": 3000,
+ "object": {
+ "type": "Identifier",
+ "start": 2989,
+ "end": 2992,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 2993,
+ "end": 3000,
+ "name": "display"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3001,
+ "end": 3013,
+ "name": "rendererType"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3014,
+ "end": 3025,
+ "name": "textContent"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Identifier",
+ "start": 3028,
+ "end": 3040,
+ "name": "rendererType"
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 3050,
+ "end": 3089,
+ "expression": {
+ "type": "CallExpression",
+ "start": 3050,
+ "end": 3088,
+ "callee": {
+ "type": "Identifier",
+ "start": 3050,
+ "end": 3053,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "TemplateLiteral",
+ "start": 3054,
+ "end": 3087,
+ "expressions": [
+ {
+ "type": "Identifier",
+ "start": 3073,
+ "end": 3085,
+ "name": "rendererType"
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 3055,
+ "end": 3071,
+ "value": {
+ "raw": "Using renderer: ",
+ "cooked": "Using renderer: "
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 3086,
+ "end": 3086,
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": true
+ }
+ ]
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 3143,
+ "end": 3195,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 3143,
+ "end": 3194,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 3143,
+ "end": 3175,
+ "object": {
+ "type": "MemberExpression",
+ "start": 3143,
+ "end": 3163,
+ "object": {
+ "type": "MemberExpression",
+ "start": 3143,
+ "end": 3154,
+ "object": {
+ "type": "Identifier",
+ "start": 3143,
+ "end": 3148,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3149,
+ "end": 3154,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3155,
+ "end": 3163,
+ "name": "uiConfig"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3164,
+ "end": 3175,
+ "name": "canvasWidth"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "MemberExpression",
+ "start": 3178,
+ "end": 3194,
+ "object": {
+ "type": "MemberExpression",
+ "start": 3178,
+ "end": 3188,
+ "object": {
+ "type": "Identifier",
+ "start": 3178,
+ "end": 3181,
+ "name": "app"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3182,
+ "end": 3188,
+ "name": "screen"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3189,
+ "end": 3194,
+ "name": "width"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 3204,
+ "end": 3258,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 3204,
+ "end": 3257,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 3204,
+ "end": 3237,
+ "object": {
+ "type": "MemberExpression",
+ "start": 3204,
+ "end": 3224,
+ "object": {
+ "type": "MemberExpression",
+ "start": 3204,
+ "end": 3215,
+ "object": {
+ "type": "Identifier",
+ "start": 3204,
+ "end": 3209,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3210,
+ "end": 3215,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3216,
+ "end": 3224,
+ "name": "uiConfig"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3225,
+ "end": 3237,
+ "name": "canvasHeight"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "MemberExpression",
+ "start": 3240,
+ "end": 3257,
+ "object": {
+ "type": "MemberExpression",
+ "start": 3240,
+ "end": 3250,
+ "object": {
+ "type": "Identifier",
+ "start": 3240,
+ "end": 3243,
+ "name": "app"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3244,
+ "end": 3250,
+ "name": "screen"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3251,
+ "end": 3257,
+ "name": "height"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 3300,
+ "end": 3348,
+ "expression": {
+ "type": "CallExpression",
+ "start": 3300,
+ "end": 3347,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 3300,
+ "end": 3323,
+ "object": {
+ "type": "Identifier",
+ "start": 3300,
+ "end": 3306,
+ "name": "window"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3307,
+ "end": 3323,
+ "name": "addEventListener"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 3324,
+ "end": 3332,
+ "value": "resize",
+ "raw": "'resize'"
+ },
+ {
+ "type": "Identifier",
+ "start": 3334,
+ "end": 3346,
+ "name": "handleResize"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ },
+ "handler": {
+ "type": "CatchClause",
+ "start": 3356,
+ "end": 3454,
+ "param": {
+ "type": "Identifier",
+ "start": 3363,
+ "end": 3368,
+ "name": "error"
+ },
+ "body": {
+ "type": "BlockStatement",
+ "start": 3370,
+ "end": 3454,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 3380,
+ "end": 3427,
+ "expression": {
+ "type": "CallExpression",
+ "start": 3380,
+ "end": 3426,
+ "callee": {
+ "type": "Identifier",
+ "start": 3380,
+ "end": 3383,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "TemplateLiteral",
+ "start": 3384,
+ "end": 3425,
+ "expressions": [
+ {
+ "type": "Identifier",
+ "start": 3418,
+ "end": 3423,
+ "name": "error"
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 3385,
+ "end": 3416,
+ "value": {
+ "raw": "Failed to initialize renderer: ",
+ "cooked": "Failed to initialize renderer: "
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 3424,
+ "end": 3424,
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": true
+ }
+ ]
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ThrowStatement",
+ "start": 3436,
+ "end": 3448,
+ "argument": {
+ "type": "Identifier",
+ "start": 3442,
+ "end": 3447,
+ "name": "error"
+ }
+ }
+ ]
+ }
+ },
+ "finalizer": null
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 3458,
+ "end": 4247,
+ "id": {
+ "type": "Identifier",
+ "start": 3473,
+ "end": 3483,
+ "name": "initGraphs"
+ },
+ "expression": false,
+ "generator": false,
+ "async": true,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 3486,
+ "end": 4247,
+ "body": [
+ {
+ "type": "VariableDeclaration",
+ "start": 3492,
+ "end": 3523,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 3498,
+ "end": 3522,
+ "id": {
+ "type": "Identifier",
+ "start": 3498,
+ "end": 3503,
+ "name": "width"
+ },
+ "init": {
+ "type": "MemberExpression",
+ "start": 3506,
+ "end": 3522,
+ "object": {
+ "type": "MemberExpression",
+ "start": 3506,
+ "end": 3516,
+ "object": {
+ "type": "Identifier",
+ "start": 3506,
+ "end": 3509,
+ "name": "app"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3510,
+ "end": 3516,
+ "name": "screen"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3517,
+ "end": 3522,
+ "name": "width"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 3528,
+ "end": 3561,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 3534,
+ "end": 3560,
+ "id": {
+ "type": "Identifier",
+ "start": 3534,
+ "end": 3540,
+ "name": "height"
+ },
+ "init": {
+ "type": "MemberExpression",
+ "start": 3543,
+ "end": 3560,
+ "object": {
+ "type": "MemberExpression",
+ "start": 3543,
+ "end": 3553,
+ "object": {
+ "type": "Identifier",
+ "start": 3543,
+ "end": 3546,
+ "name": "app"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3547,
+ "end": 3553,
+ "name": "screen"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 3554,
+ "end": 3560,
+ "name": "height"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 3585,
+ "end": 3767,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 3591,
+ "end": 3766,
+ "id": {
+ "type": "Identifier",
+ "start": 3591,
+ "end": 3597,
+ "name": "graph1"
+ },
+ "init": {
+ "type": "NewExpression",
+ "start": 3600,
+ "end": 3766,
+ "callee": {
+ "type": "Identifier",
+ "start": 3604,
+ "end": 3618,
+ "name": "WaterfallGraph"
+ },
+ "arguments": [
+ {
+ "type": "ObjectExpression",
+ "start": 3619,
+ "end": 3765,
+ "properties": [
+ {
+ "type": "Property",
+ "start": 3629,
+ "end": 3633,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3629,
+ "end": 3630,
+ "name": "x"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 3632,
+ "end": 3633,
+ "value": 0,
+ "raw": "0"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 3643,
+ "end": 3647,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3643,
+ "end": 3644,
+ "name": "y"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 3646,
+ "end": 3647,
+ "value": 0,
+ "raw": "0"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 3657,
+ "end": 3673,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3657,
+ "end": 3662,
+ "name": "width"
+ },
+ "value": {
+ "type": "BinaryExpression",
+ "start": 3664,
+ "end": 3673,
+ "left": {
+ "type": "Identifier",
+ "start": 3664,
+ "end": 3669,
+ "name": "width"
+ },
+ "operator": "/",
+ "right": {
+ "type": "Literal",
+ "start": 3672,
+ "end": 3673,
+ "value": 2,
+ "raw": "2"
+ }
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 3683,
+ "end": 3697,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3683,
+ "end": 3689,
+ "name": "height"
+ },
+ "value": {
+ "type": "Identifier",
+ "start": 3691,
+ "end": 3697,
+ "name": "height"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 3707,
+ "end": 3733,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3707,
+ "end": 3712,
+ "name": "title"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 3714,
+ "end": 3733,
+ "value": "Frequency vs Time",
+ "raw": "'Frequency vs Time'"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 3743,
+ "end": 3758,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3743,
+ "end": 3748,
+ "name": "color"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 3750,
+ "end": 3758,
+ "value": 16737894,
+ "raw": "0xff6666"
+ },
+ "kind": "init"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 3792,
+ "end": 3981,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 3798,
+ "end": 3980,
+ "id": {
+ "type": "Identifier",
+ "start": 3798,
+ "end": 3804,
+ "name": "graph2"
+ },
+ "init": {
+ "type": "NewExpression",
+ "start": 3807,
+ "end": 3980,
+ "callee": {
+ "type": "Identifier",
+ "start": 3811,
+ "end": 3825,
+ "name": "WaterfallGraph"
+ },
+ "arguments": [
+ {
+ "type": "ObjectExpression",
+ "start": 3826,
+ "end": 3979,
+ "properties": [
+ {
+ "type": "Property",
+ "start": 3836,
+ "end": 3848,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3836,
+ "end": 3837,
+ "name": "x"
+ },
+ "value": {
+ "type": "BinaryExpression",
+ "start": 3839,
+ "end": 3848,
+ "left": {
+ "type": "Identifier",
+ "start": 3839,
+ "end": 3844,
+ "name": "width"
+ },
+ "operator": "/",
+ "right": {
+ "type": "Literal",
+ "start": 3847,
+ "end": 3848,
+ "value": 2,
+ "raw": "2"
+ }
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 3858,
+ "end": 3862,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3858,
+ "end": 3859,
+ "name": "y"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 3861,
+ "end": 3862,
+ "value": 0,
+ "raw": "0"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 3872,
+ "end": 3888,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3872,
+ "end": 3877,
+ "name": "width"
+ },
+ "value": {
+ "type": "BinaryExpression",
+ "start": 3879,
+ "end": 3888,
+ "left": {
+ "type": "Identifier",
+ "start": 3879,
+ "end": 3884,
+ "name": "width"
+ },
+ "operator": "/",
+ "right": {
+ "type": "Literal",
+ "start": 3887,
+ "end": 3888,
+ "value": 2,
+ "raw": "2"
+ }
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 3898,
+ "end": 3912,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3898,
+ "end": 3904,
+ "name": "height"
+ },
+ "value": {
+ "type": "Identifier",
+ "start": 3906,
+ "end": 3912,
+ "name": "height"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 3922,
+ "end": 3947,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3922,
+ "end": 3927,
+ "name": "title"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 3929,
+ "end": 3947,
+ "value": "Position vs Time",
+ "raw": "'Position vs Time'"
+ },
+ "kind": "init"
+ },
+ {
+ "type": "Property",
+ "start": 3957,
+ "end": 3972,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 3957,
+ "end": 3962,
+ "name": "color"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 3964,
+ "end": 3972,
+ "value": 6750054,
+ "raw": "0x66ff66"
+ },
+ "kind": "init"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 4053,
+ "end": 4079,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 4053,
+ "end": 4078,
+ "operator": "=",
+ "left": {
+ "type": "Identifier",
+ "start": 4053,
+ "end": 4059,
+ "name": "graphs"
+ },
+ "right": {
+ "type": "ArrayExpression",
+ "start": 4062,
+ "end": 4078,
+ "elements": [
+ {
+ "type": "Identifier",
+ "start": 4063,
+ "end": 4069,
+ "name": "graph1"
+ },
+ {
+ "type": "Identifier",
+ "start": 4071,
+ "end": 4077,
+ "name": "graph2"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 4105,
+ "end": 4245,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4105,
+ "end": 4244,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 4105,
+ "end": 4119,
+ "object": {
+ "type": "Identifier",
+ "start": 4105,
+ "end": 4111,
+ "name": "graphs"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4112,
+ "end": 4119,
+ "name": "forEach"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 4120,
+ "end": 4243,
+ "id": null,
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 4120,
+ "end": 4125,
+ "name": "graph"
+ }
+ ],
+ "body": {
+ "type": "BlockStatement",
+ "start": 4129,
+ "end": 4243,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 4139,
+ "end": 4175,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4139,
+ "end": 4174,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 4139,
+ "end": 4157,
+ "object": {
+ "type": "MemberExpression",
+ "start": 4139,
+ "end": 4148,
+ "object": {
+ "type": "Identifier",
+ "start": 4139,
+ "end": 4142,
+ "name": "app"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4143,
+ "end": 4148,
+ "name": "stage"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4149,
+ "end": 4157,
+ "name": "addChild"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "MemberExpression",
+ "start": 4158,
+ "end": 4173,
+ "object": {
+ "type": "Identifier",
+ "start": 4158,
+ "end": 4163,
+ "name": "graph"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4164,
+ "end": 4173,
+ "name": "container"
+ },
+ "computed": false,
+ "optional": false
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 4184,
+ "end": 4237,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4184,
+ "end": 4236,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 4184,
+ "end": 4204,
+ "object": {
+ "type": "Identifier",
+ "start": 4184,
+ "end": 4189,
+ "name": "graph"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4190,
+ "end": 4204,
+ "name": "setGridVisible"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "MemberExpression",
+ "start": 4205,
+ "end": 4235,
+ "object": {
+ "type": "MemberExpression",
+ "start": 4205,
+ "end": 4226,
+ "object": {
+ "type": "MemberExpression",
+ "start": 4205,
+ "end": 4216,
+ "object": {
+ "type": "Identifier",
+ "start": 4205,
+ "end": 4210,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4211,
+ "end": 4216,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4217,
+ "end": 4226,
+ "name": "userPrefs"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4227,
+ "end": 4235,
+ "name": "showGrid"
+ },
+ "computed": false,
+ "optional": false
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 4249,
+ "end": 4547,
+ "id": {
+ "type": "Identifier",
+ "start": 4264,
+ "end": 4276,
+ "name": "initServices"
+ },
+ "expression": false,
+ "generator": false,
+ "async": true,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 4279,
+ "end": 4547,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 4323,
+ "end": 4454,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 4323,
+ "end": 4453,
+ "operator": "=",
+ "left": {
+ "type": "Identifier",
+ "start": 4323,
+ "end": 4330,
+ "name": "metrics"
+ },
+ "right": {
+ "type": "NewExpression",
+ "start": 4333,
+ "end": 4453,
+ "callee": {
+ "type": "Identifier",
+ "start": 4337,
+ "end": 4355,
+ "name": "PerformanceMetrics"
+ },
+ "arguments": [
+ {
+ "type": "MemberExpression",
+ "start": 4365,
+ "end": 4400,
+ "object": {
+ "type": "MemberExpression",
+ "start": 4365,
+ "end": 4386,
+ "object": {
+ "type": "MemberExpression",
+ "start": 4365,
+ "end": 4376,
+ "object": {
+ "type": "Identifier",
+ "start": 4365,
+ "end": 4370,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4371,
+ "end": 4376,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4377,
+ "end": 4386,
+ "name": "userPrefs"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4387,
+ "end": 4400,
+ "name": "rollingWindow"
+ },
+ "computed": false,
+ "optional": false
+ },
+ {
+ "type": "MemberExpression",
+ "start": 4410,
+ "end": 4447,
+ "object": {
+ "type": "MemberExpression",
+ "start": 4410,
+ "end": 4431,
+ "object": {
+ "type": "MemberExpression",
+ "start": 4410,
+ "end": 4421,
+ "object": {
+ "type": "Identifier",
+ "start": 4410,
+ "end": 4415,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4416,
+ "end": 4421,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4422,
+ "end": 4431,
+ "name": "userPrefs"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4432,
+ "end": 4447,
+ "name": "historyCapacity"
+ },
+ "computed": false,
+ "optional": false
+ }
+ ]
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 4488,
+ "end": 4511,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4488,
+ "end": 4510,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 4488,
+ "end": 4502,
+ "object": {
+ "type": "MemberExpression",
+ "start": 4488,
+ "end": 4498,
+ "object": {
+ "type": "Identifier",
+ "start": 4488,
+ "end": 4491,
+ "name": "app"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4492,
+ "end": 4498,
+ "name": "ticker"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4499,
+ "end": 4502,
+ "name": "add"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Identifier",
+ "start": 4503,
+ "end": 4509,
+ "name": "update"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 4517,
+ "end": 4545,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4517,
+ "end": 4544,
+ "callee": {
+ "type": "Identifier",
+ "start": 4517,
+ "end": 4520,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 4521,
+ "end": 4543,
+ "value": "Services initialized",
+ "raw": "'Services initialized'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 4549,
+ "end": 5766,
+ "id": {
+ "type": "Identifier",
+ "start": 4558,
+ "end": 4571,
+ "name": "setupControls"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 4574,
+ "end": 5766,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 4610,
+ "end": 4657,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4610,
+ "end": 4656,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 4610,
+ "end": 4630,
+ "object": {
+ "type": "Identifier",
+ "start": 4610,
+ "end": 4615,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4616,
+ "end": 4630,
+ "name": "registerAction"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 4631,
+ "end": 4643,
+ "value": "toggleGrid",
+ "raw": "'toggleGrid'"
+ },
+ {
+ "type": "Identifier",
+ "start": 4645,
+ "end": 4655,
+ "name": "toggleGrid"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 4662,
+ "end": 4715,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4662,
+ "end": 4714,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 4662,
+ "end": 4682,
+ "object": {
+ "type": "Identifier",
+ "start": 4662,
+ "end": 4667,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4668,
+ "end": 4682,
+ "name": "registerAction"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 4683,
+ "end": 4698,
+ "value": "toggleMetrics",
+ "raw": "'toggleMetrics'"
+ },
+ {
+ "type": "Identifier",
+ "start": 4700,
+ "end": 4713,
+ "name": "toggleMetrics"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 4720,
+ "end": 4773,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4720,
+ "end": 4772,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 4720,
+ "end": 4740,
+ "object": {
+ "type": "Identifier",
+ "start": 4720,
+ "end": 4725,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4726,
+ "end": 4740,
+ "name": "registerAction"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 4741,
+ "end": 4756,
+ "value": "exportMetrics",
+ "raw": "'exportMetrics'"
+ },
+ {
+ "type": "Identifier",
+ "start": 4758,
+ "end": 4771,
+ "name": "exportMetrics"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 4815,
+ "end": 4850,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4815,
+ "end": 4849,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 4815,
+ "end": 4827,
+ "object": {
+ "type": "Identifier",
+ "start": 4815,
+ "end": 4820,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4821,
+ "end": 4827,
+ "name": "mapKey"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 4828,
+ "end": 4834,
+ "value": "KeyG",
+ "raw": "'KeyG'"
+ },
+ {
+ "type": "Literal",
+ "start": 4836,
+ "end": 4848,
+ "value": "toggleGrid",
+ "raw": "'toggleGrid'"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 4855,
+ "end": 4893,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4855,
+ "end": 4892,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 4855,
+ "end": 4867,
+ "object": {
+ "type": "Identifier",
+ "start": 4855,
+ "end": 4860,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4861,
+ "end": 4867,
+ "name": "mapKey"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 4868,
+ "end": 4874,
+ "value": "KeyM",
+ "raw": "'KeyM'"
+ },
+ {
+ "type": "Literal",
+ "start": 4876,
+ "end": 4891,
+ "value": "toggleMetrics",
+ "raw": "'toggleMetrics'"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 4898,
+ "end": 4936,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4898,
+ "end": 4935,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 4898,
+ "end": 4910,
+ "object": {
+ "type": "Identifier",
+ "start": 4898,
+ "end": 4903,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4904,
+ "end": 4910,
+ "name": "mapKey"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 4911,
+ "end": 4917,
+ "value": "KeyE",
+ "raw": "'KeyE'"
+ },
+ {
+ "type": "Literal",
+ "start": 4919,
+ "end": 4934,
+ "value": "exportMetrics",
+ "raw": "'exportMetrics'"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 4965,
+ "end": 5053,
+ "expression": {
+ "type": "CallExpression",
+ "start": 4965,
+ "end": 5052,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 4965,
+ "end": 5002,
+ "object": {
+ "type": "MemberExpression",
+ "start": 4965,
+ "end": 4985,
+ "object": {
+ "type": "MemberExpression",
+ "start": 4965,
+ "end": 4977,
+ "object": {
+ "type": "Identifier",
+ "start": 4965,
+ "end": 4968,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4969,
+ "end": 4977,
+ "name": "controls"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4978,
+ "end": 4985,
+ "name": "gridBtn"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 4986,
+ "end": 5002,
+ "name": "addEventListener"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5003,
+ "end": 5010,
+ "value": "click",
+ "raw": "'click'"
+ },
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 5012,
+ "end": 5051,
+ "id": null,
+ "expression": true,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "CallExpression",
+ "start": 5018,
+ "end": 5051,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5018,
+ "end": 5037,
+ "object": {
+ "type": "Identifier",
+ "start": 5018,
+ "end": 5023,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5024,
+ "end": 5037,
+ "name": "executeAction"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5038,
+ "end": 5050,
+ "value": "toggleGrid",
+ "raw": "'toggleGrid'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 5058,
+ "end": 5152,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5058,
+ "end": 5151,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5058,
+ "end": 5098,
+ "object": {
+ "type": "MemberExpression",
+ "start": 5058,
+ "end": 5081,
+ "object": {
+ "type": "MemberExpression",
+ "start": 5058,
+ "end": 5070,
+ "object": {
+ "type": "Identifier",
+ "start": 5058,
+ "end": 5061,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5062,
+ "end": 5070,
+ "name": "controls"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5071,
+ "end": 5081,
+ "name": "metricsBtn"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5082,
+ "end": 5098,
+ "name": "addEventListener"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5099,
+ "end": 5106,
+ "value": "click",
+ "raw": "'click'"
+ },
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 5108,
+ "end": 5150,
+ "id": null,
+ "expression": true,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "CallExpression",
+ "start": 5114,
+ "end": 5150,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5114,
+ "end": 5133,
+ "object": {
+ "type": "Identifier",
+ "start": 5114,
+ "end": 5119,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5120,
+ "end": 5133,
+ "name": "executeAction"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5134,
+ "end": 5149,
+ "value": "toggleMetrics",
+ "raw": "'toggleMetrics'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 5157,
+ "end": 5250,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5157,
+ "end": 5249,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5157,
+ "end": 5196,
+ "object": {
+ "type": "MemberExpression",
+ "start": 5157,
+ "end": 5179,
+ "object": {
+ "type": "MemberExpression",
+ "start": 5157,
+ "end": 5169,
+ "object": {
+ "type": "Identifier",
+ "start": 5157,
+ "end": 5160,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5161,
+ "end": 5169,
+ "name": "controls"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5170,
+ "end": 5179,
+ "name": "exportBtn"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5180,
+ "end": 5196,
+ "name": "addEventListener"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5197,
+ "end": 5204,
+ "value": "click",
+ "raw": "'click'"
+ },
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 5206,
+ "end": 5248,
+ "id": null,
+ "expression": true,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "CallExpression",
+ "start": 5212,
+ "end": 5248,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5212,
+ "end": 5231,
+ "object": {
+ "type": "Identifier",
+ "start": 5212,
+ "end": 5217,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5218,
+ "end": 5231,
+ "name": "executeAction"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5232,
+ "end": 5247,
+ "value": "exportMetrics",
+ "raw": "'exportMetrics'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 5313,
+ "end": 5385,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5313,
+ "end": 5384,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5313,
+ "end": 5336,
+ "object": {
+ "type": "Identifier",
+ "start": 5313,
+ "end": 5319,
+ "name": "window"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5320,
+ "end": 5336,
+ "name": "addEventListener"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5337,
+ "end": 5346,
+ "value": "keydown",
+ "raw": "'keydown'"
+ },
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 5348,
+ "end": 5383,
+ "id": null,
+ "expression": true,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 5349,
+ "end": 5350,
+ "name": "e"
+ }
+ ],
+ "body": {
+ "type": "CallExpression",
+ "start": 5355,
+ "end": 5383,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5355,
+ "end": 5380,
+ "object": {
+ "type": "Identifier",
+ "start": 5355,
+ "end": 5360,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5361,
+ "end": 5380,
+ "name": "handleKeyboardEvent"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Identifier",
+ "start": 5381,
+ "end": 5382,
+ "name": "e"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 5430,
+ "end": 5491,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5430,
+ "end": 5490,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5430,
+ "end": 5460,
+ "object": {
+ "type": "MemberExpression",
+ "start": 5430,
+ "end": 5443,
+ "object": {
+ "type": "Identifier",
+ "start": 5430,
+ "end": 5433,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5434,
+ "end": 5443,
+ "name": "container"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5444,
+ "end": 5460,
+ "name": "addEventListener"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5461,
+ "end": 5472,
+ "value": "mousedown",
+ "raw": "'mousedown'"
+ },
+ {
+ "type": "Identifier",
+ "start": 5474,
+ "end": 5489,
+ "name": "handleMouseDown"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 5496,
+ "end": 5550,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5496,
+ "end": 5549,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5496,
+ "end": 5519,
+ "object": {
+ "type": "Identifier",
+ "start": 5496,
+ "end": 5502,
+ "name": "window"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5503,
+ "end": 5519,
+ "name": "addEventListener"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5520,
+ "end": 5531,
+ "value": "mousemove",
+ "raw": "'mousemove'"
+ },
+ {
+ "type": "Identifier",
+ "start": 5533,
+ "end": 5548,
+ "name": "handleMouseMove"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 5555,
+ "end": 5605,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5555,
+ "end": 5604,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5555,
+ "end": 5578,
+ "object": {
+ "type": "Identifier",
+ "start": 5555,
+ "end": 5561,
+ "name": "window"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5562,
+ "end": 5578,
+ "name": "addEventListener"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5579,
+ "end": 5588,
+ "value": "mouseup",
+ "raw": "'mouseup'"
+ },
+ {
+ "type": "Identifier",
+ "start": 5590,
+ "end": 5603,
+ "name": "handleMouseUp"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 5610,
+ "end": 5683,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5610,
+ "end": 5682,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5610,
+ "end": 5640,
+ "object": {
+ "type": "MemberExpression",
+ "start": 5610,
+ "end": 5623,
+ "object": {
+ "type": "Identifier",
+ "start": 5610,
+ "end": 5613,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5614,
+ "end": 5623,
+ "name": "container"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5624,
+ "end": 5640,
+ "name": "addEventListener"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5641,
+ "end": 5654,
+ "value": "contextmenu",
+ "raw": "'contextmenu'"
+ },
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 5656,
+ "end": 5681,
+ "id": null,
+ "expression": true,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 5657,
+ "end": 5658,
+ "name": "e"
+ }
+ ],
+ "body": {
+ "type": "CallExpression",
+ "start": 5663,
+ "end": 5681,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5663,
+ "end": 5679,
+ "object": {
+ "type": "Identifier",
+ "start": 5663,
+ "end": 5664,
+ "name": "e"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5665,
+ "end": 5679,
+ "name": "preventDefault"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 5741,
+ "end": 5764,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5741,
+ "end": 5763,
+ "callee": {
+ "type": "Identifier",
+ "start": 5741,
+ "end": 5761,
+ "name": "updateControlButtons"
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 5768,
+ "end": 6694,
+ "id": {
+ "type": "Identifier",
+ "start": 5777,
+ "end": 5796,
+ "name": "setupStateListeners"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 5799,
+ "end": 6694,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 5838,
+ "end": 6033,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5838,
+ "end": 6032,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5838,
+ "end": 5846,
+ "object": {
+ "type": "Identifier",
+ "start": 5838,
+ "end": 5843,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5844,
+ "end": 5846,
+ "name": "on"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 5847,
+ "end": 5867,
+ "value": "userPrefs.showGrid",
+ "raw": "'userPrefs.showGrid'"
+ },
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 5869,
+ "end": 6031,
+ "id": null,
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "ObjectPattern",
+ "start": 5870,
+ "end": 5879,
+ "properties": [
+ {
+ "type": "Property",
+ "start": 5872,
+ "end": 5877,
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 5872,
+ "end": 5877,
+ "name": "value"
+ },
+ "kind": "init",
+ "value": {
+ "type": "Identifier",
+ "start": 5872,
+ "end": 5877,
+ "name": "value"
+ }
+ }
+ ]
+ }
+ ],
+ "body": {
+ "type": "BlockStatement",
+ "start": 5884,
+ "end": 6031,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 5894,
+ "end": 5947,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5894,
+ "end": 5946,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5894,
+ "end": 5908,
+ "object": {
+ "type": "Identifier",
+ "start": 5894,
+ "end": 5900,
+ "name": "graphs"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5901,
+ "end": 5908,
+ "name": "forEach"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 5909,
+ "end": 5945,
+ "id": null,
+ "expression": true,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 5909,
+ "end": 5914,
+ "name": "graph"
+ }
+ ],
+ "body": {
+ "type": "CallExpression",
+ "start": 5918,
+ "end": 5945,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 5918,
+ "end": 5938,
+ "object": {
+ "type": "Identifier",
+ "start": 5918,
+ "end": 5923,
+ "name": "graph"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 5924,
+ "end": 5938,
+ "name": "setGridVisible"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Identifier",
+ "start": 5939,
+ "end": 5944,
+ "name": "value"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 5956,
+ "end": 5979,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5956,
+ "end": 5978,
+ "callee": {
+ "type": "Identifier",
+ "start": 5956,
+ "end": 5976,
+ "name": "updateControlButtons"
+ },
+ "arguments": [],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 5988,
+ "end": 6025,
+ "expression": {
+ "type": "CallExpression",
+ "start": 5988,
+ "end": 6024,
+ "callee": {
+ "type": "Identifier",
+ "start": 5988,
+ "end": 5991,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "TemplateLiteral",
+ "start": 5992,
+ "end": 6023,
+ "expressions": [
+ {
+ "type": "ConditionalExpression",
+ "start": 6001,
+ "end": 6021,
+ "test": {
+ "type": "Identifier",
+ "start": 6001,
+ "end": 6006,
+ "name": "value"
+ },
+ "consequent": {
+ "type": "Literal",
+ "start": 6009,
+ "end": 6013,
+ "value": "ON",
+ "raw": "'ON'"
+ },
+ "alternate": {
+ "type": "Literal",
+ "start": 6016,
+ "end": 6021,
+ "value": "OFF",
+ "raw": "'OFF'"
+ }
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 5993,
+ "end": 5999,
+ "value": {
+ "raw": "Grid: ",
+ "cooked": "Grid: "
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 6022,
+ "end": 6022,
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": true
+ }
+ ]
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 6075,
+ "end": 6214,
+ "expression": {
+ "type": "CallExpression",
+ "start": 6075,
+ "end": 6213,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 6075,
+ "end": 6083,
+ "object": {
+ "type": "Identifier",
+ "start": 6075,
+ "end": 6080,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 6081,
+ "end": 6083,
+ "name": "on"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 6084,
+ "end": 6107,
+ "value": "userPrefs.showMetrics",
+ "raw": "'userPrefs.showMetrics'"
+ },
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 6109,
+ "end": 6212,
+ "id": null,
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "ObjectPattern",
+ "start": 6110,
+ "end": 6119,
+ "properties": [
+ {
+ "type": "Property",
+ "start": 6112,
+ "end": 6117,
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 6112,
+ "end": 6117,
+ "name": "value"
+ },
+ "kind": "init",
+ "value": {
+ "type": "Identifier",
+ "start": 6112,
+ "end": 6117,
+ "name": "value"
+ }
+ }
+ ]
+ }
+ ],
+ "body": {
+ "type": "BlockStatement",
+ "start": 6124,
+ "end": 6212,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 6134,
+ "end": 6157,
+ "expression": {
+ "type": "CallExpression",
+ "start": 6134,
+ "end": 6156,
+ "callee": {
+ "type": "Identifier",
+ "start": 6134,
+ "end": 6154,
+ "name": "updateControlButtons"
+ },
+ "arguments": [],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 6166,
+ "end": 6206,
+ "expression": {
+ "type": "CallExpression",
+ "start": 6166,
+ "end": 6205,
+ "callee": {
+ "type": "Identifier",
+ "start": 6166,
+ "end": 6169,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "TemplateLiteral",
+ "start": 6170,
+ "end": 6204,
+ "expressions": [
+ {
+ "type": "ConditionalExpression",
+ "start": 6182,
+ "end": 6202,
+ "test": {
+ "type": "Identifier",
+ "start": 6182,
+ "end": 6187,
+ "name": "value"
+ },
+ "consequent": {
+ "type": "Literal",
+ "start": 6190,
+ "end": 6194,
+ "value": "ON",
+ "raw": "'ON'"
+ },
+ "alternate": {
+ "type": "Literal",
+ "start": 6197,
+ "end": 6202,
+ "value": "OFF",
+ "raw": "'OFF'"
+ }
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 6171,
+ "end": 6180,
+ "value": {
+ "raw": "Metrics: ",
+ "cooked": "Metrics: "
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 6203,
+ "end": 6203,
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": true
+ }
+ ]
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 6259,
+ "end": 6415,
+ "expression": {
+ "type": "CallExpression",
+ "start": 6259,
+ "end": 6414,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 6259,
+ "end": 6267,
+ "object": {
+ "type": "Identifier",
+ "start": 6259,
+ "end": 6264,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 6265,
+ "end": 6267,
+ "name": "on"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 6268,
+ "end": 6288,
+ "value": "time.verticalScale",
+ "raw": "'time.verticalScale'"
+ },
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 6290,
+ "end": 6413,
+ "id": null,
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "ObjectPattern",
+ "start": 6291,
+ "end": 6300,
+ "properties": [
+ {
+ "type": "Property",
+ "start": 6293,
+ "end": 6298,
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 6293,
+ "end": 6298,
+ "name": "value"
+ },
+ "kind": "init",
+ "value": {
+ "type": "Identifier",
+ "start": 6293,
+ "end": 6298,
+ "name": "value"
+ }
+ }
+ ]
+ }
+ ],
+ "body": {
+ "type": "BlockStatement",
+ "start": 6305,
+ "end": 6413,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 6315,
+ "end": 6370,
+ "expression": {
+ "type": "CallExpression",
+ "start": 6315,
+ "end": 6369,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 6315,
+ "end": 6329,
+ "object": {
+ "type": "Identifier",
+ "start": 6315,
+ "end": 6321,
+ "name": "graphs"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 6322,
+ "end": 6329,
+ "name": "forEach"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 6330,
+ "end": 6368,
+ "id": null,
+ "expression": true,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 6330,
+ "end": 6335,
+ "name": "graph"
+ }
+ ],
+ "body": {
+ "type": "CallExpression",
+ "start": 6339,
+ "end": 6368,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 6339,
+ "end": 6361,
+ "object": {
+ "type": "Identifier",
+ "start": 6339,
+ "end": 6344,
+ "name": "graph"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 6345,
+ "end": 6361,
+ "name": "setVerticalScale"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Identifier",
+ "start": 6362,
+ "end": 6367,
+ "name": "value"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 6379,
+ "end": 6407,
+ "expression": {
+ "type": "CallExpression",
+ "start": 6379,
+ "end": 6406,
+ "callee": {
+ "type": "Identifier",
+ "start": 6379,
+ "end": 6404,
+ "name": "updateVerticalZoomDisplay"
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 6457,
+ "end": 6560,
+ "expression": {
+ "type": "CallExpression",
+ "start": 6457,
+ "end": 6559,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 6457,
+ "end": 6465,
+ "object": {
+ "type": "Identifier",
+ "start": 6457,
+ "end": 6462,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 6463,
+ "end": 6465,
+ "name": "on"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 6466,
+ "end": 6481,
+ "value": "time.isPaused",
+ "raw": "'time.isPaused'"
+ },
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 6483,
+ "end": 6558,
+ "id": null,
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "ObjectPattern",
+ "start": 6484,
+ "end": 6493,
+ "properties": [
+ {
+ "type": "Property",
+ "start": 6486,
+ "end": 6491,
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 6486,
+ "end": 6491,
+ "name": "value"
+ },
+ "kind": "init",
+ "value": {
+ "type": "Identifier",
+ "start": 6486,
+ "end": 6491,
+ "name": "value"
+ }
+ }
+ ]
+ }
+ ],
+ "body": {
+ "type": "BlockStatement",
+ "start": 6498,
+ "end": 6558,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 6508,
+ "end": 6552,
+ "expression": {
+ "type": "CallExpression",
+ "start": 6508,
+ "end": 6551,
+ "callee": {
+ "type": "Identifier",
+ "start": 6508,
+ "end": 6511,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "TemplateLiteral",
+ "start": 6512,
+ "end": 6550,
+ "expressions": [
+ {
+ "type": "ConditionalExpression",
+ "start": 6520,
+ "end": 6548,
+ "test": {
+ "type": "Identifier",
+ "start": 6520,
+ "end": 6525,
+ "name": "value"
+ },
+ "consequent": {
+ "type": "Literal",
+ "start": 6528,
+ "end": 6536,
+ "value": "PAUSED",
+ "raw": "'PAUSED'"
+ },
+ "alternate": {
+ "type": "Literal",
+ "start": 6539,
+ "end": 6548,
+ "value": "RESUMED",
+ "raw": "'RESUMED'"
+ }
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 6513,
+ "end": 6518,
+ "value": {
+ "raw": "Time ",
+ "cooked": "Time "
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 6549,
+ "end": 6549,
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": true
+ }
+ ]
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 6596,
+ "end": 6692,
+ "expression": {
+ "type": "CallExpression",
+ "start": 6596,
+ "end": 6691,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 6596,
+ "end": 6604,
+ "object": {
+ "type": "Identifier",
+ "start": 6596,
+ "end": 6601,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 6602,
+ "end": 6604,
+ "name": "on"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 6605,
+ "end": 6617,
+ "value": "time.speed",
+ "raw": "'time.speed'"
+ },
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 6619,
+ "end": 6690,
+ "id": null,
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "ObjectPattern",
+ "start": 6620,
+ "end": 6629,
+ "properties": [
+ {
+ "type": "Property",
+ "start": 6622,
+ "end": 6627,
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 6622,
+ "end": 6627,
+ "name": "value"
+ },
+ "kind": "init",
+ "value": {
+ "type": "Identifier",
+ "start": 6622,
+ "end": 6627,
+ "name": "value"
+ }
+ }
+ ]
+ }
+ ],
+ "body": {
+ "type": "BlockStatement",
+ "start": 6634,
+ "end": 6690,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 6644,
+ "end": 6684,
+ "expression": {
+ "type": "CallExpression",
+ "start": 6644,
+ "end": 6683,
+ "callee": {
+ "type": "Identifier",
+ "start": 6644,
+ "end": 6647,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "TemplateLiteral",
+ "start": 6648,
+ "end": 6682,
+ "expressions": [
+ {
+ "type": "CallExpression",
+ "start": 6663,
+ "end": 6679,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 6663,
+ "end": 6676,
+ "object": {
+ "type": "Identifier",
+ "start": 6663,
+ "end": 6668,
+ "name": "value"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 6669,
+ "end": 6676,
+ "name": "toFixed"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 6677,
+ "end": 6678,
+ "value": 1,
+ "raw": "1"
+ }
+ ],
+ "optional": false
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 6649,
+ "end": 6661,
+ "value": {
+ "raw": "Time speed: ",
+ "cooked": "Time speed: "
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 6680,
+ "end": 6681,
+ "value": {
+ "raw": "x",
+ "cooked": "x"
+ },
+ "tail": true
+ }
+ ]
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 6875,
+ "end": 7293,
+ "id": {
+ "type": "Identifier",
+ "start": 6884,
+ "end": 6896,
+ "name": "handleResize"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 6899,
+ "end": 7293,
+ "body": [
+ {
+ "type": "VariableDeclaration",
+ "start": 6905,
+ "end": 6937,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 6911,
+ "end": 6936,
+ "id": {
+ "type": "Identifier",
+ "start": 6911,
+ "end": 6916,
+ "name": "width"
+ },
+ "init": {
+ "type": "MemberExpression",
+ "start": 6919,
+ "end": 6936,
+ "object": {
+ "type": "Identifier",
+ "start": 6919,
+ "end": 6925,
+ "name": "window"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 6926,
+ "end": 6936,
+ "name": "innerWidth"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 6942,
+ "end": 6981,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 6948,
+ "end": 6980,
+ "id": {
+ "type": "Identifier",
+ "start": 6948,
+ "end": 6954,
+ "name": "height"
+ },
+ "init": {
+ "type": "BinaryExpression",
+ "start": 6957,
+ "end": 6980,
+ "left": {
+ "type": "MemberExpression",
+ "start": 6957,
+ "end": 6975,
+ "object": {
+ "type": "Identifier",
+ "start": 6957,
+ "end": 6963,
+ "name": "window"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 6964,
+ "end": 6975,
+ "name": "innerHeight"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "operator": "-",
+ "right": {
+ "type": "Literal",
+ "start": 6978,
+ "end": 6980,
+ "value": 60,
+ "raw": "60"
+ }
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 6987,
+ "end": 7022,
+ "expression": {
+ "type": "CallExpression",
+ "start": 6987,
+ "end": 7021,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 6987,
+ "end": 7006,
+ "object": {
+ "type": "MemberExpression",
+ "start": 6987,
+ "end": 6999,
+ "object": {
+ "type": "Identifier",
+ "start": 6987,
+ "end": 6990,
+ "name": "app"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 6991,
+ "end": 6999,
+ "name": "renderer"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7000,
+ "end": 7006,
+ "name": "resize"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Identifier",
+ "start": 7007,
+ "end": 7012,
+ "name": "width"
+ },
+ {
+ "type": "Identifier",
+ "start": 7014,
+ "end": 7020,
+ "name": "height"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 7048,
+ "end": 7089,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 7048,
+ "end": 7088,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 7048,
+ "end": 7080,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7048,
+ "end": 7068,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7048,
+ "end": 7059,
+ "object": {
+ "type": "Identifier",
+ "start": 7048,
+ "end": 7053,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7054,
+ "end": 7059,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7060,
+ "end": 7068,
+ "name": "uiConfig"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7069,
+ "end": 7080,
+ "name": "canvasWidth"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Identifier",
+ "start": 7083,
+ "end": 7088,
+ "name": "width"
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 7094,
+ "end": 7137,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 7094,
+ "end": 7136,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 7094,
+ "end": 7127,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7094,
+ "end": 7114,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7094,
+ "end": 7105,
+ "object": {
+ "type": "Identifier",
+ "start": 7094,
+ "end": 7099,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7100,
+ "end": 7105,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7106,
+ "end": 7114,
+ "name": "uiConfig"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7115,
+ "end": 7127,
+ "name": "canvasHeight"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Identifier",
+ "start": 7130,
+ "end": 7136,
+ "name": "height"
+ }
+ }
+ },
+ {
+ "type": "IfStatement",
+ "start": 7164,
+ "end": 7221,
+ "test": {
+ "type": "MemberExpression",
+ "start": 7168,
+ "end": 7177,
+ "object": {
+ "type": "Identifier",
+ "start": 7168,
+ "end": 7174,
+ "name": "graphs"
+ },
+ "property": {
+ "type": "Literal",
+ "start": 7175,
+ "end": 7176,
+ "value": 0,
+ "raw": "0"
+ },
+ "computed": true,
+ "optional": false
+ },
+ "consequent": {
+ "type": "ExpressionStatement",
+ "start": 7179,
+ "end": 7221,
+ "expression": {
+ "type": "CallExpression",
+ "start": 7179,
+ "end": 7220,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 7179,
+ "end": 7195,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7179,
+ "end": 7188,
+ "object": {
+ "type": "Identifier",
+ "start": 7179,
+ "end": 7185,
+ "name": "graphs"
+ },
+ "property": {
+ "type": "Literal",
+ "start": 7186,
+ "end": 7187,
+ "value": 0,
+ "raw": "0"
+ },
+ "computed": true,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7189,
+ "end": 7195,
+ "name": "resize"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 7196,
+ "end": 7197,
+ "value": 0,
+ "raw": "0"
+ },
+ {
+ "type": "Literal",
+ "start": 7199,
+ "end": 7200,
+ "value": 0,
+ "raw": "0"
+ },
+ {
+ "type": "BinaryExpression",
+ "start": 7202,
+ "end": 7211,
+ "left": {
+ "type": "Identifier",
+ "start": 7202,
+ "end": 7207,
+ "name": "width"
+ },
+ "operator": "/",
+ "right": {
+ "type": "Literal",
+ "start": 7210,
+ "end": 7211,
+ "value": 2,
+ "raw": "2"
+ }
+ },
+ {
+ "type": "Identifier",
+ "start": 7213,
+ "end": 7219,
+ "name": "height"
+ }
+ ],
+ "optional": false
+ }
+ },
+ "alternate": null
+ },
+ {
+ "type": "IfStatement",
+ "start": 7226,
+ "end": 7291,
+ "test": {
+ "type": "MemberExpression",
+ "start": 7230,
+ "end": 7239,
+ "object": {
+ "type": "Identifier",
+ "start": 7230,
+ "end": 7236,
+ "name": "graphs"
+ },
+ "property": {
+ "type": "Literal",
+ "start": 7237,
+ "end": 7238,
+ "value": 1,
+ "raw": "1"
+ },
+ "computed": true,
+ "optional": false
+ },
+ "consequent": {
+ "type": "ExpressionStatement",
+ "start": 7241,
+ "end": 7291,
+ "expression": {
+ "type": "CallExpression",
+ "start": 7241,
+ "end": 7290,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 7241,
+ "end": 7257,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7241,
+ "end": 7250,
+ "object": {
+ "type": "Identifier",
+ "start": 7241,
+ "end": 7247,
+ "name": "graphs"
+ },
+ "property": {
+ "type": "Literal",
+ "start": 7248,
+ "end": 7249,
+ "value": 1,
+ "raw": "1"
+ },
+ "computed": true,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7251,
+ "end": 7257,
+ "name": "resize"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "BinaryExpression",
+ "start": 7258,
+ "end": 7267,
+ "left": {
+ "type": "Identifier",
+ "start": 7258,
+ "end": 7263,
+ "name": "width"
+ },
+ "operator": "/",
+ "right": {
+ "type": "Literal",
+ "start": 7266,
+ "end": 7267,
+ "value": 2,
+ "raw": "2"
+ }
+ },
+ {
+ "type": "Literal",
+ "start": 7269,
+ "end": 7270,
+ "value": 0,
+ "raw": "0"
+ },
+ {
+ "type": "BinaryExpression",
+ "start": 7272,
+ "end": 7281,
+ "left": {
+ "type": "Identifier",
+ "start": 7272,
+ "end": 7277,
+ "name": "width"
+ },
+ "operator": "/",
+ "right": {
+ "type": "Literal",
+ "start": 7280,
+ "end": 7281,
+ "value": 2,
+ "raw": "2"
+ }
+ },
+ {
+ "type": "Identifier",
+ "start": 7283,
+ "end": 7289,
+ "name": "height"
+ }
+ ],
+ "optional": false
+ }
+ },
+ "alternate": null
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 7295,
+ "end": 7603,
+ "id": {
+ "type": "Identifier",
+ "start": 7304,
+ "end": 7319,
+ "name": "handleMouseDown"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 7320,
+ "end": 7321,
+ "name": "e"
+ }
+ ],
+ "body": {
+ "type": "BlockStatement",
+ "start": 7323,
+ "end": 7603,
+ "body": [
+ {
+ "type": "IfStatement",
+ "start": 7369,
+ "end": 7601,
+ "test": {
+ "type": "BinaryExpression",
+ "start": 7373,
+ "end": 7387,
+ "left": {
+ "type": "MemberExpression",
+ "start": 7373,
+ "end": 7381,
+ "object": {
+ "type": "Identifier",
+ "start": 7373,
+ "end": 7374,
+ "name": "e"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7375,
+ "end": 7381,
+ "name": "button"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "operator": "===",
+ "right": {
+ "type": "Literal",
+ "start": 7386,
+ "end": 7387,
+ "value": 1,
+ "raw": "1"
+ }
+ },
+ "consequent": {
+ "type": "BlockStatement",
+ "start": 7389,
+ "end": 7601,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 7399,
+ "end": 7418,
+ "expression": {
+ "type": "CallExpression",
+ "start": 7399,
+ "end": 7417,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 7399,
+ "end": 7415,
+ "object": {
+ "type": "Identifier",
+ "start": 7399,
+ "end": 7400,
+ "name": "e"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7401,
+ "end": 7415,
+ "name": "preventDefault"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 7427,
+ "end": 7457,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 7427,
+ "end": 7456,
+ "operator": "=",
+ "left": {
+ "type": "Identifier",
+ "start": 7427,
+ "end": 7449,
+ "name": "isDraggingVerticalZoom"
+ },
+ "right": {
+ "type": "Literal",
+ "start": 7452,
+ "end": 7456,
+ "value": true,
+ "raw": "true"
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 7466,
+ "end": 7489,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 7466,
+ "end": 7488,
+ "operator": "=",
+ "left": {
+ "type": "Identifier",
+ "start": 7466,
+ "end": 7476,
+ "name": "dragStartY"
+ },
+ "right": {
+ "type": "MemberExpression",
+ "start": 7479,
+ "end": 7488,
+ "object": {
+ "type": "Identifier",
+ "start": 7479,
+ "end": 7480,
+ "name": "e"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7481,
+ "end": 7488,
+ "name": "clientY"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 7498,
+ "end": 7545,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 7498,
+ "end": 7544,
+ "operator": "=",
+ "left": {
+ "type": "Identifier",
+ "start": 7498,
+ "end": 7511,
+ "name": "dragStartZoom"
+ },
+ "right": {
+ "type": "MemberExpression",
+ "start": 7514,
+ "end": 7544,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7514,
+ "end": 7530,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7514,
+ "end": 7525,
+ "object": {
+ "type": "Identifier",
+ "start": 7514,
+ "end": 7519,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7520,
+ "end": 7525,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7526,
+ "end": 7530,
+ "name": "time"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7531,
+ "end": 7544,
+ "name": "verticalScale"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 7554,
+ "end": 7595,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 7554,
+ "end": 7594,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 7554,
+ "end": 7580,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7554,
+ "end": 7573,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7554,
+ "end": 7567,
+ "object": {
+ "type": "Identifier",
+ "start": 7554,
+ "end": 7557,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7558,
+ "end": 7567,
+ "name": "container"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7568,
+ "end": 7573,
+ "name": "style"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7574,
+ "end": 7580,
+ "name": "cursor"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Literal",
+ "start": 7583,
+ "end": 7594,
+ "value": "ns-resize",
+ "raw": "'ns-resize'"
+ }
+ }
+ }
+ ]
+ },
+ "alternate": null
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 7605,
+ "end": 8016,
+ "id": {
+ "type": "Identifier",
+ "start": 7614,
+ "end": 7629,
+ "name": "handleMouseMove"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 7630,
+ "end": 7631,
+ "name": "e"
+ }
+ ],
+ "body": {
+ "type": "BlockStatement",
+ "start": 7633,
+ "end": 8016,
+ "body": [
+ {
+ "type": "IfStatement",
+ "start": 7639,
+ "end": 7675,
+ "test": {
+ "type": "UnaryExpression",
+ "start": 7643,
+ "end": 7666,
+ "operator": "!",
+ "prefix": true,
+ "argument": {
+ "type": "Identifier",
+ "start": 7644,
+ "end": 7666,
+ "name": "isDraggingVerticalZoom"
+ }
+ },
+ "consequent": {
+ "type": "ReturnStatement",
+ "start": 7668,
+ "end": 7675,
+ "argument": null
+ },
+ "alternate": null
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 7681,
+ "end": 7719,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 7687,
+ "end": 7718,
+ "id": {
+ "type": "Identifier",
+ "start": 7687,
+ "end": 7693,
+ "name": "deltaY"
+ },
+ "init": {
+ "type": "BinaryExpression",
+ "start": 7696,
+ "end": 7718,
+ "left": {
+ "type": "Identifier",
+ "start": 7696,
+ "end": 7706,
+ "name": "dragStartY"
+ },
+ "operator": "-",
+ "right": {
+ "type": "MemberExpression",
+ "start": 7709,
+ "end": 7718,
+ "object": {
+ "type": "Identifier",
+ "start": 7709,
+ "end": 7710,
+ "name": "e"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7711,
+ "end": 7718,
+ "name": "clientY"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 7755,
+ "end": 7781,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 7761,
+ "end": 7780,
+ "id": {
+ "type": "Identifier",
+ "start": 7761,
+ "end": 7772,
+ "name": "sensitivity"
+ },
+ "init": {
+ "type": "Literal",
+ "start": 7775,
+ "end": 7780,
+ "value": 0.005,
+ "raw": "0.005"
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 7808,
+ "end": 7863,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 7814,
+ "end": 7862,
+ "id": {
+ "type": "Identifier",
+ "start": 7814,
+ "end": 7821,
+ "name": "newZoom"
+ },
+ "init": {
+ "type": "BinaryExpression",
+ "start": 7824,
+ "end": 7862,
+ "left": {
+ "type": "Identifier",
+ "start": 7824,
+ "end": 7837,
+ "name": "dragStartZoom"
+ },
+ "operator": "+",
+ "right": {
+ "type": "BinaryExpression",
+ "start": 7841,
+ "end": 7861,
+ "left": {
+ "type": "Identifier",
+ "start": 7841,
+ "end": 7847,
+ "name": "deltaY"
+ },
+ "operator": "*",
+ "right": {
+ "type": "Identifier",
+ "start": 7850,
+ "end": 7861,
+ "name": "sensitivity"
+ }
+ }
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 7943,
+ "end": 8014,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 7943,
+ "end": 8013,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 7943,
+ "end": 7973,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7943,
+ "end": 7959,
+ "object": {
+ "type": "MemberExpression",
+ "start": 7943,
+ "end": 7954,
+ "object": {
+ "type": "Identifier",
+ "start": 7943,
+ "end": 7948,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7949,
+ "end": 7954,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7955,
+ "end": 7959,
+ "name": "time"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7960,
+ "end": 7973,
+ "name": "verticalScale"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "CallExpression",
+ "start": 7976,
+ "end": 8013,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 7976,
+ "end": 7984,
+ "object": {
+ "type": "Identifier",
+ "start": 7976,
+ "end": 7980,
+ "name": "Math"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7981,
+ "end": 7984,
+ "name": "max"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 7985,
+ "end": 7988,
+ "value": 0.2,
+ "raw": "0.2"
+ },
+ {
+ "type": "CallExpression",
+ "start": 7990,
+ "end": 8012,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 7990,
+ "end": 7998,
+ "object": {
+ "type": "Identifier",
+ "start": 7990,
+ "end": 7994,
+ "name": "Math"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 7995,
+ "end": 7998,
+ "name": "min"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 7999,
+ "end": 8002,
+ "value": 3,
+ "raw": "3.0"
+ },
+ {
+ "type": "Identifier",
+ "start": 8004,
+ "end": 8011,
+ "name": "newZoom"
+ }
+ ],
+ "optional": false
+ }
+ ],
+ "optional": false
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 8018,
+ "end": 8167,
+ "id": {
+ "type": "Identifier",
+ "start": 8027,
+ "end": 8040,
+ "name": "handleMouseUp"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 8041,
+ "end": 8042,
+ "name": "e"
+ }
+ ],
+ "body": {
+ "type": "BlockStatement",
+ "start": 8044,
+ "end": 8167,
+ "body": [
+ {
+ "type": "IfStatement",
+ "start": 8050,
+ "end": 8165,
+ "test": {
+ "type": "BinaryExpression",
+ "start": 8054,
+ "end": 8068,
+ "left": {
+ "type": "MemberExpression",
+ "start": 8054,
+ "end": 8062,
+ "object": {
+ "type": "Identifier",
+ "start": 8054,
+ "end": 8055,
+ "name": "e"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8056,
+ "end": 8062,
+ "name": "button"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "operator": "===",
+ "right": {
+ "type": "Literal",
+ "start": 8067,
+ "end": 8068,
+ "value": 1,
+ "raw": "1"
+ }
+ },
+ "consequent": {
+ "type": "BlockStatement",
+ "start": 8070,
+ "end": 8165,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 8080,
+ "end": 8111,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 8080,
+ "end": 8110,
+ "operator": "=",
+ "left": {
+ "type": "Identifier",
+ "start": 8080,
+ "end": 8102,
+ "name": "isDraggingVerticalZoom"
+ },
+ "right": {
+ "type": "Literal",
+ "start": 8105,
+ "end": 8110,
+ "value": false,
+ "raw": "false"
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 8120,
+ "end": 8159,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 8120,
+ "end": 8158,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 8120,
+ "end": 8146,
+ "object": {
+ "type": "MemberExpression",
+ "start": 8120,
+ "end": 8139,
+ "object": {
+ "type": "MemberExpression",
+ "start": 8120,
+ "end": 8133,
+ "object": {
+ "type": "Identifier",
+ "start": 8120,
+ "end": 8123,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8124,
+ "end": 8133,
+ "name": "container"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8134,
+ "end": 8139,
+ "name": "style"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8140,
+ "end": 8146,
+ "name": "cursor"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Literal",
+ "start": 8149,
+ "end": 8158,
+ "value": "default",
+ "raw": "'default'"
+ }
+ }
+ }
+ ]
+ },
+ "alternate": null
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 8350,
+ "end": 9750,
+ "id": {
+ "type": "Identifier",
+ "start": 8359,
+ "end": 8365,
+ "name": "update"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 8368,
+ "end": 9750,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 8374,
+ "end": 8395,
+ "expression": {
+ "type": "CallExpression",
+ "start": 8374,
+ "end": 8394,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 8374,
+ "end": 8392,
+ "object": {
+ "type": "Identifier",
+ "start": 8374,
+ "end": 8381,
+ "name": "metrics"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8382,
+ "end": 8392,
+ "name": "beginFrame"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 8400,
+ "end": 8422,
+ "expression": {
+ "type": "CallExpression",
+ "start": 8400,
+ "end": 8421,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 8400,
+ "end": 8419,
+ "object": {
+ "type": "Identifier",
+ "start": 8400,
+ "end": 8407,
+ "name": "metrics"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8408,
+ "end": 8419,
+ "name": "beginUpdate"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 8467,
+ "end": 8494,
+ "expression": {
+ "type": "CallExpression",
+ "start": 8467,
+ "end": 8493,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 8467,
+ "end": 8486,
+ "object": {
+ "type": "Identifier",
+ "start": 8467,
+ "end": 8472,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8473,
+ "end": 8486,
+ "name": "incrementTime"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 8487,
+ "end": 8492,
+ "value": 0.016,
+ "raw": "0.016"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 8519,
+ "end": 8545,
+ "expression": {
+ "type": "CallExpression",
+ "start": 8519,
+ "end": 8544,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 8519,
+ "end": 8542,
+ "object": {
+ "type": "Identifier",
+ "start": 8519,
+ "end": 8524,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8525,
+ "end": 8542,
+ "name": "updateRealElapsed"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 8551,
+ "end": 8588,
+ "expression": {
+ "type": "UpdateExpression",
+ "start": 8551,
+ "end": 8587,
+ "operator": "++",
+ "prefix": false,
+ "argument": {
+ "type": "MemberExpression",
+ "start": 8551,
+ "end": 8585,
+ "object": {
+ "type": "MemberExpression",
+ "start": 8551,
+ "end": 8572,
+ "object": {
+ "type": "MemberExpression",
+ "start": 8551,
+ "end": 8562,
+ "object": {
+ "type": "Identifier",
+ "start": 8551,
+ "end": 8556,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8557,
+ "end": 8562,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8563,
+ "end": 8572,
+ "name": "rendering"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8573,
+ "end": 8585,
+ "name": "frameCounter"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 8619,
+ "end": 8712,
+ "expression": {
+ "type": "CallExpression",
+ "start": 8619,
+ "end": 8711,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 8619,
+ "end": 8633,
+ "object": {
+ "type": "Identifier",
+ "start": 8619,
+ "end": 8625,
+ "name": "graphs"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8626,
+ "end": 8633,
+ "name": "forEach"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 8634,
+ "end": 8710,
+ "id": null,
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 8635,
+ "end": 8640,
+ "name": "graph"
+ },
+ {
+ "type": "Identifier",
+ "start": 8642,
+ "end": 8645,
+ "name": "idx"
+ }
+ ],
+ "body": {
+ "type": "BlockStatement",
+ "start": 8650,
+ "end": 8710,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 8660,
+ "end": 8704,
+ "expression": {
+ "type": "CallExpression",
+ "start": 8660,
+ "end": 8703,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 8660,
+ "end": 8672,
+ "object": {
+ "type": "Identifier",
+ "start": 8660,
+ "end": 8665,
+ "name": "graph"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8666,
+ "end": 8672,
+ "name": "update"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "MemberExpression",
+ "start": 8673,
+ "end": 8697,
+ "object": {
+ "type": "MemberExpression",
+ "start": 8673,
+ "end": 8689,
+ "object": {
+ "type": "MemberExpression",
+ "start": 8673,
+ "end": 8684,
+ "object": {
+ "type": "Identifier",
+ "start": 8673,
+ "end": 8678,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8679,
+ "end": 8684,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8685,
+ "end": 8689,
+ "name": "time"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8690,
+ "end": 8697,
+ "name": "current"
+ },
+ "computed": false,
+ "optional": false
+ },
+ {
+ "type": "Identifier",
+ "start": 8699,
+ "end": 8702,
+ "name": "idx"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 8718,
+ "end": 8755,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 8724,
+ "end": 8754,
+ "id": {
+ "type": "Identifier",
+ "start": 8724,
+ "end": 8732,
+ "name": "updateMs"
+ },
+ "init": {
+ "type": "CallExpression",
+ "start": 8735,
+ "end": 8754,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 8735,
+ "end": 8752,
+ "object": {
+ "type": "Identifier",
+ "start": 8735,
+ "end": 8742,
+ "name": "metrics"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8743,
+ "end": 8752,
+ "name": "endUpdate"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 8761,
+ "end": 8783,
+ "expression": {
+ "type": "CallExpression",
+ "start": 8761,
+ "end": 8782,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 8761,
+ "end": 8780,
+ "object": {
+ "type": "Identifier",
+ "start": 8761,
+ "end": 8768,
+ "name": "metrics"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8769,
+ "end": 8780,
+ "name": "beginRender"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 8838,
+ "end": 8875,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 8844,
+ "end": 8874,
+ "id": {
+ "type": "Identifier",
+ "start": 8844,
+ "end": 8852,
+ "name": "renderMs"
+ },
+ "init": {
+ "type": "CallExpression",
+ "start": 8855,
+ "end": 8874,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 8855,
+ "end": 8872,
+ "object": {
+ "type": "Identifier",
+ "start": 8855,
+ "end": 8862,
+ "name": "metrics"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8863,
+ "end": 8872,
+ "name": "endRender"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 8904,
+ "end": 8979,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 8910,
+ "end": 8978,
+ "id": {
+ "type": "Identifier",
+ "start": 8910,
+ "end": 8921,
+ "name": "vertexCount"
+ },
+ "init": {
+ "type": "CallExpression",
+ "start": 8924,
+ "end": 8978,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 8924,
+ "end": 8937,
+ "object": {
+ "type": "Identifier",
+ "start": 8924,
+ "end": 8930,
+ "name": "graphs"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8931,
+ "end": 8937,
+ "name": "reduce"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 8938,
+ "end": 8974,
+ "id": null,
+ "expression": true,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 8939,
+ "end": 8942,
+ "name": "sum"
+ },
+ {
+ "type": "Identifier",
+ "start": 8944,
+ "end": 8945,
+ "name": "g"
+ }
+ ],
+ "body": {
+ "type": "BinaryExpression",
+ "start": 8950,
+ "end": 8974,
+ "left": {
+ "type": "Identifier",
+ "start": 8950,
+ "end": 8953,
+ "name": "sum"
+ },
+ "operator": "+",
+ "right": {
+ "type": "CallExpression",
+ "start": 8956,
+ "end": 8974,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 8956,
+ "end": 8972,
+ "object": {
+ "type": "Identifier",
+ "start": 8956,
+ "end": 8957,
+ "name": "g"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 8958,
+ "end": 8972,
+ "name": "getVertexCount"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "Literal",
+ "start": 8976,
+ "end": 8977,
+ "value": 0,
+ "raw": "0"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 8984,
+ "end": 9055,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 8990,
+ "end": 9054,
+ "id": {
+ "type": "Identifier",
+ "start": 8990,
+ "end": 8999,
+ "name": "lineCount"
+ },
+ "init": {
+ "type": "CallExpression",
+ "start": 9002,
+ "end": 9054,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 9002,
+ "end": 9015,
+ "object": {
+ "type": "Identifier",
+ "start": 9002,
+ "end": 9008,
+ "name": "graphs"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9009,
+ "end": 9015,
+ "name": "reduce"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "ArrowFunctionExpression",
+ "start": 9016,
+ "end": 9050,
+ "id": null,
+ "expression": true,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 9017,
+ "end": 9020,
+ "name": "sum"
+ },
+ {
+ "type": "Identifier",
+ "start": 9022,
+ "end": 9023,
+ "name": "g"
+ }
+ ],
+ "body": {
+ "type": "BinaryExpression",
+ "start": 9028,
+ "end": 9050,
+ "left": {
+ "type": "Identifier",
+ "start": 9028,
+ "end": 9031,
+ "name": "sum"
+ },
+ "operator": "+",
+ "right": {
+ "type": "CallExpression",
+ "start": 9034,
+ "end": 9050,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 9034,
+ "end": 9048,
+ "object": {
+ "type": "Identifier",
+ "start": 9034,
+ "end": 9035,
+ "name": "g"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9036,
+ "end": 9048,
+ "name": "getLineCount"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "Literal",
+ "start": 9052,
+ "end": 9053,
+ "value": 0,
+ "raw": "0"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 9061,
+ "end": 9122,
+ "expression": {
+ "type": "CallExpression",
+ "start": 9061,
+ "end": 9121,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 9061,
+ "end": 9077,
+ "object": {
+ "type": "Identifier",
+ "start": 9061,
+ "end": 9068,
+ "name": "metrics"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9069,
+ "end": 9077,
+ "name": "endFrame"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Identifier",
+ "start": 9078,
+ "end": 9086,
+ "name": "updateMs"
+ },
+ {
+ "type": "Identifier",
+ "start": 9088,
+ "end": 9096,
+ "name": "renderMs"
+ },
+ {
+ "type": "Identifier",
+ "start": 9098,
+ "end": 9109,
+ "name": "vertexCount"
+ },
+ {
+ "type": "Identifier",
+ "start": 9111,
+ "end": 9120,
+ "name": "lineCount"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 9202,
+ "end": 9243,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 9208,
+ "end": 9242,
+ "id": {
+ "type": "Identifier",
+ "start": 9208,
+ "end": 9221,
+ "name": "currentHealth"
+ },
+ "init": {
+ "type": "MemberExpression",
+ "start": 9224,
+ "end": 9242,
+ "object": {
+ "type": "MemberExpression",
+ "start": 9224,
+ "end": 9235,
+ "object": {
+ "type": "Identifier",
+ "start": 9224,
+ "end": 9229,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9230,
+ "end": 9235,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9236,
+ "end": 9242,
+ "name": "health"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 9248,
+ "end": 9282,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 9248,
+ "end": 9281,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 9248,
+ "end": 9270,
+ "object": {
+ "type": "Identifier",
+ "start": 9248,
+ "end": 9261,
+ "name": "currentHealth"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9262,
+ "end": 9270,
+ "name": "updateMs"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Identifier",
+ "start": 9273,
+ "end": 9281,
+ "name": "updateMs"
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 9287,
+ "end": 9321,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 9287,
+ "end": 9320,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 9287,
+ "end": 9309,
+ "object": {
+ "type": "Identifier",
+ "start": 9287,
+ "end": 9300,
+ "name": "currentHealth"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9301,
+ "end": 9309,
+ "name": "renderMs"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Identifier",
+ "start": 9312,
+ "end": 9320,
+ "name": "renderMs"
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 9326,
+ "end": 9366,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 9326,
+ "end": 9365,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 9326,
+ "end": 9351,
+ "object": {
+ "type": "Identifier",
+ "start": 9326,
+ "end": 9339,
+ "name": "currentHealth"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9340,
+ "end": 9351,
+ "name": "vertexCount"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Identifier",
+ "start": 9354,
+ "end": 9365,
+ "name": "vertexCount"
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 9371,
+ "end": 9407,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 9371,
+ "end": 9406,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 9371,
+ "end": 9394,
+ "object": {
+ "type": "Identifier",
+ "start": 9371,
+ "end": 9384,
+ "name": "currentHealth"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9385,
+ "end": 9394,
+ "name": "lineCount"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Identifier",
+ "start": 9397,
+ "end": 9406,
+ "name": "lineCount"
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 9412,
+ "end": 9449,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 9412,
+ "end": 9448,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 9412,
+ "end": 9429,
+ "object": {
+ "type": "Identifier",
+ "start": 9412,
+ "end": 9425,
+ "name": "currentHealth"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9426,
+ "end": 9429,
+ "name": "fps"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "CallExpression",
+ "start": 9432,
+ "end": 9448,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 9432,
+ "end": 9446,
+ "object": {
+ "type": "Identifier",
+ "start": 9432,
+ "end": 9439,
+ "name": "metrics"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9440,
+ "end": 9446,
+ "name": "getFPS"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 9510,
+ "end": 9566,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 9516,
+ "end": 9565,
+ "id": {
+ "type": "Identifier",
+ "start": 9516,
+ "end": 9528,
+ "name": "frameCounter"
+ },
+ "init": {
+ "type": "MemberExpression",
+ "start": 9531,
+ "end": 9565,
+ "object": {
+ "type": "MemberExpression",
+ "start": 9531,
+ "end": 9552,
+ "object": {
+ "type": "MemberExpression",
+ "start": 9531,
+ "end": 9542,
+ "object": {
+ "type": "Identifier",
+ "start": 9531,
+ "end": 9536,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9537,
+ "end": 9542,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9543,
+ "end": 9552,
+ "name": "rendering"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9553,
+ "end": 9565,
+ "name": "frameCounter"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 9571,
+ "end": 9632,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 9577,
+ "end": 9631,
+ "id": {
+ "type": "Identifier",
+ "start": 9577,
+ "end": 9585,
+ "name": "interval"
+ },
+ "init": {
+ "type": "MemberExpression",
+ "start": 9588,
+ "end": 9631,
+ "object": {
+ "type": "MemberExpression",
+ "start": 9588,
+ "end": 9609,
+ "object": {
+ "type": "MemberExpression",
+ "start": 9588,
+ "end": 9599,
+ "object": {
+ "type": "Identifier",
+ "start": 9588,
+ "end": 9593,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9594,
+ "end": 9599,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9600,
+ "end": 9609,
+ "name": "userPrefs"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9610,
+ "end": 9631,
+ "name": "metricsUpdateInterval"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "IfStatement",
+ "start": 9637,
+ "end": 9748,
+ "test": {
+ "type": "LogicalExpression",
+ "start": 9641,
+ "end": 9707,
+ "left": {
+ "type": "MemberExpression",
+ "start": 9641,
+ "end": 9674,
+ "object": {
+ "type": "MemberExpression",
+ "start": 9641,
+ "end": 9662,
+ "object": {
+ "type": "MemberExpression",
+ "start": 9641,
+ "end": 9652,
+ "object": {
+ "type": "Identifier",
+ "start": 9641,
+ "end": 9646,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9647,
+ "end": 9652,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9653,
+ "end": 9662,
+ "name": "userPrefs"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9663,
+ "end": 9674,
+ "name": "showMetrics"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "operator": "&&",
+ "right": {
+ "type": "BinaryExpression",
+ "start": 9678,
+ "end": 9707,
+ "left": {
+ "type": "BinaryExpression",
+ "start": 9678,
+ "end": 9701,
+ "left": {
+ "type": "Identifier",
+ "start": 9678,
+ "end": 9690,
+ "name": "frameCounter"
+ },
+ "operator": "%",
+ "right": {
+ "type": "Identifier",
+ "start": 9693,
+ "end": 9701,
+ "name": "interval"
+ }
+ },
+ "operator": "===",
+ "right": {
+ "type": "Literal",
+ "start": 9706,
+ "end": 9707,
+ "value": 0,
+ "raw": "0"
+ }
+ }
+ },
+ "consequent": {
+ "type": "BlockStatement",
+ "start": 9709,
+ "end": 9748,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 9719,
+ "end": 9742,
+ "expression": {
+ "type": "CallExpression",
+ "start": 9719,
+ "end": 9741,
+ "callee": {
+ "type": "Identifier",
+ "start": 9719,
+ "end": 9739,
+ "name": "updateMetricsDisplay"
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ ]
+ },
+ "alternate": null
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 9937,
+ "end": 9996,
+ "id": {
+ "type": "Identifier",
+ "start": 9946,
+ "end": 9956,
+ "name": "toggleGrid"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 9959,
+ "end": 9996,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 9965,
+ "end": 9994,
+ "expression": {
+ "type": "CallExpression",
+ "start": 9965,
+ "end": 9993,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 9965,
+ "end": 9981,
+ "object": {
+ "type": "Identifier",
+ "start": 9965,
+ "end": 9970,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 9971,
+ "end": 9981,
+ "name": "togglePref"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 9982,
+ "end": 9992,
+ "value": "showGrid",
+ "raw": "'showGrid'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 9998,
+ "end": 10063,
+ "id": {
+ "type": "Identifier",
+ "start": 10007,
+ "end": 10020,
+ "name": "toggleMetrics"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 10023,
+ "end": 10063,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 10029,
+ "end": 10061,
+ "expression": {
+ "type": "CallExpression",
+ "start": 10029,
+ "end": 10060,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 10029,
+ "end": 10045,
+ "object": {
+ "type": "Identifier",
+ "start": 10029,
+ "end": 10034,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10035,
+ "end": 10045,
+ "name": "togglePref"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 10046,
+ "end": 10059,
+ "value": "showMetrics",
+ "raw": "'showMetrics'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 10065,
+ "end": 10421,
+ "id": {
+ "type": "Identifier",
+ "start": 10074,
+ "end": 10087,
+ "name": "exportMetrics"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 10090,
+ "end": 10421,
+ "body": [
+ {
+ "type": "VariableDeclaration",
+ "start": 10096,
+ "end": 10130,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 10102,
+ "end": 10129,
+ "id": {
+ "type": "Identifier",
+ "start": 10102,
+ "end": 10105,
+ "name": "csv"
+ },
+ "init": {
+ "type": "CallExpression",
+ "start": 10108,
+ "end": 10129,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 10108,
+ "end": 10127,
+ "object": {
+ "type": "Identifier",
+ "start": 10108,
+ "end": 10115,
+ "name": "metrics"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10116,
+ "end": 10127,
+ "name": "exportToCSV"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 10135,
+ "end": 10186,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 10141,
+ "end": 10185,
+ "id": {
+ "type": "Identifier",
+ "start": 10141,
+ "end": 10145,
+ "name": "blob"
+ },
+ "init": {
+ "type": "NewExpression",
+ "start": 10148,
+ "end": 10185,
+ "callee": {
+ "type": "Identifier",
+ "start": 10152,
+ "end": 10156,
+ "name": "Blob"
+ },
+ "arguments": [
+ {
+ "type": "ArrayExpression",
+ "start": 10157,
+ "end": 10162,
+ "elements": [
+ {
+ "type": "Identifier",
+ "start": 10158,
+ "end": 10161,
+ "name": "csv"
+ }
+ ]
+ },
+ {
+ "type": "ObjectExpression",
+ "start": 10164,
+ "end": 10184,
+ "properties": [
+ {
+ "type": "Property",
+ "start": 10166,
+ "end": 10182,
+ "method": false,
+ "shorthand": false,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 10166,
+ "end": 10170,
+ "name": "type"
+ },
+ "value": {
+ "type": "Literal",
+ "start": 10172,
+ "end": 10182,
+ "value": "text/csv",
+ "raw": "'text/csv'"
+ },
+ "kind": "init"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 10191,
+ "end": 10229,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 10197,
+ "end": 10228,
+ "id": {
+ "type": "Identifier",
+ "start": 10197,
+ "end": 10200,
+ "name": "url"
+ },
+ "init": {
+ "type": "CallExpression",
+ "start": 10203,
+ "end": 10228,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 10203,
+ "end": 10222,
+ "object": {
+ "type": "Identifier",
+ "start": 10203,
+ "end": 10206,
+ "name": "URL"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10207,
+ "end": 10222,
+ "name": "createObjectURL"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Identifier",
+ "start": 10223,
+ "end": 10227,
+ "name": "blob"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "VariableDeclaration",
+ "start": 10234,
+ "end": 10272,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 10240,
+ "end": 10271,
+ "id": {
+ "type": "Identifier",
+ "start": 10240,
+ "end": 10241,
+ "name": "a"
+ },
+ "init": {
+ "type": "CallExpression",
+ "start": 10244,
+ "end": 10271,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 10244,
+ "end": 10266,
+ "object": {
+ "type": "Identifier",
+ "start": 10244,
+ "end": 10252,
+ "name": "document"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10253,
+ "end": 10266,
+ "name": "createElement"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 10267,
+ "end": 10270,
+ "value": "a",
+ "raw": "'a'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 10277,
+ "end": 10290,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 10277,
+ "end": 10289,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 10277,
+ "end": 10283,
+ "object": {
+ "type": "Identifier",
+ "start": 10277,
+ "end": 10278,
+ "name": "a"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10279,
+ "end": 10283,
+ "name": "href"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Identifier",
+ "start": 10286,
+ "end": 10289,
+ "name": "url"
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 10295,
+ "end": 10345,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 10295,
+ "end": 10344,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 10295,
+ "end": 10305,
+ "object": {
+ "type": "Identifier",
+ "start": 10295,
+ "end": 10296,
+ "name": "a"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10297,
+ "end": 10305,
+ "name": "download"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "TemplateLiteral",
+ "start": 10308,
+ "end": 10344,
+ "expressions": [
+ {
+ "type": "CallExpression",
+ "start": 10328,
+ "end": 10338,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 10328,
+ "end": 10336,
+ "object": {
+ "type": "Identifier",
+ "start": 10328,
+ "end": 10332,
+ "name": "Date"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10333,
+ "end": 10336,
+ "name": "now"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 10309,
+ "end": 10326,
+ "value": {
+ "raw": "timeplot-metrics-",
+ "cooked": "timeplot-metrics-"
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 10339,
+ "end": 10343,
+ "value": {
+ "raw": ".csv",
+ "cooked": ".csv"
+ },
+ "tail": true
+ }
+ ]
+ }
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 10350,
+ "end": 10360,
+ "expression": {
+ "type": "CallExpression",
+ "start": 10350,
+ "end": 10359,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 10350,
+ "end": 10357,
+ "object": {
+ "type": "Identifier",
+ "start": 10350,
+ "end": 10351,
+ "name": "a"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10352,
+ "end": 10357,
+ "name": "click"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 10365,
+ "end": 10390,
+ "expression": {
+ "type": "CallExpression",
+ "start": 10365,
+ "end": 10389,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 10365,
+ "end": 10384,
+ "object": {
+ "type": "Identifier",
+ "start": 10365,
+ "end": 10368,
+ "name": "URL"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10369,
+ "end": 10384,
+ "name": "revokeObjectURL"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Identifier",
+ "start": 10385,
+ "end": 10388,
+ "name": "url"
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 10395,
+ "end": 10419,
+ "expression": {
+ "type": "CallExpression",
+ "start": 10395,
+ "end": 10418,
+ "callee": {
+ "type": "Identifier",
+ "start": 10395,
+ "end": 10398,
+ "name": "log"
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 10399,
+ "end": 10417,
+ "value": "Metrics exported",
+ "raw": "'Metrics exported'"
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 10423,
+ "end": 10562,
+ "id": {
+ "type": "Identifier",
+ "start": 10432,
+ "end": 10452,
+ "name": "updateMetricsDisplay"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 10455,
+ "end": 10562,
+ "body": [
+ {
+ "type": "IfStatement",
+ "start": 10461,
+ "end": 10560,
+ "test": {
+ "type": "MemberExpression",
+ "start": 10465,
+ "end": 10484,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10465,
+ "end": 10476,
+ "object": {
+ "type": "Identifier",
+ "start": 10465,
+ "end": 10468,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10469,
+ "end": 10476,
+ "name": "display"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10477,
+ "end": 10484,
+ "name": "metrics"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "consequent": {
+ "type": "BlockStatement",
+ "start": 10486,
+ "end": 10560,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 10496,
+ "end": 10554,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 10496,
+ "end": 10553,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 10496,
+ "end": 10527,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10496,
+ "end": 10515,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10496,
+ "end": 10507,
+ "object": {
+ "type": "Identifier",
+ "start": 10496,
+ "end": 10499,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10500,
+ "end": 10507,
+ "name": "display"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10508,
+ "end": 10515,
+ "name": "metrics"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10516,
+ "end": 10527,
+ "name": "textContent"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "CallExpression",
+ "start": 10530,
+ "end": 10553,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 10530,
+ "end": 10551,
+ "object": {
+ "type": "Identifier",
+ "start": 10530,
+ "end": 10537,
+ "name": "metrics"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10538,
+ "end": 10551,
+ "name": "formatSummary"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ }
+ ]
+ },
+ "alternate": null
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 10564,
+ "end": 10775,
+ "id": {
+ "type": "Identifier",
+ "start": 10573,
+ "end": 10593,
+ "name": "updateControlButtons"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 10596,
+ "end": 10775,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 10602,
+ "end": 10682,
+ "expression": {
+ "type": "CallExpression",
+ "start": 10602,
+ "end": 10681,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 10602,
+ "end": 10639,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10602,
+ "end": 10632,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10602,
+ "end": 10622,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10602,
+ "end": 10614,
+ "object": {
+ "type": "Identifier",
+ "start": 10602,
+ "end": 10605,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10606,
+ "end": 10614,
+ "name": "controls"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10615,
+ "end": 10622,
+ "name": "gridBtn"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10623,
+ "end": 10632,
+ "name": "classList"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10633,
+ "end": 10639,
+ "name": "toggle"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 10640,
+ "end": 10648,
+ "value": "active",
+ "raw": "'active'"
+ },
+ {
+ "type": "MemberExpression",
+ "start": 10650,
+ "end": 10680,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10650,
+ "end": 10671,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10650,
+ "end": 10661,
+ "object": {
+ "type": "Identifier",
+ "start": 10650,
+ "end": 10655,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10656,
+ "end": 10661,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10662,
+ "end": 10671,
+ "name": "userPrefs"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10672,
+ "end": 10680,
+ "name": "showGrid"
+ },
+ "computed": false,
+ "optional": false
+ }
+ ],
+ "optional": false
+ }
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 10687,
+ "end": 10773,
+ "expression": {
+ "type": "CallExpression",
+ "start": 10687,
+ "end": 10772,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 10687,
+ "end": 10727,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10687,
+ "end": 10720,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10687,
+ "end": 10710,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10687,
+ "end": 10699,
+ "object": {
+ "type": "Identifier",
+ "start": 10687,
+ "end": 10690,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10691,
+ "end": 10699,
+ "name": "controls"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10700,
+ "end": 10710,
+ "name": "metricsBtn"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10711,
+ "end": 10720,
+ "name": "classList"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10721,
+ "end": 10727,
+ "name": "toggle"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 10728,
+ "end": 10736,
+ "value": "active",
+ "raw": "'active'"
+ },
+ {
+ "type": "MemberExpression",
+ "start": 10738,
+ "end": 10771,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10738,
+ "end": 10759,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10738,
+ "end": 10749,
+ "object": {
+ "type": "Identifier",
+ "start": 10738,
+ "end": 10743,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10744,
+ "end": 10749,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10750,
+ "end": 10759,
+ "name": "userPrefs"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10760,
+ "end": 10771,
+ "name": "showMetrics"
+ },
+ "computed": false,
+ "optional": false
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 10777,
+ "end": 11373,
+ "id": {
+ "type": "Identifier",
+ "start": 10786,
+ "end": 10811,
+ "name": "updateVerticalZoomDisplay"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 10814,
+ "end": 11373,
+ "body": [
+ {
+ "type": "IfStatement",
+ "start": 10820,
+ "end": 11371,
+ "test": {
+ "type": "MemberExpression",
+ "start": 10824,
+ "end": 10845,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10824,
+ "end": 10835,
+ "object": {
+ "type": "Identifier",
+ "start": 10824,
+ "end": 10827,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10828,
+ "end": 10835,
+ "name": "display"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10836,
+ "end": 10845,
+ "name": "timeScale"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "consequent": {
+ "type": "BlockStatement",
+ "start": 10847,
+ "end": 11371,
+ "body": [
+ {
+ "type": "VariableDeclaration",
+ "start": 10857,
+ "end": 10901,
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 10863,
+ "end": 10900,
+ "id": {
+ "type": "Identifier",
+ "start": 10863,
+ "end": 10867,
+ "name": "zoom"
+ },
+ "init": {
+ "type": "MemberExpression",
+ "start": 10870,
+ "end": 10900,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10870,
+ "end": 10886,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10870,
+ "end": 10881,
+ "object": {
+ "type": "Identifier",
+ "start": 10870,
+ "end": 10875,
+ "name": "state"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10876,
+ "end": 10881,
+ "name": "state"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10882,
+ "end": 10886,
+ "name": "time"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10887,
+ "end": 10900,
+ "name": "verticalScale"
+ },
+ "computed": false,
+ "optional": false
+ }
+ }
+ ],
+ "kind": "const"
+ },
+ {
+ "type": "ExpressionStatement",
+ "start": 10910,
+ "end": 10968,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 10910,
+ "end": 10967,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 10910,
+ "end": 10943,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10910,
+ "end": 10931,
+ "object": {
+ "type": "MemberExpression",
+ "start": 10910,
+ "end": 10921,
+ "object": {
+ "type": "Identifier",
+ "start": 10910,
+ "end": 10913,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10914,
+ "end": 10921,
+ "name": "display"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10922,
+ "end": 10931,
+ "name": "timeScale"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10932,
+ "end": 10943,
+ "name": "textContent"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "TemplateLiteral",
+ "start": 10946,
+ "end": 10967,
+ "expressions": [
+ {
+ "type": "CallExpression",
+ "start": 10949,
+ "end": 10964,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 10949,
+ "end": 10961,
+ "object": {
+ "type": "Identifier",
+ "start": 10949,
+ "end": 10953,
+ "name": "zoom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 10954,
+ "end": 10961,
+ "name": "toFixed"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "Literal",
+ "start": 10962,
+ "end": 10963,
+ "value": 2,
+ "raw": "2"
+ }
+ ],
+ "optional": false
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 10947,
+ "end": 10947,
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 10965,
+ "end": 10966,
+ "value": {
+ "raw": "x",
+ "cooked": "x"
+ },
+ "tail": true
+ }
+ ]
+ }
+ }
+ },
+ {
+ "type": "IfStatement",
+ "start": 11055,
+ "end": 11365,
+ "test": {
+ "type": "BinaryExpression",
+ "start": 11059,
+ "end": 11069,
+ "left": {
+ "type": "Identifier",
+ "start": 11059,
+ "end": 11063,
+ "name": "zoom"
+ },
+ "operator": "<",
+ "right": {
+ "type": "Literal",
+ "start": 11066,
+ "end": 11069,
+ "value": 0.8,
+ "raw": "0.8"
+ }
+ },
+ "consequent": {
+ "type": "BlockStatement",
+ "start": 11071,
+ "end": 11171,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 11085,
+ "end": 11128,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 11085,
+ "end": 11127,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 11085,
+ "end": 11118,
+ "object": {
+ "type": "MemberExpression",
+ "start": 11085,
+ "end": 11112,
+ "object": {
+ "type": "MemberExpression",
+ "start": 11085,
+ "end": 11106,
+ "object": {
+ "type": "MemberExpression",
+ "start": 11085,
+ "end": 11096,
+ "object": {
+ "type": "Identifier",
+ "start": 11085,
+ "end": 11088,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11089,
+ "end": 11096,
+ "name": "display"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11097,
+ "end": 11106,
+ "name": "timeScale"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11107,
+ "end": 11112,
+ "name": "style"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11113,
+ "end": 11118,
+ "name": "color"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Literal",
+ "start": 11121,
+ "end": 11127,
+ "value": "#6af",
+ "raw": "'#6af'"
+ }
+ }
+ }
+ ]
+ },
+ "alternate": {
+ "type": "IfStatement",
+ "start": 11177,
+ "end": 11365,
+ "test": {
+ "type": "BinaryExpression",
+ "start": 11181,
+ "end": 11191,
+ "left": {
+ "type": "Identifier",
+ "start": 11181,
+ "end": 11185,
+ "name": "zoom"
+ },
+ "operator": ">",
+ "right": {
+ "type": "Literal",
+ "start": 11188,
+ "end": 11191,
+ "value": 1.2,
+ "raw": "1.2"
+ }
+ },
+ "consequent": {
+ "type": "BlockStatement",
+ "start": 11193,
+ "end": 11292,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 11207,
+ "end": 11250,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 11207,
+ "end": 11249,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 11207,
+ "end": 11240,
+ "object": {
+ "type": "MemberExpression",
+ "start": 11207,
+ "end": 11234,
+ "object": {
+ "type": "MemberExpression",
+ "start": 11207,
+ "end": 11228,
+ "object": {
+ "type": "MemberExpression",
+ "start": 11207,
+ "end": 11218,
+ "object": {
+ "type": "Identifier",
+ "start": 11207,
+ "end": 11210,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11211,
+ "end": 11218,
+ "name": "display"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11219,
+ "end": 11228,
+ "name": "timeScale"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11229,
+ "end": 11234,
+ "name": "style"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11235,
+ "end": 11240,
+ "name": "color"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Literal",
+ "start": 11243,
+ "end": 11249,
+ "value": "#fa6",
+ "raw": "'#fa6'"
+ }
+ }
+ }
+ ]
+ },
+ "alternate": {
+ "type": "BlockStatement",
+ "start": 11298,
+ "end": 11365,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 11312,
+ "end": 11355,
+ "expression": {
+ "type": "AssignmentExpression",
+ "start": 11312,
+ "end": 11354,
+ "operator": "=",
+ "left": {
+ "type": "MemberExpression",
+ "start": 11312,
+ "end": 11345,
+ "object": {
+ "type": "MemberExpression",
+ "start": 11312,
+ "end": 11339,
+ "object": {
+ "type": "MemberExpression",
+ "start": 11312,
+ "end": 11333,
+ "object": {
+ "type": "MemberExpression",
+ "start": 11312,
+ "end": 11323,
+ "object": {
+ "type": "Identifier",
+ "start": 11312,
+ "end": 11315,
+ "name": "dom"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11316,
+ "end": 11323,
+ "name": "display"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11324,
+ "end": 11333,
+ "name": "timeScale"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11334,
+ "end": 11339,
+ "name": "style"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11340,
+ "end": 11345,
+ "name": "color"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "right": {
+ "type": "Literal",
+ "start": 11348,
+ "end": 11354,
+ "value": "#fff",
+ "raw": "'#fff'"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ "alternate": null
+ }
+ ]
+ }
+ },
+ {
+ "type": "FunctionDeclaration",
+ "start": 11549,
+ "end": 11608,
+ "id": {
+ "type": "Identifier",
+ "start": 11558,
+ "end": 11561,
+ "name": "log"
+ },
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [
+ {
+ "type": "Identifier",
+ "start": 11562,
+ "end": 11565,
+ "name": "msg"
+ }
+ ],
+ "body": {
+ "type": "BlockStatement",
+ "start": 11567,
+ "end": 11608,
+ "body": [
+ {
+ "type": "ExpressionStatement",
+ "start": 11573,
+ "end": 11606,
+ "expression": {
+ "type": "CallExpression",
+ "start": 11573,
+ "end": 11605,
+ "callee": {
+ "type": "MemberExpression",
+ "start": 11573,
+ "end": 11584,
+ "object": {
+ "type": "Identifier",
+ "start": 11573,
+ "end": 11580,
+ "name": "console"
+ },
+ "property": {
+ "type": "Identifier",
+ "start": 11581,
+ "end": 11584,
+ "name": "log"
+ },
+ "computed": false,
+ "optional": false
+ },
+ "arguments": [
+ {
+ "type": "TemplateLiteral",
+ "start": 11585,
+ "end": 11604,
+ "expressions": [
+ {
+ "type": "Identifier",
+ "start": 11599,
+ "end": 11602,
+ "name": "msg"
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 11586,
+ "end": 11597,
+ "value": {
+ "raw": "[TimePlot] ",
+ "cooked": "[TimePlot] "
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 11603,
+ "end": 11603,
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": true
+ }
+ ]
+ }
+ ],
+ "optional": false
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "sourceType": "module"
+}
diff --git a/.old/spec.md b/.old/spec.md
new file mode 100644
index 0000000..27e713d
--- /dev/null
+++ b/.old/spec.md
@@ -0,0 +1,538 @@
+# Real-Time Waterfall Graphics with wgpu and Rust
+
+Creating efficient real-time waterfall-style data visualizations in Rust requires careful orchestration of modern wgpu architecture, performance-optimized data streaming, and specialized rendering techniques. **The key breakthrough is combining texture-based scrolling with circular buffer management to achieve high-throughput data display while maintaining 60+ FPS performance**.
+
+Current implementations demonstrate remarkable capability—rt-graph-rs achieves 30,000 points per second at 60 FPS using only 3% CPU by leveraging GPU-accelerated scrolling and incremental texture updates. This performance comes from understanding that waterfall displays require fundamentally different approaches than traditional geometric rendering.
+
+## Modern wgpu architecture and best practices
+
+The 2025 wgpu ecosystem has evolved significantly around Surface-based initialization patterns that replace deprecated SwapChain approaches. **Surface lifecycle management now uses `Surface<'static>` lifetime parameters** tied directly to window instances, requiring careful attention to resource ownership.
+
+```rust
+use wgpu::util::DeviceExt;
+use winit::window::Window;
+
+pub struct WaterfallRenderer {
+ surface: wgpu::Surface<'static>,
+ device: wgpu::Device,
+ queue: wgpu::Queue,
+ config: wgpu::SurfaceConfiguration,
+ render_pipeline: wgpu::RenderPipeline,
+ data_texture: wgpu::Texture,
+ color_lut: wgpu::Texture,
+ vertex_buffer: wgpu::Buffer,
+ uniform_buffer: wgpu::Buffer,
+}
+
+impl WaterfallRenderer {
+ pub async fn new(window: Arc<Window>) -> Self {
+ let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor {
+ backends: wgpu::Backends::PRIMARY,
+ ..Default::default()
+ });
+
+ let surface = instance.create_surface(window.clone())?;
+ let adapter = instance.request_adapter(&wgpu::RequestAdapterOptions {
+ power_preference: wgpu::PowerPreference::HighPerformance,
+ compatible_surface: Some(&surface),
+ force_fallback_adapter: false,
+ }).await?;
+
+ let (device, queue) = adapter.request_device(&wgpu::DeviceDescriptor {
+ required_features: wgpu::Features::empty(),
+ required_limits: wgpu::Limits::default(),
+ memory_hints: Default::default(),
+ ..Default::default()
+ }).await?;
+
+ // Configure surface with optimized settings
+ let surface_caps = surface.get_capabilities(&adapter);
+ let config = wgpu::SurfaceConfiguration {
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
+ format: surface_caps.formats[0],
+ width: size.width,
+ height: size.height,
+ present_mode: wgpu::PresentMode::Mailbox, // Low latency VSync
+ alpha_mode: surface_caps.alpha_modes[0],
+ desired_maximum_frame_latency: 2,
+ view_formats: vec![],
+ };
+ surface.configure(&device, &config);
+
+ Self::build_renderer(device, queue, surface, config).await
+ }
+}
+```
+
+**The render pipeline configuration for 2D waterfall displays requires specific optimizations**: alpha blending enabled, depth testing disabled, and triangle topology with counter-clockwise winding. These settings ensure proper layering and transparency handling for streaming data visualization.
+
+```rust
+let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
+ label: Some("Waterfall Render Pipeline"),
+ layout: Some(&pipeline_layout),
+ vertex: wgpu::VertexState {
+ module: &shader_module,
+ entry_point: Some("vs_main"),
+ buffers: &[WaterfallVertex::desc()],
+ compilation_options: Default::default(),
+ },
+ fragment: Some(wgpu::FragmentState {
+ module: &shader_module,
+ entry_point: Some("fs_main"),
+ targets: &[Some(wgpu::ColorTargetState {
+ format: config.format,
+ blend: Some(wgpu::BlendState::ALPHA_BLENDING),
+ write_mask: wgpu::ColorWrites::ALL,
+ })],
+ compilation_options: Default::default(),
+ }),
+ primitive: wgpu::PrimitiveState {
+ topology: wgpu::PrimitiveTopology::TriangleList,
+ cull_mode: None, // Disabled for 2D
+ front_face: wgpu::FrontFace::Ccw,
+ ..Default::default()
+ },
+ depth_stencil: None, // Not needed for 2D waterfall
+ multisample: wgpu::MultisampleState::default(),
+ multiview: None,
+ cache: None,
+});
+```
+
+## Efficient real-time data streaming and buffer management
+
+Modern wgpu buffer management centers around **`queue.write_buffer()` for most applications**, providing automatic staging buffer management and synchronization. This approach offers the optimal balance of performance and simplicity for real-time data streaming.
+
+The 2024-2025 performance landscape was transformed by wgpu's "arcanization" improvements, which moved resources behind atomic reference counted pointers. **This change reduced lock contention by 45% in multithreaded applications** and enables efficient resource sharing across data processing and rendering threads.
+
+```rust
+pub struct WaterfallDataManager {
+ data_texture: wgpu::Texture,
+ staging_buffer: wgpu::Buffer,
+ circular_buffer: CircularBuffer<f32>,
+ column_width: u32,
+ current_column: u32,
+}
+
+impl WaterfallDataManager {
+ pub fn update_data(&mut self, device: &wgpu::Device, queue: &wgpu::Queue, new_data: &[f32]) {
+ // Add data to circular buffer
+ self.circular_buffer.push_column(new_data);
+
+ // Efficient texture streaming - update single column
+ let texture_size = wgpu::Extent3d {
+ width: 1,
+ height: new_data.len() as u32,
+ depth_or_array_layers: 1,
+ };
+
+ // Write data directly to texture column
+ queue.write_texture(
+ wgpu::ImageCopyTexture {
+ texture: &self.data_texture,
+ mip_level: 0,
+ origin: wgpu::Origin3d {
+ x: self.current_column,
+ y: 0,
+ z: 0,
+ },
+ aspect: wgpu::TextureAspect::All,
+ },
+ bytemuck::cast_slice(new_data),
+ wgpu::ImageDataLayout {
+ offset: 0,
+ bytes_per_row: Some(4), // f32 = 4 bytes
+ rows_per_image: Some(new_data.len() as u32),
+ },
+ texture_size,
+ );
+
+ self.current_column = (self.current_column + 1) % self.column_width;
+ }
+}
+```
+
+For applications requiring maximum control over memory allocation, **StagingBelt provides explicit staging buffer management**:
+
+```rust
+let mut staging_belt = wgpu::util::StagingBelt::new(1024);
+
+// High-performance upload pattern
+let buffer_slice = staging_belt.write_buffer(
+ &mut encoder,
+ &target_buffer,
+ offset,
+ size,
+ &device
+);
+buffer_slice.get_mapped_range_mut().copy_from_slice(&processed_data);
+staging_belt.finish();
+queue.submit([encoder.finish()]);
+staging_belt.recall(); // Must call after GPU completion
+```
+
+**Memory management strategies differ significantly across hardware architectures**. Integrated graphics share system memory between CPU and GPU, reducing copy overhead, while discrete graphics cards require careful bandwidth management due to limited PCIe BAR access (typically 256MB). Storage buffers support up to 128 MiB compared to 64 KiB for uniform buffers, making them essential for large streaming datasets.
+
+## Waterfall visualization implementation patterns
+
+The most effective waterfall implementation combines **texture-based scrolling with circular buffer architecture**. This approach achieves O(1) data insertion while maintaining smooth GPU-accelerated animation through UV coordinate manipulation.
+
+```rust
+#[repr(C)]
+#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
+pub struct WaterfallVertex {
+ position: [f32; 2],
+ tex_coords: [f32; 2],
+}
+
+impl WaterfallVertex {
+ const ATTRIBUTES: [wgpu::VertexAttribute; 2] = [
+ wgpu::VertexAttribute {
+ offset: 0,
+ shader_location: 0,
+ format: wgpu::VertexFormat::Float32x2,
+ },
+ wgpu::VertexAttribute {
+ offset: std::mem::size_of::<[f32; 2]>() as wgpu::BufferAddress,
+ shader_location: 1,
+ format: wgpu::VertexFormat::Float32x2,
+ },
+ ];
+
+ fn desc() -> wgpu::VertexBufferLayout<'static> {
+ wgpu::VertexBufferLayout {
+ array_stride: std::mem::size_of::<WaterfallVertex>() as wgpu::BufferAddress,
+ step_mode: wgpu::VertexStepMode::Vertex,
+ attributes: &Self::ATTRIBUTES,
+ }
+ }
+}
+
+pub struct CircularBuffer<T> {
+ data: Vec<T>,
+ head: usize,
+ capacity: usize,
+}
+
+impl<T: Copy> CircularBuffer<T> {
+ pub fn new(capacity: usize) -> Self {
+ Self {
+ data: vec![T::default(); capacity],
+ head: 0,
+ capacity,
+ }
+ }
+
+ pub fn push_column(&mut self, column_data: &[T]) {
+ let start_idx = self.head * column_data.len();
+ let end_idx = start_idx + column_data.len();
+
+ if end_idx <= self.data.len() {
+ self.data[start_idx..end_idx].copy_from_slice(column_data);
+ }
+
+ self.head = (self.head + 1) % self.capacity;
+ }
+}
+```
+
+## Shader programming for waterfall displays
+
+**The vertex shader implements time-based UV scrolling** to create smooth animation independent of data update rates. This technique decouples visual scrolling from data arrival, ensuring consistent frame rates even with variable input frequencies.
+
+```wgsl
+struct Uniforms {
+ projection: mat4x4<f32>,
+ time_offset: f32,
+ scroll_speed: f32,
+ data_width: f32,
+ _padding: f32,
+}
+
+@group(0) @binding(0) var<uniform> uniforms: Uniforms;
+
+struct VertexOutput {
+ @builtin(position) clip_position: vec4<f32>,
+ @location(0) tex_coords: vec2<f32>,
+}
+
+@vertex
+fn vs_main(
+ @location(0) position: vec2<f32>,
+ @location(1) tex_coords: vec2<f32>,
+) -> VertexOutput {
+ var out: VertexOutput;
+
+ // Transform to clip space
+ out.clip_position = uniforms.projection * vec4<f32>(position, 0.0, 1.0);
+
+ // Apply time-based scrolling to texture coordinates
+ let scroll_offset = (uniforms.time_offset * uniforms.scroll_speed) % 1.0;
+ out.tex_coords = vec2<f32>(
+ fract(tex_coords.x + scroll_offset), // Horizontal scrolling with wrap
+ tex_coords.y
+ );
+
+ return out;
+}
+```
+
+**The fragment shader handles intensity-to-color mapping** using lookup textures for flexible color scheme configuration:
+
+```wgsl
+@group(0) @binding(1) var data_texture: texture_2d<f32>;
+@group(0) @binding(2) var color_lut: texture_2d<f32>;
+@group(0) @binding(3) var texture_sampler: sampler;
+
+@fragment
+fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
+ // Sample data intensity from waterfall texture
+ let intensity = textureSample(data_texture, texture_sampler, in.tex_coords).r;
+
+ // Map intensity to color using lookup table
+ let color = textureSample(color_lut, texture_sampler, vec2<f32>(intensity, 0.5));
+
+ return color;
+}
+```
+
+## Texture and buffer management strategies
+
+**Single-channel texture formats (R32F or R16F) provide optimal memory bandwidth** for data storage, with color mapping handled entirely in the fragment shader. This approach reduces memory usage while maintaining full precision for data representation.
+
+```rust
+fn create_data_texture(device: &wgpu::Device, width: u32, height: u32) -> wgpu::Texture {
+ device.create_texture(&wgpu::TextureDescriptor {
+ label: Some("Waterfall Data Texture"),
+ size: wgpu::Extent3d {
+ width,
+ height,
+ depth_or_array_layers: 1,
+ },
+ mip_level_count: 1,
+ sample_count: 1,
+ dimension: wgpu::TextureDimension::D2,
+ format: wgpu::TextureFormat::R32Float, // Single-channel for data
+ usage: wgpu::TextureUsages::TEXTURE_BINDING
+ | wgpu::TextureUsages::COPY_DST
+ | wgpu::TextureUsages::STORAGE_BINDING, // For compute shader updates
+ view_formats: &[],
+ })
+}
+
+fn create_color_lut(device: &wgpu::Device, queue: &wgpu::Queue) -> wgpu::Texture {
+ // Generate rainbow color gradient
+ let mut lut_data = vec![0u8; 1024 * 4]; // 256 colors * RGBA
+ for i in 0..256 {
+ let hue = (i as f32 / 255.0) * 360.0;
+ let (r, g, b) = hsv_to_rgb(hue, 1.0, 1.0);
+ let idx = i * 4;
+ lut_data[idx] = (r * 255.0) as u8;
+ lut_data[idx + 1] = (g * 255.0) as u8;
+ lut_data[idx + 2] = (b * 255.0) as u8;
+ lut_data[idx + 3] = 255;
+ }
+
+ let texture = device.create_texture(&wgpu::TextureDescriptor {
+ label: Some("Color LUT"),
+ size: wgpu::Extent3d { width: 256, height: 1, depth_or_array_layers: 1 },
+ format: wgpu::TextureFormat::Rgba8Unorm,
+ usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST,
+ ..Default::default()
+ });
+
+ queue.write_texture(
+ wgpu::ImageCopyTexture {
+ texture: &texture,
+ mip_level: 0,
+ origin: wgpu::Origin3d::ZERO,
+ aspect: wgpu::TextureAspect::All,
+ },
+ &lut_data,
+ wgpu::ImageDataLayout {
+ offset: 0,
+ bytes_per_row: Some(256 * 4),
+ rows_per_image: Some(1),
+ },
+ wgpu::Extent3d { width: 256, height: 1, depth_or_array_layers: 1 },
+ );
+
+ texture
+}
+```
+
+**Storage textures enable compute shaders to write directly to display textures**, eliminating CPU-GPU transfer bottlenecks for data that can be generated or processed entirely on the GPU:
+
+```wgsl
+@group(0) @binding(0) var output_texture: texture_storage_2d<r32float, write>;
+@group(0) @binding(1) var<storage, read> input_data: array<f32>;
+
+@compute @workgroup_size(64, 1, 1)
+fn process_data(@builtin(global_invocation_id) id: vec3<u32>) {
+ let column = id.x;
+ let row = id.y;
+
+ if column >= textureDimensions(output_texture).x { return; }
+
+ // Process data directly on GPU
+ let processed_value = apply_filter(input_data[row * 1024 + column]);
+ textureStore(output_texture, vec2<i32>(i32(column), i32(row)), vec4<f32>(processed_value));
+}
+```
+
+## Performance optimization techniques
+
+**Frame timing optimization requires careful present mode selection**. Mailbox mode provides the best balance of low latency and smooth presentation, while Fifo mode ensures VSync compliance at the cost of increased latency. Immediate mode offers minimal latency but risks visual tearing.
+
+Critical performance optimizations include:
+
+- **Batch texture updates**: Group multiple data columns into single texture operations
+- **Minimize state changes**: Cache pipeline and texture bindings between frames
+- **Use instanced rendering**: For repeated visual elements like grid lines or markers
+- **Implement culling**: Don't process data outside the visible range
+
+```rust
+pub struct PerformanceManager {
+ frame_times: VecDeque<f32>,
+ target_frame_time: f32,
+ adaptive_quality: bool,
+}
+
+impl PerformanceManager {
+ pub fn update(&mut self, frame_time: f32) -> QualitySettings {
+ self.frame_times.push_back(frame_time);
+ if self.frame_times.len() > 60 {
+ self.frame_times.pop_front();
+ }
+
+ let avg_frame_time: f32 = self.frame_times.iter().sum::<f32>() / self.frame_times.len() as f32;
+
+ if self.adaptive_quality && avg_frame_time > self.target_frame_time * 1.2 {
+ // Reduce quality to maintain frame rate
+ QualitySettings {
+ data_resolution: 0.5,
+ color_depth: ColorDepth::Low,
+ filtering: FilterMode::None,
+ }
+ } else {
+ QualitySettings::high()
+ }
+ }
+}
+```
+
+## Integration with data sources and threading
+
+**Effective real-time visualization requires careful threading architecture** that separates data acquisition, processing, and rendering to prevent blocking. The recommended pattern uses dedicated threads for each concern with lock-free communication channels.
+
+```rust
+use crossbeam_channel::{bounded, Receiver, Sender};
+use std::thread;
+
+pub struct DataPipeline {
+ data_sender: Sender<RawDataPacket>,
+ processed_receiver: Receiver<ProcessedData>,
+ _data_thread: thread::JoinHandle<()>,
+ _process_thread: thread::JoinHandle<()>,
+}
+
+impl DataPipeline {
+ pub fn new() -> Self {
+ let (data_tx, data_rx) = bounded(1000);
+ let (processed_tx, processed_rx) = bounded(100);
+
+ // Data acquisition thread
+ let data_thread = thread::spawn(move || {
+ let mut data_source = DataSource::connect("tcp://localhost:8080").unwrap();
+ loop {
+ match data_source.read_packet() {
+ Ok(packet) => {
+ if data_tx.send(packet).is_err() {
+ break; // Channel closed
+ }
+ }
+ Err(e) => eprintln!("Data source error: {}", e),
+ }
+ }
+ });
+
+ // Data processing thread
+ let process_thread = thread::spawn(move || {
+ let mut processor = DataProcessor::new();
+ while let Ok(raw_data) = data_rx.recv() {
+ let processed = processor.process(raw_data);
+ if processed_tx.send(processed).is_err() {
+ break; // Channel closed
+ }
+ }
+ });
+
+ Self {
+ data_sender: data_tx,
+ processed_receiver: processed_rx,
+ _data_thread: data_thread,
+ _process_thread: process_thread,
+ }
+ }
+
+ pub fn get_latest_data(&self) -> Option<ProcessedData> {
+ self.processed_receiver.try_recv().ok()
+ }
+}
+```
+
+## Complete implementation architecture
+
+The optimal project structure separates concerns while enabling efficient data flow:
+
+```
+src/
+├── renderer/ # wgpu rendering backend
+│ ├── mod.rs
+│ ├── pipeline.rs # Render pipeline management
+│ ├── resources.rs # Buffers and textures
+│ └── shaders.rs # Shader compilation
+├── data/ # Data processing and management
+│ ├── mod.rs
+│ ├── pipeline.rs # Data acquisition pipeline
+│ ├── processor.rs # Real-time data processing
+│ └── buffer.rs # Circular buffer implementation
+├── compute/ # GPU compute shader operations
+│ ├── mod.rs
+│ ├── filters.rs # Signal processing shaders
+│ └── generators.rs # Synthetic data generation
+├── visualization/ # High-level visualization logic
+│ ├── mod.rs
+│ ├── waterfall.rs # Waterfall-specific implementation
+│ └── controls.rs # User interaction handling
+├── app/ # Application framework
+│ ├── mod.rs
+│ ├── window.rs # Window and event management
+│ └── config.rs # Configuration management
+└── shaders/ # WGSL shader sources
+ ├── waterfall.wgsl # Main waterfall shaders
+ ├── compute.wgsl # Data processing shaders
+ └── common.wgsl # Shared shader utilities
+```
+
+**Essential dependencies for production applications**:
+
+```toml
+[dependencies]
+wgpu = "22.0"
+winit = "0.30"
+tokio = { version = "1.0", features = ["full"] }
+crossbeam-channel = "0.5"
+bytemuck = { version = "1.20", features = ["derive"] }
+cgmath = "0.18"
+anyhow = "1.0"
+tracing = "0.1"
+tracing-subscriber = "0.3"
+
+# For audio/sensor integration
+cpal = "0.15" # Audio input
+serialport = "4.0" # Serial device communication
+reqwest = "0.11" # Network data sources
+```
+
+The convergence of modern wgpu architecture, optimized buffer management, and specialized waterfall rendering techniques enables real-time data visualization applications that can handle thousands of data points per second while maintaining smooth 60+ FPS performance. Success depends on understanding the complete pipeline from data acquisition through GPU presentation, with careful attention to threading, memory management, and rendering optimization patterns that leverage GPU capabilities effectively. \ No newline at end of file
diff --git a/.old/src/data_sources.rs b/.old/src/data_sources.rs
new file mode 100644
index 0000000..596207d
--- /dev/null
+++ b/.old/src/data_sources.rs
@@ -0,0 +1,411 @@
+use async_trait::async_trait;
+use serde::{Deserialize, Serialize};
+use std::collections::VecDeque;
+use std::fs::File;
+use std::io::{BufRead, BufReader};
+use std::sync::{Arc, Mutex};
+use std::time::{Duration, Instant};
+use tokio::sync::mpsc;
+use tokio::time::sleep;
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct DataEvent {
+ pub timestamp: f64,
+ pub value: f64,
+ pub metadata: Option<serde_json::Value>,
+}
+
+impl DataEvent {
+ pub fn new(timestamp: f64, value: f64) -> Self {
+ Self {
+ timestamp,
+ value,
+ metadata: None,
+ }
+ }
+
+ pub fn with_metadata(timestamp: f64, value: f64, metadata: serde_json::Value) -> Self {
+ Self {
+ timestamp,
+ value,
+ metadata: Some(metadata),
+ }
+ }
+}
+
+#[derive(Debug, Clone)]
+pub enum DataSourceConfig {
+ File {
+ path: String,
+ interval_ms: u64,
+ format: FileFormat,
+ },
+ Mqtt {
+ broker_url: String,
+ topic: String,
+ format: MessageFormat,
+ },
+ WebSocket {
+ url: String,
+ format: MessageFormat,
+ },
+ HttpApi {
+ url: String,
+ interval_ms: u64,
+ format: MessageFormat,
+ },
+ Pipe {
+ path: String,
+ format: MessageFormat,
+ },
+}
+
+#[derive(Debug, Clone)]
+pub enum FileFormat {
+ Json,
+ Csv,
+ PlainText,
+ Custom(String), // regex pattern
+}
+
+#[derive(Debug, Clone)]
+pub enum MessageFormat {
+ Json,
+ PlainText,
+ Custom(String), // parser function name
+}
+
+#[async_trait]
+pub trait DataSource: Send + Sync {
+ async fn start(&mut self, sender: mpsc::Sender<DataEvent>) -> Result<(), Box<dyn std::error::Error>>;
+ async fn stop(&mut self) -> Result<(), Box<dyn std::error::Error>>;
+ fn is_running(&self) -> bool;
+ fn get_config(&self) -> &DataSourceConfig;
+}
+
+pub struct FileDataSource {
+ config: DataSourceConfig,
+ running: Arc<Mutex<bool>>,
+ task_handle: Option<tokio::task::JoinHandle<()>>,
+}
+
+impl FileDataSource {
+ pub fn new(config: DataSourceConfig) -> Self {
+ Self {
+ config,
+ running: Arc::new(Mutex::new(false)),
+ task_handle: None,
+ }
+ }
+
+ fn parse_line(&self, line: &str, format: &FileFormat) -> Option<DataEvent> {
+ match format {
+ FileFormat::Json => {
+ if let Ok(event) = serde_json::from_str::<DataEvent>(line) {
+ Some(event)
+ } else if let Ok(value) = serde_json::from_str::<serde_json::Value>(line) {
+ // Try to extract timestamp and value from JSON
+ let timestamp = value.get("timestamp")
+ .or_else(|| value.get("time"))
+ .or_else(|| value.get("t"))
+ .and_then(|v| v.as_f64())
+ .unwrap_or_else(|| std::time::SystemTime::now()
+ .duration_since(std::time::UNIX_EPOCH)
+ .unwrap().as_secs_f64());
+
+ let data_value = value.get("value")
+ .or_else(|| value.get("data"))
+ .or_else(|| value.get("y"))
+ .and_then(|v| v.as_f64())
+ .unwrap_or(0.0);
+
+ Some(DataEvent::with_metadata(timestamp, data_value, value))
+ } else {
+ None
+ }
+ },
+ FileFormat::Csv => {
+ let parts: Vec<&str> = line.split(',').collect();
+ if parts.len() >= 2 {
+ let timestamp = parts[0].parse::<f64>().unwrap_or_else(|_| {
+ std::time::SystemTime::now()
+ .duration_since(std::time::UNIX_EPOCH)
+ .unwrap().as_secs_f64()
+ });
+ let value = parts[1].parse::<f64>().unwrap_or(0.0);
+ Some(DataEvent::new(timestamp, value))
+ } else {
+ None
+ }
+ },
+ FileFormat::PlainText => {
+ if let Ok(value) = line.trim().parse::<f64>() {
+ let timestamp = std::time::SystemTime::now()
+ .duration_since(std::time::UNIX_EPOCH)
+ .unwrap().as_secs_f64();
+ Some(DataEvent::new(timestamp, value))
+ } else {
+ None
+ }
+ },
+ FileFormat::Custom(_pattern) => {
+ // TODO: Implement regex parsing
+ if let Ok(value) = line.trim().parse::<f64>() {
+ let timestamp = std::time::SystemTime::now()
+ .duration_since(std::time::UNIX_EPOCH)
+ .unwrap().as_secs_f64();
+ Some(DataEvent::new(timestamp, value))
+ } else {
+ None
+ }
+ }
+ }
+ }
+}
+
+#[async_trait]
+impl DataSource for FileDataSource {
+ async fn start(&mut self, sender: mpsc::Sender<DataEvent>) -> Result<(), Box<dyn std::error::Error>> {
+ if let DataSourceConfig::File { path, interval_ms, format } = &self.config {
+ let file = File::open(path)?;
+ let reader = BufReader::new(file);
+ let lines: Vec<String> = reader.lines().collect::<Result<Vec<_>, _>>()?;
+
+ *self.running.lock().unwrap() = true;
+ let running = self.running.clone();
+ let format = format.clone();
+ let interval = Duration::from_millis(*interval_ms);
+
+ let handle = tokio::spawn(async move {
+ let mut line_index = 0;
+ while *running.lock().unwrap() {
+ if line_index < lines.len() {
+ let line = &lines[line_index];
+ if let Some(event) = Self::parse_line_static(line, &format) {
+ if sender.send(event).await.is_err() {
+ break; // Receiver dropped
+ }
+ }
+ line_index += 1;
+ } else {
+ // Restart from beginning (loop the file)
+ line_index = 0;
+ }
+
+ sleep(interval).await;
+ }
+ });
+
+ self.task_handle = Some(handle);
+ }
+ Ok(())
+ }
+
+ async fn stop(&mut self) -> Result<(), Box<dyn std::error::Error>> {
+ *self.running.lock().unwrap() = false;
+ if let Some(handle) = self.task_handle.take() {
+ handle.abort();
+ }
+ Ok(())
+ }
+
+ fn is_running(&self) -> bool {
+ *self.running.lock().unwrap()
+ }
+
+ fn get_config(&self) -> &DataSourceConfig {
+ &self.config
+ }
+}
+
+impl FileDataSource {
+ fn parse_line_static(line: &str, format: &FileFormat) -> Option<DataEvent> {
+ match format {
+ FileFormat::Json => {
+ if let Ok(event) = serde_json::from_str::<DataEvent>(line) {
+ Some(event)
+ } else if let Ok(value) = serde_json::from_str::<serde_json::Value>(line) {
+ let timestamp = value.get("timestamp")
+ .or_else(|| value.get("time"))
+ .or_else(|| value.get("t"))
+ .and_then(|v| v.as_f64())
+ .unwrap_or_else(|| std::time::SystemTime::now()
+ .duration_since(std::time::UNIX_EPOCH)
+ .unwrap().as_secs_f64());
+
+ let data_value = value.get("value")
+ .or_else(|| value.get("data"))
+ .or_else(|| value.get("y"))
+ .and_then(|v| v.as_f64())
+ .unwrap_or(0.0);
+
+ Some(DataEvent::with_metadata(timestamp, data_value, value))
+ } else {
+ None
+ }
+ },
+ FileFormat::Csv => {
+ let parts: Vec<&str> = line.split(',').collect();
+ if parts.len() >= 2 {
+ let timestamp = parts[0].parse::<f64>().unwrap_or_else(|_| {
+ std::time::SystemTime::now()
+ .duration_since(std::time::UNIX_EPOCH)
+ .unwrap().as_secs_f64()
+ });
+ let value = parts[1].parse::<f64>().unwrap_or(0.0);
+ Some(DataEvent::new(timestamp, value))
+ } else {
+ None
+ }
+ },
+ FileFormat::PlainText => {
+ if let Ok(value) = line.trim().parse::<f64>() {
+ let timestamp = std::time::SystemTime::now()
+ .duration_since(std::time::UNIX_EPOCH)
+ .unwrap().as_secs_f64();
+ Some(DataEvent::new(timestamp, value))
+ } else {
+ None
+ }
+ },
+ FileFormat::Custom(_pattern) => {
+ if let Ok(value) = line.trim().parse::<f64>() {
+ let timestamp = std::time::SystemTime::now()
+ .duration_since(std::time::UNIX_EPOCH)
+ .unwrap().as_secs_f64();
+ Some(DataEvent::new(timestamp, value))
+ } else {
+ None
+ }
+ }
+ }
+ }
+}
+
+// Placeholder implementations for future data sources
+
+pub struct MqttDataSource {
+ config: DataSourceConfig,
+ running: Arc<Mutex<bool>>,
+}
+
+impl MqttDataSource {
+ pub fn new(config: DataSourceConfig) -> Self {
+ Self {
+ config,
+ running: Arc::new(Mutex::new(false)),
+ }
+ }
+}
+
+#[async_trait]
+impl DataSource for MqttDataSource {
+ async fn start(&mut self, _sender: mpsc::Sender<DataEvent>) -> Result<(), Box<dyn std::error::Error>> {
+ // TODO: Implement MQTT connection
+ Err("MQTT not implemented yet".into())
+ }
+
+ async fn stop(&mut self) -> Result<(), Box<dyn std::error::Error>> {
+ *self.running.lock().unwrap() = false;
+ Ok(())
+ }
+
+ fn is_running(&self) -> bool {
+ *self.running.lock().unwrap()
+ }
+
+ fn get_config(&self) -> &DataSourceConfig {
+ &self.config
+ }
+}
+
+pub struct DataSourceManager {
+ sources: Vec<Box<dyn DataSource>>,
+ event_buffer: Arc<Mutex<VecDeque<DataEvent>>>,
+ max_buffer_size: usize,
+ sender: mpsc::Sender<DataEvent>,
+ receiver: Option<mpsc::Receiver<DataEvent>>,
+ buffer_task: Option<tokio::task::JoinHandle<()>>,
+}
+
+impl DataSourceManager {
+ pub fn new(max_buffer_size: usize) -> Self {
+ let (sender, receiver) = mpsc::channel(1000);
+ Self {
+ sources: Vec::new(),
+ event_buffer: Arc::new(Mutex::new(VecDeque::new())),
+ max_buffer_size,
+ sender,
+ receiver: Some(receiver),
+ buffer_task: None,
+ }
+ }
+
+ pub fn add_source(&mut self, source: Box<dyn DataSource>) -> Result<(), Box<dyn std::error::Error>> {
+ self.sources.push(source);
+ Ok(())
+ }
+
+ pub async fn start_all(&mut self) -> Result<(), Box<dyn std::error::Error>> {
+ // Start buffer management task
+ let receiver = self.receiver.take().unwrap();
+ let buffer = self.event_buffer.clone();
+ let max_size = self.max_buffer_size;
+
+ let buffer_handle = tokio::spawn(async move {
+ let mut receiver = receiver;
+ while let Some(event) = receiver.recv().await {
+ let mut buffer = buffer.lock().unwrap();
+ buffer.push_back(event);
+
+ // Keep buffer size under limit
+ while buffer.len() > max_size {
+ buffer.pop_front();
+ }
+ }
+ });
+
+ self.buffer_task = Some(buffer_handle);
+
+ // Start all sources
+ for source in &mut self.sources {
+ source.start(self.sender.clone()).await?;
+ }
+ Ok(())
+ }
+
+ pub async fn stop_all(&mut self) -> Result<(), Box<dyn std::error::Error>> {
+ for source in &mut self.sources {
+ source.stop().await?;
+ }
+
+ if let Some(handle) = self.buffer_task.take() {
+ handle.abort();
+ }
+
+ Ok(())
+ }
+
+ pub fn get_events(&self, max_count: usize) -> Vec<DataEvent> {
+ let mut buffer = self.event_buffer.lock().unwrap();
+ let mut events = Vec::new();
+
+ for _ in 0..max_count {
+ if let Some(event) = buffer.pop_front() {
+ events.push(event);
+ } else {
+ break;
+ }
+ }
+
+ events
+ }
+
+ pub fn has_events(&self) -> bool {
+ !self.event_buffer.lock().unwrap().is_empty()
+ }
+
+ pub fn get_buffer_size(&self) -> usize {
+ self.event_buffer.lock().unwrap().len()
+ }
+} \ No newline at end of file
diff --git a/.old/src/main.rs b/.old/src/main.rs
new file mode 100644
index 0000000..431e59f
--- /dev/null
+++ b/.old/src/main.rs
@@ -0,0 +1,820 @@
+use std::sync::Arc;
+use wgpu::util::DeviceExt;
+use winit::{
+ event::{Event, WindowEvent},
+ event_loop::EventLoop,
+ window::Window,
+};
+use std::sync::mpsc;
+use std::time::{Duration, Instant};
+use serde::{Deserialize, Serialize};
+use std::any::Any;
+
+mod data_sources;
+use data_sources::{DataEvent, DataSourceManager};
+
+#[repr(C)]
+#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
+struct Vertex {
+ position: [f32; 2],
+ tex_coords: [f32; 2],
+}
+
+#[derive(Clone, Copy)]
+pub struct Rect {
+ pub x: f32,
+ pub y: f32,
+ pub width: f32,
+ pub height: f32,
+}
+
+impl Rect {
+ pub fn new(x: f32, y: f32, width: f32, height: f32) -> Self {
+ Self { x, y, width, height }
+ }
+
+ pub fn contains(&self, px: f32, py: f32) -> bool {
+ px >= self.x && px <= self.x + self.width &&
+ py >= self.y && py <= self.y + self.height
+ }
+}
+
+pub trait Component {
+ fn render(&mut self, encoder: &mut wgpu::CommandEncoder, view: &wgpu::TextureView, bounds: &Rect);
+ fn update(&mut self, dt: f32);
+ fn get_bounds(&self) -> &Rect;
+ fn set_bounds(&mut self, bounds: Rect);
+ fn set_window_size(&mut self, window_size: (u32, u32));
+ fn consume_data_events(&mut self, events: Vec<DataEvent>);
+ fn as_any_mut(&mut self) -> &mut dyn std::any::Any;
+}
+
+pub struct PlotComponent {
+ bounds: Rect,
+ data_texture: wgpu::Texture,
+ bind_group: wgpu::BindGroup,
+ render_pipeline: wgpu::RenderPipeline,
+ vertex_buffer: wgpu::Buffer,
+ gridlines_pipeline: wgpu::RenderPipeline,
+ gridlines_vertex_buffer: wgpu::Buffer,
+ time: f32,
+ device: Arc<wgpu::Device>,
+ queue: Arc<wgpu::Queue>,
+ window_size: (u32, u32),
+ data_buffer: Vec<Vec<f64>>, // 2D buffer for waterfall data
+ buffer_width: usize,
+ buffer_height: usize,
+ data_range: (f64, f64), // min, max values for normalization
+ data_manager: DataSourceManager,
+}
+
+impl PlotComponent {
+ pub fn new(
+ device: Arc<wgpu::Device>,
+ queue: Arc<wgpu::Queue>,
+ bounds: Rect,
+ window_size: (u32, u32),
+ surface_format: wgpu::TextureFormat,
+ data_source_config: Option<data_sources::DataSourceConfig>,
+ ) -> Self {
+ let data_texture = device.create_texture(&wgpu::TextureDescriptor {
+ label: Some("Plot Data Texture"),
+ size: wgpu::Extent3d {
+ width: 256,
+ height: 256,
+ depth_or_array_layers: 1,
+ },
+ mip_level_count: 1,
+ sample_count: 1,
+ dimension: wgpu::TextureDimension::D2,
+ format: wgpu::TextureFormat::Rgba8Unorm,
+ usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST,
+ view_formats: &[],
+ });
+
+ let sampler = device.create_sampler(&wgpu::SamplerDescriptor {
+ address_mode_u: wgpu::AddressMode::Repeat,
+ address_mode_v: wgpu::AddressMode::Repeat,
+ mag_filter: wgpu::FilterMode::Linear,
+ min_filter: wgpu::FilterMode::Linear,
+ mipmap_filter: wgpu::FilterMode::Nearest,
+ ..Default::default()
+ });
+
+ let texture_bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
+ entries: &[
+ wgpu::BindGroupLayoutEntry {
+ binding: 0,
+ visibility: wgpu::ShaderStages::FRAGMENT,
+ ty: wgpu::BindingType::Texture {
+ multisampled: false,
+ view_dimension: wgpu::TextureViewDimension::D2,
+ sample_type: wgpu::TextureSampleType::Float { filterable: true },
+ },
+ count: None,
+ },
+ wgpu::BindGroupLayoutEntry {
+ binding: 1,
+ visibility: wgpu::ShaderStages::FRAGMENT,
+ ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering),
+ count: None,
+ },
+ ],
+ label: Some("texture_bind_group_layout"),
+ });
+
+ let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
+ layout: &texture_bind_group_layout,
+ entries: &[
+ wgpu::BindGroupEntry {
+ binding: 0,
+ resource: wgpu::BindingResource::TextureView(
+ &data_texture.create_view(&wgpu::TextureViewDescriptor::default())
+ ),
+ },
+ wgpu::BindGroupEntry {
+ binding: 1,
+ resource: wgpu::BindingResource::Sampler(&sampler),
+ },
+ ],
+ label: Some("plot_bind_group"),
+ });
+
+ let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor {
+ label: Some("Plot Shader"),
+ source: wgpu::ShaderSource::Wgsl(include_str!("shader.wgsl").into()),
+ });
+
+ let render_pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
+ label: Some("Plot Render Pipeline Layout"),
+ bind_group_layouts: &[&texture_bind_group_layout],
+ push_constant_ranges: &[],
+ });
+
+ let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
+ label: Some("Plot Render Pipeline"),
+ layout: Some(&render_pipeline_layout),
+ vertex: wgpu::VertexState {
+ module: &shader,
+ entry_point: "vs_main",
+ buffers: &[Vertex::desc()],
+ compilation_options: wgpu::PipelineCompilationOptions::default(),
+ },
+ fragment: Some(wgpu::FragmentState {
+ module: &shader,
+ entry_point: "fs_main",
+ targets: &[Some(wgpu::ColorTargetState {
+ format: surface_format,
+ blend: Some(wgpu::BlendState::REPLACE),
+ write_mask: wgpu::ColorWrites::ALL,
+ })],
+ compilation_options: wgpu::PipelineCompilationOptions::default(),
+ }),
+ primitive: wgpu::PrimitiveState {
+ topology: wgpu::PrimitiveTopology::TriangleStrip,
+ strip_index_format: None,
+ front_face: wgpu::FrontFace::Ccw,
+ cull_mode: None,
+ polygon_mode: wgpu::PolygonMode::Fill,
+ unclipped_depth: false,
+ conservative: false,
+ },
+ depth_stencil: None,
+ multisample: wgpu::MultisampleState {
+ count: 1,
+ mask: !0,
+ alpha_to_coverage_enabled: false,
+ },
+ multiview: None,
+ cache: None,
+ });
+
+ let gridlines_pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
+ label: Some("Gridlines Pipeline Layout"),
+ bind_group_layouts: &[],
+ push_constant_ranges: &[],
+ });
+
+ let gridlines_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
+ label: Some("Gridlines Pipeline"),
+ layout: Some(&gridlines_pipeline_layout),
+ vertex: wgpu::VertexState {
+ module: &shader,
+ entry_point: "vs_main",
+ buffers: &[Vertex::desc()],
+ compilation_options: wgpu::PipelineCompilationOptions::default(),
+ },
+ fragment: Some(wgpu::FragmentState {
+ module: &shader,
+ entry_point: "fs_gridlines",
+ targets: &[Some(wgpu::ColorTargetState {
+ format: surface_format,
+ blend: Some(wgpu::BlendState::ALPHA_BLENDING),
+ write_mask: wgpu::ColorWrites::ALL,
+ })],
+ compilation_options: wgpu::PipelineCompilationOptions::default(),
+ }),
+ primitive: wgpu::PrimitiveState {
+ topology: wgpu::PrimitiveTopology::LineList,
+ strip_index_format: None,
+ front_face: wgpu::FrontFace::Ccw,
+ cull_mode: None,
+ polygon_mode: wgpu::PolygonMode::Fill,
+ unclipped_depth: false,
+ conservative: false,
+ },
+ depth_stencil: None,
+ multisample: wgpu::MultisampleState {
+ count: 1,
+ mask: !0,
+ alpha_to_coverage_enabled: false,
+ },
+ multiview: None,
+ cache: None,
+ });
+
+ let vertices = Self::create_quad_vertices(&bounds, window_size);
+ let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
+ label: Some("Plot Vertex Buffer"),
+ contents: bytemuck::cast_slice(&vertices),
+ usage: wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST,
+ });
+
+ let gridlines_vertices = Self::create_gridlines(&bounds, window_size);
+ let gridlines_vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
+ label: Some("Gridlines Vertex Buffer"),
+ contents: bytemuck::cast_slice(&gridlines_vertices),
+ usage: wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST,
+ });
+
+ let buffer_width = 256;
+ let buffer_height = 256;
+ let data_buffer = vec![vec![0.0; buffer_width]; buffer_height];
+
+ let mut data_manager = DataSourceManager::new(1000);
+
+ // Add data source if provided
+ if let Some(config) = data_source_config {
+ use data_sources::{FileDataSource};
+ let source = Box::new(FileDataSource::new(config));
+ if data_manager.add_source(source).is_err() {
+ eprintln!("Failed to add data source to plot component");
+ }
+ }
+
+ Self {
+ bounds,
+ data_texture,
+ bind_group,
+ render_pipeline,
+ vertex_buffer,
+ gridlines_pipeline,
+ gridlines_vertex_buffer,
+ time: 0.0,
+ device,
+ queue,
+ window_size,
+ data_buffer,
+ buffer_width,
+ buffer_height,
+ data_range: (0.0, 1.0),
+ data_manager,
+ }
+ }
+
+ fn create_quad_vertices(bounds: &Rect, window_size: (u32, u32)) -> [Vertex; 4] {
+ let left = (bounds.x / window_size.0 as f32) * 2.0 - 1.0;
+ let right = ((bounds.x + bounds.width) / window_size.0 as f32) * 2.0 - 1.0;
+ let top = 1.0 - (bounds.y / window_size.1 as f32) * 2.0;
+ let bottom = 1.0 - ((bounds.y + bounds.height) / window_size.1 as f32) * 2.0;
+
+ [
+ Vertex { position: [left, bottom], tex_coords: [0.0, 1.0] },
+ Vertex { position: [right, bottom], tex_coords: [1.0, 1.0] },
+ Vertex { position: [left, top], tex_coords: [0.0, 0.0] },
+ Vertex { position: [right, top], tex_coords: [1.0, 0.0] },
+ ]
+ }
+
+ fn create_gridlines(bounds: &Rect, window_size: (u32, u32)) -> Vec<Vertex> {
+ let mut vertices = Vec::new();
+
+ let left = (bounds.x / window_size.0 as f32) * 2.0 - 1.0;
+ let right = ((bounds.x + bounds.width) / window_size.0 as f32) * 2.0 - 1.0;
+ let top = 1.0 - (bounds.y / window_size.1 as f32) * 2.0;
+ let bottom = 1.0 - ((bounds.y + bounds.height) / window_size.1 as f32) * 2.0;
+
+ let grid_lines = 10;
+
+ for i in 0..=grid_lines {
+ let t = i as f32 / grid_lines as f32;
+
+ let x = left + (right - left) * t;
+ vertices.push(Vertex { position: [x, top], tex_coords: [0.0, 0.0] });
+ vertices.push(Vertex { position: [x, bottom], tex_coords: [0.0, 0.0] });
+
+ let y = top + (bottom - top) * t;
+ vertices.push(Vertex { position: [left, y], tex_coords: [0.0, 0.0] });
+ vertices.push(Vertex { position: [right, y], tex_coords: [0.0, 0.0] });
+ }
+
+ vertices
+ }
+
+ fn update_vertices(&self) {
+ let vertices = Self::create_quad_vertices(&self.bounds, self.window_size);
+ self.queue.write_buffer(&self.vertex_buffer, 0, bytemuck::cast_slice(&vertices));
+
+ let gridlines_vertices = Self::create_gridlines(&self.bounds, self.window_size);
+ self.queue.write_buffer(&self.gridlines_vertex_buffer, 0, bytemuck::cast_slice(&gridlines_vertices));
+ }
+
+ pub fn add_data_events(&mut self, events: Vec<DataEvent>) {
+ if events.is_empty() {
+ return;
+ }
+
+ // Update data range based on new events
+ for event in &events {
+ if event.value < self.data_range.0 {
+ self.data_range.0 = event.value;
+ }
+ if event.value > self.data_range.1 {
+ self.data_range.1 = event.value;
+ }
+ }
+
+ // Shift existing data down (waterfall effect)
+ for _ in 0..events.len() {
+ if self.data_buffer.len() >= self.buffer_height {
+ self.data_buffer.remove(0);
+ }
+ }
+
+ // Add new data rows
+ for event in events {
+ let mut row = vec![0.0; self.buffer_width];
+ // For now, just fill the entire row with the event value
+ // Later we can implement frequency domain or other representations
+ for i in 0..self.buffer_width {
+ row[i] = event.value;
+ }
+ self.data_buffer.push(row);
+ }
+
+ // Ensure we don't exceed buffer height
+ while self.data_buffer.len() > self.buffer_height {
+ self.data_buffer.remove(0);
+ }
+
+ self.update_texture();
+ }
+
+ fn update_texture(&self) {
+ let mut texture_data = vec![0u8; self.buffer_width * self.buffer_height * 4];
+
+ let range = self.data_range.1 - self.data_range.0;
+ let range = if range == 0.0 { 1.0 } else { range };
+
+ for y in 0..self.buffer_height {
+ for x in 0..self.buffer_width {
+ let idx = (y * self.buffer_width + x) * 4;
+
+ let value = if y < self.data_buffer.len() && x < self.data_buffer[y].len() {
+ self.data_buffer[y][x]
+ } else {
+ 0.0
+ };
+
+ // Normalize value to 0-1 range
+ let normalized = ((value - self.data_range.0) / range).clamp(0.0, 1.0);
+
+ // Create a color gradient (blue to red)
+ let intensity = (normalized * 255.0) as u8;
+ texture_data[idx] = if normalized > 0.5 {
+ ((normalized - 0.5) * 2.0 * 255.0) as u8
+ } else {
+ 0
+ }; // Red
+ texture_data[idx + 1] = if normalized > 0.3 && normalized < 0.7 {
+ (((0.7 - (normalized - 0.3).abs()) / 0.4) * 255.0) as u8
+ } else {
+ 0
+ }; // Green
+ texture_data[idx + 2] = if normalized < 0.5 {
+ ((0.5 - normalized) * 2.0 * 255.0) as u8
+ } else {
+ intensity / 4
+ }; // Blue
+ texture_data[idx + 3] = 255; // Alpha
+ }
+ }
+
+ self.queue.write_texture(
+ wgpu::ImageCopyTexture {
+ texture: &self.data_texture,
+ mip_level: 0,
+ origin: wgpu::Origin3d::ZERO,
+ aspect: wgpu::TextureAspect::All,
+ },
+ &texture_data,
+ wgpu::ImageDataLayout {
+ offset: 0,
+ bytes_per_row: Some(self.buffer_width as u32 * 4),
+ rows_per_image: Some(self.buffer_height as u32),
+ },
+ wgpu::Extent3d {
+ width: self.buffer_width as u32,
+ height: self.buffer_height as u32,
+ depth_or_array_layers: 1,
+ },
+ );
+ }
+}
+
+impl Component for PlotComponent {
+ fn render(&mut self, encoder: &mut wgpu::CommandEncoder, view: &wgpu::TextureView, _bounds: &Rect) {
+ let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
+ label: Some("Plot Render Pass"),
+ color_attachments: &[Some(wgpu::RenderPassColorAttachment {
+ view,
+ resolve_target: None,
+ ops: wgpu::Operations {
+ load: wgpu::LoadOp::Load,
+ store: wgpu::StoreOp::Store,
+ },
+ })],
+ depth_stencil_attachment: None,
+ occlusion_query_set: None,
+ timestamp_writes: None,
+ });
+
+ render_pass.set_pipeline(&self.render_pipeline);
+ render_pass.set_bind_group(0, &self.bind_group, &[]);
+ render_pass.set_vertex_buffer(0, self.vertex_buffer.slice(..));
+ render_pass.draw(0..4, 0..1);
+
+ render_pass.set_pipeline(&self.gridlines_pipeline);
+ render_pass.set_vertex_buffer(0, self.gridlines_vertex_buffer.slice(..));
+ let gridlines_count = (11 * 4) as u32;
+ render_pass.draw(0..gridlines_count, 0..1);
+ }
+
+ fn update(&mut self, dt: f32) {
+ self.time += dt;
+
+ // Pull data from this component's own data manager
+ let events = self.data_manager.get_events(10);
+ if !events.is_empty() {
+ self.add_data_events(events);
+ }
+ }
+
+ fn get_bounds(&self) -> &Rect {
+ &self.bounds
+ }
+
+ fn set_bounds(&mut self, bounds: Rect) {
+ self.bounds = bounds;
+ self.update_vertices();
+ }
+
+ fn set_window_size(&mut self, window_size: (u32, u32)) {
+ self.window_size = window_size;
+ self.update_vertices();
+ }
+
+ fn consume_data_events(&mut self, events: Vec<DataEvent>) {
+ self.add_data_events(events);
+ }
+
+ fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
+ self
+ }
+}
+
+impl PlotComponent {
+ pub async fn start_data_sources(&mut self) -> Result<(), Box<dyn std::error::Error>> {
+ self.data_manager.start_all().await
+ }
+
+ pub async fn stop_data_sources(&mut self) -> Result<(), Box<dyn std::error::Error>> {
+ self.data_manager.stop_all().await
+ }
+}
+
+pub struct TileManager {
+ pub components: Vec<Box<dyn Component>>,
+ window_size: (u32, u32),
+}
+
+impl TileManager {
+ pub fn new(window_size: (u32, u32)) -> Self {
+ Self {
+ components: Vec::new(),
+ window_size,
+ }
+ }
+
+ pub fn add_component(&mut self, component: Box<dyn Component>) {
+ self.components.push(component);
+ }
+
+ pub fn arrange_tiles(&mut self) {
+ let count = self.components.len();
+ if count == 0 { return; }
+
+ let cols = (count as f32).sqrt().ceil() as usize;
+ let rows = (count + cols - 1) / cols;
+
+ let tile_width = self.window_size.0 as f32 / cols as f32;
+ let tile_height = self.window_size.1 as f32 / rows as f32;
+
+ for (i, component) in self.components.iter_mut().enumerate() {
+ let col = i % cols;
+ let row = i / cols;
+
+ let bounds = Rect::new(
+ col as f32 * tile_width,
+ row as f32 * tile_height,
+ tile_width,
+ tile_height,
+ );
+
+ component.set_bounds(bounds);
+ }
+ }
+
+ pub fn resize(&mut self, new_size: (u32, u32)) {
+ self.window_size = new_size;
+ for component in &mut self.components {
+ component.set_window_size(new_size);
+ }
+ self.arrange_tiles();
+ }
+
+ pub fn render(&mut self, encoder: &mut wgpu::CommandEncoder, view: &wgpu::TextureView) {
+ for component in &mut self.components {
+ let bounds = *component.get_bounds();
+ component.render(encoder, view, &bounds);
+ }
+ }
+
+ pub fn update(&mut self, dt: f32) {
+ for component in &mut self.components {
+ component.update(dt);
+ }
+ }
+}
+
+impl Vertex {
+ const ATTRIBUTES: [wgpu::VertexAttribute; 2] = [
+ wgpu::VertexAttribute {
+ offset: 0,
+ shader_location: 0,
+ format: wgpu::VertexFormat::Float32x2,
+ },
+ wgpu::VertexAttribute {
+ offset: std::mem::size_of::<[f32; 2]>() as wgpu::BufferAddress,
+ shader_location: 1,
+ format: wgpu::VertexFormat::Float32x2,
+ },
+ ];
+
+ fn desc() -> wgpu::VertexBufferLayout<'static> {
+ wgpu::VertexBufferLayout {
+ array_stride: std::mem::size_of::<Vertex>() as wgpu::BufferAddress,
+ step_mode: wgpu::VertexStepMode::Vertex,
+ attributes: &Self::ATTRIBUTES,
+ }
+ }
+}
+
+struct State {
+ surface: wgpu::Surface<'static>,
+ device: Arc<wgpu::Device>,
+ queue: Arc<wgpu::Queue>,
+ config: wgpu::SurfaceConfiguration,
+ size: winit::dpi::PhysicalSize<u32>,
+ tile_manager: TileManager,
+}
+
+impl State {
+ async fn new(window: Arc<Window>) -> Self {
+ let size = window.inner_size();
+
+ let instance = wgpu::Instance::new(wgpu::InstanceDescriptor {
+ backends: wgpu::Backends::all(),
+ ..Default::default()
+ });
+
+ let surface = instance.create_surface(window.clone()).unwrap();
+
+ let adapter = instance
+ .request_adapter(&wgpu::RequestAdapterOptions {
+ power_preference: wgpu::PowerPreference::default(),
+ compatible_surface: Some(&surface),
+ force_fallback_adapter: false,
+ })
+ .await
+ .unwrap();
+
+ let (device, queue) = adapter
+ .request_device(
+ &wgpu::DeviceDescriptor {
+ required_features: wgpu::Features::empty(),
+ required_limits: wgpu::Limits::default(),
+ memory_hints: Default::default(),
+ label: None,
+ },
+ None,
+ )
+ .await
+ .unwrap();
+
+ let surface_caps = surface.get_capabilities(&adapter);
+ let surface_format = surface_caps
+ .formats
+ .iter()
+ .find(|f| f.is_srgb())
+ .copied()
+ .unwrap_or(surface_caps.formats[0]);
+
+ let config = wgpu::SurfaceConfiguration {
+ usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
+ format: surface_format,
+ width: size.width,
+ height: size.height,
+ present_mode: surface_caps.present_modes[0],
+ alpha_mode: surface_caps.alpha_modes[0],
+ view_formats: vec![],
+ desired_maximum_frame_latency: 2,
+ };
+
+ surface.configure(&device, &config);
+
+ let device = Arc::new(device);
+ let queue = Arc::new(queue);
+
+ let mut tile_manager = TileManager::new((size.width, size.height));
+
+ // Create data source configurations for each plot
+ use data_sources::{DataSourceConfig, FileFormat};
+ let data_configs = vec![
+ Some(DataSourceConfig::File {
+ path: "data1.txt".to_string(),
+ interval_ms: 300,
+ format: FileFormat::PlainText,
+ }),
+ Some(DataSourceConfig::File {
+ path: "data2.txt".to_string(),
+ interval_ms: 400,
+ format: FileFormat::PlainText,
+ }),
+ Some(DataSourceConfig::File {
+ path: "data3.txt".to_string(),
+ interval_ms: 200,
+ format: FileFormat::PlainText,
+ }),
+ Some(DataSourceConfig::File {
+ path: "data4.txt".to_string(),
+ interval_ms: 600,
+ format: FileFormat::Json,
+ }),
+ ];
+
+ for data_config in data_configs.into_iter() {
+ let plot = PlotComponent::new(
+ device.clone(),
+ queue.clone(),
+ Rect::new(0.0, 0.0, size.width as f32, size.height as f32),
+ (size.width, size.height),
+ config.format,
+ data_config,
+ );
+ tile_manager.add_component(Box::new(plot));
+ }
+
+ tile_manager.arrange_tiles();
+
+ Self {
+ surface,
+ device,
+ queue,
+ config,
+ size,
+ tile_manager,
+ }
+ }
+
+ pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize<u32>) {
+ if new_size.width > 0 && new_size.height > 0 {
+ self.size = new_size;
+ self.config.width = new_size.width;
+ self.config.height = new_size.height;
+ self.surface.configure(&self.device, &self.config);
+ self.tile_manager.resize((new_size.width, new_size.height));
+ }
+ }
+
+ fn update(&mut self) {
+ self.tile_manager.update(0.016);
+ }
+
+ fn render(&mut self) -> Result<(), wgpu::SurfaceError> {
+ let output = self.surface.get_current_texture()?;
+ let view = output.texture.create_view(&wgpu::TextureViewDescriptor::default());
+
+ let mut encoder = self.device.create_command_encoder(&wgpu::CommandEncoderDescriptor {
+ label: Some("Render Encoder"),
+ });
+
+ {
+ let _render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
+ label: Some("Clear Pass"),
+ color_attachments: &[Some(wgpu::RenderPassColorAttachment {
+ view: &view,
+ resolve_target: None,
+ ops: wgpu::Operations {
+ load: wgpu::LoadOp::Clear(wgpu::Color {
+ r: 0.1,
+ g: 0.2,
+ b: 0.3,
+ a: 1.0,
+ }),
+ store: wgpu::StoreOp::Store,
+ },
+ })],
+ depth_stencil_attachment: None,
+ occlusion_query_set: None,
+ timestamp_writes: None,
+ });
+ }
+
+ self.tile_manager.render(&mut encoder, &view);
+
+ self.queue.submit(std::iter::once(encoder.finish()));
+ output.present();
+
+ Ok(())
+ }
+
+ pub async fn setup_data_sources(&mut self) -> Result<(), Box<dyn std::error::Error>> {
+ // Start data sources for each plot component
+ for component in &mut self.tile_manager.components {
+ if let Some(plot) = component.as_any_mut().downcast_mut::<PlotComponent>() {
+ if let Err(e) = plot.start_data_sources().await {
+ eprintln!("Failed to start data sources for component: {}", e);
+ // Continue with other components even if one fails
+ }
+ }
+ }
+ Ok(())
+ }
+}
+
+#[tokio::main]
+async fn main() -> anyhow::Result<()> {
+ let event_loop = EventLoop::new()?;
+ let window = Arc::new(event_loop.create_window(Window::default_attributes()
+ .with_title("Timeplot - Simple Waterfall"))?);
+
+ let mut state = pollster::block_on(State::new(window.clone()));
+
+ // Setup data sources
+ if let Err(e) = pollster::block_on(state.setup_data_sources()) {
+ eprintln!("Failed to setup data sources: {}", e);
+ // Continue running without data sources for now
+ }
+
+ #[allow(deprecated)]
+ event_loop.run(move |event, elwt| {
+ match event {
+ Event::WindowEvent {
+ event,
+ window_id,
+ } if window_id == window.id() => match event {
+ WindowEvent::CloseRequested => elwt.exit(),
+ WindowEvent::Resized(physical_size) => {
+ state.resize(physical_size);
+ }
+ WindowEvent::RedrawRequested => {
+ state.update();
+ match state.render() {
+ Ok(_) => {}
+ Err(wgpu::SurfaceError::Lost) => state.resize(state.size),
+ Err(wgpu::SurfaceError::OutOfMemory) => elwt.exit(),
+ Err(e) => eprintln!("{:?}", e),
+ }
+ }
+ _ => {}
+ },
+ Event::AboutToWait => {
+ window.request_redraw();
+ }
+ _ => {}
+ }
+ })?;
+
+ Ok(())
+} \ No newline at end of file
diff --git a/.old/src/shader.wgsl b/.old/src/shader.wgsl
new file mode 100644
index 0000000..37ef52d
--- /dev/null
+++ b/.old/src/shader.wgsl
@@ -0,0 +1,30 @@
+struct VertexInput {
+ @location(0) position: vec2<f32>,
+ @location(1) tex_coords: vec2<f32>,
+}
+
+struct VertexOutput {
+ @builtin(position) clip_position: vec4<f32>,
+ @location(0) tex_coords: vec2<f32>,
+}
+
+@vertex
+fn vs_main(in: VertexInput) -> VertexOutput {
+ var out: VertexOutput;
+ out.clip_position = vec4<f32>(in.position, 0.0, 1.0);
+ out.tex_coords = in.tex_coords;
+ return out;
+}
+
+@group(0) @binding(0) var t_diffuse: texture_2d<f32>;
+@group(0) @binding(1) var s_diffuse: sampler;
+
+@fragment
+fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
+ return textureSample(t_diffuse, s_diffuse, in.tex_coords);
+}
+
+@fragment
+fn fs_gridlines(in: VertexOutput) -> @location(0) vec4<f32> {
+ return vec4<f32>(0.3, 0.3, 0.3, 0.5);
+} \ No newline at end of file
diff --git a/.old/target/.rustc_info.json b/.old/target/.rustc_info.json
new file mode 100644
index 0000000..137a9e2
--- /dev/null
+++ b/.old/target/.rustc_info.json
@@ -0,0 +1 @@
+{"rustc_fingerprint":14931865824592910770,"outputs":{"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.89.0 (29483883e 2025-08-04)\nbinary: rustc\ncommit-hash: 29483883eed69d5fb4db01964cdf2af4d86e9cb2\ncommit-date: 2025-08-04\nhost: x86_64-unknown-linux-gnu\nrelease: 1.89.0\nLLVM version: 20.1.7\n","stderr":""},"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/thomas/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}} \ No newline at end of file
diff --git a/.old/target/debug/deps/ab_glyph_rasterizer-27b922fbcd76da11.d b/.old/target/debug/deps/ab_glyph_rasterizer-27b922fbcd76da11.d
new file mode 100644
index 0000000..d0cab2f
--- /dev/null
+++ b/.old/target/debug/deps/ab_glyph_rasterizer-27b922fbcd76da11.d
@@ -0,0 +1,9 @@
+/home/thomas/dev/timeplot/target/debug/deps/ab_glyph_rasterizer-27b922fbcd76da11.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/raster.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libab_glyph_rasterizer-27b922fbcd76da11.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/raster.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libab_glyph_rasterizer-27b922fbcd76da11.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/raster.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/geometry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ab_glyph_rasterizer-0.1.10/src/raster.rs:
diff --git a/.old/target/debug/deps/ahash-3b30e8efbe0ac73f.d b/.old/target/debug/deps/ahash-3b30e8efbe0ac73f.d
new file mode 100644
index 0000000..55712b0
--- /dev/null
+++ b/.old/target/debug/deps/ahash-3b30e8efbe0ac73f.d
@@ -0,0 +1,14 @@
+/home/thomas/dev/timeplot/target/debug/deps/ahash-3b30e8efbe0ac73f.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/convert.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/fallback_hash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/operations.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/random_state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/specialize.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_set.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libahash-3b30e8efbe0ac73f.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/convert.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/fallback_hash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/operations.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/random_state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/specialize.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_set.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libahash-3b30e8efbe0ac73f.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/convert.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/fallback_hash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/operations.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/random_state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/specialize.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_set.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/convert.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/fallback_hash.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/operations.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/random_state.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/specialize.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_map.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_set.rs:
diff --git a/.old/target/debug/deps/ahash-56cd099ae3727908.d b/.old/target/debug/deps/ahash-56cd099ae3727908.d
new file mode 100644
index 0000000..0b6614d
--- /dev/null
+++ b/.old/target/debug/deps/ahash-56cd099ae3727908.d
@@ -0,0 +1,12 @@
+/home/thomas/dev/timeplot/target/debug/deps/ahash-56cd099ae3727908.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/convert.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/fallback_hash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/operations.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/random_state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/specialize.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_set.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libahash-56cd099ae3727908.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/convert.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/fallback_hash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/operations.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/random_state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/specialize.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_set.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/convert.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/fallback_hash.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/operations.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/random_state.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/specialize.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_map.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/hash_set.rs:
diff --git a/.old/target/debug/deps/arrayvec-bb6b6edd6045d7e7.d b/.old/target/debug/deps/arrayvec-bb6b6edd6045d7e7.d
new file mode 100644
index 0000000..31050f0
--- /dev/null
+++ b/.old/target/debug/deps/arrayvec-bb6b6edd6045d7e7.d
@@ -0,0 +1,11 @@
+/home/thomas/dev/timeplot/target/debug/deps/arrayvec-bb6b6edd6045d7e7.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/arrayvec_impl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/arrayvec.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/array_string.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/char.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/errors.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/utils.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libarrayvec-bb6b6edd6045d7e7.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/arrayvec_impl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/arrayvec.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/array_string.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/char.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/errors.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/utils.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/arrayvec_impl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/arrayvec.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/array_string.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/char.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/errors.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/arrayvec-0.7.6/src/utils.rs:
diff --git a/.old/target/debug/deps/bit_set-babb7026cba23d46.d b/.old/target/debug/deps/bit_set-babb7026cba23d46.d
new file mode 100644
index 0000000..3690f18
--- /dev/null
+++ b/.old/target/debug/deps/bit_set-babb7026cba23d46.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/bit_set-babb7026cba23d46.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bit-set-0.6.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libbit_set-babb7026cba23d46.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bit-set-0.6.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libbit_set-babb7026cba23d46.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bit-set-0.6.0/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bit-set-0.6.0/src/lib.rs:
diff --git a/.old/target/debug/deps/bytes-b94b70994929e7fa.d b/.old/target/debug/deps/bytes-b94b70994929e7fa.d
new file mode 100644
index 0000000..af7700f
--- /dev/null
+++ b/.old/target/debug/deps/bytes-b94b70994929e7fa.d
@@ -0,0 +1,22 @@
+/home/thomas/dev/timeplot/target/debug/deps/bytes-b94b70994929e7fa.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_impl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_mut.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/chain.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/limit.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/reader.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/take.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/uninit_slice.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/vec_deque.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/writer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes_mut.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/hex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/loom.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libbytes-b94b70994929e7fa.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_impl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_mut.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/chain.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/limit.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/reader.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/take.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/uninit_slice.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/vec_deque.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/writer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes_mut.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/hex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/loom.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_impl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_mut.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/chain.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/iter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/limit.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/reader.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/take.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/uninit_slice.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/vec_deque.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/writer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes_mut.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/debug.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/hex.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/loom.rs:
diff --git a/.old/target/debug/deps/calloop_wayland_source-2732cc7727d54d33.d b/.old/target/debug/deps/calloop_wayland_source-2732cc7727d54d33.d
new file mode 100644
index 0000000..555513b
--- /dev/null
+++ b/.old/target/debug/deps/calloop_wayland_source-2732cc7727d54d33.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/calloop_wayland_source-2732cc7727d54d33.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/calloop-wayland-source-0.3.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcalloop_wayland_source-2732cc7727d54d33.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/calloop-wayland-source-0.3.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcalloop_wayland_source-2732cc7727d54d33.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/calloop-wayland-source-0.3.0/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/calloop-wayland-source-0.3.0/src/lib.rs:
diff --git a/.old/target/debug/deps/cfg_aliases-88ae697f10203bf0.d b/.old/target/debug/deps/cfg_aliases-88ae697f10203bf0.d
new file mode 100644
index 0000000..a4322a3
--- /dev/null
+++ b/.old/target/debug/deps/cfg_aliases-88ae697f10203bf0.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/cfg_aliases-88ae697f10203bf0.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cfg_aliases-0.2.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcfg_aliases-88ae697f10203bf0.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cfg_aliases-0.2.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcfg_aliases-88ae697f10203bf0.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cfg_aliases-0.2.1/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cfg_aliases-0.2.1/src/lib.rs:
diff --git a/.old/target/debug/deps/cfg_aliases-b2db2de728aa1d5a.d b/.old/target/debug/deps/cfg_aliases-b2db2de728aa1d5a.d
new file mode 100644
index 0000000..4575d5f
--- /dev/null
+++ b/.old/target/debug/deps/cfg_aliases-b2db2de728aa1d5a.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/cfg_aliases-b2db2de728aa1d5a.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cfg_aliases-0.1.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcfg_aliases-b2db2de728aa1d5a.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cfg_aliases-0.1.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcfg_aliases-b2db2de728aa1d5a.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cfg_aliases-0.1.1/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cfg_aliases-0.1.1/src/lib.rs:
diff --git a/.old/target/debug/deps/cfg_if-38b89ea812352f6a.d b/.old/target/debug/deps/cfg_if-38b89ea812352f6a.d
new file mode 100644
index 0000000..c8d4cf8
--- /dev/null
+++ b/.old/target/debug/deps/cfg_if-38b89ea812352f6a.d
@@ -0,0 +1,5 @@
+/home/thomas/dev/timeplot/target/debug/deps/cfg_if-38b89ea812352f6a.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cfg-if-1.0.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcfg_if-38b89ea812352f6a.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cfg-if-1.0.1/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cfg-if-1.0.1/src/lib.rs:
diff --git a/.old/target/debug/deps/codespan_reporting-409545ec2899c231.d b/.old/target/debug/deps/codespan_reporting-409545ec2899c231.d
new file mode 100644
index 0000000..478c467
--- /dev/null
+++ b/.old/target/debug/deps/codespan_reporting-409545ec2899c231.d
@@ -0,0 +1,13 @@
+/home/thomas/dev/timeplot/target/debug/deps/codespan_reporting-409545ec2899c231.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/diagnostic.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/files.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/config.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/renderer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/views.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcodespan_reporting-409545ec2899c231.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/diagnostic.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/files.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/config.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/renderer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/views.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcodespan_reporting-409545ec2899c231.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/diagnostic.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/files.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/config.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/renderer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/views.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/diagnostic.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/files.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/config.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/renderer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/codespan-reporting-0.11.1/src/term/views.rs:
diff --git a/.old/target/debug/deps/crc32fast-ca1a06947e107b75.d b/.old/target/debug/deps/crc32fast-ca1a06947e107b75.d
new file mode 100644
index 0000000..6f6de02
--- /dev/null
+++ b/.old/target/debug/deps/crc32fast-ca1a06947e107b75.d
@@ -0,0 +1,12 @@
+/home/thomas/dev/timeplot/target/debug/deps/crc32fast-ca1a06947e107b75.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/baseline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/combine.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/specialized/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/table.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/specialized/pclmulqdq.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcrc32fast-ca1a06947e107b75.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/baseline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/combine.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/specialized/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/table.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/specialized/pclmulqdq.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcrc32fast-ca1a06947e107b75.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/baseline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/combine.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/specialized/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/table.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/specialized/pclmulqdq.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/baseline.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/combine.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/specialized/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/table.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crc32fast-1.5.0/src/specialized/pclmulqdq.rs:
diff --git a/.old/target/debug/deps/crossbeam_utils-f71d546a09bcfd59.d b/.old/target/debug/deps/crossbeam_utils-f71d546a09bcfd59.d
new file mode 100644
index 0000000..9648525
--- /dev/null
+++ b/.old/target/debug/deps/crossbeam_utils-f71d546a09bcfd59.d
@@ -0,0 +1,19 @@
+/home/thomas/dev/timeplot/target/debug/deps/crossbeam_utils-f71d546a09bcfd59.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/seq_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/atomic_cell.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/consume.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/cache_padded.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/backoff.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/once_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/parker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/sharded_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/wait_group.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/thread.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcrossbeam_utils-f71d546a09bcfd59.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/seq_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/atomic_cell.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/consume.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/cache_padded.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/backoff.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/once_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/parker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/sharded_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/wait_group.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/thread.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcrossbeam_utils-f71d546a09bcfd59.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/seq_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/atomic_cell.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/consume.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/cache_padded.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/backoff.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/once_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/parker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/sharded_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/wait_group.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/thread.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/seq_lock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/atomic_cell.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/atomic/consume.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/cache_padded.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/backoff.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/once_lock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/parker.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/sharded_lock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/sync/wait_group.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/crossbeam-utils-0.8.21/src/thread.rs:
diff --git a/.old/target/debug/deps/cursor_icon-d9e286303a073472.d b/.old/target/debug/deps/cursor_icon-d9e286303a073472.d
new file mode 100644
index 0000000..937e661
--- /dev/null
+++ b/.old/target/debug/deps/cursor_icon-d9e286303a073472.d
@@ -0,0 +1,5 @@
+/home/thomas/dev/timeplot/target/debug/deps/cursor_icon-d9e286303a073472.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cursor-icon-1.2.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libcursor_icon-d9e286303a073472.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cursor-icon-1.2.0/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cursor-icon-1.2.0/src/lib.rs:
diff --git a/.old/target/debug/deps/dlib-8e238b2fc721a3a3.d b/.old/target/debug/deps/dlib-8e238b2fc721a3a3.d
new file mode 100644
index 0000000..c3c8013
--- /dev/null
+++ b/.old/target/debug/deps/dlib-8e238b2fc721a3a3.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/dlib-8e238b2fc721a3a3.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dlib-0.5.2/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libdlib-8e238b2fc721a3a3.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dlib-0.5.2/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libdlib-8e238b2fc721a3a3.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dlib-0.5.2/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/dlib-0.5.2/src/lib.rs:
diff --git a/.old/target/debug/deps/equivalent-742118f59cddfc47.d b/.old/target/debug/deps/equivalent-742118f59cddfc47.d
new file mode 100644
index 0000000..bbdcb98
--- /dev/null
+++ b/.old/target/debug/deps/equivalent-742118f59cddfc47.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/equivalent-742118f59cddfc47.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/equivalent-1.0.2/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libequivalent-742118f59cddfc47.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/equivalent-1.0.2/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libequivalent-742118f59cddfc47.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/equivalent-1.0.2/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/equivalent-1.0.2/src/lib.rs:
diff --git a/.old/target/debug/deps/flate2-ee779fd4d3d10e0f.d b/.old/target/debug/deps/flate2-ee779fd4d3d10e0f.d
new file mode 100644
index 0000000..dc11098
--- /dev/null
+++ b/.old/target/debug/deps/flate2-ee779fd4d3d10e0f.d
@@ -0,0 +1,25 @@
+/home/thomas/dev/timeplot/target/debug/deps/flate2-ee779fd4d3d10e0f.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/bufreader.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/crc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/bufread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/ffi/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/ffi/rust.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/bufread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/mem.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zio.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/bufread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/write.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libflate2-ee779fd4d3d10e0f.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/bufreader.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/crc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/bufread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/ffi/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/ffi/rust.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/bufread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/mem.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zio.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/bufread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/write.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libflate2-ee779fd4d3d10e0f.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/bufreader.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/crc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/bufread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/ffi/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/ffi/rust.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/bufread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/mem.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zio.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/bufread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/write.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/bufreader.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/crc.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/bufread.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/read.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/deflate/write.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/ffi/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/ffi/rust.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/bufread.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/read.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/gz/write.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/mem.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zio.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/bufread.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/read.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.2/src/zlib/write.rs:
diff --git a/.old/target/debug/deps/foldhash-e9a63aa83b123e6e.d b/.old/target/debug/deps/foldhash-e9a63aa83b123e6e.d
new file mode 100644
index 0000000..7033e98
--- /dev/null
+++ b/.old/target/debug/deps/foldhash-e9a63aa83b123e6e.d
@@ -0,0 +1,10 @@
+/home/thomas/dev/timeplot/target/debug/deps/foldhash-e9a63aa83b123e6e.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/fast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/quality.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/seed.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libfoldhash-e9a63aa83b123e6e.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/fast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/quality.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/seed.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libfoldhash-e9a63aa83b123e6e.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/fast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/quality.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/seed.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/fast.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/quality.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/foldhash-0.1.5/src/seed.rs:
diff --git a/.old/target/debug/deps/getrandom-cb7121397d0c8bff.d b/.old/target/debug/deps/getrandom-cb7121397d0c8bff.d
new file mode 100644
index 0000000..3a00884
--- /dev/null
+++ b/.old/target/debug/deps/getrandom-cb7121397d0c8bff.d
@@ -0,0 +1,14 @@
+/home/thomas/dev/timeplot/target/debug/deps/getrandom-cb7121397d0c8bff.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/../README.md /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/use_file.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/../util_libc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/linux_android_with_fallback.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libgetrandom-cb7121397d0c8bff.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/../README.md /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/use_file.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/../util_libc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/linux_android_with_fallback.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libgetrandom-cb7121397d0c8bff.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/../README.md /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/use_file.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/../util_libc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/linux_android_with_fallback.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/util.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/../README.md:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/use_file.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/../util_libc.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.3.3/src/backends/linux_android_with_fallback.rs:
diff --git a/.old/target/debug/deps/gpu_descriptor-632fbbde1a938011.d b/.old/target/debug/deps/gpu_descriptor-632fbbde1a938011.d
new file mode 100644
index 0000000..5fe832e
--- /dev/null
+++ b/.old/target/debug/deps/gpu_descriptor-632fbbde1a938011.d
@@ -0,0 +1,8 @@
+/home/thomas/dev/timeplot/target/debug/deps/gpu_descriptor-632fbbde1a938011.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-0.3.2/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-0.3.2/src/allocator.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libgpu_descriptor-632fbbde1a938011.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-0.3.2/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-0.3.2/src/allocator.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libgpu_descriptor-632fbbde1a938011.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-0.3.2/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-0.3.2/src/allocator.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-0.3.2/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-0.3.2/src/allocator.rs:
diff --git a/.old/target/debug/deps/gpu_descriptor_types-4bb2fd7cfb804b5e.d b/.old/target/debug/deps/gpu_descriptor_types-4bb2fd7cfb804b5e.d
new file mode 100644
index 0000000..3c11d85
--- /dev/null
+++ b/.old/target/debug/deps/gpu_descriptor_types-4bb2fd7cfb804b5e.d
@@ -0,0 +1,9 @@
+/home/thomas/dev/timeplot/target/debug/deps/gpu_descriptor_types-4bb2fd7cfb804b5e.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/types.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libgpu_descriptor_types-4bb2fd7cfb804b5e.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/types.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libgpu_descriptor_types-4bb2fd7cfb804b5e.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/types.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/gpu-descriptor-types-0.2.0/src/types.rs:
diff --git a/.old/target/debug/deps/hashbrown-8a411dd26e90247c.d b/.old/target/debug/deps/hashbrown-8a411dd26e90247c.d
new file mode 100644
index 0000000..6b3ade2
--- /dev/null
+++ b/.old/target/debug/deps/hashbrown-8a411dd26e90247c.d
@@ -0,0 +1,21 @@
+/home/thomas/dev/timeplot/target/debug/deps/hashbrown-8a411dd26e90247c.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/bitmask.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/group/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/tag.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/raw/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/raw/alloc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/external_trait_impls/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/scopeguard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/table.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/group/sse2.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libhashbrown-8a411dd26e90247c.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/bitmask.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/group/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/tag.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/raw/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/raw/alloc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/external_trait_impls/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/scopeguard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/table.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/group/sse2.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libhashbrown-8a411dd26e90247c.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/bitmask.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/group/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/tag.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/raw/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/raw/alloc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/external_trait_impls/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/scopeguard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/table.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/group/sse2.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/bitmask.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/group/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/tag.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/raw/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/raw/alloc.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/util.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/external_trait_impls/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/map.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/scopeguard.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/set.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/table.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hashbrown-0.15.5/src/control/group/sse2.rs:
diff --git a/.old/target/debug/deps/hexf_parse-1efd1e1aa0e17306.d b/.old/target/debug/deps/hexf_parse-1efd1e1aa0e17306.d
new file mode 100644
index 0000000..fe137f3
--- /dev/null
+++ b/.old/target/debug/deps/hexf_parse-1efd1e1aa0e17306.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/hexf_parse-1efd1e1aa0e17306.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hexf-parse-0.2.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libhexf_parse-1efd1e1aa0e17306.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hexf-parse-0.2.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libhexf_parse-1efd1e1aa0e17306.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hexf-parse-0.2.1/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hexf-parse-0.2.1/src/lib.rs:
diff --git a/.old/target/debug/deps/hexf_parse-f62c9fa671297209.d b/.old/target/debug/deps/hexf_parse-f62c9fa671297209.d
new file mode 100644
index 0000000..0ea18a7
--- /dev/null
+++ b/.old/target/debug/deps/hexf_parse-f62c9fa671297209.d
@@ -0,0 +1,5 @@
+/home/thomas/dev/timeplot/target/debug/deps/hexf_parse-f62c9fa671297209.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hexf-parse-0.2.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libhexf_parse-f62c9fa671297209.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hexf-parse-0.2.1/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hexf-parse-0.2.1/src/lib.rs:
diff --git a/.old/target/debug/deps/indexmap-5501a5e82919e3f6.d b/.old/target/debug/deps/indexmap-5501a5e82919e3f6.d
new file mode 100644
index 0000000..a0cfa37
--- /dev/null
+++ b/.old/target/debug/deps/indexmap-5501a5e82919e3f6.d
@@ -0,0 +1,22 @@
+/home/thomas/dev/timeplot/target/debug/deps/indexmap-5501a5e82919e3f6.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/arbitrary.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/entry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/extract.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/raw_entry_v1.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/mutable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/slice.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/mutable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/slice.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libindexmap-5501a5e82919e3f6.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/arbitrary.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/entry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/extract.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/raw_entry_v1.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/mutable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/slice.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/mutable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/slice.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libindexmap-5501a5e82919e3f6.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/arbitrary.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/entry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/extract.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/raw_entry_v1.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/mutable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/slice.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/mutable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/slice.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/arbitrary.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/util.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/entry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/extract.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/raw_entry_v1.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/iter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/mutable.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/slice.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/iter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/mutable.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/slice.rs:
diff --git a/.old/target/debug/deps/indexmap-cf1292f23fa8db2e.d b/.old/target/debug/deps/indexmap-cf1292f23fa8db2e.d
new file mode 100644
index 0000000..e41b6d2
--- /dev/null
+++ b/.old/target/debug/deps/indexmap-cf1292f23fa8db2e.d
@@ -0,0 +1,20 @@
+/home/thomas/dev/timeplot/target/debug/deps/indexmap-cf1292f23fa8db2e.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/arbitrary.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/entry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/extract.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/raw_entry_v1.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/mutable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/slice.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/mutable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/slice.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libindexmap-cf1292f23fa8db2e.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/arbitrary.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/entry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/extract.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/raw_entry_v1.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/mutable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/slice.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/iter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/mutable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/slice.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/arbitrary.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/util.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/entry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/extract.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/core/raw_entry_v1.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/iter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/mutable.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/map/slice.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/iter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/mutable.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.10.0/src/set/slice.rs:
diff --git a/.old/target/debug/deps/khronos_egl-127b7bdd26f0cf07.d b/.old/target/debug/deps/khronos_egl-127b7bdd26f0cf07.d
new file mode 100644
index 0000000..30c4d87
--- /dev/null
+++ b/.old/target/debug/deps/khronos_egl-127b7bdd26f0cf07.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/khronos_egl-127b7bdd26f0cf07.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/khronos-egl-6.0.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libkhronos_egl-127b7bdd26f0cf07.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/khronos-egl-6.0.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libkhronos_egl-127b7bdd26f0cf07.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/khronos-egl-6.0.0/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/khronos-egl-6.0.0/src/lib.rs:
diff --git a/.old/target/debug/deps/khronos_egl-3fe426bc4ace6691.d b/.old/target/debug/deps/khronos_egl-3fe426bc4ace6691.d
new file mode 100644
index 0000000..114b2e6
--- /dev/null
+++ b/.old/target/debug/deps/khronos_egl-3fe426bc4ace6691.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/khronos_egl-3fe426bc4ace6691.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/khronos-egl-6.0.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libkhronos_egl-3fe426bc4ace6691.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/khronos-egl-6.0.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libkhronos_egl-3fe426bc4ace6691.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/khronos-egl-6.0.0/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/khronos-egl-6.0.0/src/lib.rs:
diff --git a/.old/target/debug/deps/libab_glyph_rasterizer-27b922fbcd76da11.rmeta b/.old/target/debug/deps/libab_glyph_rasterizer-27b922fbcd76da11.rmeta
new file mode 100644
index 0000000..d38cb93
--- /dev/null
+++ b/.old/target/debug/deps/libab_glyph_rasterizer-27b922fbcd76da11.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libahash-3b30e8efbe0ac73f.rlib b/.old/target/debug/deps/libahash-3b30e8efbe0ac73f.rlib
new file mode 100644
index 0000000..4219941
--- /dev/null
+++ b/.old/target/debug/deps/libahash-3b30e8efbe0ac73f.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libapprox-e0be4cbe078fa532.rmeta b/.old/target/debug/deps/libapprox-e0be4cbe078fa532.rmeta
new file mode 100644
index 0000000..12ac4c0
--- /dev/null
+++ b/.old/target/debug/deps/libapprox-e0be4cbe078fa532.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libarrayref-70eb58486769037f.rlib b/.old/target/debug/deps/libarrayref-70eb58486769037f.rlib
new file mode 100644
index 0000000..957a4bf
--- /dev/null
+++ b/.old/target/debug/deps/libarrayref-70eb58486769037f.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libarrayref-70eb58486769037f.rmeta b/.old/target/debug/deps/libarrayref-70eb58486769037f.rmeta
new file mode 100644
index 0000000..0e9cb24
--- /dev/null
+++ b/.old/target/debug/deps/libarrayref-70eb58486769037f.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libas_raw_xcb_connection-c3090eca1a9ac072.rmeta b/.old/target/debug/deps/libas_raw_xcb_connection-c3090eca1a9ac072.rmeta
new file mode 100644
index 0000000..ffac77f
--- /dev/null
+++ b/.old/target/debug/deps/libas_raw_xcb_connection-c3090eca1a9ac072.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libash-679a01be1d833e49.rmeta b/.old/target/debug/deps/libash-679a01be1d833e49.rmeta
new file mode 100644
index 0000000..16fd116
--- /dev/null
+++ b/.old/target/debug/deps/libash-679a01be1d833e49.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libash-d60b3f37add1da0c.rmeta b/.old/target/debug/deps/libash-d60b3f37add1da0c.rmeta
new file mode 100644
index 0000000..42f1883
--- /dev/null
+++ b/.old/target/debug/deps/libash-d60b3f37add1da0c.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libautocfg-8894a47441bd56dd.rmeta b/.old/target/debug/deps/libautocfg-8894a47441bd56dd.rmeta
new file mode 100644
index 0000000..a90a125
--- /dev/null
+++ b/.old/target/debug/deps/libautocfg-8894a47441bd56dd.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libbit_set-7285bf21a6e9f43c.rmeta b/.old/target/debug/deps/libbit_set-7285bf21a6e9f43c.rmeta
new file mode 100644
index 0000000..caf6ab3
--- /dev/null
+++ b/.old/target/debug/deps/libbit_set-7285bf21a6e9f43c.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libbit_set-babb7026cba23d46.rmeta b/.old/target/debug/deps/libbit_set-babb7026cba23d46.rmeta
new file mode 100644
index 0000000..075b2ec
--- /dev/null
+++ b/.old/target/debug/deps/libbit_set-babb7026cba23d46.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libbit_vec-c8bd294870835986.rlib b/.old/target/debug/deps/libbit_vec-c8bd294870835986.rlib
new file mode 100644
index 0000000..10b0b5e
--- /dev/null
+++ b/.old/target/debug/deps/libbit_vec-c8bd294870835986.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libbit_vec-e82831e3b97ed645.rmeta b/.old/target/debug/deps/libbit_vec-e82831e3b97ed645.rmeta
new file mode 100644
index 0000000..ade4e0d
--- /dev/null
+++ b/.old/target/debug/deps/libbit_vec-e82831e3b97ed645.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libbitflags-1c68ba442dcd81d7.rmeta b/.old/target/debug/deps/libbitflags-1c68ba442dcd81d7.rmeta
new file mode 100644
index 0000000..a8cb711
--- /dev/null
+++ b/.old/target/debug/deps/libbitflags-1c68ba442dcd81d7.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libbitflags-a27c004994d2fc4f.rlib b/.old/target/debug/deps/libbitflags-a27c004994d2fc4f.rlib
new file mode 100644
index 0000000..5c5edbd
--- /dev/null
+++ b/.old/target/debug/deps/libbitflags-a27c004994d2fc4f.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libbitflags-b4c3be1feed9090f.rlib b/.old/target/debug/deps/libbitflags-b4c3be1feed9090f.rlib
new file mode 100644
index 0000000..404c682
--- /dev/null
+++ b/.old/target/debug/deps/libbitflags-b4c3be1feed9090f.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libbitflags-b4c3be1feed9090f.rmeta b/.old/target/debug/deps/libbitflags-b4c3be1feed9090f.rmeta
new file mode 100644
index 0000000..516e371
--- /dev/null
+++ b/.old/target/debug/deps/libbitflags-b4c3be1feed9090f.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libbytemuck-ce33f7dcccd57d8e.rmeta b/.old/target/debug/deps/libbytemuck-ce33f7dcccd57d8e.rmeta
new file mode 100644
index 0000000..c8e9924
--- /dev/null
+++ b/.old/target/debug/deps/libbytemuck-ce33f7dcccd57d8e.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libbytemuck-e62baa57f51665d8.rmeta b/.old/target/debug/deps/libbytemuck-e62baa57f51665d8.rmeta
new file mode 100644
index 0000000..ff96ba4
--- /dev/null
+++ b/.old/target/debug/deps/libbytemuck-e62baa57f51665d8.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libbytemuck_derive-b70018812684f4cb.so b/.old/target/debug/deps/libbytemuck_derive-b70018812684f4cb.so
new file mode 100755
index 0000000..a96e170
--- /dev/null
+++ b/.old/target/debug/deps/libbytemuck_derive-b70018812684f4cb.so
Binary files differ
diff --git a/.old/target/debug/deps/libbytes-b971fec643874c18.rlib b/.old/target/debug/deps/libbytes-b971fec643874c18.rlib
new file mode 100644
index 0000000..447bd13
--- /dev/null
+++ b/.old/target/debug/deps/libbytes-b971fec643874c18.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libbytes-b971fec643874c18.rmeta b/.old/target/debug/deps/libbytes-b971fec643874c18.rmeta
new file mode 100644
index 0000000..f6a27c6
--- /dev/null
+++ b/.old/target/debug/deps/libbytes-b971fec643874c18.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libc-3978a69e9378dacb.d b/.old/target/debug/deps/libc-3978a69e9378dacb.d
new file mode 100644
index 0000000..8835eab
--- /dev/null
+++ b/.old/target/debug/deps/libc-3978a69e9378dacb.d
@@ -0,0 +1,24 @@
+/home/thomas/dev/timeplot/target/debug/deps/libc-3978a69e9378dacb.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can/j1939.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can/raw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/primitives.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/arch/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/arch/generic/mod.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/liblibc-3978a69e9378dacb.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can/j1939.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can/raw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/primitives.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/arch/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/arch/generic/mod.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/liblibc-3978a69e9378dacb.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can/j1939.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can/raw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/primitives.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/arch/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/arch/generic/mod.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can/j1939.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/new/linux_uapi/linux/can/raw.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/primitives.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/arch/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libc-0.2.175/src/unix/linux_like/linux/arch/generic/mod.rs:
diff --git a/.old/target/debug/deps/libcalloop-0cf1db7b38301379.rlib b/.old/target/debug/deps/libcalloop-0cf1db7b38301379.rlib
new file mode 100644
index 0000000..adf9417
--- /dev/null
+++ b/.old/target/debug/deps/libcalloop-0cf1db7b38301379.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libcfg_aliases-88ae697f10203bf0.rmeta b/.old/target/debug/deps/libcfg_aliases-88ae697f10203bf0.rmeta
new file mode 100644
index 0000000..56afb88
--- /dev/null
+++ b/.old/target/debug/deps/libcfg_aliases-88ae697f10203bf0.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libcfg_aliases-b2db2de728aa1d5a.rmeta b/.old/target/debug/deps/libcfg_aliases-b2db2de728aa1d5a.rmeta
new file mode 100644
index 0000000..3f0c215
--- /dev/null
+++ b/.old/target/debug/deps/libcfg_aliases-b2db2de728aa1d5a.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libcfg_if-ce7a778126ca8001.rmeta b/.old/target/debug/deps/libcfg_if-ce7a778126ca8001.rmeta
new file mode 100644
index 0000000..b2519df
--- /dev/null
+++ b/.old/target/debug/deps/libcfg_if-ce7a778126ca8001.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libcrc32fast-ca1a06947e107b75.rmeta b/.old/target/debug/deps/libcrc32fast-ca1a06947e107b75.rmeta
new file mode 100644
index 0000000..658ccaa
--- /dev/null
+++ b/.old/target/debug/deps/libcrc32fast-ca1a06947e107b75.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libcrossbeam_channel-b0e3e285a99fe058.rlib b/.old/target/debug/deps/libcrossbeam_channel-b0e3e285a99fe058.rlib
new file mode 100644
index 0000000..7d40e4c
--- /dev/null
+++ b/.old/target/debug/deps/libcrossbeam_channel-b0e3e285a99fe058.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libcrossbeam_utils-f71d546a09bcfd59.rlib b/.old/target/debug/deps/libcrossbeam_utils-f71d546a09bcfd59.rlib
new file mode 100644
index 0000000..b725114
--- /dev/null
+++ b/.old/target/debug/deps/libcrossbeam_utils-f71d546a09bcfd59.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libdowncast_rs-49d6ca08d84255cc.rlib b/.old/target/debug/deps/libdowncast_rs-49d6ca08d84255cc.rlib
new file mode 100644
index 0000000..e4564ec
--- /dev/null
+++ b/.old/target/debug/deps/libdowncast_rs-49d6ca08d84255cc.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libdowncast_rs-cb4bca6f60b6285e.rmeta b/.old/target/debug/deps/libdowncast_rs-cb4bca6f60b6285e.rmeta
new file mode 100644
index 0000000..1776835
--- /dev/null
+++ b/.old/target/debug/deps/libdowncast_rs-cb4bca6f60b6285e.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libdpi-d08f847aebd73359.rmeta b/.old/target/debug/deps/libdpi-d08f847aebd73359.rmeta
new file mode 100644
index 0000000..a7c7c93
--- /dev/null
+++ b/.old/target/debug/deps/libdpi-d08f847aebd73359.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libequivalent-742118f59cddfc47.rlib b/.old/target/debug/deps/libequivalent-742118f59cddfc47.rlib
new file mode 100644
index 0000000..7c6bf9e
--- /dev/null
+++ b/.old/target/debug/deps/libequivalent-742118f59cddfc47.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libequivalent-8b054abaa056da40.rmeta b/.old/target/debug/deps/libequivalent-8b054abaa056da40.rmeta
new file mode 100644
index 0000000..8bdb640
--- /dev/null
+++ b/.old/target/debug/deps/libequivalent-8b054abaa056da40.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libflate2-ee779fd4d3d10e0f.rmeta b/.old/target/debug/deps/libflate2-ee779fd4d3d10e0f.rmeta
new file mode 100644
index 0000000..78cd215
--- /dev/null
+++ b/.old/target/debug/deps/libflate2-ee779fd4d3d10e0f.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libgetrandom-3397c23ca89a5799.rmeta b/.old/target/debug/deps/libgetrandom-3397c23ca89a5799.rmeta
new file mode 100644
index 0000000..2e1773b
--- /dev/null
+++ b/.old/target/debug/deps/libgetrandom-3397c23ca89a5799.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libgpu_alloc-06af16a7d79beb43.rmeta b/.old/target/debug/deps/libgpu_alloc-06af16a7d79beb43.rmeta
new file mode 100644
index 0000000..9cd035f
--- /dev/null
+++ b/.old/target/debug/deps/libgpu_alloc-06af16a7d79beb43.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libgpu_alloc_types-98d79fd181598131.rlib b/.old/target/debug/deps/libgpu_alloc_types-98d79fd181598131.rlib
new file mode 100644
index 0000000..467337e
--- /dev/null
+++ b/.old/target/debug/deps/libgpu_alloc_types-98d79fd181598131.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libgpu_alloc_types-98d79fd181598131.rmeta b/.old/target/debug/deps/libgpu_alloc_types-98d79fd181598131.rmeta
new file mode 100644
index 0000000..4a03a36
--- /dev/null
+++ b/.old/target/debug/deps/libgpu_alloc_types-98d79fd181598131.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libgpu_descriptor-632fbbde1a938011.rlib b/.old/target/debug/deps/libgpu_descriptor-632fbbde1a938011.rlib
new file mode 100644
index 0000000..419f2fe
--- /dev/null
+++ b/.old/target/debug/deps/libgpu_descriptor-632fbbde1a938011.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libgpu_descriptor-632fbbde1a938011.rmeta b/.old/target/debug/deps/libgpu_descriptor-632fbbde1a938011.rmeta
new file mode 100644
index 0000000..da55c74
--- /dev/null
+++ b/.old/target/debug/deps/libgpu_descriptor-632fbbde1a938011.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libgpu_descriptor-8fa99644532e7644.rlib b/.old/target/debug/deps/libgpu_descriptor-8fa99644532e7644.rlib
new file mode 100644
index 0000000..2d478cc
--- /dev/null
+++ b/.old/target/debug/deps/libgpu_descriptor-8fa99644532e7644.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libgpu_descriptor-b581ac0b18547051.rmeta b/.old/target/debug/deps/libgpu_descriptor-b581ac0b18547051.rmeta
new file mode 100644
index 0000000..b9aee9f
--- /dev/null
+++ b/.old/target/debug/deps/libgpu_descriptor-b581ac0b18547051.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libhashbrown-61bba8eb3e81e221.rmeta b/.old/target/debug/deps/libhashbrown-61bba8eb3e81e221.rmeta
new file mode 100644
index 0000000..22e9778
--- /dev/null
+++ b/.old/target/debug/deps/libhashbrown-61bba8eb3e81e221.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libhexf_parse-f62c9fa671297209.rmeta b/.old/target/debug/deps/libhexf_parse-f62c9fa671297209.rmeta
new file mode 100644
index 0000000..e36cf21
--- /dev/null
+++ b/.old/target/debug/deps/libhexf_parse-f62c9fa671297209.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libindexmap-5501a5e82919e3f6.rlib b/.old/target/debug/deps/libindexmap-5501a5e82919e3f6.rlib
new file mode 100644
index 0000000..31ffbca
--- /dev/null
+++ b/.old/target/debug/deps/libindexmap-5501a5e82919e3f6.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libinstant-1b2fa9cffafaa25c.rlib b/.old/target/debug/deps/libinstant-1b2fa9cffafaa25c.rlib
new file mode 100644
index 0000000..d4ef1ab
--- /dev/null
+++ b/.old/target/debug/deps/libinstant-1b2fa9cffafaa25c.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libinstant-1b2fa9cffafaa25c.rmeta b/.old/target/debug/deps/libinstant-1b2fa9cffafaa25c.rmeta
new file mode 100644
index 0000000..d042960
--- /dev/null
+++ b/.old/target/debug/deps/libinstant-1b2fa9cffafaa25c.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libkhronos_egl-3fe426bc4ace6691.rlib b/.old/target/debug/deps/libkhronos_egl-3fe426bc4ace6691.rlib
new file mode 100644
index 0000000..edf894d
--- /dev/null
+++ b/.old/target/debug/deps/libkhronos_egl-3fe426bc4ace6691.rlib
Binary files differ
diff --git a/.old/target/debug/deps/liblazy_static-ffebef2c0e161fa7.rlib b/.old/target/debug/deps/liblazy_static-ffebef2c0e161fa7.rlib
new file mode 100644
index 0000000..7915ebe
--- /dev/null
+++ b/.old/target/debug/deps/liblazy_static-ffebef2c0e161fa7.rlib
Binary files differ
diff --git a/.old/target/debug/deps/liblibc-131c8752ac6ccc62.rlib b/.old/target/debug/deps/liblibc-131c8752ac6ccc62.rlib
new file mode 100644
index 0000000..7cfc05f
--- /dev/null
+++ b/.old/target/debug/deps/liblibc-131c8752ac6ccc62.rlib
Binary files differ
diff --git a/.old/target/debug/deps/liblibc-131c8752ac6ccc62.rmeta b/.old/target/debug/deps/liblibc-131c8752ac6ccc62.rmeta
new file mode 100644
index 0000000..201356f
--- /dev/null
+++ b/.old/target/debug/deps/liblibc-131c8752ac6ccc62.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/liblinux_raw_sys-501ed64292a9e1b5.rlib b/.old/target/debug/deps/liblinux_raw_sys-501ed64292a9e1b5.rlib
new file mode 100644
index 0000000..0394aa2
--- /dev/null
+++ b/.old/target/debug/deps/liblinux_raw_sys-501ed64292a9e1b5.rlib
Binary files differ
diff --git a/.old/target/debug/deps/liblinux_raw_sys-501ed64292a9e1b5.rmeta b/.old/target/debug/deps/liblinux_raw_sys-501ed64292a9e1b5.rmeta
new file mode 100644
index 0000000..6460236
--- /dev/null
+++ b/.old/target/debug/deps/liblinux_raw_sys-501ed64292a9e1b5.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/liblinux_raw_sys-cf0feb498ceaa66f.rmeta b/.old/target/debug/deps/liblinux_raw_sys-cf0feb498ceaa66f.rmeta
new file mode 100644
index 0000000..2c1dc70
--- /dev/null
+++ b/.old/target/debug/deps/liblinux_raw_sys-cf0feb498ceaa66f.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/liblitrs-1d817a9e13b38440.rlib b/.old/target/debug/deps/liblitrs-1d817a9e13b38440.rlib
new file mode 100644
index 0000000..01c456d
--- /dev/null
+++ b/.old/target/debug/deps/liblitrs-1d817a9e13b38440.rlib
Binary files differ
diff --git a/.old/target/debug/deps/liblitrs-1d817a9e13b38440.rmeta b/.old/target/debug/deps/liblitrs-1d817a9e13b38440.rmeta
new file mode 100644
index 0000000..8aa12cc
--- /dev/null
+++ b/.old/target/debug/deps/liblitrs-1d817a9e13b38440.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/liblock_api-59ccc7edac88d070.rmeta b/.old/target/debug/deps/liblock_api-59ccc7edac88d070.rmeta
new file mode 100644
index 0000000..5d21692
--- /dev/null
+++ b/.old/target/debug/deps/liblock_api-59ccc7edac88d070.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/liblog-caa596a096de7a2c.rmeta b/.old/target/debug/deps/liblog-caa596a096de7a2c.rmeta
new file mode 100644
index 0000000..ef6940d
--- /dev/null
+++ b/.old/target/debug/deps/liblog-caa596a096de7a2c.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libmemchr-6709e545d5a75bbd.rmeta b/.old/target/debug/deps/libmemchr-6709e545d5a75bbd.rmeta
new file mode 100644
index 0000000..9b5b456
--- /dev/null
+++ b/.old/target/debug/deps/libmemchr-6709e545d5a75bbd.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libmemchr-9cf49672ca1b09c8.rmeta b/.old/target/debug/deps/libmemchr-9cf49672ca1b09c8.rmeta
new file mode 100644
index 0000000..95cde7f
--- /dev/null
+++ b/.old/target/debug/deps/libmemchr-9cf49672ca1b09c8.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libmemchr-ddb1f17df6c8a224.rmeta b/.old/target/debug/deps/libmemchr-ddb1f17df6c8a224.rmeta
new file mode 100644
index 0000000..cd9b157
--- /dev/null
+++ b/.old/target/debug/deps/libmemchr-ddb1f17df6c8a224.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libmemmap2-c420ca3b3d7cee19.rlib b/.old/target/debug/deps/libmemmap2-c420ca3b3d7cee19.rlib
new file mode 100644
index 0000000..671ec11
--- /dev/null
+++ b/.old/target/debug/deps/libmemmap2-c420ca3b3d7cee19.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libmio-e5461234a92fae15.rlib b/.old/target/debug/deps/libmio-e5461234a92fae15.rlib
new file mode 100644
index 0000000..91d8ade
--- /dev/null
+++ b/.old/target/debug/deps/libmio-e5461234a92fae15.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libmio-e5461234a92fae15.rmeta b/.old/target/debug/deps/libmio-e5461234a92fae15.rmeta
new file mode 100644
index 0000000..a0d28ad
--- /dev/null
+++ b/.old/target/debug/deps/libmio-e5461234a92fae15.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libnaga-7c6b38cefadfa9db.rmeta b/.old/target/debug/deps/libnaga-7c6b38cefadfa9db.rmeta
new file mode 100644
index 0000000..9911b25
--- /dev/null
+++ b/.old/target/debug/deps/libnaga-7c6b38cefadfa9db.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libnaga-b4e65e42a9689c7e.rmeta b/.old/target/debug/deps/libnaga-b4e65e42a9689c7e.rmeta
new file mode 100644
index 0000000..eed91de
--- /dev/null
+++ b/.old/target/debug/deps/libnaga-b4e65e42a9689c7e.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libnu_ansi_term-f0dd67bbc4fc7bc7.rlib b/.old/target/debug/deps/libnu_ansi_term-f0dd67bbc4fc7bc7.rlib
new file mode 100644
index 0000000..ce3740a
--- /dev/null
+++ b/.old/target/debug/deps/libnu_ansi_term-f0dd67bbc4fc7bc7.rlib
Binary files differ
diff --git a/.old/target/debug/deps/liboverload-36d6dc4b2c1d5222.rmeta b/.old/target/debug/deps/liboverload-36d6dc4b2c1d5222.rmeta
new file mode 100644
index 0000000..3d72b45
--- /dev/null
+++ b/.old/target/debug/deps/liboverload-36d6dc4b2c1d5222.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libparking_lot-734fe1c1505cffdb.rlib b/.old/target/debug/deps/libparking_lot-734fe1c1505cffdb.rlib
new file mode 100644
index 0000000..d19861c
--- /dev/null
+++ b/.old/target/debug/deps/libparking_lot-734fe1c1505cffdb.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libparking_lot-965a2a9eca020d75.rmeta b/.old/target/debug/deps/libparking_lot-965a2a9eca020d75.rmeta
new file mode 100644
index 0000000..d0ec8c4
--- /dev/null
+++ b/.old/target/debug/deps/libparking_lot-965a2a9eca020d75.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libparking_lot_core-9d53afdf505a034a.rlib b/.old/target/debug/deps/libparking_lot_core-9d53afdf505a034a.rlib
new file mode 100644
index 0000000..164e494
--- /dev/null
+++ b/.old/target/debug/deps/libparking_lot_core-9d53afdf505a034a.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libparking_lot_core-e2f5b4fce531c206.rmeta b/.old/target/debug/deps/libparking_lot_core-e2f5b4fce531c206.rmeta
new file mode 100644
index 0000000..e000e31
--- /dev/null
+++ b/.old/target/debug/deps/libparking_lot_core-e2f5b4fce531c206.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libpercent_encoding-e44e7ec6fb763c39.rmeta b/.old/target/debug/deps/libpercent_encoding-e44e7ec6fb763c39.rmeta
new file mode 100644
index 0000000..bba0c13
--- /dev/null
+++ b/.old/target/debug/deps/libpercent_encoding-e44e7ec6fb763c39.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libpin_project_lite-dbb7ad05ebc1034f.rmeta b/.old/target/debug/deps/libpin_project_lite-dbb7ad05ebc1034f.rmeta
new file mode 100644
index 0000000..ca7a794
--- /dev/null
+++ b/.old/target/debug/deps/libpin_project_lite-dbb7ad05ebc1034f.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libpolling-34693332330a00c8.rmeta b/.old/target/debug/deps/libpolling-34693332330a00c8.rmeta
new file mode 100644
index 0000000..b1654f8
--- /dev/null
+++ b/.old/target/debug/deps/libpolling-34693332330a00c8.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libpollster-7f0c20abffc76682.rmeta b/.old/target/debug/deps/libpollster-7f0c20abffc76682.rmeta
new file mode 100644
index 0000000..ed2a48c
--- /dev/null
+++ b/.old/target/debug/deps/libpollster-7f0c20abffc76682.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libpollster-bb942735a89fb59e.rmeta b/.old/target/debug/deps/libpollster-bb942735a89fb59e.rmeta
new file mode 100644
index 0000000..d501848
--- /dev/null
+++ b/.old/target/debug/deps/libpollster-bb942735a89fb59e.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libproc_macro2-bda2a3cd8d039fb5.rlib b/.old/target/debug/deps/libproc_macro2-bda2a3cd8d039fb5.rlib
new file mode 100644
index 0000000..7c81f13
--- /dev/null
+++ b/.old/target/debug/deps/libproc_macro2-bda2a3cd8d039fb5.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libquote-85758243a08bc240.rlib b/.old/target/debug/deps/libquote-85758243a08bc240.rlib
new file mode 100644
index 0000000..1cbc467
--- /dev/null
+++ b/.old/target/debug/deps/libquote-85758243a08bc240.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libquote-85758243a08bc240.rmeta b/.old/target/debug/deps/libquote-85758243a08bc240.rmeta
new file mode 100644
index 0000000..8fd12ea
--- /dev/null
+++ b/.old/target/debug/deps/libquote-85758243a08bc240.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libraw_window_handle-045a7f813338ed5d.rmeta b/.old/target/debug/deps/libraw_window_handle-045a7f813338ed5d.rmeta
new file mode 100644
index 0000000..901d477
--- /dev/null
+++ b/.old/target/debug/deps/libraw_window_handle-045a7f813338ed5d.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/librenderdoc_sys-04e676ab5af521c0.rmeta b/.old/target/debug/deps/librenderdoc_sys-04e676ab5af521c0.rmeta
new file mode 100644
index 0000000..dc39d19
--- /dev/null
+++ b/.old/target/debug/deps/librenderdoc_sys-04e676ab5af521c0.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/librustc_hash-79bd06606779b665.rmeta b/.old/target/debug/deps/librustc_hash-79bd06606779b665.rmeta
new file mode 100644
index 0000000..140a5e7
--- /dev/null
+++ b/.old/target/debug/deps/librustc_hash-79bd06606779b665.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/librustix-2279050c80cce053.rmeta b/.old/target/debug/deps/librustix-2279050c80cce053.rmeta
new file mode 100644
index 0000000..ba53ae6
--- /dev/null
+++ b/.old/target/debug/deps/librustix-2279050c80cce053.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libryu-37d53b4f77257f86.rlib b/.old/target/debug/deps/libryu-37d53b4f77257f86.rlib
new file mode 100644
index 0000000..06e3d5a
--- /dev/null
+++ b/.old/target/debug/deps/libryu-37d53b4f77257f86.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libscoped_tls-947d207027aa3d7d.rmeta b/.old/target/debug/deps/libscoped_tls-947d207027aa3d7d.rmeta
new file mode 100644
index 0000000..356ec77
--- /dev/null
+++ b/.old/target/debug/deps/libscoped_tls-947d207027aa3d7d.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libsctk_adwaita-2f6ef4f16053a20e.rlib b/.old/target/debug/deps/libsctk_adwaita-2f6ef4f16053a20e.rlib
new file mode 100644
index 0000000..6e79a8a
--- /dev/null
+++ b/.old/target/debug/deps/libsctk_adwaita-2f6ef4f16053a20e.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libserde_derive-9c1eeda2419ac537.so b/.old/target/debug/deps/libserde_derive-9c1eeda2419ac537.so
new file mode 100755
index 0000000..ae6ad5e
--- /dev/null
+++ b/.old/target/debug/deps/libserde_derive-9c1eeda2419ac537.so
Binary files differ
diff --git a/.old/target/debug/deps/libserde_json-7f531e5853cff0f4.rmeta b/.old/target/debug/deps/libserde_json-7f531e5853cff0f4.rmeta
new file mode 100644
index 0000000..4e796db
--- /dev/null
+++ b/.old/target/debug/deps/libserde_json-7f531e5853cff0f4.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libsignal_hook_registry-14a19e68287ab283.rmeta b/.old/target/debug/deps/libsignal_hook_registry-14a19e68287ab283.rmeta
new file mode 100644
index 0000000..f880500
--- /dev/null
+++ b/.old/target/debug/deps/libsignal_hook_registry-14a19e68287ab283.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libsignal_hook_registry-56c9b79afea0981c.rlib b/.old/target/debug/deps/libsignal_hook_registry-56c9b79afea0981c.rlib
new file mode 100644
index 0000000..d9d40b6
--- /dev/null
+++ b/.old/target/debug/deps/libsignal_hook_registry-56c9b79afea0981c.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libslab-310234d692715ce3.rmeta b/.old/target/debug/deps/libslab-310234d692715ce3.rmeta
new file mode 100644
index 0000000..8d2fa60
--- /dev/null
+++ b/.old/target/debug/deps/libslab-310234d692715ce3.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libsmithay_client_toolkit-9472249ffb6b3fe2.rmeta b/.old/target/debug/deps/libsmithay_client_toolkit-9472249ffb6b3fe2.rmeta
new file mode 100644
index 0000000..129461d
--- /dev/null
+++ b/.old/target/debug/deps/libsmithay_client_toolkit-9472249ffb6b3fe2.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libsmithay_client_toolkit-bd47079a3bbdb3f9.rlib b/.old/target/debug/deps/libsmithay_client_toolkit-bd47079a3bbdb3f9.rlib
new file mode 100644
index 0000000..dcaf08d
--- /dev/null
+++ b/.old/target/debug/deps/libsmithay_client_toolkit-bd47079a3bbdb3f9.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libsmithay_client_toolkit-d463b851c580ef65.rmeta b/.old/target/debug/deps/libsmithay_client_toolkit-d463b851c580ef65.rmeta
new file mode 100644
index 0000000..bafef9a
--- /dev/null
+++ b/.old/target/debug/deps/libsmithay_client_toolkit-d463b851c580ef65.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libsmol_str-194da2e0b9ad88a8.rmeta b/.old/target/debug/deps/libsmol_str-194da2e0b9ad88a8.rmeta
new file mode 100644
index 0000000..e114006
--- /dev/null
+++ b/.old/target/debug/deps/libsmol_str-194da2e0b9ad88a8.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libstatic_assertions-a2f250d3376c1838.rlib b/.old/target/debug/deps/libstatic_assertions-a2f250d3376c1838.rlib
new file mode 100644
index 0000000..d4fc4e3
--- /dev/null
+++ b/.old/target/debug/deps/libstatic_assertions-a2f250d3376c1838.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libstatic_assertions-a2f250d3376c1838.rmeta b/.old/target/debug/deps/libstatic_assertions-a2f250d3376c1838.rmeta
new file mode 100644
index 0000000..88cbec8
--- /dev/null
+++ b/.old/target/debug/deps/libstatic_assertions-a2f250d3376c1838.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libstrict_num-1becda3bfa29f924.rlib b/.old/target/debug/deps/libstrict_num-1becda3bfa29f924.rlib
new file mode 100644
index 0000000..07b2bc1
--- /dev/null
+++ b/.old/target/debug/deps/libstrict_num-1becda3bfa29f924.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libstrict_num-1becda3bfa29f924.rmeta b/.old/target/debug/deps/libstrict_num-1becda3bfa29f924.rmeta
new file mode 100644
index 0000000..f4dacb7
--- /dev/null
+++ b/.old/target/debug/deps/libstrict_num-1becda3bfa29f924.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libstrict_num-800bd13c1bbdfb48.rmeta b/.old/target/debug/deps/libstrict_num-800bd13c1bbdfb48.rmeta
new file mode 100644
index 0000000..76ffd67
--- /dev/null
+++ b/.old/target/debug/deps/libstrict_num-800bd13c1bbdfb48.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libsyn-3f96890d1c0558f3.rmeta b/.old/target/debug/deps/libsyn-3f96890d1c0558f3.rmeta
new file mode 100644
index 0000000..6262a17
--- /dev/null
+++ b/.old/target/debug/deps/libsyn-3f96890d1c0558f3.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libsyn-89bce6a93f3c3a67.rmeta b/.old/target/debug/deps/libsyn-89bce6a93f3c3a67.rmeta
new file mode 100644
index 0000000..f77a5d0
--- /dev/null
+++ b/.old/target/debug/deps/libsyn-89bce6a93f3c3a67.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libthiserror-7a08c7fb75317ff1.rlib b/.old/target/debug/deps/libthiserror-7a08c7fb75317ff1.rlib
new file mode 100644
index 0000000..32f749d
--- /dev/null
+++ b/.old/target/debug/deps/libthiserror-7a08c7fb75317ff1.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libthiserror-7a08c7fb75317ff1.rmeta b/.old/target/debug/deps/libthiserror-7a08c7fb75317ff1.rmeta
new file mode 100644
index 0000000..26513df
--- /dev/null
+++ b/.old/target/debug/deps/libthiserror-7a08c7fb75317ff1.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libthiserror-e74cf0fb6b2e18cf.rmeta b/.old/target/debug/deps/libthiserror-e74cf0fb6b2e18cf.rmeta
new file mode 100644
index 0000000..624c6bc
--- /dev/null
+++ b/.old/target/debug/deps/libthiserror-e74cf0fb6b2e18cf.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libthiserror-f8a0cf06aea04752.rmeta b/.old/target/debug/deps/libthiserror-f8a0cf06aea04752.rmeta
new file mode 100644
index 0000000..a67b227
--- /dev/null
+++ b/.old/target/debug/deps/libthiserror-f8a0cf06aea04752.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libthiserror_impl-b9529f4240c8b1d8.so b/.old/target/debug/deps/libthiserror_impl-b9529f4240c8b1d8.so
new file mode 100755
index 0000000..730e454
--- /dev/null
+++ b/.old/target/debug/deps/libthiserror_impl-b9529f4240c8b1d8.so
Binary files differ
diff --git a/.old/target/debug/deps/libtiny_skia-dfad77f4d3fa7722.rmeta b/.old/target/debug/deps/libtiny_skia-dfad77f4d3fa7722.rmeta
new file mode 100644
index 0000000..e68af42
--- /dev/null
+++ b/.old/target/debug/deps/libtiny_skia-dfad77f4d3fa7722.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libtiny_skia_path-938b866606d12a5a.rmeta b/.old/target/debug/deps/libtiny_skia_path-938b866606d12a5a.rmeta
new file mode 100644
index 0000000..9838f34
--- /dev/null
+++ b/.old/target/debug/deps/libtiny_skia_path-938b866606d12a5a.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libtiny_skia_path-d7b6903a407cff70.rmeta b/.old/target/debug/deps/libtiny_skia_path-d7b6903a407cff70.rmeta
new file mode 100644
index 0000000..b6b09c2
--- /dev/null
+++ b/.old/target/debug/deps/libtiny_skia_path-d7b6903a407cff70.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libtokio_macros-f630775fe714cbf3.so b/.old/target/debug/deps/libtokio_macros-f630775fe714cbf3.so
new file mode 100755
index 0000000..4af7ae7
--- /dev/null
+++ b/.old/target/debug/deps/libtokio_macros-f630775fe714cbf3.so
Binary files differ
diff --git a/.old/target/debug/deps/libtracing-ad65eba9c26e0c66.rlib b/.old/target/debug/deps/libtracing-ad65eba9c26e0c66.rlib
new file mode 100644
index 0000000..3553004
--- /dev/null
+++ b/.old/target/debug/deps/libtracing-ad65eba9c26e0c66.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libtracing-e63f0fd6878a6640.rmeta b/.old/target/debug/deps/libtracing-e63f0fd6878a6640.rmeta
new file mode 100644
index 0000000..e3f279a
--- /dev/null
+++ b/.old/target/debug/deps/libtracing-e63f0fd6878a6640.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libtracing_core-7989f104de9120c1.rmeta b/.old/target/debug/deps/libtracing_core-7989f104de9120c1.rmeta
new file mode 100644
index 0000000..7e2cc2c
--- /dev/null
+++ b/.old/target/debug/deps/libtracing_core-7989f104de9120c1.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libtracing_log-ee35a40da66db16f.rlib b/.old/target/debug/deps/libtracing_log-ee35a40da66db16f.rlib
new file mode 100644
index 0000000..89d5264
--- /dev/null
+++ b/.old/target/debug/deps/libtracing_log-ee35a40da66db16f.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libtracing_subscriber-545b31b8a530e079.rlib b/.old/target/debug/deps/libtracing_subscriber-545b31b8a530e079.rlib
new file mode 100644
index 0000000..03f230f
--- /dev/null
+++ b/.old/target/debug/deps/libtracing_subscriber-545b31b8a530e079.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libunicode_ident-5762da66a5bfba8e.rmeta b/.old/target/debug/deps/libunicode_ident-5762da66a5bfba8e.rmeta
new file mode 100644
index 0000000..6a0e06c
--- /dev/null
+++ b/.old/target/debug/deps/libunicode_ident-5762da66a5bfba8e.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libvec_map-7a6b12f1cc07f3f0.rlib b/.old/target/debug/deps/libvec_map-7a6b12f1cc07f3f0.rlib
new file mode 100644
index 0000000..67322f7
--- /dev/null
+++ b/.old/target/debug/deps/libvec_map-7a6b12f1cc07f3f0.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libvec_map-7a6b12f1cc07f3f0.rmeta b/.old/target/debug/deps/libvec_map-7a6b12f1cc07f3f0.rmeta
new file mode 100644
index 0000000..6d932c0
--- /dev/null
+++ b/.old/target/debug/deps/libvec_map-7a6b12f1cc07f3f0.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwayland_backend-8ebd4fff2f2e0181.rlib b/.old/target/debug/deps/libwayland_backend-8ebd4fff2f2e0181.rlib
new file mode 100644
index 0000000..299d9c7
--- /dev/null
+++ b/.old/target/debug/deps/libwayland_backend-8ebd4fff2f2e0181.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libwayland_client-2876c544f709a6d4.rlib b/.old/target/debug/deps/libwayland_client-2876c544f709a6d4.rlib
new file mode 100644
index 0000000..c46092f
--- /dev/null
+++ b/.old/target/debug/deps/libwayland_client-2876c544f709a6d4.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libwayland_commons-ca7fc9d9b8dba295.rlib b/.old/target/debug/deps/libwayland_commons-ca7fc9d9b8dba295.rlib
new file mode 100644
index 0000000..f9161f1
--- /dev/null
+++ b/.old/target/debug/deps/libwayland_commons-ca7fc9d9b8dba295.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libwayland_commons-ca7fc9d9b8dba295.rmeta b/.old/target/debug/deps/libwayland_commons-ca7fc9d9b8dba295.rmeta
new file mode 100644
index 0000000..7ab72f1
--- /dev/null
+++ b/.old/target/debug/deps/libwayland_commons-ca7fc9d9b8dba295.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwayland_csd_frame-0c339fa5d5829989.rmeta b/.old/target/debug/deps/libwayland_csd_frame-0c339fa5d5829989.rmeta
new file mode 100644
index 0000000..be28058
--- /dev/null
+++ b/.old/target/debug/deps/libwayland_csd_frame-0c339fa5d5829989.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwayland_protocols-4d17970ffc2adbfd.rlib b/.old/target/debug/deps/libwayland_protocols-4d17970ffc2adbfd.rlib
new file mode 100644
index 0000000..8d62e3f
--- /dev/null
+++ b/.old/target/debug/deps/libwayland_protocols-4d17970ffc2adbfd.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libwayland_protocols-e123b4c5a47e94a0.rlib b/.old/target/debug/deps/libwayland_protocols-e123b4c5a47e94a0.rlib
new file mode 100644
index 0000000..0db4ae9
--- /dev/null
+++ b/.old/target/debug/deps/libwayland_protocols-e123b4c5a47e94a0.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libwayland_protocols_wlr-c1ccc3095ec8c560.rmeta b/.old/target/debug/deps/libwayland_protocols_wlr-c1ccc3095ec8c560.rmeta
new file mode 100644
index 0000000..654e1e9
--- /dev/null
+++ b/.old/target/debug/deps/libwayland_protocols_wlr-c1ccc3095ec8c560.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwayland_scanner-14da512d11ff82b6.rlib b/.old/target/debug/deps/libwayland_scanner-14da512d11ff82b6.rlib
new file mode 100644
index 0000000..2dbfec0
--- /dev/null
+++ b/.old/target/debug/deps/libwayland_scanner-14da512d11ff82b6.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libwayland_scanner-14da512d11ff82b6.rmeta b/.old/target/debug/deps/libwayland_scanner-14da512d11ff82b6.rmeta
new file mode 100644
index 0000000..d16d113
--- /dev/null
+++ b/.old/target/debug/deps/libwayland_scanner-14da512d11ff82b6.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwgpu-0622e3ad0d6b9a25.rlib b/.old/target/debug/deps/libwgpu-0622e3ad0d6b9a25.rlib
new file mode 100644
index 0000000..47fd227
--- /dev/null
+++ b/.old/target/debug/deps/libwgpu-0622e3ad0d6b9a25.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libwgpu-0622e3ad0d6b9a25.rmeta b/.old/target/debug/deps/libwgpu-0622e3ad0d6b9a25.rmeta
new file mode 100644
index 0000000..475b244
--- /dev/null
+++ b/.old/target/debug/deps/libwgpu-0622e3ad0d6b9a25.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwgpu_core-a7d442c878bb374f.rmeta b/.old/target/debug/deps/libwgpu_core-a7d442c878bb374f.rmeta
new file mode 100644
index 0000000..721b6d4
--- /dev/null
+++ b/.old/target/debug/deps/libwgpu_core-a7d442c878bb374f.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwgpu_core-b4f1dd42a9332eaa.rmeta b/.old/target/debug/deps/libwgpu_core-b4f1dd42a9332eaa.rmeta
new file mode 100644
index 0000000..3830461
--- /dev/null
+++ b/.old/target/debug/deps/libwgpu_core-b4f1dd42a9332eaa.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwgpu_hal-8d5be10925799804.rlib b/.old/target/debug/deps/libwgpu_hal-8d5be10925799804.rlib
new file mode 100644
index 0000000..edfd9c1
--- /dev/null
+++ b/.old/target/debug/deps/libwgpu_hal-8d5be10925799804.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libwgpu_hal-98126f530bacc970.rlib b/.old/target/debug/deps/libwgpu_hal-98126f530bacc970.rlib
new file mode 100644
index 0000000..80ffdb8
--- /dev/null
+++ b/.old/target/debug/deps/libwgpu_hal-98126f530bacc970.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libwgpu_hal-98126f530bacc970.rmeta b/.old/target/debug/deps/libwgpu_hal-98126f530bacc970.rmeta
new file mode 100644
index 0000000..872c334
--- /dev/null
+++ b/.old/target/debug/deps/libwgpu_hal-98126f530bacc970.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwgpu_types-21203fac3b1be598.rmeta b/.old/target/debug/deps/libwgpu_types-21203fac3b1be598.rmeta
new file mode 100644
index 0000000..bece84d
--- /dev/null
+++ b/.old/target/debug/deps/libwgpu_types-21203fac3b1be598.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwinit-0135c0e67e9d97d5.rlib b/.old/target/debug/deps/libwinit-0135c0e67e9d97d5.rlib
new file mode 100644
index 0000000..80c06c0
--- /dev/null
+++ b/.old/target/debug/deps/libwinit-0135c0e67e9d97d5.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libwinit-0135c0e67e9d97d5.rmeta b/.old/target/debug/deps/libwinit-0135c0e67e9d97d5.rmeta
new file mode 100644
index 0000000..1f0438f
--- /dev/null
+++ b/.old/target/debug/deps/libwinit-0135c0e67e9d97d5.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwinit-0d7eda34b53aee67.rmeta b/.old/target/debug/deps/libwinit-0d7eda34b53aee67.rmeta
new file mode 100644
index 0000000..b0f7105
--- /dev/null
+++ b/.old/target/debug/deps/libwinit-0d7eda34b53aee67.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libwinit-4fadca74212bd92c.rlib b/.old/target/debug/deps/libwinit-4fadca74212bd92c.rlib
new file mode 100644
index 0000000..8264e20
--- /dev/null
+++ b/.old/target/debug/deps/libwinit-4fadca74212bd92c.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libwinit-b864db7ddc73df13.rmeta b/.old/target/debug/deps/libwinit-b864db7ddc73df13.rmeta
new file mode 100644
index 0000000..27640c9
--- /dev/null
+++ b/.old/target/debug/deps/libwinit-b864db7ddc73df13.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libx11_dl-529fae40c2816ad8.rlib b/.old/target/debug/deps/libx11_dl-529fae40c2816ad8.rlib
new file mode 100644
index 0000000..02d1e16
--- /dev/null
+++ b/.old/target/debug/deps/libx11_dl-529fae40c2816ad8.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libx11_dl-ab1a2213fc394a4b.rmeta b/.old/target/debug/deps/libx11_dl-ab1a2213fc394a4b.rmeta
new file mode 100644
index 0000000..c44a2cc
--- /dev/null
+++ b/.old/target/debug/deps/libx11_dl-ab1a2213fc394a4b.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libx11rb-ab62fcfcf70cb2f0.rlib b/.old/target/debug/deps/libx11rb-ab62fcfcf70cb2f0.rlib
new file mode 100644
index 0000000..87f938c
--- /dev/null
+++ b/.old/target/debug/deps/libx11rb-ab62fcfcf70cb2f0.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libx11rb-ab62fcfcf70cb2f0.rmeta b/.old/target/debug/deps/libx11rb-ab62fcfcf70cb2f0.rmeta
new file mode 100644
index 0000000..910a5e3
--- /dev/null
+++ b/.old/target/debug/deps/libx11rb-ab62fcfcf70cb2f0.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libx11rb-c1def47bb7d7b0a1.rmeta b/.old/target/debug/deps/libx11rb-c1def47bb7d7b0a1.rmeta
new file mode 100644
index 0000000..3f78ed7
--- /dev/null
+++ b/.old/target/debug/deps/libx11rb-c1def47bb7d7b0a1.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libx11rb_protocol-7648e18e332b3c2e.rmeta b/.old/target/debug/deps/libx11rb_protocol-7648e18e332b3c2e.rmeta
new file mode 100644
index 0000000..0a06224
--- /dev/null
+++ b/.old/target/debug/deps/libx11rb_protocol-7648e18e332b3c2e.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libxcursor-08657c2b3a174fba.rlib b/.old/target/debug/deps/libxcursor-08657c2b3a174fba.rlib
new file mode 100644
index 0000000..90e2fe0
--- /dev/null
+++ b/.old/target/debug/deps/libxcursor-08657c2b3a174fba.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libxcursor-08657c2b3a174fba.rmeta b/.old/target/debug/deps/libxcursor-08657c2b3a174fba.rmeta
new file mode 100644
index 0000000..d97f825
--- /dev/null
+++ b/.old/target/debug/deps/libxcursor-08657c2b3a174fba.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libxkbcommon_dl-a9de440c743ed994.rmeta b/.old/target/debug/deps/libxkbcommon_dl-a9de440c743ed994.rmeta
new file mode 100644
index 0000000..86a9272
--- /dev/null
+++ b/.old/target/debug/deps/libxkbcommon_dl-a9de440c743ed994.rmeta
Binary files differ
diff --git a/.old/target/debug/deps/libxkeysym-5f68b5da6eaed5c6.rlib b/.old/target/debug/deps/libxkeysym-5f68b5da6eaed5c6.rlib
new file mode 100644
index 0000000..e36b2fb
--- /dev/null
+++ b/.old/target/debug/deps/libxkeysym-5f68b5da6eaed5c6.rlib
Binary files differ
diff --git a/.old/target/debug/deps/libzerocopy-19ff0a49874433f9.rlib b/.old/target/debug/deps/libzerocopy-19ff0a49874433f9.rlib
new file mode 100644
index 0000000..549a9f3
--- /dev/null
+++ b/.old/target/debug/deps/libzerocopy-19ff0a49874433f9.rlib
Binary files differ
diff --git a/.old/target/debug/deps/linux_raw_sys-501ed64292a9e1b5.d b/.old/target/debug/deps/linux_raw_sys-501ed64292a9e1b5.d
new file mode 100644
index 0000000..946bac8
--- /dev/null
+++ b/.old/target/debug/deps/linux_raw_sys-501ed64292a9e1b5.d
@@ -0,0 +1,16 @@
+/home/thomas/dev/timeplot/target/debug/deps/linux_raw_sys-501ed64292a9e1b5.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/elf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/errno.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/general.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/if_ether.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/ioctl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/net.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/netlink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/prctl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/xdp.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/liblinux_raw_sys-501ed64292a9e1b5.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/elf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/errno.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/general.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/if_ether.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/ioctl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/net.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/netlink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/prctl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/xdp.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/liblinux_raw_sys-501ed64292a9e1b5.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/elf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/errno.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/general.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/if_ether.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/ioctl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/net.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/netlink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/prctl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/xdp.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/elf.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/errno.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/general.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/if_ether.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/ioctl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/net.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/netlink.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/prctl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/xdp.rs:
diff --git a/.old/target/debug/deps/linux_raw_sys-f407e2b712cc9845.d b/.old/target/debug/deps/linux_raw_sys-f407e2b712cc9845.d
new file mode 100644
index 0000000..0e80e45
--- /dev/null
+++ b/.old/target/debug/deps/linux_raw_sys-f407e2b712cc9845.d
@@ -0,0 +1,14 @@
+/home/thomas/dev/timeplot/target/debug/deps/linux_raw_sys-f407e2b712cc9845.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/elf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/errno.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/general.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/if_ether.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/ioctl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/net.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/netlink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/prctl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/xdp.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/liblinux_raw_sys-f407e2b712cc9845.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/elf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/errno.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/general.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/if_ether.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/ioctl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/net.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/netlink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/prctl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/xdp.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/elf.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/errno.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/general.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/if_ether.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/ioctl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/net.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/netlink.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/prctl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/linux-raw-sys-0.9.4/src/x86_64/xdp.rs:
diff --git a/.old/target/debug/deps/lock_api-79a07689fae3c8c4.d b/.old/target/debug/deps/lock_api-79a07689fae3c8c4.d
new file mode 100644
index 0000000..716a304
--- /dev/null
+++ b/.old/target/debug/deps/lock_api-79a07689fae3c8c4.d
@@ -0,0 +1,8 @@
+/home/thomas/dev/timeplot/target/debug/deps/lock_api-79a07689fae3c8c4.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/mutex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/remutex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/rwlock.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/liblock_api-79a07689fae3c8c4.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/mutex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/remutex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/rwlock.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/mutex.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/remutex.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lock_api-0.4.13/src/rwlock.rs:
diff --git a/.old/target/debug/deps/log-034efab62c7fbfc8.d b/.old/target/debug/deps/log-034efab62c7fbfc8.d
new file mode 100644
index 0000000..4ce70f1
--- /dev/null
+++ b/.old/target/debug/deps/log-034efab62c7fbfc8.d
@@ -0,0 +1,10 @@
+/home/thomas/dev/timeplot/target/debug/deps/log-034efab62c7fbfc8.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/serde.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/__private_api.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/liblog-034efab62c7fbfc8.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/serde.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/__private_api.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/liblog-034efab62c7fbfc8.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/serde.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/__private_api.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/serde.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/log-0.4.27/src/__private_api.rs:
diff --git a/.old/target/debug/deps/memchr-6709e545d5a75bbd.d b/.old/target/debug/deps/memchr-6709e545d5a75bbd.d
new file mode 100644
index 0000000..36ed5e7
--- /dev/null
+++ b/.old/target/debug/deps/memchr-6709e545d5a75bbd.d
@@ -0,0 +1,33 @@
+/home/thomas/dev/timeplot/target/debug/deps/memchr-6709e545d5a75bbd.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/packedpair/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/packedpair/default_rank.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/rabinkarp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/shiftor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/twoway.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/packedpair.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/packedpair.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/packedpair.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/cow.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memmem/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memmem/searcher.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/vector.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libmemchr-6709e545d5a75bbd.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/packedpair/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/packedpair/default_rank.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/rabinkarp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/shiftor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/twoway.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/packedpair.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/packedpair.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/packedpair.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/cow.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memmem/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memmem/searcher.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/vector.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libmemchr-6709e545d5a75bbd.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/packedpair/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/packedpair/default_rank.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/rabinkarp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/shiftor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/twoway.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/packedpair.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/packedpair.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/packedpair.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/cow.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memmem/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memmem/searcher.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/vector.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/memchr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/packedpair/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/packedpair/default_rank.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/rabinkarp.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/shiftor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/all/twoway.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/memchr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/generic/packedpair.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/memchr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/avx2/packedpair.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/memchr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/sse2/packedpair.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/arch/x86_64/memchr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/cow.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/ext.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memchr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memmem/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/memmem/searcher.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memchr-2.7.5/src/vector.rs:
diff --git a/.old/target/debug/deps/memmap2-c420ca3b3d7cee19.d b/.old/target/debug/deps/memmap2-c420ca3b3d7cee19.d
new file mode 100644
index 0000000..729d674
--- /dev/null
+++ b/.old/target/debug/deps/memmap2-c420ca3b3d7cee19.d
@@ -0,0 +1,9 @@
+/home/thomas/dev/timeplot/target/debug/deps/memmap2-c420ca3b3d7cee19.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/unix.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/advice.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libmemmap2-c420ca3b3d7cee19.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/unix.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/advice.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libmemmap2-c420ca3b3d7cee19.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/unix.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/advice.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/unix.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/memmap2-0.9.7/src/advice.rs:
diff --git a/.old/target/debug/deps/mio-11c27f1a740cf3eb.d b/.old/target/debug/deps/mio-11c27f1a740cf3eb.d
new file mode 100644
index 0000000..0bf370e
--- /dev/null
+++ b/.old/target/debug/deps/mio-11c27f1a740cf3eb.d
@@ -0,0 +1,40 @@
+/home/thomas/dev/timeplot/target/debug/deps/mio-11c27f1a740cf3eb.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/interest.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/token.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/waker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/events.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/epoll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/waker/eventfd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/sourcefd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/pipe.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/stateless_io_source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/net.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/tcp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/datagram.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/io_source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/datagram.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/stream.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libmio-11c27f1a740cf3eb.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/interest.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/token.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/waker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/events.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/epoll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/waker/eventfd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/sourcefd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/pipe.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/stateless_io_source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/net.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/tcp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/datagram.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/io_source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/datagram.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/stream.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libmio-11c27f1a740cf3eb.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/interest.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/token.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/waker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/events.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/epoll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/waker/eventfd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/sourcefd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/pipe.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/stateless_io_source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/net.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/tcp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/datagram.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/io_source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/datagram.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/stream.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/interest.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/poll.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/token.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/waker.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/event.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/events.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/source.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/epoll.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/waker/eventfd.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/sourcefd.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/pipe.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/stateless_io_source.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/net.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/tcp.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/udp.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/datagram.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/listener.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/stream.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/io_source.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/listener.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/stream.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/udp.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/datagram.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/listener.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/stream.rs:
diff --git a/.old/target/debug/deps/mio-e5f40431e402393e.d b/.old/target/debug/deps/mio-e5f40431e402393e.d
new file mode 100644
index 0000000..ecf98e7
--- /dev/null
+++ b/.old/target/debug/deps/mio-e5f40431e402393e.d
@@ -0,0 +1,38 @@
+/home/thomas/dev/timeplot/target/debug/deps/mio-e5f40431e402393e.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/interest.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/token.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/waker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/events.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/epoll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/waker/eventfd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/sourcefd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/pipe.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/stateless_io_source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/net.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/tcp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/datagram.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/io_source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/datagram.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/stream.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libmio-e5f40431e402393e.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/interest.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/token.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/waker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/events.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/epoll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/waker/eventfd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/sourcefd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/pipe.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/stateless_io_source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/net.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/tcp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/datagram.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/io_source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/datagram.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/stream.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/interest.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/poll.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/token.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/waker.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/event.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/events.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/event/source.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/epoll.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/waker/eventfd.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/sourcefd.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/pipe.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/selector/stateless_io_source.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/net.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/tcp.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/udp.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/datagram.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/listener.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/sys/unix/uds/stream.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/io_source.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/listener.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/tcp/stream.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/udp.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/datagram.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/listener.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.0.4/src/net/uds/stream.rs:
diff --git a/.old/target/debug/deps/naga-4b3a1e8a6318d0dd.d b/.old/target/debug/deps/naga-4b3a1e8a6318d0dd.d
new file mode 100644
index 0000000..903ac7c
--- /dev/null
+++ b/.old/target/debug/deps/naga-4b3a1e8a6318d0dd.d
@@ -0,0 +1,73 @@
+/home/thomas/dev/timeplot/target/debug/deps/naga-4b3a1e8a6318d0dd.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle_set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handlevec.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/unique_arena.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/features.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/keywords.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/helpers.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/image.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/instructions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/layout.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/ray.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/recyclable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/selection.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/subgroup.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/writer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/pipeline_constants.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/expressions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/functions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/handle_set_map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/statements.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/types.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/interpolator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/type_gen.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/construction.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/conversion.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/ast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/lexer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/number.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/to_wgsl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/wgsl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/non_max_u32.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/constant_evaluator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/emitter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/layouter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/namer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/terminator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/typifier.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/analyzer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/compose.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/expression.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/function.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/handles.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/interface.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/type.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libnaga-4b3a1e8a6318d0dd.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle_set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handlevec.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/unique_arena.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/features.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/keywords.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/helpers.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/image.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/instructions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/layout.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/ray.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/recyclable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/selection.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/subgroup.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/writer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/pipeline_constants.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/expressions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/functions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/handle_set_map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/statements.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/types.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/interpolator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/type_gen.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/construction.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/conversion.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/ast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/lexer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/number.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/to_wgsl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/wgsl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/non_max_u32.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/constant_evaluator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/emitter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/layouter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/namer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/terminator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/typifier.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/analyzer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/compose.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/expression.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/function.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/handles.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/interface.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/type.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libnaga-4b3a1e8a6318d0dd.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle_set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handlevec.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/unique_arena.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/features.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/keywords.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/helpers.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/image.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/instructions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/layout.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/ray.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/recyclable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/selection.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/subgroup.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/writer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/pipeline_constants.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/expressions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/functions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/handle_set_map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/statements.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/types.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/interpolator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/type_gen.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/construction.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/conversion.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/ast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/lexer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/number.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/to_wgsl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/wgsl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/non_max_u32.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/constant_evaluator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/emitter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/layouter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/namer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/terminator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/typifier.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/analyzer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/compose.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/expression.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/function.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/handles.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/interface.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/type.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle_set.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handlevec.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/range.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/unique_arena.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/features.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/keywords.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/block.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/helpers.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/image.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/index.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/instructions.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/layout.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/ray.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/recyclable.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/selection.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/subgroup.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/writer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/pipeline_constants.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/block.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/expressions.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/functions.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/handle_set_map.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/statements.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/types.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/interpolator.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/type_gen.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/index.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/construction.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/conversion.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/ast.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/conv.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/lexer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/number.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/to_wgsl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/wgsl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/non_max_u32.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/constant_evaluator.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/emitter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/index.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/layouter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/namer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/terminator.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/typifier.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/span.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/analyzer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/compose.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/expression.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/function.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/handles.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/interface.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/type.rs:
diff --git a/.old/target/debug/deps/naga-7c6b38cefadfa9db.d b/.old/target/debug/deps/naga-7c6b38cefadfa9db.d
new file mode 100644
index 0000000..695e5f6
--- /dev/null
+++ b/.old/target/debug/deps/naga-7c6b38cefadfa9db.d
@@ -0,0 +1,71 @@
+/home/thomas/dev/timeplot/target/debug/deps/naga-7c6b38cefadfa9db.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle_set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handlevec.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/unique_arena.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/features.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/keywords.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/helpers.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/image.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/instructions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/layout.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/ray.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/recyclable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/selection.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/subgroup.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/writer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/pipeline_constants.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/expressions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/functions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/handle_set_map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/statements.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/types.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/interpolator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/type_gen.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/construction.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/conversion.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/ast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/lexer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/number.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/to_wgsl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/wgsl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/non_max_u32.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/constant_evaluator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/emitter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/layouter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/namer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/terminator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/typifier.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/analyzer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/compose.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/expression.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/function.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/handles.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/interface.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/type.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libnaga-7c6b38cefadfa9db.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle_set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handlevec.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/unique_arena.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/features.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/keywords.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/helpers.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/image.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/instructions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/layout.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/ray.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/recyclable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/selection.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/subgroup.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/writer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/pipeline_constants.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/expressions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/functions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/handle_set_map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/statements.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/types.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/interpolator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/type_gen.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/construction.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/conversion.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/ast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/lexer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/number.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/to_wgsl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/wgsl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/non_max_u32.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/constant_evaluator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/emitter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/index.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/layouter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/namer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/terminator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/typifier.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/analyzer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/compose.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/expression.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/function.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/handles.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/interface.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/type.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handle_set.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/handlevec.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/range.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/arena/unique_arena.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/features.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/glsl/keywords.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/block.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/helpers.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/image.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/index.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/instructions.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/layout.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/ray.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/recyclable.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/selection.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/subgroup.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/spv/writer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/back/pipeline_constants.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/block.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/expressions.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/functions.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/handle_set_map.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/statements.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/compact/types.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/interpolator.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/type_gen.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/index.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/construction.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/lower/conversion.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/ast.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/conv.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/lexer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/parse/number.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/front/wgsl/to_wgsl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/keywords/wgsl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/non_max_u32.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/constant_evaluator.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/emitter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/index.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/layouter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/namer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/terminator.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/proc/typifier.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/span.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/analyzer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/compose.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/expression.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/function.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/handles.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/interface.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/naga-22.1.0/src/valid/type.rs:
diff --git a/.old/target/debug/deps/nix-e7204a1d635ea85d.d b/.old/target/debug/deps/nix-e7204a1d635ea85d.d
new file mode 100644
index 0000000..75a6adf
--- /dev/null
+++ b/.old/target/debug/deps/nix-e7204a1d635ea85d.d
@@ -0,0 +1,26 @@
+/home/thomas/dev/timeplot/target/debug/deps/nix-e7204a1d635ea85d.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/errno.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/fcntl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/signal.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/sysinfo.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/time.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/unistd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/memfd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/mman.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/select.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/addr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/sockopt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/stat.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/statfs.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/statvfs.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/uio.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libnix-e7204a1d635ea85d.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/errno.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/fcntl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/signal.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/sysinfo.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/time.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/unistd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/memfd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/mman.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/select.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/addr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/sockopt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/stat.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/statfs.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/statvfs.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/uio.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libnix-e7204a1d635ea85d.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/errno.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/fcntl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/signal.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/sysinfo.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/time.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/unistd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/memfd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/mman.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/select.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/addr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/sockopt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/stat.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/statfs.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/statvfs.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/uio.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/errno.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/fcntl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/signal.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/sysinfo.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/time.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/unistd.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/poll.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/memfd.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/mman.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/select.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/addr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/socket/sockopt.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/stat.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/statfs.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/statvfs.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nix-0.24.3/src/sys/uio.rs:
diff --git a/.old/target/debug/deps/nu_ansi_term-f0dd67bbc4fc7bc7.d b/.old/target/debug/deps/nu_ansi_term-f0dd67bbc4fc7bc7.d
new file mode 100644
index 0000000..e1fd9db
--- /dev/null
+++ b/.old/target/debug/deps/nu_ansi_term-f0dd67bbc4fc7bc7.d
@@ -0,0 +1,17 @@
+/home/thomas/dev/timeplot/target/debug/deps/nu_ansi_term-f0dd67bbc4fc7bc7.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/ansi.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/style.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/difference.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/windows.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/rgb.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libnu_ansi_term-f0dd67bbc4fc7bc7.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/ansi.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/style.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/difference.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/windows.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/rgb.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libnu_ansi_term-f0dd67bbc4fc7bc7.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/ansi.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/style.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/difference.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/windows.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/rgb.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/ansi.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/style.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/difference.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/display.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/write.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/windows.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/util.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/debug.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/gradient.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/nu-ansi-term-0.46.0/src/rgb.rs:
diff --git a/.old/target/debug/deps/overload-36d6dc4b2c1d5222.d b/.old/target/debug/deps/overload-36d6dc4b2c1d5222.d
new file mode 100644
index 0000000..ca02a9e
--- /dev/null
+++ b/.old/target/debug/deps/overload-36d6dc4b2c1d5222.d
@@ -0,0 +1,10 @@
+/home/thomas/dev/timeplot/target/debug/deps/overload-36d6dc4b2c1d5222.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/unary.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/assignment.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/binary.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/liboverload-36d6dc4b2c1d5222.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/unary.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/assignment.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/binary.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/liboverload-36d6dc4b2c1d5222.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/unary.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/assignment.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/binary.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/unary.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/assignment.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/overload-0.1.1/src/binary.rs:
diff --git a/.old/target/debug/deps/owned_ttf_parser-b06601a019a29880.d b/.old/target/debug/deps/owned_ttf_parser-b06601a019a29880.d
new file mode 100644
index 0000000..d6ed603
--- /dev/null
+++ b/.old/target/debug/deps/owned_ttf_parser-b06601a019a29880.d
@@ -0,0 +1,10 @@
+/home/thomas/dev/timeplot/target/debug/deps/owned_ttf_parser-b06601a019a29880.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/convert.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/owned.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/preparse.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libowned_ttf_parser-b06601a019a29880.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/convert.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/owned.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/preparse.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libowned_ttf_parser-b06601a019a29880.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/convert.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/owned.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/preparse.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/convert.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/owned.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/owned_ttf_parser-0.25.1/src/preparse.rs:
diff --git a/.old/target/debug/deps/parking_lot_core-9d53afdf505a034a.d b/.old/target/debug/deps/parking_lot_core-9d53afdf505a034a.d
new file mode 100644
index 0000000..2765d91
--- /dev/null
+++ b/.old/target/debug/deps/parking_lot_core-9d53afdf505a034a.d
@@ -0,0 +1,13 @@
+/home/thomas/dev/timeplot/target/debug/deps/parking_lot_core-9d53afdf505a034a.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/parking_lot.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/spinwait.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/thread_parker/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/word_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/thread_parker/linux.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libparking_lot_core-9d53afdf505a034a.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/parking_lot.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/spinwait.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/thread_parker/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/word_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/thread_parker/linux.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libparking_lot_core-9d53afdf505a034a.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/parking_lot.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/spinwait.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/thread_parker/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/word_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/thread_parker/linux.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/parking_lot.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/spinwait.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/thread_parker/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/util.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/word_lock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/parking_lot_core-0.9.11/src/thread_parker/linux.rs:
diff --git a/.old/target/debug/deps/percent_encoding-e44e7ec6fb763c39.d b/.old/target/debug/deps/percent_encoding-e44e7ec6fb763c39.d
new file mode 100644
index 0000000..c3912fc
--- /dev/null
+++ b/.old/target/debug/deps/percent_encoding-e44e7ec6fb763c39.d
@@ -0,0 +1,5 @@
+/home/thomas/dev/timeplot/target/debug/deps/percent_encoding-e44e7ec6fb763c39.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/percent-encoding-2.3.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libpercent_encoding-e44e7ec6fb763c39.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/percent-encoding-2.3.1/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/percent-encoding-2.3.1/src/lib.rs:
diff --git a/.old/target/debug/deps/pin_project_lite-5d9e80b75b3eef3f.d b/.old/target/debug/deps/pin_project_lite-5d9e80b75b3eef3f.d
new file mode 100644
index 0000000..80deddb
--- /dev/null
+++ b/.old/target/debug/deps/pin_project_lite-5d9e80b75b3eef3f.d
@@ -0,0 +1,5 @@
+/home/thomas/dev/timeplot/target/debug/deps/pin_project_lite-5d9e80b75b3eef3f.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/pin-project-lite-0.2.16/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libpin_project_lite-5d9e80b75b3eef3f.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/pin-project-lite-0.2.16/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/pin-project-lite-0.2.16/src/lib.rs:
diff --git a/.old/target/debug/deps/profiling-bd63ccd3d77c6c91.d b/.old/target/debug/deps/profiling-bd63ccd3d77c6c91.d
new file mode 100644
index 0000000..43b3ea2
--- /dev/null
+++ b/.old/target/debug/deps/profiling-bd63ccd3d77c6c91.d
@@ -0,0 +1,6 @@
+/home/thomas/dev/timeplot/target/debug/deps/profiling-bd63ccd3d77c6c91.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/profiling-1.0.17/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/profiling-1.0.17/src/empty_impl.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libprofiling-bd63ccd3d77c6c91.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/profiling-1.0.17/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/profiling-1.0.17/src/empty_impl.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/profiling-1.0.17/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/profiling-1.0.17/src/empty_impl.rs:
diff --git a/.old/target/debug/deps/raw_window_handle-5e4b75a356ebfcd3.d b/.old/target/debug/deps/raw_window_handle-5e4b75a356ebfcd3.d
new file mode 100644
index 0000000..f83cff2
--- /dev/null
+++ b/.old/target/debug/deps/raw_window_handle-5e4b75a356ebfcd3.d
@@ -0,0 +1,15 @@
+/home/thomas/dev/timeplot/target/debug/deps/raw_window_handle-5e4b75a356ebfcd3.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/android.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/appkit.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/borrowed.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/haiku.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/ohos.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/redox.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/uikit.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/unix.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/web.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/windows.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libraw_window_handle-5e4b75a356ebfcd3.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/android.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/appkit.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/borrowed.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/haiku.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/ohos.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/redox.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/uikit.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/unix.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/web.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/windows.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/android.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/appkit.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/borrowed.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/haiku.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/ohos.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/redox.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/uikit.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/unix.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/web.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/raw-window-handle-0.6.2/src/windows.rs:
diff --git a/.old/target/debug/deps/rustc_hash-79bd06606779b665.d b/.old/target/debug/deps/rustc_hash-79bd06606779b665.d
new file mode 100644
index 0000000..48b9496
--- /dev/null
+++ b/.old/target/debug/deps/rustc_hash-79bd06606779b665.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/rustc_hash-79bd06606779b665.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rustc-hash-1.1.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/librustc_hash-79bd06606779b665.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rustc-hash-1.1.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/librustc_hash-79bd06606779b665.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rustc-hash-1.1.0/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rustc-hash-1.1.0/src/lib.rs:
diff --git a/.old/target/debug/deps/ryu-9d8193471ee70b21.d b/.old/target/debug/deps/ryu-9d8193471ee70b21.d
new file mode 100644
index 0000000..de689b9
--- /dev/null
+++ b/.old/target/debug/deps/ryu-9d8193471ee70b21.d
@@ -0,0 +1,16 @@
+/home/thomas/dev/timeplot/target/debug/deps/ryu-9d8193471ee70b21.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/buffer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/common.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/d2s.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/d2s_full_table.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/d2s_intrinsics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/digit_table.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/f2s.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/f2s_intrinsics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/pretty/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/pretty/exponent.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/pretty/mantissa.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libryu-9d8193471ee70b21.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/buffer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/common.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/d2s.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/d2s_full_table.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/d2s_intrinsics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/digit_table.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/f2s.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/f2s_intrinsics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/pretty/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/pretty/exponent.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/pretty/mantissa.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/buffer/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/common.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/d2s.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/d2s_full_table.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/d2s_intrinsics.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/digit_table.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/f2s.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/f2s_intrinsics.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/pretty/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/pretty/exponent.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ryu-1.0.20/src/pretty/mantissa.rs:
diff --git a/.old/target/debug/deps/scoped_tls-fccb04c9f627bfb7.d b/.old/target/debug/deps/scoped_tls-fccb04c9f627bfb7.d
new file mode 100644
index 0000000..a9c3b7a
--- /dev/null
+++ b/.old/target/debug/deps/scoped_tls-fccb04c9f627bfb7.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/scoped_tls-fccb04c9f627bfb7.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/scoped-tls-1.0.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libscoped_tls-fccb04c9f627bfb7.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/scoped-tls-1.0.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libscoped_tls-fccb04c9f627bfb7.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/scoped-tls-1.0.1/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/scoped-tls-1.0.1/src/lib.rs:
diff --git a/.old/target/debug/deps/serde-cfdc13fdebaddf47.d b/.old/target/debug/deps/serde-cfdc13fdebaddf47.d
new file mode 100644
index 0000000..a9973c7
--- /dev/null
+++ b/.old/target/debug/deps/serde-cfdc13fdebaddf47.d
@@ -0,0 +1,24 @@
+/home/thomas/dev/timeplot/target/debug/deps/serde-cfdc13fdebaddf47.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/integer128.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/value.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/ignored_any.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/impls.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/size_hint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/fmt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impls.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impossible.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/format.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/de.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/ser.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/doc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/seed.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libserde-cfdc13fdebaddf47.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/integer128.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/value.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/ignored_any.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/impls.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/size_hint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/fmt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impls.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impossible.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/format.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/de.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/ser.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/doc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/seed.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libserde-cfdc13fdebaddf47.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/integer128.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/value.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/ignored_any.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/impls.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/size_hint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/fmt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impls.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impossible.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/format.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/de.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/ser.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/doc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/seed.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/integer128.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/value.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/ignored_any.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/impls.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/size_hint.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/fmt.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impls.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impossible.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/format.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/de.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/ser.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/doc.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/seed.rs:
diff --git a/.old/target/debug/deps/serde-f3019f65dae2a769.d b/.old/target/debug/deps/serde-f3019f65dae2a769.d
new file mode 100644
index 0000000..1cd04f6
--- /dev/null
+++ b/.old/target/debug/deps/serde-f3019f65dae2a769.d
@@ -0,0 +1,22 @@
+/home/thomas/dev/timeplot/target/debug/deps/serde-f3019f65dae2a769.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/integer128.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/value.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/ignored_any.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/impls.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/size_hint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/fmt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impls.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impossible.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/format.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/de.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/ser.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/doc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/seed.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libserde-f3019f65dae2a769.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/integer128.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/value.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/ignored_any.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/impls.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/size_hint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/fmt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impls.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impossible.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/format.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/de.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/ser.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/doc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/seed.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/integer128.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/value.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/ignored_any.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/impls.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/size_hint.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/fmt.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impls.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/ser/impossible.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/format.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/de.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/ser.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/private/doc.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.219/src/de/seed.rs:
diff --git a/.old/target/debug/deps/simd_adler32-0032f95de74ec7da.d b/.old/target/debug/deps/simd_adler32-0032f95de74ec7da.d
new file mode 100644
index 0000000..dc7d9b6
--- /dev/null
+++ b/.old/target/debug/deps/simd_adler32-0032f95de74ec7da.d
@@ -0,0 +1,15 @@
+/home/thomas/dev/timeplot/target/debug/deps/simd_adler32-0032f95de74ec7da.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/hash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/avx2.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/avx512.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/scalar.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/sse2.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/ssse3.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/wasm.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libsimd_adler32-0032f95de74ec7da.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/hash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/avx2.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/avx512.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/scalar.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/sse2.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/ssse3.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/wasm.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libsimd_adler32-0032f95de74ec7da.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/hash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/avx2.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/avx512.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/scalar.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/sse2.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/ssse3.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/wasm.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/hash.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/avx2.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/avx512.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/scalar.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/sse2.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/ssse3.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/simd-adler32-0.3.7/src/imp/wasm.rs:
diff --git a/.old/target/debug/deps/slab-2f88cc462e1fe922.d b/.old/target/debug/deps/slab-2f88cc462e1fe922.d
new file mode 100644
index 0000000..447b030
--- /dev/null
+++ b/.old/target/debug/deps/slab-2f88cc462e1fe922.d
@@ -0,0 +1,8 @@
+/home/thomas/dev/timeplot/target/debug/deps/slab-2f88cc462e1fe922.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/slab-0.4.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/slab-0.4.11/src/builder.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libslab-2f88cc462e1fe922.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/slab-0.4.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/slab-0.4.11/src/builder.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libslab-2f88cc462e1fe922.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/slab-0.4.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/slab-0.4.11/src/builder.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/slab-0.4.11/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/slab-0.4.11/src/builder.rs:
diff --git a/.old/target/debug/deps/smallvec-f2b0a108f87ec86e.d b/.old/target/debug/deps/smallvec-f2b0a108f87ec86e.d
new file mode 100644
index 0000000..879aa74
--- /dev/null
+++ b/.old/target/debug/deps/smallvec-f2b0a108f87ec86e.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/smallvec-f2b0a108f87ec86e.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smallvec-1.15.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libsmallvec-f2b0a108f87ec86e.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smallvec-1.15.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libsmallvec-f2b0a108f87ec86e.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smallvec-1.15.1/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smallvec-1.15.1/src/lib.rs:
diff --git a/.old/target/debug/deps/smithay_client_toolkit-9472249ffb6b3fe2.d b/.old/target/debug/deps/smithay_client_toolkit-9472249ffb6b3fe2.d
new file mode 100644
index 0000000..bbfa81c
--- /dev/null
+++ b/.old/target/debug/deps/smithay_client_toolkit-9472249ffb6b3fe2.d
@@ -0,0 +1,35 @@
+/home/thomas/dev/timeplot/target/debug/deps/smithay_client_toolkit-9472249ffb6b3fe2.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/offer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/environment.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/lazy_global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/output.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/offer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/pointer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/pointer/theme.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/wl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/xdg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/zxdg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shm/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shm/mempool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/window/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/window/fallback_frame.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/event_loop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/surface.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/ffi.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/keysyms.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libsmithay_client_toolkit-9472249ffb6b3fe2.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/offer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/environment.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/lazy_global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/output.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/offer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/pointer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/pointer/theme.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/wl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/xdg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/zxdg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shm/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shm/mempool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/window/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/window/fallback_frame.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/event_loop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/surface.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/ffi.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/keysyms.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libsmithay_client_toolkit-9472249ffb6b3fe2.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/offer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/environment.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/lazy_global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/output.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/offer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/pointer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/pointer/theme.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/wl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/xdg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/zxdg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shm/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shm/mempool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/window/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/window/fallback_frame.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/event_loop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/surface.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/ffi.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/keysyms.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/offer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/data_device/source.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/environment.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/lazy_global.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/output.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/offer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/primary_selection/source.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/state.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/pointer/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/pointer/theme.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/wl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/xdg.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shell/zxdg.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shm/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/shm/mempool.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/window/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/window/fallback_frame.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/event_loop.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/surface.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/ffi.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smithay-client-toolkit-0.16.1/src/seat/keyboard/keysyms.rs:
diff --git a/.old/target/debug/deps/socket2-0fc0429a34d75b95.d b/.old/target/debug/deps/socket2-0fc0429a34d75b95.d
new file mode 100644
index 0000000..7b4ed1b
--- /dev/null
+++ b/.old/target/debug/deps/socket2-0fc0429a34d75b95.d
@@ -0,0 +1,11 @@
+/home/thomas/dev/timeplot/target/debug/deps/socket2-0fc0429a34d75b95.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockaddr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockref.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sys/unix.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libsocket2-0fc0429a34d75b95.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockaddr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockref.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sys/unix.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libsocket2-0fc0429a34d75b95.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockaddr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockref.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sys/unix.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockaddr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/socket.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockref.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sys/unix.rs:
diff --git a/.old/target/debug/deps/socket2-5699d2852efdcbaa.d b/.old/target/debug/deps/socket2-5699d2852efdcbaa.d
new file mode 100644
index 0000000..498e265
--- /dev/null
+++ b/.old/target/debug/deps/socket2-5699d2852efdcbaa.d
@@ -0,0 +1,9 @@
+/home/thomas/dev/timeplot/target/debug/deps/socket2-5699d2852efdcbaa.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockaddr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockref.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sys/unix.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libsocket2-5699d2852efdcbaa.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockaddr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockref.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sys/unix.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockaddr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/socket.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sockref.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/socket2-0.6.0/src/sys/unix.rs:
diff --git a/.old/target/debug/deps/static_assertions-f0a9439e0694ace3.d b/.old/target/debug/deps/static_assertions-f0a9439e0694ace3.d
new file mode 100644
index 0000000..e8f20cf
--- /dev/null
+++ b/.old/target/debug/deps/static_assertions-f0a9439e0694ace3.d
@@ -0,0 +1,14 @@
+/home/thomas/dev/timeplot/target/debug/deps/static_assertions-f0a9439e0694ace3.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_cfg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_eq_align.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_eq_size.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_fields.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_impl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_obj_safe.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_trait.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_type.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/const_assert.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libstatic_assertions-f0a9439e0694ace3.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_cfg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_eq_align.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_eq_size.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_fields.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_impl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_obj_safe.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_trait.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_type.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/const_assert.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_cfg.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_eq_align.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_eq_size.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_fields.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_impl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_obj_safe.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_trait.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/assert_type.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/static_assertions-1.1.0/src/const_assert.rs:
diff --git a/.old/target/debug/deps/strict_num-800bd13c1bbdfb48.d b/.old/target/debug/deps/strict_num-800bd13c1bbdfb48.d
new file mode 100644
index 0000000..b2941ac
--- /dev/null
+++ b/.old/target/debug/deps/strict_num-800bd13c1bbdfb48.d
@@ -0,0 +1,5 @@
+/home/thomas/dev/timeplot/target/debug/deps/strict_num-800bd13c1bbdfb48.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/strict-num-0.1.1/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libstrict_num-800bd13c1bbdfb48.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/strict-num-0.1.1/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/strict-num-0.1.1/src/lib.rs:
diff --git a/.old/target/debug/deps/syn-89bce6a93f3c3a67.d b/.old/target/debug/deps/syn-89bce6a93f3c3a67.d
new file mode 100644
index 0000000..61d118a
--- /dev/null
+++ b/.old/target/debug/deps/syn-89bce6a93f3c3a67.d
@@ -0,0 +1,49 @@
+/home/thomas/dev/timeplot/target/debug/deps/syn-89bce6a93f3c3a67.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/group.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/token.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/attr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/bigint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/classify.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/custom_keyword.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/custom_punctuation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/data.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/derive.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/drops.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/expr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/fixup.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/generics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ident.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lifetime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lit.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lookahead.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/mac.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/meta.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/op.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/discouraged.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse_macro_input.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse_quote.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/path.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/precedence.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/print.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/punctuated.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/restriction.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/sealed.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/scan_expr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/spanned.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/thread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/verbatim.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/export.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/gen/clone.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libsyn-89bce6a93f3c3a67.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/group.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/token.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/attr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/bigint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/classify.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/custom_keyword.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/custom_punctuation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/data.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/derive.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/drops.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/expr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/fixup.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/generics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ident.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lifetime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lit.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lookahead.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/mac.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/meta.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/op.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/discouraged.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse_macro_input.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse_quote.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/path.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/precedence.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/print.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/punctuated.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/restriction.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/sealed.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/scan_expr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/spanned.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/thread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/verbatim.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/export.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/gen/clone.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libsyn-89bce6a93f3c3a67.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/group.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/token.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/attr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/bigint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/classify.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/custom_keyword.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/custom_punctuation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/data.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/derive.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/drops.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/expr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/fixup.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/generics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ident.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lifetime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lit.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lookahead.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/mac.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/meta.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/op.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/discouraged.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse_macro_input.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse_quote.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/path.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/precedence.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/print.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/punctuated.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/restriction.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/sealed.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/scan_expr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/spanned.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/thread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/verbatim.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/export.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/gen/clone.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/group.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/token.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/attr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/bigint.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/buffer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/classify.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/custom_keyword.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/custom_punctuation.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/data.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/derive.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/drops.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/expr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ext.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/fixup.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/generics.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ident.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lifetime.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lit.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/lookahead.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/mac.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/meta.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/op.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/discouraged.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse_macro_input.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/parse_quote.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/path.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/precedence.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/print.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/punctuated.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/restriction.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/sealed.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/scan_expr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/span.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/spanned.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/thread.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/ty.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/verbatim.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/export.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/syn-2.0.106/src/gen/clone.rs:
diff --git a/.old/target/debug/deps/thiserror-48476edc3b53c953.d b/.old/target/debug/deps/thiserror-48476edc3b53c953.d
new file mode 100644
index 0000000..aa3bd28
--- /dev/null
+++ b/.old/target/debug/deps/thiserror-48476edc3b53c953.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/thiserror-48476edc3b53c953.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-1.0.69/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-1.0.69/src/aserror.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-1.0.69/src/display.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libthiserror-48476edc3b53c953.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-1.0.69/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-1.0.69/src/aserror.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-1.0.69/src/display.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-1.0.69/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-1.0.69/src/aserror.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-1.0.69/src/display.rs:
diff --git a/.old/target/debug/deps/thiserror_impl-18f04be846c9d48e.d b/.old/target/debug/deps/thiserror_impl-18f04be846c9d48e.d
new file mode 100644
index 0000000..18c8385
--- /dev/null
+++ b/.old/target/debug/deps/thiserror_impl-18f04be846c9d48e.d
@@ -0,0 +1,14 @@
+/home/thomas/dev/timeplot/target/debug/deps/thiserror_impl-18f04be846c9d48e.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/ast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/attr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/expand.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/fmt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/generics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/prop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/scan_expr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/valid.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libthiserror_impl-18f04be846c9d48e.so: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/ast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/attr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/expand.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/fmt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/generics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/prop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/scan_expr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/valid.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/ast.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/attr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/expand.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/fmt.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/generics.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/prop.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/scan_expr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/span.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/valid.rs:
diff --git a/.old/target/debug/deps/thiserror_impl-438c02baa125bc3f.d b/.old/target/debug/deps/thiserror_impl-438c02baa125bc3f.d
new file mode 100644
index 0000000..0314b2b
--- /dev/null
+++ b/.old/target/debug/deps/thiserror_impl-438c02baa125bc3f.d
@@ -0,0 +1,14 @@
+/home/thomas/dev/timeplot/target/debug/deps/thiserror_impl-438c02baa125bc3f.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/ast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/attr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/expand.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/fmt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/generics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/prop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/scan_expr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/valid.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libthiserror_impl-438c02baa125bc3f.so: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/ast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/attr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/expand.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/fmt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/generics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/prop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/scan_expr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/valid.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/ast.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/attr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/expand.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/fmt.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/generics.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/prop.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/scan_expr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/span.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/thiserror-impl-1.0.69/src/valid.rs:
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.0g688e14pk3if2ovecfl3m4l5.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.0g688e14pk3if2ovecfl3m4l5.0c54iii.rcgu.o
new file mode 100644
index 0000000..8c87f8e
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.0g688e14pk3if2ovecfl3m4l5.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.0gbbnciwf3i0wl7k8aj9cauzi.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.0gbbnciwf3i0wl7k8aj9cauzi.0c54iii.rcgu.o
new file mode 100644
index 0000000..bd3d7cc
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.0gbbnciwf3i0wl7k8aj9cauzi.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.0ghp3d3j8a5nxudzcmkdwyw0s.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.0ghp3d3j8a5nxudzcmkdwyw0s.0c54iii.rcgu.o
new file mode 100644
index 0000000..f9aa5e0
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.0ghp3d3j8a5nxudzcmkdwyw0s.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.0hjryizp23bcpbvha6fy0ggwu.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.0hjryizp23bcpbvha6fy0ggwu.0c54iii.rcgu.o
new file mode 100644
index 0000000..6291ded
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.0hjryizp23bcpbvha6fy0ggwu.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.12t50zr191e342mg1qpauuuag.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.12t50zr191e342mg1qpauuuag.0c54iii.rcgu.o
new file mode 100644
index 0000000..51a0a7f
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.12t50zr191e342mg1qpauuuag.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.15teke8tiwjs6fr6gdslbzaw8.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.15teke8tiwjs6fr6gdslbzaw8.0c54iii.rcgu.o
new file mode 100644
index 0000000..bdb8f19
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.15teke8tiwjs6fr6gdslbzaw8.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.18zjmpuz5fybyzcrds87f93pg.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.18zjmpuz5fybyzcrds87f93pg.0c54iii.rcgu.o
new file mode 100644
index 0000000..0e33ae3
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.18zjmpuz5fybyzcrds87f93pg.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.1yy2zzxqqwbtr190wf2fc7i1n.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.1yy2zzxqqwbtr190wf2fc7i1n.0c54iii.rcgu.o
new file mode 100644
index 0000000..89cfe4a
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.1yy2zzxqqwbtr190wf2fc7i1n.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.26klwamt57idkkrbjwlq6knti.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.26klwamt57idkkrbjwlq6knti.0c54iii.rcgu.o
new file mode 100644
index 0000000..e02e320
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.26klwamt57idkkrbjwlq6knti.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.2ghl9cla2byttpjbxh1r55ehp.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.2ghl9cla2byttpjbxh1r55ehp.0c54iii.rcgu.o
new file mode 100644
index 0000000..8bae693
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.2ghl9cla2byttpjbxh1r55ehp.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.2mme4gejvpy0hmm3wxcy3kn6l.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.2mme4gejvpy0hmm3wxcy3kn6l.0c54iii.rcgu.o
new file mode 100644
index 0000000..32b5a15
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.2mme4gejvpy0hmm3wxcy3kn6l.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.2mp1pp9t18xxt7wcxl7ne3jgh.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.2mp1pp9t18xxt7wcxl7ne3jgh.0c54iii.rcgu.o
new file mode 100644
index 0000000..0faa97e
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.2mp1pp9t18xxt7wcxl7ne3jgh.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.2or7wohnr34oz6i79pc2n9dj5.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.2or7wohnr34oz6i79pc2n9dj5.0c54iii.rcgu.o
new file mode 100644
index 0000000..8871ad7
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.2or7wohnr34oz6i79pc2n9dj5.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.361jyf3q6kf4xin6zudyikmdi.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.361jyf3q6kf4xin6zudyikmdi.0c54iii.rcgu.o
new file mode 100644
index 0000000..e1feb7f
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.361jyf3q6kf4xin6zudyikmdi.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.3ego2g5qnfa8yyftnvy9zei5n.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.3ego2g5qnfa8yyftnvy9zei5n.0c54iii.rcgu.o
new file mode 100644
index 0000000..bfab255
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.3ego2g5qnfa8yyftnvy9zei5n.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.3kdq4s0rt3qelm5wp1xm3a4gu.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.3kdq4s0rt3qelm5wp1xm3a4gu.0c54iii.rcgu.o
new file mode 100644
index 0000000..5194200
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.3kdq4s0rt3qelm5wp1xm3a4gu.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.3pizhl2uabkvcklb8iwivmrb5.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.3pizhl2uabkvcklb8iwivmrb5.0c54iii.rcgu.o
new file mode 100644
index 0000000..338f4e8
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.3pizhl2uabkvcklb8iwivmrb5.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.3vkkvisdkkvdxay21jmaq1oyz.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.3vkkvisdkkvdxay21jmaq1oyz.0c54iii.rcgu.o
new file mode 100644
index 0000000..9e1a7ee
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.3vkkvisdkkvdxay21jmaq1oyz.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.41sv5spu03vaqqcwi9vjd44co.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.41sv5spu03vaqqcwi9vjd44co.0c54iii.rcgu.o
new file mode 100644
index 0000000..e84f325
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.41sv5spu03vaqqcwi9vjd44co.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.434j0nbvuoqnv48nr4kf94vb4.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.434j0nbvuoqnv48nr4kf94vb4.0c54iii.rcgu.o
new file mode 100644
index 0000000..820b9c5
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.434j0nbvuoqnv48nr4kf94vb4.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.43agwiw9rdjem3os9s0zd9v1m.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.43agwiw9rdjem3os9s0zd9v1m.0c54iii.rcgu.o
new file mode 100644
index 0000000..32e60ab
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.43agwiw9rdjem3os9s0zd9v1m.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.45g9na2wa4jvar8nlnj23tghi.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.45g9na2wa4jvar8nlnj23tghi.0c54iii.rcgu.o
new file mode 100644
index 0000000..92c3fe3
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.45g9na2wa4jvar8nlnj23tghi.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.4qf1fxhkn8jghh0nklb8dlg6l.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.4qf1fxhkn8jghh0nklb8dlg6l.0c54iii.rcgu.o
new file mode 100644
index 0000000..c850a6d
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.4qf1fxhkn8jghh0nklb8dlg6l.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.4y2ww3f7odzk7c0bfr9sryhi3.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.4y2ww3f7odzk7c0bfr9sryhi3.0c54iii.rcgu.o
new file mode 100644
index 0000000..68f3cc2
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.4y2ww3f7odzk7c0bfr9sryhi3.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.5bnmordw07a5nd8roye1d7rdc.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.5bnmordw07a5nd8roye1d7rdc.0c54iii.rcgu.o
new file mode 100644
index 0000000..4f41ca6
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.5bnmordw07a5nd8roye1d7rdc.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.5iau2j1e6vyuqncsll72x7u6j.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.5iau2j1e6vyuqncsll72x7u6j.0c54iii.rcgu.o
new file mode 100644
index 0000000..77ace3f
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.5iau2j1e6vyuqncsll72x7u6j.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.5lun85jxevone837w116iwrjm.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.5lun85jxevone837w116iwrjm.0c54iii.rcgu.o
new file mode 100644
index 0000000..7279b3c
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.5lun85jxevone837w116iwrjm.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.5o19yk28nonkdopbe0x3f35ra.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.5o19yk28nonkdopbe0x3f35ra.0c54iii.rcgu.o
new file mode 100644
index 0000000..d377ac9
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.5o19yk28nonkdopbe0x3f35ra.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.69415ikgwko2cole5fvibzmea.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.69415ikgwko2cole5fvibzmea.0c54iii.rcgu.o
new file mode 100644
index 0000000..0ddd513
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.69415ikgwko2cole5fvibzmea.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.6fsi4wvlt78tjq2334xag15l2.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.6fsi4wvlt78tjq2334xag15l2.0c54iii.rcgu.o
new file mode 100644
index 0000000..ed4b79d
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.6fsi4wvlt78tjq2334xag15l2.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.6hmxbzbpdjrvu0hfa2qdnwvqc.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.6hmxbzbpdjrvu0hfa2qdnwvqc.0c54iii.rcgu.o
new file mode 100644
index 0000000..095568a
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.6hmxbzbpdjrvu0hfa2qdnwvqc.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.6i5gwudukupt50l1ei9b6yv5v.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.6i5gwudukupt50l1ei9b6yv5v.0c54iii.rcgu.o
new file mode 100644
index 0000000..0fafafd
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.6i5gwudukupt50l1ei9b6yv5v.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.7zdw265287xny2goxn2eheugr.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.7zdw265287xny2goxn2eheugr.0c54iii.rcgu.o
new file mode 100644
index 0000000..dedeef3
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.7zdw265287xny2goxn2eheugr.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.87od8ryk9c0x78he567a4c6kr.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.87od8ryk9c0x78he567a4c6kr.0c54iii.rcgu.o
new file mode 100644
index 0000000..b9a29f6
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.87od8ryk9c0x78he567a4c6kr.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.8d7xc7ad776mscet1qlbf6b45.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.8d7xc7ad776mscet1qlbf6b45.0c54iii.rcgu.o
new file mode 100644
index 0000000..af4bef5
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.8d7xc7ad776mscet1qlbf6b45.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.8n7fceb7t4f3u1n213dvrxdrm.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.8n7fceb7t4f3u1n213dvrxdrm.0c54iii.rcgu.o
new file mode 100644
index 0000000..297e643
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.8n7fceb7t4f3u1n213dvrxdrm.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.8qqpoiw698frcbzhkgmvs5vwg.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.8qqpoiw698frcbzhkgmvs5vwg.0c54iii.rcgu.o
new file mode 100644
index 0000000..06be260
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.8qqpoiw698frcbzhkgmvs5vwg.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.8v8sooj1eim7up8v3n1i89pqp.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.8v8sooj1eim7up8v3n1i89pqp.0c54iii.rcgu.o
new file mode 100644
index 0000000..c7d1ec1
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.8v8sooj1eim7up8v3n1i89pqp.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.8x4yxvhl5q0ub00w5smav2wn7.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.8x4yxvhl5q0ub00w5smav2wn7.0c54iii.rcgu.o
new file mode 100644
index 0000000..5df390e
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.8x4yxvhl5q0ub00w5smav2wn7.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.8yoqnocrm9gp7rq9g096954ml.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.8yoqnocrm9gp7rq9g096954ml.0c54iii.rcgu.o
new file mode 100644
index 0000000..b20c1f9
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.8yoqnocrm9gp7rq9g096954ml.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.9atiwbya8w2ctyd46ol728mzh.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.9atiwbya8w2ctyd46ol728mzh.0c54iii.rcgu.o
new file mode 100644
index 0000000..c442f78
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.9atiwbya8w2ctyd46ol728mzh.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.9ichlhi7dj2iwmp9di2iec822.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.9ichlhi7dj2iwmp9di2iec822.0c54iii.rcgu.o
new file mode 100644
index 0000000..d8e4b09
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.9ichlhi7dj2iwmp9di2iec822.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.9v6gwsp8hs85rqkdgwekryr46.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.9v6gwsp8hs85rqkdgwekryr46.0c54iii.rcgu.o
new file mode 100644
index 0000000..797fc35
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.9v6gwsp8hs85rqkdgwekryr46.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.a3ffibme3paoozjxs75og90mg.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.a3ffibme3paoozjxs75og90mg.0c54iii.rcgu.o
new file mode 100644
index 0000000..f6bbc3f
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.a3ffibme3paoozjxs75og90mg.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.a5spr7316iyy73126dgevrc2g.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.a5spr7316iyy73126dgevrc2g.0c54iii.rcgu.o
new file mode 100644
index 0000000..d8329fd
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.a5spr7316iyy73126dgevrc2g.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.ae8nhakm9kw6a4e063hypfqiz.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.ae8nhakm9kw6a4e063hypfqiz.0c54iii.rcgu.o
new file mode 100644
index 0000000..aa1fb1c
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.ae8nhakm9kw6a4e063hypfqiz.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.asuo3q1u1uwj0fnfo11jf6n76.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.asuo3q1u1uwj0fnfo11jf6n76.0c54iii.rcgu.o
new file mode 100644
index 0000000..bed7552
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.asuo3q1u1uwj0fnfo11jf6n76.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.avnpj0oubb3o3se60yvyc5fpn.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.avnpj0oubb3o3se60yvyc5fpn.0c54iii.rcgu.o
new file mode 100644
index 0000000..918e607
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.avnpj0oubb3o3se60yvyc5fpn.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.b8y5dde7iseehkslzezh2t6sj.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.b8y5dde7iseehkslzezh2t6sj.0c54iii.rcgu.o
new file mode 100644
index 0000000..36cfbd2
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.b8y5dde7iseehkslzezh2t6sj.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.bpjkqmbc4tpzcssy1k2yd7of6.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.bpjkqmbc4tpzcssy1k2yd7of6.0c54iii.rcgu.o
new file mode 100644
index 0000000..c31b9ca
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.bpjkqmbc4tpzcssy1k2yd7of6.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.cu2qv1zpcn44nnw69w4irsgbw.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.cu2qv1zpcn44nnw69w4irsgbw.0c54iii.rcgu.o
new file mode 100644
index 0000000..bb33810
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.cu2qv1zpcn44nnw69w4irsgbw.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.cvt6kbsm6173fophaphw7oi5g.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.cvt6kbsm6173fophaphw7oi5g.0c54iii.rcgu.o
new file mode 100644
index 0000000..be500ad
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.cvt6kbsm6173fophaphw7oi5g.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.cwhzfhi5o42my15lhog78e2cz.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.cwhzfhi5o42my15lhog78e2cz.0c54iii.rcgu.o
new file mode 100644
index 0000000..2549a2e
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.cwhzfhi5o42my15lhog78e2cz.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.czgzyw9ti9f24q5ofyht61hiw.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.czgzyw9ti9f24q5ofyht61hiw.0c54iii.rcgu.o
new file mode 100644
index 0000000..4d2a9aa
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.czgzyw9ti9f24q5ofyht61hiw.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.d0iqr5gon1zk11wzxkxj35ztf.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.d0iqr5gon1zk11wzxkxj35ztf.0c54iii.rcgu.o
new file mode 100644
index 0000000..808fb21
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.d0iqr5gon1zk11wzxkxj35ztf.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.d5zens22ygih1n34531oz961i.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.d5zens22ygih1n34531oz961i.0c54iii.rcgu.o
new file mode 100644
index 0000000..c4658e2
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.d5zens22ygih1n34531oz961i.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.dic3wzonm0ntzrjq3h7kvr8ky.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.dic3wzonm0ntzrjq3h7kvr8ky.0c54iii.rcgu.o
new file mode 100644
index 0000000..e9d2404
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.dic3wzonm0ntzrjq3h7kvr8ky.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.dkcex5nojl4o1wj0khh0jzafk.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.dkcex5nojl4o1wj0khh0jzafk.0c54iii.rcgu.o
new file mode 100644
index 0000000..f8afba3
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.dkcex5nojl4o1wj0khh0jzafk.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.dn3zzxa6uzr5kaf5gle96mhsr.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.dn3zzxa6uzr5kaf5gle96mhsr.0c54iii.rcgu.o
new file mode 100644
index 0000000..4e61732
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.dn3zzxa6uzr5kaf5gle96mhsr.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.dn45na1dix3u6x436hui1s0fb.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.dn45na1dix3u6x436hui1s0fb.0c54iii.rcgu.o
new file mode 100644
index 0000000..89a6c15
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.dn45na1dix3u6x436hui1s0fb.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.dolh1r503kgpujr9huf2enba6.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.dolh1r503kgpujr9huf2enba6.0c54iii.rcgu.o
new file mode 100644
index 0000000..00abaff
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.dolh1r503kgpujr9huf2enba6.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.dt2gyvosv2r2wr42cx16hvf39.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.dt2gyvosv2r2wr42cx16hvf39.0c54iii.rcgu.o
new file mode 100644
index 0000000..59a82f1
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.dt2gyvosv2r2wr42cx16hvf39.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.dzqnl44o3uok4ol7ox0ds6v3y.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.dzqnl44o3uok4ol7ox0ds6v3y.0c54iii.rcgu.o
new file mode 100644
index 0000000..5489fcb
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.dzqnl44o3uok4ol7ox0ds6v3y.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.euquzxdqmn5b9tesubxtxa0wj.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.euquzxdqmn5b9tesubxtxa0wj.0c54iii.rcgu.o
new file mode 100644
index 0000000..04b787b
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.euquzxdqmn5b9tesubxtxa0wj.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.eus466wcgrletm1igudse2f6q.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.eus466wcgrletm1igudse2f6q.0c54iii.rcgu.o
new file mode 100644
index 0000000..adaaa84
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.eus466wcgrletm1igudse2f6q.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.euz0kj0mkqi38a61rryklz9w6.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.euz0kj0mkqi38a61rryklz9w6.0c54iii.rcgu.o
new file mode 100644
index 0000000..7a83d14
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.euz0kj0mkqi38a61rryklz9w6.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-01b339007221b45b.f1osno67mdbithxcizvlcqe7w.0c54iii.rcgu.o b/.old/target/debug/deps/timeplot-01b339007221b45b.f1osno67mdbithxcizvlcqe7w.0c54iii.rcgu.o
new file mode 100644
index 0000000..71f61a1
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-01b339007221b45b.f1osno67mdbithxcizvlcqe7w.0c54iii.rcgu.o
Binary files differ
diff --git a/.old/target/debug/deps/timeplot-260c93071255135f.d b/.old/target/debug/deps/timeplot-260c93071255135f.d
new file mode 100644
index 0000000..bfe5a37
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-260c93071255135f.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/timeplot-260c93071255135f.d: src/main.rs src/data_sources.rs src/shader.wgsl
+
+/home/thomas/dev/timeplot/target/debug/deps/libtimeplot-260c93071255135f.rmeta: src/main.rs src/data_sources.rs src/shader.wgsl
+
+src/main.rs:
+src/data_sources.rs:
+src/shader.wgsl:
diff --git a/.old/target/debug/deps/timeplot-2e709988b8a48e0a.d b/.old/target/debug/deps/timeplot-2e709988b8a48e0a.d
new file mode 100644
index 0000000..28b6e00
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-2e709988b8a48e0a.d
@@ -0,0 +1,6 @@
+/home/thomas/dev/timeplot/target/debug/deps/timeplot-2e709988b8a48e0a.d: src/main.rs src/shader.wgsl
+
+/home/thomas/dev/timeplot/target/debug/deps/timeplot-2e709988b8a48e0a: src/main.rs src/shader.wgsl
+
+src/main.rs:
+src/shader.wgsl:
diff --git a/.old/target/debug/deps/timeplot-93dad8ed3f4d84e0.d b/.old/target/debug/deps/timeplot-93dad8ed3f4d84e0.d
new file mode 100644
index 0000000..8af5e87
--- /dev/null
+++ b/.old/target/debug/deps/timeplot-93dad8ed3f4d84e0.d
@@ -0,0 +1,22 @@
+/home/thomas/dev/timeplot/target/debug/deps/timeplot-93dad8ed3f4d84e0.d: src/lib.rs src/renderer/mod.rs src/renderer/pipeline.rs src/renderer/resources.rs src/renderer/shaders.rs src/data/mod.rs src/data/pipeline.rs src/data/processor.rs src/data/buffer.rs src/visualization/mod.rs src/visualization/waterfall.rs src/visualization/controls.rs src/app/mod.rs src/app/window.rs src/app/config.rs src/renderer/../shaders/waterfall.wgsl
+
+/home/thomas/dev/timeplot/target/debug/deps/libtimeplot-93dad8ed3f4d84e0.rlib: src/lib.rs src/renderer/mod.rs src/renderer/pipeline.rs src/renderer/resources.rs src/renderer/shaders.rs src/data/mod.rs src/data/pipeline.rs src/data/processor.rs src/data/buffer.rs src/visualization/mod.rs src/visualization/waterfall.rs src/visualization/controls.rs src/app/mod.rs src/app/window.rs src/app/config.rs src/renderer/../shaders/waterfall.wgsl
+
+/home/thomas/dev/timeplot/target/debug/deps/libtimeplot-93dad8ed3f4d84e0.rmeta: src/lib.rs src/renderer/mod.rs src/renderer/pipeline.rs src/renderer/resources.rs src/renderer/shaders.rs src/data/mod.rs src/data/pipeline.rs src/data/processor.rs src/data/buffer.rs src/visualization/mod.rs src/visualization/waterfall.rs src/visualization/controls.rs src/app/mod.rs src/app/window.rs src/app/config.rs src/renderer/../shaders/waterfall.wgsl
+
+src/lib.rs:
+src/renderer/mod.rs:
+src/renderer/pipeline.rs:
+src/renderer/resources.rs:
+src/renderer/shaders.rs:
+src/data/mod.rs:
+src/data/pipeline.rs:
+src/data/processor.rs:
+src/data/buffer.rs:
+src/visualization/mod.rs:
+src/visualization/waterfall.rs:
+src/visualization/controls.rs:
+src/app/mod.rs:
+src/app/window.rs:
+src/app/config.rs:
+src/renderer/../shaders/waterfall.wgsl:
diff --git a/.old/target/debug/deps/tiny_skia-b893cb5d231908e6.d b/.old/target/debug/deps/tiny_skia-b893cb5d231908e6.d
new file mode 100644
index 0000000..4ec92ce
--- /dev/null
+++ b/.old/target/debug/deps/tiny_skia-b893cb5d231908e6.d
@@ -0,0 +1,49 @@
+/home/thomas/dev/timeplot/target/debug/deps/tiny_skia-b893cb5d231908e6.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/alpha_runs.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/blend_mode.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/blitter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/clip.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/color.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge_builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge_clipper.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/fixed_point.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/line_clipper.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/math.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/point64.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/cubic64.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/line_cubic_intersections.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/quad64.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path_geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/blitter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pixmap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/hairline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/hairline_aa.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/path.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/path_aa.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/linear_gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/pattern.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/radial_gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x16_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x8_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/i32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/i32x8_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u16x16_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u32x8_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/painter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/highp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/lowp.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libtiny_skia-b893cb5d231908e6.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/alpha_runs.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/blend_mode.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/blitter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/clip.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/color.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge_builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge_clipper.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/fixed_point.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/line_clipper.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/math.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/point64.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/cubic64.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/line_cubic_intersections.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/quad64.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path_geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/blitter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pixmap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/hairline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/hairline_aa.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/path.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/path_aa.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/linear_gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/pattern.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/radial_gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x16_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x8_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/i32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/i32x8_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u16x16_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u32x8_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/painter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/highp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/lowp.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libtiny_skia-b893cb5d231908e6.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/alpha_runs.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/blend_mode.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/blitter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/clip.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/color.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge_builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge_clipper.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/fixed_point.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/line_clipper.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/math.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/point64.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/cubic64.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/line_cubic_intersections.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/quad64.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path_geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/blitter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pixmap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/hairline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/hairline_aa.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/path.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/path_aa.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/linear_gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/pattern.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/radial_gradient.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x16_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x8_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/i32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/i32x8_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u16x16_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u32x8_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/painter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/highp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/lowp.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/alpha_runs.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/blend_mode.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/blitter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/clip.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/color.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge_builder.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/edge_clipper.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/fixed_point.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/line_clipper.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/math.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/point64.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/cubic64.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/line_cubic_intersections.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path64/quad64.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/path_geometry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/blitter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pixmap.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/hairline.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/hairline_aa.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/path.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/scan/path_aa.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/gradient.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/linear_gradient.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/pattern.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/shaders/radial_gradient.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x16_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x4_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/f32x8_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/i32x4_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/i32x8_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u16x16_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u32x4_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/wide/u32x8_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/painter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/highp.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-0.8.4/src/pipeline/lowp.rs:
diff --git a/.old/target/debug/deps/tiny_skia_path-938b866606d12a5a.d b/.old/target/debug/deps/tiny_skia_path-938b866606d12a5a.d
new file mode 100644
index 0000000..70139cc
--- /dev/null
+++ b/.old/target/debug/deps/tiny_skia_path-938b866606d12a5a.d
@@ -0,0 +1,17 @@
+/home/thomas/dev/timeplot/target/debug/deps/tiny_skia_path-938b866606d12a5a.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/dash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x2_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/floating_point.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/rect.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/scalar.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/size.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/stroker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/transform.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libtiny_skia_path-938b866606d12a5a.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/dash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x2_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/floating_point.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/rect.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/scalar.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/size.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/stroker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/transform.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/dash.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x2_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x4_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/floating_point.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_builder.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_geometry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/rect.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/scalar.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/size.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/stroker.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/transform.rs:
diff --git a/.old/target/debug/deps/tiny_skia_path-c785cf4b52f2591e.d b/.old/target/debug/deps/tiny_skia_path-c785cf4b52f2591e.d
new file mode 100644
index 0000000..ac17d47
--- /dev/null
+++ b/.old/target/debug/deps/tiny_skia_path-c785cf4b52f2591e.d
@@ -0,0 +1,19 @@
+/home/thomas/dev/timeplot/target/debug/deps/tiny_skia_path-c785cf4b52f2591e.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/dash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x2_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/floating_point.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/rect.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/scalar.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/size.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/stroker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/transform.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libtiny_skia_path-c785cf4b52f2591e.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/dash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x2_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/floating_point.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/rect.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/scalar.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/size.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/stroker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/transform.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libtiny_skia_path-c785cf4b52f2591e.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/dash.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x2_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x4_t.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/floating_point.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/rect.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/scalar.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/size.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/stroker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/transform.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/dash.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x2_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/f32x4_t.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/floating_point.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_builder.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/path_geometry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/rect.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/scalar.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/size.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/stroker.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tiny-skia-path-0.11.4/src/transform.rs:
diff --git a/.old/target/debug/deps/tokio-077af445a0e8fe36.d b/.old/target/debug/deps/tokio-077af445a0e8fe36.d
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.old/target/debug/deps/tokio-077af445a0e8fe36.d
diff --git a/.old/target/debug/deps/tokio-da63c2f385685ac7.d b/.old/target/debug/deps/tokio-da63c2f385685ac7.d
new file mode 100644
index 0000000..a6e496f
--- /dev/null
+++ b/.old/target/debug/deps/tokio-da63c2f385685ac7.d
@@ -0,0 +1,285 @@
+/home/thomas/dev/timeplot/target/debug/deps/tokio-da63c2f385685ac7.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/cfg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/loom.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/pin.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/thread_local.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/addr_of.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/support.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/maybe_done.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_buf_read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_seek.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/read_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/addr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u16.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u32.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u64.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_usize.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/barrier.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/mutex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/parking_lot.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/rwlock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/unsafe_cell.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/blocking.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/as_ref.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/atomic_cell.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/blocking_check.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/metric_atomics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/wake.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/wake_list.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/linked_list.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/rand.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/trace.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/typeid.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/markers.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/cacheline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/select.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/join.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/try_join.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/canonicalize.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/create_dir.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/create_dir_all.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/dir_builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/file.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/hard_link.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/open_options.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read_dir.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read_link.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read_to_string.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/remove_dir.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/remove_dir_all.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/remove_file.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/rename.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/set_permissions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/symlink_metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/copy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/try_exists.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/symlink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/try_join.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/block_on.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/blocking.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/interest.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/ready.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/poll_evented.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_fd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stdio_common.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stderr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stdin.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stdout.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/split.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/join.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/seek.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_buf_read_ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_read_ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_seek_ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_write_ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/buf_reader.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/buf_stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/buf_writer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/chain.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/copy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/copy_bidirectional.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/copy_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/empty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/flush.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/lines.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/mem.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_exact.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_int.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_line.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/fill_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_to_end.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/vec_with_initialized.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_to_string.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_until.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/repeat.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/shutdown.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/sink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/split.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/take.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_vectored.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_all.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_all_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_int.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/lookup_host.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/split.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/split_owned.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/datagram/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/datagram/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/split.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/split_owned.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/socketaddr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/ucred.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/pipe.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u64_native.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/orphan.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/reap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/pidfd_reaper.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/kill.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/park.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/driver.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/blocking.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/current.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/runtime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/scoped.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/runtime_mt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/defer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/pop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/shared.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/synced.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/metrics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/rt_multi_thread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/block_in_place.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/counters.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/handle/metrics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/overflow.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/idle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/stats.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/park.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/worker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/worker/metrics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/worker/taskdump_mock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/trace_mock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/driver.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/registration.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/registration_set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/scheduled_io.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/metrics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/driver/signal.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/process.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/entry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/wheel/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/wheel/level.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/signal/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/core.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/harness.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/abort.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/join.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/list.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/raw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/waker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/config.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/pool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/schedule.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/shutdown.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/task.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task_hooks.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/runtime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/thread_id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/runtime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/batch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/worker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/mock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/ctrl_c.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/unix.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/windows.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/reusable_box.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/barrier.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/broadcast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/bounded.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/chan.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/list.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/unbounded.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mutex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/notify.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/oneshot.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/batch_semaphore.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/semaphore.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/owned_read_guard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/owned_write_guard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/owned_write_guard_mapped.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/read_guard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/write_guard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/write_guard_mapped.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/task/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/task/atomic_waker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/once_cell.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/set_once.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/watch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/blocking.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/spawn.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/yield_now.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/local.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/task_local.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/join_set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/consume_budget.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/unconstrained.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/clock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/instant.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/interval.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/sleep.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/timeout.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/bit.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/sharded_list.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/rand/rt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/idle_notified_set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/sync_wrapper.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/rc_cell.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/try_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/ptr_expose.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libtokio-da63c2f385685ac7.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/cfg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/loom.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/pin.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/thread_local.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/addr_of.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/support.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/maybe_done.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_buf_read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_seek.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/read_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/addr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u16.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u32.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u64.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_usize.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/barrier.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/mutex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/parking_lot.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/rwlock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/unsafe_cell.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/blocking.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/as_ref.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/atomic_cell.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/blocking_check.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/metric_atomics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/wake.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/wake_list.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/linked_list.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/rand.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/trace.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/typeid.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/memchr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/markers.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/cacheline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/select.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/join.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/try_join.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/canonicalize.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/create_dir.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/create_dir_all.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/dir_builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/file.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/hard_link.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/open_options.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read_dir.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read_link.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read_to_string.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/remove_dir.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/remove_dir_all.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/remove_file.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/rename.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/set_permissions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/symlink_metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/copy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/try_exists.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/symlink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/try_join.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/block_on.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/blocking.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/interest.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/ready.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/poll_evented.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_fd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stdio_common.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stderr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stdin.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stdout.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/split.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/join.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/seek.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_buf_read_ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_read_ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_seek_ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_write_ext.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/buf_reader.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/buf_stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/buf_writer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/chain.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/copy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/copy_bidirectional.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/copy_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/empty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/flush.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/lines.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/mem.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_exact.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_int.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_line.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/fill_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_to_end.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/vec_with_initialized.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_to_string.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_until.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/repeat.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/shutdown.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/sink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/split.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/take.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_vectored.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_all.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_all_buf.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_int.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/lookup_host.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/split.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/split_owned.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/udp.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/datagram/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/datagram/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/listener.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/split.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/split_owned.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/socketaddr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/stream.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/ucred.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/pipe.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u64_native.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/orphan.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/reap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/pidfd_reaper.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/kill.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/park.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/driver.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/blocking.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/current.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/runtime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/scoped.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/runtime_mt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/defer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/pop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/shared.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/synced.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/metrics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/rt_multi_thread.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/block_in_place.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/counters.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/handle/metrics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/overflow.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/idle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/stats.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/park.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/worker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/worker/metrics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/worker/taskdump_mock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/trace_mock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/driver.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/registration.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/registration_set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/scheduled_io.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/metrics.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/driver/signal.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/process.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/entry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/source.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/wheel/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/wheel/level.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/signal/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/core.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/harness.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/abort.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/join.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/list.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/raw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/waker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/config.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/pool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/schedule.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/shutdown.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/task.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/builder.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task_hooks.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/runtime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/thread_id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/runtime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/batch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/worker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/mock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/ctrl_c.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/unix.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/windows.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/reusable_box.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/barrier.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/broadcast.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/block.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/bounded.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/chan.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/list.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/unbounded.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mutex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/notify.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/oneshot.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/batch_semaphore.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/semaphore.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/owned_read_guard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/owned_write_guard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/owned_write_guard_mapped.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/read_guard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/write_guard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/write_guard_mapped.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/task/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/task/atomic_waker.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/once_cell.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/set_once.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/watch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/blocking.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/spawn.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/yield_now.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/local.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/task_local.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/join_set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/consume_budget.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/unconstrained.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/clock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/instant.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/interval.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/sleep.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/timeout.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/bit.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/sharded_list.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/rand/rt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/idle_notified_set.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/sync_wrapper.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/rc_cell.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/try_lock.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/ptr_expose.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/cfg.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/loom.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/pin.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/thread_local.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/addr_of.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/support.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/maybe_done.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_buf_read.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_read.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_seek.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_write.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/read_buf.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/addr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u16.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u32.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u64.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_usize.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/barrier.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/mutex.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/parking_lot.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/rwlock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/unsafe_cell.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/blocking.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/as_ref.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/atomic_cell.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/blocking_check.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/metric_atomics.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/wake.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/wake_list.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/linked_list.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/rand.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/trace.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/typeid.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/memchr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/markers.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/cacheline.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/select.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/join.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/macros/try_join.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/canonicalize.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/create_dir.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/create_dir_all.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/dir_builder.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/file.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/hard_link.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/metadata.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/open_options.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read_dir.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read_link.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/read_to_string.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/remove_dir.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/remove_dir_all.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/remove_file.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/rename.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/set_permissions.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/symlink_metadata.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/write.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/copy.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/try_exists.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/fs/symlink.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/try_join.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/future/block_on.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/blocking.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/interest.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/ready.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/poll_evented.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/async_fd.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stdio_common.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stderr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stdin.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/stdout.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/split.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/join.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/seek.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_buf_read_ext.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_read_ext.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_seek_ext.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/async_write_ext.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/buf_reader.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/buf_stream.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/buf_writer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/chain.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/copy.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/copy_bidirectional.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/copy_buf.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/empty.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/flush.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/lines.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/mem.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_buf.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_exact.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_int.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_line.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/fill_buf.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_to_end.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/vec_with_initialized.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_to_string.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/read_until.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/repeat.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/shutdown.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/sink.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/split.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/take.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_vectored.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_all.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_buf.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_all_buf.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/io/util/write_int.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/lookup_host.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/listener.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/split.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/split_owned.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/stream.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/tcp/socket.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/udp.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/datagram/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/datagram/socket.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/listener.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/socket.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/split.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/split_owned.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/socketaddr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/stream.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/ucred.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/net/unix/pipe.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/loom/std/atomic_u64_native.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/orphan.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/reap.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/unix/pidfd_reaper.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/process/kill.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/park.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/driver.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/blocking.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/current.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/runtime.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/scoped.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/runtime_mt.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/defer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/pop.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/shared.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/synced.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/metrics.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/inject/rt_multi_thread.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/block_in_place.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/lock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/counters.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/handle.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/handle/metrics.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/overflow.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/idle.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/stats.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/park.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/queue.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/worker.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/worker/metrics.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/worker/taskdump_mock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/multi_thread/trace_mock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/driver.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/registration.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/registration_set.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/scheduled_io.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/metrics.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/io/driver/signal.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/process.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/entry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/handle.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/source.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/wheel/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/time/wheel/level.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/signal/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/core.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/harness.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/id.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/abort.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/join.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/list.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/raw.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/state.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task/waker.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/config.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/pool.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/schedule.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/shutdown.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/blocking/task.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/builder.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/task_hooks.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/handle.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/runtime.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/thread_id.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/runtime.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/batch.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/worker.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/metrics/mock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/ctrl_c.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/registry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/unix.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/windows.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/signal/reusable_box.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/barrier.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/broadcast.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/block.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/bounded.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/chan.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/list.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/unbounded.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mpsc/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/mutex.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/notify.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/oneshot.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/batch_semaphore.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/semaphore.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/owned_read_guard.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/owned_write_guard.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/owned_write_guard_mapped.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/read_guard.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/write_guard.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/rwlock/write_guard_mapped.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/task/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/task/atomic_waker.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/once_cell.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/set_once.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/sync/watch.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/blocking.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/spawn.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/yield_now.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/local.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/task_local.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/join_set.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/consume_budget.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/unconstrained.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/clock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/instant.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/interval.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/sleep.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/time/timeout.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/bit.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/sharded_list.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/rand/rt.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/idle_notified_set.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/sync_wrapper.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/rc_cell.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/try_lock.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/util/ptr_expose.rs:
diff --git a/.old/target/debug/deps/tokio_macros-f630775fe714cbf3.d b/.old/target/debug/deps/tokio_macros-f630775fe714cbf3.d
new file mode 100644
index 0000000..7e8347f
--- /dev/null
+++ b/.old/target/debug/deps/tokio_macros-f630775fe714cbf3.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/tokio_macros-f630775fe714cbf3.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-macros-2.5.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-macros-2.5.0/src/entry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-macros-2.5.0/src/select.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libtokio_macros-f630775fe714cbf3.so: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-macros-2.5.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-macros-2.5.0/src/entry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-macros-2.5.0/src/select.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-macros-2.5.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-macros-2.5.0/src/entry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-macros-2.5.0/src/select.rs:
diff --git a/.old/target/debug/deps/tracing_core-6a12f673cc8b6a05.d b/.old/target/debug/deps/tracing_core-6a12f673cc8b6a05.d
new file mode 100644
index 0000000..fac01d3
--- /dev/null
+++ b/.old/target/debug/deps/tracing_core-6a12f673cc8b6a05.d
@@ -0,0 +1,18 @@
+/home/thomas/dev/timeplot/target/debug/deps/tracing_core-6a12f673cc8b6a05.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/lazy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/spin/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/spin/mutex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/spin/once.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/callsite.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/dispatcher.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/field.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/parent.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/stdlib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/subscriber.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libtracing_core-6a12f673cc8b6a05.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/lazy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/spin/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/spin/mutex.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/spin/once.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/callsite.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/dispatcher.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/field.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/parent.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/span.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/stdlib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/subscriber.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/lazy.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/spin/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/spin/mutex.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/spin/once.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/callsite.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/dispatcher.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/event.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/field.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/metadata.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/parent.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/span.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/stdlib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-core-0.1.34/src/subscriber.rs:
diff --git a/.old/target/debug/deps/tracing_subscriber-545b31b8a530e079.d b/.old/target/debug/deps/tracing_subscriber-545b31b8a530e079.d
new file mode 100644
index 0000000..d8062d8
--- /dev/null
+++ b/.old/target/debug/deps/tracing_subscriber-545b31b8a530e079.d
@@ -0,0 +1,37 @@
+/home/thomas/dev/timeplot/target/debug/deps/tracing_subscriber-545b31b8a530e079.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/delimited.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/filter_fn.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/level.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/prelude.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/context.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/layered.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/layer_filters/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/layer_filters/combinator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/targets.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/directive.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/extensions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/sharded.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/stack.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/reload.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/sync.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/fmt_layer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/format/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/format/pretty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/time/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/time/datetime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/writer.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libtracing_subscriber-545b31b8a530e079.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/delimited.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/filter_fn.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/level.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/prelude.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/context.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/layered.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/layer_filters/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/layer_filters/combinator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/targets.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/directive.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/extensions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/sharded.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/stack.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/reload.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/sync.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/fmt_layer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/format/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/format/pretty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/time/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/time/datetime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/writer.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libtracing_subscriber-545b31b8a530e079.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/macros.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/delimited.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/filter_fn.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/level.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/prelude.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/context.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/layered.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/util.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/layer_filters/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/layer_filters/combinator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/targets.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/directive.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/extensions.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/sharded.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/stack.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/reload.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/sync.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/fmt_layer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/format/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/format/pretty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/time/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/time/datetime.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/writer.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/macros.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/debug.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/delimited.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/field/display.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/filter_fn.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/level.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/prelude.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/context.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/layer/layered.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/util.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/layer_filters/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/layer_filters/combinator.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/targets.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/filter/directive.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/extensions.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/sharded.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/registry/stack.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/reload.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/sync.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/fmt_layer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/format/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/format/pretty.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/time/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/time/datetime.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tracing-subscriber-0.3.19/src/fmt/writer.rs:
diff --git a/.old/target/debug/deps/wayland_backend-8ebd4fff2f2e0181.d b/.old/target/debug/deps/wayland_backend-8ebd4fff2f2e0181.d
new file mode 100644
index 0000000..7682512
--- /dev/null
+++ b/.old/target/debug/deps/wayland_backend-8ebd4fff2f2e0181.d
@@ -0,0 +1,28 @@
+/home/thomas/dev/timeplot/target/debug/deps/wayland_backend-8ebd4fff2f2e0181.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/client_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/../client_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/client_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/common_poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/wire.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../client_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../server_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/core_interfaces.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/protocol.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/server.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_backend-8ebd4fff2f2e0181.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/client_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/../client_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/client_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/common_poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/wire.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../client_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../server_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/core_interfaces.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/protocol.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/server.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_backend-8ebd4fff2f2e0181.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/client_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/../client_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/client_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/common_poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/wire.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../client_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../server_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/core_interfaces.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/protocol.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/server.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/client_impl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/../client_api.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/client_impl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/client.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/common_poll.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/handle.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/registry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/map.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/socket.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/wire.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../client_api.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../server_api.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/core_interfaces.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/debug.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/protocol.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/client.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/server.rs:
diff --git a/.old/target/debug/deps/wayland_backend-c5fc11466b2e2202.d b/.old/target/debug/deps/wayland_backend-c5fc11466b2e2202.d
new file mode 100644
index 0000000..14d9890
--- /dev/null
+++ b/.old/target/debug/deps/wayland_backend-c5fc11466b2e2202.d
@@ -0,0 +1,26 @@
+/home/thomas/dev/timeplot/target/debug/deps/wayland_backend-c5fc11466b2e2202.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/client_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/../client_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/client_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/common_poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/wire.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../client_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../server_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/core_interfaces.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/protocol.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/server.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_backend-c5fc11466b2e2202.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/client_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/../client_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/client_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/common_poll.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/handle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/map.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/socket.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/wire.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../client_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../server_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/core_interfaces.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/debug.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/protocol.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/server.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/client_impl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/sys/../client_api.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/client_impl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/client.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/common_poll.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/handle.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/server_impl/registry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/map.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/socket.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/wire.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../client_api.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/rs/../server_api.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/core_interfaces.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/debug.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/protocol.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/client.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-backend-0.3.11/src/types/server.rs:
diff --git a/.old/target/debug/deps/wayland_client-2876c544f709a6d4.d b/.old/target/debug/deps/wayland_client-2876c544f709a6d4.d
new file mode 100644
index 0000000..8143178
--- /dev/null
+++ b/.old/target/debug/deps/wayland_client-2876c544f709a6d4.d
@@ -0,0 +1,10 @@
+/home/thomas/dev/timeplot/target/debug/deps/wayland_client-2876c544f709a6d4.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/conn.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/event_queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/globals.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_client-2876c544f709a6d4.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/conn.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/event_queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/globals.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_client-2876c544f709a6d4.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/conn.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/event_queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/globals.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/conn.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/event_queue.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.31.11/src/globals.rs:
diff --git a/.old/target/debug/deps/wayland_client-4b1cb93356682ac2.d b/.old/target/debug/deps/wayland_client-4b1cb93356682ac2.d
new file mode 100644
index 0000000..c0d0217
--- /dev/null
+++ b/.old/target/debug/deps/wayland_client-4b1cb93356682ac2.d
@@ -0,0 +1,18 @@
+/home/thomas/dev/timeplot/target/debug/deps/wayland_client-4b1cb93356682ac2.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/event_queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/globals.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/proxy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/event_queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/proxy.rs /home/thomas/dev/timeplot/target/debug/build/wayland-client-be41e7540bb310e9/out/wayland_api.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_client-4b1cb93356682ac2.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/event_queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/globals.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/proxy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/event_queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/proxy.rs /home/thomas/dev/timeplot/target/debug/build/wayland-client-be41e7540bb310e9/out/wayland_api.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_client-4b1cb93356682ac2.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/event_queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/globals.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/proxy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/display.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/event_queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/proxy.rs /home/thomas/dev/timeplot/target/debug/build/wayland-client-be41e7540bb310e9/out/wayland_api.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/display.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/event_queue.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/globals.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/proxy.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/display.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/event_queue.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-client-0.29.5/src/native_lib/proxy.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-client-be41e7540bb310e9/out/wayland_api.rs:
+
+# env-dep:OUT_DIR=/home/thomas/dev/timeplot/target/debug/build/wayland-client-be41e7540bb310e9/out
diff --git a/.old/target/debug/deps/wayland_csd_frame-0c339fa5d5829989.d b/.old/target/debug/deps/wayland_csd_frame-0c339fa5d5829989.d
new file mode 100644
index 0000000..e74c168
--- /dev/null
+++ b/.old/target/debug/deps/wayland_csd_frame-0c339fa5d5829989.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/wayland_csd_frame-0c339fa5d5829989.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-csd-frame-0.3.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_csd_frame-0c339fa5d5829989.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-csd-frame-0.3.0/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_csd_frame-0c339fa5d5829989.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-csd-frame-0.3.0/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-csd-frame-0.3.0/src/lib.rs:
diff --git a/.old/target/debug/deps/wayland_cursor-448351953e88f0e3.d b/.old/target/debug/deps/wayland_cursor-448351953e88f0e3.d
new file mode 100644
index 0000000..45d619b
--- /dev/null
+++ b/.old/target/debug/deps/wayland_cursor-448351953e88f0e3.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/wayland_cursor-448351953e88f0e3.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-cursor-0.31.11/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_cursor-448351953e88f0e3.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-cursor-0.31.11/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_cursor-448351953e88f0e3.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-cursor-0.31.11/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-cursor-0.31.11/src/lib.rs:
diff --git a/.old/target/debug/deps/wayland_cursor-934379a7419ce0b2.d b/.old/target/debug/deps/wayland_cursor-934379a7419ce0b2.d
new file mode 100644
index 0000000..b482c99
--- /dev/null
+++ b/.old/target/debug/deps/wayland_cursor-934379a7419ce0b2.d
@@ -0,0 +1,7 @@
+/home/thomas/dev/timeplot/target/debug/deps/wayland_cursor-934379a7419ce0b2.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-cursor-0.29.5/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_cursor-934379a7419ce0b2.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-cursor-0.29.5/src/lib.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_cursor-934379a7419ce0b2.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-cursor-0.29.5/src/lib.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-cursor-0.29.5/src/lib.rs:
diff --git a/.old/target/debug/deps/wayland_protocols-e123b4c5a47e94a0.d b/.old/target/debug/deps/wayland_protocols-e123b4c5a47e94a0.d
new file mode 100644
index 0000000..ba0412f
--- /dev/null
+++ b/.old/target/debug/deps/wayland_protocols-e123b4c5a47e94a0.d
@@ -0,0 +1,54 @@
+/home/thomas/dev/timeplot/target/debug/deps/wayland_protocols-e123b4c5a47e94a0.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/protocol_macro.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/staging.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/unstable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/misc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/wlr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/stable.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-activation-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/fullscreen-shell-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/idle-inhibit-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-method-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-timestamps-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/keyboard-shortcuts-inhibit-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/linux-dmabuf-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/linux-explicit-synchronization-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/pointer-constraints-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/pointer-gestures-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/primary-selection-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/relative-pointer-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/tablet-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/tablet-v2_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/text-input-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/text-input-v3_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-decoration-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-foreign-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-foreign-v2_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-output-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell-v5_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell-v6_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xwayland-keyboard-grab-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/gtk-primary-selection_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-method-unstable-v2_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/server-decoration_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-data-control-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-export-dmabuf-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-foreign-toplevel-management-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-gamma-control-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-input-inhibitor-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-layer-shell-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-output-management-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-output-power-management-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-screencopy-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-virtual-pointer-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/presentation-time_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/viewporter_client_api.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_protocols-e123b4c5a47e94a0.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/protocol_macro.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/staging.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/unstable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/misc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/wlr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/stable.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-activation-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/fullscreen-shell-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/idle-inhibit-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-method-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-timestamps-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/keyboard-shortcuts-inhibit-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/linux-dmabuf-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/linux-explicit-synchronization-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/pointer-constraints-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/pointer-gestures-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/primary-selection-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/relative-pointer-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/tablet-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/tablet-v2_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/text-input-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/text-input-v3_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-decoration-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-foreign-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-foreign-v2_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-output-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell-v5_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell-v6_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xwayland-keyboard-grab-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/gtk-primary-selection_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-method-unstable-v2_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/server-decoration_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-data-control-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-export-dmabuf-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-foreign-toplevel-management-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-gamma-control-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-input-inhibitor-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-layer-shell-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-output-management-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-output-power-management-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-screencopy-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-virtual-pointer-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/presentation-time_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/viewporter_client_api.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_protocols-e123b4c5a47e94a0.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/protocol_macro.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/staging.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/unstable.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/misc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/wlr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/stable.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-activation-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/fullscreen-shell-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/idle-inhibit-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-method-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-timestamps-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/keyboard-shortcuts-inhibit-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/linux-dmabuf-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/linux-explicit-synchronization-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/pointer-constraints-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/pointer-gestures-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/primary-selection-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/relative-pointer-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/tablet-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/tablet-v2_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/text-input-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/text-input-v3_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-decoration-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-foreign-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-foreign-v2_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-output-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell-v5_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell-v6_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xwayland-keyboard-grab-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/gtk-primary-selection_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-method-unstable-v2_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/server-decoration_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-data-control-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-export-dmabuf-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-foreign-toplevel-management-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-gamma-control-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-input-inhibitor-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-layer-shell-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-output-management-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-output-power-management-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-screencopy-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-virtual-pointer-v1_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/presentation-time_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell_client_api.rs /home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/viewporter_client_api.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/protocol_macro.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/staging.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/unstable.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/misc.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/wlr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-protocols-0.29.5/src/stable.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-activation-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/fullscreen-shell-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/idle-inhibit-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-method-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-timestamps-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/keyboard-shortcuts-inhibit-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/linux-dmabuf-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/linux-explicit-synchronization-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/pointer-constraints-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/pointer-gestures-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/primary-selection-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/relative-pointer-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/tablet-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/tablet-v2_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/text-input-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/text-input-v3_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-decoration-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-foreign-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-foreign-v2_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-output-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell-v5_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell-v6_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xwayland-keyboard-grab-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/gtk-primary-selection_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/input-method-unstable-v2_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/server-decoration_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-data-control-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-export-dmabuf-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-foreign-toplevel-management-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-gamma-control-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-input-inhibitor-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-layer-shell-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-output-management-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-output-power-management-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-screencopy-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/wlr-virtual-pointer-v1_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/presentation-time_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/xdg-shell_client_api.rs:
+/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out/viewporter_client_api.rs:
+
+# env-dep:OUT_DIR=/home/thomas/dev/timeplot/target/debug/build/wayland-protocols-fea6fcbf3cb10e32/out
diff --git a/.old/target/debug/deps/wayland_scanner-6a56f9d4e0508f2e.d b/.old/target/debug/deps/wayland_scanner-6a56f9d4e0508f2e.d
new file mode 100644
index 0000000..91d3272
--- /dev/null
+++ b/.old/target/debug/deps/wayland_scanner-6a56f9d4e0508f2e.d
@@ -0,0 +1,14 @@
+/home/thomas/dev/timeplot/target/debug/deps/wayland_scanner-6a56f9d4e0508f2e.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/c_interfaces.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/client_gen.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/common.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/interfaces.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/parse.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/protocol.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/server_gen.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/token.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/util.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_scanner-6a56f9d4e0508f2e.so: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/c_interfaces.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/client_gen.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/common.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/interfaces.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/parse.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/protocol.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/server_gen.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/token.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/util.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/c_interfaces.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/client_gen.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/common.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/interfaces.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/parse.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/protocol.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/server_gen.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/token.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-scanner-0.31.7/src/util.rs:
diff --git a/.old/target/debug/deps/wayland_sys-048cd416a428213a.d b/.old/target/debug/deps/wayland_sys-048cd416a428213a.d
new file mode 100644
index 0000000..18bd05b
--- /dev/null
+++ b/.old/target/debug/deps/wayland_sys-048cd416a428213a.d
@@ -0,0 +1,10 @@
+/home/thomas/dev/timeplot/target/debug/deps/wayland_sys-048cd416a428213a.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/common.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/server.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_sys-048cd416a428213a.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/common.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/server.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwayland_sys-048cd416a428213a.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/common.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/client.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/server.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/common.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/client.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.7/src/server.rs:
diff --git a/.old/target/debug/deps/wgpu_core-9177b27276cbeb6e.d b/.old/target/debug/deps/wgpu_core-9177b27276cbeb6e.d
new file mode 100644
index 0000000..1a59f06
--- /dev/null
+++ b/.old/target/debug/deps/wgpu_core-9177b27276cbeb6e.d
@@ -0,0 +1,62 @@
+/home/thomas/dev/timeplot/target/debug/deps/wgpu_core-9177b27276cbeb6e.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/binding_model.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/allocator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bind.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bundle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/clear.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/draw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_compute_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_render_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/memory_init.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/query.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/timestamp_writes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/transfer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/any_device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/bgl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/life.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hal_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hash_utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hub.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/identity.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/rank.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/ranked.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/vanilla.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline_cache.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/present.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/snatch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/storage.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/stateless.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/validation.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwgpu_core-9177b27276cbeb6e.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/binding_model.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/allocator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bind.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bundle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/clear.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/draw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_compute_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_render_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/memory_init.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/query.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/timestamp_writes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/transfer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/any_device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/bgl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/life.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hal_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hash_utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hub.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/identity.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/rank.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/ranked.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/vanilla.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline_cache.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/present.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/snatch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/storage.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/stateless.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/validation.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwgpu_core-9177b27276cbeb6e.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/binding_model.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/allocator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bind.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bundle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/clear.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/draw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_compute_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_render_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/memory_init.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/query.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/timestamp_writes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/transfer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/any_device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/bgl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/life.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hal_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hash_utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hub.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/identity.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/rank.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/ranked.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/vanilla.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline_cache.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/present.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/snatch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/storage.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/stateless.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/validation.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/binding_model.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/allocator.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bind.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bundle.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/clear.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute_command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/draw.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_compute_pass.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_render_pass.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/memory_init.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/query.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render_command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/timestamp_writes.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/transfer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/conv.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/any_device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/bgl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/global.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/life.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/queue.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/resource.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/global.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hal_api.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hash_utils.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hub.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/id.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/identity.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/buffer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/texture.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/instance.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/rank.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/ranked.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/vanilla.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline_cache.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pool.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/present.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/registry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/resource.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/snatch.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/storage.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/buffer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/metadata.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/range.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/stateless.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/texture.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/validation.rs:
diff --git a/.old/target/debug/deps/wgpu_core-a7d442c878bb374f.d b/.old/target/debug/deps/wgpu_core-a7d442c878bb374f.d
new file mode 100644
index 0000000..17cebc9
--- /dev/null
+++ b/.old/target/debug/deps/wgpu_core-a7d442c878bb374f.d
@@ -0,0 +1,60 @@
+/home/thomas/dev/timeplot/target/debug/deps/wgpu_core-a7d442c878bb374f.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/binding_model.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/allocator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bind.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bundle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/clear.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/draw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_compute_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_render_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/memory_init.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/query.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/timestamp_writes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/transfer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/any_device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/bgl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/life.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hal_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hash_utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hub.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/identity.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/rank.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/ranked.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/vanilla.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline_cache.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/present.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/snatch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/storage.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/stateless.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/validation.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwgpu_core-a7d442c878bb374f.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/binding_model.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/allocator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bind.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bundle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/clear.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/draw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_compute_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_render_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/memory_init.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/query.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/timestamp_writes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/transfer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/any_device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/bgl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/life.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hal_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hash_utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hub.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/identity.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/rank.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/ranked.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/vanilla.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline_cache.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/present.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/snatch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/storage.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/stateless.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/validation.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/binding_model.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/allocator.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bind.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bundle.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/clear.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute_command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/draw.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_compute_pass.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_render_pass.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/memory_init.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/query.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render_command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/timestamp_writes.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/transfer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/conv.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/any_device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/bgl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/global.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/life.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/queue.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/resource.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/global.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hal_api.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hash_utils.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hub.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/id.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/identity.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/buffer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/texture.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/instance.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/rank.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/ranked.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/vanilla.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline_cache.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pool.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/present.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/registry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/resource.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/snatch.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/storage.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/buffer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/metadata.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/range.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/stateless.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/texture.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/validation.rs:
diff --git a/.old/target/debug/deps/wgpu_core-b4f1dd42a9332eaa.d b/.old/target/debug/deps/wgpu_core-b4f1dd42a9332eaa.d
new file mode 100644
index 0000000..8943625
--- /dev/null
+++ b/.old/target/debug/deps/wgpu_core-b4f1dd42a9332eaa.d
@@ -0,0 +1,62 @@
+/home/thomas/dev/timeplot/target/debug/deps/wgpu_core-b4f1dd42a9332eaa.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/binding_model.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/allocator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bind.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bundle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/clear.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/draw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_compute_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_render_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/memory_init.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/query.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/timestamp_writes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/transfer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/any_device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/bgl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/life.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hal_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hash_utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hub.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/identity.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/rank.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/ranked.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/vanilla.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline_cache.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/present.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/snatch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/storage.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/stateless.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/validation.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwgpu_core-b4f1dd42a9332eaa.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/binding_model.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/allocator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bind.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bundle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/clear.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/draw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_compute_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_render_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/memory_init.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/query.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/timestamp_writes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/transfer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/any_device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/bgl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/life.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hal_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hash_utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hub.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/identity.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/rank.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/ranked.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/vanilla.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline_cache.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/present.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/snatch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/storage.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/stateless.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/validation.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwgpu_core-b4f1dd42a9332eaa.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/binding_model.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/allocator.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bind.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bundle.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/clear.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/draw.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_compute_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_render_pass.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/memory_init.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/query.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render_command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/timestamp_writes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/transfer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/any_device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/bgl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/life.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/global.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hal_api.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hash_utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hub.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/id.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/identity.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/rank.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/ranked.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/vanilla.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline_cache.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pool.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/present.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/registry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/resource.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/snatch.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/storage.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/buffer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/metadata.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/range.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/stateless.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/texture.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/validation.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/binding_model.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/allocator.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bind.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/bundle.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/clear.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/compute_command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/draw.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_compute_pass.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/dyn_render_pass.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/memory_init.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/query.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/render_command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/timestamp_writes.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/command/transfer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/conv.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/any_device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/bgl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/global.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/life.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/queue.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/device/resource.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/global.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hal_api.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hash_utils.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/hub.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/id.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/identity.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/buffer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/init_tracker/texture.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/instance.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/rank.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/ranked.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/lock/vanilla.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pipeline_cache.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/pool.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/present.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/registry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/resource.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/snatch.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/storage.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/buffer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/metadata.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/range.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/stateless.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/track/texture.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-core-22.1.0/src/validation.rs:
diff --git a/.old/target/debug/deps/wgpu_hal-89ff4f825cd382d4.d b/.old/target/debug/deps/wgpu_hal-89ff4f825cd382d4.d
new file mode 100644
index 0000000..5699126
--- /dev/null
+++ b/.old/target/debug/deps/wgpu_hal-89ff4f825cd382d4.d
@@ -0,0 +1,25 @@
+/home/thomas/dev/timeplot/target/debug/deps/wgpu_hal-89ff4f825cd382d4.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/empty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/egl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/renderdoc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.vert /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.frag
+
+/home/thomas/dev/timeplot/target/debug/deps/libwgpu_hal-89ff4f825cd382d4.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/empty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/egl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/renderdoc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.vert /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.frag
+
+/home/thomas/dev/timeplot/target/debug/deps/libwgpu_hal-89ff4f825cd382d4.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/empty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/egl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/renderdoc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.vert /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.frag
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/empty.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/egl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/adapter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/conv.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/queue.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/adapter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/conv.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/instance.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/renderdoc.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.vert:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.frag:
diff --git a/.old/target/debug/deps/wgpu_hal-98126f530bacc970.d b/.old/target/debug/deps/wgpu_hal-98126f530bacc970.d
new file mode 100644
index 0000000..777c363
--- /dev/null
+++ b/.old/target/debug/deps/wgpu_hal-98126f530bacc970.d
@@ -0,0 +1,25 @@
+/home/thomas/dev/timeplot/target/debug/deps/wgpu_hal-98126f530bacc970.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/empty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/egl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/renderdoc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.vert /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.frag
+
+/home/thomas/dev/timeplot/target/debug/deps/libwgpu_hal-98126f530bacc970.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/empty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/egl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/renderdoc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.vert /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.frag
+
+/home/thomas/dev/timeplot/target/debug/deps/libwgpu_hal-98126f530bacc970.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/empty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/egl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/renderdoc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.vert /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.frag
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/empty.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/egl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/adapter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/conv.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/queue.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/adapter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/conv.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/instance.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/renderdoc.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.vert:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.frag:
diff --git a/.old/target/debug/deps/wgpu_hal-bad918ba06dbd821.d b/.old/target/debug/deps/wgpu_hal-bad918ba06dbd821.d
new file mode 100644
index 0000000..7361c53
--- /dev/null
+++ b/.old/target/debug/deps/wgpu_hal-bad918ba06dbd821.d
@@ -0,0 +1,23 @@
+/home/thomas/dev/timeplot/target/debug/deps/wgpu_hal-bad918ba06dbd821.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/empty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/egl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/renderdoc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.vert /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.frag
+
+/home/thomas/dev/timeplot/target/debug/deps/libwgpu_hal-bad918ba06dbd821.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/empty.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/egl.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/queue.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/adapter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/command.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/conv.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/device.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/instance.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/renderdoc.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.vert /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.frag
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/empty.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/egl.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/adapter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/conv.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/queue.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/adapter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/command.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/conv.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/device.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/vulkan/instance.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/auxil/renderdoc.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.vert:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wgpu-hal-22.0.0/src/gles/./shaders/clear.frag:
diff --git a/.old/target/debug/deps/winit-4fadca74212bd92c.d b/.old/target/debug/deps/winit-4fadca74212bd92c.d
new file mode 100644
index 0000000..dff2ee4
--- /dev/null
+++ b/.old/target/debug/deps/winit-4fadca74212bd92c.d
@@ -0,0 +1,82 @@
+/home/thomas/dev/timeplot/target/debug/deps/winit-4fadca74212bd92c.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/application.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event_loop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/icon.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/keyboard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/monitor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/compose.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/keymap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/proxy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/sink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/output.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/keyboard/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/relative_pointer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/text_input/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/touch/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/kwin_blur.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_fractional_scaling.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_viewporter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/xdg_activation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/activation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/atoms.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/dnd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/event_processor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ffi.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/callbacks.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/context.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/inner.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/input_method.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/monitor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/client_msg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cookie.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/hint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/icon.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/input.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/keys.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/memory.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mouse.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/randr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/window_property.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/wm.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/xmodmap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/window.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xdisplay.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xsettings.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/window.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/startup_notify.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/wayland.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/x11.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/run_on_demand.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/pump_events.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/modifier_supplement.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/scancode.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwinit-4fadca74212bd92c.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/application.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event_loop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/icon.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/keyboard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/monitor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/compose.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/keymap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/proxy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/sink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/output.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/keyboard/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/relative_pointer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/text_input/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/touch/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/kwin_blur.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_fractional_scaling.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_viewporter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/xdg_activation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/activation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/atoms.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/dnd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/event_processor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ffi.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/callbacks.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/context.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/inner.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/input_method.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/monitor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/client_msg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cookie.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/hint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/icon.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/input.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/keys.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/memory.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mouse.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/randr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/window_property.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/wm.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/xmodmap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/window.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xdisplay.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xsettings.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/window.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/startup_notify.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/wayland.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/x11.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/run_on_demand.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/pump_events.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/modifier_supplement.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/scancode.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwinit-4fadca74212bd92c.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/application.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event_loop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/icon.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/keyboard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/monitor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/compose.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/keymap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/proxy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/sink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/output.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/keyboard/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/relative_pointer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/text_input/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/touch/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/kwin_blur.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_fractional_scaling.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_viewporter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/xdg_activation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/activation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/atoms.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/dnd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/event_processor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ffi.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/callbacks.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/context.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/inner.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/input_method.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/monitor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/client_msg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cookie.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/hint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/icon.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/input.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/keys.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/memory.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mouse.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/randr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/window_property.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/wm.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/xmodmap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/window.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xdisplay.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xsettings.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/window.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/startup_notify.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/wayland.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/x11.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/run_on_demand.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/pump_events.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/modifier_supplement.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/scancode.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/application.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/cursor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event_loop.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/icon.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/keyboard.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/monitor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/compose.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/keymap.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/state.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/proxy.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/sink.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/output.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/keyboard/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/relative_pointer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/text_input/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/touch/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/state.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/cursor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/kwin_blur.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_fractional_scaling.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_viewporter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/xdg_activation.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/state.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/activation.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/atoms.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/dnd.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/event_processor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ffi.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/callbacks.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/context.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/inner.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/input_method.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/monitor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/client_msg.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cookie.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cursor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/geometry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/hint.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/icon.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/input.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/keys.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/memory.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mouse.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/randr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/window_property.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/wm.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/xmodmap.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/window.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xdisplay.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xsettings.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/utils.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/window.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/startup_notify.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/wayland.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/x11.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/run_on_demand.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/pump_events.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/modifier_supplement.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/scancode.rs:
diff --git a/.old/target/debug/deps/winit-83180b602a687aee.d b/.old/target/debug/deps/winit-83180b602a687aee.d
new file mode 100644
index 0000000..d88843f
--- /dev/null
+++ b/.old/target/debug/deps/winit-83180b602a687aee.d
@@ -0,0 +1,80 @@
+/home/thomas/dev/timeplot/target/debug/deps/winit-83180b602a687aee.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/application.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event_loop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/icon.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/keyboard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/monitor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/compose.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/keymap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/proxy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/sink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/output.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/keyboard/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/relative_pointer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/text_input/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/touch/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/kwin_blur.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_fractional_scaling.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_viewporter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/xdg_activation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/activation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/atoms.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/dnd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/event_processor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ffi.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/callbacks.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/context.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/inner.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/input_method.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/monitor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/client_msg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cookie.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/hint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/icon.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/input.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/keys.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/memory.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mouse.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/randr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/window_property.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/wm.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/xmodmap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/window.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xdisplay.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xsettings.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/window.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/startup_notify.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/wayland.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/x11.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/run_on_demand.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/pump_events.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/modifier_supplement.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/scancode.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libwinit-83180b602a687aee.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/application.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event_loop.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/icon.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/keyboard.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/monitor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/compose.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/keymap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/proxy.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/sink.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/output.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/keyboard/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/relative_pointer.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/text_input/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/touch/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/kwin_blur.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_fractional_scaling.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_viewporter.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/xdg_activation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/state.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/activation.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/atoms.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/dnd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/event_processor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ffi.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/callbacks.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/context.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/inner.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/input_method.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/monitor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/client_msg.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cookie.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/geometry.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/hint.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/icon.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/input.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/keys.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/memory.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mouse.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/randr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/window_property.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/wm.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/xmodmap.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/window.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xdisplay.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xsettings.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/utils.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/window.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/mod.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/startup_notify.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/wayland.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/x11.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/run_on_demand.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/pump_events.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/modifier_supplement.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/scancode.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/application.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/cursor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/event_loop.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/icon.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/keyboard.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/monitor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/compose.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/keymap.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/common/xkb/state.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/proxy.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/event_loop/sink.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/output.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/keyboard/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/pointer/relative_pointer.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/text_input/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/seat/touch/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/state.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/cursor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/kwin_blur.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_fractional_scaling.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/wp_viewporter.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/types/xdg_activation.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/wayland/window/state.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/activation.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/atoms.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/dnd.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/event_processor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ffi.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/callbacks.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/context.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/inner.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/ime/input_method.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/monitor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/client_msg.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cookie.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/cursor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/geometry.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/hint.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/icon.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/input.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/keys.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/memory.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/mouse.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/randr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/window_property.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/wm.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/util/xmodmap.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/window.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xdisplay.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform_impl/linux/x11/xsettings.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/utils.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/window.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/mod.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/startup_notify.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/wayland.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/x11.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/run_on_demand.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/pump_events.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/modifier_supplement.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winit-0.30.12/src/platform/scancode.rs:
diff --git a/.old/target/debug/deps/x11_dl-529fae40c2816ad8.d b/.old/target/debug/deps/x11_dl-529fae40c2816ad8.d
new file mode 100644
index 0000000..73e1ee2
--- /dev/null
+++ b/.old/target/debug/deps/x11_dl-529fae40c2816ad8.d
@@ -0,0 +1,37 @@
+/home/thomas/dev/timeplot/target/debug/deps/x11_dl-529fae40c2816ad8.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/link.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/internal.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xlib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/dpms.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/glx.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/keysym.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/sync.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xcursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xf86vmode.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xfixes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xft.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinerama.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinput.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinput2.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xlib_xcb.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xmd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xmu.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xpresent.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrecord.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrender.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xshm.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xss.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xtest.rs /home/thomas/dev/timeplot/target/debug/build/x11-dl-9b3d2c981ad0d476/out/config.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrandr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/old_xrandr.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libx11_dl-529fae40c2816ad8.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/link.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/internal.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xlib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/dpms.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/glx.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/keysym.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/sync.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xcursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xf86vmode.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xfixes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xft.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinerama.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinput.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinput2.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xlib_xcb.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xmd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xmu.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xpresent.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrecord.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrender.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xshm.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xss.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xtest.rs /home/thomas/dev/timeplot/target/debug/build/x11-dl-9b3d2c981ad0d476/out/config.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrandr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/old_xrandr.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libx11_dl-529fae40c2816ad8.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/link.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/internal.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/error.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xlib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/dpms.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/glx.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/keysym.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/sync.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xcursor.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xf86vmode.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xfixes.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xft.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinerama.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinput.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinput2.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xlib_xcb.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xmd.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xmu.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xpresent.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrecord.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrender.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xshm.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xss.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xt.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xtest.rs /home/thomas/dev/timeplot/target/debug/build/x11-dl-9b3d2c981ad0d476/out/config.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrandr.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/old_xrandr.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/link.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/internal.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/error.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xlib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/dpms.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/glx.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/keysym.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/sync.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xcursor.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xf86vmode.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xfixes.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xft.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinerama.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinput.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xinput2.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xlib_xcb.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xmd.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xmu.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xpresent.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrecord.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrender.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xshm.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xss.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xt.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xtest.rs:
+/home/thomas/dev/timeplot/target/debug/build/x11-dl-9b3d2c981ad0d476/out/config.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/xrandr.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/x11-dl-2.21.0/src/old_xrandr.rs:
+
+# env-dep:OUT_DIR=/home/thomas/dev/timeplot/target/debug/build/x11-dl-9b3d2c981ad0d476/out
diff --git a/.old/target/debug/deps/xkeysym-5f68b5da6eaed5c6.d b/.old/target/debug/deps/xkeysym-5f68b5da6eaed5c6.d
new file mode 100644
index 0000000..eed0a66
--- /dev/null
+++ b/.old/target/debug/deps/xkeysym-5f68b5da6eaed5c6.d
@@ -0,0 +1,8 @@
+/home/thomas/dev/timeplot/target/debug/deps/xkeysym-5f68b5da6eaed5c6.d: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/xkeysym-0.2.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/xkeysym-0.2.1/src/automatically_generated.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libxkeysym-5f68b5da6eaed5c6.rlib: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/xkeysym-0.2.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/xkeysym-0.2.1/src/automatically_generated.rs
+
+/home/thomas/dev/timeplot/target/debug/deps/libxkeysym-5f68b5da6eaed5c6.rmeta: /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/xkeysym-0.2.1/src/lib.rs /home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/xkeysym-0.2.1/src/automatically_generated.rs
+
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/xkeysym-0.2.1/src/lib.rs:
+/home/thomas/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/xkeysym-0.2.1/src/automatically_generated.rs:
diff --git a/cpp-timeplot/CMakeLists.txt b/cpp-timeplot/CMakeLists.txt
deleted file mode 100644
index 5ae12be..0000000
--- a/cpp-timeplot/CMakeLists.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-cmake_minimum_required(VERSION 3.20)
-project(timeplot-cpp VERSION 0.1.0)
-
-set(CMAKE_CXX_STANDARD 20)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
-
-# Find dependencies
-find_package(PkgConfig REQUIRED)
-
-# GLFW for windowing
-pkg_check_modules(GLFW REQUIRED glfw3)
-
-# Use precompiled Dawn from Chromium
-option(USE_SYSTEM_DAWN "Use system-installed Dawn" OFF)
-
-if(USE_SYSTEM_DAWN)
- find_package(dawn REQUIRED)
-else()
- # Download precompiled Dawn binaries
- message(STATUS "Downloading precompiled Dawn...")
-
- set(DAWN_VERSION "6536")
- set(DAWN_DIR "${CMAKE_BINARY_DIR}/dawn-prebuilt")
-
- if(NOT EXISTS "${DAWN_DIR}")
- # Try to download from a prebuilt source
- # Note: Dawn doesn't officially provide prebuilt binaries, so we'll build once and cache
- # For now, let's use webgpu-distribution which provides prebuilt headers
- include(FetchContent)
-
- # Fetch webgpu-distribution (lighter than full Dawn)
- FetchContent_Declare(
- webgpu-distribution
- GIT_REPOSITORY https://github.com/eliemichel/WebGPU-distribution
- GIT_TAG main
- GIT_SHALLOW TRUE
- )
-
- FetchContent_MakeAvailable(webgpu-distribution)
-
- set(WEBGPU_BACKEND "WGPU" CACHE STRING "Backend to use")
-
- # Fetch webgpu-hpp (C++ wrapper)
- FetchContent_Declare(
- webgpu-hpp
- GIT_REPOSITORY https://github.com/eliemichel/WebGPU-Cpp
- GIT_TAG main
- GIT_SHALLOW TRUE
- )
- FetchContent_MakeAvailable(webgpu-hpp)
-
- # Fetch glfw3webgpu (GLFW-WebGPU integration)
- FetchContent_Declare(
- glfw3webgpu
- GIT_REPOSITORY https://github.com/eliemichel/glfw3webgpu
- GIT_TAG main
- GIT_SHALLOW TRUE
- )
- FetchContent_MakeAvailable(glfw3webgpu)
- endif()
-endif()
-
-# Source files
-set(SOURCES
- src/main.cpp
- src/renderer.cpp
- src/waterfall.cpp
-)
-
-add_executable(timeplot ${SOURCES})
-
-target_include_directories(timeplot PRIVATE
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- ${GLFW_INCLUDE_DIRS}
-)
-
-target_link_libraries(timeplot PRIVATE
- ${GLFW_LIBRARIES}
- webgpu
- glfw3webgpu
-)
-
-# Copy shaders to build directory
-file(GLOB SHADERS "${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.wgsl")
-file(COPY ${SHADERS} DESTINATION ${CMAKE_BINARY_DIR}/shaders)
diff --git a/cpp-timeplot/README.md b/cpp-timeplot/README.md
deleted file mode 100644
index 2700f9f..0000000
--- a/cpp-timeplot/README.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# TimePlot C++ Implementation
-
-WebGPU-based waterfall plot renderer using Dawn and GLFW.
-
-## Dependencies
-
-- CMake 3.20+
-- C++20 compiler
-- GLFW3
-- Dawn (fetched automatically by CMake)
-
-## Build
-
-```bash
-mkdir build && cd build
-cmake ..
-make -j$(nproc)
-./timeplot
-```
-
-## Controls
-
-- `G` - Toggle grid visibility
-- `ESC` - Exit application
-
-## Features
-
-- Multi-threaded GPU rendering via Vulkan/WebGPU
-- Multiple graph views (side-by-side)
-- Animated waterfall plots
-- Grid lines and borders
-- Real-time data visualization
diff --git a/cpp-timeplot/shaders/waterfall.wgsl b/cpp-timeplot/shaders/waterfall.wgsl
deleted file mode 100644
index 6655301..0000000
--- a/cpp-timeplot/shaders/waterfall.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-struct VertexInput {
- @location(0) position: vec2<f32>,
- @location(1) color: vec3<f32>,
-}
-
-struct VertexOutput {
- @builtin(position) clip_position: vec4<f32>,
- @location(0) color: vec3<f32>,
-}
-
-@vertex
-fn vs_main(in: VertexInput) -> VertexOutput {
- var out: VertexOutput;
- out.clip_position = vec4<f32>(in.position, 0.0, 1.0);
- out.color = in.color;
- return out;
-}
-
-@fragment
-fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
- return vec4<f32>(in.color, 1.0);
-}
diff --git a/cpp-timeplot/src/main.cpp b/cpp-timeplot/src/main.cpp
deleted file mode 100644
index 35ae051..0000000
--- a/cpp-timeplot/src/main.cpp
+++ /dev/null
@@ -1,210 +0,0 @@
-#include <GLFW/glfw3.h>
-#include <webgpu/webgpu.h>
-#include <glfw3webgpu.h>
-#include <iostream>
-#include <memory>
-#include <cstdlib>
-
-#include "renderer.h"
-
-constexpr int WINDOW_WIDTH = 1280;
-constexpr int WINDOW_HEIGHT = 720;
-
-class Application {
-public:
- Application() : window_(nullptr), instance_(nullptr), device_(nullptr),
- surface_(nullptr), adapter_(nullptr) {}
-
- ~Application() {
- cleanup();
- }
-
- bool initialize() {
- if (!glfwInit()) {
- std::cerr << "Failed to initialize GLFW" << std::endl;
- return false;
- }
-
- glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
- glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);
-
- window_ = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT,
- "TimePlot - C++ WebGPU", nullptr, nullptr);
- if (!window_) {
- std::cerr << "Failed to create window" << std::endl;
- return false;
- }
-
- glfwSetWindowUserPointer(window_, this);
- glfwSetKeyCallback(window_, keyCallback);
- glfwSetFramebufferSizeCallback(window_, resizeCallback);
-
- if (!initWebGPU()) {
- return false;
- }
-
- renderer_ = std::make_unique<Renderer>(device_, surface_, WINDOW_WIDTH, WINDOW_HEIGHT);
- if (!renderer_->initialize()) {
- std::cerr << "Failed to initialize renderer" << std::endl;
- return false;
- }
-
- return true;
- }
-
- void run() {
- while (!glfwWindowShouldClose(window_)) {
- glfwPollEvents();
-
- renderer_->update();
- renderer_->render();
- }
- }
-
-private:
- static void onAdapterRequestEnded(WGPURequestAdapterStatus status, WGPUAdapter adapter,
- WGPUStringView message, void* userdata1, void* userdata2) {
- if (status == WGPURequestAdapterStatus_Success) {
- *static_cast<WGPUAdapter*>(userdata1) = adapter;
- } else {
- std::cerr << "Failed to get adapter: " << std::string(message.data, message.length) << std::endl;
- }
- }
-
- static void onDeviceRequestEnded(WGPURequestDeviceStatus status, WGPUDevice device,
- WGPUStringView message, void* userdata1, void* userdata2) {
- if (status == WGPURequestDeviceStatus_Success) {
- *static_cast<WGPUDevice*>(userdata1) = device;
- } else {
- std::cerr << "Failed to get device: " << std::string(message.data, message.length) << std::endl;
- }
- }
-
- bool initWebGPU() {
- // Create instance
- WGPUInstanceDescriptor instanceDesc = {};
- instanceDesc.nextInChain = nullptr;
-
- instance_ = wgpuCreateInstance(&instanceDesc);
- if (!instance_) {
- std::cerr << "Failed to create WebGPU instance" << std::endl;
- return false;
- }
-
- // Create surface from GLFW window
- surface_ = glfwCreateWindowWGPUSurface(instance_, window_);
- if (!surface_) {
- std::cerr << "Failed to create surface" << std::endl;
- return false;
- }
-
- // Request adapter with callback
- WGPURequestAdapterOptions adapterOpts = {};
- adapterOpts.nextInChain = nullptr;
- adapterOpts.compatibleSurface = surface_;
- adapterOpts.powerPreference = WGPUPowerPreference_HighPerformance;
-
- WGPURequestAdapterCallbackInfo adapterCallbackInfo = {};
- adapterCallbackInfo.mode = WGPUCallbackMode_AllowSpontaneous;
- adapterCallbackInfo.callback = onAdapterRequestEnded;
- adapterCallbackInfo.userdata1 = &adapter_;
- adapterCallbackInfo.userdata2 = nullptr;
-
- wgpuInstanceRequestAdapter(instance_, &adapterOpts, adapterCallbackInfo);
-
- // Process events until adapter is ready
- while (!adapter_) {
- wgpuInstanceProcessEvents(instance_);
- }
-
- // Request device with callback
- WGPUDeviceDescriptor deviceDesc = {};
- deviceDesc.nextInChain = nullptr;
- deviceDesc.label = {nullptr, WGPU_STRLEN};
- deviceDesc.requiredFeatureCount = 0;
- deviceDesc.requiredLimits = nullptr;
- deviceDesc.defaultQueue.nextInChain = nullptr;
- deviceDesc.defaultQueue.label = {nullptr, WGPU_STRLEN};
- deviceDesc.deviceLostCallbackInfo.nextInChain = nullptr;
- deviceDesc.deviceLostCallbackInfo.mode = WGPUCallbackMode_AllowSpontaneous;
- deviceDesc.deviceLostCallbackInfo.callback = nullptr;
- deviceDesc.uncapturedErrorCallbackInfo.nextInChain = nullptr;
- deviceDesc.uncapturedErrorCallbackInfo.callback = nullptr;
-
- WGPURequestDeviceCallbackInfo deviceCallbackInfo = {};
- deviceCallbackInfo.mode = WGPUCallbackMode_AllowSpontaneous;
- deviceCallbackInfo.callback = onDeviceRequestEnded;
- deviceCallbackInfo.userdata1 = &device_;
- deviceCallbackInfo.userdata2 = nullptr;
-
- wgpuAdapterRequestDevice(adapter_, &deviceDesc, deviceCallbackInfo);
-
- // Process events until device is ready
- while (!device_) {
- wgpuInstanceProcessEvents(instance_);
- }
-
- return true;
- }
-
- void cleanup() {
- renderer_.reset();
-
- if (device_) {
- wgpuDeviceRelease(device_);
- device_ = nullptr;
- }
- if (adapter_) {
- wgpuAdapterRelease(adapter_);
- adapter_ = nullptr;
- }
- if (surface_) {
- wgpuSurfaceRelease(surface_);
- surface_ = nullptr;
- }
- if (instance_) {
- wgpuInstanceRelease(instance_);
- instance_ = nullptr;
- }
-
- if (window_) {
- glfwDestroyWindow(window_);
- window_ = nullptr;
- }
- glfwTerminate();
- }
-
- static void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) {
- auto* app = static_cast<Application*>(glfwGetWindowUserPointer(window));
- if (action == GLFW_PRESS) {
- if (key == GLFW_KEY_ESCAPE) {
- glfwSetWindowShouldClose(window, GLFW_TRUE);
- } else if (key == GLFW_KEY_G) {
- app->renderer_->toggleGrid();
- }
- }
- }
-
- static void resizeCallback(GLFWwindow* window, int width, int height) {
- auto* app = static_cast<Application*>(glfwGetWindowUserPointer(window));
- app->renderer_->resize(width, height);
- }
-
- GLFWwindow* window_;
- WGPUInstance instance_;
- WGPUAdapter adapter_;
- WGPUDevice device_;
- WGPUSurface surface_;
- std::unique_ptr<Renderer> renderer_;
-};
-
-int main() {
- Application app;
-
- if (!app.initialize()) {
- return EXIT_FAILURE;
- }
-
- app.run();
- return EXIT_SUCCESS;
-}
diff --git a/cpp-timeplot/src/renderer.cpp b/cpp-timeplot/src/renderer.cpp
deleted file mode 100644
index b65ed46..0000000
--- a/cpp-timeplot/src/renderer.cpp
+++ /dev/null
@@ -1,249 +0,0 @@
-#include "renderer.h"
-#include "waterfall.h"
-#include <fstream>
-#include <sstream>
-#include <iostream>
-
-Renderer::Renderer(WGPUDevice device, WGPUSurface surface, int width, int height)
- : device_(device), surface_(surface), width_(width), height_(height), time_(0.0f),
- surfaceFormat_(WGPUTextureFormat_BGRA8Unorm), linePipeline_(nullptr), lineListPipeline_(nullptr) {}
-
-Renderer::~Renderer() {
- if (linePipeline_) wgpuRenderPipelineRelease(linePipeline_);
- if (lineListPipeline_) wgpuRenderPipelineRelease(lineListPipeline_);
-}
-
-bool Renderer::initialize() {
- configureSurface();
- createPipelines();
-
- // Create two waterfall views side-by-side
- waterfalls_.push_back(std::make_unique<Waterfall>(
- device_, 0.0f, 0.1f, 0.5f, 0.9f, "Frequency vs Time"));
- waterfalls_.push_back(std::make_unique<Waterfall>(
- device_, 0.5f, 0.1f, 0.5f, 0.9f, "Position vs Time"));
-
- for (auto& waterfall : waterfalls_) {
- if (!waterfall->initialize()) {
- return false;
- }
- }
-
- return true;
-}
-
-void Renderer::configureSurface() {
- WGPUSurfaceConfiguration config = {};
- config.nextInChain = nullptr;
- config.device = device_;
- config.format = surfaceFormat_;
- config.usage = WGPUTextureUsage_RenderAttachment;
- config.width = width_;
- config.height = height_;
- config.presentMode = WGPUPresentMode_Fifo;
- config.alphaMode = WGPUCompositeAlphaMode_Auto;
- config.viewFormatCount = 0;
- config.viewFormats = nullptr;
-
- wgpuSurfaceConfigure(surface_, &config);
-}
-
-void Renderer::createPipelines() {
- // Load shader
- std::ifstream shaderFile("shaders/waterfall.wgsl");
- std::stringstream buffer;
- buffer << shaderFile.rdbuf();
- std::string shaderCode = buffer.str();
-
- WGPUShaderSourceWGSL wgslSource = {};
- wgslSource.chain.sType = WGPUSType_ShaderSourceWGSL;
- wgslSource.chain.next = nullptr;
- wgslSource.code = {shaderCode.c_str(), shaderCode.length()};
-
- WGPUShaderModuleDescriptor shaderDesc = {};
- shaderDesc.nextInChain = &wgslSource.chain;
- shaderDesc.label = {nullptr, WGPU_STRLEN};
-
- WGPUShaderModule shader = wgpuDeviceCreateShaderModule(device_, &shaderDesc);
-
- // Vertex buffer layout
- WGPUVertexAttribute attributes[2] = {};
- attributes[0].format = WGPUVertexFormat_Float32x2;
- attributes[0].offset = 0;
- attributes[0].shaderLocation = 0;
-
- attributes[1].format = WGPUVertexFormat_Float32x3;
- attributes[1].offset = 2 * sizeof(float);
- attributes[1].shaderLocation = 1;
-
- WGPUVertexBufferLayout vertexBufferLayout = {};
- vertexBufferLayout.arrayStride = 5 * sizeof(float);
- vertexBufferLayout.stepMode = WGPUVertexStepMode_Vertex;
- vertexBufferLayout.attributeCount = 2;
- vertexBufferLayout.attributes = attributes;
-
- // Pipeline layout
- WGPUPipelineLayoutDescriptor layoutDesc = {};
- layoutDesc.nextInChain = nullptr;
- layoutDesc.label = {nullptr, WGPU_STRLEN};
- layoutDesc.bindGroupLayoutCount = 0;
- layoutDesc.bindGroupLayouts = nullptr;
-
- WGPUPipelineLayout pipelineLayout = wgpuDeviceCreatePipelineLayout(device_, &layoutDesc);
-
- // Color target
- WGPUBlendState blend = {};
- blend.color.operation = WGPUBlendOperation_Add;
- blend.color.srcFactor = WGPUBlendFactor_One;
- blend.color.dstFactor = WGPUBlendFactor_Zero;
- blend.alpha.operation = WGPUBlendOperation_Add;
- blend.alpha.srcFactor = WGPUBlendFactor_One;
- blend.alpha.dstFactor = WGPUBlendFactor_Zero;
-
- WGPUColorTargetState colorTarget = {};
- colorTarget.nextInChain = nullptr;
- colorTarget.format = surfaceFormat_;
- colorTarget.blend = &blend;
- colorTarget.writeMask = WGPUColorWriteMask_All;
-
- WGPUFragmentState fragmentState = {};
- fragmentState.nextInChain = nullptr;
- fragmentState.module = shader;
- fragmentState.entryPoint = {"fs_main", 7};
- fragmentState.constantCount = 0;
- fragmentState.constants = nullptr;
- fragmentState.targetCount = 1;
- fragmentState.targets = &colorTarget;
-
- // Line strip pipeline
- WGPURenderPipelineDescriptor pipelineDesc = {};
- pipelineDesc.nextInChain = nullptr;
- pipelineDesc.label = {nullptr, WGPU_STRLEN};
- pipelineDesc.layout = pipelineLayout;
-
- pipelineDesc.vertex.nextInChain = nullptr;
- pipelineDesc.vertex.module = shader;
- pipelineDesc.vertex.entryPoint = {"vs_main", 7};
- pipelineDesc.vertex.constantCount = 0;
- pipelineDesc.vertex.constants = nullptr;
- pipelineDesc.vertex.bufferCount = 1;
- pipelineDesc.vertex.buffers = &vertexBufferLayout;
-
- pipelineDesc.primitive.nextInChain = nullptr;
- pipelineDesc.primitive.topology = WGPUPrimitiveTopology_LineStrip;
- pipelineDesc.primitive.stripIndexFormat = WGPUIndexFormat_Undefined;
- pipelineDesc.primitive.frontFace = WGPUFrontFace_CCW;
- pipelineDesc.primitive.cullMode = WGPUCullMode_None;
-
- pipelineDesc.depthStencil = nullptr;
- pipelineDesc.multisample.nextInChain = nullptr;
- pipelineDesc.multisample.count = 1;
- pipelineDesc.multisample.mask = ~0u;
- pipelineDesc.multisample.alphaToCoverageEnabled = false;
-
- pipelineDesc.fragment = &fragmentState;
-
- linePipeline_ = wgpuDeviceCreateRenderPipeline(device_, &pipelineDesc);
-
- // Line list pipeline for grid
- pipelineDesc.primitive.topology = WGPUPrimitiveTopology_LineList;
- lineListPipeline_ = wgpuDeviceCreateRenderPipeline(device_, &pipelineDesc);
-
- // Cleanup
- wgpuPipelineLayoutRelease(pipelineLayout);
- wgpuShaderModuleRelease(shader);
-}
-
-void Renderer::update() {
- time_ += 0.016f; // ~60fps
-
- for (auto& waterfall : waterfalls_) {
- waterfall->update(time_);
- }
-}
-
-void Renderer::render() {
- WGPUSurfaceTexture surfaceTexture;
- wgpuSurfaceGetCurrentTexture(surface_, &surfaceTexture);
-
- if (surfaceTexture.status != WGPUSurfaceGetCurrentTextureStatus_SuccessOptimal &&
- surfaceTexture.status != WGPUSurfaceGetCurrentTextureStatus_SuccessSuboptimal) {
- std::cerr << "Failed to get surface texture" << std::endl;
- return;
- }
-
- WGPUTextureViewDescriptor viewDesc = {};
- viewDesc.nextInChain = nullptr;
- viewDesc.label = {nullptr, WGPU_STRLEN};
- viewDesc.format = surfaceFormat_;
- viewDesc.dimension = WGPUTextureViewDimension_2D;
- viewDesc.baseMipLevel = 0;
- viewDesc.mipLevelCount = 1;
- viewDesc.baseArrayLayer = 0;
- viewDesc.arrayLayerCount = 1;
- viewDesc.aspect = WGPUTextureAspect_All;
-
- WGPUTextureView textureView = wgpuTextureCreateView(surfaceTexture.texture, &viewDesc);
-
- WGPUCommandEncoderDescriptor encoderDesc = {};
- encoderDesc.nextInChain = nullptr;
- encoderDesc.label = {nullptr, WGPU_STRLEN};
-
- WGPUCommandEncoder encoder = wgpuDeviceCreateCommandEncoder(device_, &encoderDesc);
-
- WGPURenderPassColorAttachment colorAttachment = {};
- colorAttachment.nextInChain = nullptr;
- colorAttachment.view = textureView;
- colorAttachment.depthSlice = WGPU_DEPTH_SLICE_UNDEFINED;
- colorAttachment.resolveTarget = nullptr;
- colorAttachment.loadOp = WGPULoadOp_Clear;
- colorAttachment.storeOp = WGPUStoreOp_Store;
- colorAttachment.clearValue = {0.1, 0.1, 0.15, 1.0};
-
- WGPURenderPassDescriptor renderPassDesc = {};
- renderPassDesc.nextInChain = nullptr;
- renderPassDesc.label = {nullptr, WGPU_STRLEN};
- renderPassDesc.colorAttachmentCount = 1;
- renderPassDesc.colorAttachments = &colorAttachment;
- renderPassDesc.depthStencilAttachment = nullptr;
- renderPassDesc.occlusionQuerySet = nullptr;
- renderPassDesc.timestampWrites = nullptr;
-
- WGPURenderPassEncoder pass = wgpuCommandEncoderBeginRenderPass(encoder, &renderPassDesc);
-
- for (auto& waterfall : waterfalls_) {
- waterfall->render(pass, linePipeline_, lineListPipeline_, width_, height_);
- }
-
- wgpuRenderPassEncoderEnd(pass);
-
- WGPUCommandBufferDescriptor cmdBufferDesc = {};
- cmdBufferDesc.nextInChain = nullptr;
- cmdBufferDesc.label = {nullptr, WGPU_STRLEN};
-
- WGPUCommandBuffer commands = wgpuCommandEncoderFinish(encoder, &cmdBufferDesc);
-
- WGPUQueue queue = wgpuDeviceGetQueue(device_);
- wgpuQueueSubmit(queue, 1, &commands);
- wgpuSurfacePresent(surface_);
-
- // Cleanup
- wgpuCommandBufferRelease(commands);
- wgpuCommandEncoderRelease(encoder);
- wgpuRenderPassEncoderRelease(pass);
- wgpuTextureViewRelease(textureView);
-}
-
-void Renderer::resize(int width, int height) {
- if (width > 0 && height > 0) {
- width_ = width;
- height_ = height;
- configureSurface();
- }
-}
-
-void Renderer::toggleGrid() {
- for (auto& waterfall : waterfalls_) {
- waterfall->toggleGrid();
- }
-}
diff --git a/cpp-timeplot/src/renderer.h b/cpp-timeplot/src/renderer.h
deleted file mode 100644
index 0656cdc..0000000
--- a/cpp-timeplot/src/renderer.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#pragma once
-
-#include <webgpu/webgpu.h>
-#include <vector>
-#include <memory>
-
-class Waterfall;
-
-class Renderer {
-public:
- Renderer(WGPUDevice device, WGPUSurface surface, int width, int height);
- ~Renderer();
-
- bool initialize();
- void update();
- void render();
- void resize(int width, int height);
- void toggleGrid();
-
-private:
- void configureSurface();
- void createPipelines();
-
- WGPUDevice device_;
- WGPUSurface surface_;
- WGPUTextureFormat surfaceFormat_;
- WGPURenderPipeline linePipeline_;
- WGPURenderPipeline lineListPipeline_;
-
- int width_;
- int height_;
- float time_;
-
- std::vector<std::unique_ptr<Waterfall>> waterfalls_;
-};
diff --git a/cpp-timeplot/src/waterfall.cpp b/cpp-timeplot/src/waterfall.cpp
deleted file mode 100644
index 7fa0bee..0000000
--- a/cpp-timeplot/src/waterfall.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-#include "waterfall.h"
-#include <cmath>
-#include <algorithm>
-
-Waterfall::Waterfall(WGPUDevice device, float x, float y, float width, float height, const std::string& title)
- : device_(device), vertexBuffer_(nullptr), x_(x), y_(y), width_(width), height_(height),
- title_(title), showGrid_(true) {}
-
-Waterfall::~Waterfall() {
- if (vertexBuffer_) wgpuBufferRelease(vertexBuffer_);
-}
-
-bool Waterfall::initialize() {
- // Create vertex buffer (large enough for grid, border, and waterfall lines)
- WGPUBufferDescriptor bufferDesc = {};
- bufferDesc.nextInChain = nullptr;
- bufferDesc.label = {nullptr, WGPU_STRLEN};
- bufferDesc.size = sizeof(Vertex) * POINTS_PER_LINE * 100;
- bufferDesc.usage = WGPUBufferUsage_Vertex | WGPUBufferUsage_CopyDst;
- bufferDesc.mappedAtCreation = false;
-
- vertexBuffer_ = wgpuDeviceCreateBuffer(device_, &bufferDesc);
- return vertexBuffer_ != nullptr;
-}
-
-void Waterfall::update(float time) {
- // Add new line every 10 frames
- if (static_cast<int>(time * 60.0f) % 10 == 0 && lines_.size() < MAX_LINES) {
- std::vector<Vertex> line;
- float phase = time;
- float freq = 2.0f + std::sin(time * 0.5f) * 1.0f;
-
- for (int i = 0; i < POINTS_PER_LINE; ++i) {
- float x = (static_cast<float>(i) / POINTS_PER_LINE) * 2.0f - 1.0f;
- float y = std::sin(static_cast<float>(i) * 0.1f * freq + phase) * 0.3f;
-
- float hue = std::fmod(time * 0.1f, 1.0f);
- Vertex v{
- {x, y},
- {
- std::abs(std::sin(hue * 6.0f)),
- std::abs(std::sin((hue + 0.33f) * 6.0f)),
- std::abs(std::sin((hue + 0.66f) * 6.0f))
- }
- };
- line.push_back(v);
- }
- lines_.push_back(line);
- }
-
- // Scroll lines down
- for (auto& line : lines_) {
- for (auto& vertex : line) {
- vertex.position[1] -= 0.01f;
- }
- }
-
- // Remove lines that scrolled off screen
- lines_.erase(
- std::remove_if(lines_.begin(), lines_.end(),
- [](const std::vector<Vertex>& line) {
- return !line.empty() && line[0].position[1] < -1.1f;
- }),
- lines_.end()
- );
-}
-
-void Waterfall::render(WGPURenderPassEncoder pass,
- WGPURenderPipeline linePipeline,
- WGPURenderPipeline lineListPipeline,
- int windowWidth, int windowHeight) {
- // Set viewport
- wgpuRenderPassEncoderSetViewport(pass,
- x_ * windowWidth,
- y_ * windowHeight,
- width_ * windowWidth,
- height_ * windowHeight,
- 0.0f, 1.0f
- );
-
- // Collect all vertices
- std::vector<Vertex> allVertices;
-
- // Border
- auto borderVertices = generateBorder();
- size_t borderOffset = allVertices.size();
- allVertices.insert(allVertices.end(), borderVertices.begin(), borderVertices.end());
-
- // Grid
- size_t gridOffset = allVertices.size();
- size_t gridCount = 0;
- if (showGrid_) {
- auto gridVertices = generateGridLines();
- gridCount = gridVertices.size();
- allVertices.insert(allVertices.end(), gridVertices.begin(), gridVertices.end());
- }
-
- // Waterfall lines
- size_t linesOffset = allVertices.size();
- for (const auto& line : lines_) {
- allVertices.insert(allVertices.end(), line.begin(), line.end());
- }
-
- // Upload vertices
- if (!allVertices.empty()) {
- WGPUQueue queue = wgpuDeviceGetQueue(device_);
- wgpuQueueWriteBuffer(queue, vertexBuffer_, 0, allVertices.data(),
- allVertices.size() * sizeof(Vertex));
- }
-
- // Draw border
- wgpuRenderPassEncoderSetPipeline(pass, lineListPipeline);
- wgpuRenderPassEncoderSetVertexBuffer(pass, 0, vertexBuffer_, 0, allVertices.size() * sizeof(Vertex));
- wgpuRenderPassEncoderDraw(pass, borderVertices.size(), 1, borderOffset, 0);
-
- // Draw grid
- if (showGrid_ && gridCount > 0) {
- wgpuRenderPassEncoderSetPipeline(pass, lineListPipeline);
- wgpuRenderPassEncoderDraw(pass, gridCount, 1, gridOffset, 0);
- }
-
- // Draw waterfall lines
- if (!lines_.empty()) {
- wgpuRenderPassEncoderSetPipeline(pass, linePipeline);
- for (size_t i = 0; i < lines_.size(); ++i) {
- uint32_t start = linesOffset + i * POINTS_PER_LINE;
- wgpuRenderPassEncoderDraw(pass, POINTS_PER_LINE, 1, start, 0);
- }
- }
-}
-
-void Waterfall::toggleGrid() {
- showGrid_ = !showGrid_;
-}
-
-std::vector<Vertex> Waterfall::generateGridLines() {
- std::vector<Vertex> vertices;
- float gridColor[3] = {0.3f, 0.7f, 0.9f};
-
- // Vertical lines
- for (int i = 0; i <= 10; ++i) {
- float x = -1.0f + (static_cast<float>(i) / 10.0f) * 2.0f;
- vertices.push_back({{x, -1.0f}, {gridColor[0], gridColor[1], gridColor[2]}});
- vertices.push_back({{x, 1.0f}, {gridColor[0], gridColor[1], gridColor[2]}});
- }
-
- // Horizontal lines
- for (int i = 0; i <= 10; ++i) {
- float y = -1.0f + (static_cast<float>(i) / 10.0f) * 2.0f;
- vertices.push_back({{-1.0f, y}, {gridColor[0], gridColor[1], gridColor[2]}});
- vertices.push_back({{1.0f, y}, {gridColor[0], gridColor[1], gridColor[2]}});
- }
-
- return vertices;
-}
-
-std::vector<Vertex> Waterfall::generateBorder() {
- float borderColor[3] = {0.6f, 0.7f, 0.7f};
-
- return {
- {{-1.0f, 1.0f}, {borderColor[0], borderColor[1], borderColor[2]}},
- {{1.0f, 1.0f}, {borderColor[0], borderColor[1], borderColor[2]}},
- {{1.0f, 1.0f}, {borderColor[0], borderColor[1], borderColor[2]}},
- {{1.0f, -1.0f}, {borderColor[0], borderColor[1], borderColor[2]}},
- {{1.0f, -1.0f}, {borderColor[0], borderColor[1], borderColor[2]}},
- {{-1.0f, -1.0f}, {borderColor[0], borderColor[1], borderColor[2]}},
- {{-1.0f, -1.0f}, {borderColor[0], borderColor[1], borderColor[2]}},
- {{-1.0f, 1.0f}, {borderColor[0], borderColor[1], borderColor[2]}}
- };
-}
diff --git a/cpp-timeplot/src/waterfall.h b/cpp-timeplot/src/waterfall.h
deleted file mode 100644
index 454caf8..0000000
--- a/cpp-timeplot/src/waterfall.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#pragma once
-
-#include <webgpu/webgpu.h>
-#include <vector>
-#include <string>
-
-struct Vertex {
- float position[2];
- float color[3];
-};
-
-class Waterfall {
-public:
- Waterfall(WGPUDevice device, float x, float y, float width, float height, const std::string& title);
- ~Waterfall();
-
- bool initialize();
- void update(float time);
- void render(WGPURenderPassEncoder pass,
- WGPURenderPipeline linePipeline,
- WGPURenderPipeline lineListPipeline,
- int windowWidth, int windowHeight);
- void toggleGrid();
-
-private:
- std::vector<Vertex> generateGridLines();
- std::vector<Vertex> generateBorder();
-
- WGPUDevice device_;
- WGPUBuffer vertexBuffer_;
-
- float x_, y_, width_, height_;
- std::string title_;
- bool showGrid_;
-
- std::vector<std::vector<Vertex>> lines_;
- static constexpr int MAX_LINES = 50;
- static constexpr int POINTS_PER_LINE = 100;
-};
diff --git a/cpp-timeplot/src/webgpu_impl.cpp b/cpp-timeplot/src/webgpu_impl.cpp
deleted file mode 100644
index e0f099b..0000000
--- a/cpp-timeplot/src/webgpu_impl.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WGPU_CPP_IMPLEMENTATION
-#include <webgpu/webgpu.hpp>
diff --git a/rs/Cargo.toml b/rs/Cargo.toml
deleted file mode 100644
index 92458e1..0000000
--- a/rs/Cargo.toml
+++ /dev/null
@@ -1,12 +0,0 @@
-[package]
-name = "timeplot"
-version = "0.1.0"
-edition = "2024"
-
-[dependencies]
-wgpu = { version = "22", features = ["wgsl"] }
-winit = "0.30"
-pollster = "0.3"
-bytemuck = { version = "1.14", features = ["derive"] }
-env_logger = "0.11"
-glyphon = "0.6"
diff --git a/rs/metrics.csv b/rs/metrics.csv
deleted file mode 100644
index 329e70c..0000000
--- a/rs/metrics.csv
+++ /dev/null
@@ -1,1045 +0,0 @@
-frame,total_ms,update_ms,render_ms,vertex_count,line_count,fps
-0,20.585355999999997,0.020693,20.584712000000003,304,2,48.57822230521542
-1,12.802973,0.002634,12.802714,304,2,78.10685846170261
-2,9.668886,0.003483,9.668671,304,2,103.42453101629287
-3,10.223832999999999,0.002,10.223467,304,2,97.81067433319774
-4,8.824733,0.002637,8.824481,304,2,113.31787601959175
-5,9.340967000000001,0.001766,9.340724999999999,304,2,107.05529737981088
-6,8.676965,0.002006,8.676746000000001,304,2,115.24767012428886
-7,8.564975,0.001603,8.56463,304,2,116.75457313068631
-8,8.774607,0.002961,8.774395,304,2,113.9652180433836
-9,9.376443,0.001887,9.376206999999999,304,2,106.6502510600235
-10,8.823737999999999,0.016567,8.823476,504,4,113.33065419666814
-11,9.399063,0.003183,9.398831999999999,504,4,106.39358412641771
-12,9.544553,0.002565,9.544139,504,4,104.77180020897782
-13,11.734409,0.003143,11.734183999999999,504,4,85.21946013642443
-14,16.307796,0.00265,16.307633,504,4,61.32036481201997
-15,17.068881,0.002518,17.068562,504,4,58.58614867606142
-16,26.337062000000003,0.003478,26.336861,504,4,37.96930728264223
-17,8.962518,0.0038870000000000003,8.962314000000001,504,4,111.57578707233839
-18,15.467921,0.00244,15.467604,504,4,64.64992936025469
-19,15.356398,0.0033079999999999997,15.356159,504,4,65.11943751392742
-20,16.26383,0.017325,16.263552,704,6,61.48613211033318
-21,17.342502999999997,0.003905,17.34211,704,6,57.661803489380986
-22,16.55788,0.004430999999999999,16.557701,704,6,60.39420505523654
-23,27.963865000000002,0.014707,27.963635,704,6,35.76043583388777
-24,8.961756,0.006088,8.961514000000001,704,6,111.58527413600639
-25,12.729468,0.003685,12.729178000000001,704,6,78.55787845964969
-26,15.449618,0.00378,15.449423,704,6,64.7265194518078
-27,17.082518,0.003216,17.082309,704,6,58.5393792648133
-28,16.682744,0.003359,16.682559,704,6,59.94217737801407
-29,17.514577,0.004037,17.514398,704,6,57.09529839059202
-30,18.860458,0.004269,18.860067,704,6,53.02098178103628
-31,13.230066,0.042867,13.229762000000001,904,8,75.58541280141762
-32,18.250951,0.004262999999999999,18.25075,904,8,54.79166537677954
-33,15.342804999999998,0.004948,15.3425,904,8,65.17713025747248
-34,16.938457,0.005633,16.938185,904,8,59.037254692089135
-35,16.541091,0.005096,16.54081,904,8,60.455504416244366
-36,15.82304,0.005094,15.822883999999998,904,8,63.19898072683883
-37,17.354155,0.004086,17.353795,904,8,57.62308795789827
-38,16.542184000000002,0.004856,16.541891,904,8,60.4515099094533
-39,15.877367,0.005339999999999999,15.877196,904,8,62.982735109669
-40,17.704497,0.0058579999999999995,17.704245,904,8,56.48282467443158
-41,15.912214,0.019885999999999997,15.912003,1104,10,62.844805883078244
-42,16.320653,0.021303,16.320396000000002,1104,10,61.272058170711674
-43,17.253076,0.005789,17.252828,1104,10,57.96067901167305
-44,15.502711000000001,0.019284,15.502563,1104,10,64.50484692645047
-45,17.291728,0.004775,17.291441000000003,1104,10,57.831120174918325
-46,16.249458,0.007081,16.24924,1104,10,61.540514151302766
-47,16.904926,0.00589,16.904741,1104,10,59.1543553636378
-48,16.770086,0.006070000000000001,16.7698,1104,10,59.62998639362971
-49,16.641548999999998,0.005116,16.641277,1104,10,60.09056007947338
-50,16.164299,0.0054659999999999995,16.164143,1104,10,61.86473041608547
-51,16.648135,0.005594,16.647529000000002,1104,10,60.066788261868375
-52,17.123464000000002,0.019183,17.123226,1304,12,58.3993986263527
-53,29.310091,0.007357,29.309849999999997,1304,12,34.11794252020575
-54,9.648267,0.010475,9.647891000000001,1304,12,103.64555624341656
-55,9.792821,0.007602,9.792634,1304,12,102.11562122906157
-56,16.905698,0.005496,16.905447,1304,12,59.151654075448405
-57,16.942531,0.006468,16.942237,1304,12,59.02305859732528
-58,15.751287,0.006229999999999999,15.751099000000002,1304,12,63.486875707362834
-59,17.180539000000003,0.0055119999999999995,17.180335000000003,1304,12,58.20539157706285
-60,16.577558,0.006564,16.577278,1304,12,60.322515535762264
-61,16.921288999999998,0.007706,16.921097,1304,12,59.09715270509239
-62,17.084543,0.020509999999999997,17.08419,1504,14,58.53244069800404
-63,15.285663999999999,0.012614,15.285425,1504,14,65.4207759636742
-64,16.839092,0.006849,16.838901,1504,14,59.3856248306025
-65,17.00865,0.006964,17.008344,1504,14,58.79361383766496
-66,16.039631,0.008415,16.039409000000003,1504,14,62.34557391002324
-67,16.656771,0.006919,16.656559,1504,14,60.03564556419729
-68,24.927260999999998,0.017674000000000002,24.92672,1504,14,40.11672200969052
-69,14.515953,0.012724999999999998,14.51567,1504,14,68.88972429161214
-70,10.947745,0.011239,10.947422999999999,1504,14,91.34301173438001
-71,15.840964999999999,0.020725,15.840768000000002,1504,14,63.12746729760467
-72,16.198642999999997,0.033045,16.198447,1704,16,61.7335662005762
-73,16.984214,0.006851,16.984008,1704,16,58.87820301840285
-74,16.745624,0.008107999999999999,16.745376,1704,16,59.71709385090696
-75,16.608743,0.007951000000000001,16.608094,1704,16,60.20925244011542
-76,17.011011999999997,0.007467,17.010751000000003,1704,16,58.785450271859204
-77,16.147173000000002,0.008585,16.146973,1704,16,61.93034533041789
-78,16.240849,0.008481,16.240646,1704,16,61.57313573939392
-79,18.04271,0.008454999999999999,18.0424,1704,16,55.42404660940624
-80,14.616415,0.040323,14.616228,1704,16,68.41622928741418
-81,17.151954,0.007019,17.151752,1704,16,58.302395167337785
-82,16.280562,0.007599,16.280365,1704,16,61.42294105080648
-83,17.768831,0.02155,17.768572,1904,18,56.27832241749613
-84,16.828582,0.010635,16.828198999999998,1904,18,59.42271309608854
-85,16.686888,0.013926000000000001,16.686269,1904,18,59.927291415870954
-86,15.820153999999999,0.010625,15.819939000000002,1904,18,63.21050983448076
-87,16.465339999999998,0.008812,16.465119,1904,18,60.733638054240004
-88,15.942459,0.009027,15.942262,1904,18,62.725580790265795
-89,16.923947000000002,0.0075179999999999995,16.923569,1904,18,59.08787116858732
-90,16.186000999999997,0.009582,16.185807,1904,18,61.78178291228328
-91,16.808137000000002,0.008121999999999999,16.807846,1904,18,59.494993407062296
-92,17.335651000000002,0.008609,17.334981,1904,18,57.68459459641867
-93,24.92418,0.023683,24.924016,2104,20,40.121681034240645
-94,9.247332,0.010159,9.247065000000001,2104,20,108.13929898915708
-95,14.185127000000001,0.010309,14.184929,2104,20,70.4963727148865
-96,16.709347,0.008468,16.709119,2104,20,59.84674326291745
-97,16.524467,0.010083,16.52429,2104,20,60.516324066609826
-98,17.053248,0.008886,17.052992,2104,20,58.63985558645485
-99,15.880458,0.009509,15.880229,2104,20,62.97047604042654
-100,16.650681,0.008638,16.65049,2104,20,60.05760364996483
-101,16.851830000000003,0.008929000000000001,16.851537,2104,20,59.3407362879877
-102,16.728346000000002,0.009907000000000001,16.728073,2104,20,59.77877310763419
-103,16.89492,0.009881000000000001,16.894581,2104,20,59.189389473285466
-104,15.459456999999999,0.02717,15.459242999999999,2304,22,64.68532497616185
-105,17.133239000000003,0.013497,17.132959,2304,22,58.36608010896246
-106,15.923347000000001,0.011646,15.92316,2304,22,62.800867179494354
-107,17.703038,0.008769,17.702665999999997,2304,22,56.487479719582595
-108,16.420952,0.014013,16.42068,2304,22,60.89780909170187
-109,16.176705,0.010179,16.176550000000002,2304,22,61.817286029509724
-110,17.264822,0.010246,17.264556,2204,21,57.921245872097614
-111,15.974644,0.010635,15.974428999999999,2204,21,62.599204088679535
-112,16.75742,0.009398,16.75705,2204,21,59.67505737756767
-113,16.579594,0.010727,16.579402,2204,21,60.31510783677815
-114,16.326130000000003,0.023158,16.325937,2404,23,61.25150295875384
-115,16.880195,0.023155000000000002,16.879890000000003,2404,23,59.24102180099223
-116,24.358542,0.016220000000000002,24.358117,2404,23,41.05336025448485
-117,8.708713,0.013162,8.708499999999999,2404,23,114.82752962464144
-118,16.4451,0.010173000000000001,16.444806999999997,2404,23,60.80838669269266
-119,16.704871,0.010446,16.704597000000003,2404,23,59.862778946332476
-120,16.573409,0.011287,16.573116,2404,23,60.33761672085688
-121,16.315715,0.010779,16.315507999999998,2404,23,61.29060234258811
-122,16.909184,0.01121,16.908901,2404,23,59.13945936125599
-123,16.38371,0.011574,16.38342,2404,23,61.036236603309014
-124,16.715712,0.023607,16.715423,2604,25,59.82395485157916
-125,16.481638,0.025716,16.481462,2704,26,60.67358110886794
-126,16.030023,0.012228000000000001,16.029842,2704,26,62.382942307693504
-127,16.975489,0.011262,16.975272,2704,26,58.90846502271599
-128,16.474492,0.012529,16.474221,2704,26,60.699898971088146
-129,16.281421,0.012054,16.281214,2704,26,61.41970040575696
-130,17.757978,0.010567,17.757604,2704,26,56.312717585301655
-131,15.865929000000001,0.012089,15.865726,2704,26,63.02814036291225
-132,18.875919,0.012122,18.875771999999998,2704,26,52.97755303993411
-133,14.201629,0.011458,14.201347,2704,26,70.4144573837269
-134,17.307956,0.010733000000000001,17.307554999999997,2704,26,57.77689751464586
-135,16.156562,0.026813,16.156326,2904,28,61.89435598984487
-136,15.693735,0.019924,15.693546999999999,2904,28,63.71969451504056
-137,17.091777,0.013058,17.091572,2804,27,58.50766716649767
-138,17.177613,0.013384,17.177323,2804,27,58.21530616622926
-139,15.769389000000002,0.014107999999999999,15.769119000000002,2704,26,63.413997841007024
-140,17.347545,0.013285,17.346987000000002,2704,26,57.64504429877542
-141,16.054378,0.011185,16.054112999999997,2704,26,62.28830540803263
-142,15.50344,0.012133999999999999,15.503243,2704,26,64.50181379100381
-143,17.450364,0.01046,17.450018,2704,26,57.30539489033008
-144,16.446595000000002,0.013156000000000001,16.446318,2604,25,60.80285919365071
-145,15.882684000000001,0.0235,15.882480000000001,2804,27,62.961650562335684
-146,17.206034,0.011547,17.20584,2804,27,58.119145876382674
-147,16.746482,0.012242000000000001,16.746288,2804,27,59.71403426701799
-148,16.244293,0.013365,16.244042,2804,27,61.56008143906294
-149,16.188226999999998,0.013493999999999999,16.187988999999998,2804,27,61.77328746378465
-150,17.853043,0.01218,17.852856,2804,27,56.01286010457713
-151,15.020545,0.036403,15.020316000000001,2704,26,66.5754804502766
-152,17.132082,0.026642,17.131826,2704,26,58.37002181054235
-153,16.827308,0.012309,16.826948,2704,26,59.427212005628
-154,15.493924,0.013345000000000001,15.493729,2704,26,64.5414292725329
-155,17.224239999999998,0.010839999999999999,17.22402,2604,25,58.0577140123454
-156,16.536739,0.024757,16.536518,2804,27,60.471414587845885
-157,16.625395,0.012869,16.625056,2804,27,60.14894683705259
-158,17.57366,0.014149,17.573169999999998,2704,26,56.9033428437787
-159,19.211087000000003,0.015834,19.210912,2704,26,52.05327527796839
-160,17.498132,0.013351,17.497850999999997,2704,26,57.14895738585125
-161,11.764649,0.016998,11.764352,2704,26,85.00041097698707
-162,16.796706,0.012883,16.79643,2704,26,59.535482730959274
-163,16.153149,0.01223,16.152945,2704,26,61.90743365271998
-164,16.902619,0.014602,16.902420000000003,2604,25,59.16242920697674
-165,16.521362,0.011151000000000001,16.521103,2604,25,60.52769741380886
-166,16.721388,0.025198,16.721218,2804,27,59.80364787899186
-167,16.572058000000002,0.013348,16.571874,2804,27,60.342535610242244
-168,16.015502,0.012627,16.015323000000002,2804,27,62.43950392563404
-169,16.588171,0.025137999999999997,16.587975,2704,26,60.2839215969018
-170,17.564225999999998,0.011647999999999999,17.563898000000002,2604,25,56.93390645280925
-171,16.159924,0.020032,16.159713999999997,2604,25,61.88147914557024
-172,15.968157999999999,0.01194,15.967974,2604,25,62.62463084345734
-173,16.749919,0.010557,16.749763,2604,25,59.70178124443468
-174,16.710376999999998,0.010733000000000001,16.710172,2604,25,59.8430544086468
-175,16.415143999999998,0.011744,16.414885,2504,24,60.91935593132781
-176,16.974333,0.011972,16.974062,2504,24,58.912476855497054
-177,16.174113000000002,0.025622,16.173915,2704,26,61.82719262564815
-178,16.14304,0.010693000000000001,16.142844999999998,2704,26,61.94620096338732
-179,17.407024,0.010975,17.406671,2704,26,57.448073835022
-180,16.597614,0.013139000000000001,16.596855,2704,26,60.249623831473606
-181,16.133385,0.013939,16.133166,2604,25,61.98327257423039
-182,17.377981000000002,0.011242,17.377296,2604,25,57.544084091241665
-183,16.046026,0.013313,16.045845999999997,2604,25,62.32072663972998
-184,16.158949999999997,0.012184,16.158699,2504,24,61.88520912559295
-185,17.202598,0.011972,17.202405,2504,24,58.13075443604507
-186,23.157334000000002,0.015174,23.156799,2404,23,43.18286379597927
-187,11.881444,0.045598,11.880989999999999,2604,25,84.16485403626024
-188,14.320544,0.013264,14.320213,2604,25,69.82974948437713
-189,16.554438,0.011255,16.554144,2604,25,60.40676222291569
-190,16.629960999999998,0.012,16.629659,2604,25,60.13243206042396
-191,16.203067,0.011508000000000001,16.202841,2604,25,61.71671079308627
-192,16.549951,0.011131,16.549736999999997,2504,24,60.423139621380145
-193,17.223759,0.010857,17.223413,2504,24,58.05933536343605
-194,15.846513999999999,0.012551999999999999,15.846222000000001,2504,24,63.105361848038
-195,16.625373999999997,0.012143000000000001,16.625118,2504,24,60.14902281296049
-196,16.399562,0.010179,16.399365,2504,24,60.97723829453494
-197,17.130661,0.024531,17.130383,2604,25,58.374863643615384
-198,17.578561,0.01239,17.578259,2504,24,56.887477877170944
-199,16.019407,0.012032,16.019218000000002,2504,24,62.42428324594037
-200,17.15061,0.010185,17.150406999999998,2504,24,58.30696400886033
-201,16.371222,0.010768,16.371004000000003,2504,24,61.08279516336655
-202,16.251497999999998,0.011169,16.25132,2504,24,61.53278916195911
-203,17.416044,0.011798,17.415835,2504,24,57.41832071623154
-204,21.870902,0.017002,21.870534,2404,23,45.72285130261203
-205,10.258562000000001,0.011487,10.258372999999999,2404,23,97.47954927795922
-206,17.169033,0.009212999999999999,17.168692,2404,23,58.24439850514587
-207,16.189246,0.01202,16.188897,2404,23,61.76939926664898
-208,16.435914,0.024579999999999998,16.435727,2604,25,60.842372380386024
-209,16.785602,0.010937,16.785436,2504,24,59.57486660293744
-210,17.015798,0.010244999999999999,17.015563,2504,24,58.76891580400755
-211,16.219726,0.012778000000000001,16.219455,2304,22,61.653322627028345
-212,16.733801,0.010334,16.733495,2304,22,59.75928601039298
-213,16.287557,0.010022,16.287370999999997,2304,22,61.39656180481824
-214,16.664324,0.010079,16.664026,2304,22,60.00843478559346
-215,17.013673999999998,0.009878,17.013476999999998,2304,22,58.776252560146624
-216,17.427027000000002,0.011033,17.426607999999998,2304,22,57.38213408402935
-217,15.42889,0.011117,15.428658,2304,22,64.81347653654929
-218,16.736151,0.022387999999999998,16.735514,2504,24,59.7508949339666
-219,16.369331000000003,0.010786,16.369122,2404,23,61.089851503399856
-220,18.631972,0.010634,18.631714000000002,2404,23,53.67118413445447
-221,17.763777,0.01586,17.763503,2404,23,56.29433425109986
-222,14.089744,0.010672000000000001,14.089433999999999,2304,22,70.97361030832072
-223,15.765758000000002,0.010754000000000001,15.765561000000002,2304,22,63.42860267168885
-224,16.499824999999998,0.009633000000000001,16.499654,2304,22,60.60670340443006
-225,16.801945,0.010059,16.801617,2304,22,59.516919023363066
-226,16.128505,0.017496,16.128286,2304,22,62.0020268462576
-227,17.078118,0.009807,17.077962,2204,21,58.55446132881855
-228,17.06792,0.009269999999999999,17.067736,2204,21,58.58944733746115
-229,16.473662,0.023584,16.473323,2404,23,60.702957241686754
-230,16.188306,0.011833,16.188017,2404,23,61.77298600607129
-231,16.545537,0.009832,16.545355,2404,23,60.43925923951577
-232,16.373352,0.01204,16.373174000000002,2304,22,61.07484893746864
-233,17.231577,0.009948,17.231272,2304,22,58.03299373005732
-234,16.049894,0.011352000000000001,16.049632000000003,2304,22,62.30570743956316
-235,17.136034000000002,0.011424,17.135748999999997,2304,22,58.356560216908996
-236,15.826450999999999,0.010975,15.826251,2204,21,63.18535974995279
-237,18.728991,0.017190999999999998,18.728672,2204,21,53.393159300466316
-238,17.132073000000002,0.010468,17.131856,2204,21,58.37005247409347
-239,13.811800000000002,0.022860000000000002,13.811618,2404,23,72.40185927974629
-240,20.837373,0.009611,20.837035,2404,23,47.99069441239066
-241,14.994335,0.022274000000000002,14.994031,2404,23,66.69185395684437
-242,14.651703,0.009649,14.651276,2404,23,68.25145172544107
-243,16.435368,0.012310000000000001,16.435096,2304,22,60.844393627206884
-244,15.930122,0.010639,15.929957000000002,2304,22,62.774158289559864
-245,16.755418000000002,0.009464,16.755216,2304,22,59.6821875765797
-246,16.652238,0.010244000000000001,16.651989999999998,2204,21,60.051988207230764
-247,17.036893,0.009585999999999999,17.036589000000003,2204,21,58.69614841156777
-248,15.700177,0.010879,15.699991,2204,21,63.6935494421496
-249,17.63319,0.036292,17.63281,2404,23,56.71123602706034
-250,15.818472,0.027061,15.818278000000001,2604,25,63.217231095392776
-251,16.98313,0.010929,16.98292,2604,25,58.881961099043586
-252,16.433941,0.012348,16.43374,2504,24,60.84967689734312
-253,16.590353,0.011186,16.590158000000002,2504,24,60.2759929219107
-254,16.688911,0.010801999999999999,16.688549000000002,2504,24,59.920027136581886
-255,16.246029,0.011775,16.245849,2504,24,61.55350332071917
-256,16.794318999999998,0.010109,16.794052,2504,24,59.54394459221598
-257,16.131937,0.012021,16.131721000000002,2404,23,61.98883618253654
-258,17.152791,0.010367,17.15249,2404,23,58.29955020148033
-259,16.759735000000003,0.01146,16.759351,2404,23,59.666814540922026
-260,15.929094000000001,0.026479,15.928892,2604,25,62.778209482598314
-261,20.796449000000003,0.012646000000000001,20.796181999999998,2504,24,48.08513222617957
-262,12.839808,0.012074,12.839453,2404,23,77.88278454008035
-263,16.631075,0.020912,16.63071,2404,23,60.128404207184445
-264,16.712756,0.012048999999999999,16.712494000000003,2404,23,59.834535967616596
-265,16.416775,0.011243999999999999,16.416588,2404,23,60.91330361779338
-266,15.667494000000001,0.011657,15.667285,2404,23,63.82641665603956
-267,17.771312,0.009885,17.770916,2404,23,56.2704655683272
-268,15.789475000000001,0.012179,15.789285,2304,22,63.33332805555599
-269,17.035398,0.010023,17.035211,2204,21,58.70129949414742
-270,16.039689,0.036163,16.039489,2404,23,62.34534846654446
-271,17.255798,0.009829000000000001,17.255617,2404,23,57.95153605761959
-272,16.3521,0.011908,16.351682,2404,23,61.15422483962305
-273,16.175673000000003,0.011232,16.175462000000003,2404,23,61.82122994202466
-274,17.966505,0.009864999999999999,17.966274000000002,2404,23,55.65912791608607
-275,16.174589,0.011212999999999999,16.174412999999998,2404,23,61.825373120763686
-276,16.853736,0.010908,16.853467000000002,2304,22,59.334025405405654
-277,16.383239,0.011931,16.382880999999998,2304,22,61.03799132760012
-278,16.393234,0.01153,16.392997,2304,22,61.00077629587914
-279,16.868591,0.008771,16.868295,2304,22,59.28177403791461
-280,16.268808,0.010898,16.268468000000002,2204,21,61.46731831858855
-281,16.744401999999997,0.024776000000000003,16.744205,2404,23,59.7214519813846
-282,16.662836,0.011824000000000001,16.662634,2404,23,60.013793570314206
-283,16.45385,0.010594000000000001,16.453566,2304,22,60.77604937446252
-284,16.170507,0.010360000000000001,16.170305,2304,22,61.840980001431
-285,17.421302,0.008653,17.420946,2304,22,57.400991039590494
-286,15.941218,0.01129,15.940875,2304,22,62.73046388299815
-287,16.669878,0.010704,16.669638,2304,22,59.988441427105826
-288,16.623306,0.009588000000000001,16.623135,2304,22,60.15650557115414
-289,16.900098,0.00992,16.899925,2204,21,59.17125450988509
-290,16.222362,0.010740000000000001,16.222075999999998,2204,21,61.64330447070531
-291,17.261822,0.023071,17.261559,2404,23,57.931312233436316
-292,15.817263000000002,0.010801999999999999,15.817049999999998,2404,23,63.22206313443735
-293,17.115222,0.010471,17.114964999999998,2304,22,58.427521419237216
-294,16.273072,0.010332999999999998,16.272774000000002,2304,22,61.45121216203063
-295,16.823049,0.011972,16.822853,2204,21,59.44225687032119
-296,16.964116,0.012518,16.963828,2204,21,58.947958148836044
-297,17.681316,0.010081,17.681097,2204,21,56.55687619631933
-298,19.451801,0.011719,19.451567,2204,21,51.40912144844583
-299,12.649113999999999,0.013231,12.648842,2204,21,79.05692050842455
-300,15.986064,0.010994,15.985857999999999,2104,20,62.55448495639702
-301,16.415319,0.009375,16.415107000000003,2104,20,60.91870648386425
-302,16.822378,0.022758,16.822072000000002,2304,22,59.4446278641462
-303,17.066065,0.011774,17.065592000000002,2304,22,58.595815731394445
-304,15.851565,0.011943,15.850996999999998,2304,22,63.08525372731336
-305,16.677498,0.010636,16.677272,2304,22,59.96103252418318
-306,17.162464999999997,0.011127,17.162174,2104,20,58.26668838071921
-307,15.958704000000001,0.010081999999999999,15.958485000000001,2104,20,62.66172992493626
-308,16.854853,0.009075999999999999,16.854451,2104,20,59.33009323783483
-309,16.851584,0.009995,16.851222,2104,20,59.34160254608707
-310,15.794929999999999,0.011398,15.794737999999999,2104,20,63.311455004865486
-311,16.679672999999998,0.009502,16.679485,2004,19,59.95321371108415
-312,17.474146,0.028665,17.473794,2204,21,57.227403273384574
-313,15.726483,0.011080999999999999,15.726202000000002,2204,21,63.58700797883417
-314,16.84467,0.010572,16.844378,2204,21,59.365959677452864
-315,16.25593,0.008758,16.255644,2204,21,61.51601292574464
-316,17.261304000000003,0.009616000000000001,17.26102,2204,21,57.933050712738726
-317,16.111301,0.010941000000000001,16.111113,2104,20,62.06823396819412
-318,16.358406,0.010981999999999999,16.358200999999998,2104,20,61.13065050470077
-319,16.489928000000003,0.008872999999999999,16.489714,2104,20,60.643078611380226
-320,17.410012,0.008476,17.409696,2104,20,57.438214287273325
-321,20.926238,0.010956,20.925863999999997,2004,19,47.78689796035006
-322,11.638572,0.040799,11.638348,2204,21,85.92119376844514
-323,16.400057999999998,0.010986,16.399848000000002,2104,20,60.97539411141108
-324,17.219527,0.009565,17.219216,2104,20,58.07360446079617
-325,16.09818,0.008698000000000001,16.097939,2104,20,62.11882337009526
-326,16.814686,0.009979,16.814358000000002,2104,20,59.4718212400755
-327,16.578428,0.009413,16.578141000000002,2104,20,60.319349940778466
-328,16.273009000000002,0.009249,16.272709,2104,20,61.45145006679465
-329,16.589443999999997,0.011828,16.589222,2004,19,60.279295677419945
-330,16.729034,0.009641,16.728781,2004,19,59.77631463956616
-331,16.584467,0.018536,16.584187,2004,19,60.29738549933501
-332,16.737119000000003,0.009765000000000001,16.736797000000003,2004,19,59.747439209818594
-333,16.330653,0.022139,16.33035,2204,21,61.23453850865608
-334,16.246507,0.009455,16.246278999999998,2204,21,61.55169231146116
-335,16.986311,0.010431999999999999,16.985996,2204,21,58.87093436591382
-336,16.490142,0.012052,16.489917,1904,18,60.64229161883507
-337,16.426838999999998,0.007500000000000001,16.42661,1904,18,60.87598472231938
-338,16.625892,0.008291999999999999,16.625652000000002,1904,18,60.14714879658788
-339,17.041218,0.008346,17.040966,1904,18,58.68125153964934
-340,16.184154999999997,0.009349,16.183974,1904,18,61.78882987712365
-341,16.535866,0.009571999999999999,16.535598,1904,18,60.47460713578594
-342,16.847775,0.008773999999999999,16.847438999999998,1904,18,59.355018689411516
-343,16.722325,0.022061,16.721989999999998,2104,20,59.800296908474145
-344,16.16356,0.010839999999999999,16.163248000000003,2004,19,61.867558879355784
-345,16.498327,0.008992,16.498113,2004,19,60.61220631643439
-346,16.699261,0.008872000000000001,16.699077,2004,19,59.88288942846034
-347,17.707415,0.008196,17.706968,2004,19,56.47351688544036
-348,16.012144999999997,0.013557000000000001,16.011784000000002,2004,19,62.452594577428584
-349,16.564013999999997,0.010213,16.563601000000002,2004,19,60.37183982095162
-350,16.222353,0.011714,16.222047,1904,18,61.64333866979717
-351,15.958379000000003,0.008019,15.958131,1904,18,62.663006060953926
-352,17.127756,0.00865,17.127487,1704,16,58.38476447235703
-353,16.520538000000002,0.008164,16.5202,1704,16,60.53071637255396
-354,17.419222,0.023195999999999998,17.418928,1904,18,57.40784519538243
-355,15.222595,0.009498,15.222379,1904,18,65.69182192655063
-356,16.696677,0.008053999999999999,16.696445,1904,18,59.89215698429094
-357,17.346093,0.008759000000000001,17.345844999999997,1904,18,57.64986962770233
-358,16.373251,0.009687999999999999,16.372899999999998,1904,18,61.07522568364707
-359,16.426369,0.009455,16.426151,1904,18,60.877726538348185
-360,16.178597999999997,0.008876,16.17839,1904,18,61.810053009537675
-361,16.956170999999998,0.007989,16.955973,1804,17,58.975578861524816
-362,17.243858,0.008681999999999999,17.243398,1804,17,57.991662886576776
-363,15.570627,0.009908,15.570416999999999,1804,17,64.22348952293315
-364,17.198313,0.021233000000000002,17.197989,2004,19,58.145237849782134
-365,16.57453,0.010402,16.57422,2004,19,60.33353585290202
-366,16.030863999999998,0.011172999999999999,16.030647,1904,18,62.379669617308224
-367,17.203733999999997,0.009129,17.203446,1904,18,58.1269159358079
-368,16.306030999999997,0.009697,16.305824,1904,18,61.32700226069729
-369,16.909046,0.0086,16.908734000000003,1904,18,59.13994201683525
-370,15.955555,0.008949,15.95533,1904,18,62.6740968897666
-371,16.672884999999997,0.009758999999999999,16.672687,1804,17,59.97762234910156
-372,17.117505,0.00872,17.117224,1804,17,58.419728809776885
-373,15.701513,0.007928,15.701296,1804,17,63.68812992735159
-374,17.061973000000002,0.007812999999999999,17.061795,1804,17,58.60986885866013
-375,16.602136,0.022263,16.601866,2004,19,60.2332133648345
-376,16.443657,0.009003,16.443345,2004,19,60.81372288414918
-377,16.743472,0.008686,16.743111000000003,2004,19,59.72476915182227
-378,16.25751,0.009969,16.257268,2004,19,61.510034439468285
-379,17.192,0.009340999999999999,17.191693,2004,19,58.16658911121452
-380,16.268146,0.009836000000000001,16.267929,2004,19,61.46981960943797
-381,16.427936,0.009361000000000001,16.427733,1904,18,60.871919637378674
-382,17.48183,0.008362999999999999,17.481532,1804,17,57.20224942125625
-383,15.604814,0.012435,15.604631000000001,1804,17,64.08278881119634
-384,16.590015,0.007768000000000001,16.589831999999998,1804,17,60.277220966949095
-385,16.587358,0.021489,16.587079000000003,2004,19,60.28687630664269
-386,17.663155,0.008777,17.662881,2004,19,56.615027156813156
-387,15.137500999999999,0.010346999999999999,15.13727,2004,19,66.06110215946477
-388,16.819741,0.008478000000000001,16.819543,2004,19,59.45394759645823
-389,17.044681999999998,0.008659,17.044455,2004,19,58.6693257169597
-390,16.127572999999998,0.009807,16.127391000000003,2004,19,62.005609895549696
-391,16.755267,0.009042000000000001,16.754897,2004,19,59.68272543791752
-392,16.12663,0.009528,16.126403,2004,19,62.00923565555854
-393,17.794527000000002,0.008735,17.794234999999997,1904,18,56.19705429652611
-394,16.11147,0.00936,16.111161999999997,1904,18,62.067582908325555
-395,16.333672,0.023183000000000002,16.333468,2104,20,61.223220351186185
-396,16.435031,0.010069,16.434821,2104,20,60.84564124034814
-397,16.785884,0.00933,16.785602,2004,19,59.573865755297724
-398,16.928041,0.008796,16.927738,2004,19,59.07358093000838
-399,15.745060000000002,0.009503000000000001,15.744833,2004,19,63.51198407627534
-400,17.412602999999997,0.00822,17.412216,2004,19,57.42966746557078
-401,16.274444,0.009815,16.274269,2004,19,61.44603158178553
-402,16.725244,0.008713,16.724841,2004,19,59.789860165866635
-403,16.348633,0.020567000000000002,16.348325,2004,19,61.1671936118451
-404,16.564695,0.009928000000000001,16.564342,2004,19,60.36935784208523
-405,16.265439,0.011064,16.265227,1904,18,61.48004981605476
-406,16.997088,0.023557,16.996879999999997,2104,20,58.833607262608744
-407,16.683614,0.009256,16.683404,2104,20,59.939051574796686
-408,15.826930999999998,0.012849,15.826712,2104,20,63.183443461022236
-409,17.364981,0.008832,17.36458,2104,20,57.58716349876801
-410,15.781727999999998,0.011193999999999999,15.781512000000001,2104,20,63.36441738192422
-411,17.645929000000002,0.008454000000000001,17.645609999999998,2104,20,56.67029488784636
-412,21.179023,0.016399,21.178721,2004,19,47.21653118748679
-413,11.32137,0.009085000000000001,11.321062,2004,19,88.3285326775823
-414,17.627494000000002,0.019045000000000003,17.627172,2004,19,56.7295612184012
-415,15.205774,0.011226,15.205592000000001,2004,19,65.76449183053754
-416,16.625205,0.022512,16.624924,2204,21,60.14963424511156
-417,16.963494,0.010487,16.963203,2204,21,58.95011959210761
-418,16.938950000000002,0.011013,16.938603999999998,2104,20,59.03553644116075
-419,15.851008,0.010611,15.850824,2104,20,63.08747052553377
-420,16.762049,0.008957000000000001,16.761851,2104,20,59.65857754025179
-421,16.653259,0.009193,16.65305,2104,20,60.048306460615315
-422,16.860507000000002,0.008794000000000001,16.860127,2104,20,59.31019749287491
-423,17.413815999999997,0.012768999999999999,17.413336,2104,20,57.4256670680338
-424,17.57154,0.012437,17.571299,2104,20,56.91020821168777
-425,14.229442,0.011249,14.229211000000001,2104,20,70.27682462882241
-426,16.801874,0.010512,16.801611,2104,20,59.51717052514499
-427,16.603831,0.024671000000000002,16.603544000000003,2304,22,60.2270644648214
-428,15.843631,0.011319,15.843438,2204,21,63.11684486971453
-429,17.367316000000002,0.008858999999999999,17.36707,2204,21,57.57942102279937
-430,16.171885,0.014735999999999999,16.171650999999997,2204,21,61.83571055569589
-431,16.704084,0.008994,16.703892,2104,20,59.86559933486924
-432,16.83404,0.010655999999999999,16.833730000000003,2104,20,59.4034468255986
-433,16.082133,0.010943,16.081920999999998,2104,20,62.18080648879101
-434,16.616879,0.009398,16.616666,2104,20,60.17977262757946
-435,16.767947,0.008195000000000001,16.767715,2104,20,59.637593081609815
-436,16.955135,0.009767,16.954822,2104,20,58.979182412879645
-437,16.813024,0.024338,16.812706,2304,22,59.4777001448401
-438,16.791955,0.011504,16.791711,2304,22,59.55232729006241
-439,16.706211,0.01056,16.705672,2304,22,59.85797737140995
-440,16.762365000000003,0.012664,16.761891000000002,2304,22,59.65745287135794
-441,16.123876999999997,0.012586,16.123366,2204,21,62.01982314799351
-442,17.207914000000002,0.012957,17.207529,2204,21,58.11279624014857
-443,15.706547,0.011729999999999999,15.706147999999999,2204,21,63.667717672127424
-444,16.710254,0.012527,16.709872,2204,21,59.84349489840191
-445,16.400662999999998,0.012161,16.400296,2204,21,60.97314480518258
-446,16.083607,0.012998,16.083065,2104,20,62.17510785982274
-447,17.059734,0.026587000000000003,17.059293,2304,22,58.617561094446145
-448,16.161890000000003,0.011902000000000001,16.161445999999998,2304,22,61.87395162323217
-449,17.096613,0.01244,17.095942,2304,22,58.49111750964942
-450,16.068586,0.012924,16.068112999999997,2304,22,62.233229482668854
-451,16.445310000000003,0.031445,16.444854,2304,22,60.80761019403099
-452,16.662291999999997,0.01311,16.66191,2304,22,60.015752934830346
-453,16.689338000000003,0.012146,16.688962,2304,22,59.918494070885245
-454,16.818406,0.012324,16.817713,2304,22,59.45866689149971
-455,16.281076,0.013063,16.280648000000003,2204,21,61.421001904296745
-456,17.731195000000003,0.011901,17.730672,2204,21,56.397778040340754
-457,14.912809000000001,0.014481,14.9125,2204,21,67.05644791668692
-458,16.766195,0.02546,16.765787,2404,23,59.64382497042412
-459,21.597234,0.012716,21.596885999999998,2404,23,46.30222555351301
-460,10.908097999999999,0.014004,10.907897,2404,23,91.67501062054998
-461,16.602161000000002,0.009994,16.601993999999998,2304,22,60.233122663971265
-462,16.880924,0.009616999999999999,16.880714,2304,22,59.238463486951304
-463,16.624778,0.011008,16.624461,2304,22,60.151179161610465
-464,16.435239,0.020189,16.435054,2304,22,60.8448711941457
-465,16.465287,0.011472,16.465061,2304,22,60.73383354933321
-466,17.210426000000002,0.023581,17.21014,2304,22,58.104314210467535
-467,16.050044999999997,0.009295,16.049787,2304,22,62.305121262899895
-468,16.682332000000002,0.02634,16.682184,2504,24,59.943657757200846
-469,19.60669,0.012286,19.606391000000002,2404,23,51.002999486399794
-470,13.473270000000001,0.012525,13.472989,2404,23,74.22103171687348
-471,16.505388999999997,0.010694,16.50523,2404,23,60.58627276218695
-472,16.748321999999998,0.0115,16.748017,2404,23,59.70747397858724
-473,16.567176,0.010665000000000001,16.566911,2404,23,60.36031729245829
-474,15.773504,0.011562000000000001,15.773299000000002,2404,23,63.39745436397645
-475,17.812266,0.010793,17.811871,2404,23,56.141088393806825
-476,23.047418999999998,0.016560000000000002,23.047102,2404,23,43.38880635614773
-477,9.435526,0.013088,9.435172,2304,22,105.98243277587281
-478,16.262838000000002,0.011786,16.262621000000003,2304,22,61.48988263918019
-479,16.878418999999997,0.022838999999999998,16.878217,2504,24,59.24725532646157
-480,16.612381,0.009783,16.612064,2504,24,60.19606701772612
-481,16.618584,0.012163,16.618195999999998,2404,23,60.17359842451078
-482,16.429648,0.012745000000000001,16.429271,2404,23,60.86557666968884
-483,16.551360000000003,0.016533,16.551094,2404,23,60.41799586257564
-484,16.263237,0.024556,16.262965,2404,23,61.48837405493138
-485,16.833460000000002,0.010227,16.833159000000002,2404,23,59.40549358242452
-486,17.476576,0.011717,17.476202,2404,23,57.21944618900178
-487,15.826443,0.012317999999999999,15.826171,2404,23,63.18539168908642
-488,16.713896,0.010424000000000001,16.713609,2404,23,59.83045485026352
-489,16.407268,0.023892,16.406995000000002,2604,25,60.94859912082865
-490,16.761927999999997,0.012088,16.761578999999998,2604,25,59.65900820001137
-491,15.953321999999998,0.012605,15.953122,2504,24,62.6828694362215
-492,17.641545,0.019768,17.641265,2504,24,56.68437770047918
-493,15.598185,0.013189000000000001,15.597932,2404,23,64.11002305716978
-494,16.63997,0.028826,16.63976,2404,23,60.09626219278039
-495,16.504209,0.011799,16.503919,2404,23,60.59060449367795
-496,17.316381,0.01196,17.316095999999998,2404,23,57.74878711666138
-497,15.719961000000001,0.010073,15.719758,2404,23,63.613389371640295
-498,17.367621,0.010045,17.367413000000003,2404,23,57.57840984669115
-499,16.088298,0.011652,16.087937,2404,23,62.15697894208572
-500,16.805009,0.039012,16.804794,2604,25,59.506067506420266
-501,15.998809,0.010506000000000001,15.998556,2604,25,62.50465269008462
-502,17.163325999999998,0.011438,17.163085000000002,2604,25,58.26376542635152
-503,17.179857,0.012583,17.179527,2504,24,58.20770219449441
-504,16.215377,0.012128,16.215031,2504,24,61.66985818461082
-505,15.679695,0.013036,15.679495000000001,2504,24,63.776750759501375
-506,16.281052,0.011812,16.280845,2404,23,61.42109244537761
-507,17.251674,0.009817,17.251493999999997,2404,23,57.965389329754316
-508,16.704692,0.011607,16.703929,2404,23,59.8634204090683
-509,16.272361,0.011497,16.272171,2404,23,61.453897194144105
-510,17.215937,0.024471,17.215505999999998,2604,25,58.08571441682204
-511,16.052813,0.016144,16.052545000000002,2604,25,62.29437793862048
-512,16.290245,0.01235,16.289987999999997,2604,25,61.38643095914151
-513,17.234488,0.010752,17.234106,2604,25,58.02319163760479
-514,16.142284,0.013191,16.142079,2504,24,61.94910212210366
-515,16.378529999999998,0.010302,16.378321,2504,24,61.0555403934297
-516,17.04626,0.010703,17.046069,2504,24,58.6638946021004
-517,16.419677,0.010504,16.419396,2504,24,60.90253785138405
-518,16.561283,0.019862,16.560958,2504,24,60.38179529931347
-519,17.021295,0.010168,17.020647999999998,2504,24,58.74993647663119
-520,15.689176999999999,0.027745,15.688959999999998,2704,26,63.738206280673616
-521,17.200229,0.011177,17.199894,2704,26,58.138760826963406
-522,16.391627999999997,0.012456,16.39127,2604,25,61.006752959498606
-523,16.243879,0.012267,16.243675,2504,24,61.561650391510554
-524,17.003652000000002,0.010272,17.003353999999998,2504,24,58.81089544763677
-525,16.784595,0.010417000000000001,16.784339,2504,24,59.57844082624573
-526,16.327261,0.011519999999999999,16.326989,2504,24,61.24726002726361
-527,16.956707,0.011351,16.956442,2504,24,58.97371464872277
-528,16.099683,0.010823,16.099439,2504,24,62.113024212961214
-529,16.368988,0.011654000000000001,16.368785,2504,24,61.09113159591784
-530,16.397034,0.010891,16.396804,2504,24,60.98663941295724
-531,17.61929,0.026438999999999997,17.61892,2604,25,56.75597597860073
-532,16.311215999999998,0.012398999999999999,16.310896,2604,25,61.307507668343064
-533,16.249504,0.011928,16.249275,2604,25,61.54033993899136
-534,16.930441000000002,0.01056,16.930226,2604,25,59.06520686614128
-535,17.02432,0.020564000000000002,17.023964999999997,2604,25,58.73949737786884
-536,15.216504,0.013318,15.216304,2604,25,65.7181176438425
-537,17.451477999999998,0.018033,17.45111,2504,24,57.30173685002497
-538,16.811902,0.01285,16.81158,2504,24,59.48166959336309
-539,16.082847,0.012068,16.08262,2404,23,62.17804596412562
-540,16.178106,0.011867,16.177799999999998,2404,23,61.81193274416672
-541,16.706004,0.037975,16.705765,2604,25,59.85871905693306
-542,16.526843,0.010859,16.526616,2604,25,60.507623869846164
-543,16.950435,0.010767,16.950135000000003,2604,25,58.99553610276079
-544,16.592415,0.011473,16.592221000000002,2604,25,60.2685022041698
-545,16.134545,0.011477000000000001,16.134238,2604,25,61.97881626039037
-546,17.300302,0.010527,17.299918,2504,24,57.802459170943955
-547,15.903283,0.012281,15.903091000000002,2504,24,62.8800984048388
-548,16.889691,0.011119,16.889408000000003,2504,24,59.207714338882816
-549,16.710664,0.011071,16.710362999999997,2504,24,59.842026624435746
-550,16.451578,0.01115,16.451263,2504,24,60.784442683856824
-551,16.331487,0.024539,16.331115999999998,2504,24,61.2314114446529
-552,16.438019,0.033763999999999995,16.437694,2704,26,60.834581101287206
-553,16.55453,0.012548,16.554237,2504,24,60.406426518904496
-554,16.71252,0.011658,16.712310000000002,2504,24,59.835380900067726
-555,16.912957,0.009871999999999999,16.912661,2504,24,59.12626632941833
-556,16.403904999999998,0.012319,16.403623,2504,24,60.96109432479645
-557,16.577041,0.010688,16.576851,2504,24,60.32439685707479
-558,16.613725,0.011061,16.613487,2504,24,60.191197338345255
-559,16.395416,0.011385000000000001,16.395132999999998,2404,23,60.99265794780687
-560,17.189841,0.012008999999999999,17.189388,2404,23,58.173894685820535
-561,15.731499,0.0117,15.730813,2404,23,63.56673321467967
-562,16.752975,0.023424,16.752682,2604,25,59.69089072239409
-563,18.043191,0.011316,18.042915999999998,2604,25,55.42256910099771
-564,15.189848000000001,0.012490000000000001,15.189604000000001,2504,24,65.83344349462878
-565,16.374758999999997,0.011439,16.374572,2504,24,61.06960108542667
-566,17.028771000000003,0.010284,17.028536,2404,23,58.7241439796213
-567,16.432163,0.010761999999999999,16.431881,2404,23,60.85626098037124
-568,16.348532,0.009953,16.348204000000003,2404,23,61.16757149816265
-569,17.445871,0.01061,17.445555000000002,2404,23,57.32015329013954
-570,15.337817,0.013099,15.337610999999999,2304,22,65.19832646327701
-571,17.263277000000002,0.008741,17.263044,2304,22,57.926429611249354
-572,15.909455999999999,0.032705,15.909239,2504,24,62.85570040861234
-573,17.26318,0.01032,17.262835,2504,24,57.92675509378921
-574,16.463345,0.011899000000000002,16.463136,2504,24,60.74099765266414
-575,16.534322,0.011925,16.534106,2404,23,60.48025434608084
-576,16.217202,0.010779,16.216992,2404,23,61.66291817787063
-577,17.270231,0.009737,17.269821,2404,23,57.903105059799145
-578,16.195902,0.012695,16.195618,2404,23,61.744014010457704
-579,16.741279000000002,0.011087000000000001,16.740978,2404,23,59.73259271289845
-580,16.785031,0.010875,16.784797,2304,22,59.57689324493949
-581,16.824946999999998,0.009902,16.824628,2204,21,59.435551268006975
-582,15.640827999999999,0.010244000000000001,15.640533000000001,2204,21,63.935234119319006
-583,16.756191,0.026045,16.755969,2404,23,59.679434305803746
-584,16.773251,0.010628,16.773037000000002,2404,23,59.61873461501292
-585,16.309694999999998,0.010273,16.309465,2404,23,61.31322504804658
-586,17.408959000000003,0.010855,17.408564000000002,2304,22,57.44168850073114
-587,16.412368999999998,0.012021,16.41207,2304,22,60.929656163592234
-588,15.702853,0.011183,15.702631000000002,2304,22,63.682695112792565
-589,17.148359,0.009408999999999999,17.148072,2304,22,58.314617742723954
-590,16.262212,0.010253,16.261979999999998,2304,22,61.49224963983989
-591,17.276329,0.012238,17.275905,2304,22,57.88266708743507
-592,16.676356,0.012405000000000001,16.676046,2304,22,59.965138666984565
-593,16.042072,0.026824,16.04185,2404,23,62.33608725855363
-594,16.181122,0.009816,16.180935,2304,22,61.80041161546153
-595,17.204696,0.00957,17.204367,2304,22,58.12366577125223
-596,17.368381,0.011271,17.367989,2304,22,57.57589034925017
-597,15.699731000000002,0.012331,15.699477,2304,22,63.695358856785504
-598,16.451222,0.010416,16.450941,2304,22,60.78575804277639
-599,16.831479,0.010469,16.831165,2204,21,59.41248537933
-600,16.726772,0.010573,16.726385999999998,2204,21,59.78439832861953
-601,16.824531,0.010981000000000001,16.824101000000002,2204,21,59.43702085960078
-602,15.822955,0.012417,15.822706999999998,2204,21,63.199320228111624
-603,17.738477,0.009668,17.738078,2204,21,56.37462562315807
-604,15.662275999999999,0.029767000000000002,15.661998,2404,23,63.84768088622625
-605,19.47225,0.012174,19.471939,2404,23,51.355133587541246
-606,14.341882,0.015776,14.341651,2204,21,69.7258560626841
-607,18.734648999999997,0.010154,18.734287,2204,21,53.37703417875617
-608,14.960711,0.012209,14.960541000000001,2204,21,66.84174301609062
-609,15.857109000000001,0.01064,15.856940999999999,2204,21,63.063197711512224
-610,16.403237,0.011633000000000001,16.402898999999998,2204,21,60.96357688424547
-611,15.789790000000002,0.011963999999999999,15.789607,2204,21,63.33206458097289
-612,16.708374000000003,0.010797,16.708095,2204,21,59.850228394456565
-613,18.377867,0.009160999999999999,18.377433,2204,21,54.41327875536373
-614,16.116782999999998,0.028357999999999998,16.116437,2304,22,62.047121934941984
-615,18.102933,0.015351,18.102746,2304,22,55.239667516860386
-616,14.601674000000001,0.011594,14.601462000000001,2304,22,68.4852983294929
-617,15.822688000000001,0.009139,15.822374,2304,22,63.20038668524589
-618,17.669213,0.027629,17.668588999999997,2204,21,56.5956163412598
-619,15.819864999999998,0.013169,15.819625,2204,21,63.21166457488734
-620,22.830856,0.011352000000000001,22.830571000000003,2204,21,43.80037261852994
-621,10.083165,0.018695999999999997,10.082927,2204,21,99.17520937126389
-622,16.535092000000002,0.009927,16.534797,2104,20,60.47743792414338
-623,16.250148,0.010366,16.249889,2104,20,61.537901070193335
-624,17.189059,0.01071,17.188843,2104,20,58.17654125220002
-625,16.710875,0.024193,16.710493,2304,22,59.841271028596644
-626,26.457019,0.012256,26.456779,2304,22,37.797153186456875
-627,10.070149,0.021602,10.069922,2304,22,99.30339660316842
-628,12.426627000000002,0.011026000000000001,12.426464999999999,2204,21,80.47235987689982
-629,16.280409,0.010992,16.280258,2204,21,61.423518291217384
-630,16.856185999999997,0.009523,16.855915,2204,21,59.32540136896924
-631,17.333531,0.009174,17.333181,2204,21,57.69164978560917
-632,16.642904,0.013264,16.642466000000002,2104,20,60.08566774163931
-633,16.359980999999998,0.011853,16.359628,2104,20,61.12476536494756
-634,16.137587,0.012483999999999999,16.137235999999998,2104,20,61.96713300445723
-635,16.70388,0.028144,16.703479,2304,22,59.86633045735481
-636,16.606423,0.012931,16.606051,2304,22,60.21766397254846
-637,16.981634,0.012905,16.981171,2304,22,58.88714831564501
-638,15.947649000000002,0.012452999999999999,15.947241000000002,2304,22,62.705167388622606
-639,16.332897,0.012594,16.3325,2204,21,61.226125408125704
-640,16.685069,0.011965,16.684662,2204,21,59.93382466683237
-641,16.931769,0.011817000000000001,16.931407,2204,21,59.06057423769484
-642,15.347174,0.028449000000000002,15.346810000000001,2104,20,65.1585757742761
-643,17.571037,0.011564,17.570666,2104,20,56.91183736053825
-644,16.128266,0.012348,16.127867000000002,2104,20,62.00294563594127
-645,16.511194,0.023684,16.510832,2304,22,60.56497186090842
-646,16.888457,0.012638,16.888067,2304,22,59.212040507904305
-647,15.95408,0.011762,15.953716,2304,22,62.679891287996554
-648,16.443441999999997,0.018264,16.442981,2204,21,60.814518030957274
-649,18.983881,0.013766,18.983465000000002,2204,21,52.676267829533906
-650,13.841759999999999,0.01441,13.841104999999999,2204,21,72.24514801585926
-651,18.451389,0.011208000000000001,18.451192000000002,2204,21,54.19646184902395
-652,14.659221,0.012700999999999999,14.659009000000001,2104,20,68.21644888224279
-653,16.511708,0.011659,16.511476000000002,2104,20,60.56308650807052
-654,16.716732,0.009683,16.716548,2104,20,59.8203045906341
-655,16.516874,0.009574000000000001,16.516704,2104,20,60.54414412799903
-656,16.958329000000003,0.025074000000000003,16.958033,2204,21,58.968074036068046
-657,16.05934,0.009438,16.059052,2204,21,62.26905962511536
-658,16.536500999999998,0.009204,16.536325,2204,21,60.47228491686362
-659,16.668962,0.010258000000000001,16.668771999999997,2204,21,59.9917379378512
-660,16.222328,0.016855000000000002,16.222145,2204,21,61.643433667473616
-661,17.29753,0.008886999999999999,17.297254000000002,2204,21,57.81172225167409
-662,15.8891,0.010402,15.888912000000001,2204,21,62.93622672146314
-663,17.325077,0.009519,17.32473,2204,21,57.719801187608
-664,15.826507999999999,0.011284,15.826317,2004,19,63.18513218456024
-665,16.937337,0.008581,16.937027,2004,19,59.04115859535652
-666,16.087913999999998,0.025026,16.087712,2204,21,62.158462557669075
-667,17.038277,0.009086,17.038059,2204,21,58.69138058971573
-668,17.666534000000002,0.010439,17.666173,2204,21,56.60419865039741
-669,17.211889,0.011673,17.211643,2204,21,58.09937537942523
-670,25.668024000000003,0.023433000000000002,25.667678,2204,21,38.95897868881531
-671,8.676464,0.016115,8.676229000000001,2104,20,115.25432480328392
-672,13.196434,0.008879,13.19616,2104,20,75.77804731187229
-673,17.313829,0.009422999999999999,17.313548,2104,20,57.75729909311222
-674,16.271776000000003,0.009496000000000001,16.271489,2104,20,61.45610657373847
-675,16.410557999999998,0.009755999999999999,16.410363,2104,20,60.936380103589414
-676,17.173023,0.009496000000000001,17.172854,2004,19,58.230865934320356
-677,16.162014999999997,0.022648,16.161804,2204,21,61.873473078697195
-678,20.477668,0.010535,20.477377,2104,20,48.83368555442934
-679,18.289882,0.027563,18.289518,2104,20,54.67503836274067
-680,11.25193,0.01025,11.251671,2104,20,88.87364212184043
-681,16.396461000000002,0.010448,16.396282000000003,2104,20,60.988770686552414
-682,16.391748,0.010180999999999999,16.391563,2104,20,61.00630634389938
-683,16.433640999999998,0.023274,16.433455,2104,20,60.850787722574694
-684,16.326539,0.011835,16.326328,2004,19,61.24996853282867
-685,17.923134,0.008071,17.922912999999998,2004,19,55.793813738155386
-686,15.233117,0.010111,15.232958,2004,19,65.64644648892279
-687,17.460046,0.039487,17.459793,2204,21,57.273617721282065
-688,16.302228,0.009595999999999999,16.301982,2204,21,61.34130868492331
-689,16.403194,0.012454,16.403006,2104,20,60.96373669664579
-690,16.270094,0.009840000000000002,16.269932,2004,19,61.46245989728148
-691,16.413966,0.009007000000000001,16.413731000000002,2004,19,60.923728000898755
-692,17.365807,0.015248999999999999,17.365545,2004,19,57.58442438062337
-693,16.09903,0.009843999999999999,16.098827,2004,19,62.11554360728566
-694,16.589735,0.008757,16.589568,2004,19,60.278238320262496
-695,16.99769,0.009659000000000001,16.997419,1904,18,58.83152357761555
-696,15.856462000000002,0.009491,15.856288999999999,1904,18,63.06577091409167
-697,17.755976999999998,0.021693999999999998,17.755778,2104,20,56.31906371584059
-698,15.350226999999999,0.009826,15.349928,2104,20,65.14561641335989
-699,16.800682000000002,0.008663,16.800524,2104,20,59.52139323867923
-700,16.377389,0.010292,16.377180000000003,2004,19,61.05979408561401
-701,17.96126,0.0084,17.960950999999998,2004,19,55.675381348524546
-702,15.037450000000002,0.010716999999999999,15.037254,2004,19,66.50063674359681
-703,17.627568,0.008107,17.627231000000002,2004,19,56.72932306941037
-704,15.852807,0.01206,15.852533,1904,18,63.08031126601112
-705,16.384278,0.009882,16.384064,1904,18,61.03412063686908
-706,17.126811,0.009602000000000001,17.126614,1804,17,58.387985947880196
-707,16.141099,0.009184999999999999,16.140874999999998,1804,17,61.95365012010644
-708,16.68147,0.039707,16.681207,2004,19,59.946755291949685
-709,16.178766,0.008709000000000001,16.178502,2004,19,61.80941117511682
-710,17.893583,0.00824,17.892858,2004,19,55.88595643477329
-711,16.127848,0.022949999999999998,16.127496,1904,18,62.00455262227174
-712,15.918108,0.016758000000000002,15.917902000000002,1904,18,62.82153632831238
-713,16.737571,0.008783999999999998,16.737395,1904,18,59.74582572345773
-714,16.068397,0.009391,16.068196999999998,1904,18,62.233961483525704
-715,17.755785,0.023819999999999997,17.755546,1904,18,56.31967271511792
-716,15.167446,0.009972,15.167245,1904,18,65.93067811152913
-717,17.706514,0.007837,17.706196000000002,1904,18,56.476390553216746
-718,15.885835,0.025117999999999998,15.885653999999999,2004,19,62.94916194206977
-719,17.169292,0.008772,17.168995,1904,18,58.24351988422121
-720,15.947084,0.009935000000000001,15.946869,1904,18,62.70738901231096
-721,16.926638,0.008074,16.926368,1904,18,59.07847736803965
-722,16.112009999999998,0.009457,16.111793,1904,18,62.06550269022922
-723,17.548332,0.00812,17.547988,1904,18,56.98547303527196
-724,16.069022,0.010642,16.068836,1804,17,62.231540911450615
-725,16.178756999999997,0.008608,16.17858,1804,17,61.809445558765745
-726,16.8353,0.00818,16.835104,1804,17,59.399000908804716
-727,16.817789,0.008261,16.817496000000002,1804,17,59.4608482720291
-728,16.336724,0.007708,16.336477,1804,17,61.21178272951174
-729,16.782576,0.036232999999999994,16.782383000000003,2004,19,59.585608311858685
-730,15.980167999999999,0.010832000000000001,15.979974,2004,19,62.577564891683245
-731,16.861197,0.009099000000000001,16.861015,1904,18,59.307770379528804
-732,17.603088,0.008322,17.602812999999998,1904,18,56.80821455871833
-733,16.20028,0.010051000000000001,16.199848,1804,17,61.72732816963658
-734,15.589943,0.010424999999999999,15.589737,1804,17,64.14391636967498
-735,16.717409999999997,0.007376000000000001,16.717263,1804,17,59.817878487158005
-736,17.177564999999998,0.008656,17.177293,1804,17,58.215468839733695
-737,16.086508,0.007585000000000001,16.086339000000002,1804,17,62.16389535876898
-738,16.374298,0.009535,16.374010000000002,1804,17,61.071320431569035
-739,16.746454,0.023718,16.746146,1904,18,59.7141341086298
-740,16.551462,0.010196,16.551277,1904,18,60.41762353077933
-741,17.031613,0.007781999999999999,17.031228,1904,18,58.714344906733146
-742,16.384664,0.010253,16.384489,1904,18,61.0326827574859
-743,16.032606,0.009297,16.032382000000002,1904,18,62.37289184303537
-744,16.78665,0.008497,16.786474,1904,18,59.57114731051162
-745,16.380981,0.008131999999999999,16.38071,1904,18,61.046404974158754
-746,17.919872,0.014678,17.919528,1904,18,55.80397002835734
-747,16.133122,0.010056,16.132744000000002,1804,17,61.98428301726101
-748,15.401722,0.010041,15.401527,1704,16,64.92780482597985
-749,16.878735,0.007162,16.878529,1704,16,59.246146112253086
-750,16.626864,0.022784000000000002,16.626661000000002,1904,18,60.14363261767222
-751,20.166794,0.008704,20.166467,1904,18,49.58646376811307
-752,17.587721000000002,0.010786,17.587438,1904,18,56.85784986013821
-753,11.775609,0.009007000000000001,11.775402000000001,1904,18,84.92129791333934
-754,16.904685,0.007975999999999999,16.904490000000003,1904,18,59.155198691960244
-755,16.754099,0.007949,16.753811,1904,18,59.68688617633213
-756,16.417398,0.010116,16.417102999999997,1904,18,60.91099210727547
-757,16.410502,0.009592999999999999,16.410317,1804,17,60.93658804587452
-758,16.689624,0.007859999999999999,16.689453,1804,17,59.91746728386452
-759,16.972472,0.006994,16.971908,1804,17,58.91893649905565
-760,16.766775000000003,0.022974,16.766536,2004,19,59.64176175800056
-761,16.175974999999998,0.010013000000000001,16.175629,2004,19,61.82007576050285
-762,16.163376,0.010038,16.163197,2004,19,61.868263164823986
-763,17.152842,0.00796,17.152613000000002,2004,19,58.29937686128048
-764,16.653716,0.008874,16.653360999999997,1904,18,60.046658655641785
-765,16.847102999999997,0.009592999999999999,16.84674,1904,18,59.357386252105194
-766,15.817787,0.008907,15.817583999999998,1904,18,63.21996876048464
-767,16.649303,0.008555,16.649085,1804,17,60.0625743912523
-768,16.549757,0.007226,16.549571,1804,17,60.42384791510836
-769,17.164964,0.021454,17.164561,1804,17,58.258205493469134
-770,16.195795999999998,0.023139999999999997,16.195465,2004,19,61.74441811936876
-771,16.431874999999998,0.009252999999999999,16.431681,2004,19,60.85732760260166
-772,16.813841999999998,0.008347,16.813644,2004,19,59.4748065314281
-773,16.962061000000002,0.008164,16.961775,2004,19,58.9550998549056
-774,16.08018,0.010077000000000001,16.079857,2004,19,62.188358588025764
-775,16.138225,0.022515,16.138023,2004,19,61.96468322879375
-776,20.444244,0.009105,20.443884,2004,19,48.913523043454184
-777,16.744904000000002,0.017282000000000002,16.744629,1904,18,59.7196615758442
-778,13.065836000000001,0.008771,13.065584,1904,18,76.53547771455267
-779,16.277608999999998,0.009498,16.277412,1804,17,61.43408408446229
-780,16.291878999999998,0.01047,16.29166,1804,17,61.380274184457186
-781,17.324139,0.023995,17.323837,2004,19,57.72292637458058
-782,16.046545,0.010125,16.046362000000002,2004,19,62.31871097485472
-783,17.313989,0.009680999999999999,17.313603,2004,19,57.756765353148836
-784,19.983998,0.012660000000000001,19.983777,2004,19,50.04003703363061
-785,12.458796,0.008422,12.458587,2004,19,80.26457773287243
-786,16.397026,0.008185,16.396823,2004,19,60.98666916793326
-787,17.405329000000002,0.009042000000000001,17.404923,2004,19,57.4536683563982
-788,16.112925999999998,0.01071,16.112713,2004,19,62.06197434283507
-789,16.391296,0.00911,16.391099999999998,1904,18,61.007988630063174
-790,16.581211,0.008538,16.580917,1904,18,60.30922590635871
-791,17.180633,0.023609,17.180257,2104,20,58.20507311925003
-792,16.061166,0.010355,16.060855,2104,20,62.261980232319374
-793,16.994169,0.00962,16.99389,2104,20,58.843712805256914
-794,16.405365000000003,0.009075,16.405074,2104,20,60.955669075329915
-795,16.568678,0.011075,16.568455999999998,2004,19,60.35484544995081
-796,17.052473,0.009675,17.05203,2004,19,58.642520647884915
-797,15.662279000000002,0.0099,15.662103,2004,19,63.84766865664952
-798,16.353392000000003,0.008528,16.353201000000002,2004,19,61.14939334909845
-799,17.511200000000002,0.008452,17.510993,2004,19,57.106309105029915
-800,15.893983,0.009473,15.893785000000001,2004,19,62.91689125375307
-801,18.287359,0.009379,18.286977,1904,18,54.682581558113455
-802,18.318597,0.026477,18.318395000000002,2104,20,54.589333451683004
-803,24.679018,0.019813,24.67863,2104,20,40.5202508462857
-804,8.387346,0.013329,8.387156,2104,20,119.22722634788167
-805,13.394547999999999,0.008871,13.394249,2104,20,74.65724114020124
-806,16.478642,0.010350999999999999,16.478374,2104,20,60.68461223928525
-807,17.508713,0.009325,17.508506999999998,2104,20,57.11442068871653
-808,15.931908000000002,0.00956,15.931717,2104,20,62.76712117594452
-809,16.744412999999998,0.010499999999999999,16.744139,2004,19,59.72141274824027
-810,15.960861,0.010665999999999998,15.960598999999998,2004,19,62.65326162542234
-811,17.503922000000003,0.009466,17.503761,2004,19,57.130053481728254
-812,16.504649,0.026862,16.504454000000003,2204,21,60.588989199346194
-813,16.586965,0.008842,16.586743000000002,2204,21,60.28830470191503
-814,16.005221,0.011673,16.004962000000003,2204,21,62.47961212156959
-815,16.451549999999997,0.024046,16.451389,2104,20,60.784546136990144
-816,17.003867999999997,0.009016,17.003291,2104,20,58.81014837329954
-817,16.096762000000002,0.00919,16.096455,2104,20,62.124295557081595
-818,16.875261,0.009687000000000001,16.874972,2104,20,59.25834273022504
-819,16.665902,0.011099,16.665558,2104,20,60.00275292630426
-820,16.273187,0.01083,16.272969000000003,2104,20,61.45077789617977
-821,16.471989999999998,0.008449,16.471766,2104,20,60.70911893462782
-822,16.690112,0.032291,16.6899,2304,22,59.91571536488192
-823,17.153483,0.023798000000000003,17.152810000000002,2204,21,58.29719830077658
-824,16.123216,0.011685000000000001,16.123001000000002,2204,21,62.02236576127245
-825,16.880678,0.009459,16.880262,2204,21,59.23932676163837
-826,16.102014,0.022512,16.101797,2204,21,62.104032452089534
-827,16.865381,0.009332,16.865181,2204,21,59.293057180267674
-828,16.399265,0.011312,16.398989999999998,2204,21,60.9783426269409
-829,16.583562999999998,0.010639,16.583341,2104,20,60.30067241882821
-830,15.925186,0.009186,15.925000000000002,2104,20,62.79361509498225
-831,18.126442,0.008432,18.126238999999998,2104,20,55.16802470115205
-832,15.548002,0.01025,15.547747000000001,2104,20,64.3169456757209
-833,17.102649,0.038378999999999996,17.102341,2304,22,58.470474369204446
-834,16.043093000000002,0.010597,16.042785000000002,2304,22,62.33212012172465
-835,11.497692,0.012923,11.497482,2304,22,86.97397703817427
-836,19.213962000000002,0.010646,19.213608999999998,2304,22,52.04548650611466
-837,17.5739,0.016405999999999997,17.573569,2304,22,56.90256573668907
-838,17.932759,0.016095,17.932256,2304,22,55.76386767925671
-839,15.704971000000002,0.01812,15.704612999999998,2204,21,63.67410675256897
-840,17.023294,0.028534,17.022916,2204,21,58.743037628322696
-841,16.510680999999998,0.020188,16.51012,2204,21,60.56685366278957
-842,12.674558000000001,0.01594,12.674121,2204,21,78.89821483321154
-843,19.740066,0.040803,19.739659,2404,23,50.658391922296516
-844,16.835233000000002,0.023354,16.834818000000002,2304,22,59.39923730191319
-845,15.475666,0.016867999999999998,15.475236,2304,22,64.61757445527708
-846,18.214399,0.016513,18.214056,2304,22,54.90161931777161
-847,11.932228,0.017358,11.931834,2304,22,83.80664533061218
-848,22.355365,0.016676,22.354952,2304,22,44.73199162706581
-849,14.821124,0.021566,14.820805,2304,22,67.4712660119435
-850,16.273978000000003,0.016711,16.2736,2304,22,61.44779106866187
-851,16.628673,0.019613,16.628218,2304,22,60.1370897124503
-852,16.549172000000002,0.019456,16.548683,2204,21,60.42598384982644
-853,16.33401,0.0167,16.333633,2204,21,61.221953457846546
-854,16.542565,0.042666,16.542286,2404,23,60.450117620816364
-855,16.434422,0.016343,16.434106,2404,23,60.84789595886
-856,17.930602,0.016319,17.93006,2404,23,55.77057591262134
-857,14.895296,0.018198000000000002,14.894903,2404,23,67.13528888583349
-858,16.981700999999997,0.016371999999999998,16.981307,2304,22,58.88691598091382
-859,14.499225,0.017243,14.498845,2304,22,68.96920352639538
-860,19.522601,0.012353,19.522246,2304,22,51.22268287919217
-861,17.176083000000002,0.010908,17.175829,2304,22,58.22049183157766
-862,19.643298,0.014085,19.642901000000002,2304,22,50.90794834961013
-863,10.772542,0.021263999999999998,10.772231999999999,2304,22,92.82860071466884
-864,18.23207,0.035431,18.231631,2504,24,54.84840722967825
-865,15.841746,0.01866,15.841309,2404,23,63.12435510580715
-866,17.055128,0.01597,17.054645999999998,2404,23,58.63339166964915
-867,15.607814,0.020285,15.607471,2404,23,64.07047136773926
-868,24.420645,0.014641,24.420288,2404,23,40.94895937433266
-869,10.716723,0.030701000000000003,10.716512,2404,23,93.31210669530229
-870,16.210966,0.010213,16.210667,2404,23,61.686638538381985
-871,16.706644999999998,0.0109,16.706357,2404,23,59.85642239959011
-872,16.663763000000003,0.010379,16.66348,2404,23,60.01045502147383
-873,15.830401,0.010176000000000001,15.830245,2304,22,63.16959374560379
-874,17.376713,0.00937,17.376462,2304,22,57.548283153436444
-875,16.232394,0.025406,16.232212,2504,24,61.605207463544815
-876,16.170129,0.011759,16.16993,2504,24,61.842425623196945
-877,17.357471999999998,0.011164,17.357214,2404,23,57.6120762286121
-878,16.296809999999997,0.009677,16.296514000000002,2404,23,61.36170207543686
-879,18.841174,0.011262,18.840895,2404,23,53.075248920263675
-880,27.763049000000002,0.019542999999999998,27.76253,2404,23,36.01909862277734
-881,8.650534,0.014468,8.65033,2404,23,115.59979996610613
-882,10.390685,0.01027,10.390494,2404,23,96.24004577176578
-883,17.55657,0.009698,17.556332,2404,23,56.95873396682837
-884,16.212384999999998,0.012193,16.212134,2404,23,61.68123937347899
-885,16.052513,0.025239,16.052353,2604,25,62.29554213723421
-886,17.003643999999998,0.01073,17.003438,2604,25,58.81092311742119
-887,16.529512999999998,0.011512999999999999,16.529329,2604,25,60.49785011814929
-888,16.740489,0.010495,16.740254,2604,25,59.7354115521954
-889,18.9866,0.02685,18.986154000000003,2404,23,52.66872425816102
-890,24.737996000000003,0.019697000000000003,24.737709,2404,23,40.42364628080625
-891,8.907959,0.014134,8.907753,2404,23,112.25916060008808
-892,13.888224,0.009935999999999999,13.887932000000001,2404,23,72.00344694901234
-893,16.543924,0.01169,16.543739,2404,23,60.44515194823187
-894,15.781875000000001,0.011559999999999999,15.781678000000001,2404,23,63.363827175161376
-895,17.074473,0.025336,17.074269,2604,25,58.56696133461922
-896,26.203489,0.017617999999999998,26.203071,2604,25,38.162856862305624
-897,9.07014,0.016089000000000003,9.069851,2604,25,110.25188144835691
-898,14.698321,0.012895,14.697959,2604,25,68.03498168260171
-899,16.540525,0.025295,16.540365,2504,24,60.45757314232771
-900,15.732989,0.011814999999999999,15.732838,2504,24,63.56071309780996
-901,17.662354,0.016121999999999997,17.661983,2504,24,56.61759468754844
-902,16.639927999999998,0.012089,16.639526,2504,24,60.0964138787139
-903,16.17397,0.012373,16.173782000000003,2504,24,61.82773926253109
-904,16.417661,0.013198,16.41736,2404,23,60.91001635373029
-905,16.839073,0.012306999999999998,16.83879,2404,23,59.385691837074404
-906,16.354147,0.026874000000000002,16.353919,2604,25,61.14657034695848
-907,17.404041,0.011944,17.403683,2604,25,57.457920261162336
-908,15.235824000000001,0.014671,15.235639,2604,25,65.63478286438593
-909,17.209388,0.024966000000000002,17.208766,2504,24,58.10781882539925
-910,16.249071999999998,0.01079,16.248842999999997,2504,24,61.54197605869431
-911,16.590056,0.012466999999999999,16.589769,2504,24,60.27707200023918
-912,16.200615000000003,0.012618,16.200474,2504,24,61.72605175791165
-913,16.876695,0.010183000000000001,16.876153000000002,2504,24,59.25330759369651
-914,16.703677,0.010978,16.703391,2504,24,59.867058013633766
-915,16.295086,0.012159,16.294744,2504,24,61.36819406783124
-916,17.077445,0.026645,17.077185,2704,26,58.556768884338375
-917,15.990755999999998,0.013054000000000001,15.990579000000002,2704,26,62.536130249251514
-918,16.892509,0.011841,16.892283000000003,2604,25,59.197837337248124
-919,17.033561,0.010716999999999999,17.033289,2604,25,58.70763018960041
-920,16.034983,0.014013,16.034720999999998,2504,24,62.363645786216296
-921,16.415917,0.011157,16.415665999999998,2504,24,60.91648733360433
-922,17.147561,0.011183,17.147343999999997,2504,24,58.31733154353555
-923,16.122391999999998,0.011446,16.122197,2504,24,62.02553566493112
-924,16.565242,0.011448,16.564922,2504,24,60.36736438863977
-925,17.089785,0.011512,17.089012,2504,24,58.514486870373155
-926,16.851462,0.013156000000000001,16.851173,2404,23,59.34203216314406
-927,9.820788,0.046677,9.820056000000001,2604,25,101.82482301827511
-928,8.574152,0.014627000000000001,8.573951999999998,2604,25,116.62960955205833
-929,17.737522,0.016572,17.737185999999998,2604,25,56.37766087055453
-930,15.914416000000001,0.0158,15.914202,2604,25,62.83611035428507
-931,15.543908,0.010727,15.543691,2604,25,64.33388566118636
-932,20.900916,0.015494,20.900637,2604,25,47.844793022468494
-933,14.929153000000001,0.013068,14.928839,2604,25,66.98303647902864
-934,16.10406,0.024045,16.10372,2404,23,62.096142215068745
-935,14.69518,0.011276,14.69491,2404,23,68.04952372138347
-936,15.659873000000001,0.01064,15.659685999999999,2404,23,63.85747828223128
-937,17.431321,0.023793,17.431027,2604,25,57.36799867319292
-938,16.827816,0.01183,16.827475,2604,25,59.42541801027537
-939,18.249145000000002,0.012657999999999999,18.248849,2604,25,54.79708775397422
-940,18.886996,0.025673,18.886620999999998,2604,25,52.9464823310176
-941,12.118475,0.012495,12.118285,2504,24,82.51863373898118
-942,16.448551,0.017447,16.448203000000003,2504,24,60.79562874565669
-943,16.955726000000002,0.012518,16.95535,2504,24,58.97712666505698
-944,16.511688,0.012074,16.511395,2504,24,60.56315986590832
-945,16.326441,0.028034999999999997,16.326148,2504,24,61.25033618778276
-946,16.529489,0.011644999999999999,16.529282,2504,24,60.49793795803366
-947,16.861467,0.026817,16.861171000000002,2604,25,59.30682069359682
-948,16.544857,0.01374,16.544572,2504,24,60.44174331636713
-949,15.897463,0.010753,15.897262999999999,2504,24,62.90311856678012
-950,17.222769,0.02254,17.222494,2504,24,58.06267273282246
-951,16.853375,0.010526,16.853,2504,24,59.335296342720675
-952,16.159794,0.012548,16.159157,2504,24,61.881976960844916
-953,16.584522,0.013524,16.584245,2404,23,60.29718553238978
-954,15.923594,0.011470000000000001,15.923392000000002,2404,23,62.79989303922218
-955,17.00844,0.023745000000000002,17.007932,2404,23,58.79433975132346
-956,9.677705999999999,0.016773999999999997,9.677163,2404,23,103.33027269065624
-957,8.583012,0.016299,8.582823999999999,2404,23,116.5092161120129
-958,18.05115,0.031859,18.050943999999998,2604,25,55.39813252895245
-959,14.889499,0.011106,14.889228,2504,24,67.16142698958507
-960,16.513044,0.011294,16.512854,2504,24,60.558186606903
-961,23.453857000000003,0.011032,23.45355,2504,24,42.63691042373115
-962,17.116778999999998,0.015666,17.115936,2504,24,58.42220665465156
-963,9.781416,0.023585,9.780895,2504,24,102.23468667522167
-964,17.376797,0.014514,17.37647,2304,22,57.54800496317014
-965,17.600955000000003,0.018375,17.600564,2304,22,56.81509895343746
-966,13.463305,0.011862,13.463095,2304,22,74.27596715665284
-967,17.457114,0.009151,17.456819,2304,22,57.283237080310066
-968,28.883163,0.039117,28.882723,2504,24,34.6222468778783
-969,12.520648000000001,0.035494000000000005,12.520283000000001,2504,24,79.86807072605187
-970,8.225767,0.012133999999999999,8.225566,2404,23,121.56921050644883
-971,16.049627,0.009584,16.049277,2404,23,62.306743951121106
-972,16.835514,0.011821000000000002,16.835226,2404,23,59.398245874762125
-973,16.698330000000002,0.009748999999999999,16.698155999999997,2404,23,59.886228143772456
-974,16.301168,0.011341,16.30092,2404,23,61.345297465801224
-975,16.754944000000002,0.011326,16.754654000000002,2304,22,59.683875995049576
-976,15.749144999999999,0.009500999999999999,15.748936000000002,2304,22,63.49551039119902
-977,17.562299,0.009392,17.562066,2204,21,56.94015345029714
-978,9.576795,0.016019000000000002,9.575697,2204,21,104.41906713049616
-979,9.176388000000001,0.030168999999999998,9.176145,2404,23,108.97533975241673
-980,15.08373,0.02408,15.083422,2404,23,66.2965990507653
-981,16.762994,0.012218999999999999,16.762802999999998,2304,22,59.65521433700925
-982,19.235636,0.010589,19.235440999999998,2304,22,51.98684358552013
-983,14.121284,0.018427000000000002,14.121029,2304,22,70.81509018584995
-984,21.944482,0.012248,21.944304000000002,2304,22,45.56954226579602
-985,10.379436,0.010048,10.379235000000001,2304,22,96.34434857539465
-986,17.527433,0.009361000000000001,17.527173,2304,22,57.05342020134951
-987,15.848339999999999,0.011486,15.848145,2204,21,63.09809103035397
-988,17.197993,0.009857000000000001,17.197734,2204,21,58.14631974789151
-989,16.097621999999998,0.041430999999999996,16.097442,2404,23,62.1209766262371
-990,16.985498000000003,0.012322,16.98533,2304,22,58.87375218554085
-991,16.321194000000002,0.009428,16.320997000000002,2304,22,61.27002718060945
-992,16.183177,0.011068,16.182903,2304,22,61.79256396936152
-993,16.720508,0.010205,16.72037,2304,22,59.806795343777836
-994,17.974731000000002,0.010291,17.97431,2204,21,55.633655936214005
-995,14.932739999999999,0.012267,14.93254,2204,21,66.96694645456896
-996,16.689943,0.009026,16.689739,2204,21,59.916322062933354
-997,16.994348,0.009517999999999999,16.994101,2204,21,58.843093009511165
-998,16.89216,0.010227,16.891917,2204,21,59.199060392513445
-999,15.771558,0.010326,15.771288000000002,2204,21,63.40527676466713
-1000,16.985316,0.024999,16.985159,2404,23,58.87438302590308
-1001,17.132959,0.011084,17.132646,2304,22,58.36703397235702
-1002,15.46376,0.012051000000000001,15.463561,2204,21,64.66732541115485
-1003,17.477928,0.008335,17.477574999999998,2204,21,57.215019995505195
-1004,15.543932999999999,0.010876,15.543764,2204,21,64.33378219013167
-1005,17.159707,0.008895,17.159439,2204,21,58.27605331489634
-1006,16.192970000000003,0.009701999999999999,16.19279,2204,21,61.75519376618371
-1007,9.699892,0.015817,9.699316,2204,21,103.09393135511199
-1008,8.459995,0.010825000000000001,8.459729,2204,21,118.2033795528248
-1009,16.46831,0.010067,16.468018,2104,20,60.722684962816466
-1010,16.04561,0.024094,16.045342,2304,22,62.32234237277361
-1011,17.173335,0.010020000000000001,17.172981,2304,22,58.229808013411485
-1012,15.919287,0.01192,15.918986,2304,22,62.81688369585899
-1013,16.708686,0.010648999999999999,16.708384,2304,22,59.849110815775695
-1014,16.230838000000002,0.010727,16.230623,2204,21,61.611113363339584
-1015,17.503227,0.021433999999999998,17.502938999999998,2204,21,57.132321942690915
-1016,16.021271,0.010499000000000001,16.020666,2204,21,62.417020472345804
-1017,16.785307,0.010541,16.784988000000002,2204,21,59.575913624933996
-1018,16.217557,0.010742,16.217276,2104,20,61.66156838542328
-1019,16.179605,0.009269999999999999,16.179413,2104,20,61.80620602295298
-1020,17.093359,0.02489,17.092998,2304,22,58.50225224895821
-1021,16.987164,0.011036,16.986858,2304,22,58.867978198126536
-1022,15.754391,0.011714,15.754204000000001,2304,22,63.47436724148842
-1023,16.998541999999997,0.013949,16.998251999999997,2304,22,58.82857482718225
-1024,16.857528,0.011948,16.857263,2204,21,59.32067857161501
-1025,16.131686,0.011175000000000001,16.131389,2204,21,61.989800694112205
-1026,16.500599,0.010218,16.50039,2204,21,60.603860502276305
-1027,16.79334,0.010395,16.793157,2104,20,59.54741582079562
-1028,9.796621,0.01282,9.796264,2104,20,102.07601171873445
-1029,8.983414,0.011101999999999999,8.983125,2104,20,111.31625459986593
-1030,15.287471,0.010336000000000001,15.2868,2104,20,65.41304313839746
-1031,19.786303,0.028853,19.785997,2304,22,50.540012452048266
-1032,12.686164999999999,0.011777,12.685963999999998,2304,22,78.82602819685856
-1033,17.200736000000003,0.009374,17.200436,2304,22,58.13704715891226
-1034,16.662408,0.009995,16.662169000000002,2204,21,60.01533511842946
-1035,16.132644000000003,0.010539,16.132428,2204,21,61.986119572216424
-1036,16.336244,0.011073999999999999,16.336023,2204,21,61.213581285881865
-1037,16.737871000000002,0.010465,16.737613,2204,21,59.74475487354395
-1038,19.001261,0.010065,19.000937999999998,2104,20,52.628086104390654
-1039,16.408847,0.025485,16.408527999999997,2104,20,60.94273412385404
-1040,14.349423,0.009832,14.349139000000001,2104,20,69.68921328753079
-1041,16.58855,0.023669,16.588337000000003,2304,22,60.28254428506409
-1042,16.383245000000002,0.010243,16.382966999999997,2304,22,61.03796897378998
-1043,17.051349000000002,0.009798,17.050943,2204,21,58.64638627712094
diff --git a/rs/src/graph.rs b/rs/src/graph.rs
deleted file mode 100644
index 7426bee..0000000
--- a/rs/src/graph.rs
+++ /dev/null
@@ -1,122 +0,0 @@
-use crate::vertex::Vertex;
-
-#[derive(Clone)]
-pub struct SubView {
- pub x: f32,
- pub y: f32,
- pub width: f32,
- pub height: f32,
-}
-
-pub struct GraphView {
- pub viewport: SubView,
- pub lines: Vec<Vec<Vertex>>,
- pub show_grid: bool,
- pub title: String,
- pub x_axis_label: String,
- pub y_axis_label: String,
- pub legend_items: Vec<LegendItem>,
-}
-
-#[derive(Clone)]
-pub struct LegendItem {
- pub label: String,
- pub color: [f32; 3],
-}
-
-impl GraphView {
- pub fn new(viewport: SubView, title: String, x_axis_label: String, y_axis_label: String) -> Self {
- Self {
- viewport,
- lines: Vec::new(),
- show_grid: true,
- title,
- x_axis_label,
- y_axis_label,
- legend_items: Vec::new(),
- }
- }
-
- pub fn add_legend_item(&mut self, label: String, color: [f32; 3]) {
- self.legend_items.push(LegendItem { label, color });
- }
-
- pub fn generate_grid_lines(&self) -> Vec<Vertex> {
- let mut vertices = Vec::new();
- let grid_color = [0.3, 0.7, 0.9];
-
- // Vertical grid lines (10 divisions)
- for i in 0..=10 {
- let x = -1.0 + (i as f32 / 10.0) * 2.0;
- vertices.push(Vertex { position: [x, -1.0], color: grid_color });
- vertices.push(Vertex { position: [x, 1.0], color: grid_color });
- }
-
- // Horizontal grid lines (10 divisions)
- for i in 0..=10 {
- let y = -1.0 + (i as f32 / 10.0) * 2.0;
- vertices.push(Vertex { position: [-1.0, y], color: grid_color });
- vertices.push(Vertex { position: [1.0, y], color: grid_color });
- }
-
- vertices
- }
-
- pub fn generate_border(&self) -> Vec<Vertex> {
- let border_color = [0.6, 0.7, 0.7];
- vec![
- // Top border
- Vertex { position: [-1.0, 1.0], color: border_color },
- Vertex { position: [1.0, 1.0], color: border_color },
- // Right border
- Vertex { position: [1.0, 1.0], color: border_color },
- Vertex { position: [1.0, -1.0], color: border_color },
- // Bottom border
- Vertex { position: [1.0, -1.0], color: border_color },
- Vertex { position: [-1.0, -1.0], color: border_color },
- // Left border
- Vertex { position: [-1.0, -1.0], color: border_color },
- Vertex { position: [-1.0, 1.0], color: border_color },
- ]
- }
-
- pub fn update(&mut self, time: f32, graph_idx: usize) {
- // Add new line every 10 frames
- if (time * 60.0) as u32 % 10 == 0 && self.lines.len() < 50 {
- let mut line = Vec::new();
- let phase = time + (graph_idx as f32 * 2.0);
- let freq = 2.0 + (time * 0.5 + graph_idx as f32).sin() * 1.0;
-
- for i in 0..100 {
- let x = (i as f32 / 100.0) * 2.0 - 1.0;
- let y = ((i as f32) * 0.1 * freq + phase).sin() * 0.3;
-
- // Different color per graph
- let hue = (time * 0.1 + graph_idx as f32 * 0.5) % 1.0;
- let color = [
- (hue * 6.0).sin().abs(),
- ((hue + 0.33) * 6.0).sin().abs(),
- ((hue + 0.66) * 6.0).sin().abs(),
- ];
-
- line.push(Vertex {
- position: [x, y],
- color,
- });
- }
- self.lines.push(line);
- }
-
- // Scroll lines down
- for line in self.lines.iter_mut() {
- for vertex in line.iter_mut() {
- vertex.position[1] -= 0.01;
- }
- }
-
- // Remove lines that have scrolled off screen
- self.lines.retain(|line| {
- line.first().map(|v| v.position[1] > -1.1).unwrap_or(false)
- });
- }
-}
diff --git a/rs/src/main.rs b/rs/src/main.rs
deleted file mode 100644
index 917515d..0000000
--- a/rs/src/main.rs
+++ /dev/null
@@ -1,89 +0,0 @@
-mod vertex;
-mod graph;
-mod renderer;
-mod metrics;
-
-use winit::{
- event::*,
- event_loop::EventLoop,
- keyboard::{KeyCode, PhysicalKey},
-};
-
-use renderer::State;
-
-fn main() {
- env_logger::init();
- let event_loop = EventLoop::new().unwrap();
- let window = std::sync::Arc::new(
- event_loop
- .create_window(
- winit::window::Window::default_attributes()
- .with_title("TimePlot - Waterfall Display")
- .with_inner_size(winit::dpi::LogicalSize::new(1280, 720))
- )
- .unwrap(),
- );
-
- let mut state = pollster::block_on(State::new(window.clone()));
-
- event_loop
- .run(move |event, control_flow| match event {
- Event::WindowEvent {
- ref event,
- window_id,
- } if window_id == state.window.id() => match event {
- WindowEvent::CloseRequested => control_flow.exit(),
- WindowEvent::Resized(physical_size) => {
- state.resize(*physical_size);
- }
- WindowEvent::KeyboardInput {
- event: key_event,
- ..
- } => {
- if key_event.state == winit::event::ElementState::Pressed {
- if let PhysicalKey::Code(keycode) = key_event.physical_key {
- match keycode {
- KeyCode::KeyG => {
- println!("Grid toggle pressed");
- // Toggle grid for all graphs
- for graph in &mut state.graphs {
- graph.show_grid = !graph.show_grid;
- println!("Grid now: {}", graph.show_grid);
- }
- }
- KeyCode::KeyM => {
- // Toggle metrics display
- state.toggle_metrics();
- }
- KeyCode::KeyE => {
- // Export metrics to CSV
- if let Err(e) = state.export_metrics("metrics.csv") {
- eprintln!("Failed to export metrics: {}", e);
- } else {
- println!("Metrics exported to metrics.csv");
- }
- }
- KeyCode::Escape => control_flow.exit(),
- _ => {}
- }
- }
- }
- }
- WindowEvent::RedrawRequested => {
- state.update();
- match state.render() {
- Ok(_) => {}
- Err(wgpu::SurfaceError::Lost) => state.resize(state.size),
- Err(wgpu::SurfaceError::OutOfMemory) => control_flow.exit(),
- Err(e) => eprintln!("{:?}", e),
- }
- }
- _ => {}
- },
- Event::AboutToWait => {
- state.window.request_redraw();
- }
- _ => {}
- })
- .unwrap();
-}
diff --git a/rs/src/metrics.rs b/rs/src/metrics.rs
deleted file mode 100644
index 369aff8..0000000
--- a/rs/src/metrics.rs
+++ /dev/null
@@ -1,290 +0,0 @@
-use std::time::{Duration, Instant};
-use std::collections::VecDeque;
-
-/// Rolling average calculator for smooth metric display
-pub struct RollingAverage {
- values: VecDeque<f64>,
- capacity: usize,
- sum: f64,
-}
-
-impl RollingAverage {
- pub fn new(capacity: usize) -> Self {
- Self {
- values: VecDeque::with_capacity(capacity),
- capacity,
- sum: 0.0,
- }
- }
-
- pub fn push(&mut self, value: f64) {
- if self.values.len() >= self.capacity {
- if let Some(old) = self.values.pop_front() {
- self.sum -= old;
- }
- }
- self.values.push_back(value);
- self.sum += value;
- }
-
- pub fn average(&self) -> f64 {
- if self.values.is_empty() {
- 0.0
- } else {
- self.sum / self.values.len() as f64
- }
- }
-
- pub fn min(&self) -> f64 {
- self.values.iter().copied().fold(f64::INFINITY, f64::min)
- }
-
- pub fn max(&self) -> f64 {
- self.values.iter().copied().fold(f64::NEG_INFINITY, f64::max)
- }
-
- pub fn latest(&self) -> f64 {
- self.values.back().copied().unwrap_or(0.0)
- }
-}
-
-/// Frame timing breakdown
-#[derive(Debug, Clone)]
-pub struct FrameTiming {
- pub total_ms: f64,
- pub update_ms: f64,
- pub render_ms: f64,
- pub vertex_count: usize,
- pub line_count: usize,
-}
-
-/// Performance metrics collector with rolling averages
-pub struct PerformanceMetrics {
- // Rolling averages (default: 60 frames)
- frame_time: RollingAverage,
- update_time: RollingAverage,
- render_time: RollingAverage,
- vertex_count: RollingAverage,
- line_count: RollingAverage,
-
- // Session-wide statistics
- pub total_frames: u64,
- session_start: Instant,
-
- // Current frame timing
- frame_start: Option<Instant>,
- update_start: Option<Instant>,
- render_start: Option<Instant>,
-
- // Historical data for export
- history: VecDeque<FrameTiming>,
- history_capacity: usize,
-}
-
-impl PerformanceMetrics {
- pub fn new(rolling_window: usize, history_capacity: usize) -> Self {
- Self {
- frame_time: RollingAverage::new(rolling_window),
- update_time: RollingAverage::new(rolling_window),
- render_time: RollingAverage::new(rolling_window),
- vertex_count: RollingAverage::new(rolling_window),
- line_count: RollingAverage::new(rolling_window),
- total_frames: 0,
- session_start: Instant::now(),
- frame_start: None,
- update_start: None,
- render_start: None,
- history: VecDeque::with_capacity(history_capacity),
- history_capacity,
- }
- }
-
- // Frame timing markers
- pub fn begin_frame(&mut self) {
- self.frame_start = Some(Instant::now());
- }
-
- pub fn begin_update(&mut self) {
- self.update_start = Some(Instant::now());
- }
-
- pub fn end_update(&mut self) -> f64 {
- if let Some(start) = self.update_start.take() {
- let duration = start.elapsed();
- duration.as_secs_f64() * 1000.0
- } else {
- 0.0
- }
- }
-
- pub fn begin_render(&mut self) {
- self.render_start = Some(Instant::now());
- }
-
- pub fn end_render(&mut self) -> f64 {
- if let Some(start) = self.render_start.take() {
- let duration = start.elapsed();
- duration.as_secs_f64() * 1000.0
- } else {
- 0.0
- }
- }
-
- pub fn end_frame(&mut self, update_ms: f64, render_ms: f64, vertex_count: usize, line_count: usize) {
- if let Some(start) = self.frame_start.take() {
- let total_ms = start.elapsed().as_secs_f64() * 1000.0;
-
- // Update rolling averages
- self.frame_time.push(total_ms);
- self.update_time.push(update_ms);
- self.render_time.push(render_ms);
- self.vertex_count.push(vertex_count as f64);
- self.line_count.push(line_count as f64);
-
- // Record to history
- let timing = FrameTiming {
- total_ms,
- update_ms,
- render_ms,
- vertex_count,
- line_count,
- };
-
- if self.history.len() >= self.history_capacity {
- self.history.pop_front();
- }
- self.history.push_back(timing);
-
- self.total_frames += 1;
- }
- }
-
- // Getters for current metrics
- pub fn fps(&self) -> f64 {
- let avg_frame_time = self.frame_time.average();
- if avg_frame_time > 0.0 {
- 1000.0 / avg_frame_time
- } else {
- 0.0
- }
- }
-
- pub fn avg_frame_time_ms(&self) -> f64 {
- self.frame_time.average()
- }
-
- pub fn avg_update_time_ms(&self) -> f64 {
- self.update_time.average()
- }
-
- pub fn avg_render_time_ms(&self) -> f64 {
- self.render_time.average()
- }
-
- pub fn avg_vertex_count(&self) -> f64 {
- self.vertex_count.average()
- }
-
- pub fn avg_line_count(&self) -> f64 {
- self.line_count.average()
- }
-
- pub fn min_fps(&self) -> f64 {
- let max_frame_time = self.frame_time.max();
- if max_frame_time > 0.0 && max_frame_time.is_finite() {
- 1000.0 / max_frame_time
- } else {
- 0.0
- }
- }
-
- pub fn max_fps(&self) -> f64 {
- let min_frame_time = self.frame_time.min();
- if min_frame_time > 0.0 && min_frame_time.is_finite() {
- 1000.0 / min_frame_time
- } else {
- 0.0
- }
- }
-
- pub fn session_duration(&self) -> Duration {
- self.session_start.elapsed()
- }
-
- // Export functionality
- pub fn export_to_csv(&self, path: &str) -> std::io::Result<()> {
- use std::io::Write;
- let mut file = std::fs::File::create(path)?;
-
- // Write header
- writeln!(file, "frame,total_ms,update_ms,render_ms,vertex_count,line_count,fps")?;
-
- // Write data
- for (i, timing) in self.history.iter().enumerate() {
- let fps = if timing.total_ms > 0.0 {
- 1000.0 / timing.total_ms
- } else {
- 0.0
- };
- writeln!(
- file,
- "{},{},{},{},{},{},{}",
- i,
- timing.total_ms,
- timing.update_ms,
- timing.render_ms,
- timing.vertex_count,
- timing.line_count,
- fps
- )?;
- }
-
- Ok(())
- }
-
- pub fn format_summary(&self) -> String {
- format!(
- "FPS: {:.1} (min: {:.1}, max: {:.1}) | Frame: {:.2}ms | Update: {:.2}ms | Render: {:.2}ms | Vertices: {:.0} | Lines: {:.0}",
- self.fps(),
- self.min_fps(),
- self.max_fps(),
- self.avg_frame_time_ms(),
- self.avg_update_time_ms(),
- self.avg_render_time_ms(),
- self.avg_vertex_count(),
- self.avg_line_count()
- )
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn test_rolling_average() {
- let mut avg = RollingAverage::new(3);
- avg.push(10.0);
- avg.push(20.0);
- avg.push(30.0);
- assert_eq!(avg.average(), 20.0);
-
- avg.push(40.0);
- assert_eq!(avg.average(), 30.0); // (20 + 30 + 40) / 3
- }
-
- #[test]
- fn test_metrics_lifecycle() {
- let mut metrics = PerformanceMetrics::new(60, 1000);
-
- metrics.begin_frame();
- metrics.begin_update();
- let update_ms = metrics.end_update();
- metrics.begin_render();
- let render_ms = metrics.end_render();
- metrics.end_frame(update_ms, render_ms, 1000, 10);
-
- assert_eq!(metrics.total_frames, 1);
- assert!(metrics.fps() > 0.0);
- }
-}
diff --git a/rs/src/renderer.rs b/rs/src/renderer.rs
deleted file mode 100644
index 2b9c0d0..0000000
--- a/rs/src/renderer.rs
+++ /dev/null
@@ -1,682 +0,0 @@
-use glyphon::{
- Attrs, Buffer, Color as TextColor, Family, FontSystem, Metrics, Resolution, Shaping,
- SwashCache, TextArea, TextAtlas, TextBounds, TextRenderer, Viewport
-};
-use crate::vertex::Vertex;
-use crate::graph::{GraphView, SubView};
-use crate::metrics::PerformanceMetrics;
-
-pub struct State {
- surface: wgpu::Surface<'static>,
- device: wgpu::Device,
- queue: wgpu::Queue,
- config: wgpu::SurfaceConfiguration,
- pub size: winit::dpi::PhysicalSize<u32>,
- pub window: std::sync::Arc<winit::window::Window>,
- line_pipeline: wgpu::RenderPipeline,
- line_list_pipeline: wgpu::RenderPipeline,
- vertex_buffer: wgpu::Buffer,
- time: f32,
- pub graphs: Vec<GraphView>,
- font_system: FontSystem,
- swash_cache: SwashCache,
- text_atlas: TextAtlas,
- text_renderer: TextRenderer,
- viewport: Viewport,
- metrics: PerformanceMetrics,
- show_metrics: bool,
-}
-
-impl State {
- pub async fn new(window: std::sync::Arc<winit::window::Window>) -> Self {
- let size = window.inner_size();
-
- let instance = wgpu::Instance::new(wgpu::InstanceDescriptor {
- backends: wgpu::Backends::VULKAN,
- ..Default::default()
- });
-
- let surface = instance.create_surface(window.clone()).unwrap();
-
- let adapter = instance
- .request_adapter(&wgpu::RequestAdapterOptions {
- power_preference: wgpu::PowerPreference::HighPerformance,
- compatible_surface: Some(&surface),
- force_fallback_adapter: false,
- })
- .await
- .unwrap();
-
- let (device, queue) = adapter
- .request_device(
- &wgpu::DeviceDescriptor {
- required_features: wgpu::Features::empty(),
- required_limits: wgpu::Limits::default(),
- label: None,
- memory_hints: Default::default(),
- },
- None,
- )
- .await
- .unwrap();
-
- let surface_caps = surface.get_capabilities(&adapter);
- let surface_format = surface_caps
- .formats
- .iter()
- .copied()
- .find(|f| f.is_srgb())
- .unwrap_or(surface_caps.formats[0]);
-
- let config = wgpu::SurfaceConfiguration {
- usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
- format: surface_format,
- width: size.width,
- height: size.height,
- present_mode: surface_caps.present_modes[0],
- alpha_mode: surface_caps.alpha_modes[0],
- view_formats: vec![],
- desired_maximum_frame_latency: 2,
- };
- surface.configure(&device, &config);
-
- let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor {
- label: Some("Waterfall Shader"),
- source: wgpu::ShaderSource::Wgsl(include_str!("shader.wgsl").into()),
- });
-
- let render_pipeline_layout =
- device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
- label: Some("Render Pipeline Layout"),
- bind_group_layouts: &[],
- push_constant_ranges: &[],
- });
-
- let line_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
- label: Some("Line Strip Pipeline"),
- layout: Some(&render_pipeline_layout),
- vertex: wgpu::VertexState {
- module: &shader,
- entry_point: "vs_main",
- buffers: &[Vertex::desc()],
- compilation_options: Default::default(),
- },
- fragment: Some(wgpu::FragmentState {
- module: &shader,
- entry_point: "fs_main",
- targets: &[Some(wgpu::ColorTargetState {
- format: config.format,
- blend: Some(wgpu::BlendState::REPLACE),
- write_mask: wgpu::ColorWrites::ALL,
- })],
- compilation_options: Default::default(),
- }),
- primitive: wgpu::PrimitiveState {
- topology: wgpu::PrimitiveTopology::LineStrip,
- strip_index_format: None,
- front_face: wgpu::FrontFace::Ccw,
- cull_mode: None,
- polygon_mode: wgpu::PolygonMode::Fill,
- unclipped_depth: false,
- conservative: false,
- },
- depth_stencil: None,
- multisample: wgpu::MultisampleState {
- count: 1,
- mask: !0,
- alpha_to_coverage_enabled: false,
- },
- multiview: None,
- cache: None,
- });
-
- let line_list_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
- label: Some("Line List Pipeline"),
- layout: Some(&render_pipeline_layout),
- vertex: wgpu::VertexState {
- module: &shader,
- entry_point: "vs_main",
- buffers: &[Vertex::desc()],
- compilation_options: Default::default(),
- },
- fragment: Some(wgpu::FragmentState {
- module: &shader,
- entry_point: "fs_main",
- targets: &[Some(wgpu::ColorTargetState {
- format: config.format,
- blend: Some(wgpu::BlendState::REPLACE),
- write_mask: wgpu::ColorWrites::ALL,
- })],
- compilation_options: Default::default(),
- }),
- primitive: wgpu::PrimitiveState {
- topology: wgpu::PrimitiveTopology::LineList,
- strip_index_format: None,
- front_face: wgpu::FrontFace::Ccw,
- cull_mode: None,
- polygon_mode: wgpu::PolygonMode::Fill,
- unclipped_depth: false,
- conservative: false,
- },
- depth_stencil: None,
- multisample: wgpu::MultisampleState {
- count: 1,
- mask: !0,
- alpha_to_coverage_enabled: false,
- },
- multiview: None,
- cache: None,
- });
-
- // Create initial empty buffer (will be updated each frame)
- let vertex_buffer = device.create_buffer(&wgpu::BufferDescriptor {
- label: Some("Vertex Buffer"),
- size: (std::mem::size_of::<Vertex>() * 100 * 100) as u64,
- usage: wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST,
- mapped_at_creation: false,
- });
-
- // Create 2 graph views side-by-side with header area
- // Reserve top 60px for header
- let header_height = 60.0 / size.height as f32;
- let graph_area_height = 1.0 - header_height;
-
- let mut graphs = vec![
- GraphView::new(
- SubView {
- x: 0.0,
- y: header_height,
- width: 0.5,
- height: graph_area_height
- },
- "Frequency vs Time".to_string(),
- "Time (s)".to_string(),
- "Frequency (Hz)".to_string()
- ),
- GraphView::new(
- SubView {
- x: 0.5,
- y: header_height,
- width: 0.5,
- height: graph_area_height
- },
- "Position vs Time".to_string(),
- "Time (s)".to_string(),
- "Position (m)".to_string()
- ),
- ];
-
- // Add legend items
- graphs[0].add_legend_item("Signal A".to_string(), [1.0, 0.3, 0.3]);
- graphs[0].add_legend_item("Signal B".to_string(), [0.3, 1.0, 0.3]);
- graphs[1].add_legend_item("Object 1".to_string(), [0.3, 0.6, 1.0]);
- graphs[1].add_legend_item("Object 2".to_string(), [1.0, 0.8, 0.3]);
-
- // Initialize text rendering
- let font_system = FontSystem::new();
- let swash_cache = SwashCache::new();
- let cache = glyphon::Cache::new(&device);
- let mut text_atlas = TextAtlas::new(&device, &queue, &cache, config.format);
- let text_renderer = TextRenderer::new(
- &mut text_atlas,
- &device,
- wgpu::MultisampleState::default(),
- None,
- );
-
- let mut viewport = Viewport::new(&device, &cache);
-
- // Initialize viewport with current resolution
- viewport.update(
- &queue,
- Resolution {
- width: size.width,
- height: size.height,
- },
- );
-
- Self {
- surface,
- device,
- queue,
- config,
- size,
- window,
- line_pipeline,
- line_list_pipeline,
- vertex_buffer,
- time: 0.0,
- graphs,
- font_system,
- swash_cache,
- text_atlas,
- text_renderer,
- viewport,
- metrics: PerformanceMetrics::new(60, 10000), // 60 frame rolling avg, 10k frame history
- show_metrics: true, // Show metrics by default
- }
- }
-
- pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize<u32>) {
- if new_size.width > 0 && new_size.height > 0 {
- self.size = new_size;
- self.config.width = new_size.width;
- self.config.height = new_size.height;
- self.surface.configure(&self.device, &self.config);
-
- // Update text viewport resolution
- self.viewport.update(
- &self.queue,
- Resolution {
- width: new_size.width,
- height: new_size.height,
- },
- );
- }
- }
-
- pub fn update(&mut self) {
- self.metrics.begin_update();
-
- self.time += 0.016; // ~60fps
-
- // Update each graph independently
- for (graph_idx, graph) in self.graphs.iter_mut().enumerate() {
- graph.update(self.time, graph_idx);
- }
- }
-
- pub fn toggle_metrics(&mut self) {
- self.show_metrics = !self.show_metrics;
- println!("Metrics display: {}", if self.show_metrics { "ON" } else { "OFF" });
- }
-
- pub fn export_metrics(&self, path: &str) -> std::io::Result<()> {
- self.metrics.export_to_csv(path)
- }
-
- pub fn render(&mut self) -> Result<(), wgpu::SurfaceError> {
- self.metrics.begin_frame();
-
- // End update timing from previous update() call
- let update_ms = self.metrics.end_update();
-
- self.metrics.begin_render();
-
- let output = self.surface.get_current_texture()?;
- let view = output
- .texture
- .create_view(&wgpu::TextureViewDescriptor::default());
-
- let mut encoder = self
- .device
- .create_command_encoder(&wgpu::CommandEncoderDescriptor {
- label: Some("Render Encoder"),
- });
-
- // Collect all vertex data for all graphs
- struct DrawData {
- viewport: SubView,
- border_offset: usize,
- border_count: usize,
- grid_offset: usize,
- grid_count: usize,
- show_grid: bool,
- lines_offset: usize,
- lines_count: usize,
- num_lines: usize,
- }
-
- let mut all_vertices = Vec::new();
- let mut draw_data = Vec::new();
- let mut total_line_count = 0;
-
- for graph in &self.graphs {
- total_line_count += graph.lines.len();
- let border_vertices = graph.generate_border();
- let border_offset = all_vertices.len();
- all_vertices.extend_from_slice(&border_vertices);
- let border_count = border_vertices.len();
-
- let grid_offset = all_vertices.len();
- let grid_vertices = graph.generate_grid_lines();
- all_vertices.extend_from_slice(&grid_vertices);
- let grid_count = grid_vertices.len();
-
- let lines_offset = all_vertices.len();
- let mut line_vertices = Vec::new();
- for line in &graph.lines {
- line_vertices.extend_from_slice(line);
- }
- all_vertices.extend_from_slice(&line_vertices);
- let lines_count = line_vertices.len();
-
- draw_data.push(DrawData {
- viewport: graph.viewport.clone(),
- border_offset,
- border_count,
- grid_offset,
- grid_count,
- show_grid: graph.show_grid,
- lines_offset,
- lines_count,
- num_lines: graph.lines.len(),
- });
- }
-
- // Write all vertices at once
- if !all_vertices.is_empty() {
- self.queue.write_buffer(
- &self.vertex_buffer,
- 0,
- bytemuck::cast_slice(&all_vertices),
- );
- }
-
- {
- let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
- label: Some("Render Pass"),
- color_attachments: &[Some(wgpu::RenderPassColorAttachment {
- view: &view,
- resolve_target: None,
- ops: wgpu::Operations {
- load: wgpu::LoadOp::Clear(wgpu::Color {
- r: 0.1,
- g: 0.1,
- b: 0.15,
- a: 1.0,
- }),
- store: wgpu::StoreOp::Store,
- },
- })],
- depth_stencil_attachment: None,
- occlusion_query_set: None,
- timestamp_writes: None,
- });
-
- // Render each graph view
- for data in &draw_data {
- // Set viewport for this graph
- render_pass.set_viewport(
- data.viewport.x * self.size.width as f32,
- data.viewport.y * self.size.height as f32,
- data.viewport.width * self.size.width as f32,
- data.viewport.height * self.size.height as f32,
- 0.0,
- 1.0,
- );
-
- render_pass.set_vertex_buffer(0, self.vertex_buffer.slice(..));
-
- // Draw border
- render_pass.set_pipeline(&self.line_list_pipeline);
- render_pass.draw(
- data.border_offset as u32..(data.border_offset + data.border_count) as u32,
- 0..1,
- );
-
- // Draw grid if enabled
- if data.show_grid {
- render_pass.set_pipeline(&self.line_list_pipeline);
- render_pass.draw(
- data.grid_offset as u32..(data.grid_offset + data.grid_count) as u32,
- 0..1,
- );
- }
-
- // Draw waterfall lines
- if data.lines_count > 0 {
- render_pass.set_pipeline(&self.line_pipeline);
- let points_per_line = 100;
- for i in 0..data.num_lines {
- let start = (data.lines_offset + i * points_per_line) as u32;
- let end = start + points_per_line as u32;
- render_pass.draw(start..end, 0..1);
- }
- }
- }
- }
-
- // Render text (header and labels)
- self.viewport.update(
- &self.queue,
- Resolution {
- width: self.size.width,
- height: self.size.height,
- },
- );
-
- let mut text_areas = Vec::new();
-
- // Main header
- let mut header_buffer = Buffer::new(&mut self.font_system, Metrics::new(24.0, 32.0));
- header_buffer.set_size(&mut self.font_system, Some(500.0), Some(40.0));
- header_buffer.set_text(
- &mut self.font_system,
- "TimePlot - Waterfall Display",
- Attrs::new().family(Family::SansSerif),
- Shaping::Advanced,
- );
-
- // Performance metrics (if enabled)
- let mut metrics_buffer = Buffer::new(&mut self.font_system, Metrics::new(11.0, 14.0));
- if self.show_metrics {
- let metrics_text = self.metrics.format_summary();
- metrics_buffer.set_size(&mut self.font_system, Some(self.size.width as f32 - 520.0), Some(40.0));
- metrics_buffer.set_text(
- &mut self.font_system,
- &metrics_text,
- Attrs::new().family(Family::Monospace),
- Shaping::Advanced,
- );
- }
-
- // Graph titles and labels - create all buffers first
- let mut graph_buffers = Vec::new();
- let mut x_axis_buffers = Vec::new();
- let mut y_axis_buffers = Vec::new();
- let mut legend_buffers = Vec::new();
-
- for graph in &self.graphs {
- let width = graph.viewport.width * self.size.width as f32;
- let height = graph.viewport.height * self.size.height as f32;
-
- // Title
- let mut title_buffer = Buffer::new(&mut self.font_system, Metrics::new(18.0, 24.0));
- title_buffer.set_size(&mut self.font_system, Some(width), Some(30.0));
- title_buffer.set_text(
- &mut self.font_system,
- &graph.title,
- Attrs::new().family(Family::SansSerif),
- Shaping::Advanced,
- );
- graph_buffers.push(title_buffer);
-
- // X-axis label
- let mut x_buffer = Buffer::new(&mut self.font_system, Metrics::new(14.0, 18.0));
- x_buffer.set_size(&mut self.font_system, Some(width), Some(20.0));
- x_buffer.set_text(
- &mut self.font_system,
- &graph.x_axis_label,
- Attrs::new().family(Family::SansSerif),
- Shaping::Advanced,
- );
- x_axis_buffers.push(x_buffer);
-
- // Y-axis label
- let mut y_buffer = Buffer::new(&mut self.font_system, Metrics::new(14.0, 18.0));
- y_buffer.set_size(&mut self.font_system, Some(height * 0.5), Some(20.0));
- y_buffer.set_text(
- &mut self.font_system,
- &graph.y_axis_label,
- Attrs::new().family(Family::SansSerif),
- Shaping::Advanced,
- );
- y_axis_buffers.push(y_buffer);
-
- // Legend
- let mut legend_text = String::new();
- for (i, item) in graph.legend_items.iter().enumerate() {
- if i > 0 { legend_text.push_str(" "); }
- legend_text.push_str(&format!("● {}", item.label));
- }
- let mut legend_buffer = Buffer::new(&mut self.font_system, Metrics::new(12.0, 16.0));
- legend_buffer.set_size(&mut self.font_system, Some(width * 0.8), Some(20.0));
- legend_buffer.set_text(
- &mut self.font_system,
- &legend_text,
- Attrs::new().family(Family::SansSerif),
- Shaping::Advanced,
- );
- legend_buffers.push(legend_buffer);
- }
-
- // Now create text areas with references to the buffers
- text_areas.push(TextArea {
- buffer: &header_buffer,
- left: 10.0,
- top: 15.0,
- scale: 1.0,
- bounds: TextBounds {
- left: 0,
- top: 0,
- right: 500,
- bottom: 40,
- },
- default_color: TextColor::rgb(255, 255, 255),
- custom_glyphs: &[]
- });
-
- // Metrics display
- if self.show_metrics {
- text_areas.push(TextArea {
- buffer: &metrics_buffer,
- left: 520.0,
- top: 18.0,
- scale: 1.0,
- bounds: TextBounds {
- left: 0,
- top: 0,
- right: (self.size.width as i32 - 520).max(0),
- bottom: 40,
- },
- default_color: TextColor::rgb(100, 255, 100),
- custom_glyphs: &[]
- });
- }
-
- for (i, graph) in self.graphs.iter().enumerate() {
- let x_offset = graph.viewport.x * self.size.width as f32;
- let y_offset = graph.viewport.y * self.size.height as f32;
- let width = graph.viewport.width * self.size.width as f32;
- let height = graph.viewport.height * self.size.height as f32;
-
- // Graph title
- text_areas.push(TextArea {
- buffer: &graph_buffers[i],
- left: x_offset + 10.0,
- top: y_offset + 5.0,
- scale: 1.0,
- bounds: TextBounds {
- left: 0,
- top: 0,
- right: width as i32,
- bottom: 30,
- },
- default_color: TextColor::rgb(230, 230, 230),
- custom_glyphs: &[]
- });
-
- // X-axis label (bottom center)
- text_areas.push(TextArea {
- buffer: &x_axis_buffers[i],
- left: x_offset + width * 0.5 - 50.0,
- top: y_offset + height - 20.0,
- scale: 1.0,
- bounds: TextBounds {
- left: 0,
- top: 0,
- right: 200,
- bottom: 20,
- },
- default_color: TextColor::rgb(200, 200, 200),
- custom_glyphs: &[]
- });
-
- // Y-axis label (left center, rotated appearance via positioning)
- text_areas.push(TextArea {
- buffer: &y_axis_buffers[i],
- left: x_offset + 5.0,
- top: y_offset + height * 0.3,
- scale: 1.0,
- bounds: TextBounds {
- left: 0,
- top: 0,
- right: 150,
- bottom: 20,
- },
- default_color: TextColor::rgb(200, 200, 200),
- custom_glyphs: &[]
- });
-
- // Legend (top right)
- text_areas.push(TextArea {
- buffer: &legend_buffers[i],
- left: x_offset + width * 0.3,
- top: y_offset + 30.0,
- scale: 1.0,
- bounds: TextBounds {
- left: 0,
- top: 0,
- right: (width * 0.7) as i32,
- bottom: 20,
- },
- default_color: TextColor::rgb(220, 220, 220),
- custom_glyphs: &[]
- });
- }
-
- self.text_renderer
- .prepare(
- &self.device,
- &self.queue,
- &mut self.font_system,
- &mut self.text_atlas,
- &self.viewport,
- text_areas,
- &mut self.swash_cache,
- )
- .expect("Failed to prepare text");
-
- {
- let mut text_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
- label: Some("Text Render Pass"),
- color_attachments: &[Some(wgpu::RenderPassColorAttachment {
- view: &view,
- resolve_target: None,
- ops: wgpu::Operations {
- load: wgpu::LoadOp::Load,
- store: wgpu::StoreOp::Store,
- },
- })],
- depth_stencil_attachment: None,
- occlusion_query_set: None,
- timestamp_writes: None,
- });
-
- self.text_renderer
- .render(&self.text_atlas, &self.viewport, &mut text_pass)
- .expect("Failed to render text");
- }
-
- self.queue.submit(std::iter::once(encoder.finish()));
- output.present();
-
- // Finalize metrics
- let render_ms = self.metrics.end_render();
- let vertex_count = all_vertices.len();
- self.metrics.end_frame(update_ms, render_ms, vertex_count, total_line_count);
-
- Ok(())
- }
-}
diff --git a/rs/src/shader.wgsl b/rs/src/shader.wgsl
deleted file mode 100644
index 6655301..0000000
--- a/rs/src/shader.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-struct VertexInput {
- @location(0) position: vec2<f32>,
- @location(1) color: vec3<f32>,
-}
-
-struct VertexOutput {
- @builtin(position) clip_position: vec4<f32>,
- @location(0) color: vec3<f32>,
-}
-
-@vertex
-fn vs_main(in: VertexInput) -> VertexOutput {
- var out: VertexOutput;
- out.clip_position = vec4<f32>(in.position, 0.0, 1.0);
- out.color = in.color;
- return out;
-}
-
-@fragment
-fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
- return vec4<f32>(in.color, 1.0);
-}
diff --git a/rs/src/vertex.rs b/rs/src/vertex.rs
deleted file mode 100644
index 8a25c30..0000000
--- a/rs/src/vertex.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-#[repr(C)]
-#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
-pub struct Vertex {
- pub position: [f32; 2],
- pub color: [f32; 3],
-}
-
-impl Vertex {
- pub fn desc() -> wgpu::VertexBufferLayout<'static> {
- wgpu::VertexBufferLayout {
- array_stride: std::mem::size_of::<Vertex>() as wgpu::BufferAddress,
- step_mode: wgpu::VertexStepMode::Vertex,
- attributes: &[
- wgpu::VertexAttribute {
- offset: 0,
- shader_location: 0,
- format: wgpu::VertexFormat::Float32x2,
- },
- wgpu::VertexAttribute {
- offset: std::mem::size_of::<[f32; 2]>() as wgpu::BufferAddress,
- shader_location: 1,
- format: wgpu::VertexFormat::Float32x3,
- },
- ],
- }
- }
-}
diff --git a/web-timeplot/.gitignore b/web-timeplot/.gitignore
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/web-timeplot/.gitignore
@@ -0,0 +1 @@
+
diff --git a/web-timeplot/ARCHITECTURE.md b/web-timeplot/ARCHITECTURE.md
index 1cfc3f1..73c4cb6 100644
--- a/web-timeplot/ARCHITECTURE.md
+++ b/web-timeplot/ARCHITECTURE.md
@@ -12,6 +12,8 @@ The restarted TimePlot app is built around five small systems:
The current implementation is intentionally compact, but each system is already separated enough to grow without turning the app into a monolith again.
+Core workspace configuration is also persisted in `localStorage`, so plot settings, routing, and source setup survive reloads without persisting transient runtime state.
+
## Runtime flow
```text
@@ -21,7 +23,7 @@ Store.time updated
SourceRegistry.update(plotTime)
-SyntheticWaveSource emits samples
+Synthetic / CSV replay / WebSocket sources emit samples
PlotBuffer stores bounded history
@@ -80,12 +82,24 @@ The plot is GPU-rendered with PixiJS. Controls, labels, and config panels stay i
hoveredPoint,
tooltip,
},
- source: {
- activeId,
- preset,
- sampleRateHz,
- amplitude,
- noise,
+ sources: {
+ signalA: {
+ type,
+ preset,
+ sampleRateHz,
+ amplitude,
+ noise,
+ replayRate,
+ wsUrl,
+ wsReconnectMs,
+ },
+ signalB: {
+ ...
+ },
+ },
+ graphs: {
+ primary: { sourceKey, transform, title },
+ secondary: { sourceKey, transform, title },
},
panels: {
status,
@@ -119,6 +133,14 @@ Generates sample streams from a preset waveform. Right now it supports:
- `chirp`
- `burst`
+### `src/data/csv-replay-source.js`
+
+Replays uploaded CSV datasets on the shared plot timebase.
+
+### `src/data/websocket-source.js`
+
+Streams live samples from a WebSocket server and reconnects automatically.
+
### `src/plot/plot-buffer.js`
Maintains bounded history so rendering and hover picking only operate on a manageable number of samples.
@@ -147,6 +169,7 @@ The old project had useful ideas but too many concerns were mixed together. The
- data generation is separate from app wiring
- UI is separate from GPU drawing
- state is centralized and observable
+- persisted configuration is separated from transient runtime state
- adding a new source or panel no longer requires rewriting the whole app
## Recommended next steps
diff --git a/web-timeplot/README.md b/web-timeplot/README.md
index 491753a..25dfb80 100644
--- a/web-timeplot/README.md
+++ b/web-timeplot/README.md
@@ -10,20 +10,29 @@ TimePlot is now a clean restart: a small PixiJS time-series sandbox built around
- Current real-time and plot-time labels
- Hover tooltip for data points
- Modular synthetic data input system
+- CSV replay sources
+- WebSocket live sources
+- Persisted workspace settings
- Toggleable side panels for status, source config, app config, and help
## Getting started
```bash
-npm install
-npm run dev
+bun install
+bun run dev
```
Production build:
```bash
-npm run build
-npm run preview
+bun run build
+bun run preview
+```
+
+Demo WebSocket source:
+
+```bash
+bun run ws:demo
```
## Controls
@@ -34,6 +43,55 @@ npm run preview
- `G` — toggle grid
- Hover plot — inspect nearest sample
+## Demo data
+
+Sample CSV replay files are included in [public/demo-data](public/demo-data):
+
+- [public/demo-data/telemetry-sweep.csv](public/demo-data/telemetry-sweep.csv)
+- [public/demo-data/chirp-ramp.csv](public/demo-data/chirp-ramp.csv)
+- [public/demo-data/step-bursts.csv](public/demo-data/step-bursts.csv)
+
+Use the `CSV replay` source type in the sidebar and upload one of those files.
+
+## WebSocket source
+
+TimePlot includes a local demo WebSocket server in [scripts/demo-websocket-server.mjs](scripts/demo-websocket-server.mjs).
+
+Start it with:
+
+```bash
+bun run ws:demo
+```
+
+Then set a signal source to `WebSocket` and use `ws://localhost:8080`.
+
+Optional environment variables:
+
+```bash
+PORT=8090 TIMEPLOT_PROFILE=chirp TIMEPLOT_INTERVAL_MS=50 bun run ws:demo
+```
+
+Supported demo profiles:
+
+- `telemetry`
+- `chirp`
+- `steps`
+- `burst`
+
+Protocol details and accepted message formats are documented in [WEBSOCKET_FORMAT.md](WEBSOCKET_FORMAT.md).
+
+## Persistence
+
+TimePlot persists core workspace settings in `localStorage`, including:
+
+- plot display settings
+- playback speed
+- panel visibility
+- graph routing and transforms
+- source configuration such as presets and WebSocket URLs
+
+CSV replay files themselves are not persisted in storage. After a reload, TimePlot remembers which CSV file was selected but asks you to reload the file data.
+
## Project structure
```text
@@ -46,8 +104,11 @@ src/
│ └── time-controller.js # real time + plot time transport
├── data/
│ ├── base-source.js # source interface
+│ ├── csv-replay-source.js
+│ ├── parse-replay-csv.js
│ ├── source-registry.js # source lifecycle + routing
-│ └── synthetic-wave-source.js
+│ ├── synthetic-wave-source.js
+│ └── websocket-source.js
├── plot/
│ ├── plot-buffer.js # bounded in-memory sample history
│ └── timeplot-view.js # Pixi rendering + hover picking
@@ -57,6 +118,12 @@ src/
├── main.js # compatibility shim to bootstrap
├── styles.css # global UI styling
└── utils-format.js # display formatting helpers
+
+public/
+└── demo-data/ # sample CSV replay fixtures
+
+scripts/
+└── demo-websocket-server.mjs
```
## Design direction
@@ -68,10 +135,12 @@ This restart intentionally optimizes for a strong foundation instead of feature
- the plot owns visualization only
- DOM panels handle controls and diagnostics
- app composition happens in one predictable bootstrap path
+- synthetic, file replay, and WebSocket sources share one source abstraction
+- core workspace configuration survives reloads
## Next good additions
-- real external data sources (WebSocket, REST replay, files)
+- richer external data sources (REST replay, binary streams, custom adapters)
- richer panel layout system with docking/persistence
- plot annotations and multiple stacked plots
- configurable schemas for incoming data types
diff --git a/web-timeplot/WEBSOCKET_FORMAT.md b/web-timeplot/WEBSOCKET_FORMAT.md
new file mode 100644
index 0000000..93eead2
--- /dev/null
+++ b/web-timeplot/WEBSOCKET_FORMAT.md
@@ -0,0 +1,117 @@
+# WebSocket Data Format
+
+TimePlot's WebSocket source accepts UTF-8 text frames whose contents can be parsed into one of the supported payload shapes below.
+
+## Recommended payload
+
+Send one JSON object per message:
+
+```json
+{
+ "timestampMs": 1250,
+ "value": 0.482
+}
+```
+
+Fields:
+
+- `value` — required numeric sample value
+- `timestampMs` — optional numeric source timestamp in milliseconds
+
+If `timestampMs` is present, TimePlot uses it to preserve the source timing relationship and aligns it onto the app's plot timebase.
+If `timestampMs` is omitted, TimePlot stamps the sample at the current plot time when the message arrives.
+
+## Other accepted object keys
+
+TimePlot also accepts these alternate numeric field names:
+
+- value fields: `value`, `y`, `signal`, `data`
+- time fields: `timeMs`, `timestampMs`, `timestamp`, `t`
+
+Examples:
+
+```json
+{"y": 0.91, "t": 2040}
+```
+
+```json
+{"signal": -0.13, "timestamp": 9810}
+```
+
+## Arrays
+
+A single message may contain an array of supported payloads:
+
+```json
+[
+ {"timestampMs": 1000, "value": 0.2},
+ {"timestampMs": 1100, "value": 0.3},
+ {"timestampMs": 1200, "value": 0.5}
+]
+```
+
+This is useful for batching.
+
+## Bare numeric messages
+
+These also work, though JSON objects are preferred:
+
+```text
+0.418
+```
+
+or:
+
+```json
+42.5
+```
+
+These are treated as samples without an explicit timestamp.
+
+## Unsupported / ignored messages
+
+Messages are ignored if TimePlot cannot find a numeric sample value.
+Examples of ignored payloads:
+
+- empty strings
+- non-numeric strings
+- JSON objects without a numeric `value`-like field
+
+## Demo server compatibility
+
+The included demo server sends messages like:
+
+```json
+{
+ "timestampMs": 1870,
+ "value": 0.735812,
+ "sequence": 19,
+ "profile": "telemetry"
+}
+```
+
+Extra fields are safe. TimePlot ignores anything it does not need.
+
+## Running the demo server
+
+```bash
+bun run ws:demo
+```
+
+Environment options:
+
+- `PORT` — default `8080`
+- `TIMEPLOT_PROFILE` — `telemetry`, `chirp`, `steps`, or `burst`
+- `TIMEPLOT_INTERVAL_MS` — message interval in milliseconds
+
+Example:
+
+```bash
+PORT=8090 TIMEPLOT_PROFILE=chirp TIMEPLOT_INTERVAL_MS=50 bun run ws:demo
+```
+
+Then set a signal source type to `WebSocket` and point it at:
+
+```text
+ws://localhost:8090
+```
diff --git a/web-timeplot/package-lock.json b/web-timeplot/package-lock.json
index b0733b1..7ce7bea 100644
--- a/web-timeplot/package-lock.json
+++ b/web-timeplot/package-lock.json
@@ -8,7 +8,8 @@
"name": "web-timeplot",
"version": "0.1.0",
"dependencies": {
- "pixi.js": "^8.0.0"
+ "pixi.js": "^8.0.0",
+ "ws": "^8.20.0"
},
"devDependencies": {
"vite": "^5.0.0"
@@ -1044,6 +1045,27 @@
"optional": true
}
}
+ },
+ "node_modules/ws": {
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz",
+ "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
}
}
}
diff --git a/web-timeplot/package.json b/web-timeplot/package.json
index 65694ba..9f4220f 100644
--- a/web-timeplot/package.json
+++ b/web-timeplot/package.json
@@ -6,12 +6,14 @@
"scripts": {
"dev": "vite --host",
"build": "vite build",
- "preview": "vite preview"
+ "preview": "vite preview",
+ "ws:demo": "node ./scripts/demo-websocket-server.mjs"
},
"devDependencies": {
"vite": "^5.0.0"
},
"dependencies": {
- "pixi.js": "^8.0.0"
+ "pixi.js": "^8.0.0",
+ "ws": "^8.20.0"
}
}
diff --git a/web-timeplot/public/demo-data/chirp-ramp.csv b/web-timeplot/public/demo-data/chirp-ramp.csv
new file mode 100644
index 0000000..5e81c10
--- /dev/null
+++ b/web-timeplot/public/demo-data/chirp-ramp.csv
@@ -0,0 +1,47 @@
+time_ms,value
+0,-0.04
+120,0.05
+240,0.11
+360,0.07
+480,-0.03
+600,-0.17
+720,-0.26
+840,-0.22
+960,-0.04
+1080,0.23
+1200,0.48
+1320,0.57
+1440,0.38
+1560,-0.01
+1680,-0.43
+1800,-0.67
+1920,-0.55
+2040,-0.07
+2160,0.53
+2280,0.89
+2400,0.76
+2520,0.16
+2640,-0.61
+2760,-1.01
+2880,-0.78
+3000,0.02
+3120,0.87
+3240,1.18
+3360,0.75
+3480,-0.21
+3600,-1.04
+3720,-1.21
+3840,-0.44
+3960,0.63
+4080,1.28
+4200,1.05
+4320,0.01
+4440,-1.01
+4560,-1.34
+4680,-0.69
+4800,0.47
+4920,1.31
+5040,1.26
+5160,0.31
+5280,-0.92
+5400,-1.43
diff --git a/web-timeplot/public/demo-data/step-bursts.csv b/web-timeplot/public/demo-data/step-bursts.csv
new file mode 100644
index 0000000..e9dbc3e
--- /dev/null
+++ b/web-timeplot/public/demo-data/step-bursts.csv
@@ -0,0 +1,42 @@
+time_ms,value
+0,0.0
+200,0.0
+400,0.0
+600,0.4
+800,0.8
+1000,1.2
+1200,1.2
+1400,1.2
+1600,0.3
+1800,-0.2
+2000,-0.7
+2200,-1.1
+2400,-1.1
+2600,-0.5
+2800,0.1
+3000,0.6
+3200,1.0
+3400,0.5
+3600,-0.4
+3800,-1.0
+4000,-0.6
+4200,0.2
+4400,0.7
+4600,1.1
+4800,0.9
+5000,0.1
+5200,-0.8
+5400,-1.3
+5600,-0.9
+5800,-0.1
+6000,0.8
+6200,1.4
+6400,1.1
+6600,0.0
+6800,-0.9
+7000,-1.4
+7200,-1.0
+7400,-0.2
+7600,0.5
+7800,0.9
+8000,0.0
diff --git a/web-timeplot/public/demo-data/telemetry-sweep.csv b/web-timeplot/public/demo-data/telemetry-sweep.csv
new file mode 100644
index 0000000..8c7d6e3
--- /dev/null
+++ b/web-timeplot/public/demo-data/telemetry-sweep.csv
@@ -0,0 +1,42 @@
+time_ms,value
+0,0.12
+150,0.18
+300,0.31
+450,0.44
+600,0.52
+750,0.68
+900,0.83
+1050,0.96
+1200,1.04
+1350,1.08
+1500,1.01
+1650,0.92
+1800,0.77
+1950,0.58
+2100,0.34
+2250,0.12
+2400,-0.08
+2550,-0.22
+2700,-0.35
+2850,-0.48
+3000,-0.59
+3150,-0.66
+3300,-0.72
+3450,-0.64
+3600,-0.49
+3750,-0.27
+3900,-0.02
+4050,0.24
+4200,0.46
+4350,0.67
+4500,0.81
+4650,0.9
+4800,0.95
+4950,0.88
+5100,0.75
+5250,0.54
+5400,0.29
+5550,0.03
+5700,-0.2
+5850,-0.37
+6000,-0.48
diff --git a/web-timeplot/scripts/demo-websocket-server.mjs b/web-timeplot/scripts/demo-websocket-server.mjs
new file mode 100644
index 0000000..1bee865
--- /dev/null
+++ b/web-timeplot/scripts/demo-websocket-server.mjs
@@ -0,0 +1,131 @@
+import { WebSocketServer } from 'ws';
+
+const port = Number(process.env.PORT || 8080);
+const profile = process.env.TIMEPLOT_PROFILE || 'telemetry';
+const sendIntervalMs = Number(process.env.TIMEPLOT_INTERVAL_MS || 100);
+const logEvery = Number(process.env.TIMEPLOT_LOG_EVERY || 10);
+
+const wss = new WebSocketServer({ port });
+const startedAt = Date.now();
+let sampleIndex = 0;
+let activeClientCount = 0;
+
+function log(message, details = '') {
+ const timestamp = new Date().toISOString();
+ if (details) {
+ console.log(`[timeplot-ws ${timestamp}] ${message} ${details}`);
+ return;
+ }
+
+ console.log(`[timeplot-ws ${timestamp}] ${message}`);
+}
+
+function sampleTelemetry(seconds) {
+ return Math.sin(seconds * 2.2) + 0.35 * Math.cos(seconds * 6.4 + Math.sin(seconds * 0.8)) + 0.15 * Math.sin(seconds * 0.33);
+}
+
+function sampleChirp(seconds) {
+ return 0.7 * Math.sin(seconds * seconds * 1.4) + 0.3 * Math.sin(seconds * 7.5);
+}
+
+function sampleSteps(seconds) {
+ const phase = Math.floor((seconds % 8) / 1.0);
+ return [0, 0.4, 0.9, 1.2, 0.2, -0.6, -1.0, 0.3][phase] ?? 0;
+}
+
+function sampleBurst(seconds) {
+ const burstPhase = (seconds % 6) - 1.5;
+ const burst = Math.sin(seconds * 9.5) * Math.exp(-(burstPhase ** 2) * 0.8);
+ return 0.45 * Math.sin(seconds * 2.1) + burst;
+}
+
+function sampleValue(seconds) {
+ switch (profile) {
+ case 'chirp':
+ return sampleChirp(seconds);
+ case 'steps':
+ return sampleSteps(seconds);
+ case 'burst':
+ return sampleBurst(seconds);
+ case 'telemetry':
+ default:
+ return sampleTelemetry(seconds);
+ }
+}
+
+function buildMessage() {
+ const timestampMs = Date.now() - startedAt;
+ const seconds = timestampMs / 1000;
+ sampleIndex += 1;
+
+ return {
+ timestampMs,
+ value: Number(sampleValue(seconds).toFixed(6)),
+ sequence: sampleIndex,
+ profile,
+ };
+}
+
+const interval = setInterval(() => {
+ const message = buildMessage();
+ const payload = JSON.stringify(message);
+ let sentCount = 0;
+
+ for (const client of wss.clients) {
+ if (client.readyState === client.OPEN) {
+ client.send(payload);
+ sentCount += 1;
+ }
+ }
+
+ if (message.sequence === 1 || (logEvery > 0 && message.sequence % logEvery === 0)) {
+ log(
+ 'broadcast',
+ `seq=${message.sequence} clients=${sentCount} timestampMs=${message.timestampMs} value=${message.value}`,
+ );
+ }
+}, sendIntervalMs);
+
+wss.on('connection', (socket, request) => {
+ const clientAddress = request.socket.remoteAddress || 'unknown';
+ activeClientCount += 1;
+ log('client connected', `from=${clientAddress} activeClients=${activeClientCount}`);
+
+ socket.send(JSON.stringify({
+ timestampMs: 0,
+ value: 0,
+ sequence: 0,
+ profile,
+ message: 'connected',
+ }));
+
+ socket.on('error', (error) => {
+ log('client error', `from=${clientAddress} error=${error.message}`);
+ });
+
+ socket.on('close', () => {
+ activeClientCount = Math.max(0, activeClientCount - 1);
+ log('client disconnected', `from=${clientAddress} activeClients=${activeClientCount}`);
+ });
+});
+
+wss.on('error', (error) => {
+ log('server error', error.message);
+});
+
+wss.on('listening', () => {
+ log('listening', `url=ws://localhost:${port}`);
+ log('config', `profile=${profile} intervalMs=${sendIntervalMs} logEvery=${logEvery}`);
+});
+
+function shutdown() {
+ log('shutdown requested', `activeClients=${activeClientCount}`);
+ clearInterval(interval);
+ wss.close(() => {
+ log('server stopped');
+ process.exit(0);
+ });
+}
+
+process.on('SIGINT', shutdown);
+process.on('SIGTERM', shutdown);
diff --git a/web-timeplot/src/app/create-app.js b/web-timeplot/src/app/create-app.js
index daf3559..4f4f0fc 100644
--- a/web-timeplot/src/app/create-app.js
+++ b/web-timeplot/src/app/create-app.js
@@ -4,25 +4,161 @@ import { TimeController } from '../core/time-controller.js';
import { PlotBuffer } from '../plot/plot-buffer.js';
import { TimeplotView } from '../plot/timeplot-view.js';
import { SourceRegistry } from '../data/source-registry.js';
+import { parseReplayCsv } from '../data/parse-replay-csv.js';
import { PanelManager } from '../ui/panel-manager.js';
function clamp(value, min, max) {
return Math.min(max, Math.max(min, value));
}
+function buildDeltaPoints(points) {
+ if (points.length < 2) {
+ return [];
+ }
+
+ const derived = [];
+ for (let index = 1; index < points.length; index += 1) {
+ const previous = points[index - 1];
+ const current = points[index];
+ const deltaTime = Math.max(1, current.timeMs - previous.timeMs);
+ derived.push({
+ ...current,
+ value: (current.value - previous.value) / deltaTime * 1000,
+ sourceId: `${current.sourceId}:delta`,
+ });
+ }
+
+ return derived;
+}
+
+function buildSmoothedPoints(points, windowSize = 5) {
+ if (points.length === 0) {
+ return [];
+ }
+
+ const smoothed = [];
+ for (let index = 0; index < points.length; index += 1) {
+ const start = Math.max(0, index - windowSize + 1);
+ const windowPoints = points.slice(start, index + 1);
+ const average = windowPoints.reduce((sum, point) => sum + point.value, 0) / windowPoints.length;
+ smoothed.push({
+ ...points[index],
+ value: average,
+ sourceId: `${points[index].sourceId}:smooth`,
+ });
+ }
+
+ return smoothed;
+}
+
+function transformPoints(points, transform) {
+ switch (transform) {
+ case 'delta':
+ return buildDeltaPoints(points);
+ case 'smooth':
+ return buildSmoothedPoints(points);
+ case 'raw':
+ default:
+ return points;
+ }
+}
+
+function describeTransform(transform) {
+ switch (transform) {
+ case 'delta':
+ return 'Δvalue / second';
+ case 'smooth':
+ return 'moving average';
+ case 'raw':
+ default:
+ return 'raw signal';
+ }
+}
+
+function deriveValueRange(points, fallbackRange) {
+ if (points.length === 0) {
+ return fallbackRange;
+ }
+
+ let min = Infinity;
+ let max = -Infinity;
+ for (const point of points) {
+ min = Math.min(min, point.value);
+ max = Math.max(max, point.value);
+ }
+
+ const maxAbs = Math.max(Math.abs(min), Math.abs(max), 0.1);
+ return {
+ min: -maxAbs,
+ max: maxAbs,
+ };
+}
+
+function pickActiveHover(primaryCandidate, secondaryCandidate) {
+ if (!primaryCandidate && !secondaryCandidate) {
+ return null;
+ }
+
+ if (primaryCandidate && !secondaryCandidate) {
+ return primaryCandidate;
+ }
+
+ if (!primaryCandidate && secondaryCandidate) {
+ return secondaryCandidate;
+ }
+
+ return primaryCandidate.lastPointerEventAt >= secondaryCandidate.lastPointerEventAt
+ ? primaryCandidate
+ : secondaryCandidate;
+}
+
export async function createApp(root) {
const bus = new EventBus();
const store = new Store(createInitialState());
const timeController = new TimeController(store);
- const buffer = new PlotBuffer(store.getState().plot.maxPoints);
+ const sourceBuffers = new Map(Object.keys(store.getState().sources).map((sourceKey) => [sourceKey, new PlotBuffer(store.getState().plot.maxPoints)]));
let sourceRegistry;
+ const syncBuffersFromState = () => {
+ const state = store.getState();
+ for (const sourceKey of Object.keys(state.sources)) {
+ if (!sourceBuffers.has(sourceKey)) {
+ sourceBuffers.set(sourceKey, new PlotBuffer(state.plot.maxPoints));
+ }
+ sourceBuffers.get(sourceKey).maxPoints = state.plot.maxPoints;
+ }
+
+ for (const sourceKey of Array.from(sourceBuffers.keys())) {
+ if (!state.sources[sourceKey]) {
+ sourceBuffers.delete(sourceKey);
+ }
+ }
+ };
+
+ const clearSourceBuffer = (sourceKey) => {
+ sourceBuffers.get(sourceKey)?.clear();
+ };
+
+ const getGraphPoints = (state, graphId) => {
+ const graphConfig = state.graphs[graphId];
+ const sourceBuffer = sourceBuffers.get(graphConfig.sourceKey);
+ const basePoints = sourceBuffer
+ ? sourceBuffer.getVisiblePoints(state.time.plotTimeMs, state.plot.windowDurationMs)
+ : [];
+ const transformedPoints = transformPoints(basePoints, graphConfig.transform);
+ return {
+ graphConfig,
+ points: transformedPoints,
+ range: deriveValueRange(transformedPoints, state.plot.valueRange),
+ };
+ };
+
const actions = {
togglePause: () => timeController.togglePause(),
setSpeed: (speed) => timeController.setSpeed(speed),
resetScene: () => {
timeController.reset();
- buffer.clear();
+ sourceBuffers.forEach((plotBuffer) => plotBuffer.clear());
sourceRegistry.reset();
},
togglePanel: (panelId) => {
@@ -37,15 +173,75 @@ export async function createApp(root) {
},
}));
},
- updateSource: (field, value) => {
+ updateSource: (sourceKey, field, value) => {
store.setState((state) => ({
...state,
- source: {
- ...state.source,
- [field]: value,
+ sources: {
+ ...state.sources,
+ [sourceKey]: {
+ ...state.sources[sourceKey],
+ [field]: value,
+ ...(field === 'type'
+ ? {
+ loadError: value === 'csv-replay' && state.sources[sourceKey].dataset.length === 0
+ ? (state.sources[sourceKey].dataFileName
+ ? `Reload ${state.sources[sourceKey].dataFileName} to restore replay data`
+ : 'Load a CSV file to begin replay')
+ : '',
+ wsStatus: value === 'websocket' ? state.sources[sourceKey].wsStatus : 'idle',
+ wsStatusDetail: value === 'websocket' ? state.sources[sourceKey].wsStatusDetail : '',
+ }
+ : {}),
+ },
},
}));
sourceRegistry.syncFromState();
+ syncBuffersFromState();
+
+ if (field === 'type' || field === 'wsUrl' || field === 'wsReconnectMs') {
+ clearSourceBuffer(sourceKey);
+ sourceRegistry.reset();
+ }
+ },
+ loadSourceFile: async (sourceKey, file) => {
+ try {
+ const state = store.getState();
+ const sampleRateHz = state.sources[sourceKey]?.sampleRateHz ?? 60;
+ const text = await file.text();
+ const { points, metadata } = parseReplayCsv(text, { sampleRateHz });
+
+ clearSourceBuffer(sourceKey);
+ store.setState((currentState) => ({
+ ...currentState,
+ sources: {
+ ...currentState.sources,
+ [sourceKey]: {
+ ...currentState.sources[sourceKey],
+ type: 'csv-replay',
+ dataset: points,
+ dataFileName: file.name,
+ datasetPointCount: metadata.pointCount,
+ datasetDurationMs: metadata.durationMs,
+ loadError: '',
+ wsStatus: 'idle',
+ wsStatusDetail: '',
+ },
+ },
+ }));
+ sourceRegistry.syncFromState();
+ sourceRegistry.reset();
+ } catch (error) {
+ store.setState((currentState) => ({
+ ...currentState,
+ sources: {
+ ...currentState.sources,
+ [sourceKey]: {
+ ...currentState.sources[sourceKey],
+ loadError: error instanceof Error ? error.message : String(error),
+ },
+ },
+ }));
+ }
},
updatePlot: (field, value) => {
store.setState((state) => ({
@@ -58,39 +254,50 @@ export async function createApp(root) {
if (field === 'maxPoints') {
buffer.maxPoints = clamp(value, 200, 4000);
+ sourceBuffers.forEach((plotBuffer) => {
+ plotBuffer.maxPoints = clamp(value, 200, 4000);
+ });
}
},
+ updateGraph: (graphId, field, value) => {
+ store.setState((state) => ({
+ ...state,
+ graphs: {
+ ...state.graphs,
+ [graphId]: {
+ ...state.graphs[graphId],
+ [field]: value,
+ },
+ },
+ }));
+ },
};
const panelManager = new PanelManager({ root, store, actions });
const elements = panelManager.mount();
const plotView = new TimeplotView({
- host: elements.canvasHost,
- onHover: (hoverState) => {
- store.setState((state) => ({
- ...state,
- plot: {
- ...state.plot,
- hoveredPoint: hoverState?.point ?? null,
- tooltip: hoverState
- ? {
- visible: true,
- x: hoverState.x,
- y: hoverState.y,
- point: hoverState.point,
- }
- : {
- ...state.plot.tooltip,
- visible: false,
- point: null,
- },
- },
- }));
- },
+ host: elements.primaryCanvasHost,
+ panelId: 'primary',
+ title: 'Primary signal',
+ subtitle: null,
+ showReadouts: true,
+ lineColor: 0x9fd1ff,
+ pointColor: 0xe7f2ff,
+ });
+
+ const secondaryPlotView = new TimeplotView({
+ host: elements.secondaryCanvasHost,
+ panelId: 'secondary',
+ title: 'Secondary signal',
+ subtitle: null,
+ showReadouts: false,
+ lineColor: 0xffc46b,
+ pointColor: 0xffe1b0,
});
const renderer = await plotView.init();
+ await secondaryPlotView.init();
store.patch({
app: {
...store.getState().app,
@@ -101,7 +308,7 @@ export async function createApp(root) {
sourceRegistry = new SourceRegistry(store, bus);
bus.on('data:point', (point) => {
- buffer.addPoint(point);
+ sourceBuffers.get(point.sourceId)?.addPoint(point);
});
const keyHandler = (event) => {
@@ -135,18 +342,108 @@ export async function createApp(root) {
plotView.app.ticker.add(() => {
timeController.tick();
sourceRegistry.syncFromState();
+ syncBuffersFromState();
sourceRegistry.update(store.getState().time.plotTimeMs);
const state = store.getState();
- const visiblePoints = buffer.getVisiblePoints(state.time.plotTimeMs, state.plot.windowDurationMs);
- plotView.render(state, visiblePoints);
- panelManager.sync(state, visiblePoints.length);
+ const primaryGraph = getGraphPoints(state, 'primary');
+ const secondaryGraph = getGraphPoints(state, 'secondary');
+
+ plotView.panelTitle = state.graphs.primary.title;
+ plotView.panelSubtitle = `${state.sources[state.graphs.primary.sourceKey].label} · ${describeTransform(state.graphs.primary.transform)} · time ↓`;
+ secondaryPlotView.panelTitle = state.graphs.secondary.title;
+ secondaryPlotView.panelSubtitle = `${state.sources[state.graphs.secondary.sourceKey].label} · ${describeTransform(state.graphs.secondary.transform)} · time ↓`;
+
+ const primaryState = {
+ ...state,
+ plot: {
+ ...state.plot,
+ valueRange: primaryGraph.range,
+ },
+ };
+
+ const secondaryState = {
+ ...state,
+ plot: {
+ ...state.plot,
+ valueRange: secondaryGraph.range,
+ },
+ };
+
+ plotView.render(primaryState, primaryGraph.points);
+ secondaryPlotView.render(secondaryState, secondaryGraph.points);
+
+ const primaryHover = plotView.getHoverCandidate();
+ const secondaryHover = secondaryPlotView.getHoverCandidate();
+ const activeHover = pickActiveHover(primaryHover, secondaryHover);
+
+ if (!activeHover) {
+ plotView.clearHover();
+ secondaryPlotView.clearHover();
+ store.setState((currentState) => ({
+ ...currentState,
+ plot: {
+ ...currentState.plot,
+ hoveredPoint: null,
+ tooltip: {
+ ...currentState.plot.tooltip,
+ visible: false,
+ point: null,
+ linkedPoint: null,
+ },
+ },
+ }));
+ panelManager.sync(store.getState(), {
+ primary: primaryGraph.points.length,
+ secondary: secondaryGraph.points.length,
+ });
+ return;
+ }
+
+ const primaryLinkedPoint = plotView.findNearestScreenPointByTime(activeHover.point.timeMs);
+ const secondaryLinkedPoint = secondaryPlotView.findNearestScreenPointByTime(activeHover.point.timeMs);
+
+ plotView.renderLinkedHover(primaryLinkedPoint);
+ secondaryPlotView.renderLinkedHover(secondaryLinkedPoint);
+
+ const activePanelLabel = activeHover.panelId === 'secondary'
+ ? state.graphs.secondary.title
+ : state.graphs.primary.title;
+ const linkedPoint = activeHover.panelId === 'secondary' ? primaryLinkedPoint : secondaryLinkedPoint;
+ const linkedPanelLabel = activeHover.panelId === 'secondary'
+ ? state.graphs.primary.title
+ : state.graphs.secondary.title;
+
+ store.setState((currentState) => ({
+ ...currentState,
+ plot: {
+ ...currentState.plot,
+ hoveredPoint: activeHover.point,
+ tooltip: {
+ ...currentState.plot.tooltip,
+ visible: true,
+ panelId: activeHover.panelId,
+ panelLabel: activePanelLabel,
+ x: activeHover.x,
+ y: activeHover.y,
+ point: activeHover.point,
+ linkedPoint,
+ linkedPanelLabel,
+ },
+ },
+ }));
+
+ panelManager.sync(store.getState(), {
+ primary: primaryGraph.points.length,
+ secondary: secondaryGraph.points.length,
+ });
});
return {
destroy() {
window.removeEventListener('keydown', keyHandler);
plotView.destroy();
+ secondaryPlotView.destroy();
},
};
}
diff --git a/web-timeplot/src/core/store.js b/web-timeplot/src/core/store.js
index 9989e5f..38052eb 100644
--- a/web-timeplot/src/core/store.js
+++ b/web-timeplot/src/core/store.js
@@ -1,7 +1,146 @@
+const STORAGE_KEY = 'timeplot.app-state.v1';
+
function clonePanelState(panels) {
return Object.fromEntries(Object.entries(panels).map(([key, value]) => [key, { ...value }]));
}
+function cloneNamedState(items) {
+ return Object.fromEntries(Object.entries(items).map(([key, value]) => [key, { ...value }]));
+}
+
+function sanitizePersistedSource(source) {
+ return {
+ type: source.type,
+ preset: source.preset,
+ sampleRateHz: source.sampleRateHz,
+ amplitude: source.amplitude,
+ noise: source.noise,
+ replayRate: source.replayRate,
+ dataFileName: source.dataFileName,
+ wsUrl: source.wsUrl,
+ wsReconnectMs: source.wsReconnectMs,
+ };
+}
+
+function createPersistableState(state) {
+ return {
+ plot: {
+ showGrid: state.plot.showGrid,
+ showPoints: state.plot.showPoints,
+ windowDurationMs: state.plot.windowDurationMs,
+ maxPoints: state.plot.maxPoints,
+ },
+ time: {
+ speed: state.time.speed,
+ },
+ panels: clonePanelState(state.panels),
+ graphs: cloneNamedState(state.graphs),
+ sources: Object.fromEntries(Object.entries(state.sources).map(([key, value]) => [
+ key,
+ sanitizePersistedSource(value),
+ ])),
+ };
+}
+
+function mergePersistedState(baseState, persistedState) {
+ if (!persistedState || typeof persistedState !== 'object') {
+ return baseState;
+ }
+
+ const mergedState = {
+ ...baseState,
+ time: persistedState.time
+ ? {
+ ...baseState.time,
+ speed: persistedState.time.speed ?? baseState.time.speed,
+ paused: false,
+ }
+ : baseState.time,
+ plot: persistedState.plot
+ ? {
+ ...baseState.plot,
+ ...persistedState.plot,
+ valueRange: baseState.plot.valueRange,
+ hoveredPoint: null,
+ tooltip: { ...baseState.plot.tooltip },
+ }
+ : baseState.plot,
+ panels: persistedState.panels
+ ? clonePanelState(Object.fromEntries(Object.entries(baseState.panels).map(([key, value]) => [
+ key,
+ {
+ ...value,
+ ...(persistedState.panels[key] ?? {}),
+ },
+ ])))
+ : baseState.panels,
+ graphs: persistedState.graphs
+ ? cloneNamedState(Object.fromEntries(Object.entries(baseState.graphs).map(([key, value]) => [
+ key,
+ {
+ ...value,
+ ...(persistedState.graphs[key] ?? {}),
+ },
+ ])))
+ : baseState.graphs,
+ sources: persistedState.sources
+ ? Object.fromEntries(Object.entries(baseState.sources).map(([key, value]) => {
+ const persistedSource = persistedState.sources[key] ?? {};
+ const nextType = persistedSource.type ?? value.type;
+
+ return [
+ key,
+ {
+ ...value,
+ ...persistedSource,
+ type: nextType,
+ dataset: [],
+ datasetPointCount: 0,
+ datasetDurationMs: 0,
+ loadError: nextType === 'csv-replay' && persistedSource.dataFileName
+ ? `Reload ${persistedSource.dataFileName} to restore replay data`
+ : '',
+ wsStatus: 'idle',
+ wsStatusDetail: '',
+ },
+ ];
+ }))
+ : baseState.sources,
+ };
+
+ return mergedState;
+}
+
+function loadPersistedState() {
+ if (typeof localStorage === 'undefined') {
+ return null;
+ }
+
+ try {
+ const raw = localStorage.getItem(STORAGE_KEY);
+ if (!raw) {
+ return null;
+ }
+
+ return JSON.parse(raw);
+ } catch (error) {
+ console.warn('[timeplot] failed to load persisted state', error);
+ return null;
+ }
+}
+
+function savePersistedState(state) {
+ if (typeof localStorage === 'undefined') {
+ return;
+ }
+
+ try {
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(createPersistableState(state)));
+ } catch (error) {
+ console.warn('[timeplot] failed to persist state', error);
+ }
+}
+
export function createInitialState() {
return {
app: {
@@ -32,12 +171,57 @@ export function createInitialState() {
point: null,
},
},
- source: {
- activeId: 'synthetic-wave',
- preset: 'telemetry',
- sampleRateHz: 60,
- amplitude: 1,
- noise: 0.08,
+ sources: {
+ signalA: {
+ id: 'signal-a',
+ label: 'Signal A',
+ type: 'synthetic-wave',
+ preset: 'telemetry',
+ sampleRateHz: 60,
+ amplitude: 1,
+ noise: 0.08,
+ replayRate: 1,
+ dataset: [],
+ dataFileName: '',
+ datasetPointCount: 0,
+ datasetDurationMs: 0,
+ loadError: '',
+ wsUrl: 'ws://localhost:8080',
+ wsReconnectMs: 2000,
+ wsStatus: 'idle',
+ wsStatusDetail: '',
+ },
+ signalB: {
+ id: 'signal-b',
+ label: 'Signal B',
+ type: 'synthetic-wave',
+ preset: 'chirp',
+ sampleRateHz: 48,
+ amplitude: 0.8,
+ noise: 0.04,
+ replayRate: 1,
+ dataset: [],
+ dataFileName: '',
+ datasetPointCount: 0,
+ datasetDurationMs: 0,
+ loadError: '',
+ wsUrl: 'ws://localhost:8080',
+ wsReconnectMs: 2000,
+ wsStatus: 'idle',
+ wsStatusDetail: '',
+ },
+ },
+ graphs: {
+ primary: {
+ sourceKey: 'signalA',
+ transform: 'raw',
+ title: 'Primary signal',
+ },
+ secondary: {
+ sourceKey: 'signalB',
+ transform: 'delta',
+ title: 'Secondary signal',
+ },
},
panels: {
status: { title: 'Status', visible: true },
@@ -50,7 +234,7 @@ export function createInitialState() {
export class Store {
constructor(initialState = createInitialState()) {
- this.state = initialState;
+ this.state = mergePersistedState(initialState, loadPersistedState());
this.listeners = new Set();
}
@@ -66,6 +250,7 @@ export class Store {
setState(updater) {
const nextState = typeof updater === 'function' ? updater(this.state) : updater;
this.state = nextState;
+ savePersistedState(this.state);
for (const listener of this.listeners) {
listener(this.state);
}
@@ -88,7 +273,18 @@ export class Store {
: state.plot.tooltip,
}
: state.plot,
- source: partial.source ? { ...state.source, ...partial.source } : state.source,
+ sources: partial.sources
+ ? Object.fromEntries(Object.entries({ ...state.sources, ...partial.sources }).map(([key, value]) => [
+ key,
+ { ...state.sources[key], ...value },
+ ]))
+ : state.sources,
+ graphs: partial.graphs
+ ? cloneNamedState(Object.fromEntries(Object.entries({ ...state.graphs, ...partial.graphs }).map(([key, value]) => [
+ key,
+ { ...state.graphs[key], ...value },
+ ])))
+ : state.graphs,
panels: partial.panels ? clonePanelState({ ...state.panels, ...partial.panels }) : state.panels,
}));
}
diff --git a/web-timeplot/src/data-sources.js b/web-timeplot/src/data-sources.js
new file mode 100644
index 0000000..749a151
--- /dev/null
+++ b/web-timeplot/src/data-sources.js
@@ -0,0 +1,517 @@
+/**
+ * Data Sources - Components that generate or provide data to plots
+ *
+ * This module implements the data provider side of the architecture.
+ * Data sources know how to generate or fetch data, but don't know
+ * anything about visualization.
+ *
+ * Architecture:
+ * - DataSource: Base class with event emitting
+ * - Specific sources: Implement different data generation strategies
+ * - Connection: Links sources to plots (see plot-connections.js)
+ */
+
+// Simple EventEmitter (same as in state.js, could be extracted to utils)
+class EventEmitter {
+ constructor() {
+ this.events = new Map();
+ }
+
+ on(event, callback) {
+ if (!this.events.has(event)) {
+ this.events.set(event, []);
+ }
+ this.events.get(event).push(callback);
+ return () => this.off(event, callback);
+ }
+
+ off(event, callback) {
+ if (!this.events.has(event)) return;
+ const callbacks = this.events.get(event);
+ const index = callbacks.indexOf(callback);
+ if (index > -1) {
+ callbacks.splice(index, 1);
+ }
+ }
+
+ emit(event, data) {
+ if (!this.events.has(event)) return;
+ this.events.get(event).forEach(callback => {
+ try {
+ callback(data);
+ } catch (e) {
+ console.error(`[DataSource] Error in event handler for '${event}':`, e);
+ }
+ });
+ }
+}
+
+/**
+ * Base class for all data sources
+ *
+ * Events emitted:
+ * - 'line': {points: Array, timestamp: number, metadata: Object}
+ * - 'point': {value: number, timestamp: number}
+ * - 'error': {error: Error}
+ */
+export class DataSource extends EventEmitter {
+ constructor(config = {}) {
+ super();
+ this.config = config;
+ this.isRunning = false;
+ this.time = 0;
+ }
+
+ /**
+ * Start generating/providing data
+ */
+ start() {
+ this.isRunning = true;
+ }
+
+ /**
+ * Stop generating/providing data
+ */
+ stop() {
+ this.isRunning = false;
+ }
+
+ /**
+ * Reset the data source to initial state
+ */
+ reset() {
+ this.time = 0;
+ }
+
+ /**
+ * Emit a complete line of data
+ */
+ emitLine(points, metadata = {}) {
+ this.emit('line', {
+ points,
+ timestamp: metadata.timestamp || Date.now(),
+ metadata,
+ });
+ }
+
+ /**
+ * Emit a single data point
+ */
+ emitPoint(value, timestamp = Date.now()) {
+ this.emit('point', {
+ value,
+ timestamp,
+ });
+ }
+
+ /**
+ * Emit an error
+ */
+ emitError(error) {
+ this.emit('error', { error });
+ }
+}
+
+/**
+ * Synthetic data source using test generators
+ * Uses the generators from test-data-generators.js
+ */
+export class SyntheticDataSource extends DataSource {
+ constructor(config = {}) {
+ super(config);
+ this.generator = config.generator; // Instance of DataGenerator
+ this.pointsPerLine = config.pointsPerLine || 100;
+ this.width = config.width || 800;
+ this.lineInterval = config.lineInterval || 100; // ms between lines
+ this.intervalHandle = null;
+ }
+
+ start() {
+ if (this.isRunning) return;
+ super.start();
+
+ // Generate a new line periodically
+ this.intervalHandle = setInterval(() => {
+ this.generateAndEmitLine();
+ }, this.lineInterval);
+
+ // Generate initial line immediately
+ this.generateAndEmitLine();
+ }
+
+ stop() {
+ super.stop();
+ if (this.intervalHandle) {
+ clearInterval(this.intervalHandle);
+ this.intervalHandle = null;
+ }
+ }
+
+ generateAndEmitLine() {
+ if (!this.generator) {
+ this.emitError(new Error('No generator configured'));
+ return;
+ }
+
+ const points = this.generator.generateLine(this.pointsPerLine, this.width);
+ this.emitLine(points, {
+ timestamp: Date.now(),
+ generatorType: this.generator.constructor.name,
+ });
+ }
+
+ setGenerator(generator) {
+ this.generator = generator;
+ }
+}
+
+/**
+ * Function-based data source
+ * Evaluates a user-provided function to generate data
+ */
+export class FunctionDataSource extends DataSource {
+ constructor(config = {}) {
+ super(config);
+ // Function should have signature: (x, t) => y
+ // x: normalized position 0-1
+ // t: time in seconds
+ // returns: y value
+ this.func = config.func || ((x, t) => Math.sin(x * 10 + t));
+ this.pointsPerLine = config.pointsPerLine || 100;
+ this.width = config.width || 800;
+ this.amplitude = config.amplitude || 30;
+ this.lineInterval = config.lineInterval || 100;
+ this.intervalHandle = null;
+ }
+
+ start() {
+ if (this.isRunning) return;
+ super.start();
+
+ this.intervalHandle = setInterval(() => {
+ this.generateAndEmitLine();
+ }, this.lineInterval);
+
+ this.generateAndEmitLine();
+ }
+
+ stop() {
+ super.stop();
+ if (this.intervalHandle) {
+ clearInterval(this.intervalHandle);
+ this.intervalHandle = null;
+ }
+ }
+
+ generateAndEmitLine() {
+ const points = [];
+ const t = this.time;
+
+ for (let i = 0; i < this.pointsPerLine; i++) {
+ const x = (i / this.pointsPerLine) * this.width;
+ const normalizedX = i / this.pointsPerLine;
+ const y = this.func(normalizedX, t) * this.amplitude;
+ points.push({ x, y });
+ }
+
+ this.emitLine(points, {
+ timestamp: Date.now(),
+ time: t,
+ });
+
+ this.time += this.lineInterval / 1000;
+ }
+
+ setFunction(func) {
+ this.func = func;
+ }
+}
+
+/**
+ * Streaming data source
+ * Emits individual data points that get buffered into lines
+ */
+export class StreamingDataSource extends DataSource {
+ constructor(config = {}) {
+ super(config);
+ this.generator = config.generator;
+ this.sampleRate = config.sampleRate || 60; // Samples per second
+ this.intervalHandle = null;
+ }
+
+ start() {
+ if (this.isRunning) return;
+ super.start();
+
+ const intervalMs = 1000 / this.sampleRate;
+ this.intervalHandle = setInterval(() => {
+ this.generateAndEmitPoint();
+ }, intervalMs);
+ }
+
+ stop() {
+ super.stop();
+ if (this.intervalHandle) {
+ clearInterval(this.intervalHandle);
+ this.intervalHandle = null;
+ }
+ }
+
+ generateAndEmitPoint() {
+ if (!this.generator) {
+ this.emitError(new Error('No generator configured'));
+ return;
+ }
+
+ const value = this.generator.sample();
+ this.generator.time += 1 / this.generator.sampleRate;
+ this.emitPoint(value, Date.now());
+ }
+
+ setGenerator(generator) {
+ this.generator = generator;
+ }
+}
+
+/**
+ * WebSocket data source (for real data)
+ * Receives data from a WebSocket connection
+ */
+export class WebSocketDataSource extends DataSource {
+ constructor(config = {}) {
+ super(config);
+ this.url = config.url;
+ this.socket = null;
+ this.reconnectInterval = config.reconnectInterval || 5000;
+ this.reconnectHandle = null;
+ }
+
+ start() {
+ if (this.isRunning) return;
+ super.start();
+ this.connect();
+ }
+
+ stop() {
+ super.stop();
+ if (this.socket) {
+ this.socket.close();
+ this.socket = null;
+ }
+ if (this.reconnectHandle) {
+ clearTimeout(this.reconnectHandle);
+ this.reconnectHandle = null;
+ }
+ }
+
+ connect() {
+ try {
+ this.socket = new WebSocket(this.url);
+
+ this.socket.onopen = () => {
+ console.log(`[WebSocketDataSource] Connected to ${this.url}`);
+ };
+
+ this.socket.onmessage = (event) => {
+ this.handleMessage(event.data);
+ };
+
+ this.socket.onerror = (error) => {
+ console.error('[WebSocketDataSource] Error:', error);
+ this.emitError(error);
+ };
+
+ this.socket.onclose = () => {
+ console.log('[WebSocketDataSource] Connection closed');
+ if (this.isRunning) {
+ // Auto-reconnect
+ this.reconnectHandle = setTimeout(() => {
+ this.connect();
+ }, this.reconnectInterval);
+ }
+ };
+ } catch (error) {
+ console.error('[WebSocketDataSource] Failed to connect:', error);
+ this.emitError(error);
+ }
+ }
+
+ handleMessage(data) {
+ try {
+ const parsed = JSON.parse(data);
+
+ // Expect format: {type: 'line', points: [...]} or {type: 'point', value: ...}
+ if (parsed.type === 'line' && parsed.points) {
+ this.emitLine(parsed.points, parsed.metadata || {});
+ } else if (parsed.type === 'point' && parsed.value !== undefined) {
+ this.emitPoint(parsed.value, parsed.timestamp);
+ } else {
+ console.warn('[WebSocketDataSource] Unknown message format:', parsed);
+ }
+ } catch (error) {
+ console.error('[WebSocketDataSource] Failed to parse message:', error);
+ this.emitError(error);
+ }
+ }
+
+ send(data) {
+ if (this.socket && this.socket.readyState === WebSocket.OPEN) {
+ this.socket.send(JSON.stringify(data));
+ }
+ }
+}
+
+/**
+ * CSV File data source
+ * Reads data from CSV files (for replay/analysis)
+ */
+export class CSVDataSource extends DataSource {
+ constructor(config = {}) {
+ super(config);
+ this.data = []; // Parsed CSV data
+ this.currentIndex = 0;
+ this.playbackRate = config.playbackRate || 1.0;
+ this.loop = config.loop || false;
+ this.intervalHandle = null;
+ }
+
+ /**
+ * Load CSV data from a string
+ * Expected format: timestamp,value or x,y format
+ */
+ loadCSV(csvString) {
+ const lines = csvString.trim().split('\n');
+ const headers = lines[0].split(',').map(h => h.trim());
+
+ this.data = [];
+ for (let i = 1; i < lines.length; i++) {
+ const values = lines[i].split(',').map(v => parseFloat(v.trim()));
+ if (values.length >= 2 && !values.some(isNaN)) {
+ this.data.push({
+ timestamp: values[0],
+ value: values[1],
+ });
+ }
+ }
+
+ console.log(`[CSVDataSource] Loaded ${this.data.length} data points`);
+ }
+
+ start() {
+ if (this.isRunning || this.data.length === 0) return;
+ super.start();
+
+ // Play back at specified rate
+ this.intervalHandle = setInterval(() => {
+ this.emitNextPoint();
+ }, 16 / this.playbackRate); // ~60fps adjusted by playback rate
+ }
+
+ stop() {
+ super.stop();
+ if (this.intervalHandle) {
+ clearInterval(this.intervalHandle);
+ this.intervalHandle = null;
+ }
+ }
+
+ reset() {
+ super.reset();
+ this.currentIndex = 0;
+ }
+
+ emitNextPoint() {
+ if (this.currentIndex >= this.data.length) {
+ if (this.loop) {
+ this.currentIndex = 0;
+ } else {
+ this.stop();
+ return;
+ }
+ }
+
+ const point = this.data[this.currentIndex];
+ this.emitPoint(point.value, point.timestamp);
+ this.currentIndex++;
+ }
+}
+
+/**
+ * Multi-source combiner
+ * Combines data from multiple sources
+ */
+export class CompositeDataSource extends DataSource {
+ constructor(config = {}) {
+ super(config);
+ this.sources = config.sources || [];
+ this.combineMode = config.combineMode || 'average'; // 'average', 'sum', 'max', 'min'
+ this.pointBuffer = new Map(); // sourceId => latest point
+ }
+
+ start() {
+ if (this.isRunning) return;
+ super.start();
+
+ // Subscribe to all sources
+ this.sources.forEach((source, idx) => {
+ source.on('point', (data) => {
+ this.handleSourcePoint(idx, data);
+ });
+ source.on('line', (data) => {
+ this.handleSourceLine(idx, data);
+ });
+ source.start();
+ });
+ }
+
+ stop() {
+ super.stop();
+ this.sources.forEach(source => source.stop());
+ }
+
+ handleSourcePoint(sourceIdx, data) {
+ this.pointBuffer.set(sourceIdx, data.value);
+
+ // If we have data from all sources, combine and emit
+ if (this.pointBuffer.size === this.sources.length) {
+ const combined = this.combineValues(Array.from(this.pointBuffer.values()));
+ this.emitPoint(combined, data.timestamp);
+ }
+ }
+
+ handleSourceLine(sourceIdx, data) {
+ // For lines, just pass through for now
+ // Could implement line combination if needed
+ this.emitLine(data.points, data.metadata);
+ }
+
+ combineValues(values) {
+ switch (this.combineMode) {
+ case 'sum':
+ return values.reduce((a, b) => a + b, 0);
+ case 'average':
+ return values.reduce((a, b) => a + b, 0) / values.length;
+ case 'max':
+ return Math.max(...values);
+ case 'min':
+ return Math.min(...values);
+ default:
+ return values[0];
+ }
+ }
+
+ addSource(source) {
+ this.sources.push(source);
+ if (this.isRunning) {
+ source.start();
+ }
+ }
+
+ removeSource(source) {
+ const idx = this.sources.indexOf(source);
+ if (idx > -1) {
+ source.stop();
+ this.sources.splice(idx, 1);
+ }
+ }
+}
diff --git a/web-timeplot/src/data/csv-replay-source.js b/web-timeplot/src/data/csv-replay-source.js
new file mode 100644
index 0000000..c4e6a66
--- /dev/null
+++ b/web-timeplot/src/data/csv-replay-source.js
@@ -0,0 +1,60 @@
+import { BaseSource } from './base-source.js';
+
+function clamp(value, min, max) {
+ return Math.min(max, Math.max(min, value));
+}
+
+export class CsvReplaySource extends BaseSource {
+ constructor(config = {}) {
+ super({
+ replayRate: 1,
+ dataset: [],
+ ...config,
+ });
+ this.sourceType = 'csv-replay';
+ this.nextPointIndex = 0;
+ }
+
+ start(startTimeMs = 0) {
+ super.start();
+ this.reset(startTimeMs);
+ }
+
+ reset() {
+ this.nextPointIndex = 0;
+ }
+
+ updateConfig(nextConfig) {
+ const datasetChanged = nextConfig.dataset !== this.config.dataset;
+ super.updateConfig(nextConfig);
+ if (datasetChanged) {
+ this.reset();
+ }
+ }
+
+ update(currentPlotTimeMs) {
+ if (!this.running || !Array.isArray(this.config.dataset) || this.config.dataset.length === 0) {
+ return [];
+ }
+
+ const replayRate = clamp(this.config.replayRate ?? 1, 0.1, 8);
+ const targetDatasetTimeMs = currentPlotTimeMs * replayRate;
+ const points = [];
+
+ while (this.nextPointIndex < this.config.dataset.length) {
+ const datasetPoint = this.config.dataset[this.nextPointIndex];
+ if (datasetPoint.timeMs > targetDatasetTimeMs) {
+ break;
+ }
+
+ points.push({
+ timeMs: datasetPoint.timeMs / replayRate,
+ value: datasetPoint.value,
+ sourceId: this.config.id ?? 'csv-replay',
+ });
+ this.nextPointIndex += 1;
+ }
+
+ return points;
+ }
+}
diff --git a/web-timeplot/src/data/parse-replay-csv.js b/web-timeplot/src/data/parse-replay-csv.js
new file mode 100644
index 0000000..b6ce97a
--- /dev/null
+++ b/web-timeplot/src/data/parse-replay-csv.js
@@ -0,0 +1,108 @@
+function splitRow(line) {
+ return line.split(/[;,\t]/).map((value) => value.trim());
+}
+
+function isNumeric(value) {
+ return value !== '' && Number.isFinite(Number(value));
+}
+
+function detectHeader(rows) {
+ if (rows.length === 0) {
+ return { hasHeader: false, headers: [] };
+ }
+
+ const [firstRow] = rows;
+ const hasHeader = firstRow.some((value) => !isNumeric(value));
+ return {
+ hasHeader,
+ headers: hasHeader ? firstRow.map((value) => value.toLowerCase()) : [],
+ };
+}
+
+function detectTimeScale(headers) {
+ const timeHeader = headers.find((header) => header.includes('time') || header.includes('timestamp'));
+ if (!timeHeader) {
+ return 1;
+ }
+
+ if (timeHeader.includes('sec') && !timeHeader.includes('msec') && !timeHeader.includes('ms')) {
+ return 1000;
+ }
+
+ return 1;
+}
+
+function detectColumnIndexes(headers, columnCount) {
+ if (headers.length === 0) {
+ return {
+ timeIndex: columnCount > 1 ? 0 : -1,
+ valueIndex: columnCount > 1 ? 1 : 0,
+ };
+ }
+
+ const timeIndex = headers.findIndex((header) => header.includes('time') || header.includes('timestamp'));
+ const valueIndex = headers.findIndex((header) => header.includes('value') || header.includes('signal') || header.includes('y'));
+
+ return {
+ timeIndex,
+ valueIndex: valueIndex >= 0 ? valueIndex : (headers.length > 1 ? 1 : 0),
+ };
+}
+
+export function parseReplayCsv(text, { sampleRateHz = 60 } = {}) {
+ const rows = text
+ .split(/\r?\n/)
+ .map((line) => line.trim())
+ .filter((line) => line && !line.startsWith('#'))
+ .map(splitRow)
+ .filter((row) => row.some((value) => value !== ''));
+
+ if (rows.length === 0) {
+ throw new Error('CSV file is empty');
+ }
+
+ const { hasHeader, headers } = detectHeader(rows);
+ const dataRows = hasHeader ? rows.slice(1) : rows;
+ const columnCount = rows[0].length;
+ const { timeIndex, valueIndex } = detectColumnIndexes(headers, columnCount);
+ const timeScale = detectTimeScale(headers);
+ const intervalMs = 1000 / Math.max(1, sampleRateHz);
+
+ const points = dataRows
+ .map((row, index) => {
+ const rawValue = row[valueIndex];
+ if (!isNumeric(rawValue)) {
+ return null;
+ }
+
+ const parsedValue = Number(rawValue);
+ const parsedTime = timeIndex >= 0 && isNumeric(row[timeIndex])
+ ? Number(row[timeIndex]) * timeScale
+ : index * intervalMs;
+
+ return {
+ timeMs: parsedTime,
+ value: parsedValue,
+ };
+ })
+ .filter(Boolean)
+ .sort((left, right) => left.timeMs - right.timeMs);
+
+ if (points.length === 0) {
+ throw new Error('CSV file did not contain any numeric data points');
+ }
+
+ const firstTime = points[0].timeMs;
+ const normalizedPoints = points.map((point) => ({
+ timeMs: point.timeMs - firstTime,
+ value: point.value,
+ }));
+
+ return {
+ points: normalizedPoints,
+ metadata: {
+ pointCount: normalizedPoints.length,
+ durationMs: normalizedPoints.at(-1)?.timeMs ?? 0,
+ },
+ };
+}
diff --git a/web-timeplot/src/data/source-registry.js b/web-timeplot/src/data/source-registry.js
index 06f5895..917d06b 100644
--- a/web-timeplot/src/data/source-registry.js
+++ b/web-timeplot/src/data/source-registry.js
@@ -1,41 +1,90 @@
+import { CsvReplaySource } from './csv-replay-source.js';
import { SyntheticWaveSource } from './synthetic-wave-source.js';
+import { WebSocketSource } from './websocket-source.js';
export class SourceRegistry {
constructor(store, bus) {
this.store = store;
this.bus = bus;
- this.sources = new Map([
- ['synthetic-wave', new SyntheticWaveSource(store.getState().source)],
- ]);
- this.activeSource = this.sources.get(store.getState().source.activeId);
- this.activeSource.start(store.getState().time.plotTimeMs);
+ this.sources = new Map();
+ this.syncFromState();
}
syncFromState() {
const state = this.store.getState();
- const nextSource = this.sources.get(state.source.activeId);
+ const sourceEntries = Object.entries(state.sources);
+ const activeKeys = new Set(sourceEntries.map(([sourceKey]) => sourceKey));
- if (nextSource !== this.activeSource) {
- this.activeSource?.stop();
- this.activeSource = nextSource;
- this.activeSource?.start(state.time.plotTimeMs);
+ for (const [sourceKey, config] of sourceEntries) {
+ const existingSource = this.sources.get(sourceKey);
+
+ if (!existingSource) {
+ const nextSource = this.createSource(sourceKey, config);
+ this.sources.set(sourceKey, nextSource);
+ nextSource.start(state.time.plotTimeMs);
+ continue;
+ }
+
+ if (existingSource.sourceType !== config.type) {
+ existingSource.stop();
+ const replacementSource = this.createSource(sourceKey, config);
+ this.sources.set(sourceKey, replacementSource);
+ replacementSource.start(state.time.plotTimeMs);
+ continue;
+ }
+
+ existingSource.updateConfig(config);
}
- this.activeSource?.updateConfig(state.source);
+ for (const [sourceKey, source] of this.sources.entries()) {
+ if (!activeKeys.has(sourceKey)) {
+ source.stop();
+ this.sources.delete(sourceKey);
+ }
+ }
}
- update(currentPlotTimeMs) {
- if (!this.activeSource) {
- return;
+ createSource(sourceKey, config) {
+ switch (config.type) {
+ case 'csv-replay':
+ return new CsvReplaySource(config);
+ case 'websocket':
+ return new WebSocketSource(config, {
+ onStatusChange: (statusPatch) => {
+ this.store.setState((state) => ({
+ ...state,
+ sources: {
+ ...state.sources,
+ [sourceKey]: {
+ ...state.sources[sourceKey],
+ ...statusPatch,
+ },
+ },
+ }));
+ },
+ });
+ case 'synthetic-wave':
+ default:
+ return new SyntheticWaveSource(config);
}
+ }
- const points = this.activeSource.update(currentPlotTimeMs);
- for (const point of points) {
- this.bus.emit('data:point', point);
+ update(currentPlotTimeMs) {
+ for (const [sourceKey, source] of this.sources.entries()) {
+ const points = source.update(currentPlotTimeMs);
+ for (const point of points) {
+ this.bus.emit('data:point', {
+ ...point,
+ sourceId: sourceKey,
+ });
+ }
}
}
reset() {
- this.activeSource?.reset(this.store.getState().time.plotTimeMs);
+ const startTimeMs = this.store.getState().time.plotTimeMs;
+ for (const source of this.sources.values()) {
+ source.reset(startTimeMs);
+ }
}
}
diff --git a/web-timeplot/src/data/synthetic-wave-source.js b/web-timeplot/src/data/synthetic-wave-source.js
index 3cf7fb1..df53319 100644
--- a/web-timeplot/src/data/synthetic-wave-source.js
+++ b/web-timeplot/src/data/synthetic-wave-source.js
@@ -18,6 +18,7 @@ export class SyntheticWaveSource extends BaseSource {
noise: 0.08,
...config,
});
+ this.sourceType = 'synthetic-wave';
this.lastEmittedPlotTimeMs = 0;
}
diff --git a/web-timeplot/src/data/websocket-source.js b/web-timeplot/src/data/websocket-source.js
new file mode 100644
index 0000000..5458fb9
--- /dev/null
+++ b/web-timeplot/src/data/websocket-source.js
@@ -0,0 +1,224 @@
+import { BaseSource } from './base-source.js';
+
+function clamp(value, min, max) {
+ return Math.min(max, Math.max(min, value));
+}
+
+function isFiniteNumber(value) {
+ return typeof value === 'number' && Number.isFinite(value);
+}
+
+function parsePayload(payload) {
+ if (Array.isArray(payload)) {
+ return payload.flatMap((item) => parsePayload(item));
+ }
+
+ if (isFiniteNumber(payload)) {
+ return [{ value: payload, timestampMs: null }];
+ }
+
+ if (typeof payload === 'string') {
+ const trimmed = payload.trim();
+ if (!trimmed) {
+ return [];
+ }
+
+ const numeric = Number(trimmed);
+ if (Number.isFinite(numeric)) {
+ return [{ value: numeric, timestampMs: null }];
+ }
+
+ try {
+ return parsePayload(JSON.parse(trimmed));
+ } catch {
+ return [];
+ }
+ }
+
+ if (payload && typeof payload === 'object') {
+ const candidateValue = [payload.value, payload.y, payload.signal, payload.data]
+ .find((value) => Number.isFinite(Number(value)));
+
+ if (candidateValue === undefined) {
+ return [];
+ }
+
+ const candidateTimestamp = [payload.timeMs, payload.timestampMs, payload.timestamp, payload.t]
+ .find((value) => Number.isFinite(Number(value)));
+
+ return [{
+ value: Number(candidateValue),
+ timestampMs: candidateTimestamp === undefined ? null : Number(candidateTimestamp),
+ }];
+ }
+
+ return [];
+}
+
+export class WebSocketSource extends BaseSource {
+ constructor(config = {}, { onStatusChange } = {}) {
+ super({
+ wsUrl: 'ws://localhost:8080',
+ wsReconnectMs: 2000,
+ ...config,
+ });
+ this.sourceType = 'websocket';
+ this.onStatusChange = onStatusChange;
+ this.socket = null;
+ this.queue = [];
+ this.lastPlotTimeMs = 0;
+ this.reconnectTimer = null;
+ this.shouldReconnect = false;
+ this.firstSourceTimestampMs = null;
+ this.basePlotTimeMs = 0;
+ }
+
+ start(startTimeMs = 0) {
+ super.start();
+ this.lastPlotTimeMs = startTimeMs;
+ this.basePlotTimeMs = startTimeMs;
+ this.shouldReconnect = true;
+ this.connect();
+ }
+
+ stop() {
+ super.stop();
+ this.shouldReconnect = false;
+ this.clearReconnectTimer();
+ if (this.socket) {
+ this.socket.close();
+ this.socket = null;
+ }
+ this.setStatus('disconnected', 'socket closed');
+ }
+
+ reset(startTimeMs = 0) {
+ this.queue = [];
+ this.lastPlotTimeMs = startTimeMs;
+ this.basePlotTimeMs = startTimeMs;
+ this.firstSourceTimestampMs = null;
+ }
+
+ updateConfig(nextConfig) {
+ const previousUrl = this.config.wsUrl;
+ const previousReconnectMs = this.config.wsReconnectMs;
+ super.updateConfig(nextConfig);
+
+ if ((previousUrl !== this.config.wsUrl || previousReconnectMs !== this.config.wsReconnectMs) && this.running) {
+ this.reconnect();
+ }
+ }
+
+ update(currentPlotTimeMs) {
+ this.lastPlotTimeMs = currentPlotTimeMs;
+
+ if (this.queue.length === 0) {
+ return [];
+ }
+
+ const points = [];
+ while (this.queue.length > 0) {
+ const nextPoint = this.queue.shift();
+ let timeMs = currentPlotTimeMs;
+
+ if (isFiniteNumber(nextPoint.timestampMs)) {
+ if (this.firstSourceTimestampMs === null) {
+ this.firstSourceTimestampMs = nextPoint.timestampMs;
+ this.basePlotTimeMs = currentPlotTimeMs;
+ }
+ timeMs = this.basePlotTimeMs + (nextPoint.timestampMs - this.firstSourceTimestampMs);
+ }
+
+ points.push({
+ timeMs,
+ value: nextPoint.value,
+ sourceId: this.config.id ?? 'websocket',
+ });
+ }
+
+ return points;
+ }
+
+ reconnect() {
+ if (!this.running) {
+ return;
+ }
+
+ this.clearReconnectTimer();
+ if (this.socket) {
+ this.socket.close();
+ this.socket = null;
+ }
+ this.connect();
+ }
+
+ connect() {
+ const url = this.config.wsUrl?.trim();
+ if (!url) {
+ this.setStatus('idle', 'enter a websocket url');
+ return;
+ }
+
+ this.clearReconnectTimer();
+ this.setStatus('connecting', url);
+
+ try {
+ this.socket = new WebSocket(url);
+ } catch (error) {
+ this.setStatus('error', error instanceof Error ? error.message : String(error));
+ this.scheduleReconnect();
+ return;
+ }
+
+ this.socket.addEventListener('open', () => {
+ this.setStatus('connected', url);
+ });
+
+ this.socket.addEventListener('message', (event) => {
+ const parsedPoints = parsePayload(event.data);
+ if (parsedPoints.length === 0) {
+ return;
+ }
+ this.queue.push(...parsedPoints);
+ });
+
+ this.socket.addEventListener('error', () => {
+ this.setStatus('error', 'socket error');
+ });
+
+ this.socket.addEventListener('close', () => {
+ this.socket = null;
+ if (!this.running) {
+ return;
+ }
+ this.setStatus('disconnected', 'retrying');
+ this.scheduleReconnect();
+ });
+ }
+
+ scheduleReconnect() {
+ if (!this.shouldReconnect || !this.running) {
+ return;
+ }
+
+ const reconnectMs = clamp(Number(this.config.wsReconnectMs) || 2000, 250, 30000);
+ this.clearReconnectTimer();
+ this.reconnectTimer = window.setTimeout(() => {
+ this.connect();
+ }, reconnectMs);
+ }
+
+ clearReconnectTimer() {
+ if (this.reconnectTimer !== null) {
+ window.clearTimeout(this.reconnectTimer);
+ this.reconnectTimer = null;
+ }
+ }
+
+ setStatus(status, detail = '') {
+ this.onStatusChange?.({
+ wsStatus: status,
+ wsStatusDetail: detail,
+ });
+ }
+}
diff --git a/web-timeplot/src/demos.js b/web-timeplot/src/demos.js
new file mode 100644
index 0000000..1dd6785
--- /dev/null
+++ b/web-timeplot/src/demos.js
@@ -0,0 +1,697 @@
+/**
+ * Preloaded Graphics Demos
+ *
+ * Each demo exports:
+ * - name: Display name
+ * - description: Short description
+ * - setup(app, state): Called once to create objects
+ * - update(app, state, objects): Called every frame
+ * - cleanup(app, objects): Called when switching demos
+ */
+
+// ============================================================================
+// DEMO 1: BOUNCING PARTICLES
+// ============================================================================
+
+export const bouncingParticles = {
+ name: "Bouncing Particles",
+ description: "Colorful particles bouncing around the screen",
+
+ setup(app, state) {
+ const particles = [];
+ const colors = [0xff6b6b, 0x4ecdc4, 0x45b7d1, 0xf9ca24, 0x6c5ce7];
+
+ for (let i = 0; i < 50; i++) {
+ const particle = new PIXI.Graphics();
+ const size = 5 + Math.random() * 10;
+ particle.circle(0, 0, size);
+ particle.fill(colors[Math.floor(Math.random() * colors.length)]);
+
+ particle.x = Math.random() * app.screen.width;
+ particle.y = Math.random() * app.screen.height;
+ particle.vx = (Math.random() - 0.5) * 8;
+ particle.vy = (Math.random() - 0.5) * 8;
+ particle.size = size;
+
+ app.stage.addChild(particle);
+ particles.push(particle);
+ }
+
+ return { particles };
+ },
+
+ update(app, state, objects) {
+ objects.particles.forEach(p => {
+ p.x += p.vx;
+ p.y += p.vy;
+
+ // Bounce off edges
+ if (p.x < p.size || p.x > app.screen.width - p.size) p.vx *= -1;
+ if (p.y < p.size || p.y > app.screen.height - p.size) p.vy *= -1;
+
+ // Clamp to screen
+ p.x = Math.max(p.size, Math.min(app.screen.width - p.size, p.x));
+ p.y = Math.max(p.size, Math.min(app.screen.height - p.size, p.y));
+ });
+ },
+
+ cleanup(app, objects) {
+ objects.particles.forEach(p => p.destroy());
+ }
+};
+
+// ============================================================================
+// DEMO 2: SPIROGRAPH
+// ============================================================================
+
+export const spirograph = {
+ name: "Spirograph",
+ description: "Mesmerizing geometric spiral patterns",
+
+ setup(app, state) {
+ const graphics = new PIXI.Graphics();
+ app.stage.addChild(graphics);
+
+ return {
+ graphics,
+ angle: 0,
+ points: []
+ };
+ },
+
+ update(app, state, objects) {
+ const cx = app.screen.width / 2;
+ const cy = app.screen.height / 2;
+ const t = state.state.time.current;
+
+ // Generate new point
+ const r1 = 150;
+ const r2 = 50;
+ const r3 = 30;
+
+ const x = cx + Math.cos(t * 0.5) * r1 + Math.cos(t * 2) * r2 + Math.cos(t * 5) * r3;
+ const y = cy + Math.sin(t * 0.5) * r1 + Math.sin(t * 2) * r2 + Math.sin(t * 5) * r3;
+
+ objects.points.push({ x, y });
+
+ // Keep only last 500 points
+ if (objects.points.length > 500) {
+ objects.points.shift();
+ }
+
+ // Draw trail
+ objects.graphics.clear();
+ if (objects.points.length > 1) {
+ for (let i = 1; i < objects.points.length; i++) {
+ const alpha = i / objects.points.length;
+ const hue = (i / objects.points.length) * 360;
+ objects.graphics.moveTo(objects.points[i-1].x, objects.points[i-1].y);
+ objects.graphics.lineTo(objects.points[i].x, objects.points[i].y);
+ objects.graphics.stroke({ width: 2, color: hslToHex(hue, 100, 60), alpha });
+ }
+ }
+ },
+
+ cleanup(app, objects) {
+ objects.graphics.destroy();
+ }
+};
+
+// ============================================================================
+// DEMO 3: STARFIELD
+// ============================================================================
+
+export const starfield = {
+ name: "Starfield",
+ description: "Flying through space at warp speed",
+
+ setup(app, state) {
+ const stars = [];
+
+ for (let i = 0; i < 200; i++) {
+ const star = new PIXI.Graphics();
+ star.circle(0, 0, 2);
+ star.fill(0xffffff);
+
+ star.x = (Math.random() - 0.5) * app.screen.width * 2;
+ star.y = (Math.random() - 0.5) * app.screen.height * 2;
+ star.z = Math.random() * 1000;
+
+ app.stage.addChild(star);
+ stars.push(star);
+ }
+
+ return { stars };
+ },
+
+ update(app, state, objects) {
+ const cx = app.screen.width / 2;
+ const cy = app.screen.height / 2;
+ const speed = 5;
+
+ objects.stars.forEach(star => {
+ star.z -= speed;
+
+ if (star.z <= 0) {
+ star.z = 1000;
+ star.x = (Math.random() - 0.5) * app.screen.width * 2;
+ star.y = (Math.random() - 0.5) * app.screen.height * 2;
+ }
+
+ const screenX = cx + (star.x / star.z) * 200;
+ const screenY = cy + (star.y / star.z) * 200;
+ const size = (1 - star.z / 1000) * 4 + 1;
+
+ star.x = star.x;
+ star.y = star.y;
+ star.position.set(screenX, screenY);
+ star.scale.set(size);
+ star.alpha = 1 - star.z / 1000;
+ });
+ },
+
+ cleanup(app, objects) {
+ objects.stars.forEach(s => s.destroy());
+ }
+};
+
+// ============================================================================
+// DEMO 4: WAVE INTERFERENCE
+// ============================================================================
+
+export const waveInterference = {
+ name: "Wave Interference",
+ description: "Rippling wave patterns",
+
+ setup(app, state) {
+ const gridSize = 20;
+ const cols = Math.floor(app.screen.width / gridSize);
+ const rows = Math.floor(app.screen.height / gridSize);
+ const circles = [];
+
+ for (let i = 0; i < cols; i++) {
+ for (let j = 0; j < rows; j++) {
+ const circle = new PIXI.Graphics();
+ circle.circle(0, 0, 4);
+ circle.fill(0x4ecdc4);
+ circle.x = i * gridSize + gridSize / 2;
+ circle.y = j * gridSize + gridSize / 2;
+ circle.baseX = circle.x;
+ circle.baseY = circle.y;
+
+ app.stage.addChild(circle);
+ circles.push(circle);
+ }
+ }
+
+ return { circles, sources: [
+ { x: app.screen.width * 0.3, y: app.screen.height * 0.5 },
+ { x: app.screen.width * 0.7, y: app.screen.height * 0.5 }
+ ]};
+ },
+
+ update(app, state, objects) {
+ const t = state.state.time.current;
+
+ objects.circles.forEach(c => {
+ let totalOffset = 0;
+
+ objects.sources.forEach(source => {
+ const dx = c.baseX - source.x;
+ const dy = c.baseY - source.y;
+ const dist = Math.sqrt(dx * dx + dy * dy);
+ totalOffset += Math.sin(dist * 0.05 - t * 3) * 10;
+ });
+
+ c.y = c.baseY + totalOffset;
+ c.alpha = 0.3 + (Math.sin(totalOffset * 0.1) + 1) * 0.35;
+ });
+ },
+
+ cleanup(app, objects) {
+ objects.circles.forEach(c => c.destroy());
+ }
+};
+
+// ============================================================================
+// DEMO 5: CIRCLE PACKING
+// ============================================================================
+
+export const circlePacking = {
+ name: "Circle Packing",
+ description: "Organic growth simulation",
+
+ setup(app, state) {
+ const circles = [];
+ return { circles, attempts: 0 };
+ },
+
+ update(app, state, objects) {
+ // Try to add a new circle each frame
+ const maxAttempts = 100;
+ const maxCircles = 150;
+
+ if (objects.circles.length >= maxCircles) return;
+
+ for (let i = 0; i < 10; i++) {
+ const x = Math.random() * app.screen.width;
+ const y = Math.random() * app.screen.height;
+ const minRadius = 5;
+ const maxRadius = 60;
+
+ let valid = true;
+ let radius = minRadius;
+
+ // Find largest radius that doesn't overlap
+ for (let r = minRadius; r < maxRadius; r++) {
+ let overlaps = false;
+
+ for (const other of objects.circles) {
+ const dx = x - other.x;
+ const dy = y - other.y;
+ const dist = Math.sqrt(dx * dx + dy * dy);
+
+ if (dist < r + other.radius + 2) {
+ overlaps = true;
+ break;
+ }
+ }
+
+ if (overlaps) {
+ break;
+ }
+ radius = r;
+ }
+
+ if (radius > minRadius) {
+ const circle = new PIXI.Graphics();
+ circle.circle(0, 0, radius);
+ const hue = (objects.circles.length * 137.5) % 360;
+ circle.fill(hslToHex(hue, 70, 60));
+ circle.x = x;
+ circle.y = y;
+ circle.radius = radius;
+
+ app.stage.addChild(circle);
+ objects.circles.push(circle);
+ break;
+ }
+ }
+ },
+
+ cleanup(app, objects) {
+ objects.circles.forEach(c => c.destroy());
+ }
+};
+
+// ============================================================================
+// DEMO 6: PERLIN FLOW FIELD
+// ============================================================================
+
+export const flowField = {
+ name: "Flow Field",
+ description: "Particles following a noise field",
+
+ setup(app, state) {
+ const particles = [];
+ const colors = [0xff6b6b, 0x4ecdc4, 0x45b7d1, 0xf9ca24, 0x6c5ce7, 0xfeca57];
+
+ for (let i = 0; i < 300; i++) {
+ const particle = new PIXI.Graphics();
+ particle.circle(0, 0, 2);
+ particle.fill(colors[Math.floor(Math.random() * colors.length)]);
+ particle.alpha = 0.6;
+
+ particle.x = Math.random() * app.screen.width;
+ particle.y = Math.random() * app.screen.height;
+ particle.vx = 0;
+ particle.vy = 0;
+ particle.color = colors[Math.floor(Math.random() * colors.length)];
+
+ app.stage.addChild(particle);
+ particles.push(particle);
+ }
+
+ return { particles };
+ },
+
+ update(app, state, objects) {
+ const t = state.state.time.current;
+
+ objects.particles.forEach(p => {
+ // Simple noise-like function using sin/cos
+ const angle = noise(p.x * 0.005, p.y * 0.005, t * 0.3) * Math.PI * 2;
+
+ p.vx += Math.cos(angle) * 0.3;
+ p.vy += Math.sin(angle) * 0.3;
+
+ // Damping
+ p.vx *= 0.95;
+ p.vy *= 0.95;
+
+ p.x += p.vx;
+ p.y += p.vy;
+
+ // Wrap around screen
+ if (p.x < 0) p.x = app.screen.width;
+ if (p.x > app.screen.width) p.x = 0;
+ if (p.y < 0) p.y = app.screen.height;
+ if (p.y > app.screen.height) p.y = 0;
+ });
+ },
+
+ cleanup(app, objects) {
+ objects.particles.forEach(p => p.destroy());
+ }
+};
+
+// ============================================================================
+// DEMO 7: DNA HELIX
+// ============================================================================
+
+export const dnaHelix = {
+ name: "DNA Helix",
+ description: "Rotating double helix structure",
+
+ setup(app, state) {
+ const helix1 = [];
+ const helix2 = [];
+ const connectors = [];
+ const segments = 40;
+
+ for (let i = 0; i < segments; i++) {
+ const sphere1 = new PIXI.Graphics();
+ sphere1.circle(0, 0, 8);
+ sphere1.fill(0x4ecdc4);
+ app.stage.addChild(sphere1);
+ helix1.push(sphere1);
+
+ const sphere2 = new PIXI.Graphics();
+ sphere2.circle(0, 0, 8);
+ sphere2.fill(0xff6b6b);
+ app.stage.addChild(sphere2);
+ helix2.push(sphere2);
+
+ const connector = new PIXI.Graphics();
+ app.stage.addChild(connector);
+ connectors.push(connector);
+ }
+
+ return { helix1, helix2, connectors };
+ },
+
+ update(app, state, objects) {
+ const t = state.state.time.current;
+ const cx = app.screen.width / 2;
+ const cy = app.screen.height / 2;
+ const radius = 100;
+ const height = app.screen.height * 0.8;
+ const spacing = height / objects.helix1.length;
+
+ objects.helix1.forEach((sphere, i) => {
+ const y = i * spacing - height / 2 + cy;
+ const angle = t + i * 0.3;
+ const x = cx + Math.cos(angle) * radius;
+ const z = Math.sin(angle) * radius;
+
+ sphere.x = x;
+ sphere.y = y;
+ sphere.scale.set(1 + z / 200);
+ sphere.alpha = 0.5 + z / 400;
+ });
+
+ objects.helix2.forEach((sphere, i) => {
+ const y = i * spacing - height / 2 + cy;
+ const angle = t + i * 0.3 + Math.PI;
+ const x = cx + Math.cos(angle) * radius;
+ const z = Math.sin(angle) * radius;
+
+ sphere.x = x;
+ sphere.y = y;
+ sphere.scale.set(1 + z / 200);
+ sphere.alpha = 0.5 + z / 400;
+ });
+
+ // Draw connectors
+ objects.connectors.forEach((connector, i) => {
+ connector.clear();
+ connector.moveTo(objects.helix1[i].x, objects.helix1[i].y);
+ connector.lineTo(objects.helix2[i].x, objects.helix2[i].y);
+ connector.stroke({ width: 2, color: 0x666666, alpha: 0.3 });
+ });
+ },
+
+ cleanup(app, objects) {
+ objects.helix1.forEach(s => s.destroy());
+ objects.helix2.forEach(s => s.destroy());
+ objects.connectors.forEach(c => c.destroy());
+ }
+};
+
+// ============================================================================
+// DEMO 8: FIREWORKS
+// ============================================================================
+
+export const fireworks = {
+ name: "Fireworks",
+ description: "Explosive particle celebration",
+
+ setup(app, state) {
+ return {
+ explosions: [],
+ nextExplosion: 0
+ };
+ },
+
+ update(app, state, objects) {
+ const t = state.state.time.current;
+
+ // Create new explosion every second
+ if (t > objects.nextExplosion) {
+ objects.nextExplosion = t + 0.5 + Math.random();
+
+ const explosion = {
+ x: Math.random() * app.screen.width,
+ y: Math.random() * app.screen.height * 0.7,
+ particles: [],
+ color: Math.random() * 0xffffff,
+ born: t
+ };
+
+ // Create particles
+ for (let i = 0; i < 50; i++) {
+ const angle = (i / 50) * Math.PI * 2;
+ const speed = 2 + Math.random() * 4;
+ const particle = new PIXI.Graphics();
+ particle.circle(0, 0, 3);
+ particle.fill(explosion.color);
+ particle.x = explosion.x;
+ particle.y = explosion.y;
+ particle.vx = Math.cos(angle) * speed;
+ particle.vy = Math.sin(angle) * speed;
+
+ app.stage.addChild(particle);
+ explosion.particles.push(particle);
+ }
+
+ objects.explosions.push(explosion);
+ }
+
+ // Update explosions
+ objects.explosions = objects.explosions.filter(explosion => {
+ const age = t - explosion.born;
+
+ if (age > 3) {
+ explosion.particles.forEach(p => p.destroy());
+ return false;
+ }
+
+ explosion.particles.forEach(p => {
+ p.vx *= 0.98;
+ p.vy += 0.1; // Gravity
+ p.x += p.vx;
+ p.y += p.vy;
+ p.alpha = 1 - age / 3;
+ });
+
+ return true;
+ });
+ },
+
+ cleanup(app, objects) {
+ objects.explosions.forEach(explosion => {
+ explosion.particles.forEach(p => p.destroy());
+ });
+ }
+};
+
+// ============================================================================
+// DEMO 9: MATRIX RAIN
+// ============================================================================
+
+export const matrixRain = {
+ name: "Matrix Rain",
+ description: "Falling digital rain effect",
+
+ setup(app, state) {
+ const fontSize = 16;
+ const columns = Math.floor(app.screen.width / fontSize);
+ const drops = [];
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%^&*";
+
+ for (let i = 0; i < columns; i++) {
+ const text = new PIXI.Text('', {
+ fontFamily: 'monospace',
+ fontSize: fontSize,
+ fill: 0x00ff00
+ });
+ text.x = i * fontSize;
+ text.y = -Math.random() * app.screen.height;
+
+ app.stage.addChild(text);
+ drops.push({
+ text,
+ speed: 1 + Math.random() * 3,
+ chars: chars
+ });
+ }
+
+ return { drops };
+ },
+
+ update(app, state, objects) {
+ objects.drops.forEach(drop => {
+ drop.y = (drop.y || drop.text.y) + drop.speed;
+ drop.text.y = drop.y;
+
+ // Random character
+ if (Math.random() > 0.95) {
+ drop.text.text = drop.chars[Math.floor(Math.random() * drop.chars.length)];
+ }
+
+ // Reset to top
+ if (drop.y > app.screen.height) {
+ drop.y = -20;
+ drop.text.alpha = 1;
+ }
+
+ // Fade trail
+ drop.text.alpha = Math.max(0.1, drop.text.alpha - 0.01);
+ });
+ },
+
+ cleanup(app, objects) {
+ objects.drops.forEach(d => d.text.destroy());
+ }
+};
+
+// ============================================================================
+// DEMO 10: SOLAR SYSTEM
+// ============================================================================
+
+export const solarSystem = {
+ name: "Solar System",
+ description: "Orbiting planets around a star",
+
+ setup(app, state) {
+ const cx = app.screen.width / 2;
+ const cy = app.screen.height / 2;
+
+ // Sun
+ const sun = new PIXI.Graphics();
+ sun.circle(0, 0, 30);
+ sun.fill(0xffd700);
+ sun.x = cx;
+ sun.y = cy;
+ app.stage.addChild(sun);
+
+ // Planets
+ const planets = [
+ { radius: 60, size: 6, speed: 2.0, color: 0x8b7355 },
+ { radius: 100, size: 10, speed: 1.5, color: 0xff6347 },
+ { radius: 150, size: 12, speed: 1.0, color: 0x4169e1 },
+ { radius: 200, size: 8, speed: 0.7, color: 0xff4500 },
+ { radius: 260, size: 18, speed: 0.4, color: 0xdaa520 },
+ ];
+
+ const planetObjects = planets.map(config => {
+ const planet = new PIXI.Graphics();
+ planet.circle(0, 0, config.size);
+ planet.fill(config.color);
+ planet.config = config;
+ app.stage.addChild(planet);
+ return planet;
+ });
+
+ return { sun, planets: planetObjects, cx, cy };
+ },
+
+ update(app, state, objects) {
+ const t = state.state.time.current;
+
+ objects.planets.forEach((planet, i) => {
+ const angle = t * planet.config.speed;
+ planet.x = objects.cx + Math.cos(angle) * planet.config.radius;
+ planet.y = objects.cy + Math.sin(angle) * planet.config.radius;
+ });
+ },
+
+ cleanup(app, objects) {
+ objects.sun.destroy();
+ objects.planets.forEach(p => p.destroy());
+ }
+};
+
+// ============================================================================
+// UTILITIES
+// ============================================================================
+
+function hslToHex(h, s, l) {
+ s /= 100;
+ l /= 100;
+ const c = (1 - Math.abs(2 * l - 1)) * s;
+ const x = c * (1 - Math.abs((h / 60) % 2 - 1));
+ const m = l - c/2;
+ let r = 0, g = 0, b = 0;
+
+ if (0 <= h && h < 60) {
+ r = c; g = x; b = 0;
+ } else if (60 <= h && h < 120) {
+ r = x; g = c; b = 0;
+ } else if (120 <= h && h < 180) {
+ r = 0; g = c; b = x;
+ } else if (180 <= h && h < 240) {
+ r = 0; g = x; b = c;
+ } else if (240 <= h && h < 300) {
+ r = x; g = 0; b = c;
+ } else if (300 <= h && h < 360) {
+ r = c; g = 0; b = x;
+ }
+
+ r = Math.round((r + m) * 255);
+ g = Math.round((g + m) * 255);
+ b = Math.round((b + m) * 255);
+
+ return (r << 16) | (g << 8) | b;
+}
+
+function noise(x, y, z) {
+ return Math.sin(x + Math.cos(y)) * Math.cos(y + Math.sin(z)) * Math.sin(z + Math.cos(x));
+}
+
+// ============================================================================
+// EXPORT ALL DEMOS
+// ============================================================================
+
+export const allDemos = [
+ bouncingParticles,
+ spirograph,
+ starfield,
+ waveInterference,
+ circlePacking,
+ flowField,
+ dnaHelix,
+ fireworks,
+ matrixRain,
+ solarSystem
+];
diff --git a/web-timeplot/src/example-usage.js b/web-timeplot/src/example-usage.js
new file mode 100644
index 0000000..67eff4b
--- /dev/null
+++ b/web-timeplot/src/example-usage.js
@@ -0,0 +1,535 @@
+/**
+ * Example Usage: Complete examples of the new architecture
+ *
+ * This file demonstrates how to use the separated data/visualization architecture:
+ * - TimeSeriesPlot: Pure visualization
+ * - DataSource: Data generation/provision
+ * - Connections: Links between them
+ */
+
+import { Application } from 'pixi.js';
+import { TimeSeriesPlot } from './timeseries-plot.js';
+import {
+ SyntheticDataSource,
+ FunctionDataSource,
+ StreamingDataSource,
+ WebSocketDataSource,
+} from './data-sources.js';
+import {
+ DirectConnection,
+ BufferedConnection,
+ ConnectionManager,
+ connectSyntheticData,
+ connectFunction,
+ createConnectedPlot,
+} from './plot-connections.js';
+import {
+ TestDataFactory,
+ SineWaveGenerator,
+ PerlinNoiseGenerator,
+ ChirpGenerator,
+} from './test-data-generators.js';
+
+// ============================================================================
+// Example 1: Simple Setup - One plot, one data source
+// ============================================================================
+
+export async function example1_SimpleSetup() {
+ console.log('=== Example 1: Simple Setup ===');
+
+ // Create PixiJS app
+ const app = new Application();
+ await app.init({
+ width: 800,
+ height: 600,
+ backgroundColor: 0x1a1a26,
+ });
+ document.body.appendChild(app.canvas);
+
+ // Create plot (visualization only)
+ const plot = new TimeSeriesPlot({
+ x: 0,
+ y: 0,
+ width: 800,
+ height: 600,
+ title: 'Simple Sine Wave',
+ showGrid: true,
+ });
+ app.stage.addChild(plot.container);
+
+ // Create data source
+ const generator = TestDataFactory.createSimpleSine(30);
+ const source = new SyntheticDataSource({
+ generator: generator,
+ pointsPerLine: 100,
+ width: 800,
+ lineInterval: 100, // New line every 100ms
+ });
+
+ // Connect source to plot
+ const connection = new DirectConnection(source, plot);
+ connection.connect();
+
+ // Update plot every frame
+ app.ticker.add(() => {
+ plot.update();
+ });
+
+ return { app, plot, source, connection };
+}
+
+// ============================================================================
+// Example 2: Quick Setup Using Helper Functions
+// ============================================================================
+
+export async function example2_QuickSetup() {
+ console.log('=== Example 2: Quick Setup ===');
+
+ const app = new Application();
+ await app.init({
+ width: 800,
+ height: 600,
+ backgroundColor: 0x1a1a26,
+ });
+ document.body.appendChild(app.canvas);
+
+ // One-liner setup!
+ const { plot, source, connection } = createConnectedPlot(
+ app,
+ {
+ x: 0,
+ y: 0,
+ width: 800,
+ height: 600,
+ title: 'Quick Setup',
+ },
+ {
+ generator: TestDataFactory.createComplexPattern(30),
+ lineInterval: 100,
+ }
+ );
+
+ app.ticker.add(() => plot.update());
+
+ return { app, plot, source, connection };
+}
+
+// ============================================================================
+// Example 3: Multiple Plots with Different Data Sources
+// ============================================================================
+
+export async function example3_MultiplePlots() {
+ console.log('=== Example 3: Multiple Plots ===');
+
+ const app = new Application();
+ await app.init({
+ width: 1600,
+ height: 600,
+ backgroundColor: 0x1a1a26,
+ });
+ document.body.appendChild(app.canvas);
+
+ const width = 800;
+ const height = 600;
+
+ // Left plot: Sine wave
+ const plot1 = new TimeSeriesPlot({
+ x: 0,
+ y: 0,
+ width: width,
+ height: height,
+ title: 'Sine Wave',
+ color: 0xff6666,
+ });
+
+ // Right plot: Perlin noise
+ const plot2 = new TimeSeriesPlot({
+ x: width,
+ y: 0,
+ width: width,
+ height: height,
+ title: 'Perlin Noise',
+ color: 0x66ff66,
+ });
+
+ app.stage.addChild(plot1.container);
+ app.stage.addChild(plot2.container);
+
+ // Connect different data sources
+ const conn1 = connectSyntheticData(
+ TestDataFactory.createSimpleSine(30),
+ plot1,
+ { lineInterval: 100 }
+ );
+
+ const conn2 = connectSyntheticData(
+ TestDataFactory.createSmoothNoise(30),
+ plot2,
+ { lineInterval: 100 }
+ );
+
+ app.ticker.add(() => {
+ plot1.update();
+ plot2.update();
+ });
+
+ return { app, plots: [plot1, plot2], connections: [conn1, conn2] };
+}
+
+// ============================================================================
+// Example 4: Using Function-Based Data Source
+// ============================================================================
+
+export async function example4_FunctionSource() {
+ console.log('=== Example 4: Function Source ===');
+
+ const app = new Application();
+ await app.init({ width: 800, height: 600, backgroundColor: 0x1a1a26 });
+ document.body.appendChild(app.canvas);
+
+ const plot = new TimeSeriesPlot({
+ x: 0,
+ y: 0,
+ width: 800,
+ height: 600,
+ title: 'Custom Function',
+ });
+ app.stage.addChild(plot.container);
+
+ // Define a custom function: (x, t) => y
+ // x is normalized 0-1 across the width
+ // t is time in seconds
+ const customFunc = (x, t) => {
+ // Create an interference pattern
+ const wave1 = Math.sin(x * 10 + t * 2);
+ const wave2 = Math.sin(x * 15 - t * 3);
+ const wave3 = Math.cos(x * 8 + t * 1.5);
+ return (wave1 + wave2 + wave3) / 3;
+ };
+
+ const connection = connectFunction(customFunc, plot, {
+ lineInterval: 100,
+ amplitude: 30,
+ });
+
+ app.ticker.add(() => plot.update());
+
+ return { app, plot, connection };
+}
+
+// ============================================================================
+// Example 5: Swapping Data Sources at Runtime
+// ============================================================================
+
+export async function example5_SwappingSources() {
+ console.log('=== Example 5: Swapping Sources ===');
+
+ const app = new Application();
+ await app.init({ width: 800, height: 600, backgroundColor: 0x1a1a26 });
+ document.body.appendChild(app.canvas);
+
+ const plot = new TimeSeriesPlot({
+ x: 0,
+ y: 0,
+ width: 800,
+ height: 600,
+ title: 'Dynamic Source Switching',
+ });
+ app.stage.addChild(plot.container);
+
+ // Start with sine wave
+ let currentConnection = connectSyntheticData(
+ TestDataFactory.createSimpleSine(30),
+ plot,
+ { lineInterval: 100 }
+ );
+
+ app.ticker.add(() => plot.update());
+
+ // Function to switch to a different data source
+ const switchToSource = (generator, title) => {
+ // Disconnect current source
+ currentConnection.disconnect();
+
+ // Connect new source
+ currentConnection = connectSyntheticData(generator, plot, {
+ lineInterval: 100,
+ });
+
+ plot.setTitle(title);
+ console.log(`Switched to: ${title}`);
+ };
+
+ // Example: Switch sources every 5 seconds
+ let sourceIndex = 0;
+ const sources = [
+ { gen: TestDataFactory.createSimpleSine(30), title: 'Sine Wave' },
+ { gen: TestDataFactory.createComplexPattern(30), title: 'Complex Pattern' },
+ { gen: TestDataFactory.createSmoothNoise(30), title: 'Perlin Noise' },
+ { gen: TestDataFactory.createFrequencySweep(30), title: 'Frequency Sweep' },
+ ];
+
+ setInterval(() => {
+ sourceIndex = (sourceIndex + 1) % sources.length;
+ const source = sources[sourceIndex];
+ switchToSource(source.gen, source.title);
+ }, 5000);
+
+ return { app, plot, switchToSource };
+}
+
+// ============================================================================
+// Example 6: Streaming Data with Buffering
+// ============================================================================
+
+export async function example6_StreamingData() {
+ console.log('=== Example 6: Streaming Data ===');
+
+ const app = new Application();
+ await app.init({ width: 800, height: 600, backgroundColor: 0x1a1a26 });
+ document.body.appendChild(app.canvas);
+
+ const plot = new TimeSeriesPlot({
+ x: 0,
+ y: 0,
+ width: 800,
+ height: 600,
+ title: 'Streaming Data (Buffered)',
+ });
+ app.stage.addChild(plot.container);
+
+ // Create streaming source (emits individual points)
+ const generator = new SineWaveGenerator({
+ frequency: 2.0,
+ amplitude: 1.0,
+ sampleRate: 60,
+ });
+
+ const source = new StreamingDataSource({
+ generator: generator,
+ sampleRate: 60, // 60 points per second
+ });
+
+ // Use buffered connection to assemble points into lines
+ const connection = new BufferedConnection(source, plot, {
+ bufferSize: 100, // Buffer 100 points before creating a line
+ bufferTimeout: 1000, // Or timeout after 1 second
+ });
+ connection.connect();
+
+ app.ticker.add(() => plot.update());
+
+ return { app, plot, source, connection };
+}
+
+// ============================================================================
+// Example 7: Connection Manager (Managing Multiple Connections)
+// ============================================================================
+
+export async function example7_ConnectionManager() {
+ console.log('=== Example 7: Connection Manager ===');
+
+ const app = new Application();
+ await app.init({ width: 800, height: 600, backgroundColor: 0x1a1a26 });
+ document.body.appendChild(app.canvas);
+
+ const plot = new TimeSeriesPlot({
+ x: 0,
+ y: 0,
+ width: 800,
+ height: 600,
+ title: 'Managed Connections',
+ });
+ app.stage.addChild(plot.container);
+
+ // Create connection manager
+ const manager = new ConnectionManager();
+
+ // Add first connection
+ const source1 = new SyntheticDataSource({
+ generator: TestDataFactory.createSimpleSine(30),
+ pointsPerLine: 100,
+ width: 800,
+ lineInterval: 100,
+ });
+
+ const connId1 = manager.connect(source1, plot, { type: 'direct' });
+ console.log('Connection ID:', connId1);
+
+ app.ticker.add(() => plot.update());
+
+ // Later: disconnect and switch to different source
+ setTimeout(() => {
+ manager.disconnect(connId1);
+
+ const source2 = new SyntheticDataSource({
+ generator: TestDataFactory.createFrequencySweep(30),
+ pointsPerLine: 100,
+ width: 800,
+ lineInterval: 100,
+ });
+
+ const connId2 = manager.connect(source2, plot, { type: 'direct' });
+ plot.setTitle('Frequency Sweep');
+ console.log('Switched to connection:', connId2);
+ }, 5000);
+
+ return { app, plot, manager };
+}
+
+// ============================================================================
+// Example 8: Complete Interactive Demo
+// ============================================================================
+
+export async function example8_InteractiveDemo() {
+ console.log('=== Example 8: Interactive Demo ===');
+
+ const app = new Application();
+ await app.init({
+ width: 1600,
+ height: 800,
+ backgroundColor: 0x1a1a26,
+ });
+ document.body.appendChild(app.canvas);
+
+ // Create two plots
+ const plot1 = new TimeSeriesPlot({
+ x: 0,
+ y: 0,
+ width: 800,
+ height: 800,
+ title: 'Plot 1 - Press 1-5 to change',
+ color: 0xff6666,
+ });
+
+ const plot2 = new TimeSeriesPlot({
+ x: 800,
+ y: 0,
+ width: 800,
+ height: 800,
+ title: 'Plot 2 - Press 6-0 to change',
+ color: 0x66ff66,
+ });
+
+ app.stage.addChild(plot1.container);
+ app.stage.addChild(plot2.container);
+
+ // Connection manager
+ const manager = new ConnectionManager();
+
+ // Available data sources
+ const dataSources = {
+ sine: () => TestDataFactory.createSimpleSine(30),
+ complex: () => TestDataFactory.createComplexPattern(30),
+ noise: () => TestDataFactory.createSmoothNoise(30),
+ sweep: () => TestDataFactory.createFrequencySweep(30),
+ burst: () => TestDataFactory.createBurstySignal(30),
+ };
+
+ // Track current connections
+ let conn1Id = null;
+ let conn2Id = null;
+
+ // Helper to switch source
+ const switchSource = (plot, generatorFunc, title) => {
+ // Disconnect old connection
+ const connId = plot === plot1 ? conn1Id : conn2Id;
+ if (connId !== null) {
+ manager.disconnect(connId);
+ }
+
+ // Create new connection
+ const source = new SyntheticDataSource({
+ generator: generatorFunc(),
+ pointsPerLine: 100,
+ width: plot.width,
+ lineInterval: 100,
+ });
+
+ const newConnId = manager.connect(source, plot, { type: 'direct' });
+ plot.setTitle(title);
+
+ // Store connection ID
+ if (plot === plot1) {
+ conn1Id = newConnId;
+ } else {
+ conn2Id = newConnId;
+ }
+ };
+
+ // Initialize with default sources
+ switchSource(plot1, dataSources.sine, 'Plot 1 - Sine Wave');
+ switchSource(plot2, dataSources.complex, 'Plot 2 - Complex Pattern');
+
+ // Keyboard controls
+ window.addEventListener('keydown', (e) => {
+ switch (e.key) {
+ case '1':
+ switchSource(plot1, dataSources.sine, 'Plot 1 - Sine Wave');
+ break;
+ case '2':
+ switchSource(plot1, dataSources.complex, 'Plot 1 - Complex Pattern');
+ break;
+ case '3':
+ switchSource(plot1, dataSources.noise, 'Plot 1 - Perlin Noise');
+ break;
+ case '4':
+ switchSource(plot1, dataSources.sweep, 'Plot 1 - Frequency Sweep');
+ break;
+ case '5':
+ switchSource(plot1, dataSources.burst, 'Plot 1 - Burst Signal');
+ break;
+ case '6':
+ switchSource(plot2, dataSources.sine, 'Plot 2 - Sine Wave');
+ break;
+ case '7':
+ switchSource(plot2, dataSources.complex, 'Plot 2 - Complex Pattern');
+ break;
+ case '8':
+ switchSource(plot2, dataSources.noise, 'Plot 2 - Perlin Noise');
+ break;
+ case '9':
+ switchSource(plot2, dataSources.sweep, 'Plot 2 - Frequency Sweep');
+ break;
+ case '0':
+ switchSource(plot2, dataSources.burst, 'Plot 2 - Burst Signal');
+ break;
+ case 'g':
+ plot1.setGridVisible(!plot1.showGrid);
+ plot2.setGridVisible(!plot2.showGrid);
+ break;
+ case 'c':
+ plot1.clearData();
+ plot2.clearData();
+ break;
+ }
+ });
+
+ // Update loop
+ app.ticker.add(() => {
+ plot1.update();
+ plot2.update();
+ });
+
+ console.log('Controls:');
+ console.log(' 1-5: Change Plot 1 source');
+ console.log(' 6-0: Change Plot 2 source');
+ console.log(' G: Toggle grid');
+ console.log(' C: Clear data');
+
+ return { app, plot1, plot2, manager };
+}
+
+// ============================================================================
+// Quick Test: Run one of the examples
+// ============================================================================
+
+// Uncomment to run an example:
+// example1_SimpleSetup();
+// example2_QuickSetup();
+// example3_MultiplePlots();
+// example4_FunctionSource();
+// example5_SwappingSources();
+// example6_StreamingData();
+// example7_ConnectionManager();
+//example8_InteractiveDemo();
diff --git a/web-timeplot/src/metrics.js b/web-timeplot/src/metrics.js
new file mode 100644
index 0000000..fdda10a
--- /dev/null
+++ b/web-timeplot/src/metrics.js
@@ -0,0 +1,142 @@
+/**
+ * RollingAverage - Maintains a rolling window of values for smooth averaging
+ */
+class RollingAverage {
+ constructor(capacity) {
+ this.values = [];
+ this.capacity = capacity;
+ this.sum = 0;
+ }
+
+ push(value) {
+ if (this.values.length >= this.capacity) {
+ const old = this.values.shift();
+ this.sum -= old;
+ }
+ this.values.push(value);
+ this.sum += value;
+ }
+
+ average() {
+ return this.values.length > 0 ? this.sum / this.values.length : 0;
+ }
+
+ min() {
+ return this.values.length > 0 ? Math.min(...this.values) : 0;
+ }
+
+ max() {
+ return this.values.length > 0 ? Math.max(...this.values) : 0;
+ }
+}
+
+/**
+ * PerformanceMetrics - Tracks and analyzes frame performance
+ */
+export class PerformanceMetrics {
+ constructor(rollingWindow = 60, historyCapacity = 10000) {
+ // Rolling averages
+ this.frameTime = new RollingAverage(rollingWindow);
+ this.updateTime = new RollingAverage(rollingWindow);
+ this.renderTime = new RollingAverage(rollingWindow);
+ this.vertexCount = new RollingAverage(rollingWindow);
+ this.lineCount = new RollingAverage(rollingWindow);
+
+ // History for export
+ this.history = [];
+ this.historyCapacity = historyCapacity;
+
+ // Frame timing
+ this.frameStart = 0;
+ this.updateStart = 0;
+ this.renderStart = 0;
+
+ this.totalFrames = 0;
+ }
+
+ beginFrame() {
+ this.frameStart = performance.now();
+ }
+
+ beginUpdate() {
+ this.updateStart = performance.now();
+ }
+
+ endUpdate() {
+ const duration = performance.now() - this.updateStart;
+ return duration;
+ }
+
+ beginRender() {
+ this.renderStart = performance.now();
+ }
+
+ endRender() {
+ const duration = performance.now() - this.renderStart;
+ return duration;
+ }
+
+ endFrame(updateMs, renderMs, vertexCount, lineCount) {
+ const totalMs = performance.now() - this.frameStart;
+
+ // Update rolling averages
+ this.frameTime.push(totalMs);
+ this.updateTime.push(updateMs);
+ this.renderTime.push(renderMs);
+ this.vertexCount.push(vertexCount);
+ this.lineCount.push(lineCount);
+
+ // Store in history
+ const record = {
+ frame: this.totalFrames,
+ totalMs,
+ updateMs,
+ renderMs,
+ vertexCount,
+ lineCount,
+ fps: totalMs > 0 ? 1000 / totalMs : 0,
+ };
+
+ if (this.history.length >= this.historyCapacity) {
+ this.history.shift();
+ }
+ this.history.push(record);
+
+ this.totalFrames++;
+ }
+
+ getFPS() {
+ const avg = this.frameTime.average();
+ return avg > 0 ? 1000 / avg : 0;
+ }
+
+ getMinFPS() {
+ const max = this.frameTime.max();
+ return max > 0 ? 1000 / max : 0;
+ }
+
+ getMaxFPS() {
+ const min = this.frameTime.min();
+ return min > 0 ? 1000 / min : 0;
+ }
+
+ formatSummary() {
+ return `FPS: ${this.getFPS().toFixed(1)} (min: ${this.getMinFPS().toFixed(1)}, max: ${this.getMaxFPS().toFixed(1)}) | ` +
+ `Frame: ${this.frameTime.average().toFixed(2)}ms | ` +
+ `Update: ${this.updateTime.average().toFixed(2)}ms | ` +
+ `Render: ${this.renderTime.average().toFixed(2)}ms | ` +
+ `Vertices: ${Math.round(this.vertexCount.average())} | ` +
+ `Lines: ${Math.round(this.lineCount.average())}`;
+ }
+
+ exportToCSV() {
+ let csv = 'frame,total_ms,update_ms,render_ms,vertex_count,line_count,fps\n';
+
+ for (const record of this.history) {
+ csv += `${record.frame},${record.totalMs},${record.updateMs},${record.renderMs},` +
+ `${record.vertexCount},${record.lineCount},${record.fps}\n`;
+ }
+
+ return csv;
+ }
+}
diff --git a/web-timeplot/src/plot-connections.js b/web-timeplot/src/plot-connections.js
new file mode 100644
index 0000000..0e96dd8
--- /dev/null
+++ b/web-timeplot/src/plot-connections.js
@@ -0,0 +1,392 @@
+/**
+ * Plot Connections - Links data sources to visualization plots
+ *
+ * This module manages the connection between data sources and plots,
+ * handling buffering, timing, and data flow.
+ *
+ * Connection Types:
+ * - DirectConnection: Lines from source → plot (no buffering)
+ * - BufferedConnection: Points → buffer → lines → plot
+ * - SynchronizedConnection: Multiple sources → synchronized output
+ */
+
+/**
+ * Base connection class
+ */
+class PlotConnection {
+ constructor(source, plot, config = {}) {
+ this.source = source;
+ this.plot = plot;
+ this.config = config;
+ this.isActive = false;
+ this.subscriptions = [];
+ }
+
+ /**
+ * Activate the connection - start data flow
+ */
+ connect() {
+ if (this.isActive) return;
+ this.isActive = true;
+ this.setupSubscriptions();
+ this.source.start();
+ }
+
+ /**
+ * Deactivate the connection - stop data flow
+ */
+ disconnect() {
+ if (!this.isActive) return;
+ this.isActive = false;
+ this.cleanup();
+ this.source.stop();
+ }
+
+ /**
+ * Setup event subscriptions (override in subclasses)
+ */
+ setupSubscriptions() {
+ throw new Error('setupSubscriptions() must be implemented by subclass');
+ }
+
+ /**
+ * Cleanup subscriptions
+ */
+ cleanup() {
+ this.subscriptions.forEach(unsub => unsub());
+ this.subscriptions = [];
+ }
+}
+
+/**
+ * Direct connection - passes lines directly from source to plot
+ * Use when source emits complete lines of data
+ */
+export class DirectConnection extends PlotConnection {
+ setupSubscriptions() {
+ const unsubLine = this.source.on('line', (data) => {
+ this.plot.addLine(data.points, data.metadata);
+ });
+
+ const unsubError = this.source.on('error', (data) => {
+ console.error('[DirectConnection] Source error:', data.error);
+ });
+
+ this.subscriptions.push(unsubLine, unsubError);
+ }
+}
+
+/**
+ * Buffered connection - buffers individual points into lines
+ * Use when source emits individual data points that need to be assembled
+ */
+export class BufferedConnection extends PlotConnection {
+ constructor(source, plot, config = {}) {
+ super(source, plot, config);
+ this.buffer = [];
+ this.bufferSize = config.bufferSize || 100;
+ this.bufferTimeout = config.bufferTimeout || 1000; // ms
+ this.lastFlush = Date.now();
+ this.flushHandle = null;
+
+ // Start auto-flush timer
+ if (config.autoFlush !== false) {
+ this.startAutoFlush();
+ }
+ }
+
+ setupSubscriptions() {
+ const unsubPoint = this.source.on('point', (data) => {
+ this.addToBuffer(data);
+ });
+
+ const unsubError = this.source.on('error', (data) => {
+ console.error('[BufferedConnection] Source error:', data.error);
+ });
+
+ this.subscriptions.push(unsubPoint, unsubError);
+ }
+
+ addToBuffer(data) {
+ this.buffer.push(data);
+
+ // Flush if buffer is full
+ if (this.buffer.length >= this.bufferSize) {
+ this.flush();
+ }
+ }
+
+ flush() {
+ if (this.buffer.length === 0) return;
+
+ // Convert buffer to line points
+ const points = this.buffer.map((data, idx) => {
+ const x = (idx / this.buffer.length) * this.plot.width;
+ return { x, y: data.value };
+ });
+
+ this.plot.addLine(points, {
+ timestamp: this.lastFlush,
+ pointCount: this.buffer.length,
+ });
+
+ this.buffer = [];
+ this.lastFlush = Date.now();
+ }
+
+ startAutoFlush() {
+ this.flushHandle = setInterval(() => {
+ const timeSinceLastFlush = Date.now() - this.lastFlush;
+ if (timeSinceLastFlush >= this.bufferTimeout && this.buffer.length > 0) {
+ this.flush();
+ }
+ }, 100); // Check every 100ms
+ }
+
+ cleanup() {
+ super.cleanup();
+ if (this.flushHandle) {
+ clearInterval(this.flushHandle);
+ this.flushHandle = null;
+ }
+ }
+}
+
+/**
+ * Synchronized connection - synchronizes multiple sources to one plot
+ * Useful for combining multiple data streams
+ */
+export class SynchronizedConnection extends PlotConnection {
+ constructor(sources, plot, config = {}) {
+ super(null, plot, config); // No single source
+ this.sources = sources;
+ this.syncMode = config.syncMode || 'wait-for-all'; // 'wait-for-all', 'first-available'
+ this.lineBuffers = new Map(); // sourceId => latest line
+ }
+
+ connect() {
+ if (this.isActive) return;
+ this.isActive = true;
+
+ this.sources.forEach((source, idx) => {
+ const unsubLine = source.on('line', (data) => {
+ this.handleSourceLine(idx, data);
+ });
+
+ const unsubError = source.on('error', (data) => {
+ console.error(`[SynchronizedConnection] Source ${idx} error:`, data.error);
+ });
+
+ this.subscriptions.push(unsubLine, unsubError);
+ source.start();
+ });
+ }
+
+ disconnect() {
+ if (!this.isActive) return;
+ this.isActive = false;
+ this.cleanup();
+ this.sources.forEach(source => source.stop());
+ }
+
+ handleSourceLine(sourceIdx, data) {
+ this.lineBuffers.set(sourceIdx, data);
+
+ if (this.syncMode === 'wait-for-all') {
+ // Wait until we have data from all sources
+ if (this.lineBuffers.size === this.sources.length) {
+ this.emitSynchronized();
+ }
+ } else if (this.syncMode === 'first-available') {
+ // Emit immediately
+ this.plot.addLine(data.points, {
+ ...data.metadata,
+ sourceIdx,
+ });
+ }
+ }
+
+ emitSynchronized() {
+ // For now, just emit the first source's line
+ // Could implement more sophisticated merging
+ const firstLine = this.lineBuffers.get(0);
+ if (firstLine) {
+ this.plot.addLine(firstLine.points, firstLine.metadata);
+ }
+ this.lineBuffers.clear();
+ }
+}
+
+/**
+ * Connection Manager - manages multiple connections
+ */
+export class ConnectionManager {
+ constructor() {
+ this.connections = new Map(); // connectionId => connection
+ this.nextId = 0;
+ }
+
+ /**
+ * Create and register a connection
+ * @returns {number} connectionId
+ */
+ connect(source, plot, config = {}) {
+ const type = config.type || 'direct';
+ let connection;
+
+ switch (type) {
+ case 'direct':
+ connection = new DirectConnection(source, plot, config);
+ break;
+ case 'buffered':
+ connection = new BufferedConnection(source, plot, config);
+ break;
+ case 'synchronized':
+ connection = new SynchronizedConnection(source, plot, config);
+ break;
+ default:
+ throw new Error(`Unknown connection type: ${type}`);
+ }
+
+ const id = this.nextId++;
+ this.connections.set(id, connection);
+ connection.connect();
+
+ return id;
+ }
+
+ /**
+ * Disconnect and remove a connection
+ */
+ disconnect(connectionId) {
+ const connection = this.connections.get(connectionId);
+ if (connection) {
+ connection.disconnect();
+ this.connections.delete(connectionId);
+ }
+ }
+
+ /**
+ * Disconnect all connections
+ */
+ disconnectAll() {
+ this.connections.forEach(connection => connection.disconnect());
+ this.connections.clear();
+ }
+
+ /**
+ * Get statistics about connections
+ */
+ getStats() {
+ return {
+ activeConnections: this.connections.size,
+ connections: Array.from(this.connections.entries()).map(([id, conn]) => ({
+ id,
+ isActive: conn.isActive,
+ type: conn.constructor.name,
+ })),
+ };
+ }
+}
+
+/**
+ * Helper functions for common connection patterns
+ */
+
+/**
+ * Connect a synthetic data source to a plot
+ * @param {DataGenerator} generator - Test data generator instance
+ * @param {TimeSeriesPlot} plot - Plot to display data
+ * @param {Object} config - Configuration options
+ * @returns {DirectConnection} The connection instance
+ */
+export function connectSyntheticData(generator, plot, config = {}) {
+ const { SyntheticDataSource } = require('./data-sources.js');
+
+ const source = new SyntheticDataSource({
+ generator,
+ pointsPerLine: config.pointsPerLine || 100,
+ width: plot.width,
+ lineInterval: config.lineInterval || 100,
+ });
+
+ const connection = new DirectConnection(source, plot, config);
+ connection.connect();
+
+ return connection;
+}
+
+/**
+ * Connect a function-based source to a plot
+ * @param {Function} func - Function (x, t) => y
+ * @param {TimeSeriesPlot} plot - Plot to display data
+ * @param {Object} config - Configuration options
+ * @returns {DirectConnection} The connection instance
+ */
+export function connectFunction(func, plot, config = {}) {
+ const { FunctionDataSource } = require('./data-sources.js');
+
+ const source = new FunctionDataSource({
+ func,
+ pointsPerLine: config.pointsPerLine || 100,
+ width: plot.width,
+ amplitude: config.amplitude || 30,
+ lineInterval: config.lineInterval || 100,
+ });
+
+ const connection = new DirectConnection(source, plot, config);
+ connection.connect();
+
+ return connection;
+}
+
+/**
+ * Connect a streaming source to a plot with buffering
+ * @param {DataGenerator} generator - Test data generator instance
+ * @param {TimeSeriesPlot} plot - Plot to display data
+ * @param {Object} config - Configuration options
+ * @returns {BufferedConnection} The connection instance
+ */
+export function connectStreamingData(generator, plot, config = {}) {
+ const { StreamingDataSource } = require('./data-sources.js');
+
+ const source = new StreamingDataSource({
+ generator,
+ sampleRate: config.sampleRate || 60,
+ });
+
+ const connection = new BufferedConnection(source, plot, {
+ bufferSize: config.bufferSize || 100,
+ bufferTimeout: config.bufferTimeout || 1000,
+ });
+ connection.connect();
+
+ return connection;
+}
+
+/**
+ * Quick setup: Create a plot with a data source in one call
+ * @param {Application} app - PixiJS application
+ * @param {Object} plotConfig - Plot configuration
+ * @param {Object} sourceConfig - Source configuration
+ * @returns {Object} {plot, source, connection}
+ */
+export function createConnectedPlot(app, plotConfig, sourceConfig) {
+ const { TimeSeriesPlot } = require('./timeseries-plot.js');
+ const { SyntheticDataSource } = require('./data-sources.js');
+
+ const plot = new TimeSeriesPlot(plotConfig);
+ app.stage.addChild(plot.container);
+
+ const source = new SyntheticDataSource({
+ generator: sourceConfig.generator,
+ pointsPerLine: plotConfig.width / 8, // Default: ~8 pixels per point
+ width: plotConfig.width,
+ lineInterval: sourceConfig.lineInterval || 100,
+ });
+
+ const connection = new DirectConnection(source, plot);
+ connection.connect();
+
+ return { plot, source, connection };
+}
diff --git a/web-timeplot/src/plot/timeplot-view.js b/web-timeplot/src/plot/timeplot-view.js
index 9f00b29..ce90a1f 100644
--- a/web-timeplot/src/plot/timeplot-view.js
+++ b/web-timeplot/src/plot/timeplot-view.js
@@ -1,4 +1,5 @@
import { Application, Container, Graphics, Text } from 'pixi.js';
+import { formatDuration, formatValue, formatWallClock } from '../utils-format.js';
function clamp(value, min, max) {
return Math.min(max, Math.max(min, value));
@@ -11,17 +12,25 @@ function roundRect(graphics, x, y, width, height, radius, fill, stroke) {
}
export class TimeplotView {
- constructor({ host, onHover }) {
+ constructor({ host, panelId = 'primary', title = 'Vertical plot', subtitle = null, showReadouts = true, lineColor = 0x9fd1ff, pointColor = 0xe7f2ff }) {
this.host = host;
- this.onHover = onHover;
+ this.panelId = panelId;
+ this.panelTitle = title;
+ this.panelSubtitle = subtitle;
+ this.showReadouts = showReadouts;
+ this.lineColor = lineColor;
+ this.pointColor = pointColor;
this.app = new Application();
this.container = new Container();
this.background = new Graphics();
this.grid = new Graphics();
+ this.axes = new Graphics();
this.line = new Graphics();
this.points = new Graphics();
this.crosshair = new Graphics();
this.overlay = new Container();
+ this.readoutBackground = new Graphics();
+ this.axisLabelLayer = new Container();
this.titleText = new Text({
text: 'Plot viewport',
style: {
@@ -38,10 +47,38 @@ export class TimeplotView {
fontSize: 12,
},
});
+ this.realTimeText = new Text({
+ text: '',
+ style: {
+ fill: 0xe8eef7,
+ fontFamily: 'IBM Plex Mono, monospace',
+ fontSize: 11,
+ },
+ });
+ this.plotTimeText = new Text({
+ text: '',
+ style: {
+ fill: 0xe8eef7,
+ fontFamily: 'IBM Plex Mono, monospace',
+ fontSize: 11,
+ },
+ });
+ this.axisTitleText = new Text({
+ text: '',
+ style: {
+ fill: 0x90a0b7,
+ fontFamily: 'Inter, sans-serif',
+ fontSize: 10,
+ fontWeight: '600',
+ letterSpacing: 1.5,
+ },
+ });
this.screenPoints = [];
this.bounds = { width: 100, height: 100 };
this.hoverRadiusPx = 20;
this.pointer = null;
+ this.lastPointerEventAt = 0;
+ this.axisLabels = [];
}
async init() {
@@ -57,12 +94,18 @@ export class TimeplotView {
this.app.stage.addChild(this.container);
this.container.addChild(this.background);
this.container.addChild(this.grid);
+ this.container.addChild(this.axes);
this.container.addChild(this.line);
this.container.addChild(this.points);
this.container.addChild(this.crosshair);
this.container.addChild(this.overlay);
+ this.overlay.addChild(this.readoutBackground);
+ this.overlay.addChild(this.axisLabelLayer);
this.overlay.addChild(this.titleText);
this.overlay.addChild(this.subtitleText);
+ this.overlay.addChild(this.realTimeText);
+ this.overlay.addChild(this.plotTimeText);
+ this.overlay.addChild(this.axisTitleText);
this.host.appendChild(this.app.canvas);
this.attachPointerListeners();
@@ -72,8 +115,7 @@ export class TimeplotView {
attachPointerListeners() {
this.host.addEventListener('pointerleave', () => {
this.pointer = null;
- this.crosshair.clear();
- this.onHover(null);
+ this.lastPointerEventAt = performance.now();
});
this.host.addEventListener('pointermove', (event) => {
@@ -82,6 +124,7 @@ export class TimeplotView {
x: event.clientX - rect.left,
y: event.clientY - rect.top,
};
+ this.lastPointerEventAt = performance.now();
});
}
@@ -95,13 +138,211 @@ export class TimeplotView {
render(state, points) {
this.resize();
this.renderFrame(state, points);
- this.renderHover(state);
+ this.clearHover();
+ }
+
+ clearHover() {
+ this.crosshair.clear();
+ }
+
+ getHoverCandidate() {
+ if (!this.pointer || this.screenPoints.length === 0) {
+ return null;
+ }
+
+ let nearestPoint = null;
+ let nearestDistance = Infinity;
+
+ for (const point of this.screenPoints) {
+ const dx = point.x - this.pointer.x;
+ const dy = point.y - this.pointer.y;
+ const distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < nearestDistance) {
+ nearestPoint = point;
+ nearestDistance = distance;
+ }
+ }
+
+ if (!nearestPoint || nearestDistance > this.hoverRadiusPx) {
+ return null;
+ }
+
+ return {
+ panelId: this.panelId,
+ point: nearestPoint,
+ x: clamp(nearestPoint.x, 0, this.bounds.width),
+ y: clamp(nearestPoint.y, 0, this.bounds.height),
+ pointerX: this.pointer.x,
+ pointerY: this.pointer.y,
+ distance: nearestDistance,
+ lastPointerEventAt: this.lastPointerEventAt,
+ };
+ }
+
+ hasPointer() {
+ return this.pointer !== null;
+ }
+
+ findNearestScreenPointByTime(timeMs) {
+ if (this.screenPoints.length === 0) {
+ return null;
+ }
+
+ let nearestPoint = null;
+ let nearestDelta = Infinity;
+
+ for (const point of this.screenPoints) {
+ const delta = Math.abs(point.timeMs - timeMs);
+ if (delta < nearestDelta) {
+ nearestPoint = point;
+ nearestDelta = delta;
+ }
+ }
+
+ return nearestPoint;
+ }
+
+ renderLinkedHover(hoverPoint) {
+ this.crosshair.clear();
+
+ if (!hoverPoint) {
+ return;
+ }
+
+ const x = clamp(hoverPoint.x, 0, this.bounds.width);
+ const y = clamp(hoverPoint.y, 0, this.bounds.height);
+
+ this.crosshair.moveTo(x, 0);
+ this.crosshair.lineTo(x, this.bounds.height);
+ this.crosshair.moveTo(0, y);
+ this.crosshair.lineTo(this.bounds.width, y);
+ this.crosshair.stroke({ color: 0x8cb8ff, width: 1, alpha: 0.24 });
+ this.crosshair.rect(x - 4, y - 4, 8, 8);
+ this.crosshair.stroke({ color: 0xffffff, width: 1.5, alpha: 0.95 });
+ }
+
+ ensureAxisLabelCount(count) {
+ while (this.axisLabels.length < count) {
+ const label = new Text({
+ text: '',
+ style: {
+ fill: 0x90a0b7,
+ fontFamily: 'IBM Plex Mono, monospace',
+ fontSize: 10,
+ },
+ });
+ this.axisLabels.push(label);
+ this.axisLabelLayer.addChild(label);
+ }
+
+ while (this.axisLabels.length > count) {
+ const label = this.axisLabels.pop();
+ this.axisLabelLayer.removeChild(label);
+ label.destroy();
+ }
+ }
+
+ renderAxes({ padding, plotWidth, plotHeight, minTime, maxTime, minValue, maxValue, width }) {
+ const axisColor = 0x3e4c5f;
+ const tickColor = 0x4f627a;
+ const timeTickCount = 5;
+ const valueTickCount = 5;
+ const labels = [];
+
+ this.axes.clear();
+ this.axes.moveTo(padding.left, padding.top);
+ this.axes.lineTo(padding.left, padding.top + plotHeight);
+ this.axes.lineTo(padding.left + plotWidth, padding.top + plotHeight);
+ this.axes.stroke({ color: axisColor, width: 1, alpha: 1 });
+
+ for (let index = 0; index < timeTickCount; index += 1) {
+ const ratio = timeTickCount === 1 ? 0 : index / (timeTickCount - 1);
+ const y = padding.top + ratio * plotHeight;
+ const timeMs = minTime + ratio * (maxTime - minTime);
+
+ this.axes.moveTo(padding.left - 8, y);
+ this.axes.lineTo(padding.left, y);
+ this.axes.stroke({ color: tickColor, width: 1, alpha: 1 });
+
+ labels.push({
+ text: formatDuration(timeMs),
+ x: 14,
+ y: y - 7,
+ anchorX: 0,
+ });
+ }
+
+ for (let index = 0; index < valueTickCount; index += 1) {
+ const ratio = valueTickCount === 1 ? 0 : index / (valueTickCount - 1);
+ const x = padding.left + ratio * plotWidth;
+ const value = minValue + ratio * (maxValue - minValue);
+
+ this.axes.moveTo(x, padding.top + plotHeight);
+ this.axes.lineTo(x, padding.top + plotHeight + 8);
+ this.axes.stroke({ color: tickColor, width: 1, alpha: 1 });
+
+ labels.push({
+ text: formatValue(value),
+ x,
+ y: padding.top + plotHeight + 10,
+ anchorX: 0.5,
+ });
+ }
+
+ this.ensureAxisLabelCount(labels.length);
+ labels.forEach((config, index) => {
+ const label = this.axisLabels[index];
+ label.text = config.text;
+ label.x = config.x;
+ label.y = config.y;
+ label.anchor.set(config.anchorX, 0);
+ });
+
+ this.axisTitleText.text = 'TIME';
+ this.axisTitleText.x = 18;
+ this.axisTitleText.y = padding.top - 18;
+ this.axisTitleText.rotation = 0;
+
+ this.axes.moveTo(padding.left + plotWidth, padding.top + plotHeight);
+ this.axes.lineTo(width - 14, padding.top + plotHeight);
+ this.axes.stroke({ color: 0x202a35, width: 1, alpha: 1 });
+ }
+
+ renderReadouts(state, width) {
+ if (!this.showReadouts) {
+ this.readoutBackground.clear();
+ this.realTimeText.text = '';
+ this.plotTimeText.text = '';
+ return;
+ }
+
+ const boxWidth = 168;
+ const boxHeight = 22;
+ const gap = 6;
+ const left = width - boxWidth - 18;
+ const top = 14;
+
+ this.readoutBackground.clear();
+ this.readoutBackground.rect(left, top, boxWidth, boxHeight);
+ this.readoutBackground.fill({ color: 0x10161d, alpha: 1 });
+ this.readoutBackground.stroke({ color: 0x2f3c4d, width: 1, alpha: 1 });
+ this.readoutBackground.rect(left, top + boxHeight + gap, boxWidth, boxHeight);
+ this.readoutBackground.fill({ color: 0x10161d, alpha: 1 });
+ this.readoutBackground.stroke({ color: 0x2f3c4d, width: 1, alpha: 1 });
+
+ this.realTimeText.text = `REAL ${formatWallClock(state.time.realNowMs)}`;
+ this.realTimeText.x = left + 10;
+ this.realTimeText.y = top + 5;
+
+ this.plotTimeText.text = `PLOT ${formatDuration(state.time.plotTimeMs)}`;
+ this.plotTimeText.x = left + 10;
+ this.plotTimeText.y = top + boxHeight + gap + 5;
}
renderFrame(state, points) {
const width = this.bounds.width;
const height = this.bounds.height;
- const padding = { top: 68, right: 24, bottom: 28, left: 52 };
+ const padding = { top: 72, right: 28, bottom: 46, left: 88 };
const plotWidth = Math.max(10, width - padding.left - padding.right);
const plotHeight = Math.max(10, height - padding.top - padding.bottom);
const minTime = state.time.plotTimeMs - state.plot.windowDurationMs;
@@ -116,38 +357,48 @@ export class TimeplotView {
0,
width,
height,
- 24,
- { color: 0x050c16, alpha: 1 },
- { color: 0x22344f, width: 1 },
+ 6,
+ { color: 0x05070b, alpha: 1 },
+ { color: 0x2c3b4d, width: 1 },
);
this.grid.clear();
if (state.plot.showGrid) {
- const gridColor = 0x1d3555;
- for (let x = 0; x <= 8; x += 1) {
- const px = padding.left + (plotWidth * x) / 8;
+ const gridColor = 0x21344a;
+ for (let x = 0; x <= 6; x += 1) {
+ const px = padding.left + (plotWidth * x) / 6;
this.grid.moveTo(px, padding.top);
this.grid.lineTo(px, padding.top + plotHeight);
- this.grid.stroke({ color: gridColor, width: 1, alpha: 0.65 });
+ this.grid.stroke({ color: gridColor, width: 1, alpha: 0.85 });
}
- for (let y = 0; y <= 6; y += 1) {
- const py = padding.top + (plotHeight * y) / 6;
+ for (let y = 0; y <= 8; y += 1) {
+ const py = padding.top + (plotHeight * y) / 8;
this.grid.moveTo(padding.left, py);
this.grid.lineTo(padding.left + plotWidth, py);
- this.grid.stroke({ color: gridColor, width: 1, alpha: 0.65 });
+ this.grid.stroke({ color: gridColor, width: 1, alpha: 0.85 });
}
}
+ this.renderAxes({
+ padding,
+ plotWidth,
+ plotHeight,
+ minTime,
+ maxTime,
+ minValue,
+ maxValue,
+ width,
+ });
+
this.line.clear();
this.points.clear();
this.screenPoints = [];
if (points.length > 0) {
points.forEach((point, index) => {
- const x = padding.left + ((point.timeMs - minTime) / (maxTime - minTime)) * plotWidth;
- const normalizedValue = (point.value - minValue) / valueSpan;
- const y = padding.top + (1 - normalizedValue) * plotHeight;
+ const x = padding.left + ((point.value - minValue) / valueSpan) * plotWidth;
+ const y = padding.top + ((point.timeMs - minTime) / (maxTime - minTime)) * plotHeight;
this.screenPoints.push({ ...point, x, y });
@@ -159,73 +410,30 @@ export class TimeplotView {
});
this.line.stroke({
- color: 0x7af0ff,
- width: 2.25,
- alpha: 0.95,
- cap: 'round',
- join: 'round',
+ color: this.lineColor,
+ width: 2,
+ alpha: 0.96,
+ cap: 'square',
+ join: 'miter',
});
if (state.plot.showPoints) {
for (const point of this.screenPoints) {
- this.points.circle(point.x, point.y, 2.5);
- this.points.fill({ color: 0xc4f8ff, alpha: 0.95 });
+ this.points.rect(point.x - 2, point.y - 2, 4, 4);
+ this.points.fill({ color: this.pointColor, alpha: 0.92 });
}
}
}
- this.titleText.text = 'TimePlot viewport';
- this.titleText.x = 18;
- this.titleText.y = 16;
+ this.titleText.text = this.panelTitle;
+ this.titleText.x = 20;
+ this.titleText.y = 14;
- this.subtitleText.text = `${state.source.preset} • ${state.source.sampleRateHz} Hz • ${points.length} visible points`;
- this.subtitleText.x = 18;
- this.subtitleText.y = 38;
- }
+ this.subtitleText.text = this.panelSubtitle ?? `value → ${state.source.preset} · ${state.source.sampleRateHz} hz · time ↓`;
+ this.subtitleText.x = 20;
+ this.subtitleText.y = 36;
- renderHover(state) {
- this.crosshair.clear();
-
- if (!this.pointer || this.screenPoints.length === 0) {
- this.onHover(null);
- return;
- }
-
- let nearestPoint = null;
- let nearestDistance = Infinity;
-
- for (const point of this.screenPoints) {
- const dx = point.x - this.pointer.x;
- const dy = point.y - this.pointer.y;
- const distance = Math.sqrt(dx * dx + dy * dy);
- if (distance < nearestDistance) {
- nearestPoint = point;
- nearestDistance = distance;
- }
- }
-
- if (!nearestPoint || nearestDistance > this.hoverRadiusPx) {
- this.onHover(null);
- return;
- }
-
- const x = clamp(nearestPoint.x, 0, this.bounds.width);
- const y = clamp(nearestPoint.y, 0, this.bounds.height);
-
- this.crosshair.moveTo(x, 0);
- this.crosshair.lineTo(x, this.bounds.height);
- this.crosshair.moveTo(0, y);
- this.crosshair.lineTo(this.bounds.width, y);
- this.crosshair.stroke({ color: 0x6ea8ff, width: 1, alpha: 0.22 });
- this.crosshair.circle(x, y, 5);
- this.crosshair.stroke({ color: 0xffffff, width: 2, alpha: 0.95 });
-
- this.onHover({
- x,
- y,
- point: nearestPoint,
- paused: state.time.paused,
- });
+ this.renderReadouts(state, width);
}
destroy() {
diff --git a/web-timeplot/src/state.js b/web-timeplot/src/state.js
new file mode 100644
index 0000000..53d8279
--- /dev/null
+++ b/web-timeplot/src/state.js
@@ -0,0 +1,420 @@
+/**
+ * StateManager - Centralized state management with Proxy-based reactivity
+ *
+ * Usage:
+ * state.time.speed = 2.0 // automatically emits events
+ * state.on('time.speed', (value) => console.log('Speed changed:', value))
+ * state.on('time.*', (change) => console.log('Time domain changed:', change))
+ *
+ * State Domains:
+ * - userPrefs: showGrid, showMetrics, theme, etc.
+ * - uiConfig: active panels, layout, dimensions
+ * - time: current time, speed, paused state, real elapsed time
+ * - rendering: graphs, renderer info
+ * - health: framerate, service connections, db access
+ * - dataInput: sources, structure, metadata
+ * - inputActions: keyboard/mouse/gamepad action mappings
+ */
+
+// Simple EventEmitter implementation
+class EventEmitter {
+ constructor() {
+ this.events = new Map();
+ }
+
+ on(event, callback) {
+ if (!this.events.has(event)) {
+ this.events.set(event, []);
+ }
+ this.events.get(event).push(callback);
+
+ // Return unsubscribe function
+ return () => this.off(event, callback);
+ }
+
+ off(event, callback) {
+ if (!this.events.has(event)) return;
+ const callbacks = this.events.get(event);
+ const index = callbacks.indexOf(callback);
+ if (index > -1) {
+ callbacks.splice(index, 1);
+ }
+ }
+
+ emit(event, data) {
+ if (!this.events.has(event)) return;
+ this.events.get(event).forEach(callback => {
+ try {
+ callback(data);
+ } catch (e) {
+ console.error(`[State] Error in event handler for '${event}':`, e);
+ }
+ });
+ }
+
+ once(event, callback) {
+ const wrapper = (data) => {
+ callback(data);
+ this.off(event, wrapper);
+ };
+ this.on(event, wrapper);
+ }
+
+ clear() {
+ this.events.clear();
+ }
+}
+
+export class StateManager extends EventEmitter {
+ constructor() {
+ super();
+
+ // Internal state storage (not proxied)
+ this._state = {
+ userPrefs: {
+ showGrid: true,
+ showMetrics: true,
+ theme: 'dark',
+ rollingWindow: 60,
+ historyCapacity: 10000,
+ metricsUpdateInterval: 10,
+ },
+
+ uiConfig: {
+ activePanels: ['graph1', 'graph2'],
+ layout: 'horizontal-split',
+ canvasWidth: 0,
+ canvasHeight: 0,
+ },
+
+ time: {
+ current: 0, // Current plot time
+ realElapsed: 0, // Real time elapsed since start
+ speed: 1.0, // Time speed multiplier (0.1 to 5.0)
+ isPaused: false, // Pause state
+ startTimestamp: Date.now(), // Real timestamp when started
+ verticalScale: 1.0, // Vertical zoom for time history
+ },
+
+ rendering: {
+ rendererType: 'unknown', // 'webgpu' | 'webgl' | 'canvas'
+ frameCounter: 0,
+ // Note: graph instances are NOT stored here to avoid proxy wrapping
+ },
+
+ health: {
+ fps: 0,
+ updateMs: 0,
+ renderMs: 0,
+ vertexCount: 0,
+ lineCount: 0,
+ serviceConnections: {}, // e.g., { websocket: 'connected', mqtt: 'disconnected' }
+ },
+
+ dataInput: {
+ sources: [], // Array of data source configs
+ activeSource: null, // Currently active source
+ dataStructure: null, // Schema of incoming data
+ metadata: {}, // Additional metadata
+ },
+
+ inputActions: {
+ keyboardMap: new Map(), // Map of KeyboardEvent.code => action name
+ mouseMap: new Map(), // Map of mouse button => action name
+ actionHandlers: new Map(), // Map of action name => handler function
+ },
+ };
+
+ // Track which domains should be persisted
+ this._persistedDomains = new Set(['userPrefs']);
+
+ // Load persisted state
+ this._loadPersistedState();
+
+ // Create proxied state - this is what users interact with
+ this.state = this._createProxy(this._state, []);
+ }
+
+ /**
+ * Create a reactive Proxy that emits events on property changes
+ * @param {Object} target - The object to proxy
+ * @param {Array} path - Current property path (e.g., ['time', 'speed'])
+ * @private
+ */
+ _createProxy(target, path) {
+ // Don't proxy non-objects or special objects like Map/Set
+ if (typeof target !== 'object' || target === null) {
+ return target;
+ }
+
+ // Don't proxy Maps and Sets - they need special handling
+ if (target instanceof Map || target instanceof Set) {
+ return target;
+ }
+
+ const self = this;
+
+ return new Proxy(target, {
+ get(obj, prop) {
+ const value = obj[prop];
+
+ // Return primitives and functions as-is
+ if (typeof value !== 'object' || value === null) {
+ return value;
+ }
+
+ // Return nested objects as proxies
+ return self._createProxy(value, [...path, prop]);
+ },
+
+ set(obj, prop, value) {
+ const oldValue = obj[prop];
+
+ // Only emit if value actually changed
+ if (oldValue === value) {
+ return true;
+ }
+
+ obj[prop] = value;
+
+ // Build event path
+ const fullPath = [...path, prop];
+ const pathString = fullPath.join('.');
+ const domain = fullPath[0];
+
+ // Emit specific property change: "time.speed"
+ self.emit(pathString, {
+ path: fullPath,
+ value: value,
+ oldValue: oldValue,
+ });
+
+ // Emit domain wildcard: "time.*"
+ if (domain) {
+ self.emit(`${domain}.*`, {
+ path: fullPath,
+ property: prop,
+ value: value,
+ oldValue: oldValue,
+ });
+ }
+
+ // Emit global wildcard: "*"
+ self.emit('*', {
+ path: fullPath,
+ value: value,
+ oldValue: oldValue,
+ });
+
+ // Auto-persist certain domains
+ if (self._persistedDomains.has(domain)) {
+ self._persistDomain(domain);
+ }
+
+ return true;
+ }
+ });
+ }
+
+ // =========================================================================
+ // Persistence
+ // =========================================================================
+
+ _persistDomain(domain) {
+ try {
+ const data = this._state[domain];
+ // Convert Maps to objects for JSON serialization
+ const serializable = this._makeSerializable(data);
+ localStorage.setItem(`timeplot-${domain}`, JSON.stringify(serializable));
+ } catch (e) {
+ console.warn(`[State] Failed to persist ${domain}:`, e);
+ }
+ }
+
+ _loadPersistedState() {
+ this._persistedDomains.forEach(domain => {
+ try {
+ const saved = localStorage.getItem(`timeplot-${domain}`);
+ if (saved) {
+ const data = JSON.parse(saved);
+ // Deep merge to preserve defaults for new properties
+ this._state[domain] = this._deepMerge(this._state[domain], data);
+ }
+ } catch (e) {
+ console.warn(`[State] Failed to load ${domain}:`, e);
+ }
+ });
+ }
+
+ _makeSerializable(obj) {
+ if (obj instanceof Map) {
+ return Object.fromEntries(obj);
+ }
+ if (obj instanceof Set) {
+ return Array.from(obj);
+ }
+ if (typeof obj === 'object' && obj !== null) {
+ const result = {};
+ for (const [key, value] of Object.entries(obj)) {
+ result[key] = this._makeSerializable(value);
+ }
+ return result;
+ }
+ return obj;
+ }
+
+ _deepMerge(target, source) {
+ const result = { ...target };
+ for (const key in source) {
+ if (typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key])) {
+ result[key] = this._deepMerge(target[key] || {}, source[key]);
+ } else {
+ result[key] = source[key];
+ }
+ }
+ return result;
+ }
+
+ // =========================================================================
+ // Convenience Methods
+ // =========================================================================
+
+ /**
+ * Toggle a boolean preference
+ */
+ togglePref(key) {
+ const current = this.state.userPrefs[key];
+ if (typeof current === 'boolean') {
+ this.state.userPrefs[key] = !current;
+ }
+ }
+
+ /**
+ * Pause/resume time
+ */
+ togglePause() {
+ this.state.time.isPaused = !this.state.time.isPaused;
+ }
+
+ /**
+ * Set time speed (clamped 0.1 to 5.0)
+ */
+ setTimeSpeed(speed) {
+ this.state.time.speed = Math.max(0.1, Math.min(5.0, speed));
+ }
+
+ /**
+ * Increment time (respects pause and speed)
+ */
+ incrementTime(delta) {
+ if (this.state.time.isPaused) return;
+ this.state.time.current += delta * this.state.time.speed;
+ }
+
+ /**
+ * Update real elapsed time
+ */
+ updateRealElapsed() {
+ const elapsed = (Date.now() - this.state.time.startTimestamp) / 1000;
+ this.state.time.realElapsed = elapsed;
+ }
+
+ // =========================================================================
+ // Input Actions System
+ // =========================================================================
+
+ /**
+ * Register an input action handler
+ * @param {string} actionName - Name of the action (e.g., 'toggleGrid', 'pause')
+ * @param {Function} handler - Handler function to call
+ */
+ registerAction(actionName, handler) {
+ this.state.inputActions.actionHandlers.set(actionName, handler);
+ }
+
+ /**
+ * Map a keyboard key to an action
+ * @param {string} code - KeyboardEvent.code (e.g., 'KeyG', 'Space')
+ * @param {string} actionName - Action to trigger
+ */
+ mapKey(code, actionName) {
+ this.state.inputActions.keyboardMap.set(code, actionName);
+ }
+
+ /**
+ * Map a mouse button to an action
+ * @param {number} button - Mouse button number (0=left, 1=middle, 2=right)
+ * @param {string} actionName - Action to trigger
+ */
+ mapMouseButton(button, actionName) {
+ this.state.inputActions.mouseMap.set(button, actionName);
+ }
+
+ /**
+ * Execute an action by name
+ */
+ executeAction(actionName, event) {
+ const handler = this.state.inputActions.actionHandlers.get(actionName);
+ if (handler) {
+ handler(event);
+ } else {
+ console.warn(`[State] No handler registered for action: ${actionName}`);
+ }
+ }
+
+ /**
+ * Handle keyboard event through action system
+ */
+ handleKeyboardEvent(event) {
+ const actionName = this.state.inputActions.keyboardMap.get(event.code);
+ if (actionName) {
+ this.executeAction(actionName, event);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Handle mouse button event through action system
+ */
+ handleMouseButtonEvent(event) {
+ const actionName = this.state.inputActions.mouseMap.get(event.button);
+ if (actionName) {
+ this.executeAction(actionName, event);
+ return true;
+ }
+ return false;
+ }
+
+ // =========================================================================
+ // Data Sources
+ // =========================================================================
+
+ addDataSource(source) {
+ this.state.dataInput.sources.push(source);
+ }
+
+ removeDataSource(sourceId) {
+ const sources = this.state.dataInput.sources;
+ const index = sources.findIndex(s => s.id === sourceId);
+ if (index > -1) {
+ sources.splice(index, 1);
+ }
+ }
+
+ setActiveDataSource(sourceId) {
+ this.state.dataInput.activeSource = sourceId;
+ }
+
+ // =========================================================================
+ // Debugging
+ // =========================================================================
+
+ dump() {
+ console.log('[State] Current state:', JSON.parse(JSON.stringify(this._state)));
+ }
+
+ debugEvents() {
+ console.log('[State] Registered events:', Array.from(this.events.keys()));
+ }
+}
diff --git a/web-timeplot/src/styles.css b/web-timeplot/src/styles.css
index b56e31a..6b0477f 100644
--- a/web-timeplot/src/styles.css
+++ b/web-timeplot/src/styles.css
@@ -1,15 +1,17 @@
:root {
color-scheme: dark;
- --bg: #07111f;
- --surface: rgba(11, 24, 42, 0.86);
- --surface-strong: rgba(9, 18, 32, 0.94);
- --border: rgba(133, 168, 255, 0.18);
- --text: #eef4ff;
- --muted: #8ca3c7;
- --accent: #6ea8ff;
- --accent-strong: #7af0ff;
- --danger: #ff8c8c;
- --shadow: 0 20px 40px rgba(0, 0, 0, 0.28);
+ --bg: #0a0c10;
+ --bg-alt: #0f1319;
+ --surface: #11161d;
+ --surface-strong: #0d1117;
+ --surface-raised: #171d26;
+ --border: #28313d;
+ --border-strong: #394657;
+ --text: #edf2f7;
+ --muted: #97a3b4;
+ --accent: #9fc7ff;
+ --accent-strong: #d8e8ff;
+ --shadow: none;
font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
@@ -27,9 +29,7 @@ body,
body {
background:
- radial-gradient(circle at top left, rgba(122, 240, 255, 0.12), transparent 28%),
- radial-gradient(circle at top right, rgba(110, 168, 255, 0.14), transparent 24%),
- linear-gradient(180deg, #06101c 0%, #091423 100%);
+ linear-gradient(180deg, #080a0d 0%, #0d1015 100%);
color: var(--text);
overflow: hidden;
}
@@ -46,8 +46,8 @@ select {
grid-template-rows: auto minmax(0, 1fr);
width: 100%;
height: 100%;
- gap: 14px;
- padding: 14px;
+ gap: 10px;
+ padding: 10px;
}
.timeplot-topbar {
@@ -56,28 +56,32 @@ select {
align-items: center;
justify-content: space-between;
gap: 16px;
- padding: 14px 18px;
- border: 1px solid var(--border);
+ padding: 12px 14px;
+ border: 1px solid var(--border-strong);
background: var(--surface);
- backdrop-filter: blur(20px);
- border-radius: 18px;
+ border-radius: 4px;
box-shadow: var(--shadow);
}
.timeplot-brand {
display: flex;
flex-direction: column;
- gap: 4px;
+ gap: 2px;
}
.timeplot-title {
margin: 0;
- font-size: 1.2rem;
+ font-size: 1rem;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+ font-weight: 700;
}
.timeplot-subtitle {
color: var(--muted);
- font-size: 0.9rem;
+ font-size: 0.78rem;
+ letter-spacing: 0.04em;
+ text-transform: uppercase;
}
.timeplot-toolbar {
@@ -92,53 +96,82 @@ select {
display: flex;
align-items: center;
gap: 8px;
- padding: 8px 12px;
- background: rgba(255, 255, 255, 0.04);
- border: 1px solid rgba(255, 255, 255, 0.06);
- border-radius: 999px;
+ padding: 6px 8px;
+ background: var(--surface-raised);
+ border: 1px solid var(--border);
+ border-radius: 3px;
}
.control-group label,
.control-group span {
color: var(--muted);
- font-size: 0.85rem;
+ font-size: 0.74rem;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+}
+
+.control-group input[type='range'] {
+ width: 118px;
}
.control-group input[type='range'] {
- width: 130px;
+ accent-color: var(--accent);
}
.control-button,
.panel-toggle {
color: var(--text);
- background: rgba(255, 255, 255, 0.05);
- border: 1px solid rgba(255, 255, 255, 0.09);
- border-radius: 999px;
- padding: 8px 14px;
+ background: var(--surface);
+ border: 1px solid var(--border-strong);
+ border-radius: 2px;
+ padding: 7px 11px;
cursor: pointer;
- transition: transform 120ms ease, border-color 120ms ease, background 120ms ease;
+ transition: border-color 120ms ease, background 120ms ease, color 120ms ease;
+ text-transform: uppercase;
+ letter-spacing: 0.08em;
+ font-size: 0.72rem;
+ line-height: 1;
}
.control-button:hover,
.panel-toggle:hover {
- transform: translateY(-1px);
- border-color: rgba(122, 240, 255, 0.45);
+ border-color: var(--accent);
+ color: var(--accent-strong);
}
.control-button[data-active='true'],
.panel-toggle[data-active='true'] {
- background: linear-gradient(135deg, rgba(110, 168, 255, 0.18), rgba(122, 240, 255, 0.18));
- border-color: rgba(122, 240, 255, 0.42);
+ background: #1a2230;
+ border-color: var(--accent);
+ color: var(--accent-strong);
}
.timeplot-viewport {
position: relative;
min-height: 0;
- border-radius: 24px;
+ border-radius: 4px;
overflow: hidden;
- border: 1px solid var(--border);
- background: rgba(4, 10, 18, 0.94);
+ border: 1px solid var(--border-strong);
+ background: #06080b;
box-shadow: var(--shadow);
+ padding: 10px;
+}
+
+.timeplot-plot-grid {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
+ gap: 10px;
+ width: 100%;
+ height: 100%;
+ min-height: 0;
+}
+
+.timeplot-plot-panel {
+ position: relative;
+ min-width: 0;
+ min-height: 0;
+ border: 1px solid var(--border);
+ background: #070a0d;
}
.timeplot-canvas-host {
@@ -149,18 +182,17 @@ select {
.timeplot-sidebar {
display: flex;
flex-direction: column;
- gap: 12px;
+ gap: 10px;
min-height: 0;
overflow-y: auto;
padding-right: 2px;
}
.panel {
- border: 1px solid var(--border);
+ border: 1px solid var(--border-strong);
background: var(--surface-strong);
- border-radius: 18px;
+ border-radius: 4px;
padding: 14px;
- backdrop-filter: blur(20px);
}
.panel[hidden] {
@@ -169,26 +201,45 @@ select {
.panel h2 {
margin: 0 0 12px;
- font-size: 0.95rem;
+ font-size: 0.8rem;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+}
+
+.panel-subsection + .panel-subsection {
+ margin-top: 14px;
+ padding-top: 14px;
+ border-top: 1px solid var(--border);
+}
+
+.panel-section-title {
+ margin-bottom: 10px;
+ color: var(--accent-strong);
+ font-size: 0.72rem;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
}
.kv-list {
display: grid;
grid-template-columns: auto 1fr;
- gap: 8px 12px;
+ gap: 10px 12px;
align-items: center;
margin: 0;
}
.kv-list dt {
color: var(--muted);
- font-size: 0.84rem;
+ font-size: 0.73rem;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
}
.kv-list dd {
margin: 0;
text-align: right;
font-variant-numeric: tabular-nums;
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
}
.field-grid {
@@ -200,30 +251,85 @@ select {
display: grid;
gap: 6px;
color: var(--muted);
- font-size: 0.84rem;
+ font-size: 0.74rem;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
+}
+
+.field-grid[data-source-mode][hidden] {
+ display: none;
+}
+
+.source-meta {
+ min-height: 20px;
+ color: var(--muted);
+ font-size: 0.76rem;
+ line-height: 1.4;
+}
+
+.source-meta-error {
+ color: #ff9d9d;
+}
+
+.source-meta-status {
+ text-transform: uppercase;
+ letter-spacing: 0.06em;
+}
+
+.source-meta-status-connected {
+ color: #99e2b4;
+}
+
+.source-meta-status-connecting {
+ color: #ffd27f;
+}
+
+.source-meta-status-disconnected,
+.source-meta-status-idle {
+ color: var(--muted);
+}
+
+.source-meta-status-error {
+ color: #ff9d9d;
}
.field-grid input,
.field-grid select {
width: 100%;
- padding: 10px 12px;
- border-radius: 12px;
- border: 1px solid rgba(255, 255, 255, 0.08);
- background: rgba(255, 255, 255, 0.04);
+ padding: 9px 10px;
+ border-radius: 2px;
+ border: 1px solid var(--border);
+ background: var(--surface-raised);
color: var(--text);
}
+.field-grid input:focus,
+.field-grid select:focus {
+ outline: none;
+ border-color: var(--accent);
+}
+
.panel-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
+ color: var(--muted);
+ font-size: 0.74rem;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
}
.panel-row + .panel-row {
margin-top: 10px;
}
+.panel-row input[type='checkbox'] {
+ inline-size: 16px;
+ block-size: 16px;
+ accent-color: var(--accent);
+}
+
.muted {
color: var(--muted);
}
@@ -234,18 +340,19 @@ select {
margin: 0;
padding-left: 18px;
color: var(--muted);
+ font-size: 0.82rem;
}
.timeplot-tooltip {
position: absolute;
min-width: 180px;
padding: 10px 12px;
- border-radius: 12px;
- border: 1px solid rgba(122, 240, 255, 0.28);
- background: rgba(7, 14, 24, 0.94);
+ border-radius: 3px;
+ border: 1px solid var(--border-strong);
+ background: #0d1218;
box-shadow: var(--shadow);
pointer-events: none;
- transform: translate(14px, -50%);
+ transform: translate(12px, -50%);
z-index: 10;
}
@@ -254,16 +361,18 @@ select {
}
.timeplot-tooltip-title {
- margin-bottom: 6px;
- font-size: 0.82rem;
+ margin-bottom: 8px;
+ font-size: 0.72rem;
color: var(--accent-strong);
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
}
.timeplot-tooltip-row {
display: flex;
justify-content: space-between;
gap: 16px;
- font-size: 0.82rem;
+ font-size: 0.78rem;
}
.timeplot-tooltip-row + .timeplot-tooltip-row {
@@ -281,6 +390,11 @@ select {
grid-template-rows: auto minmax(360px, 1fr) auto;
}
+ .timeplot-plot-grid {
+ grid-template-columns: minmax(0, 1fr);
+ grid-template-rows: repeat(2, minmax(260px, 1fr));
+ }
+
.timeplot-sidebar {
overflow: visible;
}
diff --git a/web-timeplot/src/template-for-standard-site.js b/web-timeplot/src/template-for-standard-site.js
new file mode 100644
index 0000000..54aacc7
--- /dev/null
+++ b/web-timeplot/src/template-for-standard-site.js
@@ -0,0 +1,75 @@
+//import { setupRenderSystem } from './render.js';
+
+let ENVURL = "" //remote server from which to grab env
+let env = {};
+let cfg = {}; //the user config
+let dom = {
+ input: {},
+ label: {},
+ box: {}, //an info-containing box
+ icon: {},
+ info: {}
+};
+
+
+//APP START HERE
+$(document).ready(async function() {
+ console.log('asdf');
+ //the core loop of the client application
+ // 1. setup relationship with DOM and grab references to its elements
+ log('init DOM');
+ await initDOM();
+
+ log('init cfg');
+ await initCfg();
+
+ log('get env vars');
+ await getServerEnvVars();
+
+ log('init services');
+ await initServices();
+
+ //setupRenderSystem();
+
+
+});
+
+//gets user config from local storage if there is any
+function initCfg(){
+ let localCfg = localStorage.getItem('cfg');
+ if (localCfg) {
+ try {
+ cfg = JSON.parse(localCfg);
+ } catch (e) {
+ cfg = {};
+ }
+ } else {
+
+ }
+}
+
+async function getServerEnvVars(){
+ await axios.get(`${ENVURL}`).then((res)=>{
+ env = res.data;
+ //log(env);
+ }).catch((err)=>{
+ //log(err);
+ });
+ log('')
+}
+
+function initServices(){
+ //connect to websocket server
+ //grab endpoints from cfg
+}
+
+function initDOM(){
+ dom.body = $('body')[0];
+}
+
+function log(msg, lvl=1){
+ if (dom.debugInfo){
+ dom.debugInfo.innerHTML = msg; //TODO running log + timestamp
+ }
+ console.log(msg);
+} \ No newline at end of file
diff --git a/web-timeplot/src/test-data-generators.js b/web-timeplot/src/test-data-generators.js
new file mode 100644
index 0000000..02bc0ad
--- /dev/null
+++ b/web-timeplot/src/test-data-generators.js
@@ -0,0 +1,530 @@
+/**
+ * Test Data Generators - Classes for generating fake/test data patterns
+ *
+ * These generators produce various types of synthetic data for testing
+ * and visualizing the waterfall graphs with realistic patterns.
+ */
+
+/**
+ * Base class for all data generators
+ */
+class DataGenerator {
+ constructor(config = {}) {
+ this.sampleRate = config.sampleRate || 100; // Samples per second
+ this.amplitude = config.amplitude || 1.0;
+ this.offset = config.offset || 0.0;
+ this.time = 0;
+ }
+
+ /**
+ * Generate a single sample at the current time
+ * @returns {number} The generated value
+ */
+ sample() {
+ throw new Error('sample() must be implemented by subclass');
+ }
+
+ /**
+ * Generate an array of samples
+ * @param {number} count - Number of samples to generate
+ * @returns {Array<number>} Array of generated values
+ */
+ generateSamples(count) {
+ const samples = [];
+ for (let i = 0; i < count; i++) {
+ samples.push(this.sample());
+ this.time += 1 / this.sampleRate;
+ }
+ return samples;
+ }
+
+ /**
+ * Generate a line of points for waterfall display
+ * @param {number} pointCount - Number of points in the line
+ * @param {number} width - Width of the display area
+ * @returns {Array<{x: number, y: number}>} Array of points
+ */
+ generateLine(pointCount, width) {
+ const points = [];
+ const samples = this.generateSamples(pointCount);
+
+ for (let i = 0; i < pointCount; i++) {
+ const x = (i / pointCount) * width;
+ const y = samples[i] * this.amplitude + this.offset;
+ points.push({ x, y });
+ }
+
+ return points;
+ }
+
+ reset() {
+ this.time = 0;
+ }
+}
+
+/**
+ * Sine Wave Generator - Classic sinusoidal wave
+ */
+export class SineWaveGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.frequency = config.frequency || 1.0; // Hz
+ this.phase = config.phase || 0.0; // Radians
+ }
+
+ sample() {
+ const value = Math.sin(2 * Math.PI * this.frequency * this.time + this.phase);
+ return value;
+ }
+}
+
+/**
+ * Square Wave Generator - Digital-style square wave
+ */
+export class SquareWaveGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.frequency = config.frequency || 1.0;
+ this.dutyCycle = config.dutyCycle || 0.5; // 0.0 to 1.0
+ }
+
+ sample() {
+ const period = 1 / this.frequency;
+ const phase = (this.time % period) / period;
+ return phase < this.dutyCycle ? 1.0 : -1.0;
+ }
+}
+
+/**
+ * Sawtooth Wave Generator - Linear ramp wave
+ */
+export class SawtoothWaveGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.frequency = config.frequency || 1.0;
+ }
+
+ sample() {
+ const period = 1 / this.frequency;
+ const phase = (this.time % period) / period;
+ return 2 * phase - 1; // -1 to 1
+ }
+}
+
+/**
+ * Triangle Wave Generator - Linear up/down wave
+ */
+export class TriangleWaveGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.frequency = config.frequency || 1.0;
+ }
+
+ sample() {
+ const period = 1 / this.frequency;
+ const phase = (this.time % period) / period;
+ return phase < 0.5
+ ? 4 * phase - 1
+ : 3 - 4 * phase;
+ }
+}
+
+/**
+ * White Noise Generator - Random noise
+ */
+export class WhiteNoiseGenerator extends DataGenerator {
+ sample() {
+ return Math.random() * 2 - 1; // -1 to 1
+ }
+}
+
+/**
+ * Pink Noise Generator - 1/f noise (more realistic than white noise)
+ */
+export class PinkNoiseGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ // Paul Kellet's refined method
+ this.b0 = 0;
+ this.b1 = 0;
+ this.b2 = 0;
+ this.b3 = 0;
+ this.b4 = 0;
+ this.b5 = 0;
+ this.b6 = 0;
+ }
+
+ sample() {
+ const white = Math.random() * 2 - 1;
+ this.b0 = 0.99886 * this.b0 + white * 0.0555179;
+ this.b1 = 0.99332 * this.b1 + white * 0.0750759;
+ this.b2 = 0.96900 * this.b2 + white * 0.1538520;
+ this.b3 = 0.86650 * this.b3 + white * 0.3104856;
+ this.b4 = 0.55000 * this.b4 + white * 0.5329522;
+ this.b5 = -0.7616 * this.b5 - white * 0.0168980;
+ const pink = this.b0 + this.b1 + this.b2 + this.b3 + this.b4 + this.b5 + this.b6 + white * 0.5362;
+ this.b6 = white * 0.115926;
+ return pink * 0.11; // Normalize
+ }
+}
+
+/**
+ * Perlin Noise Generator - Smooth, continuous noise
+ */
+export class PerlinNoiseGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.frequency = config.frequency || 1.0;
+ this.octaves = config.octaves || 4;
+ this.persistence = config.persistence || 0.5;
+ }
+
+ // Simple 1D Perlin-like noise
+ noise(x) {
+ const i = Math.floor(x);
+ const f = x - i;
+
+ // Fade curve
+ const u = f * f * (3 - 2 * f);
+
+ // Hash function for pseudo-random gradients
+ const hash = (n) => {
+ n = (n << 13) ^ n;
+ return (1.0 - ((n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0);
+ };
+
+ return (1 - u) * hash(i) + u * hash(i + 1);
+ }
+
+ sample() {
+ let value = 0;
+ let amplitude = 1;
+ let frequency = this.frequency;
+ let maxValue = 0;
+
+ for (let i = 0; i < this.octaves; i++) {
+ value += this.noise(this.time * frequency) * amplitude;
+ maxValue += amplitude;
+ amplitude *= this.persistence;
+ frequency *= 2;
+ }
+
+ return value / maxValue;
+ }
+}
+
+/**
+ * Pulse/Spike Generator - Random spikes/pulses
+ */
+export class PulseGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.pulseRate = config.pulseRate || 0.05; // Probability per sample
+ this.pulseWidth = config.pulseWidth || 0.01; // Duration in seconds
+ this.pulseAmplitude = config.pulseAmplitude || 1.0;
+ this.currentPulse = null;
+ }
+
+ sample() {
+ // Check if we're in a pulse
+ if (this.currentPulse) {
+ if (this.time >= this.currentPulse.endTime) {
+ this.currentPulse = null;
+ } else {
+ return this.pulseAmplitude;
+ }
+ }
+
+ // Random chance to start new pulse
+ if (Math.random() < this.pulseRate) {
+ this.currentPulse = {
+ startTime: this.time,
+ endTime: this.time + this.pulseWidth,
+ };
+ return this.pulseAmplitude;
+ }
+
+ return 0;
+ }
+}
+
+/**
+ * Burst Generator - Bursts of activity with quiet periods
+ */
+export class BurstGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.burstDuration = config.burstDuration || 1.0; // Seconds
+ this.quietDuration = config.quietDuration || 2.0; // Seconds
+ this.burstFrequency = config.burstFrequency || 5.0; // Hz during burst
+ this.currentState = 'quiet';
+ this.stateStartTime = 0;
+ }
+
+ sample() {
+ const elapsed = this.time - this.stateStartTime;
+
+ // State transitions
+ if (this.currentState === 'quiet' && elapsed >= this.quietDuration) {
+ this.currentState = 'burst';
+ this.stateStartTime = this.time;
+ } else if (this.currentState === 'burst' && elapsed >= this.burstDuration) {
+ this.currentState = 'quiet';
+ this.stateStartTime = this.time;
+ }
+
+ // Generate value based on state
+ if (this.currentState === 'burst') {
+ return Math.sin(2 * Math.PI * this.burstFrequency * this.time);
+ } else {
+ return 0;
+ }
+ }
+}
+
+/**
+ * Chirp Generator - Frequency sweep signal
+ */
+export class ChirpGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.startFreq = config.startFreq || 0.5; // Hz
+ this.endFreq = config.endFreq || 10.0; // Hz
+ this.duration = config.duration || 5.0; // Seconds
+ }
+
+ sample() {
+ const t = this.time % this.duration;
+ const progress = t / this.duration;
+ const freq = this.startFreq + (this.endFreq - this.startFreq) * progress;
+ return Math.sin(2 * Math.PI * freq * t);
+ }
+}
+
+/**
+ * Composite Generator - Combine multiple generators
+ */
+export class CompositeGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.generators = config.generators || [];
+ this.weights = config.weights || this.generators.map(() => 1.0);
+ }
+
+ sample() {
+ let sum = 0;
+ let weightSum = 0;
+
+ for (let i = 0; i < this.generators.length; i++) {
+ sum += this.generators[i].sample() * this.weights[i];
+ weightSum += this.weights[i];
+ }
+
+ return weightSum > 0 ? sum / weightSum : 0;
+ }
+
+ generateSamples(count) {
+ const samples = [];
+ for (let i = 0; i < count; i++) {
+ samples.push(this.sample());
+ // Advance all child generators
+ this.generators.forEach(gen => gen.time += 1 / gen.sampleRate);
+ }
+ return samples;
+ }
+}
+
+/**
+ * FM (Frequency Modulation) Generator - One signal modulates another
+ */
+export class FMGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.carrierFreq = config.carrierFreq || 5.0; // Hz
+ this.modulatorFreq = config.modulatorFreq || 0.5; // Hz
+ this.modulationIndex = config.modulationIndex || 2.0;
+ }
+
+ sample() {
+ const modulator = Math.sin(2 * Math.PI * this.modulatorFreq * this.time);
+ const instantFreq = this.carrierFreq + this.modulationIndex * modulator;
+ return Math.sin(2 * Math.PI * instantFreq * this.time);
+ }
+}
+
+/**
+ * Exponential Decay Generator - Exponentially decaying signal
+ */
+export class ExponentialDecayGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.decayRate = config.decayRate || 1.0; // 1/seconds
+ this.oscillationFreq = config.oscillationFreq || 5.0; // Hz
+ }
+
+ sample() {
+ const envelope = Math.exp(-this.decayRate * this.time);
+ const oscillation = Math.sin(2 * Math.PI * this.oscillationFreq * this.time);
+ return envelope * oscillation;
+ }
+}
+
+/**
+ * Step Function Generator - Random walk / brownian motion
+ */
+export class RandomWalkGenerator extends DataGenerator {
+ constructor(config = {}) {
+ super(config);
+ this.stepSize = config.stepSize || 0.1;
+ this.currentValue = 0;
+ this.bounds = config.bounds || { min: -5, max: 5 };
+ }
+
+ sample() {
+ // Random step
+ const step = (Math.random() - 0.5) * this.stepSize;
+ this.currentValue += step;
+
+ // Apply bounds
+ this.currentValue = Math.max(this.bounds.min, Math.min(this.bounds.max, this.currentValue));
+
+ return this.currentValue;
+ }
+}
+
+// ============================================================================
+// Example Usage and Presets
+// ============================================================================
+
+/**
+ * Factory function to create common test scenarios
+ */
+export class TestDataFactory {
+ static createSimpleSine(amplitude = 30) {
+ return new SineWaveGenerator({
+ frequency: 2.0,
+ amplitude: amplitude,
+ sampleRate: 100,
+ });
+ }
+
+ static createNoisySine(amplitude = 30) {
+ const sine = new SineWaveGenerator({
+ frequency: 2.0,
+ amplitude: amplitude * 0.8,
+ sampleRate: 100,
+ });
+
+ const noise = new WhiteNoiseGenerator({
+ amplitude: amplitude * 0.2,
+ sampleRate: 100,
+ });
+
+ return new CompositeGenerator({
+ generators: [sine, noise],
+ weights: [1.0, 1.0],
+ });
+ }
+
+ static createComplexPattern(amplitude = 30) {
+ const low = new SineWaveGenerator({
+ frequency: 0.5,
+ amplitude: amplitude * 0.4,
+ sampleRate: 100,
+ });
+
+ const mid = new SineWaveGenerator({
+ frequency: 3.0,
+ amplitude: amplitude * 0.3,
+ sampleRate: 100,
+ });
+
+ const high = new SineWaveGenerator({
+ frequency: 8.0,
+ amplitude: amplitude * 0.2,
+ sampleRate: 100,
+ });
+
+ const noise = new PinkNoiseGenerator({
+ amplitude: amplitude * 0.1,
+ sampleRate: 100,
+ });
+
+ return new CompositeGenerator({
+ generators: [low, mid, high, noise],
+ weights: [1.0, 1.0, 1.0, 1.0],
+ });
+ }
+
+ static createBurstySignal(amplitude = 30) {
+ return new BurstGenerator({
+ amplitude: amplitude,
+ burstDuration: 0.5,
+ quietDuration: 1.5,
+ burstFrequency: 10.0,
+ sampleRate: 100,
+ });
+ }
+
+ static createSmoothNoise(amplitude = 30) {
+ return new PerlinNoiseGenerator({
+ amplitude: amplitude,
+ frequency: 2.0,
+ octaves: 3,
+ persistence: 0.5,
+ sampleRate: 100,
+ });
+ }
+
+ static createFrequencySweep(amplitude = 30) {
+ return new ChirpGenerator({
+ amplitude: amplitude,
+ startFreq: 0.5,
+ endFreq: 10.0,
+ duration: 3.0,
+ sampleRate: 100,
+ });
+ }
+
+ static createModulatedSignal(amplitude = 30) {
+ return new FMGenerator({
+ amplitude: amplitude,
+ carrierFreq: 5.0,
+ modulatorFreq: 0.3,
+ modulationIndex: 3.0,
+ sampleRate: 100,
+ });
+ }
+
+ static createRandomWalk(amplitude = 30) {
+ return new RandomWalkGenerator({
+ stepSize: 0.5,
+ bounds: { min: -amplitude, max: amplitude },
+ sampleRate: 100,
+ });
+ }
+}
+
+/**
+ * Example: How to use with WaterfallGraph
+ *
+ * // Create a generator
+ * const generator = TestDataFactory.createComplexPattern(30);
+ *
+ * // In your graph's addLine method:
+ * addLine(time, graphIdx) {
+ * const line = {
+ * points: generator.generateLine(this.pointsPerLine, this.width),
+ * yOffset: 0,
+ * color: this.generateColor(time),
+ * };
+ * this.lines.push(line);
+ * }
+ *
+ * // Or generate custom samples:
+ * const samples = generator.generateSamples(100);
+ * const points = samples.map((y, i) => ({
+ * x: (i / samples.length) * width,
+ * y: y
+ * }));
+ */
diff --git a/web-timeplot/src/timeseries-plot.js b/web-timeplot/src/timeseries-plot.js
new file mode 100644
index 0000000..e35a704
--- /dev/null
+++ b/web-timeplot/src/timeseries-plot.js
@@ -0,0 +1,277 @@
+import { Container, Graphics, Text } from 'pixi.js';
+
+/**
+ * TimeSeriesPlot - Pure visualization component for time-series data
+ *
+ * This class is responsible ONLY for displaying data, not generating it.
+ * It receives data points from external sources and renders them as a
+ * scrolling waterfall display.
+ *
+ * Architecture:
+ * - TimeSeriesPlot: Displays data (this file)
+ * - DataSource: Generates/provides data (data-sources.js)
+ * - Connection: Links sources to plots
+ */
+export class TimeSeriesPlot {
+ constructor(config) {
+ this.x = config.x || 0;
+ this.y = config.y || 0;
+ this.width = config.width || 800;
+ this.height = config.height || 600;
+ this.title = config.title || 'Time Series';
+ this.baseColor = config.color || 0xff6666;
+
+ // Container for all graphics
+ this.container = new Container();
+ this.container.x = this.x;
+ this.container.y = this.y;
+
+ // Graphics layers (order matters for rendering)
+ this.gridGraphics = new Graphics();
+ this.linesGraphics = new Graphics();
+ this.borderGraphics = new Graphics();
+
+ this.container.addChild(this.gridGraphics);
+ this.container.addChild(this.linesGraphics);
+ this.container.addChild(this.borderGraphics);
+
+ // Title
+ this.titleText = new Text({
+ text: this.title,
+ style: {
+ fontFamily: 'Arial',
+ fontSize: 18,
+ fill: 0xeeeeee,
+ }
+ });
+ this.titleText.x = 10;
+ this.titleText.y = 10;
+ this.container.addChild(this.titleText);
+
+ // Display state
+ this.lines = []; // Array of {points, yOffset, color, metadata}
+ this.maxLines = config.maxLines || 100;
+ this.showGrid = config.showGrid !== false;
+
+ // Scrolling and scaling
+ this.scrollSpeed = config.scrollSpeed || 1.0;
+ this.verticalScale = config.verticalScale || 1.0;
+
+ // Initial draw
+ this.draw();
+ }
+
+ // ========================================================================
+ // Data Input API - This is how external sources send data to the plot
+ // ========================================================================
+
+ /**
+ * Add a new line of data to the plot
+ * @param {Array<{x: number, y: number}>} points - Array of points
+ * @param {Object} metadata - Optional metadata (color, timestamp, etc.)
+ */
+ addLine(points, metadata = {}) {
+ const line = {
+ points: points,
+ yOffset: 0,
+ color: metadata.color || this.generateColor(Date.now() / 1000),
+ timestamp: metadata.timestamp || Date.now(),
+ metadata: metadata,
+ };
+
+ this.lines.push(line);
+
+ // Limit number of lines
+ if (this.lines.length > this.maxLines) {
+ this.lines.shift();
+ }
+ }
+
+ /**
+ * Add a single data point (will be buffered into a line)
+ * This is useful for streaming real-time data
+ * @param {number} timestamp - Time of the data point
+ * @param {number} value - Value at this time
+ */
+ addDataPoint(timestamp, value) {
+ // For now, this creates a single-point line
+ // In a more sophisticated version, this could buffer points
+ // until a full line is ready
+ const point = { x: this.width / 2, y: value };
+ this.addLine([point], { timestamp });
+ }
+
+ /**
+ * Clear all data from the plot
+ */
+ clearData() {
+ this.lines = [];
+ this.drawLines();
+ }
+
+ // ========================================================================
+ // Update and Rendering
+ // ========================================================================
+
+ /**
+ * Update the plot - called each frame
+ * This handles scrolling and cleanup, but NOT data generation
+ */
+ update() {
+ // Scroll existing lines down
+ this.scrollLines();
+
+ // Remove off-screen lines
+ this.lines = this.lines.filter(line => {
+ const scaledOffset = line.yOffset * this.verticalScale;
+ return scaledOffset < this.height + 50;
+ });
+
+ // Redraw
+ this.drawLines();
+ }
+
+ scrollLines() {
+ this.lines.forEach(line => {
+ line.yOffset += this.scrollSpeed;
+ });
+ }
+
+ draw() {
+ this.drawBorder();
+ this.drawGrid();
+ this.drawLines();
+ }
+
+ drawBorder() {
+ this.borderGraphics.clear();
+ this.borderGraphics.rect(0, 0, this.width, this.height);
+ this.borderGraphics.stroke({ width: 2, color: 0x606070 });
+ }
+
+ drawGrid() {
+ this.gridGraphics.clear();
+
+ if (!this.showGrid) return;
+
+ this.gridGraphics.alpha = 0.3;
+
+ const divisions = 10;
+ const color = 0x4a7a9a;
+
+ // Vertical lines
+ for (let i = 0; i <= divisions; i++) {
+ const x = (i / divisions) * this.width;
+ this.gridGraphics.moveTo(x, 0);
+ this.gridGraphics.lineTo(x, this.height);
+ this.gridGraphics.stroke({ width: 1, color });
+ }
+
+ // Horizontal lines
+ for (let i = 0; i <= divisions; i++) {
+ const y = (i / divisions) * this.height;
+ this.gridGraphics.moveTo(0, y);
+ this.gridGraphics.lineTo(this.width, y);
+ this.gridGraphics.stroke({ width: 1, color });
+ }
+ }
+
+ drawLines() {
+ this.linesGraphics.clear();
+
+ for (const line of this.lines) {
+ if (line.points.length < 2) continue;
+
+ // Apply vertical scale to y positions
+ const scaledYOffset = line.yOffset * this.verticalScale;
+
+ // Start path
+ const firstPoint = line.points[0];
+ this.linesGraphics.moveTo(firstPoint.x, firstPoint.y + scaledYOffset);
+
+ // Draw line strip
+ for (let i = 1; i < line.points.length; i++) {
+ const point = line.points[i];
+ this.linesGraphics.lineTo(point.x, point.y + scaledYOffset);
+ }
+
+ this.linesGraphics.stroke({ width: 2, color: line.color });
+ }
+ }
+
+ generateColor(time) {
+ // Cycle through colors based on time
+ const hue = (time * 0.1) % 1.0;
+ const r = Math.floor(Math.abs(Math.sin(hue * Math.PI * 2)) * 255);
+ const g = Math.floor(Math.abs(Math.sin((hue + 0.33) * Math.PI * 2)) * 255);
+ const b = Math.floor(Math.abs(Math.sin((hue + 0.66) * Math.PI * 2)) * 255);
+
+ return (r << 16) | (g << 8) | b;
+ }
+
+ // ========================================================================
+ // Configuration and Control
+ // ========================================================================
+
+ setGridVisible(visible) {
+ this.showGrid = visible;
+ this.drawGrid();
+ }
+
+ setScrollSpeed(speed) {
+ this.scrollSpeed = Math.max(0.1, Math.min(10.0, speed));
+ }
+
+ setVerticalScale(scale) {
+ this.verticalScale = Math.max(0.2, Math.min(3.0, scale));
+ }
+
+ setTitle(title) {
+ this.title = title;
+ this.titleText.text = title;
+ }
+
+ resize(x, y, width, height) {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+
+ this.container.x = x;
+ this.container.y = y;
+
+ this.draw();
+ }
+
+ // ========================================================================
+ // Statistics and Debugging
+ // ========================================================================
+
+ getVertexCount() {
+ return this.lines.reduce((sum, line) => sum + line.points.length, 0);
+ }
+
+ getLineCount() {
+ return this.lines.length;
+ }
+
+ getOldestTimestamp() {
+ if (this.lines.length === 0) return null;
+ return Math.min(...this.lines.map(l => l.timestamp));
+ }
+
+ getNewestTimestamp() {
+ if (this.lines.length === 0) return null;
+ return Math.max(...this.lines.map(l => l.timestamp));
+ }
+
+ getStats() {
+ return {
+ lineCount: this.getLineCount(),
+ vertexCount: this.getVertexCount(),
+ oldestTimestamp: this.getOldestTimestamp(),
+ newestTimestamp: this.getNewestTimestamp(),
+ timeSpan: this.getNewestTimestamp() - this.getOldestTimestamp(),
+ };
+ }
+}
diff --git a/web-timeplot/src/ui/panel-manager.js b/web-timeplot/src/ui/panel-manager.js
index 8a1b216..ad29697 100644
--- a/web-timeplot/src/ui/panel-manager.js
+++ b/web-timeplot/src/ui/panel-manager.js
@@ -15,6 +15,39 @@ function setToggleState(element, active) {
element.dataset.active = String(active);
}
+function readControlValue(element) {
+ if (element.tagName === 'SELECT') {
+ return element.value;
+ }
+
+ if (element instanceof HTMLInputElement) {
+ if (element.type === 'checkbox') {
+ return element.checked;
+ }
+
+ if (element.type === 'number' || element.type === 'range') {
+ return Number(element.value);
+ }
+
+ return element.value;
+ }
+
+ return element.value;
+}
+
+function syncControlValue(element, value) {
+ if (!element || document.activeElement === element) {
+ return;
+ }
+
+ if (element instanceof HTMLInputElement && element.type === 'checkbox') {
+ element.checked = Boolean(value);
+ return;
+ }
+
+ element.value = String(value ?? '');
+}
+
export class PanelManager {
constructor({ root, store, actions }) {
this.root = root;
@@ -27,14 +60,20 @@ export class PanelManager {
const shell = createElement('div', 'timeplot-shell');
const topbar = createElement('header', 'timeplot-topbar');
const viewport = createElement('section', 'timeplot-viewport');
- const canvasHost = createElement('div', 'timeplot-canvas-host');
+ const plotGrid = createElement('div', 'timeplot-plot-grid');
+ const primaryPlotPanel = createElement('section', 'timeplot-plot-panel');
+ const secondaryPlotPanel = createElement('section', 'timeplot-plot-panel');
+ const primaryCanvasHost = createElement('div', 'timeplot-canvas-host');
+ const secondaryCanvasHost = createElement('div', 'timeplot-canvas-host');
const sidebar = createElement('aside', 'timeplot-sidebar');
- const tooltip = createElement('div', 'timeplot-tooltip');
- tooltip.hidden = true;
+ const primaryTooltip = createElement('div', 'timeplot-tooltip');
+ const secondaryTooltip = createElement('div', 'timeplot-tooltip');
+ primaryTooltip.hidden = true;
+ secondaryTooltip.hidden = true;
const brand = createElement('div', 'timeplot-brand');
const title = createElement('h1', 'timeplot-title', 'TimePlot');
- const subtitle = createElement('div', 'timeplot-subtitle', 'Restarted from scratch with a modular core');
+ const subtitle = createElement('div', 'timeplot-subtitle', 'Dual synchronized signal monitor');
brand.append(title, subtitle);
const toolbar = createElement('div', 'timeplot-toolbar');
@@ -44,7 +83,10 @@ export class PanelManager {
);
topbar.append(brand, toolbar);
- viewport.append(canvasHost, tooltip);
+ primaryPlotPanel.append(primaryCanvasHost, primaryTooltip);
+ secondaryPlotPanel.append(secondaryCanvasHost, secondaryTooltip);
+ plotGrid.append(primaryPlotPanel, secondaryPlotPanel);
+ viewport.append(plotGrid);
shell.append(topbar, viewport, sidebar);
this.root.replaceChildren(shell);
@@ -53,9 +95,14 @@ export class PanelManager {
shell,
topbar,
viewport,
- canvasHost,
+ plotGrid,
+ primaryPlotPanel,
+ secondaryPlotPanel,
+ primaryCanvasHost,
+ secondaryCanvasHost,
sidebar,
- tooltip,
+ primaryTooltip,
+ secondaryTooltip,
title,
subtitle,
statusPanel: this.createStatusPanel(),
@@ -133,36 +180,142 @@ export class PanelManager {
const panel = createElement('section', 'panel');
panel.innerHTML = `
<h2>Data Source</h2>
- <div class="field-grid">
- <label>
- Preset
- <select data-source-field="preset">
- <option value="telemetry">Telemetry</option>
- <option value="chirp">Chirp</option>
- <option value="burst">Burst</option>
- </select>
- </label>
- <label>
- Sample rate (Hz)
- <input data-source-field="sampleRateHz" type="number" min="1" max="240" step="1" />
- </label>
- <label>
- Amplitude
- <input data-source-field="amplitude" type="number" min="0.1" max="3" step="0.1" />
- </label>
- <label>
- Noise
- <input data-source-field="noise" type="number" min="0" max="0.5" step="0.01" />
- </label>
+ <div class="panel-subsection" data-source-config="signalA">
+ <div class="panel-section-title">Signal A</div>
+ <div class="field-grid">
+ <label>
+ Source type
+ <select data-source-key="signalA" data-source-field="type">
+ <option value="synthetic-wave">Synthetic wave</option>
+ <option value="csv-replay">CSV replay</option>
+ <option value="websocket">WebSocket</option>
+ </select>
+ </label>
+ </div>
+ <div class="field-grid" data-source-mode="synthetic-wave">
+ <label>
+ Preset
+ <select data-source-key="signalA" data-source-field="preset">
+ <option value="telemetry">Telemetry</option>
+ <option value="chirp">Chirp</option>
+ <option value="burst">Burst</option>
+ </select>
+ </label>
+ <label>
+ Sample rate (Hz)
+ <input data-source-key="signalA" data-source-field="sampleRateHz" type="number" min="1" max="240" step="1" />
+ </label>
+ <label>
+ Amplitude
+ <input data-source-key="signalA" data-source-field="amplitude" type="number" min="0.1" max="3" step="0.1" />
+ </label>
+ <label>
+ Noise
+ <input data-source-key="signalA" data-source-field="noise" type="number" min="0" max="0.5" step="0.01" />
+ </label>
+ </div>
+ <div class="field-grid" data-source-mode="csv-replay">
+ <label>
+ CSV file
+ <input data-source-key="signalA" data-source-file="dataset" type="file" accept=".csv,text/csv" />
+ </label>
+ <label>
+ Replay rate
+ <input data-source-key="signalA" data-source-field="replayRate" type="number" min="0.1" max="8" step="0.1" />
+ </label>
+ <div class="source-meta" data-source-key="signalA" data-source-meta></div>
+ </div>
+ <div class="field-grid" data-source-mode="websocket">
+ <label>
+ WebSocket URL
+ <input data-source-key="signalA" data-source-field="wsUrl" type="url" placeholder="ws://localhost:8080" />
+ </label>
+ <label>
+ Reconnect (ms)
+ <input data-source-key="signalA" data-source-field="wsReconnectMs" type="number" min="250" max="30000" step="250" />
+ </label>
+ <div class="source-meta" data-source-key="signalA" data-source-ws-meta></div>
+ </div>
+ </div>
+ <div class="panel-subsection" data-source-config="signalB">
+ <div class="panel-section-title">Signal B</div>
+ <div class="field-grid">
+ <label>
+ Source type
+ <select data-source-key="signalB" data-source-field="type">
+ <option value="synthetic-wave">Synthetic wave</option>
+ <option value="csv-replay">CSV replay</option>
+ <option value="websocket">WebSocket</option>
+ </select>
+ </label>
+ </div>
+ <div class="field-grid" data-source-mode="synthetic-wave">
+ <label>
+ Preset
+ <select data-source-key="signalB" data-source-field="preset">
+ <option value="telemetry">Telemetry</option>
+ <option value="chirp">Chirp</option>
+ <option value="burst">Burst</option>
+ </select>
+ </label>
+ <label>
+ Sample rate (Hz)
+ <input data-source-key="signalB" data-source-field="sampleRateHz" type="number" min="1" max="240" step="1" />
+ </label>
+ <label>
+ Amplitude
+ <input data-source-key="signalB" data-source-field="amplitude" type="number" min="0.1" max="3" step="0.1" />
+ </label>
+ <label>
+ Noise
+ <input data-source-key="signalB" data-source-field="noise" type="number" min="0" max="0.5" step="0.01" />
+ </label>
+ </div>
+ <div class="field-grid" data-source-mode="csv-replay">
+ <label>
+ CSV file
+ <input data-source-key="signalB" data-source-file="dataset" type="file" accept=".csv,text/csv" />
+ </label>
+ <label>
+ Replay rate
+ <input data-source-key="signalB" data-source-field="replayRate" type="number" min="0.1" max="8" step="0.1" />
+ </label>
+ <div class="source-meta" data-source-key="signalB" data-source-meta></div>
+ </div>
+ <div class="field-grid" data-source-mode="websocket">
+ <label>
+ WebSocket URL
+ <input data-source-key="signalB" data-source-field="wsUrl" type="url" placeholder="ws://localhost:8080" />
+ </label>
+ <label>
+ Reconnect (ms)
+ <input data-source-key="signalB" data-source-field="wsReconnectMs" type="number" min="250" max="30000" step="250" />
+ </label>
+ <div class="source-meta" data-source-key="signalB" data-source-ws-meta></div>
+ </div>
</div>
`;
panel.querySelectorAll('[data-source-field]').forEach((input) => {
- input.addEventListener('change', () => {
+ const eventName = input.tagName === 'SELECT' ? 'change' : 'input';
+ input.addEventListener(eventName, () => {
+ const sourceKey = input.getAttribute('data-source-key');
const field = input.getAttribute('data-source-field');
- const rawValue = input.value;
- const value = input.tagName === 'SELECT' ? rawValue : Number(rawValue);
- this.actions.updateSource(field, value);
+ const value = readControlValue(input);
+ this.actions.updateSource(sourceKey, field, value);
+ });
+ });
+
+ panel.querySelectorAll('[data-source-file]').forEach((input) => {
+ input.addEventListener('change', async () => {
+ const sourceKey = input.getAttribute('data-source-key');
+ const file = input.files?.[0];
+ if (!file) {
+ return;
+ }
+
+ await this.actions.loadSourceFile(sourceKey, file);
+ input.value = '';
});
});
@@ -191,16 +344,60 @@ export class PanelManager {
<input data-plot-field="showPoints" type="checkbox" />
</div>
</div>
+ <div class="panel-subsection">
+ <div class="panel-section-title">Graph routing</div>
+ <div class="field-grid">
+ <label>
+ Primary graph source
+ <select data-graph-id="primary" data-graph-field="sourceKey">
+ <option value="signalA">Signal A</option>
+ <option value="signalB">Signal B</option>
+ </select>
+ </label>
+ <label>
+ Primary graph transform
+ <select data-graph-id="primary" data-graph-field="transform">
+ <option value="raw">Raw</option>
+ <option value="delta">Delta</option>
+ <option value="smooth">Smooth</option>
+ </select>
+ </label>
+ <label>
+ Secondary graph source
+ <select data-graph-id="secondary" data-graph-field="sourceKey">
+ <option value="signalA">Signal A</option>
+ <option value="signalB">Signal B</option>
+ </select>
+ </label>
+ <label>
+ Secondary graph transform
+ <select data-graph-id="secondary" data-graph-field="transform">
+ <option value="raw">Raw</option>
+ <option value="delta">Delta</option>
+ <option value="smooth">Smooth</option>
+ </select>
+ </label>
+ </div>
+ </div>
`;
panel.querySelectorAll('[data-plot-field]').forEach((input) => {
- input.addEventListener('change', () => {
+ const eventName = input instanceof HTMLInputElement && input.type === 'checkbox' ? 'change' : 'input';
+ input.addEventListener(eventName, () => {
const field = input.getAttribute('data-plot-field');
- const value = input.type === 'checkbox' ? input.checked : Number(input.value);
+ const value = readControlValue(input);
this.actions.updatePlot(field, value);
});
});
+ panel.querySelectorAll('[data-graph-field]').forEach((input) => {
+ input.addEventListener('change', () => {
+ const graphId = input.getAttribute('data-graph-id');
+ const field = input.getAttribute('data-graph-field');
+ this.actions.updateGraph(graphId, field, input.value);
+ });
+ });
+
return panel;
}
@@ -209,10 +406,11 @@ export class PanelManager {
panel.innerHTML = `
<h2>Help</h2>
<ol class="help-list">
- <li>Hover the plot to inspect a sample.</li>
- <li>Use Pause and the speed slider to inspect timing behavior.</li>
- <li>Toggle panels from the top bar to focus the workspace.</li>
- <li>Swap presets to exercise the data input system.</li>
+ <li>Each signal can be synthetic or file-backed CSV replay.</li>
+ <li>Each graph can target Signal A or Signal B independently.</li>
+ <li>Each graph can render raw, delta, or smoothed data.</li>
+ <li>Hover either trace to inspect the nearest synchronized sample.</li>
+ <li>Use pause and speed controls to inspect timing behavior.</li>
</ol>
`;
return panel;
@@ -220,9 +418,10 @@ export class PanelManager {
sync(state, visiblePoints) {
this.elements.title.textContent = state.app.title;
- this.elements.subtitle.textContent = 'Synthetic time-series workspace with modular systems';
+ this.elements.subtitle.textContent = 'Dual synchronized signal monitor';
this.elements.pauseButton.textContent = state.time.paused ? 'Resume' : 'Pause';
- this.elements.speedInput.value = String(state.time.speed);
+ setToggleState(this.elements.pauseButton, state.time.paused);
+ syncControlValue(this.elements.speedInput, state.time.speed);
this.elements.speedValue.textContent = `${state.time.speed.toFixed(1)}×`;
const statusFields = this.elements.statusPanel.querySelectorAll('[data-field]');
@@ -232,7 +431,9 @@ export class PanelManager {
fieldMap.realElapsed.textContent = formatDuration(state.time.realElapsedMs);
fieldMap.plotTime.textContent = formatDuration(state.time.plotTimeMs);
fieldMap.playback.textContent = state.time.paused ? 'Paused' : `${state.time.speed.toFixed(1)}×`;
- fieldMap.points.textContent = `${visiblePoints}`;
+ fieldMap.points.textContent = typeof visiblePoints === 'object'
+ ? `${visiblePoints.primary} / ${visiblePoints.secondary}`
+ : `${visiblePoints}`;
this.syncSourcePanel(state);
this.syncConfigPanel(state);
@@ -241,17 +442,61 @@ export class PanelManager {
}
syncSourcePanel(state) {
- this.elements.sourcePanel.querySelector('[data-source-field="preset"]').value = state.source.preset;
- this.elements.sourcePanel.querySelector('[data-source-field="sampleRateHz"]').value = String(state.source.sampleRateHz);
- this.elements.sourcePanel.querySelector('[data-source-field="amplitude"]').value = String(state.source.amplitude);
- this.elements.sourcePanel.querySelector('[data-source-field="noise"]').value = String(state.source.noise);
+ Object.entries(state.sources).forEach(([sourceKey, sourceConfig]) => {
+ syncControlValue(this.elements.sourcePanel.querySelector(`[data-source-key="${sourceKey}"][data-source-field="type"]`), sourceConfig.type);
+ syncControlValue(this.elements.sourcePanel.querySelector(`[data-source-key="${sourceKey}"][data-source-field="preset"]`), sourceConfig.preset);
+ syncControlValue(this.elements.sourcePanel.querySelector(`[data-source-key="${sourceKey}"][data-source-field="sampleRateHz"]`), sourceConfig.sampleRateHz);
+ syncControlValue(this.elements.sourcePanel.querySelector(`[data-source-key="${sourceKey}"][data-source-field="amplitude"]`), sourceConfig.amplitude);
+ syncControlValue(this.elements.sourcePanel.querySelector(`[data-source-key="${sourceKey}"][data-source-field="noise"]`), sourceConfig.noise);
+ const replayRateInput = this.elements.sourcePanel.querySelector(`[data-source-key="${sourceKey}"][data-source-field="replayRate"]`);
+ if (replayRateInput) {
+ syncControlValue(replayRateInput, sourceConfig.replayRate ?? 1);
+ }
+
+ const sourceSection = this.elements.sourcePanel.querySelector(`[data-source-config="${sourceKey}"]`);
+ sourceSection.querySelectorAll('[data-source-mode]').forEach((modeSection) => {
+ modeSection.hidden = modeSection.getAttribute('data-source-mode') !== sourceConfig.type;
+ });
+
+ const meta = this.elements.sourcePanel.querySelector(`[data-source-key="${sourceKey}"][data-source-meta]`);
+ if (meta) {
+ if (sourceConfig.type === 'csv-replay') {
+ meta.innerHTML = sourceConfig.loadError
+ ? `<span class="source-meta-error">${sourceConfig.loadError}</span>`
+ : `${sourceConfig.dataFileName || 'No file loaded'}${sourceConfig.datasetPointCount ? ` · ${sourceConfig.datasetPointCount} pts · ${formatDuration(sourceConfig.datasetDurationMs || 0)}` : ''}`;
+ } else if (sourceConfig.type === 'websocket') {
+ meta.textContent = '';
+ } else {
+ meta.textContent = 'Generates data procedurally in-browser';
+ }
+ }
+
+ const wsUrlInput = this.elements.sourcePanel.querySelector(`[data-source-key="${sourceKey}"][data-source-field="wsUrl"]`);
+ const wsReconnectInput = this.elements.sourcePanel.querySelector(`[data-source-key="${sourceKey}"][data-source-field="wsReconnectMs"]`);
+ const wsMeta = this.elements.sourcePanel.querySelector(`[data-source-key="${sourceKey}"][data-source-ws-meta]`);
+ if (wsUrlInput) {
+ syncControlValue(wsUrlInput, sourceConfig.wsUrl ?? '');
+ }
+ if (wsReconnectInput) {
+ syncControlValue(wsReconnectInput, sourceConfig.wsReconnectMs ?? 2000);
+ }
+ if (wsMeta) {
+ wsMeta.innerHTML = sourceConfig.type === 'websocket'
+ ? `status: <span class="source-meta-status source-meta-status-${sourceConfig.wsStatus || 'idle'}">${sourceConfig.wsStatus || 'idle'}</span>${sourceConfig.wsStatusDetail ? ` · ${sourceConfig.wsStatusDetail}` : ''}`
+ : '';
+ }
+ });
}
syncConfigPanel(state) {
- this.elements.configPanel.querySelector('[data-plot-field="windowDurationMs"]').value = String(state.plot.windowDurationMs);
- this.elements.configPanel.querySelector('[data-plot-field="maxPoints"]').value = String(state.plot.maxPoints);
- this.elements.configPanel.querySelector('[data-plot-field="showGrid"]').checked = state.plot.showGrid;
- this.elements.configPanel.querySelector('[data-plot-field="showPoints"]').checked = state.plot.showPoints;
+ syncControlValue(this.elements.configPanel.querySelector('[data-plot-field="windowDurationMs"]'), state.plot.windowDurationMs);
+ syncControlValue(this.elements.configPanel.querySelector('[data-plot-field="maxPoints"]'), state.plot.maxPoints);
+ syncControlValue(this.elements.configPanel.querySelector('[data-plot-field="showGrid"]'), state.plot.showGrid);
+ syncControlValue(this.elements.configPanel.querySelector('[data-plot-field="showPoints"]'), state.plot.showPoints);
+ syncControlValue(this.elements.configPanel.querySelector('[data-graph-id="primary"][data-graph-field="sourceKey"]'), state.graphs.primary.sourceKey);
+ syncControlValue(this.elements.configPanel.querySelector('[data-graph-id="primary"][data-graph-field="transform"]'), state.graphs.primary.transform);
+ syncControlValue(this.elements.configPanel.querySelector('[data-graph-id="secondary"][data-graph-field="sourceKey"]'), state.graphs.secondary.sourceKey);
+ syncControlValue(this.elements.configPanel.querySelector('[data-graph-id="secondary"][data-graph-field="transform"]'), state.graphs.secondary.transform);
}
syncPanels(state) {
@@ -270,18 +515,28 @@ export class PanelManager {
syncTooltip(state) {
const tooltipState = state.plot.tooltip;
- this.elements.tooltip.hidden = !tooltipState.visible || !tooltipState.point;
- if (this.elements.tooltip.hidden) {
+ this.elements.primaryTooltip.hidden = true;
+ this.elements.secondaryTooltip.hidden = true;
+
+ if (!tooltipState.visible || !tooltipState.point) {
return;
}
- this.elements.tooltip.style.left = `${tooltipState.x}px`;
- this.elements.tooltip.style.top = `${tooltipState.y}px`;
- this.elements.tooltip.innerHTML = `
+ const tooltip = tooltipState.panelId === 'secondary'
+ ? this.elements.secondaryTooltip
+ : this.elements.primaryTooltip;
+
+ tooltip.hidden = false;
+ tooltip.style.left = `${tooltipState.x}px`;
+ tooltip.style.top = `${tooltipState.y}px`;
+ tooltip.innerHTML = `
<div class="timeplot-tooltip-title">Hovered sample</div>
+ <div class="timeplot-tooltip-row"><span class="muted">Panel</span><span>${tooltipState.panelLabel ?? 'Primary'}</span></div>
<div class="timeplot-tooltip-row"><span class="muted">Plot time</span><span>${formatDuration(tooltipState.point.timeMs)}</span></div>
<div class="timeplot-tooltip-row"><span class="muted">Value</span><span>${formatValue(tooltipState.point.value)}</span></div>
<div class="timeplot-tooltip-row"><span class="muted">Source</span><span>${tooltipState.point.sourceId}</span></div>
+ ${tooltipState.linkedPoint ? `<div class="timeplot-tooltip-row"><span class="muted">Linked panel</span><span>${tooltipState.linkedPanelLabel ?? 'Linked'}</span></div>` : ''}
+ ${tooltipState.linkedPoint ? `<div class="timeplot-tooltip-row"><span class="muted">Linked value</span><span>${formatValue(tooltipState.linkedPoint.value)}</span></div>` : ''}
`;
}
}
diff --git a/web-timeplot/src/waterfall.js b/web-timeplot/src/waterfall.js
new file mode 100644
index 0000000..bce0750
--- /dev/null
+++ b/web-timeplot/src/waterfall.js
@@ -0,0 +1,219 @@
+import { Container, Graphics, Text } from 'pixi.js';
+
+/**
+ * WaterfallGraph - A scrolling waterfall display
+ * Starts simple with basic line rendering
+ */
+export class WaterfallGraph {
+ constructor(config) {
+ this.x = config.x;
+ this.y = config.y;
+ this.width = config.width;
+ this.height = config.height;
+ this.title = config.title;
+ this.baseColor = config.color || 0xff6666;
+
+ this.container = new Container();
+ this.container.x = this.x;
+ this.container.y = this.y;
+
+ // Graphics layers
+ this.borderGraphics = new Graphics();
+ this.gridGraphics = new Graphics();
+ this.linesGraphics = new Graphics();
+
+ this.container.addChild(this.gridGraphics);
+ this.container.addChild(this.linesGraphics);
+ this.container.addChild(this.borderGraphics);
+
+ // Title text
+ this.titleText = new Text({
+ text: this.title,
+ style: {
+ fontFamily: 'Arial',
+ fontSize: 18,
+ fill: 0xeeeeee,
+ }
+ });
+ this.titleText.x = 10;
+ this.titleText.y = 10;
+ this.container.addChild(this.titleText);
+
+ // Waterfall data
+ this.lines = [];
+ this.maxLines = 50;
+ this.pointsPerLine = 100;
+ this.frameCounter = 0;
+
+ this.showGrid = true;
+
+ // Time scaling and zoom
+ this.scrollSpeed = 1.0; // Speed multiplier for scrolling
+ this.baseScrollSpeed = 1.0;
+ this.verticalScale = 1.0; // Vertical zoom: >1 = zoomed in (see less history), <1 = zoomed out (see more)
+
+ this.draw();
+ }
+
+ draw() {
+ this.drawBorder();
+ this.drawGrid();
+ }
+
+ drawBorder() {
+ this.borderGraphics.clear();
+ this.borderGraphics.rect(0, 0, this.width, this.height);
+ this.borderGraphics.stroke({ width: 2, color: 0x606070 });
+ }
+
+ drawGrid() {
+ this.gridGraphics.clear();
+
+ if (!this.showGrid) return;
+
+ this.gridGraphics.alpha = 0.3;
+
+ const divisions = 10;
+ const color = 0x4a7a9a;
+
+ // Vertical lines
+ for (let i = 0; i <= divisions; i++) {
+ const x = (i / divisions) * this.width;
+ this.gridGraphics.moveTo(x, 0);
+ this.gridGraphics.lineTo(x, this.height);
+ this.gridGraphics.stroke({ width: 1, color });
+ }
+
+ // Horizontal lines
+ for (let i = 0; i <= divisions; i++) {
+ const y = (i / divisions) * this.height;
+ this.gridGraphics.moveTo(0, y);
+ this.gridGraphics.lineTo(this.width, y);
+ this.gridGraphics.stroke({ width: 1, color });
+ }
+ }
+
+ update(time, graphIdx) {
+ this.frameCounter++;
+
+ // Add new line every 10 frames
+ if (this.frameCounter % 10 === 0 && this.lines.length < this.maxLines) {
+ this.addLine(time, graphIdx);
+ }
+
+ // Scroll existing lines down
+ this.scrollLines();
+
+ // Remove off-screen lines
+ this.lines = this.lines.filter(line => line.yOffset < this.height + 50);
+
+ // Redraw all lines
+ this.drawLines();
+ }
+
+ addLine(time, graphIdx) {
+ const line = {
+ points: [],
+ yOffset: 0,
+ color: this.generateColor(time),
+ };
+
+ // Generate sine wave points
+ const phase = time + (graphIdx * 2);
+ const freq = 2.0 + Math.sin(time * 0.5 + graphIdx) * 1.0;
+
+ for (let i = 0; i < this.pointsPerLine; i++) {
+ const x = (i / this.pointsPerLine) * this.width;
+ const normalizedX = (i / this.pointsPerLine) * 2 - 1; // -1 to 1
+ const y = Math.sin(i * 0.1 * freq + phase) * 30; // Amplitude in pixels
+
+ line.points.push({ x, y });
+ }
+
+ this.lines.push(line);
+ }
+
+ scrollLines() {
+ const speed = this.baseScrollSpeed * this.scrollSpeed;
+ this.lines.forEach(line => {
+ line.yOffset += speed;
+ });
+ }
+
+ setScrollSpeed(speed) {
+ // Clamp between 0.1 (slow) and 5.0 (fast)
+ this.scrollSpeed = Math.max(0.1, Math.min(5.0, speed));
+ }
+
+ getScrollSpeed() {
+ return this.scrollSpeed;
+ }
+
+ setVerticalScale(scale) {
+ // Clamp between 0.2 (zoomed out, see more history) and 3.0 (zoomed in, see less)
+ this.verticalScale = Math.max(0.2, Math.min(3.0, scale));
+ }
+
+ getVerticalScale() {
+ return this.verticalScale;
+ }
+
+ drawLines() {
+ this.linesGraphics.clear();
+
+ for (const line of this.lines) {
+ if (line.points.length < 2) continue;
+
+ // Apply vertical scale to y positions
+ // Current time is at top (y=0), older data has larger yOffset
+ const scaledYOffset = line.yOffset * this.verticalScale;
+
+ // Start path
+ const firstPoint = line.points[0];
+ this.linesGraphics.moveTo(firstPoint.x, firstPoint.y + scaledYOffset);
+
+ // Draw line strip
+ for (let i = 1; i < line.points.length; i++) {
+ const point = line.points[i];
+ this.linesGraphics.lineTo(point.x, point.y + scaledYOffset);
+ }
+
+ this.linesGraphics.stroke({ width: 2, color: line.color });
+ }
+ }
+
+ generateColor(time) {
+ // Cycle through colors based on time
+ const hue = (time * 0.1) % 1.0;
+ const r = Math.floor(Math.abs(Math.sin(hue * Math.PI * 2)) * 255);
+ const g = Math.floor(Math.abs(Math.sin((hue + 0.33) * Math.PI * 2)) * 255);
+ const b = Math.floor(Math.abs(Math.sin((hue + 0.66) * Math.PI * 2)) * 255);
+
+ return (r << 16) | (g << 8) | b;
+ }
+
+ setGridVisible(visible) {
+ this.showGrid = visible;
+ this.drawGrid();
+ }
+
+ resize(x, y, width, height) {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+
+ this.container.x = x;
+ this.container.y = y;
+
+ this.draw();
+ }
+
+ getVertexCount() {
+ return this.lines.reduce((sum, line) => sum + line.points.length, 0);
+ }
+
+ getLineCount() {
+ return this.lines.length;
+ }
+}