@wildshard/shard-format 0.0.0 → 0.4.5

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 (746) hide show
  1. package/corpus/brasscap-mesa/blobs/bin/02da0052111419cdff3a29f1c6d0ff0d223e0b53a956c16c65ed63d87928b3b9.bin +0 -0
  2. package/corpus/brasscap-mesa/blobs/bin/068a121cd780a2a9164416f6e4fde44834f2d2f3a5ed65c174e480b7a2d3f627.bin +0 -0
  3. package/corpus/brasscap-mesa/blobs/bin/07d5a061cd338618e528747d61eb2b17709510550ef0ba40a58b67761b200f3f.bin +0 -0
  4. package/corpus/brasscap-mesa/blobs/bin/086e3706070555baca863f6ecf9dbca09c084afa501d92d4246d896b09546f36.bin +0 -0
  5. package/corpus/brasscap-mesa/blobs/bin/08b1b9ab7c732d7dbe8f961f1fc40e84042d1fe42544f55c9ee89f04dffe3d5e.bin +0 -0
  6. package/corpus/brasscap-mesa/blobs/bin/18bdbdc704cb8aac93435d208dfe0e9a44374efb73afa3bc58c631650e0a2995.bin +0 -0
  7. package/corpus/brasscap-mesa/blobs/bin/1a210fcddcb9749ecb1c244837e8e37ea69b038faae191dee6bbbde228d31a18.bin +0 -0
  8. package/corpus/brasscap-mesa/blobs/bin/264ab9ede386504a5ff9814b0a620b879cb29f3f45a80bcfc0c80b8ee236e364.bin +0 -0
  9. package/corpus/brasscap-mesa/blobs/bin/2b6fbea4c846a23cf4802ebdb1804e128896c8dd87e5d23509db6729e5b1be4e.bin +0 -0
  10. package/corpus/brasscap-mesa/blobs/bin/2d755cc635dee90b0f3958272855a821e2dd605a189a5ffcd480a325155fe84f.bin +0 -0
  11. package/corpus/brasscap-mesa/blobs/bin/2d76c6829fe77fb55cc2541e4aca5ce5d18b68508dcdf3fa957fe4a83b9c887a.bin +0 -0
  12. package/corpus/brasscap-mesa/blobs/bin/32c15d55a4548501740593807c5007217c72dbc10a21f4613ef5e0cee0b90d1d.bin +0 -0
  13. package/corpus/brasscap-mesa/blobs/bin/3539b362cf3a61a79e92e113ebf8f255d0b25ec2d2edd816498879de831fa912.bin +0 -0
  14. package/corpus/brasscap-mesa/blobs/bin/3af38a2377bc89f6c6c82ee1e83df674efa2793db932b50a23bbce7ec9cd7941.bin +0 -0
  15. package/corpus/brasscap-mesa/blobs/bin/3c176a7a0d0850fdcee790ed2641216fc3d1cba025928de3d7784262bb9b6f4a.bin +0 -0
  16. package/corpus/brasscap-mesa/blobs/bin/3fb37e488aa81a64c997b3dd09794e988994c6ee3476c6d653ced1670888dd8e.bin +0 -0
  17. package/corpus/brasscap-mesa/blobs/bin/424dcc7b320317bf3f2c62c8f19bc80564035127eb38ab811e460934d57ea38c.bin +0 -0
  18. package/corpus/brasscap-mesa/blobs/bin/45cea35fab6bb06051a3286fca2307944850c7f9ed7aa89b7c24fafef28efda6.bin +0 -0
  19. package/corpus/brasscap-mesa/blobs/bin/499cc7863851f97d79dbfc64e76f9e6978894199184a0d80ebdca13066a8fa78.bin +0 -0
  20. package/corpus/brasscap-mesa/blobs/bin/4b7217644763b00c6ee6ae3f176c726914966fb791654a385c0638bb998b6dd2.bin +0 -0
  21. package/corpus/brasscap-mesa/blobs/bin/4cf11c7177bb082f335e5bc7a037ef00d09355c5ad8263e284a96a92630ff9ae.bin +0 -0
  22. package/corpus/brasscap-mesa/blobs/bin/536b37cab5a1edd6a68a71d122aab6898e44c68a5470a4ca8a9a72c57c02e034.bin +0 -0
  23. package/corpus/brasscap-mesa/blobs/bin/55d3628b27e0fcea383df86c434a69761439f51a013359f0829675b07ee2b616.bin +0 -0
  24. package/corpus/brasscap-mesa/blobs/bin/5652ba90fbd8146edaf42660329cc81798752f2f60b8d03956714460d5ba75ef.bin +0 -0
  25. package/corpus/brasscap-mesa/blobs/bin/57459ab5e2ac6cec65ef5e59789dd82b9666d8573df41c4a398df603f1fa456f.bin +0 -0
  26. package/corpus/brasscap-mesa/blobs/bin/5915b6aed21bba49b841b45574f44f60d26b44810bd68ac70b22f3f3b0dab072.bin +0 -0
  27. package/corpus/brasscap-mesa/blobs/bin/5c4a5c7a8e99253561105c5fa3faf14326cf0c23adc32bfe7f8aea4dbf4b05f9.bin +0 -0
  28. package/corpus/brasscap-mesa/blobs/bin/61822a412cfd461f4f7ae50bc13f242a0fca6c5c58fca72247b596ab037a1c85.bin +0 -0
  29. package/corpus/brasscap-mesa/blobs/bin/673b7712908966718341508469b39cd49e6461f690ca3c23d4621ea7eba0cc30.bin +0 -0
  30. package/corpus/brasscap-mesa/blobs/bin/69394a49520f84f6dccc1655f1c89eedc913ac53a7e48ac5dc1bff4141639bb4.bin +0 -0
  31. package/corpus/brasscap-mesa/blobs/bin/6e58a53a6c2acd50f9f80fd270ca034c54421df8a587e181101b4b75b952ac5d.bin +0 -0
  32. package/corpus/brasscap-mesa/blobs/bin/75dc9f23ee71e11a3a0c67eb77275d741a281c3398808fb42efd52b9973d5d04.bin +0 -0
  33. package/corpus/brasscap-mesa/blobs/bin/76c6a403293a68ed3d6ad14e9dd27b555c3a1ef4a3cae12a2bd2ab3e67c5ad02.bin +0 -0
  34. package/corpus/brasscap-mesa/blobs/bin/82b73ce3a18e47092840fc029177861887aa2867b007248ac79ffa20895a4491.bin +0 -0
  35. package/corpus/brasscap-mesa/blobs/bin/8430d9bbfb4e2b678c54595ad95555c3c73d0e1b144a4d6e29664ccb4371baf0.bin +0 -0
  36. package/corpus/brasscap-mesa/blobs/bin/848d4492508689f5c4a224079dca8809e872e33b8f2635c9f16da5dc21beed16.bin +0 -0
  37. package/corpus/brasscap-mesa/blobs/bin/84941ac387a0d245ea20bd663ff4ee78c5315bedfa058ada0961765aff61acaf.bin +0 -0
  38. package/corpus/brasscap-mesa/blobs/bin/859b7bbcf048a4525db0548b8f5afef83bfc4870914767153f44c05e83436ec5.bin +0 -0
  39. package/corpus/brasscap-mesa/blobs/bin/87b68b45680a57c796eed9183211b03335a6ad6737372b3ef476c2cf42efa631.bin +0 -0
  40. package/corpus/brasscap-mesa/blobs/bin/8cef94308af8d09670e4c99a3b6c3d9280b7a27d386653a3bd7d482b2cdf2b65.bin +0 -0
  41. package/corpus/brasscap-mesa/blobs/bin/8e564bce3f352c2186ae09ed7fbca9739c10abc46fd5f6893c68cb47178bd2b4.bin +0 -0
  42. package/corpus/brasscap-mesa/blobs/bin/8f89e79d0fb9b04d48c7b5719e1d024161c6a2119835b18dcb193ff51123a9be.bin +0 -0
  43. package/corpus/brasscap-mesa/blobs/bin/8fe511ad48656a0b10801100b9100edab1be605a8a182dc5c834d298bf0d9166.bin +0 -0
  44. package/corpus/brasscap-mesa/blobs/bin/900bda6562d06fafda54c495e325d57dbb7931813178ee207449c5519d89d537.bin +0 -0
  45. package/corpus/brasscap-mesa/blobs/bin/997b1b7d9210bfa77dc71f16a57c6bd66bc7c648686dc2a2666044c95042978a.bin +0 -0
  46. package/corpus/brasscap-mesa/blobs/bin/a111bb4c6cec536bcf57dddc744b871ac9f3d094ce459c16243adca19020db77.bin +0 -0
  47. package/corpus/brasscap-mesa/blobs/bin/a2208bf899e6c84942eef9fbab569d597f574551afae5864f1953c6a517af068.bin +0 -0
  48. package/corpus/brasscap-mesa/blobs/bin/a302ddb2598a72ece53780094b64ad861dc68e6913d8a1ea08f5d141736e2986.bin +0 -0
  49. package/corpus/brasscap-mesa/blobs/bin/afcbc671326d0dac14e460662c1f793335877ba53cc965f67c0306833b087e7c.bin +0 -0
  50. package/corpus/brasscap-mesa/blobs/bin/b657159e6a28c801a211024f96a7ef60e388ce928a7b41ae3d7555a6f8fd2e3e.bin +0 -0
  51. package/corpus/brasscap-mesa/blobs/bin/be6bbc6cd15ba525790075252ba0ed0b28dae5cfbfa118c00dfb9ea1ab95e668.bin +0 -0
  52. package/corpus/brasscap-mesa/blobs/bin/c1360e3cbe6b3dc8894bc66c359853854c2e5adeac9c7cd5ba63f5db448be601.bin +0 -0
  53. package/corpus/brasscap-mesa/blobs/bin/c7983018dbf8e384ddf73191f526075bd0b29907061ab17642ecdc18ea7b9897.bin +0 -0
  54. package/corpus/brasscap-mesa/blobs/bin/cea66f27ca60ea173ee0a2bcd91964dc2638eb5657250fe3aa5bd3e41faf8730.bin +0 -0
  55. package/corpus/brasscap-mesa/blobs/bin/d052be571a0f3ab69926951f3a4c9d63f05da2ca6d91e5963dd63e04ecb515de.bin +0 -0
  56. package/corpus/brasscap-mesa/blobs/bin/d162a993a60dd682c8c21dd111429d84d8d30413a000cf481cf98d06ca83e706.bin +0 -0
  57. package/corpus/brasscap-mesa/blobs/bin/d238c3d3d054911714ebe30dafc99e6ad13925b7a600ba9f8d532d0f515f3f5a.bin +0 -0
  58. package/corpus/brasscap-mesa/blobs/bin/d9a98cfe2865a9bb0e94f35c735a570b0625b58f890a6b1f6e14fab2401f0af2.bin +0 -0
  59. package/corpus/brasscap-mesa/blobs/bin/dc27ae954b7b8a13a9459d6ca6ef2997f662715ff5f5453ea0da169f141748b8.bin +0 -0
  60. package/corpus/brasscap-mesa/blobs/bin/e3ff1fd41cf76668b8e1927c0c2e4056b63a293ebbd300a8f1b1d27d87786271.bin +0 -0
  61. package/corpus/brasscap-mesa/blobs/bin/e45b7344d373b3ef4a94f560cf4e17b1eb3b8cd89d1e552fc9be11d6b7b546f0.bin +0 -0
  62. package/corpus/brasscap-mesa/blobs/bin/eb14eb898224d5d81d1012bec54f2b79f9377dc60fa1d01e49b4c3e148292d77.bin +0 -0
  63. package/corpus/brasscap-mesa/blobs/bin/ed0e0101a3d91a3a615f9e78ef36f7deb8bb0eab0f133241d621925d0b596599.bin +0 -0
  64. package/corpus/brasscap-mesa/blobs/bin/f722e3a3b1f0a3d7b9f7d7c66c46d8c87245de5f8eece055daf95c7086f8c267.bin +0 -0
  65. package/corpus/brasscap-mesa/blobs/bin/f76013aedfd810f136fa689a151024bcb942687ef42ae7edf1fd3513ac4e22c7.bin +0 -0
  66. package/corpus/brasscap-mesa/blobs/glb/0547e63693282614673b13bade4c08eb772020757b131b7c80f2077873aab70e.glb +0 -0
  67. package/corpus/brasscap-mesa/blobs/glb/0cf89e9b1824440d213c8e9e33fb357734b7241b4c7eedaba3df7f8306e05425.glb +0 -0
  68. package/corpus/brasscap-mesa/blobs/glb/0e01060e3a507ffff6461c50b5c565c71380a6a67d9760cdd7a09afd3e30b584.glb +0 -0
  69. package/corpus/brasscap-mesa/blobs/glb/0ef326c5cf5292cd15b48b851460ee8156f51e0a5b62457c8f1f3c53c41665a3.glb +0 -0
  70. package/corpus/brasscap-mesa/blobs/glb/1112ff4a3f69db3b62c6d2d6ae021e7c43ce0ca1feb1d3130376881decb3c6b0.glb +0 -0
  71. package/corpus/brasscap-mesa/blobs/glb/11357cb8a0670fdc9a03780dd79a31e0aa7a0537786cbf66491bae1722d6feb3.glb +0 -0
  72. package/corpus/brasscap-mesa/blobs/glb/11dbecc73bd343c375bd4b79db8dbda2272e76a6b8426ac29e90f2b1272ccfc2.glb +0 -0
  73. package/corpus/brasscap-mesa/blobs/glb/133f639cfa837bc5da7915121c71fd32281660c2aaa0248bd59bde47e7faf8bc.glb +0 -0
  74. package/corpus/brasscap-mesa/blobs/glb/16812a090136b6678633aa4db03e4187920ae0aca776ad6da373c600cd341972.glb +0 -0
  75. package/corpus/brasscap-mesa/blobs/glb/17e63980d7934cfe1d2823d78652af338fe9f0c2170106cd4506a2c4e7f4716f.glb +0 -0
  76. package/corpus/brasscap-mesa/blobs/glb/199224cafc86904bdefec8f01d131d7ca3e076a22b689bfc6a26dd20373cf286.glb +0 -0
  77. package/corpus/brasscap-mesa/blobs/glb/1a5c8cf223a2f64715ea5eaf14d97a0131f9ebdef4388dc4823dcfa57817724c.glb +0 -0
  78. package/corpus/brasscap-mesa/blobs/glb/1b0ec09ad6718149d7ca514136cee09b04c96425f03af0559fd097112aa0daa5.glb +0 -0
  79. package/corpus/brasscap-mesa/blobs/glb/1e5024bbb1284b2ed39bbca2d0ade3acb5be2a2c6ba643291f269b76098c7f79.glb +0 -0
  80. package/corpus/brasscap-mesa/blobs/glb/1e7635972e13468ffcbb1608f1d12559b066b4533912be2c35e3db07fd4a679d.glb +0 -0
  81. package/corpus/brasscap-mesa/blobs/glb/1f03db3a38a21b8d4d02f8ede30e1303cd8d4c426815326a88f45a268b17a492.glb +0 -0
  82. package/corpus/brasscap-mesa/blobs/glb/2624abb7bf45618be40f8c3221445179fca44f7321baff415fdf7ddd5e0afc6f.glb +0 -0
  83. package/corpus/brasscap-mesa/blobs/glb/27fc3bad6db6e2b5ade5d242867d882362482ddf19c647edef821afc27d52dc2.glb +0 -0
  84. package/corpus/brasscap-mesa/blobs/glb/29959bdb5b04a9180e88ec1ed976bae55424d3dc50985f13c0f85bae11ae79ee.glb +0 -0
  85. package/corpus/brasscap-mesa/blobs/glb/308cbce2b1b6360f9a2dc275d0bc28be1966fc3ff5e0a58844405ba867f3f668.glb +0 -0
  86. package/corpus/brasscap-mesa/blobs/glb/3674d7be969755aaffa368e57b8d1bb743bc98e766a57948859d54fdc7d2c066.glb +0 -0
  87. package/corpus/brasscap-mesa/blobs/glb/3736ca95c9c40b30e21302ae6c89148d8ac09264dfbb7e5764b08c265a73ba3c.glb +0 -0
  88. package/corpus/brasscap-mesa/blobs/glb/3bc90e1dc9411d249697e4ec352baa4886f91cacfe4940ac43aed879f60966c9.glb +0 -0
  89. package/corpus/brasscap-mesa/blobs/glb/3f519c7c7482307cae908b27602dcb7716e2da4b651eff39c4c37103998d18fa.glb +0 -0
  90. package/corpus/brasscap-mesa/blobs/glb/4767636d5554b60c94b447b87b77fc1456a2b9af42bfe08585389d27f306dd5e.glb +0 -0
  91. package/corpus/brasscap-mesa/blobs/glb/4a3242773b3a73a73ee746a0cdf30c8d6d904bb4406dfdf9822dcd535d6ae308.glb +0 -0
  92. package/corpus/brasscap-mesa/blobs/glb/4c7bf3788cba151442d85c3f76553c2e356edf8566ae8243d0a535c9bcde51d0.glb +0 -0
  93. package/corpus/brasscap-mesa/blobs/glb/4f3b9f4c818ed6d375947e9603dd058c539e14ff05aa193fb5054d899dbb82a2.glb +0 -0
  94. package/corpus/brasscap-mesa/blobs/glb/4fdf7ee67d12de1cd30c3c2bbd9409032dcab5feb3a7d3977b92c50b1d161afe.glb +0 -0
  95. package/corpus/brasscap-mesa/blobs/glb/5821f33aa00e9acd2f4c0a29129978ee7006a879d163ce1463ae476031bfabcf.glb +0 -0
  96. package/corpus/brasscap-mesa/blobs/glb/5a986c3e44fc686a2efe7648c3945bb7b51cf303918381383f21f898dd312cad.glb +0 -0
  97. package/corpus/brasscap-mesa/blobs/glb/5c32fc1de6d198ed606d3e8c3264319acdd950dab18e8b723fc6332bf2f56aea.glb +0 -0
  98. package/corpus/brasscap-mesa/blobs/glb/602ce4e8b00a0afbc1a894b65641e48d362ec834a559b9d97a4801473bb01da7.glb +0 -0
  99. package/corpus/brasscap-mesa/blobs/glb/6180f9f96167522d8cab4de1d52598cecee8d7ee042f48e41669c98cf61c19c3.glb +0 -0
  100. package/corpus/brasscap-mesa/blobs/glb/6205973ba63f7a554662ba05010d25131bed2d9656de422e2067ca54709d5b3c.glb +0 -0
  101. package/corpus/brasscap-mesa/blobs/glb/693e556f2165232e8a38b1b2d68676f235ece5705c564992cfa7731426f4d376.glb +0 -0
  102. package/corpus/brasscap-mesa/blobs/glb/6a46175438bec5527c281b577bd220b6badedf3c74266b997d39e596f83b8853.glb +0 -0
  103. package/corpus/brasscap-mesa/blobs/glb/6ca1bcad7ea053a259b7f9fc5a7ec388a4cd29d44391d93386ea8b1143d94c21.glb +0 -0
  104. package/corpus/brasscap-mesa/blobs/glb/6f9bc99656b611890d6acc76ee416f6222ca2d5f62167840b4216a21e020a4c8.glb +0 -0
  105. package/corpus/brasscap-mesa/blobs/glb/6fb1e7857996662233ab5314fc13f8aa30703f91c04542e352ec17f9dc4fc054.glb +0 -0
  106. package/corpus/brasscap-mesa/blobs/glb/7028ec39712143a7e9d09d2e1477282b654d0470102ca9d272ac82b23604cb21.glb +0 -0
  107. package/corpus/brasscap-mesa/blobs/glb/73af65ac86efa61099178f3e7075dcd26d389ee9b9aa3546c18dede10c3dfda1.glb +0 -0
  108. package/corpus/brasscap-mesa/blobs/glb/73b992b71bd3165ff7701ab1430c075cb5ba9b74e6363d24640377b1011ddc93.glb +0 -0
  109. package/corpus/brasscap-mesa/blobs/glb/7471261d4df59979ba41a622d93779b66ebecd50353ad433862e603ee65f8748.glb +0 -0
  110. package/corpus/brasscap-mesa/blobs/glb/76e9a3fcca962c2f900cf79dc1a0851840bd405dc11231f629f784adbcb69d23.glb +0 -0
  111. package/corpus/brasscap-mesa/blobs/glb/79d2d29e8cd8b642386b5f31429b39bc4d6f13e53107dda00ebc463abf80c79d.glb +0 -0
  112. package/corpus/brasscap-mesa/blobs/glb/7de66fcfffe4ff108510cbe6bebec44e28ab4b78e98e9c1a38466db5b81881f7.glb +0 -0
  113. package/corpus/brasscap-mesa/blobs/glb/811fa798cb81ea99488db98e3d3ddea815aac8f6e7493ad04d0176f603978678.glb +0 -0
  114. package/corpus/brasscap-mesa/blobs/glb/89b277f1636be220ff5658ff1f1c62efe14079d6e1f42efb373fbf0246801533.glb +0 -0
  115. package/corpus/brasscap-mesa/blobs/glb/905c5fe666d9f6174e987382e47d3f325c5696cf8792d7a4a1dd120a438b8270.glb +0 -0
  116. package/corpus/brasscap-mesa/blobs/glb/90efe3e05370ee853c0130b98ee82f00b86f7c7104e96b094715187fa49ac16f.glb +0 -0
  117. package/corpus/brasscap-mesa/blobs/glb/968a7c5cb13014bce00a29d43b344bd6943ff00ae2908abbc6b40a994f1172a1.glb +0 -0
  118. package/corpus/brasscap-mesa/blobs/glb/9a955b4e69dfa5b38f071099053c1a3684cf85ec2d346420de2853c61768f8cc.glb +0 -0
  119. package/corpus/brasscap-mesa/blobs/glb/9da2781216a2e482dd8a6ada5ebb43bcf48e0169430e787ac277559cb2ade19a.glb +0 -0
  120. package/corpus/brasscap-mesa/blobs/glb/9db02aab14a3b52463deadefbf4ba771809941e7fcb137c905955bdc80ec23bd.glb +0 -0
  121. package/corpus/brasscap-mesa/blobs/glb/a3fe1788cf5d7f260249c722f0e0695a4d55744d1b14be44122377147a296256.glb +0 -0
  122. package/corpus/brasscap-mesa/blobs/glb/a5c75af8f090d3c95fa46d2be49be5031138d7cd1bae234ae028edf717bf299e.glb +0 -0
  123. package/corpus/brasscap-mesa/blobs/glb/a771abd40bd337a464c1bd19f841b62e290124faa89b19ec50e85ab36bc740a5.glb +0 -0
  124. package/corpus/brasscap-mesa/blobs/glb/a94a2ad2ed463a47cdda117df25b06b3cf6be37ddac08594bc5f5d76c7237730.glb +0 -0
  125. package/corpus/brasscap-mesa/blobs/glb/ad434e4a6490e495994b25f7574a5847a9f7d9c2ca5a2b229a9dfdd2e5e2bb72.glb +0 -0
  126. package/corpus/brasscap-mesa/blobs/glb/aeae7b05404b852008a7897689e58aacef44a2c3bc0e87d2519ecdb4cb1e3ff5.glb +0 -0
  127. package/corpus/brasscap-mesa/blobs/glb/b0c0c8a4985f92be3b358a8e703c67957427501882aeee05b4ccd3c7880930d4.glb +0 -0
  128. package/corpus/brasscap-mesa/blobs/glb/b25174c3cd13eea6e1d9c3104ee5197dc6330129b2f0f7676e8a429900999d9b.glb +0 -0
  129. package/corpus/brasscap-mesa/blobs/glb/b3eecdec571df96338edf690443394ff859383b4c94f4cf33d42c240006f8543.glb +0 -0
  130. package/corpus/brasscap-mesa/blobs/glb/b7aa0c61ff9e7411535c7b7b8e587849a92bad00d431171ab16ad47d55db0a53.glb +0 -0
  131. package/corpus/brasscap-mesa/blobs/glb/b9deef944c22331bc05220d1d6e46412e3cb1246ef041a4405d0cbbd90c2d624.glb +0 -0
  132. package/corpus/brasscap-mesa/blobs/glb/ba9376e4ac39b809133ab717edb4c88b5219118766db492d7c97534ce119c2ec.glb +0 -0
  133. package/corpus/brasscap-mesa/blobs/glb/baf338e9c272158b905fb58a712e29410c657a45be2764f1c6c43ca87fd1db48.glb +0 -0
  134. package/corpus/brasscap-mesa/blobs/glb/bd442ac9fbe52b9f2e4ba586670017c3f2d9fedf1cbdec77ef24e9f8b3a183c8.glb +0 -0
  135. package/corpus/brasscap-mesa/blobs/glb/c142adcf253be43b66f23ede8cea1e8fcfa256ebf53054a1068ace04745718a6.glb +0 -0
  136. package/corpus/brasscap-mesa/blobs/glb/c6d7cbdc4b2ee9d416edf4d736a4f374f08aea98ca395ad371a50a1853744cfc.glb +0 -0
  137. package/corpus/brasscap-mesa/blobs/glb/cfb165a7675d15cee2c490b31095a58f73bace50ccc1e0fdf2c8dc4400f1df27.glb +0 -0
  138. package/corpus/brasscap-mesa/blobs/glb/d40f2ee59612473e9f687f17a0e203fdb4ba54c7185b05a8d81a433b04f24134.glb +0 -0
  139. package/corpus/brasscap-mesa/blobs/glb/d50ce95411156a6b6cf386aefa5ee58db659811813f74be74f323e7c5795056f.glb +0 -0
  140. package/corpus/brasscap-mesa/blobs/glb/d6af418bbde39b4fc7d22a61401d416be7a3fc1214ea2d3f42b4549c392d22ca.glb +0 -0
  141. package/corpus/brasscap-mesa/blobs/glb/de7222ceeb1f72693dfb7fd1f343798659e03772d77f2b498fd8ebece2d5550a.glb +0 -0
  142. package/corpus/brasscap-mesa/blobs/glb/e26975b198127ac3b6b4f5c4bc08ad47d6691398feee777743285391cd36d502.glb +0 -0
  143. package/corpus/brasscap-mesa/blobs/glb/ea428490cd5f2672676a2776a598b819b08246871e76de94b7196f9643144986.glb +0 -0
  144. package/corpus/brasscap-mesa/blobs/glb/eb96567a266d24be188cb5b08021112f2fad311cbead939d53c5565da11f6265.glb +0 -0
  145. package/corpus/brasscap-mesa/blobs/glb/ecf66230bf7b68050c0827c2e4caf3de90e46859d291b794faa0dd3816d9dac6.glb +0 -0
  146. package/corpus/brasscap-mesa/blobs/glb/ed8f067763a4a8adb83d80c8324b2a9668f1061f5f5352f21295e6cc5132386f.glb +0 -0
  147. package/corpus/brasscap-mesa/blobs/glb/ee507a38772865467736d370791fe73c6aa4d83fe3e7ff4baa156b9cb2894c1c.glb +0 -0
  148. package/corpus/brasscap-mesa/blobs/glb/eedc5b62dc6f27d4a089e9f5b282f626129236d3f1689b001e04f8748bf8859c.glb +0 -0
  149. package/corpus/brasscap-mesa/blobs/glb/f4119b9c6c23435619682b5d247743459e76584b9b0d6c5cb689d8e156906695.glb +0 -0
  150. package/corpus/brasscap-mesa/blobs/glb/f576047267a0bf9bd4bfc47072ea3d11066345b839953546292da678d1cb4722.glb +0 -0
  151. package/corpus/brasscap-mesa/blobs/glb/f8cdfb11997d4ccabea88bcdd3924cc8b621b33618b18fe5fbfd286edfc1d87e.glb +0 -0
  152. package/corpus/brasscap-mesa/blobs/glb/fce95ecc5db24c903bd46f338e366e2715411465a5efac180e2f0f46397e59de.glb +0 -0
  153. package/corpus/brasscap-mesa/blobs/image/0579557f9344df6f2c4b1225e6252e53ab86d417a4c9b504b5c714a08a388e47.jpg +0 -0
  154. package/corpus/brasscap-mesa/blobs/image/9e18816a2ec16fbbb1f00f4a39c73ac2cbf6a8cdc17b4c96b1eba4cc9a754dc7.jpg +0 -0
  155. package/corpus/brasscap-mesa/blobs/image/eb453c71cfb1f9441eb00b32281f98e226e49d9dcf75c231455575fcdc652222.jpg +0 -0
  156. package/corpus/brasscap-mesa/blobs/json/e0072ed82115c519b891f53a194ea3b28fff7d3826d8ddf23460d6f21b7728d9.json +1 -0
  157. package/corpus/brasscap-mesa/blobs/json/ffb0e08eaaa7188db1f55931c9b6330937316091cc7463ed2eff6767bbfa33de.json +1 -0
  158. package/corpus/brasscap-mesa/blobs/wasm/1d6ace79610c4d510b60ad0c52915e42b57797d91f1ef292f60d8a3daec03dd6.wasm +0 -0
  159. package/corpus/brasscap-mesa/blobs/wasm/24a4d4c1292677b1c984b5c0d3497ae2929528bf511df475f80cc20945bb08ec.wasm +0 -0
  160. package/corpus/brasscap-mesa/blobs/wasm/b86d8afcc269fb063ebf64768fc3787635b65a7409a571115b07be2e4da39733.wasm +0 -0
  161. package/corpus/brasscap-mesa/cook.json +1 -0
  162. package/corpus/brasscap-mesa/mounts/shardfiles/brasscap-mesa/discovery.json +1 -0
  163. package/corpus/brasscap-mesa/sections/actors/creatures.json +1 -0
  164. package/corpus/brasscap-mesa/sections/actors/crowds.json +1 -0
  165. package/corpus/brasscap-mesa/sections/actors/species.json +1 -0
  166. package/corpus/brasscap-mesa/sections/audio/audio.json +1 -0
  167. package/corpus/brasscap-mesa/sections/combat/encounters.json +1 -0
  168. package/corpus/brasscap-mesa/sections/combat/items.json +1 -0
  169. package/corpus/brasscap-mesa/sections/combat/strikes.json +1 -0
  170. package/corpus/brasscap-mesa/sections/economy/ledger.json +1 -0
  171. package/corpus/brasscap-mesa/sections/economy/loot.json +1 -0
  172. package/corpus/brasscap-mesa/sections/look/look.json +1 -0
  173. package/corpus/brasscap-mesa/sections/look/materials.json +1 -0
  174. package/corpus/brasscap-mesa/sections/quests/quests.json +1 -0
  175. package/corpus/brasscap-mesa/sections/sim/client-scripts.json +1 -0
  176. package/corpus/brasscap-mesa/sections/sim/hooks.json +1 -0
  177. package/corpus/brasscap-mesa/sections/sim/plumbing.json +1 -0
  178. package/corpus/brasscap-mesa/sections/sim/scripts.json +1 -0
  179. package/corpus/brasscap-mesa/sections/sim/sim.json +1 -0
  180. package/corpus/brasscap-mesa/sections/state/migrations.json +1 -0
  181. package/corpus/brasscap-mesa/sections/state/state.json +1 -0
  182. package/corpus/brasscap-mesa/sections/ui/card.json +1 -0
  183. package/corpus/brasscap-mesa/sections/ui/compendium.json +1 -0
  184. package/corpus/brasscap-mesa/sections/ui/level.json +1 -0
  185. package/corpus/brasscap-mesa/sections/ui/ui.json +1 -0
  186. package/corpus/brasscap-mesa/sections/world/collision.json +1 -0
  187. package/corpus/brasscap-mesa/sections/world/days.json +1 -0
  188. package/corpus/brasscap-mesa/sections/world/edge.json +1 -0
  189. package/corpus/brasscap-mesa/sections/world/movers.json +1 -0
  190. package/corpus/brasscap-mesa/sections/world/navigation.json +1 -0
  191. package/corpus/brasscap-mesa/sections/world/props.json +1 -0
  192. package/corpus/brasscap-mesa/sections/world/spawn.json +1 -0
  193. package/corpus/brasscap-mesa/sections/world/terrain.json +1 -0
  194. package/corpus/brasscap-mesa/sections/world/tiles.json +1 -0
  195. package/corpus/brasscap-mesa/sections/world/traversal.json +1 -0
  196. package/corpus/brasscap-mesa/sections/world/water.json +1 -0
  197. package/corpus/brasscap-mesa/sections/world/weather.json +1 -0
  198. package/corpus/brasscap-mesa/shard.json +1 -0
  199. package/corpus/brasscap-mesa/validation.json +1 -0
  200. package/corpus/handwritten/blobs/bin/027822f6ae9c374ce1ced851f2227cb9acb03077e5cc6b7fecb245c31f021abd.bin +0 -0
  201. package/corpus/handwritten/blobs/bin/0377ce182bd604bcf4d501f14bf954c434ea64ad856ad9d71c502d1045612703.bin +0 -0
  202. package/corpus/handwritten/blobs/bin/05ad93d239eeeb5d9afa09b00d90c56098d88e8850e5b5e691fcaa7520dec3cd.bin +0 -0
  203. package/corpus/handwritten/blobs/bin/0c8980141e6e394ea473df1eb11c347ba617a1a9a4b39b3fa1871b5d15b97d87.bin +0 -0
  204. package/corpus/handwritten/blobs/bin/14eb11f8d809320e0a68b1edea7837d7a5b4a3da71f1ce4f54068e0afe0b039b.bin +0 -0
  205. package/corpus/handwritten/blobs/bin/16590066c039ac71e5038a9866a53ccb95e21af13db29cb655b379c4fcfef7bb.bin +0 -0
  206. package/corpus/handwritten/blobs/bin/1795b5147ad52482445d2414ee22823b947c43a917b6e96fd9ec017f17000912.bin +0 -0
  207. package/corpus/handwritten/blobs/bin/18f2e24ecc1ed1b1d12ae1c89732a5a1a618ab6e973d4ff0332cf9ecc4e4f4a6.bin +0 -0
  208. package/corpus/handwritten/blobs/bin/1a18ade01095f1a9ebe75650127861ef27dda0bb17c2b91bde057ec88ef2e98a.bin +0 -0
  209. package/corpus/handwritten/blobs/bin/1dba017cddb874bc147efb00c55418846ffa344a696f4df702bbabeea55034d0.bin +0 -0
  210. package/corpus/handwritten/blobs/bin/248c703537e4687ddd2b69a40d1ef3936da718626289d6867ce0a6866f562ba4.bin +0 -0
  211. package/corpus/handwritten/blobs/bin/2612d9fd4727f8c349f2dbfb7b1650bb7a752d0798a4966ac22cf2b6cdd9fcef.bin +0 -0
  212. package/corpus/handwritten/blobs/bin/28c54c766e90e3b046a2377b9fa015b0ce45cf3da4420f2b10553251f86c06aa.bin +0 -0
  213. package/corpus/handwritten/blobs/bin/30866b4807b12579f50218f6525c3db00919fbd43c97921daf47b3244b25dca6.bin +0 -0
  214. package/corpus/handwritten/blobs/bin/3d14fae85d77406a9b8c59f2e973cdae9587d49108ea92fb460679ca860196b8.bin +0 -0
  215. package/corpus/handwritten/blobs/bin/3f2201a53c441abcfb52089fe9bbb01f26fac8744099d3fb6668452885c2fa11.bin +0 -0
  216. package/corpus/handwritten/blobs/bin/42f270a99367fc4cc901518ccaa344ab595e265f113be944510da745c11f69d1.bin +0 -0
  217. package/corpus/handwritten/blobs/bin/43fd4327fedd51a586684ac611bcad4a8b9d62e51e03967de71fb42c9bf0f6e1.bin +0 -0
  218. package/corpus/handwritten/blobs/bin/484adda0898a881b6f095dad447f6a619bf0933f65efe940b72f1ab7f3630c22.bin +0 -0
  219. package/corpus/handwritten/blobs/bin/4a38cd49e8797429ce76265c3d8972195d5b0a02a35fc05fc513eab11240f415.bin +0 -0
  220. package/corpus/handwritten/blobs/bin/4fe636237bbbd4f836b0816bc61702f4c224d4cb91fbd94f244c731e24a1b945.bin +0 -0
  221. package/corpus/handwritten/blobs/bin/51b1cff782dc7ebb382bc429ee965023d4cdb52c7b3e37d6ffff5ef55c1c2813.bin +0 -0
  222. package/corpus/handwritten/blobs/bin/52561f02071ecaa98432fab5e8ece407a8e8f733a01f8eb7c543d1efe02614da.bin +0 -0
  223. package/corpus/handwritten/blobs/bin/556d6333923afea9641c4738741a41d6a46ae28a508288b9a49a749a344c1398.bin +0 -0
  224. package/corpus/handwritten/blobs/bin/5caeb97f32c7f31e1029eebdf31131f879f781bb5e3a225206a646710d83fd75.bin +0 -0
  225. package/corpus/handwritten/blobs/bin/5d1131e42a045083225105b640ff72e02c7f353ee6285545ac264d01bea26b1b.bin +0 -0
  226. package/corpus/handwritten/blobs/bin/5d80b30eee9f8342a92f6756fd0d84fb9d2d2ce994d222627641e584ad45d2a8.bin +0 -0
  227. package/corpus/handwritten/blobs/bin/5e0f9f7f2a85abe11a0a61ede853c9b9942b4494c3eb9943785cf6ae221e40e3.bin +0 -0
  228. package/corpus/handwritten/blobs/bin/5fdc5485343bba8201185c9bae862ad8618498ab5ce63b53514e4e0226fa7bdb.bin +0 -0
  229. package/corpus/handwritten/blobs/bin/6623dcb0b31c9ca0be342f6dca6b9e607ec3c12ff82068fa6030c142c2df77f7.bin +0 -0
  230. package/corpus/handwritten/blobs/bin/6887131a04175edbd1989aa95e8749d1703e7f2d0b8464e85f6bad28d6964125.bin +0 -0
  231. package/corpus/handwritten/blobs/bin/6cf89771d998486cad9049e6f4fc177d742a18ad79fafa4596814ff9d3cf1952.bin +0 -0
  232. package/corpus/handwritten/blobs/bin/74bbb0fc219e8476cd5550014a357ee18abc981ff3fe787ae3e60d4593705ec5.bin +0 -0
  233. package/corpus/handwritten/blobs/bin/76784a7f519ac43ce113a0c9365881839b75f66f96aa009fe8d3c8ab539ef283.bin +0 -0
  234. package/corpus/handwritten/blobs/bin/79a2f693ee2da546bb551f8b641b9c3affd2b8bfb5632ed7f417daba9d900af9.bin +0 -0
  235. package/corpus/handwritten/blobs/bin/7b593b0f9eefb957fb9d58b316d9836971203038d7c8127284bba44ccb3090bb.bin +0 -0
  236. package/corpus/handwritten/blobs/bin/7bb8e518ca5606de78972a6c648b57623f8bc12d7e06b4bbf43c60ac419a9bbd.bin +0 -0
  237. package/corpus/handwritten/blobs/bin/7c6133f3350147257fa501f41269cb77cb11d8ed96d351e873333b079cee524a.bin +0 -0
  238. package/corpus/handwritten/blobs/bin/7f5acf1893828995256f5b2c54948f80ba21e53de72db26ea72ce2479f5b0682.bin +0 -0
  239. package/corpus/handwritten/blobs/bin/836516253cf0f3e6e79537609fdbe6331c8c5c974f9ec4d3fbe4a7db48cf123d.bin +0 -0
  240. package/corpus/handwritten/blobs/bin/89900344f82d5c1474d2a163f8d29903447bac64e9c9775123ef499be70c2380.bin +0 -0
  241. package/corpus/handwritten/blobs/bin/95d76a9273c3edd98b3643c54e2e7989800bdcaf6f815230ef09f601e760330f.bin +0 -0
  242. package/corpus/handwritten/blobs/bin/a7b5a5fe053a38c93eed899bde5051cddd80e0a3f3c82b6fd814869097f0944b.bin +0 -0
  243. package/corpus/handwritten/blobs/bin/b29be84df0bfd1bc97a1464fd5ea068130947bfed3328e167640c81326eb45d7.bin +0 -0
  244. package/corpus/handwritten/blobs/bin/b6518dc352be03332a256f1cd9d1149da262fe6829e87ba43364f19c687ca7c9.bin +0 -0
  245. package/corpus/handwritten/blobs/bin/b7edb8095beeb158adb61ae3caa1653773757afbcd8fb2764c94b975a43fe9e2.bin +0 -0
  246. package/corpus/handwritten/blobs/bin/b86d617ae7fa397df51ff7af87cd89fa113ac19abd3840ea8f3a086d6c82905c.bin +0 -0
  247. package/corpus/handwritten/blobs/bin/bb860b5c67ee7f2fafd67588822152228d6f6c9de1231123eeafa4844732b18b.bin +0 -0
  248. package/corpus/handwritten/blobs/bin/bf8c3971bbb224075d488ffa9cfc20e322c61f9ca0c59c356838415f6778014b.bin +0 -0
  249. package/corpus/handwritten/blobs/bin/c2edd52ee14ebdc9fcc01d38c15d6ab3379df7a20098c260c546551898959cd1.bin +0 -0
  250. package/corpus/handwritten/blobs/bin/c3de13c551c5b45270143dcbb9fc9a31651f6012355823c0709c2fe6cafda940.bin +0 -0
  251. package/corpus/handwritten/blobs/bin/c57a8d9da18b1289afd16de00dd1ec75027048b8dcf7dd218da36bc3276ff035.bin +0 -0
  252. package/corpus/handwritten/blobs/bin/cc2975c9dea4c31b1bf380623a8f44059423004653f9cae4f603d374174323b7.bin +0 -0
  253. package/corpus/handwritten/blobs/bin/d476abba2e1c63ad3c7527617559173484ee837a5be2744d968466d5527c286b.bin +0 -0
  254. package/corpus/handwritten/blobs/bin/db242f89115c878cf0c3b976a1647e9cdeb6a1a51813b1dacaf1188715603294.bin +0 -0
  255. package/corpus/handwritten/blobs/bin/dcc4b9b3bc4ca777d11c494ae5478f17ad7cf2efa18dcba30def872d55355bc3.bin +0 -0
  256. package/corpus/handwritten/blobs/bin/dd99da483f385327d6b8319d6e2e9000b580280069353718aa0fda2230707e8b.bin +0 -0
  257. package/corpus/handwritten/blobs/bin/dfc139dba26f1789e16f72602e654636f2d99bcd41e3f10454da74b3a6a64dda.bin +0 -0
  258. package/corpus/handwritten/blobs/bin/e15ab3cc9f60657321cfe8d9751e086f025734f4e7068271e0baf6066a686f18.bin +0 -0
  259. package/corpus/handwritten/blobs/bin/e16a83a71213db6f804ce1d53981a2308062752c85c440022d9eeb7605fd37c8.bin +0 -0
  260. package/corpus/handwritten/blobs/bin/e7355876487f660ac9f25c9d9dfcd66eaf432e1e1669eb89d12ce8267a8d3e86.bin +0 -0
  261. package/corpus/handwritten/blobs/bin/e81a632e2da0f6a4d801f18aadfe2c6e640401cc1178935a9099ebb8e3af6cc1.bin +0 -0
  262. package/corpus/handwritten/blobs/bin/f0721c60d0b1046579d8c587fac8482a70822f0b39a85f9acc0cfc31f82b7dd2.bin +0 -0
  263. package/corpus/handwritten/blobs/bin/f301cf574de6d84030f839098ca44705dca115f9d3e4ee848e0b35fff3deaf77.bin +0 -0
  264. package/corpus/handwritten/blobs/bin/f7797f295a7570c437bf7020a1ddf208fea2a7aab595333320a6396c1608d360.bin +0 -0
  265. package/corpus/handwritten/blobs/glb/08de0bb2439ac812adef528b4b073bdb954bbeada972a2f3afb1757bd0540396.glb +0 -0
  266. package/corpus/handwritten/blobs/glb/153681171c35d2898569324e21ebe734b8418d4122833618a1e64ea326be1e5e.glb +0 -0
  267. package/corpus/handwritten/blobs/glb/1df5ce0b6cae72ec4cf3c41510681ba70ebb474f9745d536ebd4f03e8fc82de9.glb +0 -0
  268. package/corpus/handwritten/blobs/glb/262031e2fa710bd8d586eafce1019ca1434a2170e407567741aac1d99fc9c5ab.glb +0 -0
  269. package/corpus/handwritten/blobs/glb/27466efb180fb5b5074b40e424bd0b8d78f7ff0f5f3663748e014daeeeb5bedd.glb +0 -0
  270. package/corpus/handwritten/blobs/glb/2d2f6d00a14c89a4efb7f679b371118f564f258797ed8b8b42baf4ae60902ea6.glb +0 -0
  271. package/corpus/handwritten/blobs/glb/31f327d215ed7ef422e2169172f3869769e9816c9da979616844081e74f2eb09.glb +0 -0
  272. package/corpus/handwritten/blobs/glb/3bfe0e9ca18077ffee9c284ef40fed9f2fc354f7495612c785a6f980b5966559.glb +0 -0
  273. package/corpus/handwritten/blobs/glb/3db43042b3eeb1dee7ce9de1cc00322cefc348aa18c37d168b0858e6af6ca7a4.glb +0 -0
  274. package/corpus/handwritten/blobs/glb/46460a50da44fb8e792b48a646ec9ce025bb309d315dbcf67d2e9598591750de.glb +0 -0
  275. package/corpus/handwritten/blobs/glb/4902213556fedaf269fba6f0f195e424b2e49973ab45dcb8b69e34d253d9d8ff.glb +0 -0
  276. package/corpus/handwritten/blobs/glb/4dda463c9cd4bf339e5611871d4ba2fe16fe1487389a88b2888e96bc55e45d93.glb +0 -0
  277. package/corpus/handwritten/blobs/glb/4ed23469bd2b6b73183564cfc80a1ebcd0ffe2666a90a556752af0ca147fd2f7.glb +0 -0
  278. package/corpus/handwritten/blobs/glb/4fe74a1bed6b67129885b90cfcae01b5ca82e23e6d40507e280f02fca7fda54f.glb +0 -0
  279. package/corpus/handwritten/blobs/glb/50521bb3a50cc7199d324a0b25bc167c2e9d69770cb500490428efefc81ce3ea.glb +0 -0
  280. package/corpus/handwritten/blobs/glb/5ecca36d1e503edc092af0ef42f139cdcad99b8c2008318eb6ad337023d57296.glb +0 -0
  281. package/corpus/handwritten/blobs/glb/60fc036925852568cdb1b9fb85218dc43a8bf2ed86d3971a221ad942ece203a7.glb +0 -0
  282. package/corpus/handwritten/blobs/glb/611633cee0e5822b744486e6dff5414ad5b159eaabffe1c0ba0bb68be794bfa1.glb +0 -0
  283. package/corpus/handwritten/blobs/glb/67c7f983a0bcb9f84425378acac121a53f30795dce3181643bc1b763d0ae80b5.glb +0 -0
  284. package/corpus/handwritten/blobs/glb/6ecc0d307030943727484b49b1872643479c55ccc92252fca06e9e3cbe98fa90.glb +0 -0
  285. package/corpus/handwritten/blobs/glb/774b366df4de56cb6f9e3c904f02ec98016ac2ec489dc9e214b09220fca2f8e5.glb +0 -0
  286. package/corpus/handwritten/blobs/glb/785bae514ffc029e611d602259db7d37cbef589409a0814b9d37175d8b6c0a45.glb +0 -0
  287. package/corpus/handwritten/blobs/glb/79e79524efb2830e90af3c945c5b36ef07c1a38f2da2958112203a99eac52a16.glb +0 -0
  288. package/corpus/handwritten/blobs/glb/7bebdcdaf0be30d9f8d21bde72af68c32d825d12dc668f48109223ed7ff71c9f.glb +0 -0
  289. package/corpus/handwritten/blobs/glb/7d8b5ec9326a11362b3f9fa3409cb59d11b99f549cc304319c63c1ec55cbf5ab.glb +0 -0
  290. package/corpus/handwritten/blobs/glb/82e886f826315e4bf962363165fadadd3d93f85132c1909095045e0a7ccc0b34.glb +0 -0
  291. package/corpus/handwritten/blobs/glb/84b4ef190c3994ae7ca1b1f7a936526d1d20ad7deac13f949e3fe6bb7ba139ed.glb +0 -0
  292. package/corpus/handwritten/blobs/glb/85b7153e943fbe8c659bd6e4b323511dc6f6e2c7a3a1185e7a9a29ea6ddfdfa6.glb +0 -0
  293. package/corpus/handwritten/blobs/glb/85cf2d2be91cedbaf454ca42ad53c0c17b311088528d274695dbcea490d6c684.glb +0 -0
  294. package/corpus/handwritten/blobs/glb/8662b4cdc626c61a45e63f71dc866746c083cd0d4644b817a373105f936a7047.glb +0 -0
  295. package/corpus/handwritten/blobs/glb/8a4d33bfbb17d865e5deb0a0bdf3de67fc2312950a7568ed2635c22fbe4b1ecf.glb +0 -0
  296. package/corpus/handwritten/blobs/glb/8b11171d41c9027411ca8b87797d9ec70355471bdd3a247c114c49b8b781bbd9.glb +0 -0
  297. package/corpus/handwritten/blobs/glb/9026e1c4f0250832b69a989e69fe3071e5cad72adfe9c22ce11c409b18bb3357.glb +0 -0
  298. package/corpus/handwritten/blobs/glb/945b946f17b6393ea040230641c3083678bb6ab42e1d7239aeb9c950d0e7d5bb.glb +0 -0
  299. package/corpus/handwritten/blobs/glb/9afab455d603f1f8a38074c5a6cbed26d7d7f2cfd8a531820bd165d4b37399ee.glb +0 -0
  300. package/corpus/handwritten/blobs/glb/a6d702fb1be1095517625bfb2a2383f5f9638775059fd7e0d093d2044651b848.glb +0 -0
  301. package/corpus/handwritten/blobs/glb/aae479c2f99848998a1b499bbcad815d971349c2442bc363786aef63baad4337.glb +0 -0
  302. package/corpus/handwritten/blobs/glb/b155bd41f260d5303e293d691b657e0fb9b9c8b2f8aa589a0187061baa033eb7.glb +0 -0
  303. package/corpus/handwritten/blobs/glb/b1e8b770d99e8ca4396f21fd512f632c587149fc13db69deba388f702a46982f.glb +0 -0
  304. package/corpus/handwritten/blobs/glb/b382c318a5baac35da59a7b99ebaad6992e30c4bac327e85851ce0b2f89aa58b.glb +0 -0
  305. package/corpus/handwritten/blobs/glb/ba4478198696802808262af9bbfc224fe37e24e3f8c13de91debc87d3e1a9d41.glb +0 -0
  306. package/corpus/handwritten/blobs/glb/baf02cd967d1bf3c6a2ae878f4ca4ed34d0c39302ca2b8b6e3560a4e87b5c16f.glb +0 -0
  307. package/corpus/handwritten/blobs/glb/bc14dd152815ea6ed39458dcf89f2d69173d61d6e2b57be99d31ce2da64ccf67.glb +0 -0
  308. package/corpus/handwritten/blobs/glb/bc4e4d3bcf7ace855183efec0fbf242d444a32714d8b2fd8a45fa7b539ef2c73.glb +0 -0
  309. package/corpus/handwritten/blobs/glb/bc53475e2aa2fc9c2c0574b36a449fd57259c462d771e2b360def5c338d37c26.glb +0 -0
  310. package/corpus/handwritten/blobs/glb/c35d9e50f392c29f2587e3a6eb4f21143ba08e48d76a53b9de62d3b5be46c1a5.glb +0 -0
  311. package/corpus/handwritten/blobs/glb/c6911e059d3ac6aea75bc0ad3dd8b220704bfbba8ba98b57705e7aa3ecbe0050.glb +0 -0
  312. package/corpus/handwritten/blobs/glb/c84d88b6ed878490bcf9fa985b5e6a7a683de8ee7808ee4151a3b6a898fbe4f2.glb +0 -0
  313. package/corpus/handwritten/blobs/glb/c9d5d02ef0e38ac2898d3e6ecbc2ea0a6d2bd04531118550ab54b5e83293d7ec.glb +0 -0
  314. package/corpus/handwritten/blobs/glb/cd9d04e361e4c3d0aeb82f8682d71114ff8318b8fc4980bccee3c5e5c16afc27.glb +0 -0
  315. package/corpus/handwritten/blobs/glb/d32499928422a0cd1a32b1afaeacc31d2d84d74876f6805b36218dc04402a921.glb +0 -0
  316. package/corpus/handwritten/blobs/glb/dc7ea629fcddeba445599d73a5d721f4d5004e056c3c140baa3e6817393c6462.glb +0 -0
  317. package/corpus/handwritten/blobs/glb/dce79b59c85ca5a7f9fc25e585d253b15558f8f5d8497a76923c9071601de8b1.glb +0 -0
  318. package/corpus/handwritten/blobs/glb/e7fa1b02bae6c8d19ace0e8db44810beab9a1be9f8172d5816324760267d6d11.glb +0 -0
  319. package/corpus/handwritten/blobs/glb/eb664feed0fdcc3ac73cecbe737109994fe5dfad8a33997de88598965fa936ba.glb +0 -0
  320. package/corpus/handwritten/blobs/glb/ec6a771ca852b0b69e55a12df9d347384d01e611c8c6151ea771910f1601605d.glb +0 -0
  321. package/corpus/handwritten/blobs/glb/ede05013f575b4216d2b4b3f8a14d611ef28756f952f702bb169529c8ab02eff.glb +0 -0
  322. package/corpus/handwritten/blobs/glb/fec21fa96950340a1a031b31b37407468361ab0a7645c683e0d7773c18591a26.glb +0 -0
  323. package/corpus/handwritten/blobs/glb/ff21ea082bb00b01006900e7dbbb85220f31f45c144405c840a70872f9e09cb9.glb +0 -0
  324. package/corpus/handwritten/blobs/image/248fe9601e921305ffb35421414bc5f03e9f1b3dba15bf9b5c3387d8f255da17.png +0 -0
  325. package/corpus/handwritten/blobs/image/4b47420aff1ded28c9c6cf1eb92d6e2d7b01d057f2654654405445ff8d562e55.webp +0 -0
  326. package/corpus/handwritten/blobs/image/5dbc818ed0be692e6ba3df87898fd623280a2686eed5a538333e1325764b238d.png +0 -0
  327. package/corpus/handwritten/blobs/image/d5ae692911bbc2b60b5fdde239b70aad4ce9be0d7665c4a91b438de6077e21e3.jpg +0 -0
  328. package/corpus/handwritten/blobs/ktx2/df0dd2e8adc1d9479148bb198cb750471df454680cf0c9ffd6dc85d6262ed676.ktx2 +0 -0
  329. package/corpus/handwritten/blobs/wasm/ecc886d8bbebcf190298ff9162b6bb364f2125606f5bdc8cc220ea28044f96ea.wasm +0 -0
  330. package/corpus/handwritten/cook.json +1 -0
  331. package/corpus/handwritten/mounts/shardfiles/blender-template/discovery.json +1 -0
  332. package/corpus/handwritten/sections/actors/creatures.json +1 -0
  333. package/corpus/handwritten/sections/actors/crowds.json +1 -0
  334. package/corpus/handwritten/sections/actors/species.json +1 -0
  335. package/corpus/handwritten/sections/audio/audio.json +1 -0
  336. package/corpus/handwritten/sections/client/plan.json +1 -0
  337. package/corpus/handwritten/sections/combat/encounters.json +1 -0
  338. package/corpus/handwritten/sections/combat/items.json +1 -0
  339. package/corpus/handwritten/sections/combat/strikes.json +1 -0
  340. package/corpus/handwritten/sections/economy/ledger.json +1 -0
  341. package/corpus/handwritten/sections/economy/loot.json +1 -0
  342. package/corpus/handwritten/sections/look/look.json +1 -0
  343. package/corpus/handwritten/sections/look/map.json +1 -0
  344. package/corpus/handwritten/sections/look/materials.json +1 -0
  345. package/corpus/handwritten/sections/quests/quests.json +1 -0
  346. package/corpus/handwritten/sections/sim/client-scripts.json +1 -0
  347. package/corpus/handwritten/sections/sim/hooks.json +1 -0
  348. package/corpus/handwritten/sections/sim/plumbing.json +1 -0
  349. package/corpus/handwritten/sections/sim/sim.json +1 -0
  350. package/corpus/handwritten/sections/state/migrations.json +1 -0
  351. package/corpus/handwritten/sections/state/state.json +1 -0
  352. package/corpus/handwritten/sections/ui/card.json +1 -0
  353. package/corpus/handwritten/sections/ui/compendium.json +1 -0
  354. package/corpus/handwritten/sections/ui/level.json +1 -0
  355. package/corpus/handwritten/sections/ui/ui.json +1 -0
  356. package/corpus/handwritten/sections/world/collision.json +1 -0
  357. package/corpus/handwritten/sections/world/days.json +1 -0
  358. package/corpus/handwritten/sections/world/edge.json +1 -0
  359. package/corpus/handwritten/sections/world/movers.json +1 -0
  360. package/corpus/handwritten/sections/world/navigation.json +1 -0
  361. package/corpus/handwritten/sections/world/props.json +1 -0
  362. package/corpus/handwritten/sections/world/spawn.json +1 -0
  363. package/corpus/handwritten/sections/world/terrain.json +1 -0
  364. package/corpus/handwritten/sections/world/tiles.json +1 -0
  365. package/corpus/handwritten/sections/world/traversal.json +1 -0
  366. package/corpus/handwritten/sections/world/water.json +1 -0
  367. package/corpus/handwritten/sections/world/weather.json +1 -0
  368. package/corpus/handwritten/shard.json +1 -0
  369. package/corpus/handwritten/validation.json +1 -0
  370. package/package.json +511 -4
  371. package/packages/wire/src/net-command.ts +150 -0
  372. package/src/cli/bin.mjs +9 -0
  373. package/src/cli/main.ts +148 -0
  374. package/src/cli/pack.ts +262 -0
  375. package/src/cli/validate.ts +210 -0
  376. package/src/cli/version.ts +13 -0
  377. package/src/format/aacIndex.ts +160 -0
  378. package/src/format/accent.ts +35 -0
  379. package/src/format/achievementCounters.ts +22 -0
  380. package/src/format/actorMoves.ts +615 -0
  381. package/src/format/actorProjectionV2.ts +93 -0
  382. package/src/format/admissionControl.ts +66 -0
  383. package/src/format/admissionLate.ts +22 -0
  384. package/src/format/admissionLimits.ts +11 -0
  385. package/src/format/admissionServer.ts +30 -0
  386. package/src/format/ambientLife.ts +123 -0
  387. package/src/format/arenaRoomDocument.ts +114 -0
  388. package/src/format/arenaScriptRows.ts +107 -0
  389. package/src/format/arenaView.ts +30 -0
  390. package/src/format/assetAdmission.ts +279 -0
  391. package/src/format/audio-measure.ts +184 -0
  392. package/src/format/audio-mp4.ts +234 -0
  393. package/src/format/audio-rules.ts +271 -0
  394. package/src/format/audio-waiver.ts +55 -0
  395. package/src/format/audio.ts +463 -0
  396. package/src/format/audioBank.ts +37 -0
  397. package/src/format/audioProfiles.ts +501 -0
  398. package/src/format/audioRouting.ts +67 -0
  399. package/src/format/audioScene.ts +342 -0
  400. package/src/format/bakedTerrainBytes.ts +35 -0
  401. package/src/format/bakedTerrainSampling.ts +66 -0
  402. package/src/format/bakedTiles.ts +407 -0
  403. package/src/format/binarySource.ts +32 -0
  404. package/src/format/bodySlots.ts +90 -0
  405. package/src/format/bossEncounter.ts +354 -0
  406. package/src/format/bossProfiles.ts +709 -0
  407. package/src/format/bossSocketRig.ts +92 -0
  408. package/src/format/bowVariantRows.ts +68 -0
  409. package/src/format/brains.ts +252 -0
  410. package/src/format/budget.ts +214 -0
  411. package/src/format/buildings.ts +496 -0
  412. package/src/format/builtIndexes.ts +26 -0
  413. package/src/format/catalogueEconomy.ts +65 -0
  414. package/src/format/caveInterior.ts +225 -0
  415. package/src/format/cellBounds.ts +47 -0
  416. package/src/format/cellField.ts +98 -0
  417. package/src/format/chapterDirector.ts +193 -0
  418. package/src/format/clientChannels.ts +450 -0
  419. package/src/format/clientCues.ts +34 -0
  420. package/src/format/clientNative.ts +358 -0
  421. package/src/format/clientOwnership.ts +43 -0
  422. package/src/format/clientPlan.ts +306 -0
  423. package/src/format/clientScripts.ts +116 -0
  424. package/src/format/clientState.ts +273 -0
  425. package/src/format/clientTrails.ts +56 -0
  426. package/src/format/collectionDisplay.ts +232 -0
  427. package/src/format/colourFunction.ts +44 -0
  428. package/src/format/colourLut.ts +4 -0
  429. package/src/format/commonsCosts.ts +28 -0
  430. package/src/format/compendiumRows.ts +151 -0
  431. package/src/format/compendiumSketches.ts +23 -0
  432. package/src/format/completion.ts +83 -0
  433. package/src/format/contentBounds.ts +76 -0
  434. package/src/format/contentCost.ts +50 -0
  435. package/src/format/contracts.ts +305 -0
  436. package/src/format/cook-data.ts +148 -0
  437. package/src/format/cook-preparation.ts +241 -0
  438. package/src/format/coverAppearance.ts +53 -0
  439. package/src/format/creatures.ts +175 -0
  440. package/src/format/crowdPresentation.ts +87 -0
  441. package/src/format/crowds.ts +46 -0
  442. package/src/format/cueDirector.ts +134 -0
  443. package/src/format/dayCycle.ts +28 -0
  444. package/src/format/dayLook.ts +44 -0
  445. package/src/format/decisionBindings.ts +80 -0
  446. package/src/format/decisionPublication.ts +35 -0
  447. package/src/format/decisionScripts.ts +327 -0
  448. package/src/format/declaredQuestPage.ts +101 -0
  449. package/src/format/deviceMemoryCost.ts +50 -0
  450. package/src/format/director.ts +52 -0
  451. package/src/format/directorProduct.ts +27 -0
  452. package/src/format/directorStages.ts +165 -0
  453. package/src/format/directorWhen.ts +78 -0
  454. package/src/format/discoveryValues.ts +416 -0
  455. package/src/format/easedFields.ts +48 -0
  456. package/src/format/edgeProfiles.ts +40 -0
  457. package/src/format/eliteContinuation.ts +110 -0
  458. package/src/format/eliteEntryRows.ts +351 -0
  459. package/src/format/eliteFeature.ts +605 -0
  460. package/src/format/eliteScripts.ts +60 -0
  461. package/src/format/encounterRows.ts +1030 -0
  462. package/src/format/encounters.ts +65 -0
  463. package/src/format/engine-music.ts +42 -0
  464. package/src/format/entryClearance.ts +86 -0
  465. package/src/format/entryCoverage.ts +61 -0
  466. package/src/format/entryGeometry.ts +56 -0
  467. package/src/format/entryLanding.ts +83 -0
  468. package/src/format/entryReads.ts +45 -0
  469. package/src/format/entrywayAssets.ts +33 -0
  470. package/src/format/entryways.ts +58 -0
  471. package/src/format/exchange.ts +25 -0
  472. package/src/format/explorerCatalogue.ts +312 -0
  473. package/src/format/feature-sides.ts +233 -0
  474. package/src/format/fieldPresentation.ts +62 -0
  475. package/src/format/figures.ts +437 -0
  476. package/src/format/findsCatalogue.ts +67 -0
  477. package/src/format/fixedDraws.ts +24 -0
  478. package/src/format/flyers.ts +226 -0
  479. package/src/format/forestNativeInputs.ts +37 -0
  480. package/src/format/forestPage.ts +285 -0
  481. package/src/format/forestWeather.ts +333 -0
  482. package/src/format/geometryPack.ts +136 -0
  483. package/src/format/glbBuffers.ts +77 -0
  484. package/src/format/glbCost.ts +212 -0
  485. package/src/format/glbImages.ts +95 -0
  486. package/src/format/glbTriangles.ts +95 -0
  487. package/src/format/graphArmsRows.ts +200 -0
  488. package/src/format/grapple.ts +123 -0
  489. package/src/format/grazers.ts +164 -0
  490. package/src/format/grid-catalogue.ts +247 -0
  491. package/src/format/gridReadiness.ts +49 -0
  492. package/src/format/groupBrains.ts +249 -0
  493. package/src/format/heldArms.ts +576 -0
  494. package/src/format/heldEquipment.ts +78 -0
  495. package/src/format/heldFinishes.ts +415 -0
  496. package/src/format/heldGear.ts +68 -0
  497. package/src/format/heldJianDocument.ts +75 -0
  498. package/src/format/heldMelee.ts +866 -0
  499. package/src/format/heldView.ts +26 -0
  500. package/src/format/heldWeaponDocuments.ts +36 -0
  501. package/src/format/herdShelter.ts +58 -0
  502. package/src/format/hooks.ts +45 -0
  503. package/src/format/immutable.ts +59 -0
  504. package/src/format/inputDeclarations.ts +157 -0
  505. package/src/format/islandLibrary.ts +51 -0
  506. package/src/format/items.ts +229 -0
  507. package/src/format/json.ts +143 -0
  508. package/src/format/keyedSky.ts +314 -0
  509. package/src/format/kitFigure.ts +68 -0
  510. package/src/format/ktx2Cost.ts +47 -0
  511. package/src/format/ledger.ts +56 -0
  512. package/src/format/liftApproach.ts +75 -0
  513. package/src/format/liftRider.ts +10 -0
  514. package/src/format/lightEmitters.ts +105 -0
  515. package/src/format/lights.ts +135 -0
  516. package/src/format/limbCollision.ts +136 -0
  517. package/src/format/limbPopulation.ts +33 -0
  518. package/src/format/limbRig.ts +202 -0
  519. package/src/format/loadout.ts +156 -0
  520. package/src/format/look-light.ts +153 -0
  521. package/src/format/lootBag.ts +145 -0
  522. package/src/format/lootEconomy.ts +235 -0
  523. package/src/format/materialFamilies.ts +565 -0
  524. package/src/format/materialGraph.ts +1220 -0
  525. package/src/format/materials.ts +449 -0
  526. package/src/format/memoryAdmission.ts +84 -0
  527. package/src/format/memoryGates.json +7 -0
  528. package/src/format/meshCollision.ts +56 -0
  529. package/src/format/meshCollisionAssets.ts +19 -0
  530. package/src/format/meshCollisionBytes.ts +102 -0
  531. package/src/format/meshEntryways.ts +54 -0
  532. package/src/format/meshopt-decoder.wasm +0 -0
  533. package/src/format/meshopt-module.ts +177 -0
  534. package/src/format/meshopt-static.mjs +11 -0
  535. package/src/format/meshopt-wasm.ts +61 -0
  536. package/src/format/migrations.ts +209 -0
  537. package/src/format/minimap.ts +1052 -0
  538. package/src/format/mixedPopulation.ts +222 -0
  539. package/src/format/modes.ts +304 -0
  540. package/src/format/mountedSpecimenRows.ts +64 -0
  541. package/src/format/moverLifecycle.ts +34 -0
  542. package/src/format/moverMotion.ts +271 -0
  543. package/src/format/movers.ts +224 -0
  544. package/src/format/namedJsonContracts.ts +423 -0
  545. package/src/format/nativeActors.ts +45 -0
  546. package/src/format/nativeAssembly.ts +141 -0
  547. package/src/format/nativeGround.ts +37 -0
  548. package/src/format/nativeGroundAssets.ts +35 -0
  549. package/src/format/nativeItems.ts +184 -0
  550. package/src/format/nativePhysics.ts +140 -0
  551. package/src/format/nativeQuestComposition.ts +398 -0
  552. package/src/format/nativeRiding.ts +103 -0
  553. package/src/format/nativeRuntimePlan.ts +89 -0
  554. package/src/format/navigation.ts +99 -0
  555. package/src/format/navigationBytes.ts +111 -0
  556. package/src/format/nearPlaceholder.ts +111 -0
  557. package/src/format/nearPlaceholderAssets.ts +23 -0
  558. package/src/format/netCommand.ts +11 -0
  559. package/src/format/npcs.ts +546 -0
  560. package/src/format/outputAddress.ts +11 -0
  561. package/src/format/outputDownload.ts +34 -0
  562. package/src/format/outputFields.ts +123 -0
  563. package/src/format/outputIndex.ts +352 -0
  564. package/src/format/overdraw.ts +41 -0
  565. package/src/format/pageLife.ts +303 -0
  566. package/src/format/pagePreparation.ts +60 -0
  567. package/src/format/paintedLook.ts +55 -0
  568. package/src/format/paintedResources.ts +158 -0
  569. package/src/format/panelTemplate.ts +139 -0
  570. package/src/format/placeholderSource.ts +209 -0
  571. package/src/format/platformDataSections.ts +146 -0
  572. package/src/format/platformFileFamilies.ts +299 -0
  573. package/src/format/plumbing.ts +165 -0
  574. package/src/format/populationEnvironment.ts +210 -0
  575. package/src/format/populationKeeper.ts +163 -0
  576. package/src/format/populationProjection.ts +496 -0
  577. package/src/format/populationRespawn.ts +48 -0
  578. package/src/format/populationRoster.ts +158 -0
  579. package/src/format/portalFloor.ts +56 -0
  580. package/src/format/portalLink.ts +112 -0
  581. package/src/format/portalLinkAssets.ts +42 -0
  582. package/src/format/portalRide.ts +22 -0
  583. package/src/format/postGraphDocument.ts +36 -0
  584. package/src/format/postGraphLook.ts +477 -0
  585. package/src/format/postStack.ts +114 -0
  586. package/src/format/practiceCourseRows.ts +466 -0
  587. package/src/format/preflight.ts +155 -0
  588. package/src/format/presentation.ts +33 -0
  589. package/src/format/product-audio.ts +76 -0
  590. package/src/format/product-reads.ts +178 -0
  591. package/src/format/product-stream-admit.ts +100 -0
  592. package/src/format/product-stream-assets.ts +493 -0
  593. package/src/format/product-stream-facts.ts +208 -0
  594. package/src/format/product-stream-miss.ts +12 -0
  595. package/src/format/product-stream-node.ts +47 -0
  596. package/src/format/product-stream-packs.ts +242 -0
  597. package/src/format/product-stream-rows.ts +202 -0
  598. package/src/format/product-stream-tar.ts +192 -0
  599. package/src/format/product-stream.ts +284 -0
  600. package/src/format/product.ts +358 -0
  601. package/src/format/productValidation.ts +205 -0
  602. package/src/format/propMaterials.ts +254 -0
  603. package/src/format/props.ts +137 -0
  604. package/src/format/questContinuation.ts +42 -0
  605. package/src/format/questFigures.ts +227 -0
  606. package/src/format/questGraph.ts +30 -0
  607. package/src/format/questHost.ts +314 -0
  608. package/src/format/questInteractionSource.ts +57 -0
  609. package/src/format/questInteractions.ts +642 -0
  610. package/src/format/questPageComposition.ts +92 -0
  611. package/src/format/questPageFacets.ts +121 -0
  612. package/src/format/questRuntime.ts +118 -0
  613. package/src/format/questSteps.ts +182 -0
  614. package/src/format/questStory.ts +512 -0
  615. package/src/format/questStoryBindings.ts +43 -0
  616. package/src/format/questWorld.ts +36 -0
  617. package/src/format/quests.ts +333 -0
  618. package/src/format/rainPresentation.ts +131 -0
  619. package/src/format/rangedPage.ts +117 -0
  620. package/src/format/receipt-cost.ts +71 -0
  621. package/src/format/registeredJson.ts +530 -0
  622. package/src/format/returnProgramDocument.ts +40 -0
  623. package/src/format/returnProjectionV2.ts +84 -0
  624. package/src/format/riding.ts +377 -0
  625. package/src/format/riggedHulls.ts +160 -0
  626. package/src/format/roamingBossProjection.ts +178 -0
  627. package/src/format/roamingCombat.ts +22 -0
  628. package/src/format/ropeDeckSite.ts +148 -0
  629. package/src/format/rows.ts +86 -0
  630. package/src/format/runtime.ts +38 -0
  631. package/src/format/runtimeBinds.ts +49 -0
  632. package/src/format/runtimeCost.ts +80 -0
  633. package/src/format/runtimeSpawns.ts +73 -0
  634. package/src/format/scalarChannel.ts +38 -0
  635. package/src/format/scaledPost.ts +27 -0
  636. package/src/format/scaledPostContract.ts +51 -0
  637. package/src/format/sceneBuffers.ts +122 -0
  638. package/src/format/sceneDraws.ts +89 -0
  639. package/src/format/sceneDressing.ts +247 -0
  640. package/src/format/sceneInstances.ts +192 -0
  641. package/src/format/sceneMotion.ts +122 -0
  642. package/src/format/sceneRefs.ts +71 -0
  643. package/src/format/sceneSources.ts +730 -0
  644. package/src/format/script-side-grandfather.ts +62 -0
  645. package/src/format/script-sides.ts +289 -0
  646. package/src/format/scriptAbi.ts +14 -0
  647. package/src/format/scriptAbiV1.ts +56 -0
  648. package/src/format/scriptActionsV2.ts +101 -0
  649. package/src/format/scriptAdmission.ts +165 -0
  650. package/src/format/scriptAdmissionV2.ts +126 -0
  651. package/src/format/scriptContract.ts +170 -0
  652. package/src/format/scriptFuelV2.ts +124 -0
  653. package/src/format/scriptGroupBankV2.ts +54 -0
  654. package/src/format/scriptGroupStepV2.ts +165 -0
  655. package/src/format/scriptInputStateV2.ts +52 -0
  656. package/src/format/scriptLimits.ts +5 -0
  657. package/src/format/scriptMemoryV2.ts +17 -0
  658. package/src/format/scriptModuleV2.ts +116 -0
  659. package/src/format/scriptObservationColumnsV2.ts +226 -0
  660. package/src/format/scriptQueriesV2.ts +164 -0
  661. package/src/format/scriptQueryStateV2.ts +40 -0
  662. package/src/format/scriptRngV2.ts +52 -0
  663. package/src/format/scriptWireV2.ts +106 -0
  664. package/src/format/scripts.ts +31 -0
  665. package/src/format/sections.ts +140 -0
  666. package/src/format/shardSchema.ts +632 -0
  667. package/src/format/shardSections.ts +383 -0
  668. package/src/format/sketch.ts +79 -0
  669. package/src/format/skin-materials.ts +172 -0
  670. package/src/format/skinAssets.ts +107 -0
  671. package/src/format/skinData.ts +110 -0
  672. package/src/format/skinLayers.ts +90 -0
  673. package/src/format/skins.ts +37 -0
  674. package/src/format/socketLift.ts +58 -0
  675. package/src/format/socketLiftAssets.ts +81 -0
  676. package/src/format/socketRigCreature.ts +66 -0
  677. package/src/format/sourceResidency.ts +16 -0
  678. package/src/format/spawnCombat.ts +26 -0
  679. package/src/format/spawnScriptV2.ts +145 -0
  680. package/src/format/spawnScripts.ts +229 -0
  681. package/src/format/spawnTables.ts +46 -0
  682. package/src/format/spawnView.ts +26 -0
  683. package/src/format/speciesActorsFile.ts +86 -0
  684. package/src/format/speciesBookRows.ts +84 -0
  685. package/src/format/speciesBrain.ts +96 -0
  686. package/src/format/speciesLooks.ts +1021 -0
  687. package/src/format/speciesPrograms.ts +97 -0
  688. package/src/format/speciesScripts.ts +45 -0
  689. package/src/format/specimenCatalogue.ts +94 -0
  690. package/src/format/splatTerrain.ts +192 -0
  691. package/src/format/standalone-catalogue.ts +144 -0
  692. package/src/format/standaloneControl.ts +44 -0
  693. package/src/format/state.ts +61 -0
  694. package/src/format/stateLineage.ts +71 -0
  695. package/src/format/stealth.ts +106 -0
  696. package/src/format/stillImage.ts +135 -0
  697. package/src/format/streamedCover.ts +105 -0
  698. package/src/format/surfaceLooks.ts +50 -0
  699. package/src/format/tar-fields.ts +54 -0
  700. package/src/format/tar-paths.ts +103 -0
  701. package/src/format/tar-source.ts +13 -0
  702. package/src/format/tar-write.ts +152 -0
  703. package/src/format/tar.ts +203 -0
  704. package/src/format/targets.ts +217 -0
  705. package/src/format/terrain.ts +241 -0
  706. package/src/format/terrainTileBytes.ts +104 -0
  707. package/src/format/tierSelection.ts +195 -0
  708. package/src/format/toonLighting.ts +32 -0
  709. package/src/format/toonLook.ts +332 -0
  710. package/src/format/trail.ts +17 -0
  711. package/src/format/traversal.ts +13 -0
  712. package/src/format/treeSetRows.ts +93 -0
  713. package/src/format/ui.ts +90 -0
  714. package/src/format/uiStrings.ts +17 -0
  715. package/src/format/uniformRows.ts +31 -0
  716. package/src/format/upload-wire.ts +184 -0
  717. package/src/format/validationReceipt.ts +142 -0
  718. package/src/format/version.ts +9 -0
  719. package/src/format/vertexWear.ts +45 -0
  720. package/src/format/viewProgram.ts +329 -0
  721. package/src/format/voicePatches.ts +47 -0
  722. package/src/format/water.ts +247 -0
  723. package/src/format/waterWaves.ts +7 -0
  724. package/src/format/waterWorld.ts +34 -0
  725. package/src/format/weaponProfiles.ts +1315 -0
  726. package/src/format/weatherBundle.ts +36 -0
  727. package/src/format/weatherEffects.ts +78 -0
  728. package/src/format/weatherProgram.ts +422 -0
  729. package/src/format/wildlifePopulation.ts +210 -0
  730. package/src/format/wireLimits.ts +9 -0
  731. package/src/format/worldAssembly.ts +104 -0
  732. package/src/format/worldEntry.ts +151 -0
  733. package/src/format/worldPhysics.ts +292 -0
  734. package/src/format/worldSceneBatch.ts +106 -0
  735. package/src/format/worldSceneModels.ts +79 -0
  736. package/src/format/worldScenePages.ts +89 -0
  737. package/src/format/worldScenePlacement.ts +191 -0
  738. package/src/format/worldSceneSlabs.ts +43 -0
  739. package/src/format/worldSceneSurface.ts +113 -0
  740. package/src/format/worldSceneWeld.ts +702 -0
  741. package/src/format/worldScenes.ts +184 -0
  742. package/src/format/worldTargets.ts +111 -0
  743. package/src/format/worldUpdates.ts +229 -0
  744. package/src/hook/format-hook.d.mts +2 -0
  745. package/src/hook/format-hook.mjs +47 -0
  746. package/README.md +0 -6
@@ -0,0 +1,44 @@
1
+ import * as v from 'valibot';
2
+
3
+ // P1-E5.2 (J59 Q7, E5-REPLICATION §6.3): the control port. `boot`, `pause` and save forwarding exist only in the
4
+ // standalone target, so they travel apart from the game Transport and the game protocol stays identical to the MMO's.
5
+
6
+ const text = v.pipe(v.string(), v.minLength(1), v.maxLength(2048));
7
+ const natural = v.pipe(v.number(), v.finite(), v.integer(), v.minValue(0), v.maxValue(Number.MAX_SAFE_INTEGER));
8
+ const id = natural;
9
+ const lone = v.exactOptional(v.literal(true));
10
+
11
+ /** What the page sends the server worker. */
12
+ export type ShellMessage =
13
+ | { readonly kind: 'boot'; readonly slug: string; readonly base: string; readonly build: string; readonly savePrefix: string; readonly saves: Readonly<Record<string, string>>;
14
+ /** A one-shard page: the server runs this cell alone, with its own walls and no road, whether or not the grid places it. */
15
+ readonly lone?: true }
16
+ | { readonly kind: 'ready' } | { readonly kind: 'pause' } | { readonly kind: 'resume' }
17
+ | { readonly kind: 'save'; readonly id: number } | { readonly kind: 'probe'; readonly id: number }
18
+ | { readonly kind: 'written'; readonly seq: number; readonly ok: boolean };
19
+ /** The server's exact state of one creature at a frame tick. */
20
+ export interface ProbedRow { readonly id: string; readonly x: number; readonly y: number; readonly z: number; readonly yaw: number; readonly hp: number }
21
+ /** What the server worker sends the page. */
22
+ export type ServerMessage =
23
+ | { readonly kind: 'booted'; readonly tick: number; readonly restored: boolean }
24
+ | { readonly kind: 'write'; readonly seq: number; readonly key: string; readonly value: string | null }
25
+ | { readonly kind: 'saved'; readonly id: number; readonly tick: number; readonly ok: boolean }
26
+ | { readonly kind: 'probed'; readonly id: number; readonly tick: number; readonly tickMs: number; readonly rows: readonly ProbedRow[] }
27
+ | { readonly kind: 'failed'; readonly reason: string };
28
+
29
+ /** The page's messages, checked on arrival in the worker. */
30
+ export const ShellMessageSchema: v.GenericSchema<ShellMessage> = v.variant('kind', [
31
+ v.strictObject({ kind: v.literal('boot'), slug: text, base: text, build: v.string(), savePrefix: text, saves: v.record(v.string(), v.string()), lone }),
32
+ v.strictObject({ kind: v.literal('ready') }), v.strictObject({ kind: v.literal('pause') }), v.strictObject({ kind: v.literal('resume') }),
33
+ v.strictObject({ kind: v.literal('save'), id }), v.strictObject({ kind: v.literal('probe'), id }),
34
+ v.strictObject({ kind: v.literal('written'), seq: natural, ok: v.boolean() }),
35
+ ]);
36
+ const finite = v.pipe(v.number(), v.finite());
37
+ /** The worker's messages, checked on arrival in the page. */
38
+ export const ServerMessageSchema: v.GenericSchema<ServerMessage> = v.variant('kind', [
39
+ v.strictObject({ kind: v.literal('booted'), tick: natural, restored: v.boolean() }),
40
+ v.strictObject({ kind: v.literal('write'), seq: natural, key: text, value: v.nullable(v.string()) }),
41
+ v.strictObject({ kind: v.literal('saved'), id, tick: natural, ok: v.boolean() }),
42
+ v.strictObject({ kind: v.literal('probed'), id, tick: natural, tickMs: finite, rows: v.array(v.strictObject({ id: text, x: finite, y: finite, z: finite, yaw: finite, hp: finite })) }),
43
+ v.strictObject({ kind: v.literal('failed'), reason: v.string() }),
44
+ ]);
@@ -0,0 +1,61 @@
1
+ import * as v from 'valibot';
2
+ import { SHARDFILE_ADMISSION_LIMITS as limits } from './admissionLimits.ts';
3
+
4
+ const positive = v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(Number.MAX_SAFE_INTEGER));
5
+ const finite: v.GenericSchema<number, number> & { readonly pipe: readonly [unknown, v.FiniteAction<number, undefined>] } = v.pipe(v.number(), v.finite());
6
+ const field: v.StrictObjectSchema<{ readonly id: v.GenericSchema<StateFieldRowsInput['id'], StateFieldRows['id']>; readonly name: v.GenericSchema<string, string> & { readonly pipe: readonly [unknown, v.RegexAction<string, undefined>, unknown] }; readonly type: v.GenericSchema<StateFieldRowsInput['type'], StateFieldRows['type']>; readonly privacy: v.GenericSchema<StateFieldRowsInput['privacy'], StateFieldRows['privacy']>; readonly default: v.GenericSchema<StateFieldRowsInput['default'], StateFieldRows['default']> & { readonly options: readonly [unknown, typeof finite, unknown] }; readonly min: v.OptionalSchema<v.GenericSchema<Exclude<StateFieldRowsInput['min'], undefined>, Exclude<StateFieldRows['min'], undefined>>, undefined>; readonly max: v.OptionalSchema<v.GenericSchema<Exclude<StateFieldRowsInput['max'], undefined>, Exclude<StateFieldRows['max'], undefined>>, undefined>; }, undefined> = v.strictObject({ id: v.pipe(positive, v.maxValue(0x7fffffff)), name: v.pipe(v.string(), v.regex(/^[a-z][a-z0-9.-]*$/u), v.maxLength(limits.idCharacters)),
7
+ type: v.picklist(['bool', 'i32', 'f64', 'string']), privacy: v.picklist(['public', 'owner', 'host']),
8
+ default: v.union([v.boolean(), finite, v.pipe(v.string(), v.maxLength(limits.textCharacters))]), min: v.optional(finite), max: v.optional(finite) });
9
+ const fieldList: v.GenericSchema<StateInput['shared'], State['shared']> & { readonly pipe: readonly [v.ArraySchema<typeof field, undefined>, unknown] } = v.pipe(v.array(field), v.maxLength(limits.stateFields));
10
+ const declaration: v.StrictObjectSchema<{ readonly version: v.GenericSchema<StateInput['version'], State['version']>; readonly sharedOwner: v.GenericSchema<StateInput['sharedOwner'], State['sharedOwner']>; readonly playerKey: v.GenericSchema<StateInput['playerKey'], State['playerKey']>; readonly shared: typeof fieldList; readonly player: typeof fieldList; }, undefined> = v.strictObject({ version: positive, sharedOwner: v.literal('host'), playerKey: v.literal('actorId'), shared: fieldList, player: fieldList });
11
+
12
+ /** Portable state declarations have the same typed defaults, bounds, identity and capacity rules as current full-format admission. */
13
+ export function stateRules(state: State): string[] {
14
+ const errors: string[] = [], fields = [...state.shared, ...state.player];
15
+ for (const list of [state.shared, state.player]) {
16
+ if (new Set(list.map((item) => item.name)).size !== list.length) errors.push('unique state fields');
17
+ for (const item of list) if (item.type === 'bool' ? typeof item.default !== 'boolean' : item.type === 'string' ? typeof item.default !== 'string'
18
+ : typeof item.default !== 'number' || (item.type === 'i32' && (!Number.isInteger(item.default) || item.default < -2147483648 || item.default > 2147483647))) errors.push('typed state default');
19
+ }
20
+ if (new Set(fields.map((item) => item.id)).size !== fields.length) errors.push('unique stable state ids');
21
+ if (fields.filter((item) => item.type !== 'string').length > 24) errors.push('numeric script state capacity');
22
+ for (const item of fields) {
23
+ if (item.type === 'string') { if (item.min !== undefined || item.max !== undefined) errors.push('numeric state bounds only'); continue; }
24
+ const low = item.type === 'bool' ? 0 : item.type === 'i32' ? -2147483648 : -Number.MAX_VALUE;
25
+ const high = item.type === 'bool' ? 1 : item.type === 'i32' ? 2147483647 : Number.MAX_VALUE;
26
+ const min = item.min ?? low, max = item.max ?? high, value = typeof item.default === 'boolean' ? Number(item.default) : item.default;
27
+ if (min < low || max > high || min > max || (item.type !== 'f64' && (!Number.isInteger(min) || !Number.isInteger(max))) || typeof value !== 'number' || value < min || value > max) errors.push('typed state bounds');
28
+ }
29
+ return [...new Set(errors)];
30
+ }
31
+ /** Strict renderer-neutral state projection; validating it never admits a cached product's geometry or scripts. */
32
+ export const StateSchema: v.SchemaWithPipe<readonly [typeof declaration, v.CheckAction<State, 'state declaration semantic rules'>]> = v.pipe(declaration, v.check((state) => stateRules(state).length === 0, 'state declaration semantic rules'));
33
+
34
+ /** Admitted data contracts, independent of validator implementation metadata. */
35
+ export type StateFieldRowsInput = StateFieldRows;
36
+ interface StateFieldRowsFields {
37
+ id: number;
38
+ name: string;
39
+ type: 'bool' | 'i32' | 'f64' | 'string';
40
+ privacy: 'public' | 'owner' | 'host';
41
+ default: (boolean) | (number) | (string);
42
+ min?: number | undefined;
43
+ max?: number | undefined;
44
+ }
45
+ export type StateFieldRows = { [Key in keyof StateFieldRowsFields]: StateFieldRowsFields[Key] };
46
+ interface StateInputFields {
47
+ version: number;
48
+ sharedOwner: 'host';
49
+ playerKey: 'actorId';
50
+ shared: (StateFieldRowsInput)[];
51
+ player: (StateFieldRowsInput)[];
52
+ }
53
+ export type StateInput = { [Key in keyof StateInputFields]: StateInputFields[Key] };
54
+ interface StateFields {
55
+ version: number;
56
+ sharedOwner: 'host';
57
+ playerKey: 'actorId';
58
+ shared: (StateFieldRows)[];
59
+ player: (StateFieldRows)[];
60
+ }
61
+ export type State = { [Key in keyof StateFields]: StateFields[Key] };
@@ -0,0 +1,71 @@
1
+ import * as v from 'valibot';
2
+ import { assertMigrationCompatibility } from './migrations.ts';
3
+ import { StateSchema } from './state.ts';
4
+ import type { Shardfile } from './shardSchema.ts';
5
+ import { isJsonDataWithFileSchemas } from './json.ts';
6
+ import { SHARDFILE_VERSION } from './version.ts';
7
+ import { SHARDFILE_ADMISSION_LIMITS as limits } from './admissionLimits.ts';
8
+
9
+ const identity = v.object({ slug: v.pipe(v.string(), v.regex(/^[a-z][a-z0-9.-]*$/u)),
10
+ revision: v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(Number.MAX_SAFE_INTEGER)) });
11
+ const lineage: v.GenericSchema<StateLineageInput, StateLineage> = v.object({ identity, state: StateSchema });
12
+
13
+ /** Read only strict portable state and identity from a previously visited product. Its legacy geometry and scripts remain unadmitted. */
14
+ export function parseStateLineage(input: unknown): StateLineage { return v.parse(lineage, input); }
15
+
16
+ const path = v.pipe(v.string(), v.maxLength(240), v.regex(/^(?:[a-zA-Z0-9_-][a-zA-Z0-9_.-]*\/)*[a-zA-Z0-9_-][a-zA-Z0-9_.-]*$/u));
17
+ const measured = { path, hash: v.pipe(v.string(), v.regex(/^[a-f0-9]{64}$/u)),
18
+ bytes: v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(Number.MAX_SAFE_INTEGER)) };
19
+ const inventory = v.object({ format: v.literal('wildshard.shardfile'), formatVersion: v.literal(2), sdk: v.literal('0.2'),
20
+ version: v.literal(SHARDFILE_VERSION), identity,
21
+ sections: v.pipe(v.array(v.strictObject({ ...measured, name: v.pipe(v.string(), v.regex(/^[a-z][a-zA-Z0-9-]*\/[a-zA-Z][a-zA-Z0-9_-]*$/u)),
22
+ schema: v.pipe(v.string(), v.maxLength(240)) })), v.maxLength(256)),
23
+ schemas: v.pipe(v.array(v.strictObject(measured)), v.maxLength(128)) });
24
+ export interface OutputLineageIndex {
25
+ readonly identity: { readonly slug: string; readonly revision: number };
26
+ readonly sections: readonly { readonly path: string; readonly hash: string; readonly bytes: number; readonly name: string; readonly schema: string }[];
27
+ readonly schemas: readonly { readonly path: string; readonly hash: string; readonly bytes: number }[];
28
+ }
29
+ /** Cached historical inventory proves only bounded, immutable section transport.
30
+ * Obsolete host/asset declarations are never parsed or admitted by this reader. */
31
+ export function parseOutputLineageIndex(input: unknown): OutputLineageIndex {
32
+ if (!isJsonDataWithFileSchemas(input)) throw new Error('Shardfile descriptor requires bounded plain JSON');
33
+ const index = v.parse(inventory, input), paths = new Set(['shard.json', 'validation.json']), names = new Set<string>();
34
+ if (index.sections.reduce((total, row) => total + row.bytes, 0) > limits.sourceBytes) throw new Error('Output sections exceed the source byte cap');
35
+ for (const row of [...index.sections, ...index.schemas]) {
36
+ if (row.path.split('/').some(part => part === '.' || part === '..') || paths.has(row.path)) throw new Error('Duplicate or escaping output path');
37
+ paths.add(row.path);
38
+ }
39
+ for (const row of index.sections) {
40
+ if (names.has(row.name) || row.path !== `sections/${row.name}.json`) throw new Error('Duplicate or mismatched section path');
41
+ names.add(row.name);
42
+ }
43
+ if (!index.sections.some(row => row.name === 'state/state' && row.schema === 'wildshard:state/state@1')) throw new Error('Missing historical state section');
44
+ return index;
45
+ }
46
+
47
+ /** Preserve saved field identities across validated author revisions; declaration ordering is immaterial. */
48
+ export function assertStateCompatibility(previous: StateLineage, next: Shardfile): void {
49
+ v.parse(v.literal(previous.identity.slug, 'State revisions must name the same shard'), next.identity.slug);
50
+ if (next.identity.revision < previous.identity.revision) throw new Error('State revisions cannot move backwards');
51
+ assertMigrationCompatibility(previous.state, next.state, next.migrations);
52
+ }
53
+
54
+
55
+ /** Admitted data contracts, independent of validator implementation metadata. */
56
+ interface StateLineageInputFields {
57
+ identity: {
58
+ slug: string;
59
+ revision: number;
60
+ };
61
+ state: v.InferInput<typeof StateSchema>;
62
+ }
63
+ export type StateLineageInput = { [Key in keyof StateLineageInputFields]: StateLineageInputFields[Key] };
64
+ interface StateLineageFields {
65
+ identity: {
66
+ slug: string;
67
+ revision: number;
68
+ };
69
+ state: v.InferOutput<typeof StateSchema>;
70
+ }
71
+ export type StateLineage = { [Key in keyof StateLineageFields]: StateLineageFields[Key] };
@@ -0,0 +1,106 @@
1
+ import * as v from 'valibot';
2
+
3
+ const id=v.pipe(v.string(),v.minLength(1),v.maxLength(128)),text=v.pipe(v.string(),v.maxLength(4096)),n=v.pipe(v.number(),v.finite());
4
+ /** Bounded static baseline-HUD markup; detection decisions are admitted separately as ABI-v1 programs. */
5
+ interface Frame {tag?:'div'|'span'|'b'|'i';cls?:string;ref?:string;text?:string;data?:Record<string,string>;children?:Frame[]}
6
+ interface Icon {svg:'svg'|'path'|'circle'|'g'|'rect'|'line'|'polyline'|'polygon'|'ellipse';attrs?:[string,string][];children?:Icon[]}
7
+ const frame:v.GenericSchema<unknown,Frame>=v.lazy(()=>v.strictObject({tag:v.exactOptional(v.picklist(['div','span','b','i'])),cls:v.exactOptional(text),ref:v.exactOptional(id),text:v.exactOptional(text),data:v.exactOptional(v.record(id,text)),children:v.exactOptional(v.pipe(v.array(frame),v.maxLength(32)))}));
8
+ const icon:v.GenericSchema<unknown,Icon>=v.lazy(()=>v.strictObject({svg:v.picklist(['svg','path','circle','g','rect','line','polyline','polygon','ellipse']),attrs:v.exactOptional(v.pipe(v.array(v.tuple([text,text])),v.maxLength(32))),children:v.exactOptional(v.pipe(v.array(icon),v.maxLength(32)))}));
9
+ /** Ordered native roster observations; sensing and detection keep their original owners. */
10
+ export const StealthSourcesSchema: v.GenericSchema<StealthSourcesInput, StealthSources>=v.strictObject({
11
+ take:v.pipe(n,v.integer(),v.minValue(1),v.maxValue(8)),
12
+ sources:v.pipe(v.array(v.variant('kind',[
13
+ v.strictObject({kind:v.literal('packs'),groups:v.pipe(n,v.integer(),v.minValue(1),v.maxValue(96)),members:v.pipe(n,v.integer(),v.minValue(1),v.maxValue(96)),alert:n,hunting:v.pipe(v.array(v.picklist(['roam','shadow','encircle','regroup','break'])),v.maxLength(5))}),
14
+ v.strictObject({kind:v.literal('herds'),groups:v.pipe(n,v.integer(),v.minValue(1),v.maxValue(96)),members:v.pipe(n,v.integer(),v.minValue(1),v.maxValue(96)),alert:n,exclude:v.pipe(v.array(v.picklist(['ridden','owned'])),v.maxLength(2))}),
15
+ ])),v.minLength(1),v.maxLength(8)),
16
+ melee:v.exactOptional(id),
17
+ });
18
+
19
+ /** G478 stealth-and-detection rows, shared by independent shard profiles. Client markup is presentation only. */
20
+ export const StealthRowsSchema: v.GenericSchema<StealthRowsInput, StealthRows>=v.strictObject({observations:v.exactOptional(StealthSourcesSchema),program:v.unknown(),tuning:v.pipe(v.record(id,n),v.check(rows=>Object.keys(rows).length<=64)),
21
+ states:v.pipe(v.array(id),v.minLength(1),v.maxLength(16)),labels:v.record(id,text),panels:v.strictObject({layer:frame,row:frame,grass:frame}),icons:v.record(id,icon),
22
+ disc:text,discLabel:text,threatStates:v.pipe(v.array(id),v.maxLength(16)),hint:text,hintSeconds:v.pipe(n,v.minValue(0),v.maxValue(60)),system:id,
23
+ input:v.strictObject({id,actions:v.pipe(v.array(v.picklist(['crouch','crouch.hold'])),v.maxLength(2)),keys:v.record(v.picklist(['crouch','crouch.hold']),v.pipe(v.array(id),v.maxLength(16)))}),
24
+ sneak:v.strictObject({state:id,seconds:v.pipe(n,v.minValue(0),v.maxValue(60)),multiplier:v.pipe(n,v.minValue(0),v.maxValue(100))})});
25
+
26
+
27
+ /** Admitted data contracts, independent of validator implementation metadata. */
28
+ export type StealthSourcesInput = StealthSources;
29
+ interface StealthSourcesFields {
30
+ take: number;
31
+ sources: (({
32
+ kind: 'packs';
33
+ groups: number;
34
+ members: number;
35
+ alert: number;
36
+ hunting: ('roam' | 'shadow' | 'encircle' | 'regroup' | 'break')[];
37
+ }) | ({
38
+ kind: 'herds';
39
+ groups: number;
40
+ members: number;
41
+ alert: number;
42
+ exclude: ('ridden' | 'owned')[];
43
+ }))[];
44
+ melee?: string;
45
+ }
46
+ export type StealthSources = { [Key in keyof StealthSourcesFields]: StealthSourcesFields[Key] };
47
+ interface StealthRowsInputFields {
48
+ observations?: StealthSourcesInput;
49
+ program: unknown;
50
+ tuning: Record<string, number>;
51
+ states: (string)[];
52
+ labels: Record<string, string>;
53
+ panels: {
54
+ layer: v.InferInput<typeof frame>;
55
+ row: v.InferInput<typeof frame>;
56
+ grass: v.InferInput<typeof frame>;
57
+ };
58
+ icons: Record<string, v.InferInput<typeof icon>>;
59
+ disc: string;
60
+ discLabel: string;
61
+ threatStates: (string)[];
62
+ hint: string;
63
+ hintSeconds: number;
64
+ system: string;
65
+ input: {
66
+ id: string;
67
+ actions: ('crouch' | 'crouch.hold')[];
68
+ keys: Record<string, (string)[]>;
69
+ };
70
+ sneak: {
71
+ state: string;
72
+ seconds: number;
73
+ multiplier: number;
74
+ };
75
+ }
76
+ export type StealthRowsInput = { [Key in keyof StealthRowsInputFields]: StealthRowsInputFields[Key] };
77
+ interface StealthRowsFields {
78
+ observations?: StealthSources;
79
+ program: unknown;
80
+ tuning: Record<string, number>;
81
+ states: (string)[];
82
+ labels: Record<string, string>;
83
+ panels: {
84
+ layer: v.InferOutput<typeof frame>;
85
+ row: v.InferOutput<typeof frame>;
86
+ grass: v.InferOutput<typeof frame>;
87
+ };
88
+ icons: Record<string, v.InferOutput<typeof icon>>;
89
+ disc: string;
90
+ discLabel: string;
91
+ threatStates: (string)[];
92
+ hint: string;
93
+ hintSeconds: number;
94
+ system: string;
95
+ input: {
96
+ id: string;
97
+ actions: ('crouch' | 'crouch.hold')[];
98
+ keys: Record<string, (string)[]>;
99
+ };
100
+ sneak: {
101
+ state: string;
102
+ seconds: number;
103
+ multiplier: number;
104
+ };
105
+ }
106
+ export type StealthRows = { [Key in keyof StealthRowsFields]: StealthRowsFields[Key] };
@@ -0,0 +1,135 @@
1
+ /** Bounded inert SHARD SELECT images. These limits apply before a browser decoder sees any bytes. */
2
+ export const STILL_IMAGE_LIMITS = { bytes: 4_194_304, dimension: 4096, chunks: 1024 } as const;
3
+ /** Texture strips may be wide, but never exceed a title image's pixel area or wire cap. */
4
+ export const IMAGE_ASSET_LIMITS: { readonly dimension: 8192; readonly pixels: number; readonly bytes: 4194304; readonly chunks: 1024; } = { ...STILL_IMAGE_LIMITS, dimension: 8192, pixels: STILL_IMAGE_LIMITS.dimension ** 2 } as const;
5
+ /** Byte-derived image envelope and conservative CPU/data-URL and compositor residency. */
6
+ export interface StillImage { mime: 'image/png' | 'image/jpeg' | 'image/webp'; width: number; height: number; decoded: number; gpu: number }
7
+ const crcTable = Uint32Array.from({ length: 256 }, (_unused, value) => {
8
+ let result = value;
9
+ for (let bit = 0; bit < 8; bit++) result = (result >>> 1) ^ ((result & 1) === 0 ? 0 : 0xedb88320);
10
+ return result;
11
+ });
12
+ function crc(view: DataView, start: number, end: number): number {
13
+ let value = 0xffffffff;
14
+ for (let at = start; at < end; at++) value = (value >>> 8) ^ (crcTable[(value ^ view.getUint8(at)) & 255] ?? 0);
15
+ return (value ^ 0xffffffff) >>> 0;
16
+ }
17
+
18
+ function envelope(bytes: Uint8Array, mime: StillImage['mime'], width: number, height: number): StillImage {
19
+ if (!Number.isInteger(width) || !Number.isInteger(height) || width < 1 || height < 1 || width > IMAGE_ASSET_LIMITS.dimension || height > IMAGE_ASSET_LIMITS.dimension || width * height > IMAGE_ASSET_LIMITS.pixels) throw new Error('Still image dimensions exceed admission bounds');
20
+ const pixels = width * height * 4;
21
+ // Include the immutable wire bytes and the UTF-16 base64 URL, rounded conservatively to four times wire.
22
+ return { mime, width, height, decoded: pixels + bytes.length * 4, gpu: pixels };
23
+ }
24
+
25
+ function png(bytes: Uint8Array, view: DataView): StillImage {
26
+ let offset = 8, width = 0, height = 0, chunks = 0, data = false, endedData = false;
27
+ while (offset + 12 <= bytes.length && ++chunks <= STILL_IMAGE_LIMITS.chunks) {
28
+ const length = view.getUint32(offset), type = view.getUint32(offset + 4), end = offset + 12 + length;
29
+ if (end > bytes.length) throw new Error('Truncated PNG chunk');
30
+ if (chunks === 1) {
31
+ if (type !== 0x49484452 || length !== 13) throw new Error('PNG requires one leading IHDR');
32
+ width = view.getUint32(offset + 8); height = view.getUint32(offset + 12);
33
+ envelope(bytes, 'image/png', width, height);
34
+ const colour = view.getUint8(offset + 17), depth = view.getUint8(offset + 16);
35
+ if (![0, 2, 3, 4, 6].includes(colour) || ![1, 2, 4, 8].includes(depth) || (colour !== 0 && colour !== 3 && depth !== 8)
36
+ || view.getUint8(offset + 18) !== 0 || view.getUint8(offset + 19) !== 0 || view.getUint8(offset + 20) > 1) throw new Error('Unsupported PNG encoding');
37
+ } else if (type === 0x49484452) throw new Error('Duplicate PNG dimensions');
38
+ if (type === 0x6163544c || type === 0x6663544c || type === 0x66644154) throw new Error('Animated PNG is not a still image');
39
+ // Compressed metadata can expand independently of the admitted pixel envelope.
40
+ if ([0x69434350, 0x7a545874, 0x69545874].includes(type)) throw new Error('Compressed PNG metadata is not admitted');
41
+ if ((view.getUint8(offset + 4) & 32) === 0 && ![0x49484452, 0x504c5445, 0x49444154, 0x49454e44].includes(type)) throw new Error('Unknown critical PNG chunk');
42
+ if (crc(view, offset + 4, end - 4) !== view.getUint32(end - 4)) throw new Error('PNG chunk checksum differs');
43
+ if (type === 0x49444154) { if (endedData) throw new Error('Noncontiguous PNG image data'); data = true; }
44
+ else if (data) endedData = true;
45
+ if (type === 0x49454e44) {
46
+ if (length !== 0 || !data || end !== bytes.length) throw new Error('Invalid PNG end');
47
+ return envelope(bytes, 'image/png', width, height);
48
+ }
49
+ offset = end;
50
+ }
51
+ throw new Error('PNG has no bounded complete image');
52
+ }
53
+
54
+ function jpeg(bytes: Uint8Array, view: DataView): StillImage {
55
+ let offset = 2, width = 0, height = 0, scans = 0, markers = 0;
56
+ while (offset < bytes.length && ++markers <= STILL_IMAGE_LIMITS.chunks) {
57
+ if (view.getUint8(offset++) !== 0xff) throw new Error('Invalid JPEG marker');
58
+ while (offset < bytes.length && view.getUint8(offset) === 0xff) offset++;
59
+ const marker = view.getUint8(offset++);
60
+ if (marker === 0xd9) {
61
+ if (offset !== bytes.length || scans === 0) throw new Error('Invalid JPEG end');
62
+ return envelope(bytes, 'image/jpeg', width, height);
63
+ }
64
+ if (marker === 0xd8 || marker === 0 || marker === 1 || marker >= 0xd0 && marker <= 0xd7) throw new Error('Unexpected JPEG marker');
65
+ const length = view.getUint16(offset), end = offset + length;
66
+ if (length < 2 || end > bytes.length) throw new Error('Truncated JPEG segment');
67
+ if (marker >= 0xc0 && marker <= 0xcf && ![0xc4, 0xc8, 0xcc].includes(marker)) {
68
+ if (![0xc0, 0xc1, 0xc2].includes(marker) || width !== 0 || length < 8 || view.getUint8(offset + 2) !== 8) throw new Error('Unsupported JPEG frame');
69
+ height = view.getUint16(offset + 3); width = view.getUint16(offset + 5);
70
+ const components = view.getUint8(offset + 7);
71
+ if (![1, 3, 4].includes(components) || length !== 8 + components * 3) throw new Error('Invalid JPEG components');
72
+ }
73
+ offset = end;
74
+ if (marker === 0xda) {
75
+ if (width === 0) throw new Error('JPEG scan precedes its frame');
76
+ scans++;
77
+ // Entropy bytes may stuff FF00 or contain restart markers. Other markers end this scan.
78
+ while (offset + 1 < bytes.length) {
79
+ if (view.getUint8(offset) !== 0xff) { offset++; continue; }
80
+ const next = view.getUint8(offset + 1);
81
+ if (next === 0 || next >= 0xd0 && next <= 0xd7) offset += 2; else break;
82
+ }
83
+ }
84
+ }
85
+ throw new Error('JPEG has no bounded complete image');
86
+ }
87
+
88
+ function webp(bytes: Uint8Array, view: DataView): StillImage {
89
+ if (view.getUint32(4, true) + 8 !== bytes.length) throw new Error('Invalid WebP RIFF length');
90
+ let offset = 12, width = 0, height = 0, chunks = 0, images = 0, extended = false;
91
+ const u24 = (at: number): number => view.getUint8(at) + view.getUint8(at + 1) * 256 + view.getUint8(at + 2) * 65536;
92
+ while (offset + 8 <= bytes.length && ++chunks <= STILL_IMAGE_LIMITS.chunks) {
93
+ const type = view.getUint32(offset), length = view.getUint32(offset + 4, true), at = offset + 8, end = at + length;
94
+ if (end > bytes.length) throw new Error('Truncated WebP chunk');
95
+ if (type === 0x414e494d || type === 0x414e4d46) throw new Error('Animated WebP is not a still image');
96
+ if (type === 0x56503858) {
97
+ if (chunks !== 1 || length !== 10 || (view.getUint8(at) & 0xc3) !== 0 || view.getUint8(at + 1) + view.getUint8(at + 2) + view.getUint8(at + 3) !== 0) throw new Error('Invalid or animated WebP extension');
98
+ width = u24(at + 4) + 1; height = u24(at + 7) + 1; extended = true;
99
+ }
100
+ if (type === 0x56503820 || type === 0x5650384c) {
101
+ if (++images !== 1) throw new Error('Multiple WebP images');
102
+ let w: number, h: number;
103
+ if (type === 0x56503820) {
104
+ if (length < 10 || (view.getUint8(at) & 1) !== 0 || view.getUint8(at + 3) !== 0x9d || view.getUint8(at + 4) !== 1 || view.getUint8(at + 5) !== 0x2a) throw new Error('Invalid WebP key frame');
105
+ w = view.getUint16(at + 6, true) & 0x3fff; h = view.getUint16(at + 8, true) & 0x3fff;
106
+ } else {
107
+ if (length < 5 || view.getUint8(at) !== 0x2f || (view.getUint8(at + 4) & 0xe0) !== 0) throw new Error('Invalid lossless WebP frame');
108
+ const bits = view.getUint32(at + 1, true); w = (bits & 0x3fff) + 1; h = ((bits >>> 14) & 0x3fff) + 1;
109
+ }
110
+ if (extended && (width !== w || height !== h)) throw new Error('WebP canvas differs from its image');
111
+ width = w; height = h;
112
+ }
113
+ offset = end + (length % 2);
114
+ }
115
+ if (offset !== bytes.length || images !== 1) throw new Error('WebP has no bounded complete image');
116
+ return envelope(bytes, 'image/webp', width, height);
117
+ }
118
+
119
+ /** Admit image blobs, including wide texture strips: at most 8192 per dimension,
120
+ * 4096² pixels and 4 MiB wire. PNG/JPEG/WebP header and animation rules stay shared. */
121
+ export function parseImageAsset(bytes: Uint8Array): StillImage {
122
+ if (bytes.length < 12 || bytes.length > STILL_IMAGE_LIMITS.bytes) throw new Error('Still image wire exceeds admission bounds');
123
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
124
+ if (view.getUint32(0) === 0x89504e47 && view.getUint32(4) === 0x0d0a1a0a) return png(bytes, view);
125
+ if (view.getUint16(0) === 0xffd8) return jpeg(bytes, view);
126
+ if (view.getUint32(0) === 0x52494646 && view.getUint32(8) === 0x57454250) return webp(bytes, view);
127
+ throw new Error('Only bounded PNG, JPEG and WebP still images are admitted');
128
+ }
129
+
130
+ /** Title images keep the stricter 4096-per-dimension cap before browser decoding. */
131
+ export function parseStillImage(bytes: Uint8Array): StillImage {
132
+ const image = parseImageAsset(bytes);
133
+ if (image.width > STILL_IMAGE_LIMITS.dimension || image.height > STILL_IMAGE_LIMITS.dimension) throw new Error('Still image dimensions exceed admission bounds');
134
+ return image;
135
+ }
@@ -0,0 +1,105 @@
1
+ import * as v from 'valibot';
2
+ import { isJsonData } from './json.ts';
3
+
4
+ const finite = v.pipe(v.number(), v.finite(), v.minValue(0), v.maxValue(1e7));
5
+ const positive = v.pipe(finite, v.minValue(0.0001));
6
+ const id = v.pipe(v.string(), v.minLength(1), v.maxLength(256));
7
+ const span = v.pipe(v.tuple([finite, positive]), v.check(([lo, hi]) => lo < hi));
8
+ const tier = v.strictObject({ phone: positive, desktop: positive });
9
+ const cap = v.pipe(finite, v.integer(), v.minValue(1), v.maxValue(1e6));
10
+ /** Client-only cover streams. Density/placement is baked in version-1 cells; rows set capacity,
11
+ * reach/fade bands, far stand-ins, slope response, graph ids and upload budgets. Geometry keys
12
+ * resolve in the platform's SceneHandles, never in a shard callback or subclass. */
13
+ export const StreamedCoverSchema: v.GenericSchema<StreamedCoverRowInput, StreamedCoverRow> = v.pipe(v.unknown(), v.check(isJsonData, 'Cover requires plain JSON'),
14
+ v.object({ cell: v.pipe(positive, v.integer()), refill: positive, cacheMin: cap, growShare: v.pipe(positive, v.maxValue(1)),
15
+ farRefill: positive, farSlack: positive, farIn: positive, eyeSlack: finite, uploadBytes: cap, nearLag: positive,
16
+ look: id, meshPrefix: id, lighting: id, params: v.strictObject({ reach: id, lodReach: id, mode: id, keep: id, viewer: id, slope: id, growIn: id }), reachK: tier, capK: tier, farBudgetMs: tier,
17
+ slopeReach: v.pipe(v.strictObject({ up: v.pipe(positive, v.minValue(1)), lo: finite, hi: positive, fadeFrom: finite, fadeTo: positive }),
18
+ v.check(row => row.lo < row.hi && row.fadeFrom < row.fadeTo)),
19
+ kinds: v.pipe(v.array(v.strictObject({ name: id, geometry: id, cap, reach: span, scale: span,
20
+ far: v.exactOptional(v.strictObject({ geometry: id, reach: span, cap, keep: v.pipe(positive, v.maxValue(1)) })) })),
21
+ v.minLength(1), v.maxLength(32), v.check(rows => new Set(rows.map(row => row.name)).size === rows.length)),
22
+ }), v.check(row => row.nearLag < row.refill && row.kinds.every(kind => (Math.max(kind.cap, (kind.far?.cap ?? 0) * (kind.far?.keep ?? 1))) * Math.max(row.capK.phone, row.capK.desktop) <= 1e6)));
23
+
24
+ export function parseStreamedCover(input: unknown): StreamedCoverRow { return v.parse(StreamedCoverSchema, input); }
25
+
26
+ /** The original placed log companion and cover root metadata, validated as one named blob. */
27
+ const text = v.pipe(v.string(), v.maxLength(512));
28
+ export const CoverCompositionSchema: v.GenericSchema<CoverCompositionRowsInput, CoverCompositionRows> = v.strictObject({ name: text, placement: text, mesh: text, userData: v.record(text, v.boolean()) });
29
+
30
+ /** Admitted data contracts, independent of validator implementation metadata. */
31
+ export type StreamedCoverRowInput = unknown;
32
+ interface StreamedCoverRowFields {
33
+ cell: number;
34
+ refill: number;
35
+ cacheMin: number;
36
+ growShare: number;
37
+ farRefill: number;
38
+ farSlack: number;
39
+ farIn: number;
40
+ eyeSlack: number;
41
+ uploadBytes: number;
42
+ nearLag: number;
43
+ look: string;
44
+ meshPrefix: string;
45
+ lighting: string;
46
+ params: {
47
+ reach: string;
48
+ lodReach: string;
49
+ mode: string;
50
+ keep: string;
51
+ viewer: string;
52
+ slope: string;
53
+ growIn: string;
54
+ };
55
+ reachK: {
56
+ phone: number;
57
+ desktop: number;
58
+ };
59
+ capK: {
60
+ phone: number;
61
+ desktop: number;
62
+ };
63
+ farBudgetMs: {
64
+ phone: number;
65
+ desktop: number;
66
+ };
67
+ slopeReach: {
68
+ up: number;
69
+ lo: number;
70
+ hi: number;
71
+ fadeFrom: number;
72
+ fadeTo: number;
73
+ };
74
+ kinds: ({
75
+ name: string;
76
+ geometry: string;
77
+ cap: number;
78
+ reach: [
79
+ number,
80
+ number
81
+ ];
82
+ scale: [
83
+ number,
84
+ number
85
+ ];
86
+ far?: {
87
+ geometry: string;
88
+ reach: [
89
+ number,
90
+ number
91
+ ];
92
+ cap: number;
93
+ keep: number;
94
+ };
95
+ })[];
96
+ }
97
+ export type StreamedCoverRow = { [Key in keyof StreamedCoverRowFields]: StreamedCoverRowFields[Key] };
98
+ export type CoverCompositionRowsInput = CoverCompositionRows;
99
+ interface CoverCompositionRowsFields {
100
+ name: string;
101
+ placement: string;
102
+ mesh: string;
103
+ userData: Record<string, boolean>;
104
+ }
105
+ export type CoverCompositionRows = { [Key in keyof CoverCompositionRowsFields]: CoverCompositionRowsFields[Key] };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Surface look rows (SHARD-PLATFORM SF72, look-family rows; DS1.1): the pure row contracts of the small, named
3
+ * decorations a shard chains onto a standard material. A shard lists its rows in its own `data/`; the game's
4
+ * `@wildshard/game/systems/looks/surfaceLooks` `applySurfaceLooks` installs them (each family's GLSL lives there). The
5
+ * families:
6
+ *
7
+ * - `firelight`: each burning fire of a shared firelight uniform warms the surface within `reach` metres, falling off as
8
+ * `(1 - d / reach) ^ falloff`;
9
+ * - `viewerLight`: the viewer-side light of a held part and a glancing sheen at the silhouette;
10
+ * - `leather`: creases and a pebbled grain in the model's own space, as albedo and as a bump on the normal;
11
+ * - `stoneBand`: the model below a height redrawn as rows of irregular fieldstones with mortar between (a plinth);
12
+ * - `desaturate`: the map's colour pulled toward its own luma.
13
+ */
14
+
15
+ /** RGB, linear. */
16
+ export type SurfaceRgb = readonly [number, number, number];
17
+
18
+ /** Fires warm the surface: `colour` × each fire's gain × `(1 - d / reach) ^ falloff` × `gain`. */
19
+ export interface FirelightLook { readonly kind: 'firelight'; readonly colour: SurfaceRgb; readonly reach: number; readonly falloff: number; readonly gain: number }
20
+ /**
21
+ * The eye's own light on a held part: `gain` × (`facing[0]` + `facing[1]` × the face's turn to the eye) × (1 + `dusk` ×
22
+ * the dusk uniform), and a sheen of `sheenColour` × `sheen` × (1 - turn) ^ `sheenPower`, damped by roughness × `sheenDamp`.
23
+ */
24
+ export interface ViewerLightLook {
25
+ readonly kind: 'viewerLight'; readonly gain: SurfaceRgb; readonly facing: readonly [number, number]; readonly dusk: number;
26
+ readonly sheen: number; readonly sheenColour: SurfaceRgb; readonly sheenPower: number; readonly sheenDamp: number;
27
+ }
28
+ /**
29
+ * Leather in model space: creases (`crease` frequencies per axis, sharpened by `sharpness`) and a grain (`grain`), mixed
30
+ * `mix[0]` / `mix[1]`; the albedo darkens to `albedo[0]` + `albedo[1]` × (1 - height); the bump is `depth` view metres.
31
+ */
32
+ export interface LeatherLook {
33
+ readonly kind: 'leather'; readonly crease: SurfaceRgb; readonly sharpness: number; readonly grain: number;
34
+ readonly mix: readonly [number, number]; readonly albedo: readonly [number, number]; readonly depth: number;
35
+ }
36
+ /**
37
+ * Fieldstones below model height `below` (a smoothstep from `below[0]` to `below[1]`): `rows` rows per model unit, wavy by
38
+ * `wave` (cycles round, amplitude), `perRow` stones a row (base + a per-row spread), mortar where a stone's edge is within
39
+ * `mortar` (aspect `aspect`), each stone between `dark` and `light`, speckled `speckle` at `speckleScale`.
40
+ */
41
+ export interface StoneBandLook {
42
+ readonly kind: 'stoneBand'; readonly below: readonly [number, number]; readonly rows: number; readonly wave: readonly [number, number];
43
+ readonly perRow: readonly [number, number]; readonly mortar: readonly [number, number]; readonly aspect: number;
44
+ readonly dark: SurfaceRgb; readonly light: SurfaceRgb; readonly speckle: readonly [number, number]; readonly speckleScale: number; readonly mortarColour: SurfaceRgb;
45
+ }
46
+ /** The map's colour pulled `amount` of the way to its own luma (Rec. 709). */
47
+ export interface DesaturateLook { readonly kind: 'desaturate'; readonly amount: number }
48
+
49
+ /** One declared surface look. */
50
+ export type SurfaceLook = FirelightLook | ViewerLightLook | LeatherLook | StoneBandLook | DesaturateLook;
@@ -0,0 +1,54 @@
1
+ // Where ustar keeps each header field, for the reader and writer in `tar.ts`.
2
+
3
+ const BLOCK = 512
4
+ const NAME = { at: 0, length: 100 }
5
+ const MODE = { at: 100, length: 8 }
6
+ const OWNER = { at: 108, length: 8 }
7
+ const GROUP = { at: 116, length: 8 }
8
+ const SIZE = { at: 124, length: 12 }
9
+ const TIME = { at: 136, length: 12 }
10
+ const CHECKSUM = { at: 148, length: 8 }
11
+ const TYPE_AT = 156
12
+ const MAGIC = { at: 257, length: 5 }
13
+ const USTAR_VERSION = { at: 263, length: 2 }
14
+ const PREFIX = { at: 345, length: 155 }
15
+
16
+ const SPACE = 32
17
+ const START = 0
18
+
19
+ interface TarField {
20
+ readonly at: number
21
+ readonly length: number
22
+ }
23
+
24
+ /** The header's checksum, with its own field counted as spaces. */
25
+ function checksum(block: Readonly<Uint8Array>): number {
26
+ const end = CHECKSUM.at + CHECKSUM.length
27
+ return block.reduce(
28
+ (total: number, byte: number, index: number): number =>
29
+ total + (index >= CHECKSUM.at && index < end ? SPACE : byte),
30
+ START,
31
+ )
32
+ }
33
+
34
+ function padded(size: number): number {
35
+ return Math.ceil(size / BLOCK) * BLOCK
36
+ }
37
+
38
+ export type { TarField }
39
+ export {
40
+ BLOCK,
41
+ CHECKSUM,
42
+ GROUP,
43
+ MAGIC,
44
+ MODE,
45
+ NAME,
46
+ OWNER,
47
+ PREFIX,
48
+ SIZE,
49
+ TIME,
50
+ TYPE_AT,
51
+ USTAR_VERSION,
52
+ checksum,
53
+ padded,
54
+ }