runtimepy 5.14.2__py3-none-any.whl → 5.15.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. runtimepy/__init__.py +2 -2
  2. runtimepy/channel/__init__.py +1 -4
  3. runtimepy/channel/environment/__init__.py +93 -2
  4. runtimepy/channel/environment/create.py +16 -1
  5. runtimepy/channel/environment/sample.py +10 -2
  6. runtimepy/channel/registry.py +2 -3
  7. runtimepy/codec/protocol/base.py +34 -14
  8. runtimepy/codec/protocol/json.py +5 -3
  9. runtimepy/codec/system/__init__.py +6 -2
  10. runtimepy/control/source.py +1 -1
  11. runtimepy/data/404.md +16 -0
  12. runtimepy/data/base.yaml +3 -0
  13. runtimepy/data/css/bootstrap_extra.css +59 -44
  14. runtimepy/data/css/main.css +23 -4
  15. runtimepy/data/dummy_load.yaml +2 -2
  16. runtimepy/data/factories.yaml +1 -0
  17. runtimepy/data/js/classes/App.js +54 -2
  18. runtimepy/data/js/classes/ChannelTable.js +6 -8
  19. runtimepy/data/js/classes/Plot.js +9 -4
  20. runtimepy/data/js/classes/TabFilter.js +47 -9
  21. runtimepy/data/js/classes/TabInterface.js +106 -11
  22. runtimepy/data/js/classes/WindowHashManager.js +30 -15
  23. runtimepy/data/js/init.js +18 -1
  24. runtimepy/data/js/markdown_page.js +10 -0
  25. runtimepy/data/schemas/BitFields.yaml +9 -0
  26. runtimepy/data/schemas/RuntimeEnum.yaml +6 -0
  27. runtimepy/data/schemas/StructConfig.yaml +9 -1
  28. runtimepy/data/static/css/bootstrap-icons.min.css +4 -3
  29. runtimepy/data/static/css/bootstrap.min.css +3 -4
  30. runtimepy/data/static/css/fonts/bootstrap-icons.woff +0 -0
  31. runtimepy/data/static/css/fonts/bootstrap-icons.woff2 +0 -0
  32. runtimepy/data/static/js/bootstrap.bundle.min.js +5 -4
  33. runtimepy/data/static/js/webglplot.umd.min.js +2 -1
  34. runtimepy/data/static/svg/outline-dark.svg +22 -0
  35. runtimepy/data/static/svg/outline-light.svg +22 -0
  36. runtimepy/enum/__init__.py +13 -1
  37. runtimepy/enum/registry.py +13 -1
  38. runtimepy/message/__init__.py +3 -3
  39. runtimepy/mixins/logging.py +6 -1
  40. runtimepy/net/__init__.py +0 -2
  41. runtimepy/net/arbiter/info.py +36 -4
  42. runtimepy/net/arbiter/struct/__init__.py +3 -2
  43. runtimepy/net/connection.py +4 -5
  44. runtimepy/net/html/__init__.py +29 -11
  45. runtimepy/net/html/bootstrap/__init__.py +2 -2
  46. runtimepy/net/html/bootstrap/elements.py +44 -24
  47. runtimepy/net/html/bootstrap/tabs.py +18 -11
  48. runtimepy/net/http/__init__.py +3 -3
  49. runtimepy/net/http/request_target.py +3 -3
  50. runtimepy/net/mixin.py +4 -2
  51. runtimepy/net/server/__init__.py +16 -9
  52. runtimepy/net/server/app/__init__.py +1 -0
  53. runtimepy/net/server/app/create.py +3 -3
  54. runtimepy/net/server/app/env/__init__.py +28 -4
  55. runtimepy/net/server/app/env/settings.py +4 -7
  56. runtimepy/net/server/app/env/tab/controls.py +141 -27
  57. runtimepy/net/server/app/env/tab/html.py +68 -26
  58. runtimepy/net/server/app/env/widgets.py +115 -61
  59. runtimepy/net/server/app/landing_page.py +1 -1
  60. runtimepy/net/server/html.py +2 -2
  61. runtimepy/net/server/json.py +1 -1
  62. runtimepy/net/server/markdown.py +18 -12
  63. runtimepy/net/server/mux.py +29 -0
  64. runtimepy/net/stream/__init__.py +6 -5
  65. runtimepy/net/stream/base.py +4 -2
  66. runtimepy/net/tcp/connection.py +5 -3
  67. runtimepy/net/tcp/http/__init__.py +10 -9
  68. runtimepy/net/tcp/protocol.py +2 -2
  69. runtimepy/net/tcp/scpi/__init__.py +5 -2
  70. runtimepy/net/tcp/telnet/__init__.py +2 -1
  71. runtimepy/net/udp/connection.py +10 -6
  72. runtimepy/net/udp/protocol.py +5 -6
  73. runtimepy/net/udp/queue.py +5 -2
  74. runtimepy/net/udp/tftp/base.py +2 -1
  75. runtimepy/net/websocket/connection.py +50 -8
  76. runtimepy/primitives/array/__init__.py +7 -5
  77. runtimepy/primitives/base.py +3 -2
  78. runtimepy/primitives/field/__init__.py +35 -2
  79. runtimepy/primitives/field/fields.py +11 -2
  80. runtimepy/primitives/field/manager/base.py +19 -2
  81. runtimepy/primitives/serializable/base.py +5 -2
  82. runtimepy/primitives/serializable/fixed.py +5 -2
  83. runtimepy/primitives/serializable/prefixed.py +4 -1
  84. runtimepy/primitives/types/base.py +4 -1
  85. runtimepy/primitives/types/bounds.py +10 -4
  86. runtimepy/registry/__init__.py +20 -0
  87. runtimepy/registry/name.py +6 -0
  88. runtimepy/requirements.txt +2 -2
  89. runtimepy/ui/controls.py +20 -1
  90. {runtimepy-5.14.2.dist-info → runtimepy-5.15.0.dist-info}/METADATA +6 -6
  91. {runtimepy-5.14.2.dist-info → runtimepy-5.15.0.dist-info}/RECORD +95 -92
  92. {runtimepy-5.14.2.dist-info → runtimepy-5.15.0.dist-info}/WHEEL +1 -1
  93. runtimepy/data/404.html +0 -7
  94. {runtimepy-5.14.2.dist-info → runtimepy-5.15.0.dist-info}/entry_points.txt +0 -0
  95. {runtimepy-5.14.2.dist-info → runtimepy-5.15.0.dist-info}/licenses/LICENSE +0 -0
  96. {runtimepy-5.14.2.dist-info → runtimepy-5.15.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  aiofiles
2
- vcorelib>=3.6.0
3
- svgen>=0.7.12
2
+ vcorelib>=3.6.2
3
+ svgen>=0.8.0
4
4
  websockets
5
5
  psutil
6
6
  windows-curses; sys_platform == 'win32' and python_version < '3.12'
runtimepy/ui/controls.py CHANGED
@@ -7,8 +7,11 @@ import math
7
7
  from typing import Optional
8
8
 
9
9
  # internal
10
- from runtimepy.channel import Controls
10
+ from runtimepy.primitives.types.bounds import IntegerBounds
11
11
 
12
+ Literal = int | float | bool
13
+ Default = Optional[Literal]
14
+ Controls = dict[str, Literal | dict[str, Literal]]
12
15
  DEFAULT_STEPS = 64.0
13
16
 
14
17
 
@@ -30,6 +33,22 @@ def make_slider(
30
33
  return result
31
34
 
32
35
 
36
+ def bit_slider(width: int, signed: bool) -> Controls:
37
+ """Make a slider for an unsigned integer width."""
38
+ bounds = IntegerBounds.create_bit(width, signed)
39
+ return make_slider(bounds.min, bounds.max, 2**width - 1)
40
+
41
+
42
+ def signed_slider(width: int) -> Controls:
43
+ """Make a slider for an unsigned integer width."""
44
+ return bit_slider(width, True)
45
+
46
+
47
+ def unsigned_slider(width: int) -> Controls:
48
+ """Make a slider for an unsigned integer width."""
49
+ return bit_slider(width, False)
50
+
51
+
33
52
  CANONICAL: dict[str, Controls] = {
34
53
  "phase": make_slider(-math.pi, math.pi, 90, default=0.0),
35
54
  "amplitude": make_slider(0.0, 2.0, 100.0, default=1.0),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runtimepy
3
- Version: 5.14.2
3
+ Version: 5.15.0
4
4
  Summary: A framework for implementing Python services.
5
5
  Home-page: https://github.com/libre-embedded/runtimepy
6
6
  Author: Libre Embedded
@@ -17,11 +17,11 @@ Classifier: Development Status :: 5 - Production/Stable
17
17
  Requires-Python: >=3.12
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: aiofiles
21
- Requires-Dist: svgen>=0.7.12
22
- Requires-Dist: vcorelib>=3.6.0
23
20
  Requires-Dist: websockets
24
21
  Requires-Dist: psutil
22
+ Requires-Dist: svgen>=0.8.0
23
+ Requires-Dist: aiofiles
24
+ Requires-Dist: vcorelib>=3.6.2
25
25
  Provides-Extra: test
26
26
  Requires-Dist: pylint; extra == "test"
27
27
  Requires-Dist: flake8; extra == "test"
@@ -51,11 +51,11 @@ Dynamic: requires-python
51
51
  =====================================
52
52
  generator=datazen
53
53
  version=3.2.3
54
- hash=d3dcde1ba35cb14decfc6881b6a2d4e6
54
+ hash=db8f45762873863c99d4d7d8f996d2fb
55
55
  =====================================
56
56
  -->
57
57
 
58
- # runtimepy ([5.14.2](https://pypi.org/project/runtimepy/))
58
+ # runtimepy ([5.15.0](https://pypi.org/project/runtimepy/))
59
59
 
60
60
  [![python](https://img.shields.io/pypi/pyversions/runtimepy.svg)](https://pypi.org/project/runtimepy/)
61
61
  ![Build Status](https://github.com/libre-embedded/runtimepy/workflows/Python%20Package/badge.svg)
@@ -1,21 +1,21 @@
1
- runtimepy/__init__.py,sha256=mXM-PK0XW-WTNeNncfVfDdlF2hhVzUyeG01xGugXoAw,391
1
+ runtimepy/__init__.py,sha256=b_ptd8WNjZK1zK_FHN2DmLkBIzyqoGLd67n3xangX6g,391
2
2
  runtimepy/__main__.py,sha256=IKioH2xOtsXwrwb9zABDQEJvuAX--Lnh84TeSz0XSs0,332
3
3
  runtimepy/app.py,sha256=Er1ZKKrG9U0FV0gQg_GYF9xDb89HgYnVzS5SjxGa2Tg,970
4
4
  runtimepy/dev_requirements.txt,sha256=VZhW6bJ5YbwaoN4d_XxZFuN5BbDLaG7ngKrGnugVPRw,245
5
5
  runtimepy/entry.py,sha256=fy9irGEgyFAsu868bOymHX8I3CkkrMNThUWAm-4chiM,1930
6
6
  runtimepy/mapping.py,sha256=VQK1vzmQVvYYKI85_II37-hIEbvgL3PzNy-WI6TTo80,5091
7
7
  runtimepy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- runtimepy/requirements.txt,sha256=F4rTeIfG1iYsWFG6szk162sOlN-71HpKtXuqBjIGFFs,125
8
+ runtimepy/requirements.txt,sha256=vhbL-1vCt_sD7ZrLXZT-TX5WMQVC0hJMb_KMyUjDc9E,124
9
9
  runtimepy/schemas.py,sha256=zTgxPm9DHZ0R_bmmOjNQMTXdtM_Hb1bE-Fog40jDCgg,839
10
10
  runtimepy/util.py,sha256=ZHSucNi-gbrcajoCv2dNjQs48dJPC3mTM_wZHx7AW1U,1719
11
- runtimepy/channel/__init__.py,sha256=pf0RJ5g37_FVV8xoUNgzFGuIfbZEYSBA_cQlJSDTPDo,4774
12
- runtimepy/channel/registry.py,sha256=nk36qM_Bf6qK6AFR0plaZHR1PU7b4LZqbQ0feJqk4lc,4784
13
- runtimepy/channel/environment/__init__.py,sha256=0Jj8g7Y4bdDvmWtzpegB9D4milGPhsZokoYxmps5zgU,1612
11
+ runtimepy/channel/__init__.py,sha256=bI1mfHmjUGrYcwePip2ddbMaGSkyQXQVfESL5dqXRdU,4716
12
+ runtimepy/channel/registry.py,sha256=AiRhSSnNbWCxwC-m8vP2fRaN1cfm5JjvlphQzkETf9w,4742
13
+ runtimepy/channel/environment/__init__.py,sha256=Mmq4S4NCX9pKSH7XEmD04zm0YcRhrTc8mGb25dTULgw,5333
14
14
  runtimepy/channel/environment/array.py,sha256=f9cWaYsRXUw8qE629h6jQxbYKDpOwC2GLBo4QaMa1JM,3748
15
15
  runtimepy/channel/environment/base.py,sha256=uCQKCH6wNrKqYSX2PMDAbIFoCZh68Xt-Cr_daGG7eeI,14356
16
- runtimepy/channel/environment/create.py,sha256=DHjoNmzZsARjfB_CfutXQ1PDdxPETi6yQoRMhM0FbwA,5319
16
+ runtimepy/channel/environment/create.py,sha256=UVO_R5rM6xLjpAh3j3wwix-0V3uJMAno2tbBIV4boo8,5868
17
17
  runtimepy/channel/environment/file.py,sha256=PV05KZ3-CvftbKUM8acQmawOMeGGCcMrEESEBuymykg,6949
18
- runtimepy/channel/environment/sample.py,sha256=c__4ZKs1ERoQNbBOimIqjdYbyb4KGgVFk6Ar606Luh4,5108
18
+ runtimepy/channel/environment/sample.py,sha256=6926v0ZssvfeWX_C8MSbUfYjE4sr3jt0CLVSJ_2Cl3U,5316
19
19
  runtimepy/channel/environment/telemetry.py,sha256=3A7Xcp-4eHJWz_oR1SnI6rsl4o8wiSUaiMHrnK1IaQ8,5338
20
20
  runtimepy/channel/environment/command/__init__.py,sha256=mymqk5roA-7evUovXlD2dmWaprSzrPb_3ae6bA9oEZ0,8162
21
21
  runtimepy/channel/environment/command/parser.py,sha256=cMOsEsXnfFlATiWTNSxlgvc_XoICsJlcZigFJlQ47tk,1804
@@ -25,10 +25,10 @@ runtimepy/channel/event/__init__.py,sha256=9LCSNa1Iiwr6Q6JkwQGELDQ7rWfU_xjAMh6qM
25
25
  runtimepy/channel/event/header.py,sha256=eDRZgzzM5HZQ8QtV4DjyAsrAhEZyM7IfwqK6WB5ACEw,868
26
26
  runtimepy/codec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  runtimepy/codec/protocol/__init__.py,sha256=0mdPIb5mpkqofClqW23kslsgc3V_aSKJ1RmjEHmKfeI,1673
28
- runtimepy/codec/protocol/base.py,sha256=8pt8va16zHcHIgFTyhfx6tgDcsQxbqL93CfSgq0ZTBY,11796
29
- runtimepy/codec/protocol/json.py,sha256=pDEpHYFNYjiU2whvQemdZmH9Igx7aLEYCoS_Xpnqdcs,4483
28
+ runtimepy/codec/protocol/base.py,sha256=kxnFcS-6P75jyK4Vs2H9dIls_PCVnvrbiM9zU6EBroE,12532
29
+ runtimepy/codec/protocol/json.py,sha256=utBq0kBHJifTklHvSGWNxR6jXb_F3Lzp_qU1Fshsfks,4530
30
30
  runtimepy/codec/protocol/receiver.py,sha256=RGfpTNiFB_ZtDXtnMYSQ6oO3HiIJKcwCSwoIgvtMsbY,4085
31
- runtimepy/codec/system/__init__.py,sha256=fIOUo7QhwI81YAIz9myeSo1oo94De41sK5HKJ-sAdfY,7959
31
+ runtimepy/codec/system/__init__.py,sha256=CAdHddEvqbh-Uy-l_9yc0O5VAfuqYvElnuQ4qRG8Y-A,8101
32
32
  runtimepy/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  runtimepy/commands/all.py,sha256=eAn52vuAgOh0jr93LROfbTjSPuJILGFRCPB9UeS3Q1c,1537
34
34
  runtimepy/commands/arbiter.py,sha256=9xcKnI1Sogmmv8J6FnjuY3zIEgSacmD7pZgAStuWTcc,1616
@@ -39,47 +39,47 @@ runtimepy/commands/task.py,sha256=6xRVlRwpEZVhrcY18sQcfdWEOxeQZLeOF-6UrUURtO4,14
39
39
  runtimepy/commands/tftp.py,sha256=gxkPryKB0ZEZeOPosHM-GSoWIItpWZBu5S6tW42bfK8,2410
40
40
  runtimepy/commands/tui.py,sha256=9hWA3_YATibUUDTVQr7UnKzPTDVJ7WxWKTYYQpLoyrE,1869
41
41
  runtimepy/control/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
- runtimepy/control/source.py,sha256=nW3Q2D-LcekII7K5XKbxXCcR-9jYQyvv0UypeNy1Dnw,1695
42
+ runtimepy/control/source.py,sha256=2snCxm8N4rWBkEFsE0dKSqdf4vXP9AkctN6zN8h3i8M,1729
43
43
  runtimepy/control/step.py,sha256=2LdZTpMHLwHLdpPVinpC2qByTs5I5LTDt-xONn_6Fc8,5491
44
44
  runtimepy/control/env/__init__.py,sha256=RHJqysY7Pv4VDs2SGk0X-qc5xp_SrQ_oxb5Deug8HEM,1339
45
- runtimepy/data/404.html,sha256=c_cIqG5BxcKw7pDHcgAAPeOdQq1JRAWIBZ331tG9LKw,5673
46
- runtimepy/data/base.yaml,sha256=WGy2nPiRZk5_wBU7BlWaFfCnzRprJBp-m8onOPUoLAo,399
45
+ runtimepy/data/404.md,sha256=_yzjvp2GeMc5OBvZX2zDbX-Ns6T7HCO9esRbS5PmkXU,397
46
+ runtimepy/data/base.yaml,sha256=PEsvcMV1qFb1Gr6Cx2SgmR6ScfPyuu3yTdnvSBTVSdA,453
47
47
  runtimepy/data/browser.yaml,sha256=oc5KEV1C1uAJ4MkhNo4hyVVfJtZvHelRNqzNvD313Ow,79
48
- runtimepy/data/dummy_load.yaml,sha256=PfKRXXgZnENRMSd68eznSMTV8xanVH5JY4FmoZRPFGY,1985
49
- runtimepy/data/factories.yaml,sha256=esuoouMre8w7siZfBoZKqC-5myghJ_WwOOCDIq135zg,1899
48
+ runtimepy/data/dummy_load.yaml,sha256=BVzCn7CmvcSNcDNWWYoAdil3-YQMdxuwTOCh2dpRR5s,2001
49
+ runtimepy/data/factories.yaml,sha256=CdpnjK2glj8HewI2tFSNvCSUdcNPeVD_tFbGy2QBSQg,1952
50
50
  runtimepy/data/favicon.ico,sha256=boxAGaHbUjMFrOO2TZpsO0nIRC-LUgwHVQYOiG1YQnM,362870
51
51
  runtimepy/data/sample_telemetry.yaml,sha256=OpdFurkvtWJGaNl9LMlU2rKo15AaVVr-U_hoZfsbp-Y,695
52
52
  runtimepy/data/server.yaml,sha256=wS_Ceiu2TpkfPurpqoYoPlgzc9DAWtUd24MW7t-S5rU,97
53
53
  runtimepy/data/server_base.yaml,sha256=Fiqz9C_ikxtYYFO8q17XzgaY5b3H9RuyqJr-QoTk-qg,524
54
54
  runtimepy/data/server_dev.yaml,sha256=nQsPh7LuQig3pzHfdg_aD3yOUiCj1sKKfI-WwW3hXmQ,523
55
55
  runtimepy/data/tftp_server.yaml,sha256=-bFOWJSagI-fEQQcT8k7eDMJVfSPm2XAxLVG3dqUTa4,204
56
- runtimepy/data/css/bootstrap_extra.css,sha256=kJLOp8j-vRxnWzQOf_eOz4kL8Mbrwxuwk3YNh90HgWM,1907
56
+ runtimepy/data/css/bootstrap_extra.css,sha256=hQV_f0DXboYPlsuI7PahFT11g5xjVw6nqp1DACOKWns,2934
57
57
  runtimepy/data/css/font.css,sha256=Pe82E66rNi-cwlQ-_1GHAuhPGu5L4x5KqgV0dbDe51w,977
58
- runtimepy/data/css/main.css,sha256=6xYQRA6QLDC8-k_-AUT1mA9bVHGidttfmMbgwg5ck3g,708
58
+ runtimepy/data/css/main.css,sha256=SuSNaXXd3iT53bbp7bsCxPJGZtkC0cNZeCeEpvjIEhU,1215
59
59
  runtimepy/data/js/DataConnection.js,sha256=DnX8FMehjJXqmI62UMYXSvl_XdfQMzq3XUDFbLu2GgI,98
60
60
  runtimepy/data/js/JsonConnection.js,sha256=rclZrbmWc_zSs6I_JhOgxnVPFIyPMo5WdjAe8alyZ3o,2729
61
61
  runtimepy/data/js/audio.js,sha256=bLkBqbeHMiGGidfL3iXjmVoF9seK-ZeZ3kwgOrcpgk4,1092
62
62
  runtimepy/data/js/events.js,sha256=rgz3Q_8J6sfU_7Sa7fG1mZD0pQ4S3vwN2mqcvQfePkM,554
63
- runtimepy/data/js/init.js,sha256=IeFqfab7CM2-Z4fIbyGaUD4M2orUT8uLwcVlleQqXzg,1522
63
+ runtimepy/data/js/init.js,sha256=6RhwGRl_DBjMpztms2JOQiQlvdizcLeaiETNEh31KyU,1992
64
64
  runtimepy/data/js/main.js,sha256=nYIQ6O76EWqlzwX7oEwPXqC-LCUFCZYDADK9QbYRDKk,404
65
- runtimepy/data/js/markdown_page.js,sha256=7PNELE79WB3YU_rGq_0v-uDB7kyYtn5U8zpBeBiVHqg,678
65
+ runtimepy/data/js/markdown_page.js,sha256=R7Z2CwCk0dXED_4lwvDMXRNNB9ki9RvfwEKLPSwNWec,982
66
66
  runtimepy/data/js/util.js,sha256=Xc8pHUiFDBDvIqTamWrCYUOpF7iR9VNvPDCSCQAfLDA,1424
67
67
  runtimepy/data/js/worker.js,sha256=V9deGAynjvUr1D-WGi3wUW8rxoaNLvBvayMoLFZk3w0,2444
68
- runtimepy/data/js/classes/App.js,sha256=nnY42Q3tlNzf8JZtuGKyxJZLLNMfResdww8svOQMC3U,3402
69
- runtimepy/data/js/classes/ChannelTable.js,sha256=V9g4_6N1i7ci7FkhP9eBd9ENbkSBusO5AvWuIEHUKk8,2634
68
+ runtimepy/data/js/classes/App.js,sha256=t3XVC7zSi8L_sMJ4KP-lyWyuD4cysCKkptN-lgjewN8,5159
69
+ runtimepy/data/js/classes/ChannelTable.js,sha256=v6CqDdJrxhbDZcp9c1k7a9cy1uIHfb_LsTmCfY8lvPM,2593
70
70
  runtimepy/data/js/classes/DataConnection.js,sha256=DnX8FMehjJXqmI62UMYXSvl_XdfQMzq3XUDFbLu2GgI,98
71
71
  runtimepy/data/js/classes/JsonConnection.js,sha256=vgQ3bGvVU5dNXn_uwvH7HjOQm0PwUSx0239Vfi7h1vE,2858
72
72
  runtimepy/data/js/classes/OverlayManager.js,sha256=-eH8NtJi8doBUB2Czqand4cWuQlddo1p1wVUfjVx9w0,3362
73
- runtimepy/data/js/classes/Plot.js,sha256=44DUxvmOe2cqKRjrk91Abo-myxWWFAFUDsZb05F4rrA,1979
73
+ runtimepy/data/js/classes/Plot.js,sha256=HzFS_w97KSRpJ_UElIGJGNYnSSdOJ2Ihhbx-00xvT64,2113
74
74
  runtimepy/data/js/classes/PlotDrawer.js,sha256=Wkjoh3oNux8NsVDXUHy1nKOxmtGwbLNKXG9zowi4QUk,5017
75
75
  runtimepy/data/js/classes/PlotManager.js,sha256=hFDSeTFd7UKjDkZRlh7rQhSbdIbbPA_6cTCR4D-Bgnc,4928
76
76
  runtimepy/data/js/classes/PlotModalManager.js,sha256=lEbACLC5VzV-aSAb7G-WacmLLf_IRx7-pNJs9lL8bvY,928
77
77
  runtimepy/data/js/classes/PointBuffer.js,sha256=iVtq_q5gBaV9IVX55pHVjQdMJ4phJ6QTdAiM7EZrLRA,5061
78
78
  runtimepy/data/js/classes/PointManager.js,sha256=0lr2AReLdDNrY47UuOjjCRDPMiSRsOVggFHDPf8V-6Y,460
79
- runtimepy/data/js/classes/TabFilter.js,sha256=FygFFmWa1IRQ0DZlrOscdrkz6W3VkG87nHSud56kCzI,1185
80
- runtimepy/data/js/classes/TabInterface.js,sha256=i-dM_FpRsp_hJEh6CdtSY8hiTS6-KZx5dkOYXD_crh0,12084
79
+ runtimepy/data/js/classes/TabFilter.js,sha256=xajU1ZzVI0jFGhaHkKFX4-d2n2KlxiTC4it3N53-KxM,2115
80
+ runtimepy/data/js/classes/TabInterface.js,sha256=xBBPX9UqMXvo6yguaJ5p3-Za1lLj3FAMLQk5rx4azZ8,14864
81
81
  runtimepy/data/js/classes/UnitSystem.js,sha256=ys4OMabq47k_VvJpRItm82U0IequDvx3ysRJOQzDf94,906
82
- runtimepy/data/js/classes/WindowHashManager.js,sha256=tHGhjfPJCF253L98Dh8gKlxUDY2ct0G7RudoQXXxB-E,6860
82
+ runtimepy/data/js/classes/WindowHashManager.js,sha256=aR8zs1gUq9vkStLjyQj4rssx4dujLdDcoWNs91ViV44,7461
83
83
  runtimepy/data/js/classes/WorkerInterface.js,sha256=qARPW1CUDnHnVFVE8UjqKq74QfommCLwd6nisy-ayOw,346
84
84
  runtimepy/data/js/tab/env.js,sha256=MB79l3XyXKELWRqHcTnwWHiwdiceLHl1N_s-mS33pyU,22
85
85
  runtimepy/data/js/tab/sound.js,sha256=RSKp0AXM_zGOCsUvIT-BUjIzOE7Dp5NHiQG4fy7gBgY,1388
@@ -90,7 +90,7 @@ runtimepy/data/md/PeriodicTask.md,sha256=yzKxrBAvzJwS4-ZUUlrH3J_LEHDfnkDR3ClhYFX
90
90
  runtimepy/data/md/RuntimeStruct.md,sha256=Mu6fYUk2GYfGYQPFUZkXvTYkj2WSR0T_gKJXh0vRT-w,126
91
91
  runtimepy/data/md/RuntimepyPeer.md,sha256=ayjL1V5KXRBEixG0vfxIajY2Dt_H5SYaZGSscXHSL4E,34
92
92
  runtimepy/data/md/SinusoidTask.md,sha256=nTGmZXFv-r9d-ZgmmIHr6SKSp-K-nzJW-B6NKhg7FQ8,739
93
- runtimepy/data/schemas/BitFields.yaml,sha256=7tSjEQNo_j458EN16AgIaC5eh0iEXCj9EbVTVc-EkB8,926
93
+ runtimepy/data/schemas/BitFields.yaml,sha256=iE_3y30CgcpxvzwoC96BDhwbu2PZC-Lqu5C7XUeZ1go,1086
94
94
  runtimepy/data/schemas/Channel.yaml,sha256=9OQ3mOtPOlcWugvObpWKoAdFW0WvR9mSEzfdDYNf3fc,471
95
95
  runtimepy/data/schemas/ChannelCommand.yaml,sha256=h7-n5WjNwWgteZ8U5YpaBRncR_Uiqaa_wVfuTWQFrTY,257
96
96
  runtimepy/data/schemas/ChannelRegistry.yaml,sha256=f51YngVC8zDM3HwRMicKBOyoqjJ9EWsx3GWD0EkHCZk,136
@@ -99,9 +99,9 @@ runtimepy/data/schemas/ConnectionArbiterConfig.yaml,sha256=WorY7ttxvQA78TYuFoNHw
99
99
  runtimepy/data/schemas/EnumRegistry.yaml,sha256=BfLzEEUsHj6Fg_0JyGmgbNJ7F-auuLs5tAhJjSc86uU,145
100
100
  runtimepy/data/schemas/FindFile.yaml,sha256=dSPCDQy4FQZLMgOjtbR0-o2sZECvN_tvGa3LXNd1-wc,934
101
101
  runtimepy/data/schemas/PeerProcessConfig.yaml,sha256=RNVGG1NV9-Goa7aLE0ah7QNwKOTEoJj6EZDXTW-TALM,190
102
- runtimepy/data/schemas/RuntimeEnum.yaml,sha256=dN5bl-lOB3JON02aP1fdwAEP7BhadG1wo_oX6rn5d80,430
102
+ runtimepy/data/schemas/RuntimeEnum.yaml,sha256=P3SqlxJ7d_tbZlHZBZy2cCcnOASP8APwYKzAwITd7Kg,518
103
103
  runtimepy/data/schemas/ServerConnectionConfig.yaml,sha256=IqQUQB09xte4zGmM6Qi0-LTm5McDkoi2tehYspoNUXM,100
104
- runtimepy/data/schemas/StructConfig.yaml,sha256=3ifuvRIVzS4AzYu0c9k6TdmLs0PG5y8u25aRphTrxg0,73
104
+ runtimepy/data/schemas/StructConfig.yaml,sha256=KXcHMYsM5JgsIlHhfXW8tLx5GuekS6m5jsgPCm-_tZ4,175
105
105
  runtimepy/data/schemas/TaskConfig.yaml,sha256=upEfToPllsqEcDoJf9D3rbvXk08nc0slmlUSMyCOYcQ,247
106
106
  runtimepy/data/schemas/channel_controls.yaml,sha256=pctqV_fVjRpiKdaPqET7yyoGVYQuUtOYc1FLQUdfVJc,546
107
107
  runtimepy/data/schemas/has_config.yaml,sha256=SMuJ9tNWw06tsgDasz4myO9SSmMZGep9xBfJ89GJnqA,80
@@ -109,12 +109,12 @@ runtimepy/data/schemas/has_factory.yaml,sha256=Rsqrxv3HEBUGxPcW6CN7QczA96iBSgtm0
109
109
  runtimepy/data/schemas/has_markdown.yaml,sha256=LbnEQRYdk5KR_GgORmIOiKjRg-HF8wjhA6Dm6pSm66I,45
110
110
  runtimepy/data/schemas/has_name.yaml,sha256=I5YkXxQRYz-1-49CLyr_NA2zVqyRVQCAsb-icTaxF4s,59
111
111
  runtimepy/data/schemas/has_request_flag.yaml,sha256=S8ly8g-FkrCVNEizbXPqicg_hpGvtH7WRsHZAA4uhjc,66
112
- runtimepy/data/static/css/bootstrap-icons.min.css,sha256=EoLzUdj3UdQWT2RcOpAC-rcW7Pn9hIb6bormR_DJWeE,85889
113
- runtimepy/data/static/css/bootstrap.min.css,sha256=PI8n5gCcz9cQqQXm3PEtDuPG8qx9oFsFctPg0S5zb8g,232803
114
- runtimepy/data/static/css/fonts/bootstrap-icons.woff,sha256=ux3pibg5cPb05U3hzZdMXLpVtzWC2l4bIlptDt8ClIM,176032
115
- runtimepy/data/static/css/fonts/bootstrap-icons.woff2,sha256=R2rfQrQDJQmPz6izarPnaRhrtPbOaiSXU-LhqcIr-Z4,130396
116
- runtimepy/data/static/js/bootstrap.bundle.min.js,sha256=CDOy6cOibCWEdsRiZuaHf8dSGGJRYuBGC-mjoJimHGw,80721
117
- runtimepy/data/static/js/webglplot.umd.min.js,sha256=R78x6mj8eMDf09Q1xeQRb63ZbVig-54VKpe1zjpmIRc,10807
112
+ runtimepy/data/static/css/bootstrap-icons.min.css,sha256=YWcTOU0uDzjc0ziOtRfrECKA-JAeU4SYUgIHmPwkqSk,87029
113
+ runtimepy/data/static/css/bootstrap.min.css,sha256=x7AwauKmt5DrGTlkPvW6439HiL-5Pjd1doeExMdCx3M,231973
114
+ runtimepy/data/static/css/fonts/bootstrap-icons.woff,sha256=9VUTt7WRy4SjuH_w406iTUgx1v7cIuVLkRymS1tUShU,180288
115
+ runtimepy/data/static/css/fonts/bootstrap-icons.woff2,sha256=bHVxA2ShylYEJncW9tKJl7JjGf2weM8R4LQqtm_y6mE,134044
116
+ runtimepy/data/static/js/bootstrap.bundle.min.js,sha256=OkQS-zjT3lXs3cjNMNQzk7C00p5lo02sP89V_4ah8Fg,80737
117
+ runtimepy/data/static/js/webglplot.umd.min.js,sha256=lkdF3_R9IgBmRitm8ja0WVoUHt8_CcWozGAzGoTCmFQ,10755
118
118
  runtimepy/data/static/png/chip-circle-bootstrap/1024x1024.png,sha256=zdMu3zKfi48pTrz3YOm0qZ1CIH5S3J2DvRdAwCMjI_E,46645
119
119
  runtimepy/data/static/png/chip-circle-bootstrap/128x128.png,sha256=bRq27gggpN7B6p7PyGyNOemt1c-T4m6h6TotUtZ_FlE,4937
120
120
  runtimepy/data/static/png/chip-circle-bootstrap/16x16.png,sha256=MbOq2JqEflTHIAf8jLxDkeF1DXHb1ioKYjDSnzKMs9c,661
@@ -125,6 +125,8 @@ runtimepy/data/static/png/chip-circle-bootstrap/32x32.png,sha256=QyCcPzmrgo1oU5O
125
125
  runtimepy/data/static/png/chip-circle-bootstrap/512x512.png,sha256=m6THSc68Y-RCxTXZ8PQd9quoKm65lE5uvH1BOb98xgg,21858
126
126
  runtimepy/data/static/png/chip-circle-bootstrap/64x64.png,sha256=Hef55zUatdD27jU4EUbnbgcxge-pHNNJs-_HVpt1oMw,2622
127
127
  runtimepy/data/static/svg/chip-circle-bootstrap.svg,sha256=uwo45eymlKmV3AOQ217Etarjb0UBzJJNFLa8JgQx86Y,3124
128
+ runtimepy/data/static/svg/outline-dark.svg,sha256=TIWpJVoDBhydwSCo-MINWP1b8ohqXmhR_OPP3og1DF4,5490
129
+ runtimepy/data/static/svg/outline-light.svg,sha256=n1BnY2VcIoFReVj6czO3WcZ0SdKviFKyfUFcJcLIojA,5490
128
130
  runtimepy/data/static/woff2/CascadiaCode-Bold.woff2,sha256=vnrwH_YbbVnq0_aedSECg-eieky43TOK3MxtCWIc_Ug,154520
129
131
  runtimepy/data/static/woff2/CascadiaCode-BoldItalic.woff2,sha256=OOWBMRXRJJKxEfEIlKKnT-tFqoZKqGw5hMa69t-gp1c,113236
130
132
  runtimepy/data/static/woff2/CascadiaCode-Italic.woff2,sha256=RbBc8ehMSl_ixGWnEe7zn841xDsyxdDJTo3rkYY-bf8,111628
@@ -134,10 +136,10 @@ runtimepy/data/static/woff2/CascadiaMono-BoldItalic.woff2,sha256=CwE1OsdCYTPqdWx
134
136
  runtimepy/data/static/woff2/CascadiaMono-Italic.woff2,sha256=S31PimDgq0GV7XMRV-YXeBA9gC54Wz9ukdAzw1nrc8g,104768
135
137
  runtimepy/data/static/woff2/CascadiaMono-Regular.woff2,sha256=hHPAFO0U10TCKBw-UofHN2BLjax9qNClzN9oWGKkQx0,143936
136
138
  runtimepy/data/static/woff2/README.md,sha256=flHwSRmDxd6OnWhzxmnXzwio1Mong5tB4d8VgieWCOs,289
137
- runtimepy/enum/__init__.py,sha256=WIBMOaogauR1u7mK-I4Z5BZUoWANU7alIlrz82QdCmY,5820
138
- runtimepy/enum/registry.py,sha256=b_oW8l-yNXvrVGfwQ2kKs2bqBk5pT48WBc2vXUTkJks,2861
139
+ runtimepy/enum/__init__.py,sha256=m44Mvgwrtm1iOoM16Q_TJIr84Zndqb0l0m6S1C4kEAg,6186
140
+ runtimepy/enum/registry.py,sha256=Pu-q4s_Mt1EWqizhc4Qzx5a9dMEI2Zgb3_ZwQH1HW9A,3270
139
141
  runtimepy/enum/types.py,sha256=uQYGvaAJVm5tUdwxn_SLHkTZHJpEf7364rTSL27necA,1027
140
- runtimepy/message/__init__.py,sha256=X5PZqSPGhNT4MruaiQjN4MwJHhy8gV9W32QXyxgS9-E,3004
142
+ runtimepy/message/__init__.py,sha256=HtEvU2P6r3_4Z6SpL7LUqLeobIYLkJVgeQZiNb3E3D4,3039
141
143
  runtimepy/message/handlers.py,sha256=He9NC7MCkaV2clKc8dTSZ_T8N2l3ATjaTFzBr9n1T34,3775
142
144
  runtimepy/message/interface.py,sha256=vg25Uhp7wrDFH6v2iRKUBwnCBpjc3JAFjwdu3KArrLo,11285
143
145
  runtimepy/message/types.py,sha256=vajDWKW32LjzsfH-eVCCxZTWVctj4_-tjanhnmCqUis,821
@@ -150,22 +152,22 @@ runtimepy/mixins/async_command.py,sha256=xZNTiRo_Kd_aJboLuFOkQyMo2Exn8ENyY483zdw
150
152
  runtimepy/mixins/enum.py,sha256=IRQR7HD8J0uoxahNqb-2LIVokFn1L2-v9I5HNFw9W3s,719
151
153
  runtimepy/mixins/environment.py,sha256=9dCy7nL1bwZY1p-ez8zy9Jf_6zhljSESnK9F9wtRdl8,3955
152
154
  runtimepy/mixins/finalize.py,sha256=pTziopAWXpyRy0I8UZZv8Q4abXvnH3RrQ_dt3Rh6xlA,1600
153
- runtimepy/mixins/logging.py,sha256=Z5zTIImkkwK0BVhm-4hEP6dzq_8pRkC9wYBCkRskmlc,3735
155
+ runtimepy/mixins/logging.py,sha256=il6w0hkJSCiMyN-V6cblefvaiEOid6SOnpcFtk80NwU,3869
154
156
  runtimepy/mixins/psutil.py,sha256=RlaEuyQ0-TynQxYW85vFuPiQ-29T2mIrsdaDlpSJq1s,1293
155
157
  runtimepy/mixins/regex.py,sha256=kpCj4iL1akzt_KPPiMP-bTbuLBHOpkUrwbCTRe8HSUk,1061
156
158
  runtimepy/mixins/trig.py,sha256=vkDd9Rh8080gvH5OHkSYmjImVgM_ZZ7RzMxsczKx5N4,2480
157
- runtimepy/net/__init__.py,sha256=leveti9T8P1WAg3M5N7yT_JrUZRCXwZQ8mRsxel-KP4,830
159
+ runtimepy/net/__init__.py,sha256=HQaWGxnEH49JSPX2Q_N5QNSV0Wd_x0zZQJa1SV1EC_M,790
158
160
  runtimepy/net/backoff.py,sha256=IVloxQd-gEK62gFAlU2aOwgTEXhsNUTBfS16eiOqKG8,1080
159
- runtimepy/net/connection.py,sha256=c504S2gK5dsFdQu3pZ6zgRVgJEdP-tzxmFdX33MoUtg,12870
161
+ runtimepy/net/connection.py,sha256=5rjdfqq58DU5XW5eaZgkO8vIjENYiNLtzE7iV1uWvxk,12878
160
162
  runtimepy/net/manager.py,sha256=-M-ZSB9izay6HK1ytTayAYnSHYAz34dcwxaiNhC4lWg,4264
161
- runtimepy/net/mixin.py,sha256=5UlFK4lRrJ2O0nEUuScGbkYd4-El-RruFt_UcQR0aic,3039
163
+ runtimepy/net/mixin.py,sha256=0NTKeuaoUNm7--GzA7rxU3gb1rrGGhu1vNj6mek4dDA,3022
162
164
  runtimepy/net/mtu.py,sha256=XnLXAFMsDxK1Lj5v_zgWaBrC3lNqf81DkbDc6hpMdmI,3495
163
165
  runtimepy/net/ssl.py,sha256=dj9uECPKDT5k-5vlR5I3Z7Go3WWZhbaJ9nb0rC3kJvg,854
164
166
  runtimepy/net/util.py,sha256=XTQQ-Ql_ImhVd1_O8nSeDX9MY8xJwRBggvliSLCrsc8,5913
165
167
  runtimepy/net/apps/__init__.py,sha256=vjo7e19QXtJwe6V6B-QGvYiJveYobnYIfpkKZrnS17w,710
166
168
  runtimepy/net/arbiter/__init__.py,sha256=ptKF995rYKvkm4Mya92vA5QEDqcFq5NRD0IYGqZ6_do,740
167
169
  runtimepy/net/arbiter/base.py,sha256=q9mQ3vjVjlzjGrDcTq8gengsEV2AnCUx8IK_40h6uxg,15011
168
- runtimepy/net/arbiter/info.py,sha256=aMo4LvRAO7_4x1ff13yZCiI5qOUdzAk1yZZAbrQIOAc,9734
170
+ runtimepy/net/arbiter/info.py,sha256=QcBB1LQELXPs-Ud-GVq3aDBL4mpSMDcjjLtuKgojiU8,10962
169
171
  runtimepy/net/arbiter/result.py,sha256=PHZo5qj4SI08ZeWPFk_8OZ1umI6L0dp5nJpjjS8QUpM,2871
170
172
  runtimepy/net/arbiter/task.py,sha256=APcc5QioAG8uueIzxJU-vktIn8Ys3yJd_CFlRWb6Ieo,795
171
173
  runtimepy/net/arbiter/udp.py,sha256=-ecHJs-utcsiTfr5wSb73hUUuYFBeRVT_D1znYp5q6A,893
@@ -179,76 +181,77 @@ runtimepy/net/arbiter/factory/task.py,sha256=YLRv55dnDBqHRJIMYgO9_uHi0AW-8hwa0n3
179
181
  runtimepy/net/arbiter/housekeeping/__init__.py,sha256=-6P2x_qSWp1juml0wKZGJ343c-atrbp8YkDRWn162UA,3622
180
182
  runtimepy/net/arbiter/imports/__init__.py,sha256=W7-kkM4B_zDU42Fyh0PmZL56JslS_0_qzvpzUhN6aDU,5041
181
183
  runtimepy/net/arbiter/imports/util.py,sha256=d4_HnWphrkiHQkyYr8YJKvSSTXoMf3Bct_7jg_CS9eA,1086
182
- runtimepy/net/arbiter/struct/__init__.py,sha256=Vr38dp2X0PZOrAbjKsZ9xZdQ1j3z92s4QuvRtYYVuNI,5990
184
+ runtimepy/net/arbiter/struct/__init__.py,sha256=HaLykBdZkaJI5HdXBKcc_YsWmbKVtuZnEDkQJKh8NYQ,6044
183
185
  runtimepy/net/arbiter/tcp/__init__.py,sha256=djNm8il_9aLNpGsYResJlFmyIqx9XNLqVay-mYnn8vc,1530
184
186
  runtimepy/net/arbiter/tcp/json.py,sha256=W9a_OwBPmIoB2XZf4iuAIWQhMg2qA9xejBhGBdNCPnI,742
185
187
  runtimepy/net/factories/__init__.py,sha256=rPdBVpgzzQYF61w6efQrEre71yMPHd6kanBpMdOX-3c,4672
186
- runtimepy/net/html/__init__.py,sha256=mlr7J7gBr9EwwKq4iMbq3QYKxie16AQDKa92_sUB2xM,5108
188
+ runtimepy/net/html/__init__.py,sha256=8EuXyA4MODbIH5AG05pMhYUqjU-dw6qO6oQi9rckyuk,5666
187
189
  runtimepy/net/html/arbiter.py,sha256=SkZZm-CmyCxbAcWZbvCLH-RwFUJPvrvR5yWysVVuvCM,951
188
- runtimepy/net/html/bootstrap/__init__.py,sha256=F_gp2_YMTi4tKEwRIPQGwoarKWCwltd9HnvqAqCH2Hc,2429
189
- runtimepy/net/html/bootstrap/elements.py,sha256=NBdjg0_1LTxoyJrNQNw-2v8AWaiW2S1poJcDo4P6GWE,5355
190
- runtimepy/net/html/bootstrap/tabs.py,sha256=7-0lJOD9SALmsViUYGJAXF0PTSqtffc4mpoFwmYcnXE,3842
191
- runtimepy/net/http/__init__.py,sha256=4TjFp_ajAVcOEvwtjlF6mG-9EbEePqFZht-QpWIKVBo,1802
190
+ runtimepy/net/html/bootstrap/__init__.py,sha256=tiFtVPz2TZStwBqST4G8xc7woSc68rRJy1tx3n1GaJw,2429
191
+ runtimepy/net/html/bootstrap/elements.py,sha256=PsVDdExIZqPyTEowe-ViBzAWDxBNh9YbjTwHG7uZjWc,5832
192
+ runtimepy/net/html/bootstrap/tabs.py,sha256=Qtwcojlz5eCjkvFtM7qzrOc4TpLwoAxDAsFiSFEAmWA,4049
193
+ runtimepy/net/http/__init__.py,sha256=cMKNPyYZpdT03OR-HNfwzZbaKGchzlGIrK712daRK40,1829
192
194
  runtimepy/net/http/common.py,sha256=vpoO6XwRmrZmTkCu9bkI0HnyaD8MWTpV7ADesCNrfRE,2237
193
195
  runtimepy/net/http/header.py,sha256=AECSdvhBA9_5Pg3UdwMzsmBpcqgsiPj41xnIGPm5g5E,2296
194
- runtimepy/net/http/request_target.py,sha256=EE1aI5VSARw1h93jyZvP56ir5O5fjd6orYK-1FM4JNk,1550
196
+ runtimepy/net/http/request_target.py,sha256=EfcOozUeXqOuQaMXH9cErfJqUkG0A5v9HEK4tCorSf4,1543
195
197
  runtimepy/net/http/response.py,sha256=fD0R_BUgmNwdwKQtXvYfTYM7DyJlwsGmlNVi5HkCOhU,3409
196
198
  runtimepy/net/http/state.py,sha256=qCMN8aWfCRfU9XP-cIhSOo2RqfljTjbQRCflfcy2bfY,1626
197
199
  runtimepy/net/http/version.py,sha256=mp6rgIM7-VUVKLCA0Uw96CmBkL0ET860lDVVEewpZ7w,1098
198
- runtimepy/net/server/__init__.py,sha256=prEf7pNhM7t9xP7_ZM0uzESUomlZuqDtDlE34MnyCb0,11431
199
- runtimepy/net/server/html.py,sha256=TZ2ZSPTxgA6KAKS26tNrSUpxFUrdk92K5zP2ybcSYqs,1892
200
- runtimepy/net/server/json.py,sha256=a7vM5yfq2er4DexzFqEMnxoMGDeuywKkVH4-uNJBAik,2522
201
- runtimepy/net/server/markdown.py,sha256=3kLQR3fsGFU8dUiDuMbUiLv7XKx9s4zXy9SZsJDDc9Y,1507
202
- runtimepy/net/server/app/__init__.py,sha256=_Hmbhu2TvO1aUrxfExbOi5qW9LNVTti8-ndwLpYrhjA,3089
200
+ runtimepy/net/server/__init__.py,sha256=5KalIcOWv8lYm8747pq2rzGwpLz713XdHuQIKbWJsXc,11649
201
+ runtimepy/net/server/html.py,sha256=OB2K37kA7MHtcKqp0pZE1q_XgiyvfooigzS0-OQFCCM,1900
202
+ runtimepy/net/server/json.py,sha256=AaMPw-G-7xX67mf1LvQAipNdwrnmbLDunVlkWf6iOz0,2526
203
+ runtimepy/net/server/markdown.py,sha256=AvwWQg7DgMSroOxNN0KEKwpPoLueNvv2GSBdPzQbMvI,1734
204
+ runtimepy/net/server/mux.py,sha256=ejET7NpJzzJjkVwR8laSuZYR79DOT3XazmAIm6rENSE,598
205
+ runtimepy/net/server/app/__init__.py,sha256=0eCcqYvmby_wQTGqAiGbGM5LCxKM2qpjuIT0gLHsoDU,3157
203
206
  runtimepy/net/server/app/base.py,sha256=46aOqZwRss_nh_WfEH1cMJ9GUVoLJjERd7cTRFu6mXE,1878
204
- runtimepy/net/server/app/create.py,sha256=eRT8qxubht5A7149Xol3Z8rkdYd_pjNLqrlyMnXk-Zg,2660
207
+ runtimepy/net/server/app/create.py,sha256=1Z6YUUBempk8lCIuZG_RE0qlHau-E152_Utf4z6bz_k,2672
205
208
  runtimepy/net/server/app/elements.py,sha256=KJt9vWqkfvniJMiLOJN467JjPPrEqJYZXmDuY1JoY1g,455
206
209
  runtimepy/net/server/app/files.py,sha256=9EiGA5aYczJN6BJifAIZ8e3wBbIGCekVLCu0D54ZAFc,968
207
- runtimepy/net/server/app/landing_page.py,sha256=nO7uIO30Sw3R41qH8I1q9RWk1RFLDy8JhlrkA3avTQQ,870
210
+ runtimepy/net/server/app/landing_page.py,sha256=9TXpL0ITYWCxw9Potq71ZOwLlIlMegcK6WHyD5INgWY,874
208
211
  runtimepy/net/server/app/placeholder.py,sha256=OuiMNvLEK0pI2N3oIqvPRaperoJkDg-fBds9HHfuosg,1664
209
212
  runtimepy/net/server/app/pyodide.py,sha256=dGJ4u78eYQLU9RQbZEWgzv-7jVIwblS6VopibG82tA4,478
210
213
  runtimepy/net/server/app/sound.py,sha256=qG2k00nWRPAmI5_4L_LMs10nsCTBKaAzIp80embgua8,837
211
214
  runtimepy/net/server/app/tab.py,sha256=gRiaUJdB3V9hIKI5MksW7spNChfMtEMDFWCTP1ERrZ4,2272
212
- runtimepy/net/server/app/env/__init__.py,sha256=_FcgefASOwifwT0m5opg8jQbpZAVoedhNxWw0v1VB1k,4147
215
+ runtimepy/net/server/app/env/__init__.py,sha256=IYk_DuedEQRp1rzKCi1FT4xks_RI-XGTsWh5zJtZkYc,4771
213
216
  runtimepy/net/server/app/env/modal.py,sha256=HTipCYgQaAUtsmlBjXKfhAM5JyhLqoIIwEwsPnKhrG8,1740
214
- runtimepy/net/server/app/env/settings.py,sha256=DboR8vXrdGeB_ehP9USvnyUtzgo4JR5CyYV9AGLYHGI,1720
215
- runtimepy/net/server/app/env/widgets.py,sha256=XT39-9zJ-5-XhY-PWHmWAU4JMqY8I4syk1fYUYv2OzM,5413
217
+ runtimepy/net/server/app/env/settings.py,sha256=m87hHAapuNq0xKzDNSNTwG8D2Cb3QFSVrziszf8iVHs,1631
218
+ runtimepy/net/server/app/env/widgets.py,sha256=sDfJYBVIXZuly4Rvch597Y-LTT6t3obxc60oejqGv7g,7104
216
219
  runtimepy/net/server/app/env/tab/__init__.py,sha256=stTVKyHljLQWnnhxkWPwa7bLdZtjhiMFbiVFgbiYaFI,647
217
220
  runtimepy/net/server/app/env/tab/base.py,sha256=QBTBBvsdihbzK5MqrJBf6K5N61b3i8Ms0P6Xq_h1mbs,1171
218
- runtimepy/net/server/app/env/tab/controls.py,sha256=bifFMvshDNsar3UiqeXOCYi71JGFRlMnyixKXrdLAEI,4728
219
- runtimepy/net/server/app/env/tab/html.py,sha256=2Vgd50FubFlm24G5mECFrTi0YWYz3KIpcEq9mKtI5dk,7197
221
+ runtimepy/net/server/app/env/tab/controls.py,sha256=11TidvphKyvLCgdW8Sjiyd6BpX4-ybGZPEhrn-hzkuU,8263
222
+ runtimepy/net/server/app/env/tab/html.py,sha256=MbEQzxEPNcMCntGGm2qWli6ND_Ina46CEVzt7HF2yBg,8210
220
223
  runtimepy/net/server/app/env/tab/message.py,sha256=-J8wBo1KH0XoBi9VcUvl9LXZCaoFAmvFyMf_YFJVF6Q,3945
221
224
  runtimepy/net/server/struct/__init__.py,sha256=Zy37r6RLFu-XFr9vsanSq80BJdS6Dxr7zmPzQbb7xdw,1799
222
225
  runtimepy/net/server/websocket/__init__.py,sha256=KISuFUUQwNn6BXo8BOMuMOXyoVqE7Jw94ZQiSCQuRQE,5279
223
226
  runtimepy/net/server/websocket/state.py,sha256=tClzw_3pOV9fzsiqnmss0FUsZZPhInL2CnDi_jyrayI,2291
224
- runtimepy/net/stream/__init__.py,sha256=1PNossiE4S9wtPYoiHVsTeAMJFGtiak5vbsoIkVGfZs,2374
225
- runtimepy/net/stream/base.py,sha256=Dg4vcR0n9y2122AyJ-9W-jkEhNla_EHO-DqJJPfGD4k,1977
227
+ runtimepy/net/stream/__init__.py,sha256=B4NipXGwA2AQ5UJ8YVJqqOg_X_Cm7p2nfIbIXJMiGBI,2359
228
+ runtimepy/net/stream/base.py,sha256=lL2-t-T2ldfUJHuFIf8X4_WdXlsVZOue7w_FOLHtmQY,1987
226
229
  runtimepy/net/stream/string.py,sha256=61mgserU3p6j5gAcK0oe0aKqL6vDh7NtgJvbPoiAUPM,784
227
230
  runtimepy/net/stream/json/__init__.py,sha256=h--C_9moW92TC_e097FRRXcg8GJ6VVbMLXl1cICknys,2508
228
231
  runtimepy/net/tcp/__init__.py,sha256=OOWohegpoioSTf8M7uDf-4EV1IDungz7-U19L_2yW4I,250
229
- runtimepy/net/tcp/connection.py,sha256=sYWj2aDiAHQf70zfRJM24cHraFd_TuzTD4fRWeSQZXE,8811
232
+ runtimepy/net/tcp/connection.py,sha256=FL9SlODVAehECYgF9eKk8sbDMmTMBGlsGJlGaMncQh4,8793
230
233
  runtimepy/net/tcp/create.py,sha256=zZsRs5KYpO3bNGh-DwEOEzjUDE4ixj-UBHYgZ0GvC7c,2013
231
- runtimepy/net/tcp/protocol.py,sha256=vEnIX3gUX2nrw9ofT_e4KYU4VY2k4WP0WuOi4eE_OOQ,1444
232
- runtimepy/net/tcp/http/__init__.py,sha256=-ODo-dJcyD-NZnRIFoWT9JdQnDaP_cXJ9IViwXIQe24,6301
233
- runtimepy/net/tcp/scpi/__init__.py,sha256=aWCWQfdeyfoU9bpOnOtyIQbT1swl4ergXLFn5kXAH28,2105
234
- runtimepy/net/tcp/telnet/__init__.py,sha256=96eJFb301I3H2ivDtGMQtDDw09Xm5NRvM9VEC-wjt8c,4768
234
+ runtimepy/net/tcp/protocol.py,sha256=vT4HOH-WLrM0j4kUpQA_ZZOwA-kJPMP9M40ptuL84_0,1412
235
+ runtimepy/net/tcp/http/__init__.py,sha256=0nEB6KFqV9GxMwFKqKIswA0wihHfbLP5UD-r5ulgTj0,6391
236
+ runtimepy/net/tcp/scpi/__init__.py,sha256=FcNouVQh0A27-x16lzTbt7vZfWs4bRU9uZqbeVjDfiU,2173
237
+ runtimepy/net/tcp/telnet/__init__.py,sha256=2pGaG-IlZA29BM6QAvI4q9w484fgvypX4fOIioDem94,4814
235
238
  runtimepy/net/tcp/telnet/codes.py,sha256=1-yyRe-Kz_W7d6B0P3iT1AaSNR3_Twmn-MUjKCJJknY,3518
236
239
  runtimepy/net/tcp/telnet/np_05b.py,sha256=ikp9txHBvbRps6x7C1FsEf9i6vmUtGvei4Nukc_gypI,7887
237
240
  runtimepy/net/udp/__init__.py,sha256=VSgle6cO2RXfwaei66wMIJ4zSB4gzpoadSSbmLfCzBw,357
238
- runtimepy/net/udp/connection.py,sha256=Hv963vT9tnglpZOx4KUFuoYTBPr2rltYQWDNV3mhYpE,8018
241
+ runtimepy/net/udp/connection.py,sha256=n3fS3zVx24TP2Qx8rXkTCHlvJZV-Iq4QzXsQ3PJtmoY,8047
239
242
  runtimepy/net/udp/create.py,sha256=84YDfJbNBlN0ZwbNpvh6Dl7ZPecbZfmpjMNRRWcvJDk,2005
240
- runtimepy/net/udp/protocol.py,sha256=A4SRHf0CgcL2zDs1nAsGDqz0RxKBy1soS8wtNdS5S0I,1492
241
- runtimepy/net/udp/queue.py,sha256=DF-YscxQcGbGCYQLz_l_BMaSRfraZOhRwieTEdXLMds,637
243
+ runtimepy/net/udp/protocol.py,sha256=zx_756bqg-Ylqcufw6B0HQdJLhFIKfTtriCtbQUiCEg,1424
244
+ runtimepy/net/udp/queue.py,sha256=giSXovXeZwEyOOTb0pP0Q1Ffkc51QyWK0EsthXX0xjQ,706
242
245
  runtimepy/net/udp/tftp/__init__.py,sha256=lR8_bFo8ECHMQygWsmbnNpsLqmwu6818k-cjKRE57yk,8983
243
- runtimepy/net/udp/tftp/base.py,sha256=vpvjitZSD8R4Ggb21eIMNIsm54VkLBbBrTgMo65gn2o,11331
246
+ runtimepy/net/udp/tftp/base.py,sha256=cUEkRfzhi4eEQ3pxUsRsYl2_UlAQOjBkOixzVkaIG14,11377
244
247
  runtimepy/net/udp/tftp/endpoint.py,sha256=so60LdPTG66N5tdhHhiX7j_TBHvNOTi4JIgLcg2MAm0,10890
245
248
  runtimepy/net/udp/tftp/enums.py,sha256=06juMd__pJZsyL8zO8p3hRucnOratt1qtz9zcxzMg4s,1579
246
249
  runtimepy/net/udp/tftp/io.py,sha256=w6cnUt-T-Ma6Vg8BWoRbsNnIWUv0HTY4am6bcLWxNJs,803
247
250
  runtimepy/net/websocket/__init__.py,sha256=YjSmoxiigmsI_hcQw6nueX7bxhrRGerEERnPvgLVEVA,313
248
- runtimepy/net/websocket/connection.py,sha256=BMR58bLpHuulCdbLGnmMdFJOF53wVxYcUe52WbdzKEM,9025
251
+ runtimepy/net/websocket/connection.py,sha256=VS1ifMrpIOiqvUakZWSGypqTZEWTMXhjRDiGMJ2gkZs,10129
249
252
  runtimepy/noise/__init__.py,sha256=EJM7h3t_z74wwrn6FAFQwYE2yUcOZQ1K1IQqOb8Z0AI,384
250
253
  runtimepy/primitives/__init__.py,sha256=g5IK6e_UZuGhj9QNYoCn5TbhNatWX0nEYUs-JzsOizQ,2618
251
- runtimepy/primitives/base.py,sha256=5bMNHA9LA10qg8Qpg1YDjkfRZK0XWyaQsTNkNzaR9Es,9285
254
+ runtimepy/primitives/base.py,sha256=6N_mfTuv0RJJYofSQQ858vJfgcTvjjvfXeebMw_1bw8,9339
252
255
  runtimepy/primitives/bool.py,sha256=lATPgb1e62rjLn5XlJX8lP3tVYR3DlxV8RT9HpOMdT0,1640
253
256
  runtimepy/primitives/byte_order.py,sha256=J2Pg3gXg8Lmu_uU2mduNJt3mnP_enwDI4Y-X8kWAUP0,1456
254
257
  runtimepy/primitives/evaluation.py,sha256=0N7mT8uoiJaY-coF2PeEXU2WO-FmbyN2Io9_EaghO9Q,4657
@@ -256,26 +259,26 @@ runtimepy/primitives/float.py,sha256=6vzNKnnLzzM4vP10V4E0PHZQH6vTvIl34pId1oFtlqc
256
259
  runtimepy/primitives/int.py,sha256=Ia2vtzXXfBb8fj1mgwu_PFpblrL2qzsN4Qwjvk5NhT4,3618
257
260
  runtimepy/primitives/scaling.py,sha256=Vtxp2CSBahqPp4i2-IS4wjbcC023xwf-dqZMbYWf3V4,1144
258
261
  runtimepy/primitives/string.py,sha256=ic5VKhXCSIwEOUfqIb1VUpZPwjdAcBul-cLLIihVkQI,2532
259
- runtimepy/primitives/array/__init__.py,sha256=ZVJt4810hTFYMdolY_R75lRRHHaNKxZ4comBvuK_69E,8956
260
- runtimepy/primitives/field/__init__.py,sha256=iHZSQBozMpfiv_5KE_GIX1FAvDB9unUO0xmWZHiA_Jk,4491
261
- runtimepy/primitives/field/fields.py,sha256=c7J8BHAmOoJmRZQzYWKzYtsB_DnWwvRiKd0oj0HpyD0,7668
262
+ runtimepy/primitives/array/__init__.py,sha256=Wbhi0-frR72Yq1g0sZG2-kRpWX4uEvbEaOp8LCiKojI,8975
263
+ runtimepy/primitives/field/__init__.py,sha256=0xsbD95msOogDhoBLY-9hMM0AHVjVpCl26qfToKlJ54,5426
264
+ runtimepy/primitives/field/fields.py,sha256=Iq5FJihEVKDqFEsIgrLL8YtkyJhfxk4scAr5n0WtLG4,7967
262
265
  runtimepy/primitives/field/manager/__init__.py,sha256=BCRi6-_5OOJ8kz78JHkiLp8cZ71KA1uiF2zq5FFe9js,2586
263
- runtimepy/primitives/field/manager/base.py,sha256=lXEdRm4TlH8TYm_YQ8UH33RhDfH0OhUnwMx1Kc1I_ys,7066
266
+ runtimepy/primitives/field/manager/base.py,sha256=MKmm882Gr8gQcbycPoMQuQafBXsI7AjZEdqmc7ALu-Y,7568
264
267
  runtimepy/primitives/serializable/__init__.py,sha256=R9_derxnK1OCaYyqBZA4CCjPkXCBw6InkE8-3Zy75Uk,399
265
- runtimepy/primitives/serializable/base.py,sha256=EIj7Ao0sZaXCXgZari35kimjkr3SzFWGy3rNjxgsv1E,5727
266
- runtimepy/primitives/serializable/fixed.py,sha256=rhr6uVbo0Lvazk4fLI7iei-vVNEwP1J8-LoUjW1NaMI,1077
268
+ runtimepy/primitives/serializable/base.py,sha256=tcLC6l0cJfSFZc9MeREv_3BzpW9EJnEEaDDRbQ-qBgo,5795
269
+ runtimepy/primitives/serializable/fixed.py,sha256=gg86rultzHLW4qpYg8Z8hm06set7xmgcm50mTZixMPQ,1145
267
270
  runtimepy/primitives/serializable/framer.py,sha256=rsoGQz6vD7v_EMu67aqxVqbvmbs6hjytXZ8dHLBM0SQ,1815
268
- runtimepy/primitives/serializable/prefixed.py,sha256=oQXW0pGRovKolheL5ZL2m9aNVMCtKTAi5OlC9KW0iKI,2855
271
+ runtimepy/primitives/serializable/prefixed.py,sha256=brERtFPV1UsO6p5D6Da_5kRy8MITQ_3cCDUeu8LfnaM,2916
269
272
  runtimepy/primitives/types/__init__.py,sha256=AcjLKotJ3A-9jNgThca1dBKsGKENPUGPiJAb6aauTpA,1876
270
- runtimepy/primitives/types/base.py,sha256=rR1JkExMV2FJmvU-WfgnikG-UtFfsXGs_eBCIV6II1A,4879
273
+ runtimepy/primitives/types/base.py,sha256=B37oV2tguZcPpygripAnNf1PFAA55NFlkZC0i7aKTIc,4940
271
274
  runtimepy/primitives/types/bool.py,sha256=J0SYdp-9eIRs337d9qnw2f7IXTPQj_F21ugMIJ8-Hy4,547
272
- runtimepy/primitives/types/bounds.py,sha256=Hc2GWu4qJMEAF8IiDWFA_6VCNUtrNf5RmiEbSJ76dJI,1145
275
+ runtimepy/primitives/types/bounds.py,sha256=rBwcdHvMxZG5ikirTwfVnXIVKJ1mx3cM01XCprzXOZM,1349
273
276
  runtimepy/primitives/types/float.py,sha256=yjiU1AGzekY8PjDcLNdoXMGDsdP5aDYWjLb3_RntRpA,1388
274
277
  runtimepy/primitives/types/int.py,sha256=Gjro7RgPL1girVVXhvDErvRwxlfHclMr7tZEFYj-Uj4,3807
275
- runtimepy/registry/__init__.py,sha256=NpMxvdmjRtE3jCCOuYU_CPpYWqCZ5byXWhJNTB6jZUk,3425
278
+ runtimepy/registry/__init__.py,sha256=MDgJjHYVpG4FTByc9nws2pDR3lSa24iuB9NUXaF7ckM,4152
276
279
  runtimepy/registry/bool.py,sha256=ri56paLqwIOUo9JkSpwvrWmed9lHA851gke-0m8vGew,735
277
280
  runtimepy/registry/item.py,sha256=HPqxmzuK8aOc1siHzYScgxYxSMZ4RVTmnsRW2oNcW34,852
278
- runtimepy/registry/name.py,sha256=uhxmijwUT7x59NUYV4hJSe7VcnAbLDUSAPaKhR6K-N0,1749
281
+ runtimepy/registry/name.py,sha256=TkNm7kff_Id6p_b9jr8YTi1UN1xCNzwk38IEomE7o5Q,1915
279
282
  runtimepy/sample/__init__.py,sha256=N7P6hnCLF9NwnkZA1h3LzS2C334SAO48Fu8adHxWGLU,56
280
283
  runtimepy/sample/peer.py,sha256=uNlIPAv1-wjGUWdR0AM3L9NUMjnIMJBqQ9ZsHdTLx3Q,1688
281
284
  runtimepy/sample/program.py,sha256=AFqinsnsjzatgJXePAO4yXYerxmzN7ajtDmJPwWigYc,2428
@@ -301,10 +304,10 @@ runtimepy/tui/mock.py,sha256=Vn0XK2OQ_ukSSHeS8xkzFfJPsmAplRiu7vIwb2SnUHI,1874
301
304
  runtimepy/tui/task.py,sha256=nUZo9fuOC-k1Wpqdzkv9v1tQirCI28fZVgcC13Ijvus,1093
302
305
  runtimepy/tui/channels/__init__.py,sha256=evDaiIn-YS9uGhdo8ZGtP9VK1ek6sr_P1nJ9JuSET0o,4536
303
306
  runtimepy/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
304
- runtimepy/ui/controls.py,sha256=yvT7h3thbYaitsakcIAJ90EwKzJ4b-jnc6p3UuVf_XE,1241
305
- runtimepy-5.14.2.dist-info/licenses/LICENSE,sha256=yKBRwbO-cOPBrlpsZmJkkSa33DfY31aE8t7lZ0DwlUo,1071
306
- runtimepy-5.14.2.dist-info/METADATA,sha256=X_vqvOJe5dbwhTksgXV9TRN9hJLZkLQ9DXUiJ2MO7po,9269
307
- runtimepy-5.14.2.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
308
- runtimepy-5.14.2.dist-info/entry_points.txt,sha256=-btVBkYv7ybcopqZ_pRky-bEzu3vhbaG3W3Z7ERBiFE,51
309
- runtimepy-5.14.2.dist-info/top_level.txt,sha256=0jPmh6yqHyyJJDwEID-LpQly-9kQ3WRMjH7Lix8peLg,10
310
- runtimepy-5.14.2.dist-info/RECORD,,
307
+ runtimepy/ui/controls.py,sha256=L55Af-4vGq6ZHewdoA7C_mAYq35WXl8NzOdcsmQIo7M,1868
308
+ runtimepy-5.15.0.dist-info/licenses/LICENSE,sha256=yKBRwbO-cOPBrlpsZmJkkSa33DfY31aE8t7lZ0DwlUo,1071
309
+ runtimepy-5.15.0.dist-info/METADATA,sha256=Hr1TYcveiC09pGHx5nro_VVvBfy3y1upL9vOgyTO0p4,9268
310
+ runtimepy-5.15.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
311
+ runtimepy-5.15.0.dist-info/entry_points.txt,sha256=-btVBkYv7ybcopqZ_pRky-bEzu3vhbaG3W3Z7ERBiFE,51
312
+ runtimepy-5.15.0.dist-info/top_level.txt,sha256=0jPmh6yqHyyJJDwEID-LpQly-9kQ3WRMjH7Lix8peLg,10
313
+ runtimepy-5.15.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.4.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
runtimepy/data/404.html DELETED
@@ -1,7 +0,0 @@
1
- <!doctype html><html lang=en><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>Libre Embedded - Home
2
- </title><meta http-equiv=Cache-Control content="public"><link rel=icon href=/favicon.ico><meta name=description content="Libre Embedded Engineering Technologies LLC is an engineering consultancy and product development company. This page was rendered from Markdown by runtimepy/5.13.3."><style>@font-face{font-family:CascadiaCode;src:url(/static/woff2/CascadiaCode-Regular.woff2)}@font-face{font-family:CascadiaCode;src:url(/static/woff2/CascadiaCode-Bold.woff2);font-weight:700}@font-face{font-family:CascadiaCode;src:url(/static/woff2/CascadiaCode-BoldItalic.woff2);font-weight:700;font-style:italic}@font-face{font-family:CascadiaCode;src:url(/static/woff2/CascadiaCode-Italic.woff2);font-style:italic}@font-face{font-family:CascadiaMono;src:url(/static/woff2/CascadiaMono-Regular.woff2)}@font-face{font-family:CascadiaMono;src:url(/static/woff2/CascadiaMono-Bold.woff2);font-weight:700}@font-face{font-family:CascadiaMono;src:url(/static/woff2/CascadiaMono-BoldItalic.woff2);font-weight:700;font-style:italic}@font-face{font-family:CascadiaMono;src:url(/static/woff2/CascadiaMono-Italic.woff2);font-style:italic}</style><link rel=stylesheet href=/static/css/bootstrap-icons.min.css></link>
3
- <link href=/static/css/bootstrap.min.css rel=stylesheet crossorigin=anonymous></link><style>html{height:100%;width:100%;position:fixed}body{height:100%;margin:0;overflow:hidden}body>:first-child{height:100%}#runtimepy{height:100%}#runtimepy-tabs{width:min-content}#runtimepy-splash{position:fixed;top:0;left:0;width:100vw;height:100vh;opacity:1}.click-plot{cursor:pointer}.stale{color:var(--bs-warning-text-emphasis)!important}.slider{min-width:8em}.toggle-value{}.window-button{border-right:var(--bs-border-width)var(--bs-border-style)var(--bs-link-hover-color)!important}:focus{outline:none}.flex-column-scroll-bodge{height:100%;flex-wrap:nowrap;overflow-y:scroll;flex-shrink:0}.scroll{overflow:scroll}.tab-content-bodge{width:100%;height:100%}.button-bodge{text-align:left}.collapsing{transition:none!important}.tab-pane.fade{transition:none!important}.modal.fade{transition:none!important}.modal-dialog{width:80%;max-width:80%}.table{margin-bottom:0;width:auto}.table-container{overflow-x:scroll;min-height:fit-content}.channel-column{overflow-y:scroll;overflow-x:hidden;flex-grow:0;flex-shrink:0;max-width:75%}.channel-value{min-width:10em}.table>tbody>tr>td{vertical-align:middle}.collapse:not(.show){display:none!important}select.form-select{width:min-content}select.form-select:hover{cursor:pointer}textarea.text-logs{min-height:10em!important;padding-top:0!important;padding-bottom:0!important;border-top:0}.vertical-divider{flex-basis:.75em;flex-grow:0;flex-shrink:0}pre{color:var(--bs-code-color)}.vertical-divider:hover{cursor:col-resize;background-color:var(--bs-highlight-bg)!important}button:hover{background-color:var(--bs-tertiary-bg)}.channel-value-input{width:6em}:root,[data-bs-theme=dark],[data-bs-theme=light]{--bs-font-sans-serif:CascadiaCode, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace:CascadiaMono, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}</style><div id=runtimepy class="d-flex bg-body align-items-start" data-bs-theme=dark><div class="bg-dark-subtle d-flex h-100 flex-column"><button type=button id=theme-button title="change theme button" class="btn btn-secondary rounded-0 font-monospace button-bodge text-nowrap has-tooltip" data-bs-title="Toggle light/dark." data-bs-placement=right>
4
- <i class="bi bi-lightbulb"></i>
5
- </button>
6
- <a href="?print=true"><button type=button id=print-button title="print-view button" class="btn btn-secondary rounded-0 font-monospace button-bodge text-nowrap has-tooltip" data-bs-title="Printer-friendly view." data-bs-placement=right>
7
- <i class="bi bi-printer"></i></button></a></div><div class="h-100 flex-grow-1 justify-content-between text-body d-flex overflow-y-auto flex-column"><div></div><div class="justify-content-between d-flex flex-row"><div></div><div class="text-body p-3 pb-0"><h1><a href=/><img alt=logo src=/static/png/chip-circle-bootstrap/128x128.png></a> Resource Not Found (404) <a href=/><img alt=logo src=/static/png/chip-circle-bootstrap/128x128.png></a></h1><p>(<a href=/>home</a>)</div><div></div></div><div></div></div></div><script>function worker_config(e){let t={},s="runtimepy_websocket",n="ws";location.protocol.includes("https")&&(s="runtimepy_secure_websocket",n+="s");let o=e.config.ports;for(let r in o){let i=o[r],a=e.config.websocket_hostname||window.location.hostname;i.name.includes(s)&&(i.name.includes("data")?t.data=`${n}://${a}:`+i.port:t.json=`${n}://${a}:`+i.port)}return t}let tabFilter=void 0;function bootstrap_init(){const t=document.querySelectorAll(".has-tooltip"),n=[...t].map(e=>new bootstrap.Tooltip(e));let e=document.getElementById("runtimepy-tabs");e&&(tabFilter=new TabFilter(e))}let lightMode=!1;function lightDarkClick(){lightMode=!lightMode,document.getElementById("runtimepy").setAttribute("data-bs-theme",lightMode?"light":"dark"),window.location.hash=lightMode?"#light-mode":""}window.onload=()=>{let e=document.getElementById("theme-button");if(e&&e.addEventListener("click",lightDarkClick),window.location.hash){let t=window.location.hash.slice(1).split(",");t.includes("light-mode")&&e.click()}bootstrap_init()}</script><script src=/static/js/bootstrap.bundle.min.js crossorigin=anonymous></script>