@hyperscale0/hsx 1.0.0 → 1.0.124

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 (316) hide show
  1. package/CHANGELOG.md +5 -256
  2. package/LICENSE.md +356 -0
  3. package/NOTICE.md +8 -0
  4. package/README.md +44 -44
  5. package/bin/hsx.ts +0 -7
  6. package/dist/bin/hsx.d.ts +0 -4
  7. package/dist/bin/hsx.d.ts.map +1 -1
  8. package/dist/bin/hsx.js +0 -6
  9. package/dist/bin/hsx.js.map +1 -1
  10. package/dist/src/ast.d.ts +113 -308
  11. package/dist/src/ast.d.ts.map +1 -1
  12. package/dist/src/ast.js +7 -71
  13. package/dist/src/ast.js.map +1 -1
  14. package/dist/src/attachment-economics.d.ts +5 -0
  15. package/dist/src/attachment-economics.d.ts.map +1 -0
  16. package/dist/src/attachment-economics.js +55 -0
  17. package/dist/src/attachment-economics.js.map +1 -0
  18. package/dist/src/binding-contract.d.ts +22 -0
  19. package/dist/src/binding-contract.d.ts.map +1 -0
  20. package/dist/src/binding-contract.js +74 -0
  21. package/dist/src/binding-contract.js.map +1 -0
  22. package/dist/src/cli.d.ts +4 -19
  23. package/dist/src/cli.d.ts.map +1 -1
  24. package/dist/src/cli.js +89 -276
  25. package/dist/src/cli.js.map +1 -1
  26. package/dist/src/compile.d.ts +34 -66
  27. package/dist/src/compile.d.ts.map +1 -1
  28. package/dist/src/compile.js +2949 -117
  29. package/dist/src/compile.js.map +1 -1
  30. package/dist/src/cost.d.ts +8 -75
  31. package/dist/src/cost.d.ts.map +1 -1
  32. package/dist/src/cost.js +54 -364
  33. package/dist/src/cost.js.map +1 -1
  34. package/dist/src/diagnostics.d.ts +14 -9
  35. package/dist/src/diagnostics.d.ts.map +1 -1
  36. package/dist/src/diagnostics.js +39 -416
  37. package/dist/src/diagnostics.js.map +1 -1
  38. package/dist/src/examples-bundle.d.ts +3 -0
  39. package/dist/src/examples-bundle.d.ts.map +1 -0
  40. package/dist/src/examples-bundle.js +18 -0
  41. package/dist/src/examples-bundle.js.map +1 -0
  42. package/dist/src/examples.d.ts +10 -0
  43. package/dist/src/examples.d.ts.map +1 -0
  44. package/dist/src/examples.js +2 -0
  45. package/dist/src/examples.js.map +1 -0
  46. package/dist/src/format.d.ts +8 -7
  47. package/dist/src/format.d.ts.map +1 -1
  48. package/dist/src/format.js +9 -175
  49. package/dist/src/format.js.map +1 -1
  50. package/dist/src/header-source.d.ts +3 -0
  51. package/dist/src/header-source.d.ts.map +1 -0
  52. package/dist/src/header-source.js +41 -0
  53. package/dist/src/header-source.js.map +1 -0
  54. package/dist/src/headers.d.ts +64 -0
  55. package/dist/src/headers.d.ts.map +1 -0
  56. package/dist/src/headers.js +167 -0
  57. package/dist/src/headers.js.map +1 -0
  58. package/dist/src/index.d.ts +7 -11
  59. package/dist/src/index.d.ts.map +1 -1
  60. package/dist/src/index.js +4 -9
  61. package/dist/src/index.js.map +1 -1
  62. package/dist/src/keywords.d.ts +56 -0
  63. package/dist/src/keywords.d.ts.map +1 -0
  64. package/dist/src/keywords.js +133 -0
  65. package/dist/src/keywords.js.map +1 -0
  66. package/dist/src/language.d.ts +26 -0
  67. package/dist/src/language.d.ts.map +1 -0
  68. package/dist/src/language.js +440 -0
  69. package/dist/src/language.js.map +1 -0
  70. package/dist/src/lex.d.ts +13 -28
  71. package/dist/src/lex.d.ts.map +1 -1
  72. package/dist/src/lex.js +119 -145
  73. package/dist/src/lex.js.map +1 -1
  74. package/dist/src/parse.d.ts +4 -17
  75. package/dist/src/parse.d.ts.map +1 -1
  76. package/dist/src/parse.js +484 -1036
  77. package/dist/src/parse.js.map +1 -1
  78. package/dist/src/std-bundle.d.ts.map +1 -1
  79. package/dist/src/std-bundle.js +11 -84
  80. package/dist/src/std-bundle.js.map +1 -1
  81. package/dist/src/std-library.d.ts +1 -1
  82. package/dist/src/std-library.d.ts.map +1 -1
  83. package/dist/src/std-library.js +1 -5
  84. package/dist/src/std-library.js.map +1 -1
  85. package/dist/src/tunables.d.ts +7 -0
  86. package/dist/src/tunables.d.ts.map +1 -0
  87. package/dist/src/tunables.js +27 -0
  88. package/dist/src/tunables.js.map +1 -0
  89. package/docs/README.md +528 -26
  90. package/docs/assets/brand/hsx-horizontal-white.svg +1 -0
  91. package/docs/assets/brand/hsx-horizontal.svg +1 -0
  92. package/docs/assets/brand/hsx-stacked-white.svg +1 -0
  93. package/docs/assets/brand/hsx-stacked.svg +1 -0
  94. package/docs/assets/brand/manifest.json +30 -0
  95. package/docs/assets/hsx.svg +11 -0
  96. package/examples/cards.hsx +34 -0
  97. package/examples/collections.hsx +37 -0
  98. package/examples/cost-table.json +633 -385
  99. package/examples/escrow.hsx +24 -0
  100. package/examples/financing.hsx +32 -0
  101. package/examples/insurance.hsx +30 -0
  102. package/examples/lending.hsx +57 -0
  103. package/examples/library.hsx +15 -0
  104. package/examples/marketplace.hsx +32 -0
  105. package/examples/money.hsx +19 -0
  106. package/examples/rental-deposit.hsx +60 -0
  107. package/examples/repair-approval.hsx +44 -0
  108. package/examples/reporting.hsx +28 -0
  109. package/examples/savings.hsx +21 -0
  110. package/examples/serviced.hsx +25 -0
  111. package/examples/wallet.hsx +24 -0
  112. package/package.json +25 -23
  113. package/src/ast.ts +83 -440
  114. package/src/attachment-economics.ts +103 -0
  115. package/src/binding-contract.ts +104 -0
  116. package/src/cli.ts +95 -325
  117. package/src/compile.ts +4063 -209
  118. package/src/cost.ts +71 -574
  119. package/src/diagnostics.ts +57 -437
  120. package/src/examples-bundle.ts +19 -0
  121. package/src/examples.ts +9 -0
  122. package/src/format.ts +12 -256
  123. package/src/header-source.ts +54 -0
  124. package/src/headers.ts +195 -0
  125. package/src/index.ts +18 -33
  126. package/src/keywords.ts +134 -0
  127. package/src/language.ts +629 -0
  128. package/src/lex.ts +131 -192
  129. package/src/parse.ts +489 -1195
  130. package/src/std-bundle.ts +12 -88
  131. package/src/std-library.ts +2 -7
  132. package/src/tunables.ts +36 -0
  133. package/std/cards.hsx +85 -0
  134. package/std/collections.hsx +90 -0
  135. package/std/escrow.hsx +73 -0
  136. package/std/financing.hsx +683 -0
  137. package/std/insurance.hsx +89 -0
  138. package/std/lending.hsx +138 -0
  139. package/std/marketplace.hsx +123 -0
  140. package/std/money.hsx +173 -0
  141. package/std/reporting.hsx +753 -0
  142. package/std/savings.hsx +68 -0
  143. package/std/wallet.hsx +57 -0
  144. package/LICENSE +0 -661
  145. package/LICENSING.md +0 -52
  146. package/TRADEMARKS.md +0 -35
  147. package/dist/src/emit.d.ts +0 -34
  148. package/dist/src/emit.d.ts.map +0 -1
  149. package/dist/src/emit.js +0 -137
  150. package/dist/src/emit.js.map +0 -1
  151. package/dist/src/entry-overrides.d.ts +0 -58
  152. package/dist/src/entry-overrides.d.ts.map +0 -1
  153. package/dist/src/entry-overrides.js +0 -284
  154. package/dist/src/entry-overrides.js.map +0 -1
  155. package/dist/src/ir.d.ts +0 -66
  156. package/dist/src/ir.d.ts.map +0 -1
  157. package/dist/src/ir.js +0 -15
  158. package/dist/src/ir.js.map +0 -1
  159. package/dist/src/limits.d.ts +0 -21
  160. package/dist/src/limits.d.ts.map +0 -1
  161. package/dist/src/limits.js +0 -21
  162. package/dist/src/limits.js.map +0 -1
  163. package/dist/src/lsp/server.d.ts +0 -32
  164. package/dist/src/lsp/server.d.ts.map +0 -1
  165. package/dist/src/lsp/server.js +0 -391
  166. package/dist/src/lsp/server.js.map +0 -1
  167. package/dist/src/modules.d.ts +0 -38
  168. package/dist/src/modules.d.ts.map +0 -1
  169. package/dist/src/modules.js +0 -368
  170. package/dist/src/modules.js.map +0 -1
  171. package/dist/src/typecheck.d.ts +0 -8
  172. package/dist/src/typecheck.d.ts.map +0 -1
  173. package/dist/src/typecheck.js +0 -2958
  174. package/dist/src/typecheck.js.map +0 -1
  175. package/dist/src/version.d.ts +0 -5
  176. package/dist/src/version.d.ts.map +0 -1
  177. package/dist/src/version.js +0 -5
  178. package/dist/src/version.js.map +0 -1
  179. package/docs/guide/01-first-program.md +0 -24
  180. package/docs/guide/02-money.md +0 -25
  181. package/docs/guide/03-instruments.md +0 -22
  182. package/docs/guide/04-lifecycles.md +0 -25
  183. package/docs/guide/05-fees-and-splits.md +0 -45
  184. package/docs/guide/06-schedules.md +0 -22
  185. package/docs/guide/07-composition.md +0 -46
  186. package/docs/guide/08-writing-a-module.md +0 -26
  187. package/docs/guide/09-cost.md +0 -24
  188. package/docs/guide/10-diagnostics.md +0 -27
  189. package/docs/llms-full.txt +0 -1739
  190. package/docs/llms.txt +0 -45
  191. package/docs/playground.md +0 -54
  192. package/docs/reference/cli.md +0 -35
  193. package/docs/reference/diagnostics.md +0 -619
  194. package/docs/reference/grammar.md +0 -39
  195. package/docs/reference/std/advance.md +0 -35
  196. package/docs/reference/std/cancellable_booking.md +0 -35
  197. package/docs/reference/std/captured_payment.md +0 -43
  198. package/docs/reference/std/conditional_disbursement.md +0 -33
  199. package/docs/reference/std/credit_facility.md +0 -35
  200. package/docs/reference/std/held_payment.md +0 -64
  201. package/docs/reference/std/instant_transfer.md +0 -30
  202. package/docs/reference/std/metered.md +0 -27
  203. package/docs/reference/std/pooled_split.md +0 -26
  204. package/docs/reference/std/premium_forward.md +0 -39
  205. package/docs/reference/std/reconciled_payout.md +0 -33
  206. package/docs/reference/std/recurring_collection.md +0 -25
  207. package/docs/reference/std/rotating_pool.md +0 -42
  208. package/docs/reference/std/scheduled.md +0 -51
  209. package/docs/reference/std/security_deposit.md +0 -46
  210. package/docs/reference/std/settlement_batch.md +0 -42
  211. package/docs/reference/std/swap.md +0 -46
  212. package/docs/reference/std/threshold_pool.md +0 -47
  213. package/docs/reference/std/weighted_distribution.md +0 -39
  214. package/docs/reference/types.md +0 -20
  215. package/docs/reference/udl-output.md +0 -13
  216. package/docs/sessions/2026-09-02-two-instruments.hsx +0 -21
  217. package/docs/sessions/2026-09-02-two-instruments.md +0 -41
  218. package/examples/01-first-program/README.md +0 -45
  219. package/examples/01-first-program/tip-jar.hsx +0 -17
  220. package/examples/02-imports-and-archetypes/README.md +0 -96
  221. package/examples/02-imports-and-archetypes/photo-booth.hsx +0 -37
  222. package/examples/03-diagnostics/README.md +0 -68
  223. package/examples/03-diagnostics/corner-shop-fixed.hsx +0 -22
  224. package/examples/03-diagnostics/corner-shop.hsx +0 -19
  225. package/examples/04-complete-product/README.md +0 -84
  226. package/examples/04-complete-product/study-hall.hsx +0 -67
  227. package/examples/05-watch-club/README.md +0 -9
  228. package/examples/05-watch-club/watch-club.hsx +0 -124
  229. package/examples/README.md +0 -18
  230. package/examples/advance/README.md +0 -3
  231. package/examples/advance/advance.hsx +0 -13
  232. package/examples/advance/advance.udl +0 -339
  233. package/examples/cancellable_booking/README.md +0 -3
  234. package/examples/cancellable_booking/cancellable_booking.hsx +0 -14
  235. package/examples/cancellable_booking/cancellable_booking.udl +0 -391
  236. package/examples/captured_payment/README.md +0 -3
  237. package/examples/captured_payment/captured_payment.hsx +0 -21
  238. package/examples/captured_payment/captured_payment.udl +0 -677
  239. package/examples/conditional_disbursement/README.md +0 -3
  240. package/examples/conditional_disbursement/conditional_disbursement.hsx +0 -17
  241. package/examples/conditional_disbursement/conditional_disbursement.udl +0 -412
  242. package/examples/credit_facility/README.md +0 -3
  243. package/examples/credit_facility/credit_facility.hsx +0 -27
  244. package/examples/credit_facility/credit_facility.udl +0 -1373
  245. package/examples/held_payment/README.md +0 -3
  246. package/examples/held_payment/held_payment.hsx +0 -13
  247. package/examples/held_payment/held_payment.udl +0 -507
  248. package/examples/instant_transfer/README.md +0 -3
  249. package/examples/instant_transfer/instant_transfer.hsx +0 -16
  250. package/examples/instant_transfer/instant_transfer.udl +0 -364
  251. package/examples/metered/README.md +0 -3
  252. package/examples/metered/metered.hsx +0 -13
  253. package/examples/metered/metered.udl +0 -247
  254. package/examples/pooled_split/README.md +0 -3
  255. package/examples/pooled_split/pooled_split.hsx +0 -15
  256. package/examples/pooled_split/pooled_split.udl +0 -425
  257. package/examples/premium_forward/README.md +0 -3
  258. package/examples/premium_forward/premium_forward.hsx +0 -19
  259. package/examples/premium_forward/premium_forward.udl +0 -594
  260. package/examples/reconciled_payout/README.md +0 -3
  261. package/examples/reconciled_payout/reconciled_payout.hsx +0 -13
  262. package/examples/reconciled_payout/reconciled_payout.udl +0 -303
  263. package/examples/recurring_collection/README.md +0 -3
  264. package/examples/recurring_collection/recurring_collection.hsx +0 -21
  265. package/examples/recurring_collection/recurring_collection.udl +0 -1130
  266. package/examples/rotating_pool/README.md +0 -3
  267. package/examples/rotating_pool/rotating_pool.hsx +0 -18
  268. package/examples/rotating_pool/rotating_pool.udl +0 -4352
  269. package/examples/scheduled/README.md +0 -3
  270. package/examples/scheduled/scheduled.hsx +0 -12
  271. package/examples/scheduled/scheduled.udl +0 -335
  272. package/examples/security_deposit/README.md +0 -3
  273. package/examples/security_deposit/security_deposit.hsx +0 -21
  274. package/examples/security_deposit/security_deposit.udl +0 -293
  275. package/examples/settlement_batch/README.md +0 -3
  276. package/examples/settlement_batch/settlement_batch.hsx +0 -19
  277. package/examples/settlement_batch/settlement_batch.udl +0 -753
  278. package/examples/swap/README.md +0 -3
  279. package/examples/swap/swap.hsx +0 -19
  280. package/examples/swap/swap.udl +0 -876
  281. package/examples/threshold_pool/README.md +0 -3
  282. package/examples/threshold_pool/threshold_pool.hsx +0 -16
  283. package/examples/threshold_pool/threshold_pool.udl +0 -667
  284. package/examples/weighted_distribution/README.md +0 -3
  285. package/examples/weighted_distribution/weighted_distribution.hsx +0 -20
  286. package/examples/weighted_distribution/weighted_distribution.udl +0 -337
  287. package/skills/hsx/SKILL.md +0 -483
  288. package/src/emit.ts +0 -201
  289. package/src/entry-overrides.ts +0 -428
  290. package/src/ir.ts +0 -99
  291. package/src/limits.ts +0 -20
  292. package/src/lsp/server.ts +0 -460
  293. package/src/modules.ts +0 -446
  294. package/src/typecheck.ts +0 -3876
  295. package/src/version.ts +0 -5
  296. package/std/SEMANTICS.md +0 -130
  297. package/std/settlements/advance.hsx +0 -177
  298. package/std/settlements/cancellable_booking.hsx +0 -87
  299. package/std/settlements/captured_payment.hsx +0 -144
  300. package/std/settlements/conditional_disbursement.hsx +0 -185
  301. package/std/settlements/credit_facility.hsx +0 -167
  302. package/std/settlements/held_payment.hsx +0 -578
  303. package/std/settlements/index.hsx +0 -3
  304. package/std/settlements/instant_transfer.hsx +0 -190
  305. package/std/settlements/metered.hsx +0 -67
  306. package/std/settlements/pooled_split.hsx +0 -68
  307. package/std/settlements/premium_forward.hsx +0 -257
  308. package/std/settlements/reconciled_payout.hsx +0 -77
  309. package/std/settlements/recurring_collection.hsx +0 -27
  310. package/std/settlements/rotating_pool.hsx +0 -252
  311. package/std/settlements/scheduled.hsx +0 -641
  312. package/std/settlements/security_deposit.hsx +0 -166
  313. package/std/settlements/settlement_batch.hsx +0 -122
  314. package/std/settlements/swap.hsx +0 -1114
  315. package/std/settlements/threshold_pool.hsx +0 -221
  316. package/std/settlements/weighted_distribution.hsx +0 -141
package/docs/README.md CHANGED
@@ -1,26 +1,528 @@
1
- # HSX documentation
2
-
3
- Read the guide in order. Every HSX program in it runs through the compiler in
4
- the package test suite.
5
-
6
- 1. [Your first program](./guide/01-first-program.md)
7
- 2. [Money](./guide/02-money.md)
8
- 3. [Instruments](./guide/03-instruments.md)
9
- 4. [Lifecycles](./guide/04-lifecycles.md)
10
- 5. [Fees and splits](./guide/05-fees-and-splits.md)
11
- 6. [Schedules](./guide/06-schedules.md)
12
- 7. [Composition](./guide/07-composition.md)
13
- 8. [Writing a module](./guide/08-writing-a-module.md)
14
- 9. [Cost](./guide/09-cost.md)
15
- 10. [Diagnostics](./guide/10-diagnostics.md)
16
-
17
- The generated [reference](./reference/) follows the compiler, UDL vocabulary,
18
- and standard-library files. Run `bun run docs:build` after changing one of
19
- those sources. `bun run docs:check` compares every generated byte.
20
-
21
- The [browser playground](./playground.md) provides a static editing surface with
22
- live compilation, diagnostics inspection, and example programs.
23
-
24
- Agents can start with [llms.txt](./llms.txt) or load the
25
- [HSX skill](../skills/hsx/SKILL.md). [llms-full.txt](./llms-full.txt) combines
26
- the guide and generated reference in reading order.
1
+ # HSX
2
+
3
+ HSX composes a company's objects, agreements and actions into a typed program.
4
+ A repair approval can change state without moving money. A rental can collect a
5
+ deposit and refund it under declared rules. Headers supply reusable instruments;
6
+ you can also write an instrument with its own fields, lifecycle and actions.
7
+ The compiler emits UDL, the Universal Domain Language contract an executor reads.
8
+ It does not run the business or move money. This release supports SAR only.
9
+
10
+ ## First program
11
+
12
+ The package supplies the `hsx` executable. Save this as `lesson.hsx`:
13
+
14
+ ```hsx
15
+ program tutoring "Tutoring studio"
16
+ use money
17
+ object lesson "Lesson" {
18
+ fields { student: text }
19
+ columns: [student]
20
+ attach payment = money.transfer {
21
+ payer: owner, payee: operator, amount: 150 SAR
22
+ expose create as book_lesson
23
+ expose pay as pay_for_lesson
24
+ expose cancel as cancel_lesson
25
+ }
26
+ }
27
+ ```
28
+
29
+ An object is the business record. An instrument holds an agreement's state and
30
+ money rules. An attachment connects the instrument to an object kind. A tunable
31
+ is a header parameter, such as `amount`, fixed by this program. An exposed action
32
+ is a public name for an instrument action. Exposing it does not grant permission.
33
+
34
+ ```sh
35
+ hsx check lesson.hsx
36
+ hsx build lesson.hsx --out lesson.udl.json
37
+ hsx cost lesson.hsx
38
+ ```
39
+
40
+ `check` exits zero without output on success. `build` writes canonical UDL;
41
+ without `--out` it prints to stdout. `cost` prints instruction counts, described
42
+ below. `format` prints formatted source or writes it with `--out`. `headers --json`
43
+ prints the header manifest. These commands have no `--strict` or `--catalog` option.
44
+ Exit 1 means invalid source; exit 2 means a command or file error. Diagnostics name
45
+ the source, line, column, code, problem and suggested fix. UDL validation keeps
46
+ its UDL diagnostic codes; binding errors can have names such as
47
+ `subject_party_unbound`. Read the message and fix, not just the code.
48
+
49
+ At runtime, create a lesson object first, then call `book_lesson` to create its
50
+ agreement. Call `pay_for_lesson` on that agreement to move 150 SAR from its bound
51
+ owner to the operator. Object creation alone creates no agreement. Object
52
+ metadata such as `student` is optional until an action requires it. Account IDs
53
+ and party IDs are not metadata supplied by the caller.
54
+
55
+ ## A rental deposit in one hour
56
+
57
+ Open [rental-deposit.hsx](../examples/rental-deposit.hsx). It is a complete source
58
+ file for a business renting equipment from the program operator. Copy it to
59
+ `rental.hsx` and run the same check, build and cost commands against that file.
60
+ No header import is needed because it declares its own instrument.
61
+
62
+ The terms are a 1,000 SAR deposit and a one-time 50 SAR late fee. The supplied
63
+ `dueAt` timestamp is the cutoff: a return before it gets the whole deposit back;
64
+ a return at or after it gets 950 SAR back. The operator receives the other 50 SAR.
65
+ The late fee is not a daily charge and is not `financing.late_charge`, which
66
+ requires a financing plan and an overdue installment.
67
+
68
+ | Step | Public action | Actor and required values | Money effect |
69
+ | ---------------------------- | ----------------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------- |
70
+ | Create the object | Host object creation | Optional `equipment` metadata | None |
71
+ | Agree terms | `agree_rental` | Bound renter; `dueAt`, for example `2027-01-10T12:00:00+03:00`, must be in the future | Creates the agreement's held account |
72
+ | Fund before the cutoff | `pay_deposit` | Bound renter with 1,000 SAR available | Renter pays 1,000 SAR into held |
73
+ | Record an on-time return | `return_equipment` | Operator; `returnReference` metadata | Held pays 1,000 SAR to renter |
74
+ | Or record a late return | `return_equipment_late` | Operator; `returnReference` metadata | Held pays 50 SAR to operator and 950 SAR to renter |
75
+ | Cancel an unfunded agreement | `cancel_rental` | Bound renter, while pending | None |
76
+
77
+ Choose one return action. Both finish the agreement, so the fee and refund cannot
78
+ repeat. The late action calculates the refund from the held balance before either
79
+ move runs. Both paths empty the held account. `returnReference` records the
80
+ operator's return evidence; it does not verify the physical return. Time means
81
+ the executor's current time when the action runs, not a caller-supplied return date.
82
+ A late `due` permits the operator action; it does not schedule that action.
83
+
84
+ This sample binds a declared business named `renter` in Product configuration.
85
+ It uses fixed parties because this compiler rejects parameterized instruments
86
+ inside a program. Changing the renter binding is a Build configuration decision,
87
+ not a different party ID on each request. Use header party parameters bound to
88
+ `owner` or `actor` for per-object participants. Reusable custom headers require a
89
+ host-supplied `StandardLibrary`; `use` cannot load a local file through this CLI.
90
+
91
+ Inspect `objects` in the compiled UDL for the attachment and public names, then
92
+ its instrument for fields, transitions, actors, requirements and ordered moves.
93
+ The `hide deposit.*` lines remove public names from the unattached declaration;
94
+ the attachment exposes its own copy. `money.hold` and `escrow.hold` both refund
95
+ whole amounts, so neither implements this partial-refund policy by itself.
96
+
97
+ A local compile gives you a contract. Executing it needs a host with authenticated
98
+ parties, object actions, funded accounts and a saved Product Build. A Build is the
99
+ frozen contract and configuration used by its agreements. Existing agreements
100
+ keep that Build when the program changes. The package includes no local money
101
+ executor. Compilation cannot establish balances, permissions or provider readiness.
102
+
103
+ ## Objects, metadata and parties
104
+
105
+ Every attached party parameter binds to `owner`, `actor`, `operator`, a declared
106
+ business, or a declared staff party with a supported role. Configure declared
107
+ business participants per Build. Declared person parties cannot bind attachments.
108
+ `owner` is the object's resolved customer or business, `actor` is the authenticated
109
+ caller, and `operator` is the program operator. A parameter with one of these
110
+ names binds by name. Other party parameters use a same-named eligible declaration,
111
+ a header default, or an explicit binding. Explicit bindings take precedence.
112
+ Unbound parameters report `subject_party_unbound`. These bindings are frozen in
113
+ UDL `objects[].attachments[].parties`; no caller supplies party IDs at creation.
114
+
115
+ Object `fields` are authored metadata. `columns` names up to eight normalized
116
+ fields. An action's `subject { price: money }` declares its metadata requirement;
117
+ `subject { adapter: verification }` inherits a selected ADL declaration. The
118
+ compiler freezes the adapter identity, digest and requirements. An unavailable
119
+ declaration leaves a null snapshot in compiled output. Product creation and
120
+ recomposition reject unresolved or changed declarations during Build admission.
121
+ Execution checks the frozen declaration too; later adapter unavailability can
122
+ block actions on an already saved Build.
123
+
124
+ An attachment can use `rename { price: salePrice }` to separate requirements with
125
+ different meanings. Matching names must match types and constraints. The compiler
126
+ reports `subject_field_conflict` with both origins, or `subject_field_unknown` for
127
+ unknown rename sources, columns or subject expressions. Action admission reports
128
+ `subject_requirement_missing` or `subject_adapter_unbound` before dispatch.
129
+
130
+ Creation accepts `{}`. Every normalized field, including adapter requirements,
131
+ is optional at creation. Only a named action requires its subject metadata.
132
+ Use `attach` inside the object block to configure its financial instruments.
133
+
134
+ ## Headers and tunables
135
+
136
+ The header defines the available policies. The company chooses percentages, amounts, durations,
137
+ parties and typed references. `funds: sale` links the stored records through the
138
+ library's declared reference type. References can name a child, such as
139
+ `receipt: plan.settlement`. A header tunable declared `ref<T>[]` accepts one object or a list of up to 16
140
+ objects of type T. `on: [plan_3, plan_6]` creates one late-charge or collections
141
+ policy. Its references can point into either plan; selections can span both.
142
+ A plain `ref<T>` accepts one object only.
143
+ Tunable constructors are `enum(choices)` and `integer(minimum, maximum)`.
144
+ Other constructors, including `party(business)` and bounded `money(...)`, are
145
+ rejected as tunable types. A default selector such as `payer: party = party(person)`
146
+ is different: its type is plain `party`, and the call chooses a default binding.
147
+ Use explicit `payer: owner` or `payer: actor` bindings when the participant comes
148
+ from the object or session.
149
+ Imports are `use header`; there are no file imports, macros or executable strings.
150
+
151
+ ## Values and money
152
+
153
+ Amounts use `750 SAR`; percentages use `2.5%`; durations use `48h`, `3d`, or `1w`.
154
+ Dates use `2026-11-28` or a timestamp with an explicit offset. Money has at most two
155
+ decimal places and percentages at most two. The compiler uses integer minor units
156
+ and basis points. Fee and tax calculations round down. Split percentages sum to
157
+ 100%; the last declared recipient receives the rounding remainder. Finite
158
+ schedules use positions 1 through n and put the division remainder in position 1.
159
+ Tax binds `programTax`. Fees default to `programOperator`. Fine, recovery and
160
+ residual destinations are party tunables.
161
+
162
+ Attached actions are private unless the attachment exposes them with
163
+ `expose fund as sell`. Exposure grants no authority. Clock and parent actions
164
+ remain executor-owned. Instruments have no standalone create route: an
165
+ attachment exposes its create action by name (`expose create as finance`) or
166
+ keeps it internal. Callers create objects and run their attached actions.
167
+
168
+ Accounts use cash or claim books. A move stays in one book. `account of buyer`
169
+ aliases the default cash account; `account of self` provisions an owned account.
170
+ `account(lender, cash, "capital")` binds a named account.
171
+ `account(adapter(insurer), cash, "premium")` binds the account of the provider
172
+ selected by `insurer`. Declare that binding with `subject { adapter: insurer }`
173
+ in an action of the same instrument. A text tunable may supply its binding name.
174
+ The agreement retains the provider identity; aliases for that provider share the
175
+ same book and key within the Product. Providers remain outside parties.
176
+ A missing binding refuses before money moves. Reference paths such as
177
+ `self.cover.insurer` use the referenced agreement's account.
178
+
179
+ `account(buyer, claim, contra, "debt")` declares the borrower's claim contra account.
180
+ Provider confirmation belongs on a reserved move with `boundary adapter`,
181
+ followed by instruction-bound evidence and a post or void.
182
+ Outstanding debt is an account balance. The library pairs cash repayment with
183
+ claim reduction and represents receipts as immutable child records. Cash and loss
184
+ shares round down; the declared residual account receives leftover minor units.
185
+
186
+ Money moves require a positive amount by default. An action may declare
187
+ `allowZero: true` when a calculated piece can be zero, such as an exhausted
188
+ repayment slice, a floored fee or a rounding remainder. A zero create move in
189
+ that action posts no transfer and captures no receipt. The permission belongs
190
+ to that action only and does not pass to invoked actions. Reserve, post and
191
+ void still require real reservation receipts. Keep a positive requirement on
192
+ an authored total when only its calculated pieces may be zero.
193
+
194
+ ```hsx
195
+ action collect {
196
+ from: pending, to: paid
197
+ allowZero: true
198
+ moves self.calculatedPiece from payer to payee
199
+ }
200
+ ```
201
+
202
+ The four transfer instructions are create, reserve, post and void under
203
+ `internal_transfer`. A captured transfer exposes reserved, posted, settled,
204
+ reversed or voided status. Voided means a released reservation. Settled means
205
+ provider confirmation, not an internal account balance change.
206
+
207
+ ## Authored instruments and actions
208
+
209
+ An action is the business instruction: its actor, state, requirements and effects
210
+ define when it is valid. The executor still checks those conditions on each call.
211
+ The four transfer instructions below that action are its money effects. There is
212
+ no general-purpose `instruction` declaration; `instruction` in an evidence clause
213
+ binds external evidence to a captured boundary instruction.
214
+
215
+ For a new record type, declare `instrument name { fields { ... } lifecycle { ... }
216
+ action create { ... } }`. Fields are `money`, `account of buyer`, `ref<order>`,
217
+ `date`, `duration`, `text`, `integer`, `percent`, `boolean`, `enum(a, b)` or
218
+ `list(date, 12)`. `?` makes a plain type or `ref<T>` optional. Call types such as
219
+ `list(date, 12)` do not accept `?`. `= value` fixes a constant or a typed
220
+ calculation. Actions declare `input { reason: text }`. Headers and expert records
221
+ write ordered requirements and moves as expressions:
222
+
223
+ ```hsx
224
+ requires self.payer == self.order.buyer
225
+ requires self.order in [placed]
226
+ moves self.price from payer to self.held
227
+ moves self.price from self.held to payee fee fee
228
+ ```
229
+
230
+ Comparisons accept `==`, `!=`, `<`, `<=`, `>` and `>=`. A path beginning with
231
+ `self`, `input`, `party` or `subject` is a field operand; a quoted string, amount or number is
232
+ a literal. `requires unique "order" on [self.order]` fixes an identity namespace.
233
+ `requires count of { instrument: child, reference: "parent", anchor: self.id,
234
+ states: [pending], limit: 12 } == 12` checks a typed selection; `sum "amount" of`
235
+ uses the same selection syntax. `invariants` accepts these requirement expressions.
236
+ `requires hours self.now between 8 and 20 timezone "Asia/Riyadh"` checks local hours.
237
+ `requires evidence self.payer family registry check ownership result verified
238
+ maxAge 1d` requires a recent completed provider check.
239
+
240
+ `moves reserve amount from payer to payee capture receipt` reserves a transfer;
241
+ `moves post self.receipt` posts it and `moves void self.receipt` releases it.
242
+ `moves amount from payer shares shares` expands a declared split. Optional `fee`,
243
+ `capture`, `key` and `boundary` modifiers describe a move. `boundary` applies
244
+ only to reservations. Fees settle with create moves, never reservations. Repeated clauses keep
245
+ their declaration order. The JSON-like clause form remains accepted and lowers
246
+ to the same [UDL clauses](https://github.com/hyperscale0/hyperscale-udl/blob/main/spec/README.md).
247
+ Use `economics { purpose: earning, sourceParty: merchant }` on a move to
248
+ classify posted money. Other purposes are `principal`, `participant_payout`,
249
+ `internal`, `prepaid_credit`, and `pass_through`. `reversalOf: self.originalTransfer` links a
250
+ reversal. The source party must own the source account, except when an earning
251
+ releases the retained payer’s money from an agreement-bound instrument account
252
+ to a company account outside the agreement. A reservation passes its economics
253
+ to its post. Fee shorthand accepts separate economics for each expanded leg.
254
+ They cannot add kernel instructions. `at(list, position)` reads a dated list;
255
+ `aggregate(selection, "amount")` sums selected money; `ratio(amount, weight, total)`
256
+ floors a weighted share. `records` declares child types. `invoke` can create a child
257
+ with typed input in the same transaction.
258
+
259
+ The compiler removes branches excluded by fixed enum tunables. An invalid program reports its source line
260
+ and a correction. No artifact is returned with diagnostics.
261
+
262
+ ## Financing policies
263
+
264
+ `financing.installments` keeps principal and fixed flat profit as claims from
265
+ activation. The company chooses where funding goes and when profit becomes earned.
266
+ All choices use accounts, calculations and moves in the same two books.
267
+
268
+ | Tunable | Default | Selected behavior |
269
+ | ---------------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
270
+ | `disburse_to` | `funds` | `funds` pays down payment and principal into the hold and confirms it. `borrower` credits principal to the borrower's balance. |
271
+ | `profit_earned` | `on_payment` | `on_payment` collects unearned profit on payment. `by_schedule` moves unearned claims to earned claims at each slice's date. `at_disbursement` makes that move at activation. Cash arrives only on payment. |
272
+ | `apply` | `fines_profit_principal` | Visit each slice in position order; within that slice collect assessed fines by overdue date, evidenced costs, profit, then principal. `principal_profit` collects each slice in position order, principal before profit. `pro_rata` uses the slice's fixed principal:profit ratio, caps each side by its collectible balance, and assigns the remainder without stranding cash. |
273
+ | `payoff_rebate` | `100%` | Reverse this share of unearned profit to borrower debt. Collect the remainder and all earned profit with outstanding principal. |
274
+ | `late_charge.fines_to` | `programOperator` | Receive fine cash and fund its refunds. |
275
+ | `late_charge.costs_to` | `programOperator` | Receive evidenced recovery cash and fund its refunds. |
276
+ | `collections.case.fee` | `20%` | After payment succeeds, transfer this share of the payment amount from plan capital to the agency. |
277
+ | `lending.distribution.residual_to` | `programOperator` | Receive the cash remainder and own the claim loss remainder after weighted distribution. |
278
+
279
+ Each slice owns separate unearned and earned claim accounts. Scheduled recognition
280
+ uses a dated child record so a partial payment cannot disable the maturity clock.
281
+ A normal payment collects only earned profit for the schedule and disbursement
282
+ choices; payoff can also collect non-rebated unearned profit. Partial fines and
283
+ costs stay assessed until their receivable reaches zero. Immutable receipts let
284
+ a refund restore only what that payment collected. The plan's payment receipt
285
+ records actual principal and profit after all ordered collections finish.
286
+ Write-off moves principal and earned profit claims to loss and reverses unearned
287
+ profit to debt. `write_off_after` sets how long a slice must be overdue before a capital-authorized
288
+ write-off request can apply. There is no provision policy.
289
+
290
+ ## Header branches and bounds
291
+
292
+ A header may select action clauses at compile time:
293
+
294
+ ```hsx
295
+ when disburse_to is borrower {
296
+ moves self.principal from self.capital to self.borrower
297
+ }
298
+ ```
299
+
300
+ `when <reference tunable> has <field>` includes its clauses only when the bound
301
+ object declares that field. The compiler checks the object's declared shape,
302
+ regardless of declaration order, and emits no runtime branch.
303
+
304
+ `when <enum tunable> is <value>` accepts requirements, calculations, moves and
305
+ invocations, including nested branches. The compiler emits only the selected
306
+ clauses and preserves their order within each UDL phase. Lifecycle and actor
307
+ clauses stay outside branches. Calculations and requirements run before moves;
308
+ invocations run after moves. A collections fee therefore uses an internal action
309
+ invoked after payment. Clock and parent actions have no public API name.
310
+
311
+ `integer(1, 366)` declares an inclusive tunable bound. The compiler-owned manifest
312
+ publishes enum values, numeric minima and maxima, and cross-tunable constraints.
313
+ Bounds use minor units for money, basis points for percentages and milliseconds
314
+ for durations. Money spans 0 through 999999999999999999 minor units; percentages
315
+ span 0 through 10000 basis points. Durations start at 1 millisecond. Integers
316
+ default to 0 through 9007199254740991 unless their declaration narrows the range. For example, `constraints { contact_from: less_than(contact_until) }`
317
+ requires a valid hours interval. `at_most` and `greater_than` are also supported.
318
+ A refusal names the tunable. Empty `all(type)` selections lower to zero aggregates
319
+ or no invocations, so a plan does not require a late-charge object.
320
+
321
+ Headers can declare conditional bindings and parameter policy diagnostics:
322
+
323
+ ```hsx
324
+ dependencies {
325
+ funds {
326
+ selector: destination, is: held
327
+ message: "Attachment `{attachment}` needs a funds binding."
328
+ fix: "Bind funds to a hold attachment."
329
+ }
330
+ }
331
+ parameterDiagnostics {
332
+ amount {
333
+ accepts: "a fixed amount"
334
+ percentage: "a percentage-based charge"
335
+ fix: "Author a rate calculation when the policy varies with a base amount."
336
+ }
337
+ }
338
+ ```
339
+
340
+ Each dependency names a declared tunable, an enum selector and one of its choices.
341
+ The compiler checks selected dependencies before lowering and the manifest retains
342
+ them. `{attachment}` in the message expands to the authored attachment name.
343
+ Parameter diagnostics name a declared tunable and explain its accepted value,
344
+ unsupported percentage semantics and repair. They do not change the tunable type.
345
+ UDL refusals retain their UDL codes. A terminal-money refusal includes the owned
346
+ account and the prover's action path in related diagnostic information.
347
+
348
+ ## Instruction cost
349
+
350
+ `hsx cost company.hsx` reports `transfers`, `accounts` and `invocations` per
351
+ instrument action after lowering. Transfers count declared move instructions,
352
+ including reserve, post and void. Accounts count self-owned accounts created by
353
+ `create`, not every party account. Bounded invocations include child costs up to
354
+ the selection limit, so a count is an upper bound rather than observed usage.
355
+ Zero-valued moves can cost fewer actual transfers than their static count.
356
+
357
+ The rental attachment's create declares one owned account, fund declares one
358
+ transfer, on-time return one, and late return two. These are counts, not SAR
359
+ prices. The executor's tariff supplies commercial prices and actual usage.
360
+
361
+ The compiler API is `compile(source)`. On success, `result.verdict` is `valid`
362
+ and `result.artifacts` contains `document`, `costManifest` and `originMap`.
363
+ On refusal, inspect `result.diagnostics`; no artifact is returned.
364
+
365
+ `hsx headers` prints the instrument inventory from the declarations. The
366
+ [object example](../examples/library.hsx) shows authenticated role bindings.
367
+ The [playground](../playground/index.html) compiles locally in the browser.
368
+
369
+ ## Standard-library behavior
370
+
371
+ Read the instrument's states, time gates and moves before promising a money
372
+ outcome. A compiler pass does not prove that required actions are exposed,
373
+ adapters are bound, participants have funds, or the flow can finish.
374
+
375
+ | Instrument | Behavior |
376
+ | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
377
+ | `financing.installments` | `share` allocates collected profit to a cash payable owned by `capital`. It does not itself pay operator income. |
378
+ | `financing.limits` | `per_borrower` caps outstanding principal. Both borrower and portfolio limits must be approved before disbursement; attaching them does not approve them. |
379
+ | `lending.round` | The target is the linked plan's principal. Closing requires commitments and held funds to equal that amount. |
380
+ | `lending.distribution` | Cash distribution needs an eligible recorded settlement, `prepare_cash`, one share record per funded commitment, then `distribute_cash`. Attaching it moves nothing. |
381
+ | `insurance.cover.slice` | `collect` credits premium net of commission to the insurer account. The tenant retains commission. `refund` returns both portions; claims reserve insurer funds. External settlement uses the boundary protocol. |
382
+ | `financing.installments`, `savings.circle` | Supply explicit date lists when creating agreements. A term count does not generate a monthly calendar. Savings supports at most 60 distinct member seats. |
383
+ | `escrow.hold` | `fund` takes the whole price. Financing into pending escrow collects the remaining down payment and adds capital principal at disbursement; `fund` is not a down-payment checkout. |
384
+ | `escrow.hold` | Acceptance timeout enters `disputed` without paying the seller. Delivery and return verification belong to `payee`; rebinding it also changes who receives accepted funds. |
385
+ | `financing.late_charge` | `fine` is a fixed money amount, not a percentage of overdue principal. |
386
+ | `cards.card` | `spend_limit` is a per-authorization ceiling, not a monthly aggregate. |
387
+
388
+ A seller-owned marketplace object can declare `entryActions: [create_order]`
389
+ when `create_order` exposes an attachment's create action with its buyer bound
390
+ to `actor`. This admits active enrolled customers to that action. The default
391
+ is closed. A retained buyer can read the record and run its buyer actions;
392
+ the seller remains owner. Entry never grants access to an existing escrow.
393
+
394
+ `financing.limits` and `financing.portfolio_limit` declare `scope: product`.
395
+ Create and approve the portfolio limit once per Product and the borrower limit
396
+ once per borrower. Plans on later records resolve those shared references.
397
+ Ordinary references remain on the current record; shared references must match
398
+ the bound party accounts. The aggregate caps still apply across all plans.
399
+
400
+ `programTax` transfers use an operator-owned cash account keyed `programTax`.
401
+ The account primitive creates it automatically and shares it across the Product.
402
+ Zero-tax escrow releases need no additional party setup.
403
+
404
+ The financing, collections and lending samples expose payment creation, payment,
405
+ refund and payoff quotes through the object's existing action routes. A child
406
+ alias names the full attachment path, for example:
407
+
408
+ ```hsx
409
+ expose enrolment.tuition.payment.create as create_payment
410
+ expose enrolment.tuition.payment.pay as pay_instalment
411
+ expose enrolment.tuition.payoff_quote.create as request_payoff_quote
412
+ ```
413
+
414
+ Read the parent object's actions and follow pagination to discover child actions.
415
+ Use the returned target, Build, digest and object revision when executing. Creation
416
+ targets the child attachment; later actions target the child's instance ID on the
417
+ same object. The caller must satisfy the header's actor rule. Parties bind from
418
+ the session and object ownership. Retry the same request with the same
419
+ Idempotency-Key to retrieve its result without moving money again.
420
+
421
+ Supply payment amount and identity at creation. Pass the quote instance as the
422
+ parent payoff's `quote` input. For a late charge on a multi-instalment plan, select
423
+ the overdue child with the creation input `slice`. Repayment uses the declared
424
+ allocation order and payoff rebate; aliases do not change those terms.
425
+
426
+ The [lending sample](../examples/lending.hsx) also exposes share creation. Callers
427
+ still need dates, agreement inputs, funded wallets and eligible settlements.
428
+ References without an explicit creation input require one matching agreement on
429
+ the object. In particular, lending distributions with multiple settlements or
430
+ commitments need authored selectors before callers can choose among them.
431
+ Insurance needs premium-slice records and actions. Savings needs dated
432
+ contribution records. Read each header's creation and lifecycle requirements.
433
+
434
+ ## Checkout and reversals
435
+
436
+ For financed checkout, expose `installments.collect_down_payment` after `create`
437
+ and `sign`. It credits the linked pending escrow with the missing down payment.
438
+ It does not disburse principal or activate the plan. The later `disburse` action
439
+ uses that credit before collecting any remainder. Borrower-directed financing
440
+ has no checkout collection action. The plan and escrow must agree on payer and
441
+ price.
442
+
443
+ Expose escrow `cancel` to return money credited before full funding. Plan `void`
444
+ cancels the signed financing agreement but does not cancel its escrow. After
445
+ funding and delivery, the default return path needs three separate aliases for
446
+ `dispute`, `verify_return` and `refund`. The payee supplies return evidence and
447
+ returns the full price to the payer. `accept` pays the payee instead.
448
+ Marketplace order fulfillment alone does not execute any of these money actions.
449
+
450
+ Expose `late_charge.create` to create an assessment with matching plan, slice
451
+ and borrower. Only that existing assessment can reach clock-owned `assess` after
452
+ grace. A payment can collect part of a fine without settling the rest. A recovery
453
+ cost assessment is a separate record.
454
+
455
+ ## Separate payments and states
456
+
457
+ Bind `insurance.cover.broker` to the agency that receives commission. Collection
458
+ pays the insurer's net premium and the broker's commission as two moves. Refunds
459
+ reverse those same portions. The default broker is the program operator.
460
+ `claim.deny` accepts only `submitted`; after approval, `pay` or expiry consumes
461
+ the reservation.
462
+
463
+ A booking cancellation refunds only its own held cash. Expose `cover.cancel`
464
+ separately for eligible premium refunds before the paid period starts. Active
465
+ and expired premium periods are excluded. A card transaction needs a captured
466
+ authorization and its own record before refund, but no authorization-expiry wait.
467
+
468
+ A savings membership becomes `received` after its pot payout. Its contribution
469
+ records become `paid` independently. Future contributions can remain pending
470
+ after the member receives the pot; paying a contribution does not advance their
471
+ payout seat. Late contributions remain eligible while the membership is
472
+ `active` or `received` and the circle is `active`. These guards do not promise
473
+ scheduler retries or permit a payout larger than the available cash.
474
+
475
+ ## Posted economics in the money flows
476
+
477
+ An attachment can declare the purpose of an imported action's money:
478
+
479
+ ```hsx
480
+ attach visit = wallet.spend {
481
+ wallet: balance, payee: operator
482
+ economics pay { purpose: earning, sourceParty: owner }
483
+ expose pay as charge_visit
484
+ }
485
+ ```
486
+
487
+ Name the original action, before its public alias. If it has several moves,
488
+ select a move key, for example `economics pay.move1 { ... }`. The compiler
489
+ refuses an unknown action or move, a repeated selection, a void, or economics
490
+ that conflict with the instrument or its reservation. Cash purposes require
491
+ cash accounts. `sourceParty` resolves a party parameter, a subject role or a
492
+ declared business. The attachment retains this binding even when only economics
493
+ uses it. The credited account supplies the destination participant.
494
+
495
+ The compiler writes the declaration into that attachment's UDL move. Imported
496
+ instruments stay generic. New Builds carry the purpose; existing agreements
497
+ and postings keep their retained Build and classification.
498
+
499
+ Held customer funding and its unspent return are `principal`. A release for the
500
+ company's sale is `earning`. A payment from company cash to another participant
501
+ is `participant_payout`. Claims, waivers, write-offs and own-account allocations
502
+ are `internal`; prepaid balance topups and returns are `prepaid_credit`. Tax is
503
+ `pass_through`, excluded from earnings and costs. Unpaid claims count as neither.
504
+ Refunds of paid profit, company charges and commission capture the original
505
+ transfer and use `reversalOf`, so refunds reduce the original purpose.
506
+
507
+ Fee shorthand accepts separate move economics: `economics { payee: { purpose:
508
+ earning, sourceParty: payer }, fee: { purpose: earning, sourceParty: payer },
509
+ tax: { purpose: pass_through, sourceParty: payer } }`. These describe authored
510
+ product fees. Automatic platform fees keep their commercial classification.
511
+
512
+ A move's economics block can select by a resolved party: `economics { recipient:
513
+ recipient, company: { purpose: earning, sourceParty: payer }, participant:
514
+ { purpose: participant_payout, sourceParty: programOperator } }`. The compiler
515
+ chooses `company` for `operator`, `programOperator`, or a declared party with the
516
+ `program_operator` role; it chooses `participant` for other bound parties.
517
+ Both branches must be supplied. A branch may be `unclassified` when no purpose
518
+ is established. Outside financing-profit and recovery recipients refund directly
519
+ to the customer, not the company that funded the payout; those refund branches
520
+ remain unclassified because they cannot reverse that company payout. Std
521
+ recovery charges use this rule to avoid counting company receipts as participant
522
+ costs. Direct customer payments to
523
+ outside recipients are pass-through; payments from held company cash are costs.
524
+
525
+ Generic transfers and mixed principal/profit distributions remain unclassified
526
+ when their structure does not establish a purpose. Adapter-owned premium and
527
+ claim accounts and credit-line advances also lack an authored source party.
528
+ Their reports remain incomplete rather than guessing a company earning or cost.
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="446.72" height="112" viewBox="0 0 446.72 112" color="#ffffff" fill="#ffffff" role="img" aria-label="Hyperscale HSX horizontal lockup"><g transform="translate(24 24) scale(2)" fill="none" stroke="#ffffff" stroke-width="0.8200000000000001" stroke-linecap="round" stroke-linejoin="round"><path d="M16 3.5L28.5 9.75V22.25L16 28.5L3.5 22.25V9.75Z"/><path d="M3.5 9.75L16 16L28.5 9.75"/><path d="M16 16V28.5"/><path d="M16 5L24 9V17L16 21L8 17V9Z"/><path d="M8 9L16 13L24 9"/><path d="M16 13V21"/><path d="M16 7L20 9V13L16 15L12 13V9Z"/><path d="M12 9L16 11L20 9"/><path d="M16 11V15"/></g><g transform="translate(104 68)"><path transform="translate(0 0) scale(0.032 -0.032)" d="M91 0V707H148V372H578V707H635V0H578V321H148V0Z"/><path transform="translate(24.992 0) scale(0.032 -0.032)" d="M269 0V266L18 707H86L298 324L510 707H575L326 267V0Z"/><path transform="translate(45.728 0) scale(0.032 -0.032)" d="M91 0V707H329Q406 707 460.5 682.5Q515 658 544.0 607.0Q573 556 573 477Q573 399 538.5 347.5Q504 296 444.5 270.0Q385 244 310 244H148V0ZM148 295H307Q400 295 457.0 339.5Q514 384 514 481Q514 573 464.0 614.0Q414 655 324 655H148Z"/><path transform="translate(67.52 0) scale(0.032 -0.032)" d="M91 0V707H553V655H148V377H512V325H148V52H553V0Z"/><path transform="translate(88.64 0) scale(0.032 -0.032)" d="M91 0V707H351Q407 707 452.5 695.5Q498 684 530.5 659.0Q563 634 580.5 592.5Q598 551 598 492Q598 437 578.0 396.0Q558 355 520.0 328.0Q482 301 430 289L584 0H521L371 279H148V0ZM148 330H323Q365 330 404.0 336.5Q443 343 473.5 361.0Q504 379 521.5 411.5Q539 444 539 495Q540 557 514.5 592.0Q489 627 444.5 641.0Q400 655 341 655H148Z"/><path transform="translate(111.36 0) scale(0.032 -0.032)" d="M337 -8Q276 -8 219.5 8.0Q163 24 121.0 61.5Q79 99 61 161H123Q142 117 176.0 91.0Q210 65 252.5 53.5Q295 42 337 42Q384 42 427.0 56.5Q470 71 497.0 101.0Q524 131 524 180Q524 219 508.5 243.0Q493 267 466.5 281.5Q440 296 405 306Q379 314 352.0 320.5Q325 327 299.5 334.0Q274 341 251 349Q220 358 189.5 371.0Q159 384 135.5 404.0Q112 424 97.5 453.0Q83 482 83 524Q83 567 96.0 599.0Q109 631 133.0 653.0Q157 675 188.0 688.5Q219 702 254.5 708.5Q290 715 327 715Q384 715 433.5 699.0Q483 683 518.0 647.0Q553 611 562 550H504Q494 593 466.5 618.0Q439 643 402.0 654.0Q365 665 326 665Q295 665 263.0 658.5Q231 652 204.0 637.0Q177 622 160.0 596.5Q143 571 143 532Q143 493 159.5 468.0Q176 443 202.5 428.0Q229 413 262 402Q306 388 353.0 377.5Q400 367 442 353Q472 344 498.0 329.5Q524 315 543.0 295.0Q562 275 573.0 249.5Q584 224 584 192Q584 137 563.5 99.0Q543 61 508.0 37.0Q473 13 429.0 2.5Q385 -8 337 -8Z"/><path transform="translate(133.792 0) scale(0.032 -0.032)" d="M375 -8Q265 -8 193.5 39.0Q122 86 87.0 167.5Q52 249 52 353Q52 456 87.5 537.5Q123 619 195.5 667.0Q268 715 378 715Q442 715 495.5 696.0Q549 677 586.5 640.0Q624 603 642 546H583Q559 605 504.5 635.0Q450 665 379 665Q286 665 226.5 622.0Q167 579 138.5 509.0Q110 439 110 355Q110 271 138.0 199.5Q166 128 225.5 85.0Q285 42 377 42Q423 42 466.0 55.0Q509 68 542.0 95.0Q575 122 590 161H655Q635 106 593.5 68.0Q552 30 496.0 11.0Q440 -8 375 -8Z"/><path transform="translate(157.984 0) scale(0.032 -0.032)" d="M14 0 287 707H360L635 0H571L509 159H138L77 0ZM157 210H490L324 648Z"/><path transform="translate(180.512 0) scale(0.032 -0.032)" d="M91 0V707H148V52H553V0Z"/><path transform="translate(200.512 0) scale(0.032 -0.032)" d="M91 0V707H553V655H148V377H512V325H148V52H553V0Z"/><path transform="translate(222.432 -7.68) scale(0.024 -0.024)" d="M318 445V707H414L466 592L518 707H613V445H550V643L484 499H447L381 643V445ZM144 445V648H59V707H294V648H208V445Z"/><g transform="translate(254.56 0)"><path transform="translate(0 0) scale(0.032 -0.032)" d="M83 0V707H189V396H543V707H649V0H543V299H189V0Z"/><path transform="translate(23.424 0) scale(0.032 -0.032)" d="M342 -8Q273 -8 212.0 12.0Q151 32 109.0 77.0Q67 122 53 196H162Q175 154 204.0 130.5Q233 107 271.5 98.0Q310 89 349 89Q386 89 418.5 99.0Q451 109 472.0 132.0Q493 155 493 192Q493 220 482.0 238.0Q471 256 451.5 267.5Q432 279 405 286Q374 296 338.5 303.0Q303 310 268.5 319.0Q234 328 204 342Q179 352 155.5 366.5Q132 381 115.0 401.5Q98 422 87.5 450.0Q77 478 77 514Q77 562 92.5 596.0Q108 630 133.5 653.0Q159 676 192.5 689.5Q226 703 263.0 709.0Q300 715 335 715Q399 715 453.0 695.0Q507 675 542.5 631.5Q578 588 581 517H478Q474 555 452.5 577.5Q431 600 399.0 609.5Q367 619 331 619Q305 619 279.0 614.5Q253 610 231.5 598.5Q210 587 197.5 568.0Q185 549 185 521Q185 497 195.0 478.5Q205 460 223.5 447.5Q242 435 265 426Q307 410 357.0 401.5Q407 393 451 378Q483 368 511.0 353.5Q539 339 559.0 318.5Q579 298 590.0 270.5Q601 243 601 207Q601 148 580.0 106.5Q559 65 523.0 40.0Q487 15 440.0 3.5Q393 -8 342 -8Z"/><path transform="translate(44.384 0) scale(0.032 -0.032)" d="M11 0 243 353 18 707H147L310 437L473 707H599L375 356L607 0H479L308 271L134 0Z"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="446.72" height="112" viewBox="0 0 446.72 112" color="#2d4bf2" fill="#171717" role="img" aria-label="Hyperscale HSX horizontal lockup"><g transform="translate(24 24) scale(2)" fill="none" stroke="#2d4bf2" stroke-width="0.8200000000000001" stroke-linecap="round" stroke-linejoin="round"><path d="M16 3.5L28.5 9.75V22.25L16 28.5L3.5 22.25V9.75Z"/><path d="M3.5 9.75L16 16L28.5 9.75"/><path d="M16 16V28.5"/><path d="M16 5L24 9V17L16 21L8 17V9Z"/><path d="M8 9L16 13L24 9"/><path d="M16 13V21"/><path d="M16 7L20 9V13L16 15L12 13V9Z"/><path d="M12 9L16 11L20 9"/><path d="M16 11V15"/></g><g transform="translate(104 68)"><path transform="translate(0 0) scale(0.032 -0.032)" d="M91 0V707H148V372H578V707H635V0H578V321H148V0Z"/><path transform="translate(24.992 0) scale(0.032 -0.032)" d="M269 0V266L18 707H86L298 324L510 707H575L326 267V0Z"/><path transform="translate(45.728 0) scale(0.032 -0.032)" d="M91 0V707H329Q406 707 460.5 682.5Q515 658 544.0 607.0Q573 556 573 477Q573 399 538.5 347.5Q504 296 444.5 270.0Q385 244 310 244H148V0ZM148 295H307Q400 295 457.0 339.5Q514 384 514 481Q514 573 464.0 614.0Q414 655 324 655H148Z"/><path transform="translate(67.52 0) scale(0.032 -0.032)" d="M91 0V707H553V655H148V377H512V325H148V52H553V0Z"/><path transform="translate(88.64 0) scale(0.032 -0.032)" d="M91 0V707H351Q407 707 452.5 695.5Q498 684 530.5 659.0Q563 634 580.5 592.5Q598 551 598 492Q598 437 578.0 396.0Q558 355 520.0 328.0Q482 301 430 289L584 0H521L371 279H148V0ZM148 330H323Q365 330 404.0 336.5Q443 343 473.5 361.0Q504 379 521.5 411.5Q539 444 539 495Q540 557 514.5 592.0Q489 627 444.5 641.0Q400 655 341 655H148Z"/><path transform="translate(111.36 0) scale(0.032 -0.032)" d="M337 -8Q276 -8 219.5 8.0Q163 24 121.0 61.5Q79 99 61 161H123Q142 117 176.0 91.0Q210 65 252.5 53.5Q295 42 337 42Q384 42 427.0 56.5Q470 71 497.0 101.0Q524 131 524 180Q524 219 508.5 243.0Q493 267 466.5 281.5Q440 296 405 306Q379 314 352.0 320.5Q325 327 299.5 334.0Q274 341 251 349Q220 358 189.5 371.0Q159 384 135.5 404.0Q112 424 97.5 453.0Q83 482 83 524Q83 567 96.0 599.0Q109 631 133.0 653.0Q157 675 188.0 688.5Q219 702 254.5 708.5Q290 715 327 715Q384 715 433.5 699.0Q483 683 518.0 647.0Q553 611 562 550H504Q494 593 466.5 618.0Q439 643 402.0 654.0Q365 665 326 665Q295 665 263.0 658.5Q231 652 204.0 637.0Q177 622 160.0 596.5Q143 571 143 532Q143 493 159.5 468.0Q176 443 202.5 428.0Q229 413 262 402Q306 388 353.0 377.5Q400 367 442 353Q472 344 498.0 329.5Q524 315 543.0 295.0Q562 275 573.0 249.5Q584 224 584 192Q584 137 563.5 99.0Q543 61 508.0 37.0Q473 13 429.0 2.5Q385 -8 337 -8Z"/><path transform="translate(133.792 0) scale(0.032 -0.032)" d="M375 -8Q265 -8 193.5 39.0Q122 86 87.0 167.5Q52 249 52 353Q52 456 87.5 537.5Q123 619 195.5 667.0Q268 715 378 715Q442 715 495.5 696.0Q549 677 586.5 640.0Q624 603 642 546H583Q559 605 504.5 635.0Q450 665 379 665Q286 665 226.5 622.0Q167 579 138.5 509.0Q110 439 110 355Q110 271 138.0 199.5Q166 128 225.5 85.0Q285 42 377 42Q423 42 466.0 55.0Q509 68 542.0 95.0Q575 122 590 161H655Q635 106 593.5 68.0Q552 30 496.0 11.0Q440 -8 375 -8Z"/><path transform="translate(157.984 0) scale(0.032 -0.032)" d="M14 0 287 707H360L635 0H571L509 159H138L77 0ZM157 210H490L324 648Z"/><path transform="translate(180.512 0) scale(0.032 -0.032)" d="M91 0V707H148V52H553V0Z"/><path transform="translate(200.512 0) scale(0.032 -0.032)" d="M91 0V707H553V655H148V377H512V325H148V52H553V0Z"/><path transform="translate(222.432 -7.68) scale(0.024 -0.024)" d="M318 445V707H414L466 592L518 707H613V445H550V643L484 499H447L381 643V445ZM144 445V648H59V707H294V648H208V445Z"/><g transform="translate(254.56 0)"><path transform="translate(0 0) scale(0.032 -0.032)" d="M83 0V707H189V396H543V707H649V0H543V299H189V0Z"/><path transform="translate(23.424 0) scale(0.032 -0.032)" d="M342 -8Q273 -8 212.0 12.0Q151 32 109.0 77.0Q67 122 53 196H162Q175 154 204.0 130.5Q233 107 271.5 98.0Q310 89 349 89Q386 89 418.5 99.0Q451 109 472.0 132.0Q493 155 493 192Q493 220 482.0 238.0Q471 256 451.5 267.5Q432 279 405 286Q374 296 338.5 303.0Q303 310 268.5 319.0Q234 328 204 342Q179 352 155.5 366.5Q132 381 115.0 401.5Q98 422 87.5 450.0Q77 478 77 514Q77 562 92.5 596.0Q108 630 133.5 653.0Q159 676 192.5 689.5Q226 703 263.0 709.0Q300 715 335 715Q399 715 453.0 695.0Q507 675 542.5 631.5Q578 588 581 517H478Q474 555 452.5 577.5Q431 600 399.0 609.5Q367 619 331 619Q305 619 279.0 614.5Q253 610 231.5 598.5Q210 587 197.5 568.0Q185 549 185 521Q185 497 195.0 478.5Q205 460 223.5 447.5Q242 435 265 426Q307 410 357.0 401.5Q407 393 451 378Q483 368 511.0 353.5Q539 339 559.0 318.5Q579 298 590.0 270.5Q601 243 601 207Q601 148 580.0 106.5Q559 65 523.0 40.0Q487 15 440.0 3.5Q393 -8 342 -8Z"/><path transform="translate(44.384 0) scale(0.032 -0.032)" d="M11 0 243 353 18 707H147L310 437L473 707H599L375 356L607 0H479L308 271L134 0Z"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="226.92" height="184" viewBox="0 0 226.92 184" color="#ffffff" fill="#ffffff" role="img" aria-label="Hyperscale HSX stacked lockup"><g transform="translate(81.46 24) scale(2)" fill="none" stroke="#ffffff" stroke-width="0.8200000000000001" stroke-linecap="round" stroke-linejoin="round"><path d="M16 3.5L28.5 9.75V22.25L16 28.5L3.5 22.25V9.75Z"/><path d="M3.5 9.75L16 16L28.5 9.75"/><path d="M16 16V28.5"/><path d="M16 5L24 9V17L16 21L8 17V9Z"/><path d="M8 9L16 13L24 9"/><path d="M16 13V21"/><path d="M16 7L20 9V13L16 15L12 13V9Z"/><path d="M12 9L16 11L20 9"/><path d="M16 11V15"/></g><g transform="translate(24 128)"><path transform="translate(0 0) scale(0.024 -0.024)" d="M91 0V707H148V372H578V707H635V0H578V321H148V0Z"/><path transform="translate(18.744 0) scale(0.024 -0.024)" d="M269 0V266L18 707H86L298 324L510 707H575L326 267V0Z"/><path transform="translate(34.296 0) scale(0.024 -0.024)" d="M91 0V707H329Q406 707 460.5 682.5Q515 658 544.0 607.0Q573 556 573 477Q573 399 538.5 347.5Q504 296 444.5 270.0Q385 244 310 244H148V0ZM148 295H307Q400 295 457.0 339.5Q514 384 514 481Q514 573 464.0 614.0Q414 655 324 655H148Z"/><path transform="translate(50.64 0) scale(0.024 -0.024)" d="M91 0V707H553V655H148V377H512V325H148V52H553V0Z"/><path transform="translate(66.48 0) scale(0.024 -0.024)" d="M91 0V707H351Q407 707 452.5 695.5Q498 684 530.5 659.0Q563 634 580.5 592.5Q598 551 598 492Q598 437 578.0 396.0Q558 355 520.0 328.0Q482 301 430 289L584 0H521L371 279H148V0ZM148 330H323Q365 330 404.0 336.5Q443 343 473.5 361.0Q504 379 521.5 411.5Q539 444 539 495Q540 557 514.5 592.0Q489 627 444.5 641.0Q400 655 341 655H148Z"/><path transform="translate(83.52 0) scale(0.024 -0.024)" d="M337 -8Q276 -8 219.5 8.0Q163 24 121.0 61.5Q79 99 61 161H123Q142 117 176.0 91.0Q210 65 252.5 53.5Q295 42 337 42Q384 42 427.0 56.5Q470 71 497.0 101.0Q524 131 524 180Q524 219 508.5 243.0Q493 267 466.5 281.5Q440 296 405 306Q379 314 352.0 320.5Q325 327 299.5 334.0Q274 341 251 349Q220 358 189.5 371.0Q159 384 135.5 404.0Q112 424 97.5 453.0Q83 482 83 524Q83 567 96.0 599.0Q109 631 133.0 653.0Q157 675 188.0 688.5Q219 702 254.5 708.5Q290 715 327 715Q384 715 433.5 699.0Q483 683 518.0 647.0Q553 611 562 550H504Q494 593 466.5 618.0Q439 643 402.0 654.0Q365 665 326 665Q295 665 263.0 658.5Q231 652 204.0 637.0Q177 622 160.0 596.5Q143 571 143 532Q143 493 159.5 468.0Q176 443 202.5 428.0Q229 413 262 402Q306 388 353.0 377.5Q400 367 442 353Q472 344 498.0 329.5Q524 315 543.0 295.0Q562 275 573.0 249.5Q584 224 584 192Q584 137 563.5 99.0Q543 61 508.0 37.0Q473 13 429.0 2.5Q385 -8 337 -8Z"/><path transform="translate(100.344 0) scale(0.024 -0.024)" d="M375 -8Q265 -8 193.5 39.0Q122 86 87.0 167.5Q52 249 52 353Q52 456 87.5 537.5Q123 619 195.5 667.0Q268 715 378 715Q442 715 495.5 696.0Q549 677 586.5 640.0Q624 603 642 546H583Q559 605 504.5 635.0Q450 665 379 665Q286 665 226.5 622.0Q167 579 138.5 509.0Q110 439 110 355Q110 271 138.0 199.5Q166 128 225.5 85.0Q285 42 377 42Q423 42 466.0 55.0Q509 68 542.0 95.0Q575 122 590 161H655Q635 106 593.5 68.0Q552 30 496.0 11.0Q440 -8 375 -8Z"/><path transform="translate(118.488 0) scale(0.024 -0.024)" d="M14 0 287 707H360L635 0H571L509 159H138L77 0ZM157 210H490L324 648Z"/><path transform="translate(135.384 0) scale(0.024 -0.024)" d="M91 0V707H148V52H553V0Z"/><path transform="translate(150.384 0) scale(0.024 -0.024)" d="M91 0V707H553V655H148V377H512V325H148V52H553V0Z"/><path transform="translate(166.824 -5.76) scale(0.018 -0.018)" d="M318 445V707H414L466 592L518 707H613V445H550V643L484 499H447L381 643V445ZM144 445V648H59V707H294V648H208V445Z"/></g><g transform="translate(89.4 160)"><path transform="translate(0 0) scale(0.024 -0.024)" d="M83 0V707H189V396H543V707H649V0H543V299H189V0Z"/><path transform="translate(17.568 0) scale(0.024 -0.024)" d="M342 -8Q273 -8 212.0 12.0Q151 32 109.0 77.0Q67 122 53 196H162Q175 154 204.0 130.5Q233 107 271.5 98.0Q310 89 349 89Q386 89 418.5 99.0Q451 109 472.0 132.0Q493 155 493 192Q493 220 482.0 238.0Q471 256 451.5 267.5Q432 279 405 286Q374 296 338.5 303.0Q303 310 268.5 319.0Q234 328 204 342Q179 352 155.5 366.5Q132 381 115.0 401.5Q98 422 87.5 450.0Q77 478 77 514Q77 562 92.5 596.0Q108 630 133.5 653.0Q159 676 192.5 689.5Q226 703 263.0 709.0Q300 715 335 715Q399 715 453.0 695.0Q507 675 542.5 631.5Q578 588 581 517H478Q474 555 452.5 577.5Q431 600 399.0 609.5Q367 619 331 619Q305 619 279.0 614.5Q253 610 231.5 598.5Q210 587 197.5 568.0Q185 549 185 521Q185 497 195.0 478.5Q205 460 223.5 447.5Q242 435 265 426Q307 410 357.0 401.5Q407 393 451 378Q483 368 511.0 353.5Q539 339 559.0 318.5Q579 298 590.0 270.5Q601 243 601 207Q601 148 580.0 106.5Q559 65 523.0 40.0Q487 15 440.0 3.5Q393 -8 342 -8Z"/><path transform="translate(33.288 0) scale(0.024 -0.024)" d="M11 0 243 353 18 707H147L310 437L473 707H599L375 356L607 0H479L308 271L134 0Z"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="226.92" height="184" viewBox="0 0 226.92 184" color="#2d4bf2" fill="#171717" role="img" aria-label="Hyperscale HSX stacked lockup"><g transform="translate(81.46 24) scale(2)" fill="none" stroke="#2d4bf2" stroke-width="0.8200000000000001" stroke-linecap="round" stroke-linejoin="round"><path d="M16 3.5L28.5 9.75V22.25L16 28.5L3.5 22.25V9.75Z"/><path d="M3.5 9.75L16 16L28.5 9.75"/><path d="M16 16V28.5"/><path d="M16 5L24 9V17L16 21L8 17V9Z"/><path d="M8 9L16 13L24 9"/><path d="M16 13V21"/><path d="M16 7L20 9V13L16 15L12 13V9Z"/><path d="M12 9L16 11L20 9"/><path d="M16 11V15"/></g><g transform="translate(24 128)"><path transform="translate(0 0) scale(0.024 -0.024)" d="M91 0V707H148V372H578V707H635V0H578V321H148V0Z"/><path transform="translate(18.744 0) scale(0.024 -0.024)" d="M269 0V266L18 707H86L298 324L510 707H575L326 267V0Z"/><path transform="translate(34.296 0) scale(0.024 -0.024)" d="M91 0V707H329Q406 707 460.5 682.5Q515 658 544.0 607.0Q573 556 573 477Q573 399 538.5 347.5Q504 296 444.5 270.0Q385 244 310 244H148V0ZM148 295H307Q400 295 457.0 339.5Q514 384 514 481Q514 573 464.0 614.0Q414 655 324 655H148Z"/><path transform="translate(50.64 0) scale(0.024 -0.024)" d="M91 0V707H553V655H148V377H512V325H148V52H553V0Z"/><path transform="translate(66.48 0) scale(0.024 -0.024)" d="M91 0V707H351Q407 707 452.5 695.5Q498 684 530.5 659.0Q563 634 580.5 592.5Q598 551 598 492Q598 437 578.0 396.0Q558 355 520.0 328.0Q482 301 430 289L584 0H521L371 279H148V0ZM148 330H323Q365 330 404.0 336.5Q443 343 473.5 361.0Q504 379 521.5 411.5Q539 444 539 495Q540 557 514.5 592.0Q489 627 444.5 641.0Q400 655 341 655H148Z"/><path transform="translate(83.52 0) scale(0.024 -0.024)" d="M337 -8Q276 -8 219.5 8.0Q163 24 121.0 61.5Q79 99 61 161H123Q142 117 176.0 91.0Q210 65 252.5 53.5Q295 42 337 42Q384 42 427.0 56.5Q470 71 497.0 101.0Q524 131 524 180Q524 219 508.5 243.0Q493 267 466.5 281.5Q440 296 405 306Q379 314 352.0 320.5Q325 327 299.5 334.0Q274 341 251 349Q220 358 189.5 371.0Q159 384 135.5 404.0Q112 424 97.5 453.0Q83 482 83 524Q83 567 96.0 599.0Q109 631 133.0 653.0Q157 675 188.0 688.5Q219 702 254.5 708.5Q290 715 327 715Q384 715 433.5 699.0Q483 683 518.0 647.0Q553 611 562 550H504Q494 593 466.5 618.0Q439 643 402.0 654.0Q365 665 326 665Q295 665 263.0 658.5Q231 652 204.0 637.0Q177 622 160.0 596.5Q143 571 143 532Q143 493 159.5 468.0Q176 443 202.5 428.0Q229 413 262 402Q306 388 353.0 377.5Q400 367 442 353Q472 344 498.0 329.5Q524 315 543.0 295.0Q562 275 573.0 249.5Q584 224 584 192Q584 137 563.5 99.0Q543 61 508.0 37.0Q473 13 429.0 2.5Q385 -8 337 -8Z"/><path transform="translate(100.344 0) scale(0.024 -0.024)" d="M375 -8Q265 -8 193.5 39.0Q122 86 87.0 167.5Q52 249 52 353Q52 456 87.5 537.5Q123 619 195.5 667.0Q268 715 378 715Q442 715 495.5 696.0Q549 677 586.5 640.0Q624 603 642 546H583Q559 605 504.5 635.0Q450 665 379 665Q286 665 226.5 622.0Q167 579 138.5 509.0Q110 439 110 355Q110 271 138.0 199.5Q166 128 225.5 85.0Q285 42 377 42Q423 42 466.0 55.0Q509 68 542.0 95.0Q575 122 590 161H655Q635 106 593.5 68.0Q552 30 496.0 11.0Q440 -8 375 -8Z"/><path transform="translate(118.488 0) scale(0.024 -0.024)" d="M14 0 287 707H360L635 0H571L509 159H138L77 0ZM157 210H490L324 648Z"/><path transform="translate(135.384 0) scale(0.024 -0.024)" d="M91 0V707H148V52H553V0Z"/><path transform="translate(150.384 0) scale(0.024 -0.024)" d="M91 0V707H553V655H148V377H512V325H148V52H553V0Z"/><path transform="translate(166.824 -5.76) scale(0.018 -0.018)" d="M318 445V707H414L466 592L518 707H613V445H550V643L484 499H447L381 643V445ZM144 445V648H59V707H294V648H208V445Z"/></g><g transform="translate(89.4 160)"><path transform="translate(0 0) scale(0.024 -0.024)" d="M83 0V707H189V396H543V707H649V0H543V299H189V0Z"/><path transform="translate(17.568 0) scale(0.024 -0.024)" d="M342 -8Q273 -8 212.0 12.0Q151 32 109.0 77.0Q67 122 53 196H162Q175 154 204.0 130.5Q233 107 271.5 98.0Q310 89 349 89Q386 89 418.5 99.0Q451 109 472.0 132.0Q493 155 493 192Q493 220 482.0 238.0Q471 256 451.5 267.5Q432 279 405 286Q374 296 338.5 303.0Q303 310 268.5 319.0Q234 328 204 342Q179 352 155.5 366.5Q132 381 115.0 401.5Q98 422 87.5 450.0Q77 478 77 514Q77 562 92.5 596.0Q108 630 133.5 653.0Q159 676 192.5 689.5Q226 703 263.0 709.0Q300 715 335 715Q399 715 453.0 695.0Q507 675 542.5 631.5Q578 588 581 517H478Q474 555 452.5 577.5Q431 600 399.0 609.5Q367 619 331 619Q305 619 279.0 614.5Q253 610 231.5 598.5Q210 587 197.5 568.0Q185 549 185 521Q185 497 195.0 478.5Q205 460 223.5 447.5Q242 435 265 426Q307 410 357.0 401.5Q407 393 451 378Q483 368 511.0 353.5Q539 339 559.0 318.5Q579 298 590.0 270.5Q601 243 601 207Q601 148 580.0 106.5Q559 65 523.0 40.0Q487 15 440.0 3.5Q393 -8 342 -8Z"/><path transform="translate(33.288 0) scale(0.024 -0.024)" d="M11 0 243 353 18 707H147L310 437L473 707H599L375 356L607 0H479L308 271L134 0Z"/></g></svg>