@shipload/sdk 1.0.0-next.51 → 1.0.0-next.53

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 (60) hide show
  1. package/lib/shipload.d.ts +471 -158
  2. package/lib/shipload.js +2320 -485
  3. package/lib/shipload.js.map +1 -1
  4. package/lib/shipload.m.js +2290 -484
  5. package/lib/shipload.m.js.map +1 -1
  6. package/lib/testing.d.ts +123 -8
  7. package/lib/testing.js +450 -19
  8. package/lib/testing.js.map +1 -1
  9. package/lib/testing.m.js +451 -20
  10. package/lib/testing.m.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/capabilities/crafting.ts +10 -1
  13. package/src/capabilities/gathering.ts +1 -1
  14. package/src/capabilities/hauling.ts +0 -5
  15. package/src/capabilities/modules.ts +6 -0
  16. package/src/capabilities/movement.ts +1 -1
  17. package/src/contracts/server.ts +293 -13
  18. package/src/data/capabilities.ts +18 -2
  19. package/src/data/capability-formulas.ts +5 -0
  20. package/src/data/entities.json +235 -20
  21. package/src/data/item-ids.ts +10 -0
  22. package/src/data/items.json +61 -0
  23. package/src/data/kind-registry.json +53 -1
  24. package/src/data/kind-registry.ts +5 -0
  25. package/src/data/metadata.ts +74 -5
  26. package/src/data/recipes-runtime.ts +1 -0
  27. package/src/data/recipes.json +895 -119
  28. package/src/derivation/capabilities.test.ts +105 -4
  29. package/src/derivation/capabilities.ts +162 -57
  30. package/src/derivation/capability-mappings.ts +2 -0
  31. package/src/derivation/crafting.ts +2 -0
  32. package/src/derivation/recipe-usage.test.ts +10 -7
  33. package/src/derivation/rollups.ts +16 -0
  34. package/src/derivation/stat-scaling.ts +12 -0
  35. package/src/entities/makers.ts +10 -1
  36. package/src/index-module.ts +29 -3
  37. package/src/managers/actions.ts +77 -46
  38. package/src/managers/construction-types.ts +2 -2
  39. package/src/managers/construction.ts +15 -15
  40. package/src/managers/plot.ts +1 -1
  41. package/src/nft/buildImmutableData.ts +55 -9
  42. package/src/nft/description.ts +99 -36
  43. package/src/planner/planner.test.ts +50 -41
  44. package/src/resolution/resolve-item.test.ts +1 -1
  45. package/src/resolution/resolve-item.ts +26 -11
  46. package/src/scheduling/availability.ts +7 -6
  47. package/src/scheduling/cancel.test.ts +40 -6
  48. package/src/scheduling/cancel.ts +21 -29
  49. package/src/scheduling/jobs.ts +71 -0
  50. package/src/scheduling/lanes.ts +29 -0
  51. package/src/scheduling/projection.ts +42 -25
  52. package/src/scheduling/task-cargo.ts +1 -1
  53. package/src/testing/projection-parity.ts +2 -2
  54. package/src/travel/reach.ts +4 -6
  55. package/src/travel/route-planner.ts +60 -49
  56. package/src/travel/route-simulator.ts +3 -7
  57. package/src/travel/travel.ts +14 -5
  58. package/src/types/capabilities.ts +9 -3
  59. package/src/types.ts +5 -3
  60. package/src/managers/flatten-gather-plan.test.ts +0 -80
package/lib/shipload.m.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from 'tslib';
2
- import { Blob, ABI, Struct, Name, Asset, UInt64, Checksum256, UInt32, TimePointSec, ExtendedAsset, UInt16, UInt8, Int64, TimePoint, Int8, BlockTimestamp, Bytes, Int32, Checksum512, PermissionLevel, Action, Transaction, APIClient, Serializer } from '@wharfkit/antelope';
2
+ import { Blob, ABI, Struct, Name, Asset, UInt64, Checksum256, UInt32, TimePointSec, ExtendedAsset, UInt16, UInt8, Int64, TimePoint, Int8, Bytes, BlockTimestamp, Int32, Checksum512, PermissionLevel, Action, APIClient, Serializer } from '@wharfkit/antelope';
3
3
  import ContractKit, { Contract as Contract$2 } from '@wharfkit/contract';
4
4
 
5
5
  const abiBlob$1 = Blob.from('DmVvc2lvOjphYmkvMS4yAB0LYmFsYW5jZV9yb3cAAg50b2tlbl9jb250cmFjdARuYW1lB2JhbGFuY2UFYXNzZXQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BWNsb3NlAAMFb3duZXIEbmFtZQ50b2tlbl9jb250cmFjdARuYW1lDHRva2VuX3N5bWJvbAZzeW1ib2wLY29tcGFueV9yb3cAAgdhY2NvdW50BG5hbWUEbmFtZQZzdHJpbmcMZGViaXRkZXBvc2l0AAUFb3duZXIEbmFtZQV0b2tlbgRuYW1lBmxvY2tlZAVhc3NldAtmZWVfYWNjb3VudARuYW1lA2ZlZQVhc3NldA5kZXBvc2l0Y2ZnX3JvdwACDnRva2VuX2NvbnRyYWN0BG5hbWUMdG9rZW5fc3ltYm9sBnN5bWJvbAZlbmFibGUAAQdlbmFibGVkBGJvb2wKZW5hYmxlZ2FtZQACCGNvbnRyYWN0BG5hbWUHZW5hYmxlZARib29sDGZvdW5kY29tcGFueQACB2FjY291bnQEbmFtZQRuYW1lBnN0cmluZwtnYW1lX2NvbmZpZwAEBHNlZWQLY2hlY2tzdW0yNTYJZXBvY2h0aW1lBnVpbnQzMgVzdGFydA50aW1lX3BvaW50X3NlYwNlbmQOdGltZV9wb2ludF9zZWMJZ2FtZV9tZXRhAAQEbmFtZQZzdHJpbmcLZGVzY3JpcHRpb24Gc3RyaW5nA3VybAZzdHJpbmcHdmVyc2lvbgZzdHJpbmcIZ2FtZV9yb3cABAhjb250cmFjdARuYW1lBmNvbmZpZwtnYW1lX2NvbmZpZwRtZXRhCWdhbWVfbWV0YQVzdGF0ZQpnYW1lX3N0YXRlCmdhbWVfc3RhdGUAAQdlbmFibGVkBGJvb2wEb3BlbgADBW93bmVyBG5hbWUOdG9rZW5fY29udHJhY3QEbmFtZQx0b2tlbl9zeW1ib2wGc3ltYm9sDHJlbGdhdGVhc3NldAABCGFzc2V0X2lkBnVpbnQ2NAxyZWxnYXRlb3duZXIAAQVvd25lcgRuYW1lDHNldGVwb2NodGltZQACCGNvbnRyYWN0BG5hbWUJZXBvY2h0aW1lBnVpbnQzMghzZXR0b2tlbgACDnRva2VuX2NvbnRyYWN0BG5hbWUMdG9rZW5fc3ltYm9sBnN5bWJvbAlzdGFydGdhbWUABAhjb250cmFjdARuYW1lBmNvbmZpZwtnYW1lX2NvbmZpZwRtZXRhCWdhbWVfbWV0YQVzdGF0ZQpnYW1lX3N0YXRlCXN0YXRlX3JvdwABB2VuYWJsZWQEYm9vbAt1bndyYXBjYXJnbwADBGdhbWUEbmFtZQVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA51bndyYXBjdXN0X3JvdwACCGFzc2V0X2lkBnVpbnQ2NAVvd25lcgRuYW1lDHVud3JhcGVudGl0eQADBGdhbWUEbmFtZQVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NAp1cGRhdGVnYW1lAAIIY29udHJhY3QEbmFtZQRtZXRhCWdhbWVfbWV0YQR3aXBlAAAId2l0aGRyYXcAAwVvd25lcgRuYW1lCHF1YW50aXR5DmV4dGVuZGVkX2Fzc2V0BG1lbW8Gc3RyaW5nCXdyYXBjYXJnbwAGBGdhbWUEbmFtZQVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0CGNhcmdvX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQKd3JhcGVudGl0eQAEBGdhbWUEbmFtZQVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0DHdyYXBnYXRlX3JvdwADBW93bmVyBG5hbWUEZ2FtZQRuYW1lDWxhc3RfYXNzZXRfaWQGdWludDY0EwCAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAAIVpRAVjbG9zZeICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsb3NlCnN1bW1hcnk6ICdDbG9zZSBhIGRlcG9zaXQgYmFsYW5jZSByb3cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpDbG9zZSB0aGUgb3duZXIncyBkZXBvc2l0IGJhbGFuY2Ugcm93IGZvciB0aGUgZ2l2ZW4gdG9rZW4gYW5kIGZyZWUgaXRzIFJBTS4gVGhlIGJhbGFuY2UgbXVzdCBiZSB6ZXJvIGJlZm9yZSBjbG9zaW5nLiBSZXF1aXJlcyB0aGUgb3duZXIncyBhdXRob3JpdHkukB2mVaXsjkoMZGViaXRkZXBvc2l0nQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGViaXRkZXBvc2l0CnN1bW1hcnk6ICdEZWJpdCBhIGRlcG9zaXQgYmFsYW5jZSBmb3IgYSB3cmFwIG9wZXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IGEgcmVnaXN0ZXJlZCwgZW5hYmxlZCBnYW1lIGNvbnRyYWN0IG9ubHkuIERlYml0cyB0aGUgb3duZXIncyBkZXBvc2l0IGJhbGFuY2UgYnkgdGhlIGxvY2tlZCBhbW91bnQgcGx1cyB0aGUgZmVlLCBhbmQgY3JlZGl0cyB0aGUgZmVlIHRvIHRoZSBjb25maWd1cmVkIGZlZSBhY2NvdW50LiBVc2VkIGJ5IGEgZ2FtZSdzIHdyYXAgZmxvdyB0byBjb2xsZWN0IHRoZSB3cmFwIGNvc3QuIENhbm5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgcGxheWVycyBvciB1bnJlZ2lzdGVyZWQgYWNjb3VudHMuAAAAAKh4zFQGZW5hYmxl8wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdFbmFibGUvZGlzYWJsZSBwbGF0Zm9ybScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkVuYWJsZSBvciBkaXNhYmxlIHRoZSBwbGF0Zm9ybSBjb250cmFjdC4AgJKGqXjMVAplbmFibGVnYW1l/AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlZ2FtZQpzdW1tYXJ5OiAnRW5hYmxlL2Rpc2JhYmxlIGEgZ2FtZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkVuYWJsZSBvciBkaXNhYmxlIHRoZSBzcGVjaWZpZWQgZ2FtZSBjb250cmFjdC7gp6mSojQ1XQxmb3VuZGNvbXBhbnmDAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3VuZGNvbXBhbnkKc3VtbWFyeTogJ0ZvdW5kIGEgbmV3IGNvbXBhbnknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpGb3VuZCBhIG5ldyBjb21wYW55IGluIHRoZSBTaGlwbG9hZCBwbGF0Zm9ybSBjb250cmFjdC4AAAAAADBVpQRvcGVumwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogb3BlbgpzdW1tYXJ5OiAnT3BlbiBhIGRlcG9zaXQgYmFsYW5jZSByb3cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpPcGVuIGEgemVyby1iYWxhbmNlIGRlcG9zaXQgcm93IGZvciB0aGUgZ2l2ZW4gb3duZXIgYW5kIHRva2VuLCB3aXRoIFJBTSBwYWlkIGJ5IHRoZSBvd25lci4gSGFzIG5vIGVmZmVjdCBpZiB0aGUgcm93IGFscmVhZHkgZXhpc3RzLiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIG93bmVyIGNhbiByZWNlaXZlIHRva2VuIGRlcG9zaXRzIG9yIHdyYXAgcmVmdW5kcy6QFcZGZcOiugxyZWxnYXRlYXNzZXQAcNXkVGXDoroMcmVsZ2F0ZW93bmVyAKCkyw3RqrLCDHNldGVwb2NodGltZcQCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNldGVwb2NodGltZQpzdW1tYXJ5OiAnREVCVUc6IG92ZXJyaWRlIGEgZ2FtZScncyBlcG9jaCB0aW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpPdmVycmlkZSB0aGUgZXBvY2ggZHVyYXRpb24gaW4gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNwZWNpZmllZCBnYW1lIGNvbnRyYWN0LiBSZXF1aXJlcyBwbGF0Zm9ybSBjb250cmFjdCBhdXRob3JpdHkuAAAAU0Gas8IIc2V0dG9rZW6dAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXR0b2tlbgpzdW1tYXJ5OiAnU2V0IHRoZSBhY2NlcHRlZCBkZXBvc2l0IHRva2VuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKQWRtaW4gYWN0aW9uIHRoYXQgc2V0cyB0aGUgYWNjZXB0ZWQgZGVwb3NpdCB0b2tlbiAoY29udHJhY3QgYWNjb3VudCBhbmQgc3ltYm9sKSBmb3IgdGhlIHBsYXRmb3JtLiBBbGwgcGxheWVyIGRlcG9zaXRzIGFuZCB3cmFwIGNvc3RzIGFyZSBkZW5vbWluYXRlZCBpbiB0aGlzIHRva2VuLiBSZXF1aXJlcyBwbGF0Zm9ybSBjb250cmFjdCBhdXRob3JpdHkuAABQ0rB8TcYJc3RhcnRnYW1l/wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3RhcnRnYW1lCnN1bW1hcnk6ICdTdGFydCBhIG5ldyBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKU3RhcnQgYSBuZXcgZ2FtZSBvZiBTaGlwbG9hZCBkZXBsb3llZCB0byBhIG5ldyBjb250cmFjdC4AKLsGVXP51At1bndyYXBjYXJnb88ELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVud3JhcGNhcmdvCnN1bW1hcnk6ICdEZXBvc2l0IGFuIE5GVCBpbnRvIGEgaG9zdCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlcG9zaXQgYW4gQXRvbWljQXNzZXRzIE5GVCBpbnRvIGEgaG9zdCBlbnRpdHkncyBjYXJnby4gUGFpcnMgd2l0aCBhbiBhdG9taWNhc3NldHM6OnRyYW5zZmVyIGNhcnJ5aW5nIHRoZSAndW53cmFwJyBtZW1vIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiBUaGUgY2FsbGVyIG11c3Qgb3duIHRoZSBob3N0LCB0aGUgaG9zdCBtdXN0IGhhdmUgbG9hZGVycywgYW5kIHRoZSBob3N0IG11c3QgaGF2ZSBjYXBhY2l0eSBoZWFkcm9vbSBmb3IgdGhlIHVud3JhcHBlZCBtYXNzLiBTY2hlZHVsZXMgYSBUQVNLX1VOV1JBUCBvbiB0aGUgaG9zdCB0aGF0LCBvbiByZXNvbHV0aW9uLCBwbGFjZXMgdGhlIGRlY29kZWQgaXRlbSBpbnRvIHRoZSBob3N0J3MgY2FyZ28gYW5kIGJ1cm5zIHRoZSBORlQu4LPLU1Vz+dQMdW53cmFwZW50aXR54gQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdW53cmFwZW50aXR5CnN1bW1hcnk6ICdEZXBsb3kgYW4gZW50aXR5IE5GVCBkaXJlY3RseSB0byBhIG5leHVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpEZXBsb3kgYSBwYWNrZWQtZW50aXR5IEF0b21pY0Fzc2V0cyBORlQgKG9yYml0YWwgdmVzc2VsOiBzaGlwIG9yIGNvbnRhaW5lcikgZGlyZWN0bHkgYXMgYSBsaXZlIGVudGl0eS4gUGFpcnMgd2l0aCBhbiBhdG9taWNhc3NldHM6OnRyYW5zZmVyIGNhcnJ5aW5nIHRoZSAnZGVwbG95JyBtZW1vIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiBUaGUgTkZUIGlzIGJ1cm5lZCwgYSBuZXcgZW50aXR5IHJvdyBpcyBlbXBsYWNlZCBhdCB0aGUgTkZUJ3Mgd3JhcCBvcmlnaW4gcGFpZCBieSB0aGUgb3duZXIsIGFuZCBUQVNLX1RSQVZFTCBwbHVzIFRBU0tfUkVDSEFSR0UgYXJlIHF1ZXVlZCB0byBkZWxpdmVyIHRoZSBlbnRpdHkgdG8gdGhlIHRhcmdldCBuZXh1cyBhbmQgYnJpbmcgaXQgdG8gZnVsbCBlbmVyZ3kuAICShqlsUtUKdXBkYXRlZ2FtZY0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVwZGF0ZWdhbWUKc3VtbWFyeTogJ1VwZGF0ZSBnYW1lIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKVXBkYXRlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIGdhbWUgY29udHJhY3QuCgotLS0AAAAAAKCq4wR3aXBlsgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAA3NzUsuMId2l0aGRyYXeXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXRoZHJhdwpzdW1tYXJ5OiAnV2l0aGRyYXcgdG9rZW5zIGZyb20gYSBkZXBvc2l0IGJhbGFuY2UnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpXaXRoZHJhdyB0b2tlbnMgZnJvbSB0aGUgb3duZXIncyBkZXBvc2l0IGJhbGFuY2UuIERlYml0cyB0aGUgbGVkZ2VyIGJ5IHRoZSByZXF1ZXN0ZWQgYW1vdW50IGFuZCB0cmFuc2ZlcnMgdGhlIHRva2VucyB0byB0aGUgb3duZXIuIFJlcXVpcmVzIGEgc3VmZmljaWVudCBiYWxhbmNlIGFuZCB0aGUgb3duZXIncyBhdXRob3JpdHkuAACg7BpUzeUJd3JhcGNhcmdvAACAzy5PVc3lCndyYXBlbnRpdHm1BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3cmFwZW50aXR5CnN1bW1hcnk6ICdXcmFwIGEgZGVwbG95ZWQgZW50aXR5IGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpXcmFwIGFuIGVudGl0eSBpbnRvIGFuIEF0b21pY0Fzc2V0cyBORlQgbWludGVkIHRvIGl0cyBvd25lci4gVGhlIGVudGl0eSBtdXN0IGJlIGF0IGEgbmV4dXMsIGlkbGUgd2l0aCBlbXB0eSBjYXJnbywgYW5kIGhhdmUgYW4gbmZ0Y29uZmlnIG1hcHBpbmcgZm9yIGl0cyBpdGVtIGlkLiBFcmFzZXMgdGhlIGVudGl0eSBhbmQgbWludHMgdGhlIE5GVCBpbmxpbmUsIHByZXNlcnZpbmcgaXRzIHN0YXRzIGFuZCBpbnN0YWxsZWQgbW9kdWxlczsgdGhlIHBsYXllciBwYXlzIFJBTSBmb3IgdGhlIG5ldyBhc3NldCByb3cuIFJlcXVpcmVzIHRoZSBvd25lcidzIGFjdGl2ZSBwZXJtaXNzaW9uIChubyBzZXNzaW9uLWtleSBjb21wYXRpYmlsaXR5KS4HAAAAQKFpojkDaTY0AAALYmFsYW5jZV9yb3cAAADAT1MlRQNpNjQAAAtjb21wYW55X3JvdwAAWyg7TKtKA2k2NAAADmRlcG9zaXRjZmdfcm93AAAAAACspGEDaTY0AAAIZ2FtZV9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAQMYaVXP51ANpNjQAAA51bndyYXBjdXN0X3JvdwAAACobVs3lA2k2NAAADHdyYXBnYXRlX3JvdwETU2hpcGxvYWQgKFBsYXRmb3JtKRNTaGlwbG9hZCAoUGxhdGZvcm0pAAAAAA==');
@@ -440,7 +440,7 @@ var platform = /*#__PURE__*/Object.freeze({
440
440
  Contract: Contract$1
441
441
  });
442
442
 
443
- const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDjBAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQlidWlsZHBsb3QAAgpidWlsZGVyX2lkBnVpbnQ2NAdwbG90X2lkBnVpbnQ2NAZjYW5jZWwAAwJpZAZ1aW50NjQIbGFuZV9rZXkFdWludDgFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8JY2xhaW1fcm93AAEFb3duZXIEbmFtZQljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4BmNvbW1pdAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZjb21taXQLY2hlY2tzdW0yNTYKY29tbWl0X3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8FY3JhZnQABgJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwxjcmFmdGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQADAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmBHNsb3QNY2x1c3Rlcl9zbG90PwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDMyCHJlY2hhcmdlBnVpbnQzMhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MzIPZW50aXR5X2RlZmF1bHRzAAILd2FyZWhvdXNlX3oGdWludDE2C2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAWBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXRlbV9pZAZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDMyPwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPw5nYXRoZXJlcl9sYW5lcw9nYXRoZXJlcl9sYW5lW10NY3JhZnRlcl9sYW5lcw5jcmFmdGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ1lbnRpdHlfbGF5b3V0AAIOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10VZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKZW50aXR5X3JvdwAMAmlkBnVpbnQ2NAVvd25lcgRuYW1lBGtpbmQEbmFtZQdpdGVtX2lkBnVpbnQxNgRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdBWxhbmVzBmxhbmVbXQVob2xkcwZob2xkW10OZW50aXR5X3NlcV9yb3cAAQduZXh0X2lkBnVpbnQ2NA5lbnRpdHlfc3VtbWFyeQAIBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXNfaWRsZQRib29sDnJlc29sdmVkX2NvdW50BnVpbnQzMg1wZW5kaW5nX2NvdW50BnVpbnQzMhBlbnRpdHlfdGFza19pbmZvAAQJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lCnRhc2tfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdC2VudW1fbWVtYmVyAAIFdmFsdWUFdWludDgEbmFtZQZzdHJpbmcLZW51bV9yZXN1bHQAAQdtZW1iZXJzDWVudW1fbWVtYmVyW10JZXBvY2hfcm93AAQFZXBvY2gGdWludDY0Cm9yYWNsZV9pZHMGbmFtZVtdCXRocmVzaG9sZAV1aW50OARzZWVkC2NoZWNrc3VtMjU2DGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQQZm9vdHByaW50X3Jlc3VsdAABBWNlbGxzC2dyaWRfY2VsbFtdC2ZvcmNlcmV2ZWFsAAEFZXBvY2gGdWludDY0C2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAUJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyBHNsb3QGdWludDg/DWdhdGhlcmVyX2xhbmUABQpzbG90X2luZGV4BXVpbnQ4BXlpZWxkBnVpbnQxNgVkcmFpbgZ1aW50MzIFZGVwdGgGdWludDE2Cm91dHB1dF9wY3QGdWludDE2DGdlbmVzaXNmbGVldAABCGVudGl0aWVzDGVudGl0eV9yb3dbXQpnZXRjbHVzdGVyAAEGaHViX2lkBnVpbnQ2NAlnZXRjb25maWcAAApnZXRkZXBvc2l0AAIFb3duZXIEbmFtZQhhc3NldF9pZAZ1aW50NjQLZ2V0ZGlzdGFuY2UABAJheAVpbnQ2NAJheQVpbnQ2NAJieAVpbnQ2NAJieQVpbnQ2NAtnZXRlbGlnaWJsZQACBmNvb3Jkcwtjb29yZGluYXRlcwdzdHJhdHVtBnVpbnQxNglnZXRlbnRjbHMAAAtnZXRlbnRpdGllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8JZ2V0ZW50aXR5AAEJZW50aXR5X2lkBnVpbnQ2NAxnZXRmb290cHJpbnQAAQdpdGVtX2lkBnVpbnQxNgtnZXRpdGVtZGF0YQAACmdldGl0ZW1pZHMAAAhnZXRpdGVtcwAAC2dldGl0ZW10eXBlAAEHaXRlbV9pZAZ1aW50MTYMZ2V0aXRlbXR5cGVzAAALZ2V0a2luZG1ldGEAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRiYXNlAAAKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQxnZXRwcm9qc3RhdGUAAgllbnRpdHlfaWQGdWludDY0CnRhc2tfY291bnQGdWludDg/CWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAAhnZXRzbG90cwAACmdldHN0cmF0dW0AAwF4BWludDY0AXkFaW50NjQHc3RyYXR1bQZ1aW50MTYMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtnZXR3b3JtaG9sZQACAXgFaW50NjQBeQVpbnQ2NAlncmlkX2NlbGwAAgJneARpbnQ4Amd5BGludDgMZ3JvdXB0cmFuc2l0AAUIZW50aXRpZXMMZW50aXR5X3JlZltdAmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwxoYXVsZXJfc3RhdHMABAhjYXBhY2l0eQV1aW50OAplZmZpY2llbmN5BnVpbnQxNgVkcmFpbgZ1aW50MzIQY2FwYWNpdHlfYnlfdGllchFoYXVsZXJfdGllcl9jYXBbXQ9oYXVsZXJfdGllcl9jYXAAAgR0aWVyBXVpbnQ4CGNhcGFjaXR5BXVpbnQ4BGhvbGQABQJpZAZ1aW50NjQEa2luZAV1aW50OAtjb3VudGVycGFydAplbnRpdHlfcmVmBXVudGlsCnRpbWVfcG9pbnQNaW5jb21pbmdfbWFzcwZ1aW50MzILaW1wb3J0Y2FyZ28AAQNyb3cJY2FyZ29fcm93DGltcG9ydGVudGl0eQABA3JvdwplbnRpdHlfcm93C2ltcG9ydGdyb3VwAAEDcm93D2VudGl0eWdyb3VwX3JvdwxpbXBvcnRwbGF5ZXIAAQVvd25lcgRuYW1lDWltcG9ydHJlc2VydmUAAgtlcG9jaF9zY29wZQZ1aW50MzIDcm93C3Jlc2VydmVfcm93C2ltcG9ydHN0YXRlAAEDcm93CXN0YXRlX3JvdwhpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUQa2luZF9tZXRhX3Jlc3VsdAACBWtpbmRzD2tpbmRfbWV0YV9yb3dbXQl0ZW1wbGF0ZXMTdGVtcGxhdGVfbWV0YV9yb3dbXQ1raW5kX21ldGFfcm93AAUEa2luZARuYW1lDmNsYXNzaWZpY2F0aW9uBXVpbnQ4EGNhcGFiaWxpdHlfZmxhZ3MFdWludDgHel9jb29yZAZ1aW50MzINZGVmYXVsdF9sYWJlbAZzdHJpbmcEbGFuZQACCGxhbmVfa2V5BXVpbnQ4CHNjaGVkdWxlCHNjaGVkdWxlBmxhdW5jaAADC2xhdW5jaGVyX2lkBnVpbnQ2NApjYXRjaGVyX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10ObGF1bmNoZXJfc3RhdHMAAwtjaGFyZ2VfcmF0ZQZ1aW50MTYIdmVsb2NpdHkGdWludDE2BWRyYWluBnVpbnQxNgRsb2FkAAMCaWQGdWludDY0B2Zyb21faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQtsb2FkZXJfbGFuZQAECnNsb3RfaW5kZXgFdWludDgEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNhBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwRzaXplBnVpbnQxNg1sb2NhdGlvbl9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sC2lzX3dvcm1ob2xlBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQzMghtb3ZldGlsZQAFBmh1Yl9pZAZ1aW50NjQHZnJvbV9neARpbnQ4B2Zyb21fZ3kEaW50OAV0b19neARpbnQ4BXRvX2d5BGludDgLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MzIHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8ObmZ0X2NhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIQbmZ0X2l0ZW1fcGF5bG9hZAACBGl0ZW0ObmZ0X2NhcmdvX2l0ZW0IbG9jYXRpb24MY29vcmRpbmF0ZXM/Dm5mdF9zY2hlbWFfZGVmAAILc2NoZW1hX25hbWUEbmFtZQZmaWVsZHMOc2NoZW1hX2ZpZWxkW10QbmZ0X3RlbXBsYXRlX2RlZgADB2l0ZW1faWQGdWludDE2C3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzINbmZ0Y29uZmlnX3JvdwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJbmZ0aW1ndXJsAAIEaXRlbQpjYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQRb3JhY2xlX2NvbmZpZ19yb3cAAQl0aHJlc2hvbGQFdWludDgKb3JhY2xlX3JvdwABAmlkBG5hbWUNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NApwbGFjZWNhcmdvAAMFb3duZXIEbmFtZQdob3N0X2lkBnVpbnQ2NAhhc3NldF9pZAZ1aW50NjQLcGxhY2VlbnRpdHkAAwVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA90YXJnZXRfbmV4dXNfaWQGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lD3Byb2plY3RlZF9zdGF0ZQAQBW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10MbG9hZGVyX2xhbmVzDWxvYWRlcl9sYW5lW10IbGF1bmNoZXIPbGF1bmNoZXJfc3RhdHM/BHRpZXIFdWludDgIcmVjaGFyZ2UAAQJpZAZ1aW50NjQMcmVjaXBlX2lucHV0AAIHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyEHJlY2lwZV9pdGVtX2luZm8AAgJpZAZ1aW50MTYEbWFzcwZ1aW50MzIPcmVjaXBlX3Jlc3BvbnNlAAgOb3V0cHV0X2l0ZW1faWQGdWludDE2C291dHB1dF9tYXNzBnVpbnQzMgZpbnB1dHMOcmVjaXBlX2lucHV0W10Kc3RhdF9zbG90cxRzdGF0X3Nsb3RfcmVzcG9uc2VbXQ1ibGVuZF93ZWlnaHRzBWJ5dGVzC291dHB1dF9pdGVtEHJlY2lwZV9pdGVtX2luZm8LaW5wdXRfaXRlbXMScmVjaXBlX2l0ZW1faW5mb1tdD3NvdXJjZV9zdWJjbGFzcwd1aW50MTY/DnJlY2lwZXNfcmVzdWx0AAEHcmVjaXBlcxFyZWNpcGVfcmVzcG9uc2VbXQxyZWZyc2hlbnRpdHkAAQllbnRpdHlfaWQGdWludDY0DHJlbW92ZW9yYWNsZQABCW9yYWNsZV9pZARuYW1lBnJlbmFtZQACAmlkBnVpbnQ2NARuYW1lBnN0cmluZwtyZXNlcnZlX3JvdwAFAmlkBnVpbnQ2NAhjb29yZF9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlB3Jlc29sdmUAAgJpZAZ1aW50NjQFY291bnQHdWludDY0Pw9yZXNvbHZlX3Jlc3VsdHMABgllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUOcmVzb2x2ZWRfY291bnQGdWludDMyFG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CnJlc29sdmVhbGwAAQVvd25lcgRuYW1lEnJlc29sdmVhbGxfcmVzdWx0cwACB3NjYW5uZWQGdWludDMyCHJlc29sdmVkBnVpbnQzMg1yZXNvdXJjZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyCGNhdGVnb3J5BXVpbnQ4BHRpZXIFdWludDgOcmVzb3VyY2Vfc3RhdHMAAwVzdGF0MQZ1aW50MTYFc3RhdDIGdWludDE2BXN0YXQzBnVpbnQxNhByZXNvdXJjZXNfcmVzdWx0AAEJcmVzb3VyY2VzD3Jlc291cmNlX2luZm9bXQZyZXZlYWwAAwlvcmFjbGVfaWQEbmFtZQVlcG9jaAZ1aW50NjQGcmV2ZWFsC2NoZWNrc3VtMjU2CnJldmVhbF9yb3cABAJpZAZ1aW50NjQFZXBvY2gGdWludDY0CW9yYWNsZV9pZARuYW1lBnJldmVhbAtjaGVja3N1bTI1NghybW1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4CnRhcmdldF9yZWYKY2FyZ29fcmVmPwhybW5mdGNmZwABB2l0ZW1faWQGdWludDE2DnJvdXRlX3dheXBvaW50AAIBeAVpbnQ2NAF5BWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwlzZXRjb29yZHMAAwllbnRpdHlfaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAlzZXRuZnRjZmcAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDHNldHRocmVzaG9sZAABCXRocmVzaG9sZAV1aW50OAtzZXR3cmFwY29zdAADCWl0ZW1fdHlwZQV1aW50OAR0aWVyBXVpbnQ4BmFtb3VudAZ1aW50NjQKc2V0d3JhcGZlZQACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUIc2xvdF9kZWYAAwR0eXBlBXVpbnQ4Cm91dHB1dF9wY3QGdWludDE2CG1heF90aWVyBXVpbnQ4EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAMHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2CXN0b3djYXJnbwAFBW93bmVyBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhuZXh1c19pZAZ1aW50NjQIY2FyZ29faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NApzdG93ZW50aXR5AAMFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABQdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzILcmVzZXJ2ZV9tYXgGdWludDMyEXN0cmF0dW1fcmVtYWluaW5nAAMHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlCnN3YXBtb2R1bGUAAwllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZghzd2FwdGlsZQAFBmh1Yl9pZAZ1aW50NjQEYV9neARpbnQ4BGFfZ3kEaW50OARiX2d4BGludDgEYl9neQRpbnQ4BHRhc2sACgR0eXBlBXVpbnQ4CGR1cmF0aW9uBnVpbnQzMgpjYW5jZWxhYmxlBXVpbnQ4C2Nvb3JkaW5hdGVzDGNvb3JkaW5hdGVzPwVjYXJnbwxjYXJnb19pdGVtW10MZW50aXR5dGFyZ2V0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDMyPwRob2xkB3VpbnQ2ND8OdGFyZ2V0X2l0ZW1faWQHdWludDE2Pwp0YXNrX2V2ZW50AAoKZXZlbnRfdHlwZQV1aW50OAVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAp0YXNrX2luZGV4BnVpbnQzMgR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MzI/CGxhbmVfa2V5BXVpbnQ4DHRhc2tfcmVzdWx0cwABCGVudGl0aWVzEmVudGl0eV90YXNrX2luZm9bXRF0ZW1wbGF0ZV9tZXRhX3JvdwADB2l0ZW1faWQGdWludDE2BGtpbmQEbmFtZQ1kaXNwbGF5X2xhYmVsBnN0cmluZwd0cmFuc2l0AAUCaWQGdWludDY0AmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0BnRyYXZlbAAEAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAt0cmF2ZWxyb3V0ZQADCGVudGl0aWVzDGVudGl0eV9yZWZbXQl3YXlwb2ludHMQcm91dGVfd2F5cG9pbnRbXQhyZWNoYXJnZQRib29sCXR5cGVzX3JvdwAFAmlkBnVpbnQ2NBNlbnRpdHlfc3VtbWFyeV90eXBlDmVudGl0eV9zdW1tYXJ5EGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcWc3RyYXR1bV9yZW1haW5pbmdfdHlwZRFzdHJhdHVtX3JlbWFpbmluZxVuZnRfaXRlbV9wYXlsb2FkX3R5cGUQbmZ0X2l0ZW1fcGF5bG9hZAh1bmRlcGxveQACB2hvc3RfaWQGdWludDY0CXRhcmdldF9pZAZ1aW50NjQGdW5sb2FkAAMCaWQGdWludDY0BXRvX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10HdXBncmFkZQAFCmJ1aWxkZXJfaWQGdWludDY0CXRhcmdldF9pZAZ1aW50NjQOdGFyZ2V0X2l0ZW1faWQGdWludDE2BmlucHV0cwxjYXJnb19pdGVtW10Ec2xvdAZ1aW50OD8Ed2FycAADAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQKd2FycF9zdGF0cwABBXJhbmdlBnVpbnQzMgR3aXBlAAANd29ybWhvbGVfaW5mbwADBmNvb3Jkcwtjb29yZGluYXRlcwtpc193b3JtaG9sZQRib29sC2Rlc3RpbmF0aW9uC2Nvb3JkaW5hdGVzDndyYXBjb25maWdfcm93AAIHZmVlX3BjdAZ1aW50MTYLZmVlX2FjY291bnQEbmFtZQx3cmFwY29zdF9yb3cAAwlpdGVtX3R5cGUFdWludDgEdGllcgV1aW50OAZhbW91bnQGdWludDY0YgAAUFEnKlMyCWFkZG1vZHVsZccDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG1vZHVsZQpzdW1tYXJ5OiAnSW5zdGFsbCBhIG1vZHVsZSBpbnRvIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFsbCBhIG1vZHVsZSBmcm9tIGNhcmdvIGludG8gYSBtb2R1bGUgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHNsb3QgdHlwZS4gVGhlIG1vZHVsZSBpdGVtIGlzIHJlbW92ZWQgZnJvbSBjYXJnbyB1cG9uIGluc3RhbGxhdGlvbi4AAABYdzVTMghhZGRuZXh1c6cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG5leHVzCnN1bW1hcnk6ICdBZGQgYSBuZXh1cyBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ3JlYXRlIGEgbmV3IG5leHVzIGVudGl0eSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuIE5leHVzZXMgYXJlIG93bmVkIGJ5IHRoZSBjb250cmFjdCBhbmQgc2VydmUgYXMgZml4ZWQgZ2F0aGVyaW5nIHBvaW50cyB3aGVyZSBwbGF5ZXJzIGNhbiB3cmFwLCB1bndyYXAsIGRlcGxveSwgYW5kIG90aGVyd2lzZSBpbnRlcmFjdCB3aXRoIE5GVC1iYWNrZWQgYXNzZXRzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAABQEZlLUzIJYWRkb3JhY2xlAAAAAACANFU8BWJsZW5k/AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYmxlbmQKc3VtbWFyeTogJ0JsZW5kIGNhcmdvIHN0YWNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ29tYmluZSBtdWx0aXBsZSBjYXJnbyBzdGFja3Mgb2YgdGhlIHNhbWUgaXRlbSB0eXBlIGludG8gYSBzaW5nbGUgc3RhY2sgd2l0aCBuZXcgYmxlbmRlZCBzdGF0cy4gQWxsIGlucHV0IHN0YWNrcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGl0ZW0gaWQuIFRoZSBvdXRwdXQgc3RhY2sgaGFzIHRoZSBjb21iaW5lZCBxdWFudGl0eSBvZiBhbGwgaW5wdXRzLgAAyDTWFJ0+CWJ1aWxkcGxvdAAAAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC4AAMg0VulMRAljbGFpbXBsb3QAcFW+JmPpTEQMY2xhaW1zdGFydGVyAAAAqBvfaVRECWNsZWFucnN2cOwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFucnN2cApzdW1tYXJ5OiAnQ2xlYW4gdXAgcGFzdCBlcG9jaCByZXNlcnZlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRXJhc2UgcmVzZXJ2ZSB0YWJsZSByb3dzIGZyb20gYSBwYXN0IGVwb2NoLiBDYW5ub3QgY2xlYW4gdGhlIGN1cnJlbnQgb3IgZnV0dXJlIGVwb2Nocy4gVGhlIG1heF9yb3dzIHBhcmFtZXRlciBjYXBzIHRoZSBudW1iZXIgb2Ygcm93cyBlcmFzZWQgcGVyIGNhbGwgdG8gbGltaXQgQ1BVIHVzYWdlLgCAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAZCclRQZjb21taXTsAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb21taXQKc3VtbWFyeTogJ1NldCBjb21taXQgdmFsdWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNldCB0aGUgaW5pdGlhbCBjb21taXQgdmFsdWUgZHVyaW5nIGdhbWUgaW5pdGlhbGl6YXRpb24uAABgNDK3JkUJY29uZmlnbG9n3QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29uZmlnbG9nCnN1bW1hcnk6ICdMb2cgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBsb2dzIHRoZSBjdXJyZW50IGdhbWUgY29uZmlndXJhdGlvbi4gQ2FsbGVkIGlubGluZSBhZnRlciBpbml0aWFsaXphdGlvbiB0byBicm9hZGNhc3QgY29uZmlnIHZpYSBhY3Rpb24gdHJhY2VzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAAIC8zEUFY3JhZnTIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmFmdApzdW1tYXJ5OiAnQ3JhZnQgaXRlbXMgZnJvbSBhIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmb3JtIGNhcmdvIGl0ZW1zIGludG8gYSBuZXcgaXRlbSB1c2luZyBhIHJlY2lwZS4gVGhlIGVudGl0eSBtdXN0IGhhdmUgYSBjcmFmdGVyIG1vZHVsZSBpbnN0YWxsZWQuIENvbnN1bWVzIGVuZXJneSBhbmQgc2NoZWR1bGVzIGEgY3JhZnRpbmcgdGFzayB3aXRoIGR1cmF0aW9uIGJhc2VkIG9uIHRvdGFsIGlucHV0IG1hc3MgYW5kIGNyYWZ0ZXIgc3BlZWQuIElucHV0IHF1YW50aXRpZXMgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSByZWNpcGUgcmVxdWlyZW1lbnRzLgAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzkAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZml4Y2FyZ29tYXNzCnN1bW1hcnk6ICdERUJVRzogcmVjb21wdXRlIGVudGl0eSBjYXJnbyBtYXNzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgYW5kIHJld3JpdGUgYW4gZW50aXR5J3MgY2FyZ28gbWFzcyBmcm9tIGl0cyBjdXJyZW50IGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIEF2YWlsYWJsZSBmb3IgcmVwYWlyaW5nIGRyaWZ0IGJldHdlZW4gY2FjaGVkIGNhcmdvIG1hc3MgYW5kIHRoZSB0cnVlIG1hc3MgZGVyaXZlZCBmcm9tIGNhcmdvIHJvd3MuAKJRW12FLl0LZm9yY2VyZXZlYWy+BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3JjZXJldmVhbApzdW1tYXJ5OiAnREVCVUc6IGZvcmNlLWZpbmFsaXplIGFuIGVwb2NoIGZyb20gZXhpc3RpbmcgcmV2ZWFscycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRmluYWxpemUgYSBzdHVjayBlcG9jaCBieSBjb21wdXRpbmcgaXRzIHNlZWQgZnJvbSB0aGUgcmV2ZWFscyBhbHJlYWR5IHN1Ym1pdHRlZCwgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4gVGhlIHNlZWQgaXMgZGVyaXZlZCBzb2xlbHkgZnJvbSB0aGUgcHJlLWltYWdlLWxvY2tlZCByZXZlYWxzIGFscmVhZHkgb24gY2hhaW47IG5vIGFkbWluLXN1cHBsaWVkIGVudHJvcHkgaXMgaW50cm9kdWNlZC4gVXNlZCB0byB1bmJsb2NrIGVwb2NoIHByb2dyZXNzaW9uIHdoZW4gdGhlIHRocmVzaG9sZCBjYW5ub3Qgb3RoZXJ3aXNlIGJlIG1ldC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24ukJWKCzuspmIMZ2VuZXNpc2ZsZWV0qQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2VuZXNpc2ZsZWV0CnN1bW1hcnk6ICdNaW50IHRoZSBvbmUtdGltZSBnZW5lc2lzIGZsZWV0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbXBsYWNlIHRoZSBvbmUtdGltZSBnZW5lc2lzIGZsZWV0OiBhIGNhbGxlci1zdXBwbGllZCBzZXQgb2YgZW50aXRpZXMgKHNoaXBzLCBzdHJ1Y3R1cmVzLCBhbmQgY29udGFpbmVycykgd3JpdHRlbiB0byB0aGUgd29ybGQgYXMtaXMuIFZhbGlkIG9ubHkgZHVyaW5nIHRoZSBwcmUtZ2VuZXNpcyB3aW5kb3csIGJlZm9yZSBlcG9jaCAxIGlzIGZpbmFsaXplZC4gVGhlIHN1cHBsaWVkIGVudGl0eSBpZHMgYXJlIGhvbm9yZWQgYW5kIHRoZSBpZCBzZXF1ZW5jZSBpcyBhZHZhbmNlZCBwYXN0IHRoZW07IGlkIDAgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBHZW5lc2lzIE5leHVzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAMBVGeuIsmIKZ2V0Y2x1c3RlcgAAAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgBAdphWlbJiCmdldGRlcG9zaXQAABSaJmOXsmILZ2V0ZGlzdGFuY2UAAFQ8jrmosmILZ2V0ZWxpZ2libGXIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbGlnaWJsZQpzdW1tYXJ5OiAnR2V0IGVsaWdpYmxlIHJlc291cmNlIGl0ZW0gSURzIGF0IGEgbG9jYXRpb24gYW5kIHN0cmF0dW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBsaXN0IG9mIHJlc291cmNlIGl0ZW0gSURzIGVsaWdpYmxlIHRvIGJlIGdhdGhlcmVkIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcyBhbmQgc3RyYXR1bSBkZXB0aC4gSXRlbXMgYXJlIGdhdGVkIGJ5IGJvdGggdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgcHJvZmlsZSBhbmQgdGhlIGRlcHRoIHRocmVzaG9sZCBmb3IgZWFjaCB0aWVyLgAAwBHlqbJiCWdldGVudGNsc4wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGNscwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBjbGFzcyBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIGVudGl0eSBjbGFzcyBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChPcmJpdGFsVmVzc2VsLCBQbGFuZXRhcnlTdHJ1Y3R1cmUpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBlbnRpdHkgY2xhc3MgaWRlbnRpZmllcnMuALBy2eWpsmILZ2V0ZW50aXRpZXOkAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdGllcwpzdW1tYXJ5OiAnR2V0IGFsbCBlbnRpdGllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgZnVsbCBlbnRpdHkgaW5mbyBmb3IgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4AAPDZ5amyYglnZXRlbnRpdHmiAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdHkKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gZW50aXR5IGluY2x1ZGluZyBpZGVudGl0eSwgY2FyZ28sIHNjaGVkdWxlIHN0YXRlLCBhbmQgdHlwZS1zcGVjaWZpYyBmaWVsZHMukKe7NVO6smIMZ2V0Zm9vdHByaW50AABMNkmq7LJiC2dldGl0ZW1kYXRhqAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWRhdGEKc3VtbWFyeTogJ0dldCBmdWxsIGl0ZW0gY2F0YWxvZycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGNvbXBsZXRlIGl0ZW0gY2F0YWxvZyBhcyB0aGUgY29udHJhY3Qgc2VlcyBpdCwgaW5jbHVkaW5nIHR5cGUsIHN1YnR5cGUsIHRpZXIsIG1hc3MsIGFuZCBvdGhlciBzdGF0aWMgbWV0YWRhdGEuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIGNsaWVudHMgdG8gbWlycm9yIHRoZSBjb250cmFjdCdzIGl0ZW0gZGVmaW5pdGlvbnMuAABOTqrssmIKZ2V0aXRlbWlkc4YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1pZHMKc3VtbWFyeTogJ0dldCBpdGVtIGlkIHRvIG5hbWUgbWFwcGluZ3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIG1hcHBpbmcgb2YgaXRlbSBpZCBjb25zdGFudHMgdG8gdGhlaXIgY2Fub25pY2FsIHN0cmluZyBuYW1lcy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byByZXNvbHZlIG51bWVyaWMgaXRlbSBpZHMgdG8gaHVtYW4tcmVhZGFibGUgaWRlbnRpZmllcnMuAAAAWKrssmIIZ2V0aXRlbXOaAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtcwpzdW1tYXJ5OiAnR2V0IGFsbCBhdmFpbGFibGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgYSBsaXN0IG9mIGFsbCBpdGVtcyBpbiB0aGUgZ2FtZSBpbmNsdWRpbmcgdGhlaXIgaWQsIGJhc2UgcHJpY2UsIGFuZCBtYXNzLgBU9Vmq7LJiC2dldGl0ZW10eXBlAIBV9Vmq7LJiDGdldGl0ZW10eXBlc4gDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW10eXBlcwpzdW1tYXJ5OiAnR2V0IGl0ZW0gdHlwZSBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIGl0ZW0gdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChyZXNvdXJjZSwgY29tcG9uZW50LCBtb2R1bGUsIGVudGl0eSkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIGl0ZW0gdHlwZSBpZGVudGlmaWVycy4ATFYyTQezYgtnZXRraW5kbWV0YfgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGtpbmRtZXRhCnN1bW1hcnk6ICdHZXQgZW50aXR5IGtpbmQgbWV0YWRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBlbnRpdHkga2luZCByZWdpc3RyeSBhbmQgdGVtcGxhdGUgcmVnaXN0cnksIGluY2x1ZGluZyBlYWNoIGtpbmQncyBjbGFzc2lmaWNhdGlvbiwgY2FwYWJpbGl0eSBmbGFncywgWi1jb29yZGluYXRlLCBhbmQgZGVmYXVsdCBsYWJlbCwgcGx1cyB0aGUgbWFwcGluZyBvZiBlbnRpdHkgaXRlbSBpZHMgdG8ga2luZHMgd2l0aCBkaXNwbGF5IGxhYmVscy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBpbnRlcnByZXQgZW50aXR5IGtpbmRzIGFuZCBjYXBhYmlsaXRpZXMuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AsKo+JyqzYgtnZXRtb2R0eXBlc9YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHR5cGVzCnN1bW1hcnk6ICdHZXQgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChhbnksIGVuZ2luZSwgZ2VuZXJhdG9yLCBnYXRoZXJlciwgbG9hZGVyLCB3YXJwLCBjcmFmdGVyLCBsYXVuY2hlciwgc3RvcmFnZSwgaGF1bGVyKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgbW9kdWxlIHN1YnR5cGUgaWRlbnRpZmllcnMgYW5kIHNsb3QgY29tcGF0aWJpbGl0eS4AAFZRJyqzYgpnZXRtb2R1bGVzgAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4AAPDnGjWzYglnZXRuZWFyYnnKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBhbmQgZmxpZ2h0IHRpbWUuAIDC5uQ1s2IKZ2V0bmZ0YmFzZQAAAF3T5TWzYgpnZXRuZnRpbmZv8AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS6gssn40VuzYgxnZXRwcm9qc3RhdGXLAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRwcm9qc3RhdGUKc3VtbWFyeTogJ0dldCBwcm9qZWN0ZWQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgcHJvamVjdGVkIHN0YXRlIG9mIGFuIGVudGl0eSBhZnRlciBhcHBseWluZyB0aGUgbmV4dCB0YXNrX2NvdW50IHNjaGVkdWxlZCB0YXNrcyAob3IgYWxsIHRhc2tzIGlmIHRhc2tfY291bnQgaXMgb21pdHRlZCkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gcHJldmlldyB0aGUgcmVzdWx0IG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlIHdpdGhvdXQgcmVzb2x2aW5nIG9uLWNoYWluLgAAUNUhdbNiCWdldHJlY2lwZaYDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZQpzdW1tYXJ5OiAnR2V0IGEgc2luZ2xlIGNyYWZ0aW5nIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHJlY2lwZSB3aG9zZSBvdXRwdXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gaXRlbSBpZCwgaW5jbHVkaW5nIGl0cyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkaXNwbGF5IGNyYWZ0aW5nIHJlcXVpcmVtZW50cy4AAFbVIXWzYgpnZXRyZWNpcGVzrAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlcwpzdW1tYXJ5OiAnTGlzdCBjcmFmdGluZyByZWNpcGVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyBhIHBhZ2luYXRlZCBsaXN0IG9mIGNyYWZ0aW5nIHJlY2lwZXMgc3RhcnRpbmcgYXQgdGhlIHByb3ZpZGVkIGxvd2VyIGJvdW5kIG91dHB1dCBpdGVtIGlkLCB1cCB0byB0aGUgc3BlY2lmaWVkIGxpbWl0LiBFYWNoIGVudHJ5IGluY2x1ZGVzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLgAAzgZhdbNiCmdldHJlc2NhdHOeAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNjYXRzCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiByZXNvdXJjZSBjYXRlZ29yeSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChvcmUsIGdhcywgcmVnb2xpdGgsIGJpb21hc3MsIGNyeXN0YWwpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSByZXNvdXJjZSBzdWJ0eXBlIGlkZW50aWZpZXJzLgCw2ldhdbNiC2dldHJlc2VydmVz/AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzZXJ2ZXMKc3VtbWFyeTogJ0dldCBjdXJyZW50IHJlc2VydmUgbW9kaWZpY2F0aW9ucyBhdCBhIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBjaGFpbidzIG1vZGlmaWNhdGlvbnMgdG8gZGVyaXZlZCByZXNlcnZlcyBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZSBmb3IgdGhlIGN1cnJlbnQgZXBvY2ggYXMgYSBsaXN0IG9mIHtzdHJhdHVtLCByZW1haW5pbmd9IHBhaXJzLiBTdHJhdGEgbm90IHByZXNlbnQgaW4gdGhlIHJlc3BvbnNlIHVzZSB0aGVpciBkZXJpdmVkIGluaXRpYWwgcmVzZXJ2ZS4gQ29tcG9zZSB3aXRoIFNESyBkZXJpdmF0aW9uIHRvIGdldCB0aGUgZnVsbCBwZXItbG9jYXRpb24gc3RyYXRhIHZpZXcugBW6mmJ1s2IMZ2V0cmVzb3VyY2VzhwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzb3VyY2VzCnN1bW1hcnk6ICdHZXQgYWxsIHJlc291cmNlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgcmVzb3VyY2VzLCBpbmNsdWRpbmcgZWFjaCByZXNvdXJjZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgZ2F0aGVyYWJsZSBtYXRlcmlhbHMuAAAAONOIs2IIZ2V0c2xvdHO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzbG90cwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzbG90IGxheW91dHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgc2xvdCBsYXlvdXQgZm9yIGV2ZXJ5IGVudGl0eSBpdGVtIHR5cGUsIGxpc3RpbmcgdGhlIG9yZGVyZWQgc2xvdCB0eXBlcyBhdmFpbGFibGUgZm9yIG1vZHVsZSBpbnN0YWxsYXRpb24uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZSB0eXBlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGEgZ2l2ZW4gZW50aXR5IGh1bGwuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgBUpE1eyrNiC2dldHdvcm1ob2xlAJAdnubmqullDGdyb3VwdHJhbnNpdAAAotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AKLsG5UurdAtpbXBvcnRjYXJnbwDgs8tT5UurdAxpbXBvcnRlbnRpdHkAAKqml+VLq3QLaW1wb3J0Z3JvdXAAcJU3seZLq3QMaW1wb3J0cGxheWVyALqvwurmS6t0DWltcG9ydHJlc2VydmUAAFQ2GedLq3QLaW1wb3J0c3RhdGUAAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAA0NLWJBmxhdW5jaAAAAAAAAJAMjQRsb2FkAAAAACq6rDaVCG1vdmV0aWxlAAAAiFcz6fKaCW5mdGltZ3VybLIDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5mdGltZ3VybApzdW1tYXJ5OiAnR2V0IE5GVCBpbWFnZSBVUkwgZm9yIGEgY2FyZ28gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGltYWdlIFVSTCB0aGUgY29udHJhY3QgZW1pdHMgZm9yIGEgZ2l2ZW4gY2FyZ28gaXRlbSwgb3B0aW9uYWxseSBzY29wZWQgdG8gYSBsb2NhdGlvbi4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBmZXRjaCB0aGUgY2Fub25pY2FsIGFydHdvcmsgZm9yIGFuIGl0ZW0gb3IgcGFja2VkIGVudGl0eS4AAAAA+OUynQZub3RpZnmKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBub3RpZnkKc3VtbWFyeTogJ1Rhc2sgbGlmZWN5Y2xlIG5vdGlmaWNhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbm90aWZpZXMgZW50aXR5IG93bmVycyBvZiB0YXNrIGxpZmVjeWNsZSBldmVudHMgKHJlc29sdmVkLCBjYW5jZWxsZWQpLiBDYWxsZWQgaW5saW5lIHdoZW4gdGFza3MgY2hhbmdlIHN0YXRlLiBVc2VzIHJlcXVpcmVfcmVjaXBpZW50IHRvIGVuYWJsZSBvZmYtY2hhaW4gbW9uaXRvcmluZyB2aWEgYWN0aW9uIHRyYWNlcy4AAGXXIIVMrApwbGFjZWNhcmdvyQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcGxhY2VjYXJnbwpzdW1tYXJ5OiAnUmVzdG9yZSBORlQgY2FyZ28gb250byBhIGhvc3QgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzdG9yZXMgdGhlIGNhcmdvIHJlY29yZGVkIGluIGFuIHVud3JhcHBlZCBORlQgb250byBhIGhvc3QgZW50aXR5LiBWYWxpZGF0ZXMgaG9zdCBvd25lcnNoaXAsIGxvYWRlcnMsIGFuZCByZW1haW5pbmcgY2FwYWNpdHksIGRlc2VyaWFsaXplcyB0aGUgTkZUJ3MgaXRlbSBkYXRhLCBhbmQgYXBwZW5kcyBhbiB1bndyYXAgdGFzayB0byBkZWxpdmVyIHRoZSBjYXJnbyB0byB0aGUgaG9zdC4gVGhlIHBsYXRmb3JtIGNvbnRyYWN0IGNyZWRpdHMgdGhlIGRlcG9zaXQgcmVmdW5kIGFuZCBidXJucyB0aGUgYXNzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AfHZ5KoVMrAtwbGFjZWVudGl0ecAELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBsYWNlZW50aXR5CnN1bW1hcnk6ICdNYXRlcmlhbGl6ZSBhIHBhY2tlZC1lbnRpdHkgTkZUIGFzIGEgbGl2ZSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBFbXBsYWNlcyBhIGxpdmUgb3JiaXRhbCB2ZXNzZWwgKHNoaXAgb3IgY29udGFpbmVyKSBmcm9tIGl0cyBwYWNrZWQtZW50aXR5IE5GVCBkYXRhIGF0IHRoZSByZWNvcmRlZCB3cmFwIG9yaWdpbiwgdGhlbiBxdWV1ZXMgdHJhdmVsIGFuZCByZWNoYXJnZSB0YXNrcyB0byBkZWxpdmVyIGl0IHRvIHRoZSB0YXJnZXQgbmV4dXMgYXQgZnVsbCBlbmVyZ3kuIFRoZSBwbGF0Zm9ybSBjb250cmFjdCBjcmVkaXRzIHRoZSBkZXBvc2l0IHJlZnVuZCBhbmQgYnVybnMgdGhlIGFzc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAil3TkLoIcmVjaGFyZ2XNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWNoYXJnZQpzdW1tYXJ5OiAnUmVjaGFyZ2Ugc2hpcCBlbmVyZ3knCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNjaGVkdWxlIGEgcmVjaGFyZ2UgdGFzayBmb3IgYW4gZW50aXR5IHRvIHJlc3RvcmUgZW5lcmd5IHRvIGZ1bGwgY2FwYWNpdHkuIFRoZSByZWNoYXJnZSBkdXJhdGlvbiBkZXBlbmRzIG9uIGN1cnJlbnQgZW5lcmd5IGxldmVsIGFuZCByZWNoYXJnZSByYXRlLuCzy1M1fJe6DHJlZnJzaGVudGl0ebgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlZnJzaGVudGl0eQpzdW1tYXJ5OiAnUmVmcmVzaCBkZXJpdmVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVjb21wdXRlIGRlcml2ZWQgZmllbGRzIG9uIGFuIGVudGl0eSBmcm9tIGl0cyBjdXJyZW50IGNhcmdvIGFuZCBtb2R1bGVzLCByZWZyZXNoaW5nIGNhcGFiaWxpdHkgc3RhdHMgYW5kIGNhcmdvIG1hc3MuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBVc2VkIHRvIHJlY29uY2lsZSBkZXJpdmVkIHN0YXRlIGFmdGVyIGRhdGEgbWlncmF0aW9ucyBvciBjb250cmFjdCB1cGdyYWRlcy6gIjKXqk2lugxyZW1vdmVvcmFjbGUAAAAAAChpproGcmVuYW1lAAAAAEDtSLG6B3Jlc29sdmXQAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuAECMRu1IsboKcmVzb2x2ZWFsbAAAAAAARKO2ugZyZXZlYWwAAAAAKupEpbwIcm1tb2R1bGW8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW1vZHVsZQpzdW1tYXJ5OiAnUmVtb3ZlIGEgbW9kdWxlIGZyb20gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgYW4gaW5zdGFsbGVkIG1vZHVsZSBmcm9tIGEgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgaXMgcmV0dXJuZWQgdG8gY2FyZ28uIEZhaWxzIGlmIHRoZSBlbnRpdHkgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY2FyZ28gY2FwYWNpdHkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgbW9kdWxlLgAAAGyhvKa8CHJtbmZ0Y2ZnoQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1uZnRjZmcKc3VtbWFyeTogJ1JlbW92ZSBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIHRoZSBBdG9taWNBc3NldHMgdGVtcGxhdGUgbWFwcGluZyBmb3IgdGhlIHNwZWNpZmllZCBpdGVtIGlkIGZyb20gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBBZnRlciByZW1vdmFsIHRoZSBpdGVtIGNhbiBubyBsb25nZXIgYmUgd3JhcHBlZCBvciB1bndyYXBwZWQgdW50aWwgYSBuZXcgbWFwcGluZyBpcyBzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAMDpUoqywglzZXRjb29yZHMAAABgC+U1s8IJc2V0bmZ0Y2ZnxAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2V0bmZ0Y2ZnCnN1bW1hcnk6ICdTZXQgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJpbmQgYW4gaXRlbSBpZCB0byBhbiBBdG9taWNBc3NldHMgdGVtcGxhdGUgaWQgYW5kIHNjaGVtYSBuYW1lLiBVc2VkIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGNvbnRyYWN0IG1pbnRzIGFuZCByZWNvZ25pemVzIE5GVHMgZm9yIGEgZ2l2ZW4gaXRlbS4gSW5zZXJ0cyBhIG5ldyBtYXBwaW5nIGlmIG9uZSBkb2VzIG5vdCBleGlzdCwgb3IgdXBkYXRlcyB0aGUgZXhpc3RpbmcgbWFwcGluZy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LpAibVjdlrPCDHNldHRocmVzaG9sZAAAMqaomsuzwgtzZXR3cmFwY29zdAAAgFKrmsuzwgpzZXR3cmFwZmVlAAAAoOwaxGnGCXN0b3djYXJnb9UFLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHN0b3djYXJnbwpzdW1tYXJ5OiAnUmVzZXJ2ZSBhIGNhcmdvIHN0YWNrIGZvciB3cmFwcGluZyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIFJlc2VydmVzIGFuZCBjb25zdW1lcyBhIGNhcmdvIHN0YWNrIG9uIGEgbGl2ZSBlbnRpdHkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZULiBWYWxpZGF0ZXMgZW50aXR5IG93bmVyc2hpcCwgbG9hZGVycywgYW5kIHByZXNlbmNlIGF0IHRoZSBuZXh1cywgYW5kIGNvbmZpcm1zIHRoZSB0YXJnZXQgY2FyZ28gc3RhY2sgaXMgYXZhaWxhYmxlIGFuZCBub3QgcmVzZXJ2ZWQgYnkgYSBwZW5kaW5nIHRhc2suIENvbXB1dGVzIHRoZSB3cmFwIGNvc3QgYW5kIGZlZSwgZGViaXRzIHRoZW0gZnJvbSB0aGUgb3duZXIncyBwbGF0Zm9ybSBkZXBvc2l0IGJhbGFuY2UsIGRlcml2ZXMgdGhlIE5GVCdzIGltbXV0YWJsZSBkYXRhLCBhbmQgbWludHMgdGhlIE5GVCBpbmxpbmUgYXMgdGhlIGdhbWUgY29udHJhY3QgYmVmb3JlIGNvbnN1bWluZyB0aGUgY2FyZ28uIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AgM8uT8VpxgpzdG93ZW50aXR5mQUtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Rvd2VudGl0eQpzdW1tYXJ5OiAnUmVzZXJ2ZSBhbiBlbnRpdHkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzZXJ2ZXMgYSB3aG9sZSBlbnRpdHkgKHNoaXAsIGNvbnRhaW5lciwgb3IgcGxhbmV0YXJ5IHN0cnVjdHVyZSkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZULiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIGVtcHR5IGNhcmdvIGFuZCBubyBzY2hlZHVsZWQgdGFza3MuIENvbXB1dGVzIHRoZSB3cmFwIGNvc3QgYW5kIGZlZSwgZGViaXRzIHRoZW0gZnJvbSB0aGUgb3duZXIncyBwbGF0Zm9ybSBkZXBvc2l0IGJhbGFuY2UsIGRlcml2ZXMgdGhlIGVudGl0eSBORlQncyBpbW11dGFibGUgZGF0YSwgbWludHMgdGhlIE5GVCBpbmxpbmUgYXMgdGhlIGdhbWUgY29udHJhY3QsIGFuZCBlcmFzZXMgdGhlIGVudGl0eSBmcm9tIHRoZSB3b3JsZC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgCAijpRWQ3HCnN3YXBtb2R1bGUAAAAAKrpcDccIc3dhcHRpbGUAAAAAIDs8zc0HdHJhbnNpdAAAAAAARLXNzQZ0cmF2ZWz7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uAFTW9Ea1zc0LdHJhdmVscm91dGUAAAAAnsaq0tQIdW5kZXBsb3nnBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1bmRlcGxveQpzdW1tYXJ5OiAnUGFjayBhIGRlcGxveWVkIGVudGl0eSBpbnRvIGEgaG9zdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUGFjayBhbiBlbnRpdHkgaW50byBhIGhvc3QgZW50aXR5J3MgY2FyZ28gYXMgYSBwYWNrZWQtZW50aXR5IGl0ZW0uIEhvc3QgYW5kIHRhcmdldCBtdXN0IHNoYXJlIHRoZSBzYW1lIG93bmVyIGFuZCBjb29yZGluYXRlcywgdGhlIGhvc3QgbXVzdCBoYXZlIGxvYWRlcnMgYW5kIGVub3VnaCBjYXBhY2l0eSBmb3IgdGhlIHBhY2tlZCBtYXNzLCBhbmQgdGhlIHRhcmdldCBtdXN0IGJlIGlkbGUgd2l0aCBlbXB0eSBjYXJnby4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBhbmQgc2NoZWR1bGVzIHVuZGVwbG95IHRhc2tzIG9uIGJvdGggZW50aXRpZXM7IG9uIHJlc29sdXRpb24gdGhlIHRhcmdldCBpcyBlcmFzZWQgYW5kIHRoZSBwYWNrZWQgZW50aXR5IGlzIGFkZGVkIHRvIHRoZSBob3N0J3MgY2FyZ28uIEludmVyc2Ugb2YgZGVwbG95LgAAAAAkQ+PUBnVubG9hZAAAAABAJXNZ1Qd1cGdyYWRlAAAAAAAAUK/hBHdhcnCfAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3YXJwCnN1bW1hcnk6ICdXYXJwIHRvIGEgZGVzdGluYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbnRseSB0ZWxlcG9ydCBhbiBlbnRpdHkgdG8gYSBkZXN0aW5hdGlvbiBzeXN0ZW0uIFJlcXVpcmVzIHdhcnAgY2FwYWJpbGl0eSwgZnVsbCBlbmVyZ3ksIGVtcHR5IGNhcmdvLCBhbmQgYW4gZW1wdHkgc2NoZWR1bGUuIFRoZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGEgdmFsaWQgc3lzdGVtIHdpdGhpbiB3YXJwIHJhbmdlLiBSZXNvbHZlcyBpbW1lZGlhdGVseSBhcyBhIHplcm8tZHVyYXRpb24gdGFzay4AAAAAAKCq4wR3aXBlsgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tEgAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAAABg6UxEA2k2NAAACWNsYWltX3JvdwAAAOCqjHVEA2k2NAAAC2NsdXN0ZXJfcm93AAAAAGQnJUUDaTY0AAAKY29tbWl0X3JvdwAAAAD47PJUA2k2NAAACmVudGl0eV9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAALAK++zyVANpNjQAAA5lbnRpdHlfc2VxX3JvdwAAAACAhmhVA2k2NAAACWVwb2NoX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAGALqYjMpQNpNjQAABFvcmFjbGVfY29uZmlnX3JvdwAAAACriMylA2k2NAAACm9yYWNsZV9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAARKO2ugNpNjQAAApyZXZlYWxfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABza1JUzeUDaTY0AAAOd3JhcGNvbmZpZ19yb3cAAAAZU1TN5QNpNjQAAAx3cmFwY29zdF9yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAAQAAAyDTWFJ0+DHRhc2tfcmVzdWx0cwAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAADINFbpTEQMdGFza19yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAADbtIpUoMdGFza19yZXN1bHRzAAAAAHgaq0oMdGFza19yZXN1bHRzAIDPLk+FsEoGc3RyaW5nAAAAAFzVsmEMdGFza19yZXN1bHRzAMBVGeuIsmILY2x1c3Rlcl9yb3cAAGBuTYqyYgtnYW1lX2NvbmZpZwBAdphWlbJiDmV4dGVuZGVkX2Fzc2V0ABSaJmOXsmIGdWludDY0AFQ8jrmosmIIdWludDE2W10AAMAR5amyYgtlbnVtX3Jlc3VsdACwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mb5CnuzVTurJiEGZvb3RwcmludF9yZXN1bHQATDZJquyyYg9pdGVtZGF0YV9yZXN1bHQAAE5OquyyYg9pdGVtX2lkc19yZXN1bHQAAABYquyyYgppdGVtc19pbmZvAFT1WarssmIFdWludDiAVfVZquyyYgtlbnVtX3Jlc3VsdABMVjJNB7NiEGtpbmRfbWV0YV9yZXN1bHQAJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZACwqj4nKrNiC2VudW1fcmVzdWx0AABWUScqs2IObW9kdWxlc19yZXN1bHQAAPDnGjWzYgtuZWFyYnlfaW5mbwCAwubkNbNiCHN0cmluZ1tdAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mb6CyyfjRW7NiD3Byb2plY3RlZF9zdGF0ZQAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AAAAONOIs2IVZW50aXR5X2xheW91dHNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQBUpE1eyrNiDXdvcm1ob2xlX2luZm+QHZ7m5qrpZQx0YXNrX3Jlc3VsdHMAotrm5qrpZQx0YXNrX3Jlc3VsdHMAAAAAANCwaQtjaGVja3N1bTI1NgAAAECE0rBpC2NoZWNrc3VtNTEyAAAAADQ0tYkMdGFza19yZXN1bHRzAAAAAACQDI0MdGFza19yZXN1bHRzAAAAKrqsNpUMdGFza19yZXN1bHRzAACIVzPp8poGc3RyaW5nAABl1yCFTKwMdGFza19yZXN1bHRzAHx2eSqFTKwMdGFza19yZXN1bHRzAAAAil3TkLoMdGFza19yZXN1bHRzAAAAQO1IsboPcmVzb2x2ZV9yZXN1bHRzAECMRu1IsboScmVzb2x2ZWFsbF9yZXN1bHRzAACg7BrEacYMdGFza19yZXN1bHRzAIDPLk/FacYMdGFza19yZXN1bHRzAAAAKrpcDccMdGFza19yZXN1bHRzAAAAIDs8zc0MdGFza19yZXN1bHRzAAAAAES1zc0MdGFza19yZXN1bHRzAFTW9Ea1zc0MdGFza19yZXN1bHRzAAAAnsaq0tQMdGFza19yZXN1bHRzAAAAACRD49QMdGFza19yZXN1bHRzAAAAQCVzWdUMdGFza19yZXN1bHRzAAAAAABQr+EMdGFza19yZXN1bHRz');
443
+ const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDjWAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQxidWlsZGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYJYnVpbGRwbG90AAIKYnVpbGRlcl9pZAZ1aW50NjQHcGxvdF9pZAZ1aW50NjQGY2FuY2VsAAMCaWQGdWludDY0CGxhbmVfa2V5BXVpbnQ4BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwljYW5jZWxqb2IAAgZqb2JfaWQGdWludDY0B3NoaXBfaWQGdWludDY0CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8PY2l2aWNjb25maWdfcm93AAELY2l2aWNfb3duZXIEbmFtZQljbGFpbV9yb3cAAQVvd25lcgRuYW1lCGNsYWltam9iAAIGam9iX2lkBnVpbnQ2NAdzaGlwX2lkBnVpbnQ2NAljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4BmNvbW1pdAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZjb21taXQLY2hlY2tzdW0yNTYKY29tbWl0X3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8IY291cGxpbmcAAwtjb3VudGVycGFydAplbnRpdHlfcmVmBGhvbGQGdWludDY0BGtpbmQFdWludDgFY3JhZnQABgJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwxjcmFmdGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYIY3JhZnRqb2IABgdzaGlwX2lkBnVpbnQ2NAt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OAlyZWNpcGVfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgZpbnB1dHMMY2FyZ29faXRlbVtdCWRlbGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQADAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmBHNsb3QNY2x1c3Rlcl9zbG90PwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDMyCHJlY2hhcmdlBnVpbnQzMhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MzIPZW50aXR5X2RlZmF1bHRzAAILd2FyZWhvdXNlX3oGdWludDE2C2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAXBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXRlbV9pZAZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDMyPwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPw5nYXRoZXJlcl9sYW5lcw9nYXRoZXJlcl9sYW5lW10NY3JhZnRlcl9sYW5lcw5jcmFmdGVyX2xhbmVbXQ1idWlsZGVyX2xhbmVzDmJ1aWxkZXJfbGFuZVtdDGxvYWRlcl9sYW5lcw1sb2FkZXJfbGFuZVtdCGxhdW5jaGVyD2xhdW5jaGVyX3N0YXRzPwVsYW5lcwZsYW5lW10FaG9sZHMGaG9sZFtdDWVudGl0eV9sYXlvdXQAAw5lbnRpdHlfaXRlbV9pZAZ1aW50MTYFc2xvdHMKc2xvdF9kZWZbXQ1iYXNlX2h1bGxtYXNzBnVpbnQzMhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAAQhlbnRpdGllcw9lbnRpdHlfbGF5b3V0W10KZW50aXR5X3JlZgACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAplbnRpdHlfcm93AAwCaWQGdWludDY0BW93bmVyBG5hbWUEa2luZARuYW1lB2l0ZW1faWQGdWludDE2BG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kHdWludDMyPwljYXJnb21hc3MGdWludDMyB21vZHVsZXMObW9kdWxlX2VudHJ5W10FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ5lbnRpdHlfc2VxX3JvdwABB25leHRfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAZ1aW50MzIQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdC2VudW1fbWVtYmVyAAIFdmFsdWUFdWludDgEbmFtZQZzdHJpbmcLZW51bV9yZXN1bHQAAQdtZW1iZXJzDWVudW1fbWVtYmVyW10JZXBvY2hfcm93AAQFZXBvY2gGdWludDY0Cm9yYWNsZV9pZHMGbmFtZVtdCXRocmVzaG9sZAV1aW50OARzZWVkC2NoZWNrc3VtMjU2DGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQQZm9vdHByaW50X3Jlc3VsdAABBWNlbGxzC2dyaWRfY2VsbFtdC2ZvcmNlcmV2ZWFsAAEFZXBvY2gGdWludDY0C2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAUJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyBHNsb3QGdWludDg/DWdhdGhlcmVyX2xhbmUABQpzbG90X2luZGV4BXVpbnQ4BXlpZWxkBnVpbnQxNgVkcmFpbgZ1aW50MzIFZGVwdGgGdWludDE2Cm91dHB1dF9wY3QGdWludDE2CmdhdGhlcnBsYW4ABglzb3VyY2VfaWQGdWludDY0DmRlc3RpbmF0aW9uX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIIcmVjaGFyZ2UEYm9vbAVzbG90cwVieXRlcwxnZW5lc2lzZmxlZXQAAQhlbnRpdGllcwxlbnRpdHlfcm93W10KZ2V0Y2x1c3RlcgABBmh1Yl9pZAZ1aW50NjQJZ2V0Y29uZmlnAAAKZ2V0ZGVwb3NpdAACBW93bmVyBG5hbWUIYXNzZXRfaWQGdWludDY0C2dldGRpc3RhbmNlAAQCYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ2V0ZWxpZ2libGUAAgZjb29yZHMLY29vcmRpbmF0ZXMHc3RyYXR1bQZ1aW50MTYJZ2V0ZW50Y2xzAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQMZ2V0Zm9vdHByaW50AAEHaXRlbV9pZAZ1aW50MTYLZ2V0aXRlbWRhdGEAAApnZXRpdGVtaWRzAAAIZ2V0aXRlbXMAAAtnZXRpdGVtdHlwZQABB2l0ZW1faWQGdWludDE2DGdldGl0ZW10eXBlcwAAB2dldGpvYnMAAQt3b3Jrc2hvcF9pZAZ1aW50NjQLZ2V0a2luZG1ldGEAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRiYXNlAAAKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQxnZXRwcm9qc3RhdGUAAgllbnRpdHlfaWQGdWludDY0CnRhc2tfY291bnQGdWludDg/CWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAApnZXRzZXJ2aWNlAAELd29ya3Nob3BfaWQGdWludDY0CGdldHNsb3RzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dldHdvcm1ob2xlAAIBeAVpbnQ2NAF5BWludDY0CWdyaWRfY2VsbAACAmd4BGludDgCZ3kEaW50OAxncm91cHRyYW5zaXQABQhlbnRpdGllcwxlbnRpdHlfcmVmW10CYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwAECGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQzMhBjYXBhY2l0eV9ieV90aWVyEWhhdWxlcl90aWVyX2NhcFtdD2hhdWxlcl90aWVyX2NhcAACBHRpZXIFdWludDgIY2FwYWNpdHkFdWludDgEaG9sZAAFAmlkBnVpbnQ2NARraW5kBXVpbnQ4C2NvdW50ZXJwYXJ0CmVudGl0eV9yZWYFdW50aWwKdGltZV9wb2ludA1pbmNvbWluZ19tYXNzBnVpbnQzMgtpbXBvcnRjYXJnbwABA3JvdwljYXJnb19yb3cKaW1wb3J0Y2VsbAAEBHJvb3QGdWludDY0Amd4BGludDgCZ3kEaW50OAllbnRpdHlfaWQGdWludDY0DGltcG9ydGVudGl0eQABA3JvdwplbnRpdHlfcm93C2ltcG9ydGdyb3VwAAEDcm93D2VudGl0eWdyb3VwX3JvdwxpbXBvcnRwbGF5ZXIAAQVvd25lcgRuYW1lDWltcG9ydHJlc2VydmUAAgtlcG9jaF9zY29wZQZ1aW50MzIDcm93C3Jlc2VydmVfcm93C2ltcG9ydHN0YXRlAAEDcm93CXN0YXRlX3JvdwhpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdC2pvYl9yZWNlaXB0AAMGam9iX2lkBnVpbnQ2NAlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludAdqb2Jfcm93AAwCaWQGdWludDY0CHdvcmtzaG9wBnVpbnQ2NAZzb2NrZXQFdWludDgFb3duZXIEbmFtZQdzaGlwX2lkBnVpbnQ2NAZjb29yZHMLY29vcmRpbmF0ZXMJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzILZW5lcmd5X3BhaWQGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQtqb2JzX3Jlc3VsdAABBGpvYnMJam9iX3Jvd1tdBGpvaW4AAQdhY2NvdW50BG5hbWUQa2luZF9tZXRhX3Jlc3VsdAACBWtpbmRzD2tpbmRfbWV0YV9yb3dbXQl0ZW1wbGF0ZXMTdGVtcGxhdGVfbWV0YV9yb3dbXQ1raW5kX21ldGFfcm93AAUEa2luZARuYW1lDmNsYXNzaWZpY2F0aW9uBXVpbnQ4EGNhcGFiaWxpdHlfZmxhZ3MFdWludDgHel9jb29yZAZ1aW50MzINZGVmYXVsdF9sYWJlbAZzdHJpbmcEbGFuZQACCGxhbmVfa2V5BXVpbnQ4CHNjaGVkdWxlCHNjaGVkdWxlBmxhdW5jaAADC2xhdW5jaGVyX2lkBnVpbnQ2NApjYXRjaGVyX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10ObGF1bmNoZXJfc3RhdHMAAwtjaGFyZ2VfcmF0ZQZ1aW50MTYIdmVsb2NpdHkGdWludDE2BWRyYWluBnVpbnQxNgRsb2FkAAMCaWQGdWludDY0B2Zyb21faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQtsb2FkZXJfbGFuZQAECnNsb3RfaW5kZXgFdWludDgEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNhBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwRzaXplBnVpbnQxNg1sb2NhdGlvbl9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sC2lzX3dvcm1ob2xlBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1pZ3JhdGV0YXNrcwABBWJhdGNoBnVpbnQzMgdtaWdzd2FwAAEFYmF0Y2gGdWludDMyDG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQzMghtb3ZldGlsZQAFBmh1Yl9pZAZ1aW50NjQHZnJvbV9neARpbnQ4B2Zyb21fZ3kEaW50OAV0b19neARpbnQ4BXRvX2d5BGludDgLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MzIHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8ObmZ0X2NhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIQbmZ0X2l0ZW1fcGF5bG9hZAACBGl0ZW0ObmZ0X2NhcmdvX2l0ZW0IbG9jYXRpb24MY29vcmRpbmF0ZXM/Dm5mdF9zY2hlbWFfZGVmAAILc2NoZW1hX25hbWUEbmFtZQZmaWVsZHMOc2NoZW1hX2ZpZWxkW10QbmZ0X3RlbXBsYXRlX2RlZgADB2l0ZW1faWQGdWludDE2C3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzINbmZ0Y29uZmlnX3JvdwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJbmZ0aW1ndXJsAAIEaXRlbQpjYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQRb3JhY2xlX2NvbmZpZ19yb3cAAQl0aHJlc2hvbGQFdWludDgKb3JhY2xlX3JvdwABAmlkBG5hbWUNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NApwbGFjZWNhcmdvAAMFb3duZXIEbmFtZQdob3N0X2lkBnVpbnQ2NAhhc3NldF9pZAZ1aW50NjQLcGxhY2VlbnRpdHkAAwVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA90YXJnZXRfbmV4dXNfaWQGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lD3Byb2plY3RlZF9zdGF0ZQARBW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10NYnVpbGRlcl9sYW5lcw5idWlsZGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8EdGllcgV1aW50OAhyZWNoYXJnZQABAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAgdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UACA5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10Pc291cmNlX3N1YmNsYXNzB3VpbnQxNj8OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdDHJlZnJzaGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQMcmVtb3Zlb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUGcmVuYW1lAAICaWQGdWludDY0BG5hbWUGc3RyaW5nC3Jlc2VydmVfcm93AAUCaWQGdWludDY0CGNvb3JkX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyCmxhc3RfYmxvY2sUYmxvY2tfdGltZXN0YW1wX3R5cGUHcmVzb2x2ZQACAmlkBnVpbnQ2NAVjb3VudAd1aW50NjQ/D3Jlc29sdmVfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ5yZXNvbHZlZF9jb3VudAZ1aW50MzIUbmV3X3NjaGVkdWxlX3N0YXJ0ZWQLdGltZV9wb2ludD8LZW50aXR5Z3JvdXAHdWludDY0Pw1ncm91cF9tZW1iZXJzFkJfdmVjdG9yX2VudGl0eV9yZWZfRT8KcmVzb2x2ZWFsbAABBW93bmVyBG5hbWUScmVzb2x2ZWFsbF9yZXN1bHRzAAIHc2Nhbm5lZAZ1aW50MzIIcmVzb2x2ZWQGdWludDMyDXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdBnJldmVhbAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZyZXZlYWwLY2hlY2tzdW0yNTYKcmV2ZWFsX3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGcmV2ZWFsC2NoZWNrc3VtMjU2CHJtbW9kdWxlAAMJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgKdGFyZ2V0X3JlZgpjYXJnb19yZWY/CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYOcm91dGVfd2F5cG9pbnQAAgF4BWludDY0AXkFaW50NjQIc2NoZWR1bGUAAgdzdGFydGVkCnRpbWVfcG9pbnQFdGFza3MGdGFza1tdDHNjaGVtYV9maWVsZAACBG5hbWUGc3RyaW5nCmZpZWxkX3R5cGUGc3RyaW5nC3NlcnZpY2Vfcm93AAIGZW50aXR5BnVpbnQ2NAdzb2NrZXRzEHNlcnZpY2Vfc29ja2V0W10Oc2VydmljZV9zb2NrZXQAAQRvcGVuBGJvb2wIc2V0Y2l2aWMAAQdhY2NvdW50BG5hbWUJc2V0Y29vcmRzAAMJZW50aXR5X2lkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQlzZXRzb2NrZXQAAwt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OARvcGVuBGJvb2wMc2V0dGhyZXNob2xkAAEJdGhyZXNob2xkBXVpbnQ4C3NldHdyYXBjb3N0AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NApzZXR3cmFwZmVlAAIHZmVlX3BjdAZ1aW50MTYLZmVlX2FjY291bnQEbmFtZQdzaHV0dGxlAAQHY2FycmllcgZ1aW50NjQHZnJvbV9pZAZ1aW50NjQFdG9faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQhzbG90X2RlZgADBHR5cGUFdWludDgKb3V0cHV0X3BjdAZ1aW50MTYIbWF4X3RpZXIFdWludDgSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cAAwdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNlZWQLY2hlY2tzdW0yNTYJc3Rvd2NhcmdvAAUFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CnN0b3dlbnRpdHkAAwVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0DHN0cmF0dW1fZGF0YQACB3N0cmF0dW0Mc3RyYXR1bV9pbmZvBXN0YXRzDnJlc291cmNlX3N0YXRzDHN0cmF0dW1faW5mbwAFB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CHJpY2huZXNzBnVpbnQxNgdyZXNlcnZlBnVpbnQzMgtyZXNlcnZlX21heAZ1aW50MzIRc3RyYXR1bV9yZW1haW5pbmcAAwdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyCmxhc3RfYmxvY2sUYmxvY2tfdGltZXN0YW1wX3R5cGUKc3dhcG1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4Cm1vZHVsZV9yZWYJY2FyZ29fcmVmCHN3YXB0aWxlAAUGaHViX2lkBnVpbnQ2NARhX2d4BGludDgEYV9neQRpbnQ4BGJfZ3gEaW50OARiX2d5BGludDgEdGFzawAKBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQljb3VwbGluZ3MKY291cGxpbmdbXQdzdWJqZWN0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDMyPw50YXJnZXRfaXRlbV9pZAd1aW50MTY/CnRhc2tfZXZlbnQACgpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgGdWludDMyBHRhc2sEdGFzawlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludApuZXdfZW5lcmd5B3VpbnQzMj8IbGFuZV9rZXkFdWludDgMdGFza19yZXN1bHRzAAEIZW50aXRpZXMSZW50aXR5X3Rhc2tfaW5mb1tdEXRlbXBsYXRlX21ldGFfcm93AAMHaXRlbV9pZAZ1aW50MTYEa2luZARuYW1lDWRpc3BsYXlfbGFiZWwGc3RyaW5nB3RyYW5zaXQABQJpZAZ1aW50NjQCYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQGdHJhdmVsAAQCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sCnRyYXZlbHBsYW4AAwhlbnRpdGllcwxlbnRpdHlfcmVmW10Jd2F5cG9pbnRzEHJvdXRlX3dheXBvaW50W10IcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABQJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcVbmZ0X2l0ZW1fcGF5bG9hZF90eXBlEG5mdF9pdGVtX3BheWxvYWQIdW5kZXBsb3kAAgdob3N0X2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0BnVubG9hZAADAmlkBnVpbnQ2NAV0b19pZAZ1aW50NjQFaXRlbXMMY2FyZ29faXRlbVtdB3VwZ3JhZGUABQpidWlsZGVyX2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0DnRhcmdldF9pdGVtX2lkBnVpbnQxNgZpbnB1dHMMY2FyZ29faXRlbVtdBHNsb3QGdWludDg/BHdhcnAAAwJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADXdvcm1ob2xlX2luZm8AAwZjb29yZHMLY29vcmRpbmF0ZXMLaXNfd29ybWhvbGUEYm9vbAtkZXN0aW5hdGlvbgtjb29yZGluYXRlcw53cmFwY29uZmlnX3JvdwACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUMd3JhcGNvc3Rfcm93AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NG8AAFBRJypTMglhZGRtb2R1bGXHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRtb2R1bGUKc3VtbWFyeTogJ0luc3RhbGwgYSBtb2R1bGUgaW50byBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbGwgYSBtb2R1bGUgZnJvbSBjYXJnbyBpbnRvIGEgbW9kdWxlIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIHR5cGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBzbG90IHR5cGUuIFRoZSBtb2R1bGUgaXRlbSBpcyByZW1vdmVkIGZyb20gY2FyZ28gdXBvbiBpbnN0YWxsYXRpb24uAAAAWHc1UzIIYWRkbmV4dXOnAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRuZXh1cwpzdW1tYXJ5OiAnQWRkIGEgbmV4dXMgbG9jYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNyZWF0ZSBhIG5ldyBuZXh1cyBlbnRpdHkgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBOZXh1c2VzIGFyZSBvd25lZCBieSB0aGUgY29udHJhY3QgYW5kIHNlcnZlIGFzIGZpeGVkIGdhdGhlcmluZyBwb2ludHMgd2hlcmUgcGxheWVycyBjYW4gd3JhcCwgdW53cmFwLCBkZXBsb3ksIGFuZCBvdGhlcndpc2UgaW50ZXJhY3Qgd2l0aCBORlQtYmFja2VkIGFzc2V0cy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAUBGZS1MyCWFkZG9yYWNsZQAAAAAAgDRVPAVibGVuZPwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJsZW5kCnN1bW1hcnk6ICdCbGVuZCBjYXJnbyBzdGFja3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNvbWJpbmUgbXVsdGlwbGUgY2FyZ28gc3RhY2tzIG9mIHRoZSBzYW1lIGl0ZW0gdHlwZSBpbnRvIGEgc2luZ2xlIHN0YWNrIHdpdGggbmV3IGJsZW5kZWQgc3RhdHMuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAMg01hSdPglidWlsZHBsb3QAAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuAAA49EWFpkEJY2FuY2Vsam9iAAAAAIc+6UxECGNsYWltam9iAAAAyDRW6UxECWNsYWltcGxvdABwVb4mY+lMRAxjbGFpbXN0YXJ0ZXIAAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMuAAAAh768zEUIY3JhZnRqb2IAAADw2eWpokoJZGVsZW50aXR5AAAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzkAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZml4Y2FyZ29tYXNzCnN1bW1hcnk6ICdERUJVRzogcmVjb21wdXRlIGVudGl0eSBjYXJnbyBtYXNzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgYW5kIHJld3JpdGUgYW4gZW50aXR5J3MgY2FyZ28gbWFzcyBmcm9tIGl0cyBjdXJyZW50IGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIEF2YWlsYWJsZSBmb3IgcmVwYWlyaW5nIGRyaWZ0IGJldHdlZW4gY2FjaGVkIGNhcmdvIG1hc3MgYW5kIHRoZSB0cnVlIG1hc3MgZGVyaXZlZCBmcm9tIGNhcmdvIHJvd3MuAKJRW12FLl0LZm9yY2VyZXZlYWy+BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3JjZXJldmVhbApzdW1tYXJ5OiAnREVCVUc6IGZvcmNlLWZpbmFsaXplIGFuIGVwb2NoIGZyb20gZXhpc3RpbmcgcmV2ZWFscycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRmluYWxpemUgYSBzdHVjayBlcG9jaCBieSBjb21wdXRpbmcgaXRzIHNlZWQgZnJvbSB0aGUgcmV2ZWFscyBhbHJlYWR5IHN1Ym1pdHRlZCwgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4gVGhlIHNlZWQgaXMgZGVyaXZlZCBzb2xlbHkgZnJvbSB0aGUgcHJlLWltYWdlLWxvY2tlZCByZXZlYWxzIGFscmVhZHkgb24gY2hhaW47IG5vIGFkbWluLXN1cHBsaWVkIGVudHJvcHkgaXMgaW50cm9kdWNlZC4gVXNlZCB0byB1bmJsb2NrIGVwb2NoIHByb2dyZXNzaW9uIHdoZW4gdGhlIHRocmVzaG9sZCBjYW5ub3Qgb3RoZXJ3aXNlIGJlIG1ldC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAMA0sV7VsmEKZ2F0aGVycGxhbgCQlYoLO6ymYgxnZW5lc2lzZmxlZXSpBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZW5lc2lzZmxlZXQKc3VtbWFyeTogJ01pbnQgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVtcGxhY2UgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQ6IGEgY2FsbGVyLXN1cHBsaWVkIHNldCBvZiBlbnRpdGllcyAoc2hpcHMsIHN0cnVjdHVyZXMsIGFuZCBjb250YWluZXJzKSB3cml0dGVuIHRvIHRoZSB3b3JsZCBhcy1pcy4gVmFsaWQgb25seSBkdXJpbmcgdGhlIHByZS1nZW5lc2lzIHdpbmRvdywgYmVmb3JlIGVwb2NoIDEgaXMgZmluYWxpemVkLiBUaGUgc3VwcGxpZWQgZW50aXR5IGlkcyBhcmUgaG9ub3JlZCBhbmQgdGhlIGlkIHNlcXVlbmNlIGlzIGFkdmFuY2VkIHBhc3QgdGhlbTsgaWQgMCBpcyByZXNlcnZlZCBmb3IgdGhlIEdlbmVzaXMgTmV4dXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AwFUZ64iyYgpnZXRjbHVzdGVyAAAAYG5NirJiCWdldGNvbmZpZ8oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGNvbmZpZwpzdW1tYXJ5OiAnR2V0IGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgZ2FtZSBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBkZWZhdWx0IGVudGl0eSBzdGF0cyBmb3Igd2FyZWhvdXNlcyBhbmQgY29udGFpbmVycywgYW5kIHRoZSBmdWxsIGl0ZW0gZGVmaW5pdGlvbnMgdGFibGUuAEB2mFaVsmIKZ2V0ZGVwb3NpdAAAFJomY5eyYgtnZXRkaXN0YW5jZQAAVDyOuaiyYgtnZXRlbGlnaWJsZcgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVsaWdpYmxlCnN1bW1hcnk6ICdHZXQgZWxpZ2libGUgcmVzb3VyY2UgaXRlbSBJRHMgYXQgYSBsb2NhdGlvbiBhbmQgc3RyYXR1bScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGxpc3Qgb2YgcmVzb3VyY2UgaXRlbSBJRHMgZWxpZ2libGUgdG8gYmUgZ2F0aGVyZWQgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCBzdHJhdHVtIGRlcHRoLiBJdGVtcyBhcmUgZ2F0ZWQgYnkgYm90aCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBwcm9maWxlIGFuZCB0aGUgZGVwdGggdGhyZXNob2xkIGZvciBlYWNoIHRpZXIuAADAEeWpsmIJZ2V0ZW50Y2xzjAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50Y2xzCnN1bW1hcnk6ICdHZXQgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKE9yYml0YWxWZXNzZWwsIFBsYW5ldGFyeVN0cnVjdHVyZSkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIGVudGl0eSBjbGFzcyBpZGVudGlmaWVycy4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy6Qp7s1U7qyYgxnZXRmb290cHJpbnQAAEw2SarssmILZ2V0aXRlbWRhdGGoAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtZGF0YQpzdW1tYXJ5OiAnR2V0IGZ1bGwgaXRlbSBjYXRhbG9nJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgY29tcGxldGUgaXRlbSBjYXRhbG9nIGFzIHRoZSBjb250cmFjdCBzZWVzIGl0LCBpbmNsdWRpbmcgdHlwZSwgc3VidHlwZSwgdGllciwgbWFzcywgYW5kIG90aGVyIHN0YXRpYyBtZXRhZGF0YS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgY2xpZW50cyB0byBtaXJyb3IgdGhlIGNvbnRyYWN0J3MgaXRlbSBkZWZpbml0aW9ucy4AAE5OquyyYgpnZXRpdGVtaWRzhgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWlkcwpzdW1tYXJ5OiAnR2V0IGl0ZW0gaWQgdG8gbmFtZSBtYXBwaW5ncycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgbWFwcGluZyBvZiBpdGVtIGlkIGNvbnN0YW50cyB0byB0aGVpciBjYW5vbmljYWwgc3RyaW5nIG5hbWVzLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHJlc29sdmUgbnVtZXJpYyBpdGVtIGlkcyB0byBodW1hbi1yZWFkYWJsZSBpZGVudGlmaWVycy4AAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuAFT1WarssmILZ2V0aXRlbXR5cGUAgFX1WarssmIMZ2V0aXRlbXR5cGVziAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXR5cGVzCnN1bW1hcnk6ICdHZXQgaXRlbSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgaXRlbSB0eXBlIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKHJlc291cmNlLCBjb21wb25lbnQsIG1vZHVsZSwgZW50aXR5KS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgaXRlbSB0eXBlIGlkZW50aWZpZXJzLgAAAAAf+rJiB2dldGpvYnMAAExWMk0Hs2ILZ2V0a2luZG1ldGH4Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRraW5kbWV0YQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBraW5kIG1ldGFkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZW50aXR5IGtpbmQgcmVnaXN0cnkgYW5kIHRlbXBsYXRlIHJlZ2lzdHJ5LCBpbmNsdWRpbmcgZWFjaCBraW5kJ3MgY2xhc3NpZmljYXRpb24sIGNhcGFiaWxpdHkgZmxhZ3MsIFotY29vcmRpbmF0ZSwgYW5kIGRlZmF1bHQgbGFiZWwsIHBsdXMgdGhlIG1hcHBpbmcgb2YgZW50aXR5IGl0ZW0gaWRzIHRvIGtpbmRzIHdpdGggZGlzcGxheSBsYWJlbHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gaW50ZXJwcmV0IGVudGl0eSBraW5kcyBhbmQgY2FwYWJpbGl0aWVzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGl0ZW06IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuALCqPicqs2ILZ2V0bW9kdHlwZXPWAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R0eXBlcwpzdW1tYXJ5OiAnR2V0IG1vZHVsZSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAoYW55LCBlbmdpbmUsIGdlbmVyYXRvciwgZ2F0aGVyZXIsIGxvYWRlciwgd2FycCwgY3JhZnRlciwgbGF1bmNoZXIsIHN0b3JhZ2UsIGhhdWxlcikuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIG1vZHVsZSBzdWJ0eXBlIGlkZW50aWZpZXJzIGFuZCBzbG90IGNvbXBhdGliaWxpdHkuAABWUScqs2IKZ2V0bW9kdWxlc4ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHVsZXMKc3VtbWFyeTogJ0dldCBhbGwgbW9kdWxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgbW9kdWxlcywgaW5jbHVkaW5nIGVhY2ggbW9kdWxlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBpbnN0YWxsYWJsZSBlcXVpcG1lbnQuAADw5xo1s2IJZ2V0bmVhcmJ5ygMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgYW5kIGZsaWdodCB0aW1lLgCAwubkNbNiCmdldG5mdGJhc2UAAABd0+U1s2IKZ2V0bmZ0aW5mb/ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5mdGluZm8Kc3VtbWFyeTogJ0dldCBORlQgc2NoZW1hIGFuZCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgQXRvbWljQXNzZXRzIHNjaGVtYXMgYW5kIHRlbXBsYXRlcyB0aGUgZ2FtZSBjb250cmFjdCBleHBlY3RzLCBwbHVzIHRoZSBjdXJyZW50IGBpdGVtX2lkIOKGkiAodGVtcGxhdGVfaWQsIHNjaGVtYV9uYW1lKWAgbWFwcGluZyBzdG9yZWQgaW4gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHN5bmMgYXRvbWljYXNzZXRzIHN0YXRlIHdpdGggdGhlIGNvbnRyYWN0LgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuoLLJ+NFbs2IMZ2V0cHJvanN0YXRlywMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cHJvanN0YXRlCnN1bW1hcnk6ICdHZXQgcHJvamVjdGVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHByb2plY3RlZCBzdGF0ZSBvZiBhbiBlbnRpdHkgYWZ0ZXIgYXBwbHlpbmcgdGhlIG5leHQgdGFza19jb3VudCBzY2hlZHVsZWQgdGFza3MgKG9yIGFsbCB0YXNrcyBpZiB0YXNrX2NvdW50IGlzIG9taXR0ZWQpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHByZXZpZXcgdGhlIHJlc3VsdCBvZiBhbiBlbnRpdHkncyBzY2hlZHVsZSB3aXRob3V0IHJlc29sdmluZyBvbi1jaGFpbi4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlc/wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc2VydmVzCnN1bW1hcnk6ICdHZXQgY3VycmVudCByZXNlcnZlIG1vZGlmaWNhdGlvbnMgYXQgYSBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgY2hhaW4ncyBtb2RpZmljYXRpb25zIHRvIGRlcml2ZWQgcmVzZXJ2ZXMgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGUgZm9yIHRoZSBjdXJyZW50IGVwb2NoIGFzIGEgbGlzdCBvZiB7c3RyYXR1bSwgcmVtYWluaW5nfSBwYWlycy4gU3RyYXRhIG5vdCBwcmVzZW50IGluIHRoZSByZXNwb25zZSB1c2UgdGhlaXIgZGVyaXZlZCBpbml0aWFsIHJlc2VydmUuIENvbXBvc2Ugd2l0aCBTREsgZGVyaXZhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGVyLWxvY2F0aW9uIHN0cmF0YSB2aWV3LoAVuppidbNiDGdldHJlc291cmNlc4cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc291cmNlcwpzdW1tYXJ5OiAnR2V0IGFsbCByZXNvdXJjZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIHJlc291cmNlcywgaW5jbHVkaW5nIGVhY2ggcmVzb3VyY2UncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGdhdGhlcmFibGUgbWF0ZXJpYWxzLgCAQm5fhbNiCmdldHNlcnZpY2UAAAAAONOIs2IIZ2V0c2xvdHO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzbG90cwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzbG90IGxheW91dHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgc2xvdCBsYXlvdXQgZm9yIGV2ZXJ5IGVudGl0eSBpdGVtIHR5cGUsIGxpc3RpbmcgdGhlIG9yZGVyZWQgc2xvdCB0eXBlcyBhdmFpbGFibGUgZm9yIG1vZHVsZSBpbnN0YWxsYXRpb24uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZSB0eXBlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGEgZ2l2ZW4gZW50aXR5IGh1bGwuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgBUpE1eyrNiC2dldHdvcm1ob2xlAJAdnubmqullDGdyb3VwdHJhbnNpdAAAotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AKLsG5UurdAtpbXBvcnRjYXJnbwAAQIwK5UurdAppbXBvcnRjZWxsAOCzy1PlS6t0DGltcG9ydGVudGl0eQAAqqaX5UurdAtpbXBvcnRncm91cABwlTex5kurdAxpbXBvcnRwbGF5ZXIAuq/C6uZLq3QNaW1wb3J0cmVzZXJ2ZQAAVDYZ50urdAtpbXBvcnRzdGF0ZQAAAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAADQ0tYkGbGF1bmNoAAAAAAAAkAyNBGxvYWQAgCE2WWVzmZMMbWlncmF0ZXRhc2tzAAAAAKAajpmTB21pZ3N3YXAAAAAAKrqsNpUIbW92ZXRpbGUAAACIVzPp8poJbmZ0aW1ndXJssgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbmZ0aW1ndXJsCnN1bW1hcnk6ICdHZXQgTkZUIGltYWdlIFVSTCBmb3IgYSBjYXJnbyBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgaW1hZ2UgVVJMIHRoZSBjb250cmFjdCBlbWl0cyBmb3IgYSBnaXZlbiBjYXJnbyBpdGVtLCBvcHRpb25hbGx5IHNjb3BlZCB0byBhIGxvY2F0aW9uLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBORlQgcmVuZGVyZXJzIHRvIGZldGNoIHRoZSBjYW5vbmljYWwgYXJ0d29yayBmb3IgYW4gaXRlbSBvciBwYWNrZWQgZW50aXR5LgAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAZdcghUysCnBsYWNlY2FyZ2/JBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBwbGFjZWNhcmdvCnN1bW1hcnk6ICdSZXN0b3JlIE5GVCBjYXJnbyBvbnRvIGEgaG9zdCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXN0b3JlcyB0aGUgY2FyZ28gcmVjb3JkZWQgaW4gYW4gdW53cmFwcGVkIE5GVCBvbnRvIGEgaG9zdCBlbnRpdHkuIFZhbGlkYXRlcyBob3N0IG93bmVyc2hpcCwgbG9hZGVycywgYW5kIHJlbWFpbmluZyBjYXBhY2l0eSwgZGVzZXJpYWxpemVzIHRoZSBORlQncyBpdGVtIGRhdGEsIGFuZCBhcHBlbmRzIGFuIHVud3JhcCB0YXNrIHRvIGRlbGl2ZXIgdGhlIGNhcmdvIHRvIHRoZSBob3N0LiBUaGUgcGxhdGZvcm0gY29udHJhY3QgY3JlZGl0cyB0aGUgZGVwb3NpdCByZWZ1bmQgYW5kIGJ1cm5zIHRoZSBhc3NldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgB8dnkqhUysC3BsYWNlZW50aXR5wAQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcGxhY2VlbnRpdHkKc3VtbWFyeTogJ01hdGVyaWFsaXplIGEgcGFja2VkLWVudGl0eSBORlQgYXMgYSBsaXZlIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIEVtcGxhY2VzIGEgbGl2ZSBvcmJpdGFsIHZlc3NlbCAoc2hpcCBvciBjb250YWluZXIpIGZyb20gaXRzIHBhY2tlZC1lbnRpdHkgTkZUIGRhdGEgYXQgdGhlIHJlY29yZGVkIHdyYXAgb3JpZ2luLCB0aGVuIHF1ZXVlcyB0cmF2ZWwgYW5kIHJlY2hhcmdlIHRhc2tzIHRvIGRlbGl2ZXIgaXQgdG8gdGhlIHRhcmdldCBuZXh1cyBhdCBmdWxsIGVuZXJneS4gVGhlIHBsYXRmb3JtIGNvbnRyYWN0IGNyZWRpdHMgdGhlIGRlcG9zaXQgcmVmdW5kIGFuZCBidXJucyB0aGUgYXNzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAACKXdOQughyZWNoYXJnZc0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlY2hhcmdlCnN1bW1hcnk6ICdSZWNoYXJnZSBzaGlwIGVuZXJneScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2NoZWR1bGUgYSByZWNoYXJnZSB0YXNrIGZvciBhbiBlbnRpdHkgdG8gcmVzdG9yZSBlbmVyZ3kgdG8gZnVsbCBjYXBhY2l0eS4gVGhlIHJlY2hhcmdlIGR1cmF0aW9uIGRlcGVuZHMgb24gY3VycmVudCBlbmVyZ3kgbGV2ZWwgYW5kIHJlY2hhcmdlIHJhdGUu4LPLUzV8l7oMcmVmcnNoZW50aXR5uAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVmcnNoZW50aXR5CnN1bW1hcnk6ICdSZWZyZXNoIGRlcml2ZWQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgZGVyaXZlZCBmaWVsZHMgb24gYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgY2FyZ28gYW5kIG1vZHVsZXMsIHJlZnJlc2hpbmcgY2FwYWJpbGl0eSBzdGF0cyBhbmQgY2FyZ28gbWFzcy4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFVzZWQgdG8gcmVjb25jaWxlIGRlcml2ZWQgc3RhdGUgYWZ0ZXIgZGF0YSBtaWdyYXRpb25zIG9yIGNvbnRyYWN0IHVwZ3JhZGVzLqAiMpeqTaW6DHJlbW92ZW9yYWNsZQAAAAAAKGmmugZyZW5hbWUAAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AQIxG7UixugpyZXNvbHZlYWxsAAAAAABEo7a6BnJldmVhbAAAAAAq6kSlvAhybW1vZHVsZbwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbW9kdWxlCnN1bW1hcnk6ICdSZW1vdmUgYSBtb2R1bGUgZnJvbSBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSBhbiBpbnN0YWxsZWQgbW9kdWxlIGZyb20gYSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSBpcyByZXR1cm5lZCB0byBjYXJnby4gRmFpbHMgaWYgdGhlIGVudGl0eSBkb2VzIG5vdCBoYXZlIGVub3VnaCBjYXJnbyBjYXBhY2l0eSB0byBob2xkIHRoZSByZXR1cm5lZCBtb2R1bGUuAAAAbKG8prwIcm1uZnRjZmehAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW5mdGNmZwpzdW1tYXJ5OiAnUmVtb3ZlIE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgdGhlIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBtYXBwaW5nIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0gaWQgZnJvbSB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIEFmdGVyIHJlbW92YWwgdGhlIGl0ZW0gY2FuIG5vIGxvbmdlciBiZSB3cmFwcGVkIG9yIHVud3JhcHBlZCB1bnRpbCBhIG5ldyBtYXBwaW5nIGlzIHNldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAMhth7LCCHNldGNpdmljAAAAwOlSirLCCXNldGNvb3JkcwAAAGAL5TWzwglzZXRuZnRjZmfEAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXRuZnRjZmcKc3VtbWFyeTogJ1NldCBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQmluZCBhbiBpdGVtIGlkIHRvIGFuIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBpZCBhbmQgc2NoZW1hIG5hbWUuIFVzZWQgdG8gY29uZmlndXJlIGhvdyB0aGUgY29udHJhY3QgbWludHMgYW5kIHJlY29nbml6ZXMgTkZUcyBmb3IgYSBnaXZlbiBpdGVtLiBJbnNlcnRzIGEgbmV3IG1hcHBpbmcgaWYgb25lIGRvZXMgbm90IGV4aXN0LCBvciB1cGRhdGVzIHRoZSBleGlzdGluZyBtYXBwaW5nLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAADICiKKs8IJc2V0c29ja2V0AJAibVjdlrPCDHNldHRocmVzaG9sZAAAMqaomsuzwgtzZXR3cmFwY29zdAAAgFKrmsuzwgpzZXR3cmFwZmVlAAAAAEDFnHXDB3NodXR0bGUAAACg7BrEacYJc3Rvd2Nhcmdv1QUtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Rvd2NhcmdvCnN1bW1hcnk6ICdSZXNlcnZlIGEgY2FyZ28gc3RhY2sgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzZXJ2ZXMgYW5kIGNvbnN1bWVzIGEgY2FyZ28gc3RhY2sgb24gYSBsaXZlIGVudGl0eSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQuIFZhbGlkYXRlcyBlbnRpdHkgb3duZXJzaGlwLCBsb2FkZXJzLCBhbmQgcHJlc2VuY2UgYXQgdGhlIG5leHVzLCBhbmQgY29uZmlybXMgdGhlIHRhcmdldCBjYXJnbyBzdGFjayBpcyBhdmFpbGFibGUgYW5kIG5vdCByZXNlcnZlZCBieSBhIHBlbmRpbmcgdGFzay4gQ29tcHV0ZXMgdGhlIHdyYXAgY29zdCBhbmQgZmVlLCBkZWJpdHMgdGhlbSBmcm9tIHRoZSBvd25lcidzIHBsYXRmb3JtIGRlcG9zaXQgYmFsYW5jZSwgZGVyaXZlcyB0aGUgTkZUJ3MgaW1tdXRhYmxlIGRhdGEsIGFuZCBtaW50cyB0aGUgTkZUIGlubGluZSBhcyB0aGUgZ2FtZSBjb250cmFjdCBiZWZvcmUgY29uc3VtaW5nIHRoZSBjYXJnby4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgCAzy5PxWnGCnN0b3dlbnRpdHmZBS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzdG93ZW50aXR5CnN1bW1hcnk6ICdSZXNlcnZlIGFuIGVudGl0eSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXNlcnZlcyBhIHdob2xlIGVudGl0eSAoc2hpcCwgY29udGFpbmVyLCBvciBwbGFuZXRhcnkgc3RydWN0dXJlKSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggZW1wdHkgY2FyZ28gYW5kIG5vIHNjaGVkdWxlZCB0YXNrcy4gQ29tcHV0ZXMgdGhlIHdyYXAgY29zdCBhbmQgZmVlLCBkZWJpdHMgdGhlbSBmcm9tIHRoZSBvd25lcidzIHBsYXRmb3JtIGRlcG9zaXQgYmFsYW5jZSwgZGVyaXZlcyB0aGUgZW50aXR5IE5GVCdzIGltbXV0YWJsZSBkYXRhLCBtaW50cyB0aGUgTkZUIGlubGluZSBhcyB0aGUgZ2FtZSBjb250cmFjdCwgYW5kIGVyYXNlcyB0aGUgZW50aXR5IGZyb20gdGhlIHdvcmxkLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAICKOlFZDccKc3dhcG1vZHVsZQAAAAAqulwNxwhzd2FwdGlsZQAAAAAgOzzNzQd0cmFuc2l0AAAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AwDSxRrXNzQp0cmF2ZWxwbGFuAAAAAJ7GqtLUCHVuZGVwbG955wQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdW5kZXBsb3kKc3VtbWFyeTogJ1BhY2sgYSBkZXBsb3llZCBlbnRpdHkgaW50byBhIGhvc3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClBhY2sgYW4gZW50aXR5IGludG8gYSBob3N0IGVudGl0eSdzIGNhcmdvIGFzIGEgcGFja2VkLWVudGl0eSBpdGVtLiBIb3N0IGFuZCB0YXJnZXQgbXVzdCBzaGFyZSB0aGUgc2FtZSBvd25lciBhbmQgY29vcmRpbmF0ZXMsIHRoZSBob3N0IG11c3QgaGF2ZSBsb2FkZXJzIGFuZCBlbm91Z2ggY2FwYWNpdHkgZm9yIHRoZSBwYWNrZWQgbWFzcywgYW5kIHRoZSB0YXJnZXQgbXVzdCBiZSBpZGxlIHdpdGggZW1wdHkgY2FyZ28uIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgYW5kIHNjaGVkdWxlcyB1bmRlcGxveSB0YXNrcyBvbiBib3RoIGVudGl0aWVzOyBvbiByZXNvbHV0aW9uIHRoZSB0YXJnZXQgaXMgZXJhc2VkIGFuZCB0aGUgcGFja2VkIGVudGl0eSBpcyBhZGRlZCB0byB0aGUgaG9zdCdzIGNhcmdvLiBJbnZlcnNlIG9mIGRlcGxveS4AAAAAJEPj1AZ1bmxvYWQAAAAAQCVzWdUHdXBncmFkZQAAAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLRYAAAAAAMquQQNpNjQAAAljYXJnb19yb3cAmFuTIuS2QwNpNjQAAA9jaXZpY2NvbmZpZ19yb3cAAAAAYOlMRANpNjQAAAljbGFpbV9yb3cAAADgqox1RANpNjQAAAtjbHVzdGVyX3JvdwAAAABkJyVFA2k2NAAACmNvbW1pdF9yb3cAAAAA+OzyVANpNjQAAAplbnRpdHlfcm93AABzEvjs8lQDaTY0AAAKZW50aXR5X3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAsAr77PJUA2k2NAAADmVudGl0eV9zZXFfcm93AAAAAICGaFUDaTY0AAAJZXBvY2hfcm93AAAAAACAD30DaTY0AAAHam9iX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAGALqYjMpQNpNjQAABFvcmFjbGVfY29uZmlnX3JvdwAAAACriMylA2k2NAAACm9yYWNsZV9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAARKO2ugNpNjQAAApyZXZlYWxfcm93AAAAQCG3r8IDaTY0AAALc2VydmljZV9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAHNrUlTN5QNpNjQAAA53cmFwY29uZmlnX3JvdwAAABlTVM3lA2k2NAAADHdyYXBjb3N0X3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAABFAADINNYUnT4MdGFza19yZXN1bHRzAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAMg0VulMRAx0YXNrX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAACHvrzMRQtqb2JfcmVjZWlwdAAAAA27SKVKDHRhc2tfcmVzdWx0cwAAAAB4GqtKDHRhc2tfcmVzdWx0cwCAzy5PhbBKBnN0cmluZwAAAABc1bJhDHRhc2tfcmVzdWx0cwDANLFe1bJhDHRhc2tfcmVzdWx0cwDAVRnriLJiC2NsdXN0ZXJfcm93AABgbk2KsmILZ2FtZV9jb25maWcAQHaYVpWyYg5leHRlbmRlZF9hc3NldAAUmiZjl7JiBnVpbnQ2NABUPI65qLJiCHVpbnQxNltdAADAEeWpsmILZW51bV9yZXN1bHQAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm+Qp7s1U7qyYhBmb290cHJpbnRfcmVzdWx0AEw2SarssmIPaXRlbWRhdGFfcmVzdWx0AABOTqrssmIPaXRlbV9pZHNfcmVzdWx0AAAAWKrssmIKaXRlbXNfaW5mbwBU9Vmq7LJiBXVpbnQ4gFX1WarssmILZW51bV9yZXN1bHQAAAAAH/qyYgtqb2JzX3Jlc3VsdABMVjJNB7NiEGtpbmRfbWV0YV9yZXN1bHQAJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZACwqj4nKrNiC2VudW1fcmVzdWx0AABWUScqs2IObW9kdWxlc19yZXN1bHQAAPDnGjWzYgtuZWFyYnlfaW5mbwCAwubkNbNiCHN0cmluZ1tdAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mb6CyyfjRW7NiD3Byb2plY3RlZF9zdGF0ZQAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AIBCbl+Fs2ILc2VydmljZV9yb3cAAAA404izYhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAFSkTV7Ks2INd29ybWhvbGVfaW5mb5AdnubmqullDHRhc2tfcmVzdWx0cwCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAAAANDS1iQx0YXNrX3Jlc3VsdHMAAAAAAJAMjQx0YXNrX3Jlc3VsdHMAAAAquqw2lQx0YXNrX3Jlc3VsdHMAAIhXM+nymgZzdHJpbmcAAGXXIIVMrAx0YXNrX3Jlc3VsdHMAfHZ5KoVMrAx0YXNrX3Jlc3VsdHMAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAQIxG7UixuhJyZXNvbHZlYWxsX3Jlc3VsdHMAAABAxZx1wwx0YXNrX3Jlc3VsdHMAAKDsGsRpxgx0YXNrX3Jlc3VsdHMAgM8uT8Vpxgx0YXNrX3Jlc3VsdHMAAAAqulwNxwx0YXNrX3Jlc3VsdHMAAAAgOzzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAwDSxRrXNzQx0YXNrX3Jlc3VsdHMAAACexqrS1Ax0YXNrX3Jlc3VsdHMAAAAAJEPj1Ax0YXNrX3Jlc3VsdHMAAABAJXNZ1Qx0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHM=');
444
444
  const abi = ABI.from(abiBlob);
445
445
  var Types;
446
446
  (function (Types) {
@@ -561,6 +561,24 @@ var Types;
561
561
  Struct.type('blend')
562
562
  ], blend);
563
563
  Types.blend = blend;
564
+ let builder_lane = class builder_lane extends Struct {
565
+ };
566
+ __decorate([
567
+ Struct.field(UInt8)
568
+ ], builder_lane.prototype, "slot_index", void 0);
569
+ __decorate([
570
+ Struct.field(UInt16)
571
+ ], builder_lane.prototype, "speed", void 0);
572
+ __decorate([
573
+ Struct.field(UInt32)
574
+ ], builder_lane.prototype, "drain", void 0);
575
+ __decorate([
576
+ Struct.field(UInt16)
577
+ ], builder_lane.prototype, "output_pct", void 0);
578
+ builder_lane = __decorate([
579
+ Struct.type('builder_lane')
580
+ ], builder_lane);
581
+ Types.builder_lane = builder_lane;
564
582
  let buildplot = class buildplot extends Struct {
565
583
  };
566
584
  __decorate([
@@ -624,6 +642,18 @@ var Types;
624
642
  Struct.type('cancel_results')
625
643
  ], cancel_results);
626
644
  Types.cancel_results = cancel_results;
645
+ let canceljob = class canceljob extends Struct {
646
+ };
647
+ __decorate([
648
+ Struct.field(UInt64)
649
+ ], canceljob.prototype, "job_id", void 0);
650
+ __decorate([
651
+ Struct.field(UInt64)
652
+ ], canceljob.prototype, "ship_id", void 0);
653
+ canceljob = __decorate([
654
+ Struct.type('canceljob')
655
+ ], canceljob);
656
+ Types.canceljob = canceljob;
627
657
  let cargo_row = class cargo_row extends Struct {
628
658
  };
629
659
  __decorate([
@@ -675,6 +705,15 @@ var Types;
675
705
  Struct.type('cargo_view')
676
706
  ], cargo_view);
677
707
  Types.cargo_view = cargo_view;
708
+ let civicconfig_row = class civicconfig_row extends Struct {
709
+ };
710
+ __decorate([
711
+ Struct.field(Name)
712
+ ], civicconfig_row.prototype, "civic_owner", void 0);
713
+ civicconfig_row = __decorate([
714
+ Struct.type('civicconfig_row')
715
+ ], civicconfig_row);
716
+ Types.civicconfig_row = civicconfig_row;
678
717
  let claim_row = class claim_row extends Struct {
679
718
  };
680
719
  __decorate([
@@ -684,6 +723,18 @@ var Types;
684
723
  Struct.type('claim_row')
685
724
  ], claim_row);
686
725
  Types.claim_row = claim_row;
726
+ let claimjob = class claimjob extends Struct {
727
+ };
728
+ __decorate([
729
+ Struct.field(UInt64)
730
+ ], claimjob.prototype, "job_id", void 0);
731
+ __decorate([
732
+ Struct.field(UInt64)
733
+ ], claimjob.prototype, "ship_id", void 0);
734
+ claimjob = __decorate([
735
+ Struct.type('claimjob')
736
+ ], claimjob);
737
+ Types.claimjob = claimjob;
687
738
  let cluster_slot = class cluster_slot extends Struct {
688
739
  };
689
740
  __decorate([
@@ -882,6 +933,21 @@ var Types;
882
933
  Struct.type('coordinates')
883
934
  ], coordinates);
884
935
  Types.coordinates = coordinates;
936
+ let coupling = class coupling extends Struct {
937
+ };
938
+ __decorate([
939
+ Struct.field(entity_ref)
940
+ ], coupling.prototype, "counterpart", void 0);
941
+ __decorate([
942
+ Struct.field(UInt64)
943
+ ], coupling.prototype, "hold", void 0);
944
+ __decorate([
945
+ Struct.field(UInt8)
946
+ ], coupling.prototype, "kind", void 0);
947
+ coupling = __decorate([
948
+ Struct.type('coupling')
949
+ ], coupling);
950
+ Types.coupling = coupling;
885
951
  let craft = class craft extends Struct {
886
952
  };
887
953
  __decorate([
@@ -924,6 +990,39 @@ var Types;
924
990
  Struct.type('crafter_lane')
925
991
  ], crafter_lane);
926
992
  Types.crafter_lane = crafter_lane;
993
+ let craftjob = class craftjob extends Struct {
994
+ };
995
+ __decorate([
996
+ Struct.field(UInt64)
997
+ ], craftjob.prototype, "ship_id", void 0);
998
+ __decorate([
999
+ Struct.field(UInt64)
1000
+ ], craftjob.prototype, "workshop_id", void 0);
1001
+ __decorate([
1002
+ Struct.field(UInt8)
1003
+ ], craftjob.prototype, "slot", void 0);
1004
+ __decorate([
1005
+ Struct.field(UInt16)
1006
+ ], craftjob.prototype, "recipe_id", void 0);
1007
+ __decorate([
1008
+ Struct.field(UInt32)
1009
+ ], craftjob.prototype, "quantity", void 0);
1010
+ __decorate([
1011
+ Struct.field(cargo_item, { array: true })
1012
+ ], craftjob.prototype, "inputs", void 0);
1013
+ craftjob = __decorate([
1014
+ Struct.type('craftjob')
1015
+ ], craftjob);
1016
+ Types.craftjob = craftjob;
1017
+ let delentity = class delentity extends Struct {
1018
+ };
1019
+ __decorate([
1020
+ Struct.field(UInt64)
1021
+ ], delentity.prototype, "entity_id", void 0);
1022
+ delentity = __decorate([
1023
+ Struct.type('delentity')
1024
+ ], delentity);
1025
+ Types.delentity = delentity;
927
1026
  let demolish = class demolish extends Struct {
928
1027
  };
929
1028
  __decorate([
@@ -1121,18 +1220,18 @@ var Types;
1121
1220
  __decorate([
1122
1221
  Struct.field(cargo_item, { array: true })
1123
1222
  ], task.prototype, "cargo", void 0);
1223
+ __decorate([
1224
+ Struct.field(coupling, { array: true })
1225
+ ], task.prototype, "couplings", void 0);
1124
1226
  __decorate([
1125
1227
  Struct.field(entity_ref, { optional: true })
1126
- ], task.prototype, "entitytarget", void 0);
1228
+ ], task.prototype, "subject", void 0);
1127
1229
  __decorate([
1128
1230
  Struct.field(UInt64, { optional: true })
1129
1231
  ], task.prototype, "entitygroup", void 0);
1130
1232
  __decorate([
1131
1233
  Struct.field(UInt32, { optional: true })
1132
1234
  ], task.prototype, "energy_cost", void 0);
1133
- __decorate([
1134
- Struct.field(UInt64, { optional: true })
1135
- ], task.prototype, "hold", void 0);
1136
1235
  __decorate([
1137
1236
  Struct.field(UInt16, { optional: true })
1138
1237
  ], task.prototype, "target_item_id", void 0);
@@ -1241,6 +1340,9 @@ var Types;
1241
1340
  __decorate([
1242
1341
  Struct.field(crafter_lane, { array: true })
1243
1342
  ], entity_info.prototype, "crafter_lanes", void 0);
1343
+ __decorate([
1344
+ Struct.field(builder_lane, { array: true })
1345
+ ], entity_info.prototype, "builder_lanes", void 0);
1244
1346
  __decorate([
1245
1347
  Struct.field(loader_lane, { array: true })
1246
1348
  ], entity_info.prototype, "loader_lanes", void 0);
@@ -1280,6 +1382,9 @@ var Types;
1280
1382
  __decorate([
1281
1383
  Struct.field(slot_def, { array: true })
1282
1384
  ], entity_layout.prototype, "slots", void 0);
1385
+ __decorate([
1386
+ Struct.field(UInt32)
1387
+ ], entity_layout.prototype, "base_hullmass", void 0);
1283
1388
  entity_layout = __decorate([
1284
1389
  Struct.type('entity_layout')
1285
1390
  ], entity_layout);
@@ -1383,7 +1488,7 @@ var Types;
1383
1488
  Struct.field(Name)
1384
1489
  ], entity_task_info.prototype, "entity_type", void 0);
1385
1490
  __decorate([
1386
- Struct.field(UInt8)
1491
+ Struct.field(UInt32)
1387
1492
  ], entity_task_info.prototype, "task_count", void 0);
1388
1493
  __decorate([
1389
1494
  Struct.field(TimePoint)
@@ -1503,6 +1608,30 @@ var Types;
1503
1608
  Struct.type('gather')
1504
1609
  ], gather);
1505
1610
  Types.gather = gather;
1611
+ let gatherplan = class gatherplan extends Struct {
1612
+ };
1613
+ __decorate([
1614
+ Struct.field(UInt64)
1615
+ ], gatherplan.prototype, "source_id", void 0);
1616
+ __decorate([
1617
+ Struct.field(UInt64)
1618
+ ], gatherplan.prototype, "destination_id", void 0);
1619
+ __decorate([
1620
+ Struct.field(UInt16)
1621
+ ], gatherplan.prototype, "stratum", void 0);
1622
+ __decorate([
1623
+ Struct.field(UInt32)
1624
+ ], gatherplan.prototype, "quantity", void 0);
1625
+ __decorate([
1626
+ Struct.field('bool')
1627
+ ], gatherplan.prototype, "recharge", void 0);
1628
+ __decorate([
1629
+ Struct.field(Bytes)
1630
+ ], gatherplan.prototype, "slots", void 0);
1631
+ gatherplan = __decorate([
1632
+ Struct.type('gatherplan')
1633
+ ], gatherplan);
1634
+ Types.gatherplan = gatherplan;
1506
1635
  let genesisfleet = class genesisfleet extends Struct {
1507
1636
  };
1508
1637
  __decorate([
@@ -1638,6 +1767,15 @@ var Types;
1638
1767
  Struct.type('getitemtypes')
1639
1768
  ], getitemtypes);
1640
1769
  Types.getitemtypes = getitemtypes;
1770
+ let getjobs = class getjobs extends Struct {
1771
+ };
1772
+ __decorate([
1773
+ Struct.field(UInt64)
1774
+ ], getjobs.prototype, "workshop_id", void 0);
1775
+ getjobs = __decorate([
1776
+ Struct.type('getjobs')
1777
+ ], getjobs);
1778
+ Types.getjobs = getjobs;
1641
1779
  let getkindmeta = class getkindmeta extends Struct {
1642
1780
  };
1643
1781
  getkindmeta = __decorate([
@@ -1770,6 +1908,15 @@ var Types;
1770
1908
  Struct.type('getresources')
1771
1909
  ], getresources);
1772
1910
  Types.getresources = getresources;
1911
+ let getservice = class getservice extends Struct {
1912
+ };
1913
+ __decorate([
1914
+ Struct.field(UInt64)
1915
+ ], getservice.prototype, "workshop_id", void 0);
1916
+ getservice = __decorate([
1917
+ Struct.type('getservice')
1918
+ ], getservice);
1919
+ Types.getservice = getservice;
1773
1920
  let getslots = class getslots extends Struct {
1774
1921
  };
1775
1922
  getslots = __decorate([
@@ -1881,6 +2028,24 @@ var Types;
1881
2028
  Struct.type('importcargo')
1882
2029
  ], importcargo);
1883
2030
  Types.importcargo = importcargo;
2031
+ let importcell = class importcell extends Struct {
2032
+ };
2033
+ __decorate([
2034
+ Struct.field(UInt64)
2035
+ ], importcell.prototype, "root", void 0);
2036
+ __decorate([
2037
+ Struct.field(Int8)
2038
+ ], importcell.prototype, "gx", void 0);
2039
+ __decorate([
2040
+ Struct.field(Int8)
2041
+ ], importcell.prototype, "gy", void 0);
2042
+ __decorate([
2043
+ Struct.field(UInt64)
2044
+ ], importcell.prototype, "entity_id", void 0);
2045
+ importcell = __decorate([
2046
+ Struct.type('importcell')
2047
+ ], importcell);
2048
+ Types.importcell = importcell;
1884
2049
  let importentity = class importentity extends Struct {
1885
2050
  };
1886
2051
  __decorate([
@@ -2091,6 +2256,72 @@ var Types;
2091
2256
  Struct.type('items_info')
2092
2257
  ], items_info);
2093
2258
  Types.items_info = items_info;
2259
+ let job_receipt = class job_receipt extends Struct {
2260
+ };
2261
+ __decorate([
2262
+ Struct.field(UInt64)
2263
+ ], job_receipt.prototype, "job_id", void 0);
2264
+ __decorate([
2265
+ Struct.field(TimePoint)
2266
+ ], job_receipt.prototype, "starts_at", void 0);
2267
+ __decorate([
2268
+ Struct.field(TimePoint)
2269
+ ], job_receipt.prototype, "completes_at", void 0);
2270
+ job_receipt = __decorate([
2271
+ Struct.type('job_receipt')
2272
+ ], job_receipt);
2273
+ Types.job_receipt = job_receipt;
2274
+ let job_row = class job_row extends Struct {
2275
+ };
2276
+ __decorate([
2277
+ Struct.field(UInt64)
2278
+ ], job_row.prototype, "id", void 0);
2279
+ __decorate([
2280
+ Struct.field(UInt64)
2281
+ ], job_row.prototype, "workshop", void 0);
2282
+ __decorate([
2283
+ Struct.field(UInt8)
2284
+ ], job_row.prototype, "socket", void 0);
2285
+ __decorate([
2286
+ Struct.field(Name)
2287
+ ], job_row.prototype, "owner", void 0);
2288
+ __decorate([
2289
+ Struct.field(UInt64)
2290
+ ], job_row.prototype, "ship_id", void 0);
2291
+ __decorate([
2292
+ Struct.field(coordinates)
2293
+ ], job_row.prototype, "coords", void 0);
2294
+ __decorate([
2295
+ Struct.field(TimePoint)
2296
+ ], job_row.prototype, "starts_at", void 0);
2297
+ __decorate([
2298
+ Struct.field(TimePoint)
2299
+ ], job_row.prototype, "completes_at", void 0);
2300
+ __decorate([
2301
+ Struct.field(UInt16)
2302
+ ], job_row.prototype, "recipe_id", void 0);
2303
+ __decorate([
2304
+ Struct.field(UInt32)
2305
+ ], job_row.prototype, "quantity", void 0);
2306
+ __decorate([
2307
+ Struct.field(UInt32)
2308
+ ], job_row.prototype, "energy_paid", void 0);
2309
+ __decorate([
2310
+ Struct.field(cargo_item, { array: true })
2311
+ ], job_row.prototype, "cargo", void 0);
2312
+ job_row = __decorate([
2313
+ Struct.type('job_row')
2314
+ ], job_row);
2315
+ Types.job_row = job_row;
2316
+ let jobs_result = class jobs_result extends Struct {
2317
+ };
2318
+ __decorate([
2319
+ Struct.field(job_row, { array: true })
2320
+ ], jobs_result.prototype, "jobs", void 0);
2321
+ jobs_result = __decorate([
2322
+ Struct.type('jobs_result')
2323
+ ], jobs_result);
2324
+ Types.jobs_result = jobs_result;
2094
2325
  let join = class join extends Struct {
2095
2326
  };
2096
2327
  __decorate([
@@ -2226,6 +2457,24 @@ var Types;
2226
2457
  Struct.type('location_info')
2227
2458
  ], location_info);
2228
2459
  Types.location_info = location_info;
2460
+ let migratetasks = class migratetasks extends Struct {
2461
+ };
2462
+ __decorate([
2463
+ Struct.field(UInt32)
2464
+ ], migratetasks.prototype, "batch", void 0);
2465
+ migratetasks = __decorate([
2466
+ Struct.type('migratetasks')
2467
+ ], migratetasks);
2468
+ Types.migratetasks = migratetasks;
2469
+ let migswap = class migswap extends Struct {
2470
+ };
2471
+ __decorate([
2472
+ Struct.field(UInt32)
2473
+ ], migswap.prototype, "batch", void 0);
2474
+ migswap = __decorate([
2475
+ Struct.type('migswap')
2476
+ ], migswap);
2477
+ Types.migswap = migswap;
2229
2478
  let module_info = class module_info extends Struct {
2230
2479
  };
2231
2480
  __decorate([
@@ -2579,6 +2828,9 @@ var Types;
2579
2828
  __decorate([
2580
2829
  Struct.field(crafter_lane, { array: true })
2581
2830
  ], projected_state.prototype, "crafter_lanes", void 0);
2831
+ __decorate([
2832
+ Struct.field(builder_lane, { array: true })
2833
+ ], projected_state.prototype, "builder_lanes", void 0);
2582
2834
  __decorate([
2583
2835
  Struct.field(loader_lane, { array: true })
2584
2836
  ], projected_state.prototype, "loader_lanes", void 0);
@@ -2799,6 +3051,36 @@ var Types;
2799
3051
  Struct.type('route_waypoint')
2800
3052
  ], route_waypoint);
2801
3053
  Types.route_waypoint = route_waypoint;
3054
+ let service_socket = class service_socket extends Struct {
3055
+ };
3056
+ __decorate([
3057
+ Struct.field('bool')
3058
+ ], service_socket.prototype, "open", void 0);
3059
+ service_socket = __decorate([
3060
+ Struct.type('service_socket')
3061
+ ], service_socket);
3062
+ Types.service_socket = service_socket;
3063
+ let service_row = class service_row extends Struct {
3064
+ };
3065
+ __decorate([
3066
+ Struct.field(UInt64)
3067
+ ], service_row.prototype, "entity", void 0);
3068
+ __decorate([
3069
+ Struct.field(service_socket, { array: true })
3070
+ ], service_row.prototype, "sockets", void 0);
3071
+ service_row = __decorate([
3072
+ Struct.type('service_row')
3073
+ ], service_row);
3074
+ Types.service_row = service_row;
3075
+ let setcivic = class setcivic extends Struct {
3076
+ };
3077
+ __decorate([
3078
+ Struct.field(Name)
3079
+ ], setcivic.prototype, "account", void 0);
3080
+ setcivic = __decorate([
3081
+ Struct.type('setcivic')
3082
+ ], setcivic);
3083
+ Types.setcivic = setcivic;
2802
3084
  let setcoords = class setcoords extends Struct {
2803
3085
  };
2804
3086
  __decorate([
@@ -2829,6 +3111,21 @@ var Types;
2829
3111
  Struct.type('setnftcfg')
2830
3112
  ], setnftcfg);
2831
3113
  Types.setnftcfg = setnftcfg;
3114
+ let setsocket = class setsocket extends Struct {
3115
+ };
3116
+ __decorate([
3117
+ Struct.field(UInt64)
3118
+ ], setsocket.prototype, "workshop_id", void 0);
3119
+ __decorate([
3120
+ Struct.field(UInt8)
3121
+ ], setsocket.prototype, "slot", void 0);
3122
+ __decorate([
3123
+ Struct.field('bool')
3124
+ ], setsocket.prototype, "open", void 0);
3125
+ setsocket = __decorate([
3126
+ Struct.type('setsocket')
3127
+ ], setsocket);
3128
+ Types.setsocket = setsocket;
2832
3129
  let setthreshold = class setthreshold extends Struct {
2833
3130
  };
2834
3131
  __decorate([
@@ -2865,6 +3162,24 @@ var Types;
2865
3162
  Struct.type('setwrapfee')
2866
3163
  ], setwrapfee);
2867
3164
  Types.setwrapfee = setwrapfee;
3165
+ let shuttle = class shuttle extends Struct {
3166
+ };
3167
+ __decorate([
3168
+ Struct.field(UInt64)
3169
+ ], shuttle.prototype, "carrier", void 0);
3170
+ __decorate([
3171
+ Struct.field(UInt64)
3172
+ ], shuttle.prototype, "from_id", void 0);
3173
+ __decorate([
3174
+ Struct.field(UInt64)
3175
+ ], shuttle.prototype, "to_id", void 0);
3176
+ __decorate([
3177
+ Struct.field(cargo_item, { array: true })
3178
+ ], shuttle.prototype, "items", void 0);
3179
+ shuttle = __decorate([
3180
+ Struct.type('shuttle')
3181
+ ], shuttle);
3182
+ Types.shuttle = shuttle;
2868
3183
  let stowcargo = class stowcargo extends Struct {
2869
3184
  };
2870
3185
  __decorate([
@@ -3033,21 +3348,21 @@ var Types;
3033
3348
  Struct.type('travel')
3034
3349
  ], travel);
3035
3350
  Types.travel = travel;
3036
- let travelroute = class travelroute extends Struct {
3351
+ let travelplan = class travelplan extends Struct {
3037
3352
  };
3038
3353
  __decorate([
3039
3354
  Struct.field(entity_ref, { array: true })
3040
- ], travelroute.prototype, "entities", void 0);
3355
+ ], travelplan.prototype, "entities", void 0);
3041
3356
  __decorate([
3042
3357
  Struct.field(route_waypoint, { array: true })
3043
- ], travelroute.prototype, "waypoints", void 0);
3358
+ ], travelplan.prototype, "waypoints", void 0);
3044
3359
  __decorate([
3045
3360
  Struct.field('bool')
3046
- ], travelroute.prototype, "recharge", void 0);
3047
- travelroute = __decorate([
3048
- Struct.type('travelroute')
3049
- ], travelroute);
3050
- Types.travelroute = travelroute;
3361
+ ], travelplan.prototype, "recharge", void 0);
3362
+ travelplan = __decorate([
3363
+ Struct.type('travelplan')
3364
+ ], travelplan);
3365
+ Types.travelplan = travelplan;
3051
3366
  let types_row = class types_row extends Struct {
3052
3367
  };
3053
3368
  __decorate([
@@ -3183,19 +3498,23 @@ var Types;
3183
3498
  })(Types || (Types = {}));
3184
3499
  const TableMap = {
3185
3500
  cargo: Types.cargo_row,
3501
+ civicconfig: Types.civicconfig_row,
3186
3502
  claims: Types.claim_row,
3187
3503
  cluster: Types.cluster_row,
3188
3504
  commit: Types.commit_row,
3189
3505
  entity: Types.entity_row,
3506
+ 'entity.mig': Types.entity_row,
3190
3507
  entitygroup: Types.entitygroup_row,
3191
3508
  entityseq: Types.entity_seq_row,
3192
3509
  epoch: Types.epoch_row,
3510
+ jobs: Types.job_row,
3193
3511
  nftconfig: Types.nftconfig_row,
3194
3512
  oraclecfg: Types.oracle_config_row,
3195
3513
  oracles: Types.oracle_row,
3196
3514
  player: Types.player_row,
3197
3515
  reserve: Types.reserve_row,
3198
3516
  reveal: Types.reveal_row,
3517
+ service: Types.service_row,
3199
3518
  state: Types.state_row,
3200
3519
  types: Types.types_row,
3201
3520
  wrapconfig: Types.wrapconfig_row,
@@ -3316,7 +3635,7 @@ const INSUFFICIENT_BALANCE = 'Insufficient balance.';
3316
3635
  const INSUFFICIENT_ITEM_QUANTITY = 'Insufficient quantity in cargo.';
3317
3636
  const INSUFFICIENT_ITEM_SUPPLY = 'Insufficient supply of item at location.';
3318
3637
 
3319
- const PRECISION$1 = 10000;
3638
+ const PRECISION = 10000;
3320
3639
  const CRAFT_ENERGY_DIVISOR = 150000;
3321
3640
  const PLANETARY_STRUCTURE_Z = 0;
3322
3641
  const CONTAINER_Z = 300;
@@ -3338,15 +3657,15 @@ var TaskType;
3338
3657
  TaskType[TaskType["GATHER"] = 5] = "GATHER";
3339
3658
  TaskType[TaskType["WARP"] = 6] = "WARP";
3340
3659
  TaskType[TaskType["CRAFT"] = 7] = "CRAFT";
3341
- TaskType[TaskType["DEPLOY"] = 8] = "DEPLOY";
3342
3660
  TaskType[TaskType["TRANSIT"] = 9] = "TRANSIT";
3343
3661
  TaskType[TaskType["UNWRAP"] = 10] = "UNWRAP";
3344
3662
  TaskType[TaskType["UNDEPLOY"] = 11] = "UNDEPLOY";
3663
+ TaskType[TaskType["LAUNCH"] = 12] = "LAUNCH";
3345
3664
  TaskType[TaskType["DEMOLISH"] = 13] = "DEMOLISH";
3346
- TaskType[TaskType["CLAIMPLOT"] = 14] = "CLAIMPLOT";
3347
3665
  TaskType[TaskType["BUILDPLOT"] = 15] = "BUILDPLOT";
3348
3666
  TaskType[TaskType["CHARGE"] = 16] = "CHARGE";
3349
3667
  TaskType[TaskType["UPGRADE"] = 17] = "UPGRADE";
3668
+ TaskType[TaskType["SHUTTLE"] = 18] = "SHUTTLE";
3350
3669
  })(TaskType || (TaskType = {}));
3351
3670
  var HoldKind;
3352
3671
  (function (HoldKind) {
@@ -3354,6 +3673,7 @@ var HoldKind;
3354
3673
  HoldKind[HoldKind["PUSH"] = 2] = "PUSH";
3355
3674
  HoldKind[HoldKind["GATHER"] = 3] = "GATHER";
3356
3675
  HoldKind[HoldKind["BUILD"] = 4] = "BUILD";
3676
+ HoldKind[HoldKind["FLIGHT"] = 5] = "FLIGHT";
3357
3677
  HoldKind[HoldKind["UPGRADE"] = 6] = "UPGRADE";
3358
3678
  })(HoldKind || (HoldKind = {}));
3359
3679
  var LocationType;
@@ -3488,6 +3808,7 @@ const ITEM_HAULER_T1 = 10106;
3488
3808
  const ITEM_WARP_T1 = 10107;
3489
3809
  const ITEM_BATTERY_T1 = 10108;
3490
3810
  const ITEM_LAUNCHER_T1 = 10109;
3811
+ const ITEM_BUILDER_T1 = 10110;
3491
3812
  const ITEM_CONTAINER_T1_PACKED = 10200;
3492
3813
  const ITEM_SHIP_T1_PACKED = 10201;
3493
3814
  const ITEM_WAREHOUSE_T1_PACKED = 10202;
@@ -3496,6 +3817,15 @@ const ITEM_FACTORY_T1_PACKED = 10204;
3496
3817
  const ITEM_MASS_DRIVER_T1_PACKED = 10205;
3497
3818
  const ITEM_MASS_CATCHER_T1_PACKED = 10206;
3498
3819
  const ITEM_HUB_T1_PACKED = 10207;
3820
+ const ITEM_WORKSHOP_T1_PACKED = 10208;
3821
+ const ITEM_ROUSTABOUT_T1_PACKED = 10210;
3822
+ const ITEM_PROSPECTOR_T1_PACKED = 10211;
3823
+ const ITEM_TENDER_T1_PACKED = 10212;
3824
+ const ITEM_WRIGHT_T1_PACKED = 10213;
3825
+ const ITEM_TUG_T1_PACKED = 10214;
3826
+ const ITEM_PORTER_T1_PACKED = 10215;
3827
+ const ITEM_WRANGLER_T1_PACKED = 10216;
3828
+ const ITEM_DREDGER_T1_PACKED = 10217;
3499
3829
  const ITEM_PLATE_T2 = 20001;
3500
3830
  const ITEM_FRAME_T2 = 20002;
3501
3831
  const ITEM_PLASMA_CELL_T2 = 20003;
@@ -4299,16 +4629,16 @@ var recipes = [
4299
4629
  ]
4300
4630
  },
4301
4631
  {
4302
- outputItemId: 10200,
4303
- outputMass: 1900000,
4632
+ outputItemId: 10110,
4633
+ outputMass: 960000,
4304
4634
  inputs: [
4305
4635
  {
4306
- itemId: 10001,
4307
- quantity: 600
4636
+ itemId: 10006,
4637
+ quantity: 300
4308
4638
  },
4309
4639
  {
4310
4640
  itemId: 10008,
4311
- quantity: 600
4641
+ quantity: 300
4312
4642
  }
4313
4643
  ],
4314
4644
  statSlots: [
@@ -4316,20 +4646,8 @@ var recipes = [
4316
4646
  sources: [
4317
4647
  {
4318
4648
  inputIndex: 0,
4319
- statIndex: 0
4320
- }
4321
- ]
4322
- },
4323
- {
4324
- sources: [
4325
- {
4326
- inputIndex: 0,
4327
- statIndex: 1
4328
- }
4329
- ]
4330
- },
4331
- {
4332
- sources: [
4649
+ statIndex: 2
4650
+ },
4333
4651
  {
4334
4652
  inputIndex: 1,
4335
4653
  statIndex: 0
@@ -4346,31 +4664,21 @@ var recipes = [
4346
4664
  }
4347
4665
  ],
4348
4666
  blendWeights: [
4667
+ 1,
4668
+ 1
4349
4669
  ]
4350
4670
  },
4351
4671
  {
4352
- outputItemId: 10201,
4353
- outputMass: 2400000,
4672
+ outputItemId: 10200,
4673
+ outputMass: 1900000,
4354
4674
  inputs: [
4355
4675
  {
4356
4676
  itemId: 10001,
4357
- quantity: 300
4677
+ quantity: 600
4358
4678
  },
4359
4679
  {
4360
4680
  itemId: 10008,
4361
- quantity: 300
4362
- },
4363
- {
4364
- itemId: 10007,
4365
- quantity: 300
4366
- },
4367
- {
4368
- itemId: 10003,
4369
- quantity: 300
4370
- },
4371
- {
4372
- itemId: 10006,
4373
- quantity: 300
4681
+ quantity: 600
4374
4682
  }
4375
4683
  ],
4376
4684
  statSlots: [
@@ -4392,10 +4700,18 @@ var recipes = [
4392
4700
  },
4393
4701
  {
4394
4702
  sources: [
4703
+ {
4704
+ inputIndex: 1,
4705
+ statIndex: 0
4706
+ }
4395
4707
  ]
4396
4708
  },
4397
4709
  {
4398
4710
  sources: [
4711
+ {
4712
+ inputIndex: 1,
4713
+ statIndex: 1
4714
+ }
4399
4715
  ]
4400
4716
  }
4401
4717
  ],
@@ -4567,12 +4883,28 @@ var recipes = [
4567
4883
  ]
4568
4884
  },
4569
4885
  {
4570
- outputItemId: 20001,
4571
- outputMass: 4800,
4886
+ outputItemId: 10210,
4887
+ outputMass: 1600000,
4572
4888
  inputs: [
4573
4889
  {
4574
- itemId: 102,
4575
- quantity: 12
4890
+ itemId: 10001,
4891
+ quantity: 200
4892
+ },
4893
+ {
4894
+ itemId: 10008,
4895
+ quantity: 200
4896
+ },
4897
+ {
4898
+ itemId: 10007,
4899
+ quantity: 200
4900
+ },
4901
+ {
4902
+ itemId: 10003,
4903
+ quantity: 200
4904
+ },
4905
+ {
4906
+ itemId: 10006,
4907
+ quantity: 200
4576
4908
  }
4577
4909
  ],
4578
4910
  statSlots: [
@@ -4587,55 +4919,774 @@ var recipes = [
4587
4919
  {
4588
4920
  sources: [
4589
4921
  {
4590
- inputIndex: 0,
4591
- statIndex: 2
4922
+ inputIndex: 1,
4923
+ statIndex: 0
4592
4924
  }
4593
4925
  ]
4594
4926
  },
4595
4927
  {
4596
4928
  sources: [
4597
4929
  {
4598
- inputIndex: 0,
4599
- statIndex: 1
4930
+ inputIndex: 2,
4931
+ statIndex: 0
4600
4932
  }
4601
4933
  ]
4602
- }
4603
- ],
4604
- blendWeights: [
4605
- ]
4606
- },
4607
- {
4608
- outputItemId: 20002,
4609
- outputMass: 4800,
4610
- inputs: [
4611
- {
4612
- itemId: 402,
4613
- quantity: 6
4614
4934
  },
4615
- {
4616
- itemId: 502,
4617
- quantity: 6
4618
- }
4619
- ],
4620
- statSlots: [
4621
4935
  {
4622
4936
  sources: [
4623
4937
  {
4624
- inputIndex: 0,
4625
- statIndex: 1
4938
+ inputIndex: 3,
4939
+ statIndex: 0
4626
4940
  }
4627
4941
  ]
4628
4942
  },
4629
4943
  {
4630
4944
  sources: [
4631
4945
  {
4632
- inputIndex: 0,
4946
+ inputIndex: 4,
4633
4947
  statIndex: 0
4634
4948
  }
4635
4949
  ]
4636
- },
4637
- {
4638
- sources: [
4950
+ }
4951
+ ],
4952
+ blendWeights: [
4953
+ ]
4954
+ },
4955
+ {
4956
+ outputItemId: 10211,
4957
+ outputMass: 2400000,
4958
+ inputs: [
4959
+ {
4960
+ itemId: 10005,
4961
+ quantity: 100
4962
+ },
4963
+ {
4964
+ itemId: 10002,
4965
+ quantity: 100
4966
+ },
4967
+ {
4968
+ itemId: 10010,
4969
+ quantity: 100
4970
+ },
4971
+ {
4972
+ itemId: 10009,
4973
+ quantity: 100
4974
+ },
4975
+ {
4976
+ itemId: 10004,
4977
+ quantity: 100
4978
+ },
4979
+ {
4980
+ itemId: 10210,
4981
+ quantity: 1
4982
+ }
4983
+ ],
4984
+ statSlots: [
4985
+ {
4986
+ sources: [
4987
+ {
4988
+ inputIndex: 0,
4989
+ statIndex: 0
4990
+ },
4991
+ {
4992
+ inputIndex: 5,
4993
+ statIndex: 0
4994
+ }
4995
+ ]
4996
+ },
4997
+ {
4998
+ sources: [
4999
+ {
5000
+ inputIndex: 1,
5001
+ statIndex: 0
5002
+ },
5003
+ {
5004
+ inputIndex: 5,
5005
+ statIndex: 1
5006
+ }
5007
+ ]
5008
+ },
5009
+ {
5010
+ sources: [
5011
+ {
5012
+ inputIndex: 2,
5013
+ statIndex: 0
5014
+ },
5015
+ {
5016
+ inputIndex: 5,
5017
+ statIndex: 2
5018
+ }
5019
+ ]
5020
+ },
5021
+ {
5022
+ sources: [
5023
+ {
5024
+ inputIndex: 3,
5025
+ statIndex: 0
5026
+ },
5027
+ {
5028
+ inputIndex: 5,
5029
+ statIndex: 3
5030
+ }
5031
+ ]
5032
+ },
5033
+ {
5034
+ sources: [
5035
+ {
5036
+ inputIndex: 4,
5037
+ statIndex: 0
5038
+ },
5039
+ {
5040
+ inputIndex: 5,
5041
+ statIndex: 4
5042
+ }
5043
+ ]
5044
+ }
5045
+ ],
5046
+ blendWeights: [
5047
+ ],
5048
+ sourceSubclass: 10210
5049
+ },
5050
+ {
5051
+ outputItemId: 10212,
5052
+ outputMass: 2400000,
5053
+ inputs: [
5054
+ {
5055
+ itemId: 10005,
5056
+ quantity: 100
5057
+ },
5058
+ {
5059
+ itemId: 10002,
5060
+ quantity: 100
5061
+ },
5062
+ {
5063
+ itemId: 10010,
5064
+ quantity: 100
5065
+ },
5066
+ {
5067
+ itemId: 10009,
5068
+ quantity: 100
5069
+ },
5070
+ {
5071
+ itemId: 10004,
5072
+ quantity: 100
5073
+ },
5074
+ {
5075
+ itemId: 10210,
5076
+ quantity: 1
5077
+ }
5078
+ ],
5079
+ statSlots: [
5080
+ {
5081
+ sources: [
5082
+ {
5083
+ inputIndex: 0,
5084
+ statIndex: 0
5085
+ },
5086
+ {
5087
+ inputIndex: 5,
5088
+ statIndex: 0
5089
+ }
5090
+ ]
5091
+ },
5092
+ {
5093
+ sources: [
5094
+ {
5095
+ inputIndex: 1,
5096
+ statIndex: 0
5097
+ },
5098
+ {
5099
+ inputIndex: 5,
5100
+ statIndex: 1
5101
+ }
5102
+ ]
5103
+ },
5104
+ {
5105
+ sources: [
5106
+ {
5107
+ inputIndex: 2,
5108
+ statIndex: 0
5109
+ },
5110
+ {
5111
+ inputIndex: 5,
5112
+ statIndex: 2
5113
+ }
5114
+ ]
5115
+ },
5116
+ {
5117
+ sources: [
5118
+ {
5119
+ inputIndex: 3,
5120
+ statIndex: 0
5121
+ },
5122
+ {
5123
+ inputIndex: 5,
5124
+ statIndex: 3
5125
+ }
5126
+ ]
5127
+ },
5128
+ {
5129
+ sources: [
5130
+ {
5131
+ inputIndex: 4,
5132
+ statIndex: 0
5133
+ },
5134
+ {
5135
+ inputIndex: 5,
5136
+ statIndex: 4
5137
+ }
5138
+ ]
5139
+ }
5140
+ ],
5141
+ blendWeights: [
5142
+ ],
5143
+ sourceSubclass: 10210
5144
+ },
5145
+ {
5146
+ outputItemId: 10213,
5147
+ outputMass: 2400000,
5148
+ inputs: [
5149
+ {
5150
+ itemId: 10005,
5151
+ quantity: 100
5152
+ },
5153
+ {
5154
+ itemId: 10002,
5155
+ quantity: 100
5156
+ },
5157
+ {
5158
+ itemId: 10010,
5159
+ quantity: 100
5160
+ },
5161
+ {
5162
+ itemId: 10009,
5163
+ quantity: 100
5164
+ },
5165
+ {
5166
+ itemId: 10004,
5167
+ quantity: 100
5168
+ },
5169
+ {
5170
+ itemId: 10210,
5171
+ quantity: 1
5172
+ }
5173
+ ],
5174
+ statSlots: [
5175
+ {
5176
+ sources: [
5177
+ {
5178
+ inputIndex: 0,
5179
+ statIndex: 0
5180
+ },
5181
+ {
5182
+ inputIndex: 5,
5183
+ statIndex: 0
5184
+ }
5185
+ ]
5186
+ },
5187
+ {
5188
+ sources: [
5189
+ {
5190
+ inputIndex: 1,
5191
+ statIndex: 0
5192
+ },
5193
+ {
5194
+ inputIndex: 5,
5195
+ statIndex: 1
5196
+ }
5197
+ ]
5198
+ },
5199
+ {
5200
+ sources: [
5201
+ {
5202
+ inputIndex: 2,
5203
+ statIndex: 0
5204
+ },
5205
+ {
5206
+ inputIndex: 5,
5207
+ statIndex: 2
5208
+ }
5209
+ ]
5210
+ },
5211
+ {
5212
+ sources: [
5213
+ {
5214
+ inputIndex: 3,
5215
+ statIndex: 0
5216
+ },
5217
+ {
5218
+ inputIndex: 5,
5219
+ statIndex: 3
5220
+ }
5221
+ ]
5222
+ },
5223
+ {
5224
+ sources: [
5225
+ {
5226
+ inputIndex: 4,
5227
+ statIndex: 0
5228
+ },
5229
+ {
5230
+ inputIndex: 5,
5231
+ statIndex: 4
5232
+ }
5233
+ ]
5234
+ }
5235
+ ],
5236
+ blendWeights: [
5237
+ ],
5238
+ sourceSubclass: 10210
5239
+ },
5240
+ {
5241
+ outputItemId: 10214,
5242
+ outputMass: 2400000,
5243
+ inputs: [
5244
+ {
5245
+ itemId: 10005,
5246
+ quantity: 100
5247
+ },
5248
+ {
5249
+ itemId: 10002,
5250
+ quantity: 100
5251
+ },
5252
+ {
5253
+ itemId: 10010,
5254
+ quantity: 100
5255
+ },
5256
+ {
5257
+ itemId: 10009,
5258
+ quantity: 100
5259
+ },
5260
+ {
5261
+ itemId: 10004,
5262
+ quantity: 100
5263
+ },
5264
+ {
5265
+ itemId: 10210,
5266
+ quantity: 1
5267
+ }
5268
+ ],
5269
+ statSlots: [
5270
+ {
5271
+ sources: [
5272
+ {
5273
+ inputIndex: 0,
5274
+ statIndex: 0
5275
+ },
5276
+ {
5277
+ inputIndex: 5,
5278
+ statIndex: 0
5279
+ }
5280
+ ]
5281
+ },
5282
+ {
5283
+ sources: [
5284
+ {
5285
+ inputIndex: 1,
5286
+ statIndex: 0
5287
+ },
5288
+ {
5289
+ inputIndex: 5,
5290
+ statIndex: 1
5291
+ }
5292
+ ]
5293
+ },
5294
+ {
5295
+ sources: [
5296
+ {
5297
+ inputIndex: 2,
5298
+ statIndex: 0
5299
+ },
5300
+ {
5301
+ inputIndex: 5,
5302
+ statIndex: 2
5303
+ }
5304
+ ]
5305
+ },
5306
+ {
5307
+ sources: [
5308
+ {
5309
+ inputIndex: 3,
5310
+ statIndex: 0
5311
+ },
5312
+ {
5313
+ inputIndex: 5,
5314
+ statIndex: 3
5315
+ }
5316
+ ]
5317
+ },
5318
+ {
5319
+ sources: [
5320
+ {
5321
+ inputIndex: 4,
5322
+ statIndex: 0
5323
+ },
5324
+ {
5325
+ inputIndex: 5,
5326
+ statIndex: 4
5327
+ }
5328
+ ]
5329
+ }
5330
+ ],
5331
+ blendWeights: [
5332
+ ],
5333
+ sourceSubclass: 10210
5334
+ },
5335
+ {
5336
+ outputItemId: 10215,
5337
+ outputMass: 2400000,
5338
+ inputs: [
5339
+ {
5340
+ itemId: 10005,
5341
+ quantity: 100
5342
+ },
5343
+ {
5344
+ itemId: 10002,
5345
+ quantity: 100
5346
+ },
5347
+ {
5348
+ itemId: 10010,
5349
+ quantity: 100
5350
+ },
5351
+ {
5352
+ itemId: 10009,
5353
+ quantity: 100
5354
+ },
5355
+ {
5356
+ itemId: 10004,
5357
+ quantity: 100
5358
+ },
5359
+ {
5360
+ itemId: 10210,
5361
+ quantity: 1
5362
+ }
5363
+ ],
5364
+ statSlots: [
5365
+ {
5366
+ sources: [
5367
+ {
5368
+ inputIndex: 0,
5369
+ statIndex: 0
5370
+ },
5371
+ {
5372
+ inputIndex: 5,
5373
+ statIndex: 0
5374
+ }
5375
+ ]
5376
+ },
5377
+ {
5378
+ sources: [
5379
+ {
5380
+ inputIndex: 1,
5381
+ statIndex: 0
5382
+ },
5383
+ {
5384
+ inputIndex: 5,
5385
+ statIndex: 1
5386
+ }
5387
+ ]
5388
+ },
5389
+ {
5390
+ sources: [
5391
+ {
5392
+ inputIndex: 2,
5393
+ statIndex: 0
5394
+ },
5395
+ {
5396
+ inputIndex: 5,
5397
+ statIndex: 2
5398
+ }
5399
+ ]
5400
+ },
5401
+ {
5402
+ sources: [
5403
+ {
5404
+ inputIndex: 3,
5405
+ statIndex: 0
5406
+ },
5407
+ {
5408
+ inputIndex: 5,
5409
+ statIndex: 3
5410
+ }
5411
+ ]
5412
+ },
5413
+ {
5414
+ sources: [
5415
+ {
5416
+ inputIndex: 4,
5417
+ statIndex: 0
5418
+ },
5419
+ {
5420
+ inputIndex: 5,
5421
+ statIndex: 4
5422
+ }
5423
+ ]
5424
+ }
5425
+ ],
5426
+ blendWeights: [
5427
+ ],
5428
+ sourceSubclass: 10210
5429
+ },
5430
+ {
5431
+ outputItemId: 10216,
5432
+ outputMass: 3600000,
5433
+ inputs: [
5434
+ {
5435
+ itemId: 10005,
5436
+ quantity: 150
5437
+ },
5438
+ {
5439
+ itemId: 10002,
5440
+ quantity: 150
5441
+ },
5442
+ {
5443
+ itemId: 10010,
5444
+ quantity: 150
5445
+ },
5446
+ {
5447
+ itemId: 10009,
5448
+ quantity: 150
5449
+ },
5450
+ {
5451
+ itemId: 10004,
5452
+ quantity: 150
5453
+ },
5454
+ {
5455
+ itemId: 10211,
5456
+ quantity: 1
5457
+ }
5458
+ ],
5459
+ statSlots: [
5460
+ {
5461
+ sources: [
5462
+ {
5463
+ inputIndex: 0,
5464
+ statIndex: 0
5465
+ },
5466
+ {
5467
+ inputIndex: 5,
5468
+ statIndex: 0
5469
+ }
5470
+ ]
5471
+ },
5472
+ {
5473
+ sources: [
5474
+ {
5475
+ inputIndex: 1,
5476
+ statIndex: 0
5477
+ },
5478
+ {
5479
+ inputIndex: 5,
5480
+ statIndex: 1
5481
+ }
5482
+ ]
5483
+ },
5484
+ {
5485
+ sources: [
5486
+ {
5487
+ inputIndex: 2,
5488
+ statIndex: 0
5489
+ },
5490
+ {
5491
+ inputIndex: 5,
5492
+ statIndex: 2
5493
+ }
5494
+ ]
5495
+ },
5496
+ {
5497
+ sources: [
5498
+ {
5499
+ inputIndex: 3,
5500
+ statIndex: 0
5501
+ },
5502
+ {
5503
+ inputIndex: 5,
5504
+ statIndex: 3
5505
+ }
5506
+ ]
5507
+ },
5508
+ {
5509
+ sources: [
5510
+ {
5511
+ inputIndex: 4,
5512
+ statIndex: 0
5513
+ },
5514
+ {
5515
+ inputIndex: 5,
5516
+ statIndex: 4
5517
+ }
5518
+ ]
5519
+ }
5520
+ ],
5521
+ blendWeights: [
5522
+ ],
5523
+ sourceSubclass: 10211
5524
+ },
5525
+ {
5526
+ outputItemId: 10217,
5527
+ outputMass: 3600000,
5528
+ inputs: [
5529
+ {
5530
+ itemId: 10005,
5531
+ quantity: 150
5532
+ },
5533
+ {
5534
+ itemId: 10002,
5535
+ quantity: 150
5536
+ },
5537
+ {
5538
+ itemId: 10010,
5539
+ quantity: 150
5540
+ },
5541
+ {
5542
+ itemId: 10009,
5543
+ quantity: 150
5544
+ },
5545
+ {
5546
+ itemId: 10004,
5547
+ quantity: 150
5548
+ },
5549
+ {
5550
+ itemId: 10211,
5551
+ quantity: 1
5552
+ }
5553
+ ],
5554
+ statSlots: [
5555
+ {
5556
+ sources: [
5557
+ {
5558
+ inputIndex: 0,
5559
+ statIndex: 0
5560
+ },
5561
+ {
5562
+ inputIndex: 5,
5563
+ statIndex: 0
5564
+ }
5565
+ ]
5566
+ },
5567
+ {
5568
+ sources: [
5569
+ {
5570
+ inputIndex: 1,
5571
+ statIndex: 0
5572
+ },
5573
+ {
5574
+ inputIndex: 5,
5575
+ statIndex: 1
5576
+ }
5577
+ ]
5578
+ },
5579
+ {
5580
+ sources: [
5581
+ {
5582
+ inputIndex: 2,
5583
+ statIndex: 0
5584
+ },
5585
+ {
5586
+ inputIndex: 5,
5587
+ statIndex: 2
5588
+ }
5589
+ ]
5590
+ },
5591
+ {
5592
+ sources: [
5593
+ {
5594
+ inputIndex: 3,
5595
+ statIndex: 0
5596
+ },
5597
+ {
5598
+ inputIndex: 5,
5599
+ statIndex: 3
5600
+ }
5601
+ ]
5602
+ },
5603
+ {
5604
+ sources: [
5605
+ {
5606
+ inputIndex: 4,
5607
+ statIndex: 0
5608
+ },
5609
+ {
5610
+ inputIndex: 5,
5611
+ statIndex: 4
5612
+ }
5613
+ ]
5614
+ }
5615
+ ],
5616
+ blendWeights: [
5617
+ ],
5618
+ sourceSubclass: 10211
5619
+ },
5620
+ {
5621
+ outputItemId: 20001,
5622
+ outputMass: 4800,
5623
+ inputs: [
5624
+ {
5625
+ itemId: 102,
5626
+ quantity: 12
5627
+ }
5628
+ ],
5629
+ statSlots: [
5630
+ {
5631
+ sources: [
5632
+ {
5633
+ inputIndex: 0,
5634
+ statIndex: 0
5635
+ }
5636
+ ]
5637
+ },
5638
+ {
5639
+ sources: [
5640
+ {
5641
+ inputIndex: 0,
5642
+ statIndex: 2
5643
+ }
5644
+ ]
5645
+ },
5646
+ {
5647
+ sources: [
5648
+ {
5649
+ inputIndex: 0,
5650
+ statIndex: 1
5651
+ }
5652
+ ]
5653
+ }
5654
+ ],
5655
+ blendWeights: [
5656
+ ]
5657
+ },
5658
+ {
5659
+ outputItemId: 20002,
5660
+ outputMass: 4800,
5661
+ inputs: [
5662
+ {
5663
+ itemId: 402,
5664
+ quantity: 6
5665
+ },
5666
+ {
5667
+ itemId: 502,
5668
+ quantity: 6
5669
+ }
5670
+ ],
5671
+ statSlots: [
5672
+ {
5673
+ sources: [
5674
+ {
5675
+ inputIndex: 0,
5676
+ statIndex: 1
5677
+ }
5678
+ ]
5679
+ },
5680
+ {
5681
+ sources: [
5682
+ {
5683
+ inputIndex: 0,
5684
+ statIndex: 0
5685
+ }
5686
+ ]
5687
+ },
5688
+ {
5689
+ sources: [
4639
5690
  {
4640
5691
  inputIndex: 0,
4641
5692
  statIndex: 2
@@ -5166,27 +6217,27 @@ var recipes = [
5166
6217
  outputMass: 3840000,
5167
6218
  inputs: [
5168
6219
  {
5169
- itemId: 20001,
5170
- quantity: 300
6220
+ itemId: 20005,
6221
+ quantity: 150
5171
6222
  },
5172
6223
  {
5173
- itemId: 20008,
5174
- quantity: 300
6224
+ itemId: 20002,
6225
+ quantity: 150
5175
6226
  },
5176
6227
  {
5177
- itemId: 20007,
5178
- quantity: 300
6228
+ itemId: 20010,
6229
+ quantity: 150
5179
6230
  },
5180
6231
  {
5181
- itemId: 20003,
5182
- quantity: 300
6232
+ itemId: 20009,
6233
+ quantity: 150
5183
6234
  },
5184
6235
  {
5185
- itemId: 20006,
5186
- quantity: 300
6236
+ itemId: 20004,
6237
+ quantity: 150
5187
6238
  },
5188
6239
  {
5189
- itemId: 10201,
6240
+ itemId: 10211,
5190
6241
  quantity: 1
5191
6242
  }
5192
6243
  ],
@@ -5206,8 +6257,8 @@ var recipes = [
5206
6257
  {
5207
6258
  sources: [
5208
6259
  {
5209
- inputIndex: 0,
5210
- statIndex: 1
6260
+ inputIndex: 1,
6261
+ statIndex: 0
5211
6262
  },
5212
6263
  {
5213
6264
  inputIndex: 5,
@@ -5217,207 +6268,484 @@ var recipes = [
5217
6268
  },
5218
6269
  {
5219
6270
  sources: [
6271
+ {
6272
+ inputIndex: 2,
6273
+ statIndex: 0
6274
+ },
6275
+ {
6276
+ inputIndex: 5,
6277
+ statIndex: 2
6278
+ }
6279
+ ]
6280
+ },
6281
+ {
6282
+ sources: [
6283
+ {
6284
+ inputIndex: 3,
6285
+ statIndex: 0
6286
+ },
6287
+ {
6288
+ inputIndex: 5,
6289
+ statIndex: 3
6290
+ }
5220
6291
  ]
5221
6292
  },
5222
6293
  {
5223
6294
  sources: [
6295
+ {
6296
+ inputIndex: 4,
6297
+ statIndex: 0
6298
+ },
6299
+ {
6300
+ inputIndex: 5,
6301
+ statIndex: 4
6302
+ }
5224
6303
  ]
5225
6304
  }
5226
6305
  ],
5227
6306
  blendWeights: [
5228
6307
  ],
5229
- sourceSubclass: 10201
6308
+ sourceSubclass: 10211
5230
6309
  },
5231
6310
  {
5232
6311
  outputItemId: 20211,
5233
6312
  outputMass: 3840000,
5234
6313
  inputs: [
5235
6314
  {
5236
- itemId: 20001,
5237
- quantity: 300
6315
+ itemId: 20005,
6316
+ quantity: 150
5238
6317
  },
5239
6318
  {
5240
6319
  itemId: 20002,
5241
- quantity: 300
6320
+ quantity: 150
5242
6321
  },
5243
6322
  {
5244
- itemId: 20008,
5245
- quantity: 300
6323
+ itemId: 20010,
6324
+ quantity: 150
5246
6325
  },
5247
6326
  {
5248
- itemId: 20010,
5249
- quantity: 300
6327
+ itemId: 20009,
6328
+ quantity: 150
6329
+ },
6330
+ {
6331
+ itemId: 20004,
6332
+ quantity: 150
6333
+ },
6334
+ {
6335
+ itemId: 10214,
6336
+ quantity: 1
6337
+ }
6338
+ ],
6339
+ statSlots: [
6340
+ {
6341
+ sources: [
6342
+ {
6343
+ inputIndex: 0,
6344
+ statIndex: 0
6345
+ },
6346
+ {
6347
+ inputIndex: 5,
6348
+ statIndex: 0
6349
+ }
6350
+ ]
6351
+ },
6352
+ {
6353
+ sources: [
6354
+ {
6355
+ inputIndex: 1,
6356
+ statIndex: 0
6357
+ },
6358
+ {
6359
+ inputIndex: 5,
6360
+ statIndex: 1
6361
+ }
6362
+ ]
6363
+ },
6364
+ {
6365
+ sources: [
6366
+ {
6367
+ inputIndex: 2,
6368
+ statIndex: 0
6369
+ },
6370
+ {
6371
+ inputIndex: 5,
6372
+ statIndex: 2
6373
+ }
6374
+ ]
6375
+ },
6376
+ {
6377
+ sources: [
6378
+ {
6379
+ inputIndex: 3,
6380
+ statIndex: 0
6381
+ },
6382
+ {
6383
+ inputIndex: 5,
6384
+ statIndex: 3
6385
+ }
6386
+ ]
6387
+ },
6388
+ {
6389
+ sources: [
6390
+ {
6391
+ inputIndex: 4,
6392
+ statIndex: 0
6393
+ },
6394
+ {
6395
+ inputIndex: 5,
6396
+ statIndex: 4
6397
+ }
6398
+ ]
6399
+ }
6400
+ ],
6401
+ blendWeights: [
6402
+ ],
6403
+ sourceSubclass: 10214
6404
+ }
6405
+ ];
6406
+
6407
+ var entities = [
6408
+ {
6409
+ entityItemId: 10200,
6410
+ slots: [
6411
+ ],
6412
+ baseHullmass: 100000
6413
+ },
6414
+ {
6415
+ entityItemId: 10201,
6416
+ slots: [
6417
+ {
6418
+ type: "any",
6419
+ outputPct: 80,
6420
+ maxTier: 1
6421
+ },
6422
+ {
6423
+ type: "any",
6424
+ outputPct: 80,
6425
+ maxTier: 1
6426
+ },
6427
+ {
6428
+ type: "any",
6429
+ outputPct: 80,
6430
+ maxTier: 1
6431
+ },
6432
+ {
6433
+ type: "any",
6434
+ outputPct: 80,
6435
+ maxTier: 1
6436
+ },
6437
+ {
6438
+ type: "any",
6439
+ outputPct: 80,
6440
+ maxTier: 1
6441
+ }
6442
+ ],
6443
+ baseHullmass: 4000000
6444
+ },
6445
+ {
6446
+ entityItemId: 10202,
6447
+ slots: [
6448
+ {
6449
+ type: "loader",
6450
+ outputPct: 100,
6451
+ maxTier: 1
6452
+ },
6453
+ {
6454
+ type: "storage",
6455
+ outputPct: 100,
6456
+ maxTier: 1
6457
+ },
6458
+ {
6459
+ type: "storage",
6460
+ outputPct: 100,
6461
+ maxTier: 1
6462
+ },
6463
+ {
6464
+ type: "storage",
6465
+ outputPct: 100,
6466
+ maxTier: 1
6467
+ },
6468
+ {
6469
+ type: "storage",
6470
+ outputPct: 100,
6471
+ maxTier: 1
6472
+ }
6473
+ ],
6474
+ baseHullmass: 100000
6475
+ },
6476
+ {
6477
+ entityItemId: 10203,
6478
+ slots: [
6479
+ {
6480
+ type: "generator",
6481
+ outputPct: 200,
6482
+ maxTier: 1
6483
+ },
6484
+ {
6485
+ type: "gatherer",
6486
+ outputPct: 200,
6487
+ maxTier: 1
6488
+ }
6489
+ ],
6490
+ baseHullmass: 100000
6491
+ },
6492
+ {
6493
+ entityItemId: 10204,
6494
+ slots: [
6495
+ {
6496
+ type: "generator",
6497
+ outputPct: 200,
6498
+ maxTier: 1
6499
+ },
6500
+ {
6501
+ type: "crafter",
6502
+ outputPct: 200,
6503
+ maxTier: 1
6504
+ }
6505
+ ],
6506
+ baseHullmass: 100000
6507
+ },
6508
+ {
6509
+ entityItemId: 10205,
6510
+ slots: [
6511
+ {
6512
+ type: "generator",
6513
+ outputPct: 200,
6514
+ maxTier: 1
6515
+ },
6516
+ {
6517
+ type: "launcher",
6518
+ outputPct: 200,
6519
+ maxTier: 1
6520
+ }
6521
+ ],
6522
+ baseHullmass: 100000
6523
+ },
6524
+ {
6525
+ entityItemId: 10206,
6526
+ slots: [
6527
+ {
6528
+ type: "storage",
6529
+ outputPct: 100,
6530
+ maxTier: 1
5250
6531
  },
5251
6532
  {
5252
- itemId: 20004,
5253
- quantity: 300
6533
+ type: "storage",
6534
+ outputPct: 100,
6535
+ maxTier: 1
5254
6536
  },
5255
6537
  {
5256
- itemId: 10201,
5257
- quantity: 1
6538
+ type: "storage",
6539
+ outputPct: 100,
6540
+ maxTier: 1
5258
6541
  }
5259
6542
  ],
5260
- statSlots: [
6543
+ baseHullmass: 100000
6544
+ },
6545
+ {
6546
+ entityItemId: 10207,
6547
+ slots: [
6548
+ ],
6549
+ baseHullmass: 100000
6550
+ },
6551
+ {
6552
+ entityItemId: 10208,
6553
+ slots: [
5261
6554
  {
5262
- sources: [
5263
- {
5264
- inputIndex: 0,
5265
- statIndex: 0
5266
- },
5267
- {
5268
- inputIndex: 5,
5269
- statIndex: 0
5270
- }
5271
- ]
6555
+ type: "crafter",
6556
+ outputPct: 75,
6557
+ maxTier: 1
5272
6558
  },
5273
6559
  {
5274
- sources: [
5275
- {
5276
- inputIndex: 0,
5277
- statIndex: 1
5278
- },
5279
- {
5280
- inputIndex: 5,
5281
- statIndex: 1
5282
- }
5283
- ]
6560
+ type: "crafter",
6561
+ outputPct: 75,
6562
+ maxTier: 1
5284
6563
  },
5285
6564
  {
5286
- sources: [
5287
- ]
6565
+ type: "crafter",
6566
+ outputPct: 75,
6567
+ maxTier: 1
5288
6568
  },
5289
6569
  {
5290
- sources: [
5291
- ]
6570
+ type: "crafter",
6571
+ outputPct: 75,
6572
+ maxTier: 1
6573
+ },
6574
+ {
6575
+ type: "crafter",
6576
+ outputPct: 75,
6577
+ maxTier: 1
5292
6578
  }
5293
6579
  ],
5294
- blendWeights: [
5295
- ],
5296
- sourceSubclass: 10201
5297
- }
5298
- ];
5299
-
5300
- var entities = [
5301
- {
5302
- entityItemId: 10200,
5303
- slots: [
5304
- ]
6580
+ baseHullmass: 100000
5305
6581
  },
5306
6582
  {
5307
- entityItemId: 10201,
6583
+ entityItemId: 10210,
5308
6584
  slots: [
5309
6585
  {
5310
- type: "any",
6586
+ type: "generator",
5311
6587
  outputPct: 80,
5312
6588
  maxTier: 1
5313
6589
  },
5314
6590
  {
5315
- type: "any",
6591
+ type: "engine",
5316
6592
  outputPct: 80,
5317
6593
  maxTier: 1
5318
6594
  },
5319
6595
  {
5320
6596
  type: "any",
5321
- outputPct: 80,
6597
+ outputPct: 60,
6598
+ maxTier: 1
6599
+ }
6600
+ ],
6601
+ baseHullmass: 3200000
6602
+ },
6603
+ {
6604
+ entityItemId: 10211,
6605
+ slots: [
6606
+ {
6607
+ type: "generator",
6608
+ outputPct: 85,
5322
6609
  maxTier: 1
5323
6610
  },
5324
6611
  {
5325
- type: "any",
5326
- outputPct: 80,
6612
+ type: "engine",
6613
+ outputPct: 85,
5327
6614
  maxTier: 1
5328
6615
  },
5329
6616
  {
5330
- type: "any",
5331
- outputPct: 80,
6617
+ type: "gatherer",
6618
+ outputPct: 100,
5332
6619
  maxTier: 1
5333
6620
  }
5334
- ]
6621
+ ],
6622
+ baseHullmass: 3600000
5335
6623
  },
5336
6624
  {
5337
- entityItemId: 10202,
6625
+ entityItemId: 10212,
5338
6626
  slots: [
5339
6627
  {
5340
- type: "loader",
5341
- outputPct: 100,
6628
+ type: "generator",
6629
+ outputPct: 85,
5342
6630
  maxTier: 1
5343
6631
  },
5344
6632
  {
5345
- type: "storage",
5346
- outputPct: 100,
6633
+ type: "engine",
6634
+ outputPct: 85,
5347
6635
  maxTier: 1
5348
6636
  },
5349
6637
  {
5350
- type: "storage",
6638
+ type: "loader",
5351
6639
  outputPct: 100,
5352
6640
  maxTier: 1
6641
+ }
6642
+ ],
6643
+ baseHullmass: 3600000
6644
+ },
6645
+ {
6646
+ entityItemId: 10213,
6647
+ slots: [
6648
+ {
6649
+ type: "generator",
6650
+ outputPct: 85,
6651
+ maxTier: 1
5353
6652
  },
5354
6653
  {
5355
- type: "storage",
5356
- outputPct: 100,
6654
+ type: "engine",
6655
+ outputPct: 85,
5357
6656
  maxTier: 1
5358
6657
  },
5359
6658
  {
5360
- type: "storage",
6659
+ type: "builder",
5361
6660
  outputPct: 100,
5362
6661
  maxTier: 1
5363
6662
  }
5364
- ]
6663
+ ],
6664
+ baseHullmass: 4400000
5365
6665
  },
5366
6666
  {
5367
- entityItemId: 10203,
6667
+ entityItemId: 10214,
5368
6668
  slots: [
5369
6669
  {
5370
6670
  type: "generator",
5371
- outputPct: 200,
6671
+ outputPct: 85,
5372
6672
  maxTier: 1
5373
6673
  },
5374
6674
  {
5375
- type: "gatherer",
5376
- outputPct: 200,
6675
+ type: "engine",
6676
+ outputPct: 85,
6677
+ maxTier: 1
6678
+ },
6679
+ {
6680
+ type: "hauler",
6681
+ outputPct: 100,
5377
6682
  maxTier: 1
5378
6683
  }
5379
- ]
6684
+ ],
6685
+ baseHullmass: 4400000
5380
6686
  },
5381
6687
  {
5382
- entityItemId: 10204,
6688
+ entityItemId: 10215,
5383
6689
  slots: [
5384
6690
  {
5385
6691
  type: "generator",
5386
- outputPct: 200,
6692
+ outputPct: 85,
5387
6693
  maxTier: 1
5388
6694
  },
5389
6695
  {
5390
- type: "crafter",
5391
- outputPct: 200,
6696
+ type: "engine",
6697
+ outputPct: 85,
6698
+ maxTier: 1
6699
+ },
6700
+ {
6701
+ type: "storage",
6702
+ outputPct: 100,
5392
6703
  maxTier: 1
5393
6704
  }
5394
- ]
6705
+ ],
6706
+ baseHullmass: 5000000
5395
6707
  },
5396
6708
  {
5397
- entityItemId: 10205,
6709
+ entityItemId: 10216,
5398
6710
  slots: [
5399
6711
  {
5400
6712
  type: "generator",
5401
- outputPct: 200,
6713
+ outputPct: 90,
5402
6714
  maxTier: 1
5403
6715
  },
5404
6716
  {
5405
- type: "launcher",
5406
- outputPct: 200,
6717
+ type: "engine",
6718
+ outputPct: 90,
6719
+ maxTier: 1
6720
+ },
6721
+ {
6722
+ type: "gatherer",
6723
+ outputPct: 100,
6724
+ maxTier: 1
6725
+ },
6726
+ {
6727
+ type: "gatherer",
6728
+ outputPct: 100,
5407
6729
  maxTier: 1
5408
6730
  }
5409
- ]
6731
+ ],
6732
+ baseHullmass: 4000000
5410
6733
  },
5411
6734
  {
5412
- entityItemId: 10206,
6735
+ entityItemId: 10217,
5413
6736
  slots: [
5414
6737
  {
5415
- type: "storage",
5416
- outputPct: 100,
6738
+ type: "generator",
6739
+ outputPct: 90,
5417
6740
  maxTier: 1
5418
6741
  },
5419
6742
  {
5420
- type: "storage",
6743
+ type: "engine",
6744
+ outputPct: 90,
6745
+ maxTier: 1
6746
+ },
6747
+ {
6748
+ type: "gatherer",
5421
6749
  outputPct: 100,
5422
6750
  maxTier: 1
5423
6751
  },
@@ -5426,23 +6754,20 @@ var entities = [
5426
6754
  outputPct: 100,
5427
6755
  maxTier: 1
5428
6756
  }
5429
- ]
5430
- },
5431
- {
5432
- entityItemId: 10207,
5433
- slots: [
5434
- ]
6757
+ ],
6758
+ baseHullmass: 4800000
5435
6759
  },
5436
6760
  {
5437
6761
  entityItemId: 20200,
5438
6762
  slots: [
5439
- ]
6763
+ ],
6764
+ baseHullmass: 100000
5440
6765
  },
5441
6766
  {
5442
6767
  entityItemId: 20210,
5443
6768
  slots: [
5444
6769
  {
5445
- type: "engine",
6770
+ type: "generator",
5446
6771
  outputPct: 100,
5447
6772
  maxTier: 2
5448
6773
  },
@@ -5452,7 +6777,7 @@ var entities = [
5452
6777
  maxTier: 2
5453
6778
  },
5454
6779
  {
5455
- type: "gatherer",
6780
+ type: "engine",
5456
6781
  outputPct: 100,
5457
6782
  maxTier: 2
5458
6783
  },
@@ -5460,24 +6785,20 @@ var entities = [
5460
6785
  type: "gatherer",
5461
6786
  outputPct: 100,
5462
6787
  maxTier: 2
5463
- },
5464
- {
5465
- type: "any",
5466
- outputPct: 80,
5467
- maxTier: 1
5468
6788
  }
5469
- ]
6789
+ ],
6790
+ baseHullmass: 5760000
5470
6791
  },
5471
6792
  {
5472
6793
  entityItemId: 20211,
5473
6794
  slots: [
5474
6795
  {
5475
- type: "engine",
6796
+ type: "generator",
5476
6797
  outputPct: 100,
5477
6798
  maxTier: 2
5478
6799
  },
5479
6800
  {
5480
- type: "generator",
6801
+ type: "engine",
5481
6802
  outputPct: 100,
5482
6803
  maxTier: 2
5483
6804
  },
@@ -5491,7 +6812,8 @@ var entities = [
5491
6812
  outputPct: 100,
5492
6813
  maxTier: 2
5493
6814
  }
5494
- ]
6815
+ ],
6816
+ baseHullmass: 7040000
5495
6817
  }
5496
6818
  ];
5497
6819
 
@@ -6016,6 +7338,13 @@ var items = [
6016
7338
  tier: 1,
6017
7339
  subtype: "launcher"
6018
7340
  },
7341
+ {
7342
+ id: 10110,
7343
+ mass: 960000,
7344
+ type: "module",
7345
+ tier: 1,
7346
+ subtype: "builder"
7347
+ },
6019
7348
  {
6020
7349
  id: 10200,
6021
7350
  mass: 1900000,
@@ -6064,6 +7393,60 @@ var items = [
6064
7393
  type: "entity",
6065
7394
  tier: 1
6066
7395
  },
7396
+ {
7397
+ id: 10208,
7398
+ mass: 1900000,
7399
+ type: "entity",
7400
+ tier: 1
7401
+ },
7402
+ {
7403
+ id: 10210,
7404
+ mass: 1600000,
7405
+ type: "entity",
7406
+ tier: 1
7407
+ },
7408
+ {
7409
+ id: 10211,
7410
+ mass: 2400000,
7411
+ type: "entity",
7412
+ tier: 1
7413
+ },
7414
+ {
7415
+ id: 10212,
7416
+ mass: 2400000,
7417
+ type: "entity",
7418
+ tier: 1
7419
+ },
7420
+ {
7421
+ id: 10213,
7422
+ mass: 2400000,
7423
+ type: "entity",
7424
+ tier: 1
7425
+ },
7426
+ {
7427
+ id: 10214,
7428
+ mass: 2400000,
7429
+ type: "entity",
7430
+ tier: 1
7431
+ },
7432
+ {
7433
+ id: 10215,
7434
+ mass: 2400000,
7435
+ type: "entity",
7436
+ tier: 1
7437
+ },
7438
+ {
7439
+ id: 10216,
7440
+ mass: 3600000,
7441
+ type: "entity",
7442
+ tier: 1
7443
+ },
7444
+ {
7445
+ id: 10217,
7446
+ mass: 3600000,
7447
+ type: "entity",
7448
+ tier: 1
7449
+ },
6067
7450
  {
6068
7451
  id: 20001,
6069
7452
  mass: 4800,
@@ -6327,7 +7710,7 @@ const itemMetadata = {
6327
7710
  },
6328
7711
  10106: {
6329
7712
  name: 'Tractor Beam',
6330
- description: 'Projects a haul beam to lock onto and transport containers or warehouses through group travel.',
7713
+ description: 'Projects a haul beam to lock onto and transport containers through group travel.',
6331
7714
  color: '#4ADBFF',
6332
7715
  },
6333
7716
  10107: {
@@ -6345,13 +7728,18 @@ const itemMetadata = {
6345
7728
  description: 'Accelerates and launches cargo payloads toward a remote mass catcher.',
6346
7729
  color: '#E86344',
6347
7730
  },
7731
+ 10110: {
7732
+ name: 'Assembly Arm',
7733
+ description: 'Heavy manipulator arms for on-site construction work. Claims build sites, builds them out, and upgrades ships in place.',
7734
+ color: '#FFB347',
7735
+ },
6348
7736
  10200: {
6349
7737
  name: 'Container',
6350
7738
  description: 'Passive floating cargo storage in space. Towed by ships.',
6351
7739
  color: '#7B8D9E',
6352
7740
  },
6353
7741
  10201: {
6354
- name: 'Roustabout',
7742
+ name: 'Ship',
6355
7743
  description: 'General-purpose vessel with 5 module slots.',
6356
7744
  color: '#4AE898',
6357
7745
  },
@@ -6385,6 +7773,51 @@ const itemMetadata = {
6385
7773
  description: 'Orbital command structure. Anchors a player station cluster.',
6386
7774
  color: '#A0B8D0',
6387
7775
  },
7776
+ 10208: {
7777
+ name: 'Workshop',
7778
+ description: 'A station workshop with five independent workers. Visiting ships bring materials and power, and the workshop does the crafting.',
7779
+ color: '#B877FF',
7780
+ },
7781
+ 10210: {
7782
+ name: 'Roustabout',
7783
+ description: 'A basic starter ship. One engine, one power core, and one open slot to fit as you like.',
7784
+ color: '#4AE898',
7785
+ },
7786
+ 10211: {
7787
+ name: 'Prospector',
7788
+ description: 'A light gathering ship. One engine, one power core, one gathering rig.',
7789
+ color: '#4AE898',
7790
+ },
7791
+ 10212: {
7792
+ name: 'Tender',
7793
+ description: 'A logistics ship with a shuttle bay for moving cargo between ships and stations.',
7794
+ color: '#4AE898',
7795
+ },
7796
+ 10213: {
7797
+ name: 'Wright',
7798
+ description: 'A construction ship with an assembly arm for building structures and upgrading ships.',
7799
+ color: '#4AE898',
7800
+ },
7801
+ 10214: {
7802
+ name: 'Tug',
7803
+ description: 'A logistics ship with a tractor beam for towing containers from place to place.',
7804
+ color: '#4AE898',
7805
+ },
7806
+ 10215: {
7807
+ name: 'Porter',
7808
+ description: 'A cargo ship built around a large storage hold. The extra mass makes it slower than a Roustabout.',
7809
+ color: '#4AE898',
7810
+ },
7811
+ 10216: {
7812
+ name: 'Wrangler',
7813
+ description: 'A heavy gathering ship with two gathering rigs, so it mines faster.',
7814
+ color: '#4AE898',
7815
+ },
7816
+ 10217: {
7817
+ name: 'Dredger',
7818
+ description: 'A gathering ship with its own storage hold, so it can keep mining before it has to offload.',
7819
+ color: '#4AE898',
7820
+ },
6388
7821
  20001: {
6389
7822
  name: 'Plate',
6390
7823
  description: 'Advanced structural plating reinforced with tier 2 ore.',
@@ -6456,13 +7889,21 @@ const itemMetadata = {
6456
7889
  color: '#4AE898',
6457
7890
  },
6458
7891
  20211: {
6459
- name: 'Hauler',
7892
+ name: 'Tug',
6460
7893
  description: 'Advanced towing vessel with tiered engine, generator, and tractor beam slots.',
6461
7894
  color: '#4AE898',
6462
7895
  },
6463
7896
  };
6464
7897
  const entityMetadata = {
6465
7898
  10201: { moduleSlotLabels: ['Engine', 'Power Core', 'Limpet Bay', 'Shuttle Bay', 'Cargo Hold'] },
7899
+ 10210: { moduleSlotLabels: ['Power Core', 'Engine', 'Utility Bay'] },
7900
+ 10211: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay'] },
7901
+ 10212: { moduleSlotLabels: ['Power Core', 'Engine', 'Shuttle Bay'] },
7902
+ 10213: { moduleSlotLabels: ['Power Core', 'Engine', 'Assembly Arm'] },
7903
+ 10214: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam'] },
7904
+ 10215: { moduleSlotLabels: ['Power Core', 'Engine', 'Cargo Hold'] },
7905
+ 10216: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Limpet Bay'] },
7906
+ 10217: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Cargo Hold'] },
6466
7907
  10202: {
6467
7908
  moduleSlotLabels: ['Shuttle Bay', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold'],
6468
7909
  },
@@ -6470,8 +7911,11 @@ const entityMetadata = {
6470
7911
  10204: { moduleSlotLabels: ['Power Core', 'Fabricator'] },
6471
7912
  10205: { moduleSlotLabels: ['Power Core', 'Drive Coil'] },
6472
7913
  10206: { moduleSlotLabels: ['Cargo Hold', 'Cargo Hold', 'Cargo Hold'] },
6473
- 20210: { moduleSlotLabels: ['Engine', 'Power Core', 'Limpet Bay', 'Limpet Bay', 'Flex Slot'] },
6474
- 20211: { moduleSlotLabels: ['Engine', 'Power Core', 'Tractor Beam', 'Tractor Beam'] },
7914
+ 10208: {
7915
+ moduleSlotLabels: ['Fabricator', 'Fabricator', 'Fabricator', 'Fabricator', 'Fabricator'],
7916
+ },
7917
+ 20210: { moduleSlotLabels: ['Power Core', 'Power Core', 'Engine', 'Limpet Bay'] },
7918
+ 20211: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam', 'Tractor Beam'] },
6475
7919
  };
6476
7920
  for (const item of items) {
6477
7921
  if (!itemMetadata[item.id]) {
@@ -9362,14 +10806,61 @@ var kinds = [
9362
10806
  capabilityFlags: 4,
9363
10807
  zCoord: 0,
9364
10808
  defaultLabel: "Station Hub"
10809
+ },
10810
+ {
10811
+ kind: "workshop",
10812
+ classification: "OrbitalStructure",
10813
+ capabilityFlags: 20,
10814
+ zCoord: 0,
10815
+ defaultLabel: "Workshop"
9365
10816
  }
9366
10817
  ];
9367
10818
  var templates = [
9368
10819
  {
9369
10820
  itemId: 10201,
9370
10821
  kind: "ship",
10822
+ displayLabel: "Ship"
10823
+ },
10824
+ {
10825
+ itemId: 10210,
10826
+ kind: "ship",
9371
10827
  displayLabel: "Roustabout"
9372
10828
  },
10829
+ {
10830
+ itemId: 10211,
10831
+ kind: "ship",
10832
+ displayLabel: "Prospector"
10833
+ },
10834
+ {
10835
+ itemId: 10212,
10836
+ kind: "ship",
10837
+ displayLabel: "Tender"
10838
+ },
10839
+ {
10840
+ itemId: 10213,
10841
+ kind: "ship",
10842
+ displayLabel: "Wright"
10843
+ },
10844
+ {
10845
+ itemId: 10214,
10846
+ kind: "ship",
10847
+ displayLabel: "Tug"
10848
+ },
10849
+ {
10850
+ itemId: 10215,
10851
+ kind: "ship",
10852
+ displayLabel: "Porter"
10853
+ },
10854
+ {
10855
+ itemId: 10216,
10856
+ kind: "ship",
10857
+ displayLabel: "Wrangler"
10858
+ },
10859
+ {
10860
+ itemId: 10217,
10861
+ kind: "ship",
10862
+ displayLabel: "Dredger"
10863
+ },
9373
10864
  {
9374
10865
  itemId: 10202,
9375
10866
  kind: "warehouse",
@@ -9410,6 +10901,11 @@ var templates = [
9410
10901
  kind: "hub",
9411
10902
  displayLabel: ""
9412
10903
  },
10904
+ {
10905
+ itemId: 10208,
10906
+ kind: "workshop",
10907
+ displayLabel: ""
10908
+ },
9413
10909
  {
9414
10910
  itemId: 20210,
9415
10911
  kind: "ship",
@@ -9418,7 +10914,7 @@ var templates = [
9418
10914
  {
9419
10915
  itemId: 20211,
9420
10916
  kind: "ship",
9421
- displayLabel: "Hauler"
10917
+ displayLabel: "Tug"
9422
10918
  }
9423
10919
  ];
9424
10920
  var kindRegistryJson = {
@@ -9502,6 +10998,7 @@ const ENTITY_SHIP = Name.from('ship');
9502
10998
  const ENTITY_WAREHOUSE = Name.from('warehouse');
9503
10999
  const ENTITY_EXTRACTOR = Name.from('extractor');
9504
11000
  const ENTITY_FACTORY = Name.from('factory');
11001
+ const ENTITY_WORKSHOP = Name.from('workshop');
9505
11002
  const ENTITY_CONTAINER = Name.from('container');
9506
11003
  const ENTITY_NEXUS = Name.from('nexus');
9507
11004
  const ENTITY_PLOT = Name.from('plot');
@@ -9520,6 +11017,9 @@ function isExtractor(entity) {
9520
11017
  function isFactory(entity) {
9521
11018
  return entity.type?.equals(ENTITY_FACTORY) ?? false;
9522
11019
  }
11020
+ function isWorkshop(entity) {
11021
+ return entity.type?.equals(ENTITY_WORKSHOP) ?? false;
11022
+ }
9523
11023
  function isContainer(entity) {
9524
11024
  return entity.type?.equals(ENTITY_CONTAINER) ?? false;
9525
11025
  }
@@ -10001,7 +11501,7 @@ function distanceBetweenCoordinates(origin, destination) {
10001
11501
  function distanceBetweenPoints(x1, y1, x2, y2) {
10002
11502
  const x = (x1 - x2) ** 2;
10003
11503
  const y = (y1 - y2) ** 2;
10004
- return UInt64.from(Math.sqrt(x + y) * PRECISION$1);
11504
+ return UInt64.from(Math.sqrt(x + y) * PRECISION);
10005
11505
  }
10006
11506
  function lerp$1(origin, destination, time) {
10007
11507
  return {
@@ -10047,9 +11547,9 @@ function getInterpolatedPosition(entity, taskIndex, taskProgress) {
10047
11547
  function rotation(origin, destination) {
10048
11548
  return Math.atan2(destination.y - origin.y, destination.x - origin.x) * (180 / Math.PI) + 90;
10049
11549
  }
10050
- function findNearbyPlanets(seed, origin, maxDistance = 20 * PRECISION$1) {
11550
+ function findNearbyPlanets(seed, origin, maxDistance = 20 * PRECISION) {
10051
11551
  const nearbySystems = [];
10052
- const max = UInt64.from(maxDistance / PRECISION$1);
11552
+ const max = UInt64.from(maxDistance / PRECISION);
10053
11553
  const xMin = Int64.from(origin.x).subtracting(max);
10054
11554
  const xMax = Int64.from(origin.x).adding(max);
10055
11555
  const yMin = Int64.from(origin.y).subtracting(max);
@@ -10081,14 +11581,22 @@ function calc_rechargetime(capacity, energy, recharge) {
10081
11581
  function calc_ship_rechargetime(ship) {
10082
11582
  if (!ship.generator)
10083
11583
  return UInt32.from(0);
10084
- return calc_rechargetime(ship.generator.capacity, ship.energy ?? UInt16.from(0), ship.generator.recharge);
11584
+ return calc_rechargetime(ship.generator.capacity, ship.energy ?? UInt32.from(0), ship.generator.recharge);
10085
11585
  }
10086
11586
  function calc_flighttime(distance, acceleration) {
10087
11587
  return UInt32.from(2 * Math.sqrt(Number(distance) / acceleration));
10088
11588
  }
11589
+ function calc_travel_flighttime(distance, acceleration) {
11590
+ const cruiseTransitionDistance = 2 * PRECISION;
11591
+ if (Number(distance) <= cruiseTransitionDistance) {
11592
+ return calc_flighttime(distance, acceleration);
11593
+ }
11594
+ const cruiseVelocity = Math.sqrt(acceleration * cruiseTransitionDistance);
11595
+ return UInt32.from(Number(distance) / cruiseVelocity + cruiseVelocity / acceleration);
11596
+ }
10089
11597
  function calc_transit_duration(ax, ay, bx, by) {
10090
11598
  const distance = distanceBetweenPoints(ax, ay, bx, by);
10091
- return UInt32.from(Math.floor(distance.toNumber() / (PRECISION$1 * WH.TRANSIT_SPEED)));
11599
+ return UInt32.from(Math.floor(distance.toNumber() / (PRECISION * WH.TRANSIT_SPEED)));
10092
11600
  }
10093
11601
  function shipLoaderLane(ship) {
10094
11602
  const lanes = ship.loader_lanes ?? [];
@@ -10112,14 +11620,14 @@ function calc_loader_acceleration(ship, mass) {
10112
11620
  }
10113
11621
  function calc_ship_flighttime(ship, mass, distance) {
10114
11622
  const acceleration = calc_ship_acceleration(ship, mass);
10115
- return calc_flighttime(distance, acceleration);
11623
+ return calc_travel_flighttime(distance, acceleration);
10116
11624
  }
10117
11625
  function calc_ship_acceleration(ship, mass) {
10118
11626
  const thrust = ship.engines ? Number(ship.engines.thrust) : 0;
10119
11627
  return calc_acceleration(thrust, Number(mass));
10120
11628
  }
10121
11629
  function calc_acceleration(thrust, mass) {
10122
- return (thrust / mass) * PRECISION$1;
11630
+ return (thrust / mass) * PRECISION;
10123
11631
  }
10124
11632
  function calc_ship_mass(ship, cargos) {
10125
11633
  const mass = UInt64.from(0);
@@ -10145,10 +11653,10 @@ function calc_group_flighttime(totalThrust, haulCount, pooledHaulCap, weightedHa
10145
11653
  effectiveThrust = Math.trunc((totalThrust * 1000) / penaltyMilli);
10146
11654
  }
10147
11655
  const acceleration = calc_acceleration(effectiveThrust, totalMass);
10148
- return calc_flighttime(distance, acceleration);
11656
+ return calc_travel_flighttime(distance, acceleration);
10149
11657
  }
10150
11658
  function calc_energyusage(distance, drain) {
10151
- return UInt64.from(distance).dividing(PRECISION$1).multiplying(drain);
11659
+ return UInt64.from(distance).multiplying(drain).dividing(PRECISION);
10152
11660
  }
10153
11661
  function calculateTransferTime(ship, cargos, quantities) {
10154
11662
  let mass = UInt64.from(0);
@@ -10248,7 +11756,7 @@ function estimateDealTravelTime(ship, shipMass, distance, loadMass) {
10248
11756
  function hasEnergyForDistance(ship, distance) {
10249
11757
  if (!ship.engines)
10250
11758
  return false;
10251
- const energyNeeded = UInt64.from(distance).dividing(PRECISION$1).multiplying(ship.engines.drain);
11759
+ const energyNeeded = UInt64.from(distance).dividing(PRECISION).multiplying(ship.engines.drain);
10252
11760
  return UInt64.from(ship.energy ?? 0).gte(energyNeeded);
10253
11761
  }
10254
11762
  function toNum$1(v) {
@@ -10955,6 +12463,8 @@ function getItemStatKeys(itemId) {
10955
12463
  return [];
10956
12464
  return getStatDefinitions(item.category).map((d) => d.key);
10957
12465
  }
12466
+ if (itemId === ITEM_SHIP_T1_PACKED)
12467
+ return ['strength', 'density', '', ''];
10958
12468
  const recipe = getRecipe(itemId);
10959
12469
  if (!recipe)
10960
12470
  return [];
@@ -11765,6 +13275,7 @@ const MODULE_LAUNCHER = 7;
11765
13275
  const MODULE_STORAGE = 8;
11766
13276
  const MODULE_HAULER = 9;
11767
13277
  const MODULE_BATTERY = 10;
13278
+ const MODULE_BUILDER = 12;
11768
13279
  function moduleAccepts(slotType, moduleType) {
11769
13280
  return slotType === MODULE_ANY || slotType === moduleType;
11770
13281
  }
@@ -11781,6 +13292,8 @@ function getModuleCapabilityType(itemId) {
11781
13292
  return MODULE_LOADER;
11782
13293
  case ITEM_CRAFTER_T1:
11783
13294
  return MODULE_CRAFTER;
13295
+ case ITEM_BUILDER_T1:
13296
+ return MODULE_BUILDER;
11784
13297
  case ITEM_STORAGE_T1:
11785
13298
  return MODULE_STORAGE;
11786
13299
  case ITEM_HAULER_T1:
@@ -11815,6 +13328,8 @@ function moduleSlotTypeToCode(slotType) {
11815
13328
  return MODULE_WARP;
11816
13329
  case 'crafter':
11817
13330
  return MODULE_CRAFTER;
13331
+ case 'builder':
13332
+ return MODULE_BUILDER;
11818
13333
  case 'launcher':
11819
13334
  return MODULE_LAUNCHER;
11820
13335
  case 'storage':
@@ -13458,7 +14973,7 @@ const UINT32_MAX = 4294967295;
13458
14973
  const UINT32_MAX_BIGINT = 4294967295n;
13459
14974
  const UINT32_MOD = 4294967296n;
13460
14975
  const UINT64_MAX = 18446744073709551615n;
13461
- const PRECISION_BIGINT = BigInt(PRECISION$1);
14976
+ const PRECISION_BIGINT = BigInt(PRECISION);
13462
14977
  function toNumber(value) {
13463
14978
  if (typeof value === 'number')
13464
14979
  return Math.trunc(value);
@@ -13507,7 +15022,7 @@ function calcDistance(origin, destination) {
13507
15022
  const b = Coordinates.from(destination);
13508
15023
  const dx = toNumber(a.x) - toNumber(b.x);
13509
15024
  const dy = toNumber(a.y) - toNumber(b.y);
13510
- return BigInt(Math.trunc(Math.sqrt(dx * dx + dy * dy) * PRECISION$1));
15025
+ return BigInt(Math.trunc(Math.sqrt(dx * dx + dy * dy) * PRECISION));
13511
15026
  }
13512
15027
  function calcCargoItemMassUint32(item) {
13513
15028
  let mass = toUint32(BigInt(getItem(item.item_id).mass) * toUint32(toBigInt(item.quantity)));
@@ -13577,10 +15092,10 @@ class ActionsManager extends BaseManager {
13577
15092
  recharge,
13578
15093
  });
13579
15094
  }
13580
- travelroute(entities, waypoints, recharge = true) {
15095
+ travelplan(entities, waypoints, recharge = true) {
13581
15096
  const entityRefs = this.entityRefs(entities);
13582
15097
  const wps = waypoints.map((w) => Types.route_waypoint.from({ x: Int64.from(w.x), y: Int64.from(w.y) }));
13583
- return this.server.action('travelroute', {
15098
+ return this.server.action('travelplan', {
13584
15099
  entities: entityRefs,
13585
15100
  waypoints: wps,
13586
15101
  recharge,
@@ -13667,6 +15182,14 @@ class ActionsManager extends BaseManager {
13667
15182
  items,
13668
15183
  });
13669
15184
  }
15185
+ shuttle(carrierId, fromId, toId, items) {
15186
+ return this.server.action('shuttle', {
15187
+ carrier: UInt64.from(carrierId),
15188
+ from_id: UInt64.from(fromId),
15189
+ to_id: UInt64.from(toId),
15190
+ items,
15191
+ });
15192
+ }
13670
15193
  launch(launcherId, catcherId, items) {
13671
15194
  return this.server.action('launch', {
13672
15195
  launcher_id: UInt64.from(launcherId),
@@ -13715,26 +15238,16 @@ class ActionsManager extends BaseManager {
13715
15238
  }
13716
15239
  return this.server.action('gather', params);
13717
15240
  }
13718
- bundleGather(gathers) {
13719
- const actions = gathers.map(({ sourceId, destinationId, stratum, quantity, slot }) => this.gather(sourceId, destinationId, stratum, quantity, slot));
13720
- return Transaction.from({
13721
- expiration: 0,
13722
- ref_block_num: 0,
13723
- ref_block_prefix: 0,
13724
- actions,
15241
+ gatherplan(sourceId, destinationId, stratum, quantity, recharge = true, slots = []) {
15242
+ return this.server.action('gatherplan', {
15243
+ source_id: UInt64.from(sourceId),
15244
+ destination_id: UInt64.from(destinationId),
15245
+ stratum: UInt16.from(stratum),
15246
+ quantity: UInt32.from(quantity),
15247
+ recharge,
15248
+ slots: Bytes.from(slots),
13725
15249
  });
13726
15250
  }
13727
- flattenGatherPlan(plan, ctx) {
13728
- const actions = [];
13729
- for (const cycle of plan.cycles) {
13730
- if (cycle.rechargeBefore)
13731
- actions.push(this.recharge(ctx.sourceId));
13732
- for (const limpet of cycle.limpets) {
13733
- actions.push(this.gather(ctx.sourceId, ctx.destinationId, ctx.stratum, limpet.quantity, limpet.slot));
13734
- }
13735
- }
13736
- return actions;
13737
- }
13738
15251
  warp(entityId, destination) {
13739
15252
  const x = Int64.from(destination.x);
13740
15253
  const y = Int64.from(destination.y);
@@ -13759,6 +15272,39 @@ class ActionsManager extends BaseManager {
13759
15272
  }
13760
15273
  return this.server.action('craft', params);
13761
15274
  }
15275
+ craftjob(shipId, workshopId, slot, recipeId, quantity, inputs) {
15276
+ const params = {
15277
+ ship_id: UInt64.from(shipId),
15278
+ workshop_id: UInt64.from(workshopId),
15279
+ slot: UInt8.from(slot),
15280
+ recipe_id: UInt16.from(recipeId),
15281
+ quantity: UInt32.from(quantity),
15282
+ inputs,
15283
+ };
15284
+ return this.server.action('craftjob', params);
15285
+ }
15286
+ claimjob(jobId, shipId) {
15287
+ const params = {
15288
+ job_id: UInt64.from(jobId),
15289
+ ship_id: UInt64.from(shipId),
15290
+ };
15291
+ return this.server.action('claimjob', params);
15292
+ }
15293
+ canceljob(jobId, shipId) {
15294
+ const params = {
15295
+ job_id: UInt64.from(jobId),
15296
+ ship_id: UInt64.from(shipId),
15297
+ };
15298
+ return this.server.action('canceljob', params);
15299
+ }
15300
+ setsocket(workshopId, slot, open) {
15301
+ const params = {
15302
+ workshop_id: UInt64.from(workshopId),
15303
+ slot: UInt8.from(slot),
15304
+ open,
15305
+ };
15306
+ return this.server.action('setsocket', params);
15307
+ }
13762
15308
  blend(entityId, inputs) {
13763
15309
  return this.server.action('blend', {
13764
15310
  id: UInt64.from(entityId),
@@ -14673,6 +16219,15 @@ class Shipload {
14673
16219
  }
14674
16220
  }
14675
16221
 
16222
+ const MODULE_STAT_SCALING_ANCHOR = 213;
16223
+ const MODULE_STAT_SCALING_POST_ANCHOR_PERCENT = 40;
16224
+ function computeEffectiveModuleStat(stat) {
16225
+ if (stat <= MODULE_STAT_SCALING_ANCHOR)
16226
+ return stat;
16227
+ return (MODULE_STAT_SCALING_ANCHOR +
16228
+ Math.floor(((stat - MODULE_STAT_SCALING_ANCHOR) * MODULE_STAT_SCALING_POST_ANCHOR_PERCENT) / 100));
16229
+ }
16230
+
14676
16231
  const U16_MAX = 65535;
14677
16232
  function packedModulesToInstalled(entries) {
14678
16233
  const installed = [];
@@ -14704,13 +16259,27 @@ function getSlotAmp(layout, slotIndex) {
14704
16259
  function idiv(a, b) {
14705
16260
  return Math.floor(a / b);
14706
16261
  }
14707
- function computeBaseHullmass$1(stats) {
16262
+ function toWholeEnergy$1(milli) {
16263
+ return idiv(milli + 500, 1000);
16264
+ }
16265
+ function isShipHull$1(itemId) {
16266
+ return getPackedEntityType(itemId)?.equals(ENTITY_SHIP) ?? false;
16267
+ }
16268
+ function sumPackedShipChannels(stats) {
16269
+ let sum = 0;
16270
+ for (let slot = 0; slot < 5; slot++)
16271
+ sum += decodeStat(stats, slot);
16272
+ return sum;
16273
+ }
16274
+ function computeBaseHullmass$1(itemId, stats) {
16275
+ if (isShipHull$1(itemId)) {
16276
+ return Math.floor((getBaseHullmassFor(itemId) * (10000 - sumPackedShipChannels(stats))) / 10000);
16277
+ }
14708
16278
  const density = decodeStat(stats, 1);
14709
- return 100000 - 75 * density;
16279
+ return Math.floor((getBaseHullmassFor(itemId) * (2000 - density)) / 2000);
14710
16280
  }
14711
16281
  function computeBaseCapacityShip(stats) {
14712
- const s = decodeStat(stats, 0) + decodeStat(stats, 2);
14713
- return Math.floor(5000000 * 6 ** (s / 1998));
16282
+ return Math.floor(5000000 * 6 ** (sumPackedShipChannels(stats) / 4995));
14714
16283
  }
14715
16284
  function computeBaseCapacityContainer(stats) {
14716
16285
  const s = decodeStat(stats, 0) + decodeStat(stats, 2);
@@ -14722,35 +16291,57 @@ function computeBaseCapacityWarehouse(stats) {
14722
16291
  }
14723
16292
  const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
14724
16293
  const computeEngineDrain = (thm) => 2 * Math.max(30, 50 - idiv(thm, 70));
14725
- const ENGINE_DRAIN_BASE = 118;
16294
+ const ENGINE_DRAIN_BASE = 156;
14726
16295
  const ENGINE_DRAIN_REF_THRUST = 775;
14727
16296
  const ENGINE_DRAIN_REF_THM = 500;
14728
16297
  const computeTravelDrain = (totalThrust, avgThm) => {
14729
16298
  if (totalThrust <= 0)
14730
16299
  return 0;
14731
- const num = ENGINE_DRAIN_BASE * ENGINE_DRAIN_REF_THRUST * computeEngineDrain(avgThm);
14732
- const den = totalThrust * computeEngineDrain(ENGINE_DRAIN_REF_THM);
14733
- return idiv(num, den);
16300
+ const thermalFactor = computeEngineDrain(avgThm) / computeEngineDrain(ENGINE_DRAIN_REF_THM);
16301
+ const thrustFactor = Math.sqrt(ENGINE_DRAIN_REF_THRUST / totalThrust);
16302
+ return Math.floor(ENGINE_DRAIN_BASE * 1000 * thermalFactor * thrustFactor);
14734
16303
  };
14735
- const computeGeneratorCap = (com) => 1300 + idiv(com, 2);
14736
- const computeGeneratorRech = (fin) => 2 * (1 + idiv(fin * 3, 1000));
16304
+ const computeGeneratorCap = (com) => 1300000 + com * 500;
16305
+ const computeGeneratorRech = (fin) => 2000 + fin * 6;
14737
16306
  const computeGathererYield = (str) => 200 + str;
14738
- const computeGathererDrain = (con) => 2 * Math.max(250, 1250 - idiv(con * 25, 20));
16307
+ const computeGathererDrain = (con) => 2 * Math.max(250000, 1250000 - con * 1250);
14739
16308
  const computeGathererDepth = (tol, tier) => gathererDepthForTier(tol, tier);
14740
16309
  const computeLoaderMass = (ins) => Math.max(200, 2000 - ins * 2);
14741
16310
  const computeLoaderThrust = (pla) => 1 + idiv(pla * pla, 10000);
14742
16311
  const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
14743
- const computeCrafterDrain = (fin) => Math.max(5, 30 - idiv(fin, 33));
16312
+ const computeCrafterDrain = (fin) => Math.max(5000, 30000 - idiv(fin * 1000, 33));
16313
+ const computeBuilderSpeed = (resonance) => 100 + idiv(resonance * 4, 5);
16314
+ const computeBuilderDrain = (fineness) => Math.max(5000, 30000 - idiv(fineness * 1000, 33));
14744
16315
  const computeHaulerCapacity = (fin, tier) => Math.max(tier, tier + idiv(fin, 400));
14745
16316
  const computeHaulerEfficiency = (con) => 2000 + con * 6;
14746
- const computeHaulerDrain$1 = (com) => Math.max(3, 15 - idiv(com, 80));
16317
+ const supportDrainTierPercent = (tier) => {
16318
+ const clampedTier = Math.min(10, Math.max(1, Math.trunc(tier)));
16319
+ return Math.max(50, 110 - clampedTier * 10);
16320
+ };
16321
+ const computeT1LogisticsDrain = (stat) => Math.max(3000, 15000 - Math.min(12000, idiv(stat * 1000, 80)));
16322
+ const computeHaulerDrain = (conductivity, tier) => idiv(computeT1LogisticsDrain(conductivity) * supportDrainTierPercent(tier), 100);
16323
+ const computeCargoBayDrain = (cohesion, tier) => idiv(computeT1LogisticsDrain(cohesion) * 3 * supportDrainTierPercent(tier), 400);
14747
16324
  const computeWarpRange = (stat) => 100 + stat * 3;
14748
- const computeCargoBayCapacity = (strength, density, hardness, cohesion) => 10000000 + idiv((strength + density + hardness + cohesion) * 50000000, 3996);
14749
- const computeBatteryBankCapacity = (volatility, thermal, plasticity, insulation) => 2500 + idiv((volatility + thermal + plasticity + insulation) * 7500, 3996);
16325
+ const computeCargoBayCapacity = (strength, density, hardness) => 10000000 + idiv((strength + density + hardness) * 50000000, 2997);
16326
+ const computeBatteryBankCapacity = (volatility, thermal, plasticity, insulation) => 2500000 + idiv((volatility + thermal + plasticity + insulation) * 7500000, 3996);
14750
16327
  function entityDisplayName(itemId) {
14751
16328
  switch (itemId) {
14752
16329
  case ITEM_SHIP_T1_PACKED:
16330
+ return 'Ship';
16331
+ case ITEM_ROUSTABOUT_T1_PACKED:
14753
16332
  return 'Roustabout';
16333
+ case ITEM_PROSPECTOR_T1_PACKED:
16334
+ return 'Prospector';
16335
+ case ITEM_TENDER_T1_PACKED:
16336
+ return 'Tender';
16337
+ case ITEM_TUG_T1_PACKED:
16338
+ return 'Tug';
16339
+ case ITEM_PORTER_T1_PACKED:
16340
+ return 'Porter';
16341
+ case ITEM_WRANGLER_T1_PACKED:
16342
+ return 'Wrangler';
16343
+ case ITEM_DREDGER_T1_PACKED:
16344
+ return 'Dredger';
14754
16345
  case ITEM_WAREHOUSE_T1_PACKED:
14755
16346
  return 'Warehouse';
14756
16347
  case ITEM_EXTRACTOR_T1_PACKED:
@@ -14764,7 +16355,7 @@ function entityDisplayName(itemId) {
14764
16355
  case ITEM_PROSPECTOR_T2_PACKED:
14765
16356
  return 'Prospector';
14766
16357
  case ITEM_HAULER_SHIP_T2_PACKED:
14767
- return 'Hauler';
16358
+ return 'Tug';
14768
16359
  default:
14769
16360
  return 'Entity';
14770
16361
  }
@@ -14782,6 +16373,8 @@ function moduleDisplayName(itemId) {
14782
16373
  return 'Shuttle Bay';
14783
16374
  case ITEM_CRAFTER_T1:
14784
16375
  return 'Fabricator';
16376
+ case ITEM_BUILDER_T1:
16377
+ return 'Assembly Arm';
14785
16378
  case ITEM_STORAGE_T1:
14786
16379
  return 'Cargo Hold';
14787
16380
  case ITEM_HAULER_T1:
@@ -14807,15 +16400,15 @@ function formatModuleLine(slot, itemId, stats) {
14807
16400
  const subtype = getModuleCapabilityType(itemId);
14808
16401
  switch (subtype) {
14809
16402
  case MODULE_ENGINE: {
14810
- const vol = decodeStat(stats, 0);
14811
- const thm = decodeStat(stats, 1);
16403
+ const vol = computeEffectiveModuleStat(decodeStat(stats, 0));
16404
+ const thm = computeEffectiveModuleStat(decodeStat(stats, 1));
14812
16405
  out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
14813
16406
  break;
14814
16407
  }
14815
16408
  case MODULE_GENERATOR: {
14816
- const res = decodeStat(stats, 0);
14817
- const ref = decodeStat(stats, 1);
14818
- out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(ref)}`;
16409
+ const res = computeEffectiveModuleStat(decodeStat(stats, 0));
16410
+ const ref = computeEffectiveModuleStat(decodeStat(stats, 1));
16411
+ out += ` Capacity ${toWholeEnergy$1(computeGeneratorCap(res))} Recharge ${toWholeEnergy$1(computeGeneratorRech(ref))}`;
14819
16412
  break;
14820
16413
  }
14821
16414
  case MODULE_GATHERER: {
@@ -14823,7 +16416,7 @@ function formatModuleLine(slot, itemId, stats) {
14823
16416
  const tol = decodeStat(stats, 1);
14824
16417
  const con = decodeStat(stats, 2);
14825
16418
  const tier = getItem(itemId).tier;
14826
- out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Drain ${computeGathererDrain(con)}`;
16419
+ out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Drain ${toWholeEnergy$1(computeGathererDrain(con))}`;
14827
16420
  break;
14828
16421
  }
14829
16422
  case MODULE_LOADER: {
@@ -14835,23 +16428,30 @@ function formatModuleLine(slot, itemId, stats) {
14835
16428
  case MODULE_CRAFTER: {
14836
16429
  const rea = decodeStat(stats, 0);
14837
16430
  const con = decodeStat(stats, 1);
14838
- out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(con)}`;
16431
+ out += ` Speed ${computeCrafterSpeed(rea)} Drain ${toWholeEnergy$1(computeCrafterDrain(con))}`;
16432
+ break;
16433
+ }
16434
+ case MODULE_BUILDER: {
16435
+ const res = decodeStat(stats, 0);
16436
+ const fin = decodeStat(stats, 1);
16437
+ out += ` Speed ${computeBuilderSpeed(res)} Drain ${toWholeEnergy$1(computeBuilderDrain(fin))}`;
14839
16438
  break;
14840
16439
  }
14841
16440
  case MODULE_STORAGE: {
14842
16441
  const str = decodeStat(stats, 0);
14843
16442
  const den = decodeStat(stats, 1);
14844
16443
  const hrd = decodeStat(stats, 2);
14845
- const com = decodeStat(stats, 3);
14846
- out += ` Cargo Capacity ${computeCargoBayCapacity(str, den, hrd, com)}`;
16444
+ const coh = decodeStat(stats, 3);
16445
+ const tier = getItem(itemId).tier;
16446
+ out += ` Cargo Capacity ${computeCargoBayCapacity(str, den, hrd)} Drain ${toWholeEnergy$1(computeCargoBayDrain(coh, tier))}`;
14847
16447
  break;
14848
16448
  }
14849
16449
  case MODULE_HAULER: {
14850
16450
  const res = decodeStat(stats, 0);
14851
16451
  const pla = decodeStat(stats, 1);
14852
- const ref = decodeStat(stats, 2);
16452
+ const con = decodeStat(stats, 2);
14853
16453
  const tier = getItem(itemId).tier;
14854
- out += ` Capacity ${computeHaulerCapacity(res, tier)} Efficiency ${computeHaulerEfficiency(pla)} Drain ${computeHaulerDrain$1(ref)}`;
16454
+ out += ` Capacity ${computeHaulerCapacity(res, tier)} Efficiency ${computeHaulerEfficiency(pla)} Drain ${toWholeEnergy$1(computeHaulerDrain(con, tier))}`;
14855
16455
  break;
14856
16456
  }
14857
16457
  case MODULE_WARP: {
@@ -14864,18 +16464,16 @@ function formatModuleLine(slot, itemId, stats) {
14864
16464
  const thm = decodeStat(stats, 1);
14865
16465
  const pla = decodeStat(stats, 2);
14866
16466
  const ins = decodeStat(stats, 3);
14867
- out += ` Energy Capacity ${computeBatteryBankCapacity(vol, thm, pla, ins)}`;
16467
+ out += ` Energy Capacity ${toWholeEnergy$1(computeBatteryBankCapacity(vol, thm, pla, ins))}`;
14868
16468
  break;
14869
16469
  }
14870
16470
  }
14871
16471
  return out;
14872
16472
  }
14873
16473
  function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
14874
- const hullMass = computeBaseHullmass$1(hullStats);
16474
+ const hullMass = computeBaseHullmass$1(itemId, hullStats);
14875
16475
  let baseCapacity = 0;
14876
- if (itemId === ITEM_SHIP_T1_PACKED ||
14877
- itemId === ITEM_PROSPECTOR_T2_PACKED ||
14878
- itemId === ITEM_HAULER_SHIP_T2_PACKED) {
16476
+ if (isShipHull$1(itemId)) {
14879
16477
  baseCapacity = computeBaseCapacityShip(hullStats);
14880
16478
  }
14881
16479
  else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
@@ -14900,31 +16498,45 @@ function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
14900
16498
  return out;
14901
16499
  }
14902
16500
 
14903
- function computeBaseHullmass(stats) {
14904
- return 100000 - 75 * stats.density;
16501
+ const DEFAULT_BASE_HULLMASS = 100000;
16502
+ function getBaseHullmassFor(itemId) {
16503
+ return getEntityLayout(itemId)?.baseHullmass ?? DEFAULT_BASE_HULLMASS;
14905
16504
  }
14906
- function computeShipHullCapabilities(stats) {
14907
- const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
14908
- const exponent = statSum / 1998.0;
16505
+ function isShipHull(itemId) {
16506
+ return getPackedEntityType(itemId)?.equals(ENTITY_SHIP) ?? false;
16507
+ }
16508
+ function sumHullStats(stats) {
16509
+ return Object.values(stats).reduce((sum, value) => sum + value, 0);
16510
+ }
16511
+ function computeBaseHullmass(itemId, stats) {
16512
+ if (isShipHull(itemId)) {
16513
+ return Math.floor((getBaseHullmassFor(itemId) * (10000 - sumHullStats(stats))) / 10000);
16514
+ }
16515
+ const lightness = stats.density ?? stats.hardness ?? 0;
16516
+ return Math.floor((getBaseHullmassFor(itemId) * (2000 - lightness)) / 2000);
16517
+ }
16518
+ function computeShipHullCapabilities(stats, itemId = ITEM_SHIP_T1_PACKED) {
16519
+ const statSum = sumHullStats(stats);
16520
+ const exponent = statSum / 4995.0;
14909
16521
  return {
14910
- hullmass: computeBaseHullmass(stats),
16522
+ hullmass: computeBaseHullmass(itemId, stats),
14911
16523
  capacity: Math.floor(5000000 * 6 ** exponent),
14912
16524
  };
14913
16525
  }
14914
16526
  function computeEngineCapabilities(stats) {
14915
- const vol = stats.volatility;
14916
- const thm = stats.thermal;
16527
+ const vol = computeEffectiveModuleStat(stats.volatility);
16528
+ const thm = computeEffectiveModuleStat(stats.thermal);
14917
16529
  return {
14918
16530
  thrust: 400 + Math.floor((vol * 3) / 4),
14919
16531
  drain: 2 * Math.max(30, 50 - Math.floor(thm / 70)),
14920
16532
  };
14921
16533
  }
14922
16534
  function computeGeneratorCapabilities(stats) {
14923
- const res = stats.resonance;
14924
- const ref = stats.reflectivity;
16535
+ const res = computeEffectiveModuleStat(stats.resonance);
16536
+ const ref = computeEffectiveModuleStat(stats.reflectivity);
14925
16537
  return {
14926
- capacity: 1300 + Math.floor(res / 2),
14927
- recharge: 2 * (1 + Math.floor((ref * 3) / 1000)),
16538
+ capacity: 1300000 + res * 500,
16539
+ recharge: 2000 + ref * 6,
14928
16540
  };
14929
16541
  }
14930
16542
  const GATHERER_DEPTH_TABLE = [
@@ -14950,11 +16562,11 @@ function gathererDepthForTier(tol, tier) {
14950
16562
  function computeGathererCapabilities(stats, tier) {
14951
16563
  const str = stats.strength;
14952
16564
  const con = stats.saturation;
14953
- const hrd = stats.hardness;
16565
+ const tol = stats.tolerance ?? stats.hardness;
14954
16566
  return {
14955
16567
  yield: 200 + str,
14956
- drain: 2 * Math.max(250, 1250 - Math.floor((con * 25) / 20)),
14957
- depth: gathererDepthForTier(hrd, tier),
16568
+ drain: 2 * Math.max(250000, 1250000 - con * 1250),
16569
+ depth: gathererDepthForTier(tol, tier),
14958
16570
  };
14959
16571
  }
14960
16572
  function computeLoaderCapabilities(stats) {
@@ -14971,7 +16583,15 @@ function computeCrafterCapabilities(stats) {
14971
16583
  const con = stats.conductivity;
14972
16584
  return {
14973
16585
  speed: 100 + Math.floor((fin * 4) / 5),
14974
- drain: Math.max(5, 30 - Math.floor(con / 33)),
16586
+ drain: Math.max(5000, 30000 - Math.floor((con * 1000) / 33)),
16587
+ };
16588
+ }
16589
+ function computeBuilderCapabilities(stats) {
16590
+ const resonance = stats.resonance;
16591
+ const fineness = stats.fineness;
16592
+ return {
16593
+ speed: 100 + Math.floor((resonance * 4) / 5),
16594
+ drain: Math.max(5000, 30000 - Math.floor((fineness * 1000) / 33)),
14975
16595
  };
14976
16596
  }
14977
16597
  function computeHaulerCapabilities(stats, tier) {
@@ -14981,7 +16601,7 @@ function computeHaulerCapabilities(stats, tier) {
14981
16601
  return {
14982
16602
  capacity: computeHaulerCapacity(resonance, tier),
14983
16603
  efficiency: 2000 + plasticity * 6,
14984
- drain: Math.max(3, 15 - Math.floor(conductivity / 80)),
16604
+ drain: computeHaulerDrain(conductivity, tier),
14985
16605
  };
14986
16606
  }
14987
16607
  function computeLauncherCapabilities(stats, amp = 100) {
@@ -14991,13 +16611,11 @@ function computeLauncherCapabilities(stats, amp = 100) {
14991
16611
  drain: stats.drain,
14992
16612
  };
14993
16613
  }
14994
- function computeStorageCapabilities(stats) {
14995
- const strength = stats.strength ?? 0;
14996
- const density = stats.density ?? 0;
14997
- const hardness = stats.hardness ?? 0;
14998
- const cohesion = stats.cohesion ?? 0;
14999
- const statSum = strength + density + hardness + cohesion;
15000
- return { capacity: 10000000 + Math.floor((statSum * 50000000) / 3996) };
16614
+ function computeStorageCapabilities(stats, tier) {
16615
+ return {
16616
+ capacity: computeCargoBayCapacity(stats.strength ?? 0, stats.density ?? 0, stats.hardness ?? 0),
16617
+ drain: computeCargoBayDrain(stats.cohesion ?? 0, tier),
16618
+ };
15001
16619
  }
15002
16620
  function computeBatteryCapabilities(stats) {
15003
16621
  const volatility = stats.volatility ?? 0;
@@ -15005,7 +16623,7 @@ function computeBatteryCapabilities(stats) {
15005
16623
  const plasticity = stats.plasticity ?? 0;
15006
16624
  const insulation = stats.insulation ?? 0;
15007
16625
  const statSum = volatility + thermal + plasticity + insulation;
15008
- return { capacity: 2500 + Math.floor((statSum * 7500) / 3996) };
16626
+ return { capacity: 2500000 + Math.floor((statSum * 7500000) / 3996) };
15009
16627
  }
15010
16628
  const CAPACITY_TIER_TABLE = [1.0, 1.4, 1.8, 2.2, 2.6, 3.0, 3.4, 3.8, 4.2, 4.6];
15011
16629
  function capacityTierMultiplier(tier) {
@@ -15017,25 +16635,25 @@ function applyCapacityTier(baseCapacity, tier) {
15017
16635
  }
15018
16636
  function computeBaseCapacity(itemId, stats) {
15019
16637
  let base;
15020
- switch (itemId) {
15021
- case ITEM_SHIP_T1_PACKED:
15022
- case ITEM_PROSPECTOR_T2_PACKED:
15023
- case ITEM_HAULER_SHIP_T2_PACKED:
15024
- base = computeShipHullCapabilities(stats).capacity;
15025
- break;
15026
- case ITEM_EXTRACTOR_T1_PACKED:
15027
- case ITEM_FACTORY_T1_PACKED:
15028
- case ITEM_MASS_DRIVER_T1_PACKED:
15029
- case ITEM_MASS_CATCHER_T1_PACKED:
15030
- case ITEM_CONTAINER_T1_PACKED:
15031
- case ITEM_CONTAINER_T2_PACKED:
15032
- base = computeContainerCapabilities(stats).capacity;
15033
- break;
15034
- case ITEM_WAREHOUSE_T1_PACKED:
15035
- base = computeWarehouseHullCapabilities(stats).capacity;
15036
- break;
15037
- default:
15038
- return 0;
16638
+ if (isShipHull(itemId)) {
16639
+ base = computeShipHullCapabilities(stats, itemId).capacity;
16640
+ }
16641
+ else {
16642
+ switch (itemId) {
16643
+ case ITEM_EXTRACTOR_T1_PACKED:
16644
+ case ITEM_FACTORY_T1_PACKED:
16645
+ case ITEM_MASS_DRIVER_T1_PACKED:
16646
+ case ITEM_MASS_CATCHER_T1_PACKED:
16647
+ case ITEM_CONTAINER_T1_PACKED:
16648
+ case ITEM_CONTAINER_T2_PACKED:
16649
+ base = computeContainerCapabilities(stats).capacity;
16650
+ break;
16651
+ case ITEM_WAREHOUSE_T1_PACKED:
16652
+ base = computeWarehouseHullCapabilities(stats).capacity;
16653
+ break;
16654
+ default:
16655
+ return 0;
16656
+ }
15039
16657
  }
15040
16658
  return applyCapacityTier(base, getItem(itemId).tier);
15041
16659
  }
@@ -15047,7 +16665,7 @@ function computeWarehouseHullCapabilities(stats) {
15047
16665
  const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
15048
16666
  const exponent = statSum / 1998.0;
15049
16667
  return {
15050
- hullmass: computeBaseHullmass(stats),
16668
+ hullmass: computeBaseHullmass(ITEM_WAREHOUSE_T1_PACKED, stats),
15051
16669
  capacity: Math.floor(100000000 * 6 ** exponent),
15052
16670
  };
15053
16671
  }
@@ -15068,11 +16686,15 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15068
16686
  let maxGathDepth = 0;
15069
16687
  let hasGatherer = false;
15070
16688
  let totalStorageCapacity = 0;
16689
+ let totalCargoHoldDrain = 0;
15071
16690
  const baseCapacity = computeBaseCapacity(itemId, stats);
15072
16691
  let installedModuleMass = 0;
15073
16692
  let totalCrafterSpeed = 0;
15074
16693
  let totalCrafterDrain = 0;
15075
16694
  let hasCrafter = false;
16695
+ let totalBuilderSpeed = 0;
16696
+ let totalBuilderDrain = 0;
16697
+ let hasBuilder = false;
15076
16698
  let totalHaulerCapacity = 0;
15077
16699
  let weightedHaulerEffNum = 0n;
15078
16700
  let totalHaulerDrain = 0;
@@ -15087,6 +16709,7 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15087
16709
  let totalBatteryCapacity = 0;
15088
16710
  const gathererLanes = [];
15089
16711
  const crafterLanes = [];
16712
+ const builderLanes = [];
15090
16713
  const loaderLanes = [];
15091
16714
  for (const mod of modules) {
15092
16715
  const item = getItem(mod.itemId);
@@ -15098,19 +16721,23 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15098
16721
  hasEngine = true;
15099
16722
  const caps = computeEngineCapabilities(decodedStats);
15100
16723
  totalThrust += applySlotMultiplier(caps.thrust, amp);
15101
- totalEngineThm += decodedStats.thermal ?? 0;
16724
+ totalEngineThm += computeEffectiveModuleStat(decodedStats.thermal ?? 0);
15102
16725
  engineCount += 1;
15103
16726
  }
15104
16727
  else if (modType === MODULE_GENERATOR) {
15105
16728
  hasGenerator = true;
15106
16729
  const caps = computeGeneratorCapabilities(decodedStats);
15107
- totalGenCapacity += applySlotMultiplier(caps.capacity, amp);
15108
- totalGenRecharge += applySlotMultiplier(caps.recharge, amp);
16730
+ totalGenCapacity += applySlotMultiplierUint32(caps.capacity, amp);
16731
+ totalGenRecharge += applySlotMultiplierUint32(caps.recharge, amp);
15109
16732
  }
15110
16733
  else if (modType === MODULE_GATHERER) {
15111
16734
  hasGatherer = true;
15112
16735
  const tier = item.tier;
15113
- const caps = computeGathererCapabilities(decodedStats, tier);
16736
+ const caps = computeGathererCapabilities({
16737
+ strength: decodeStat(mod.stats, 0),
16738
+ tolerance: decodeStat(mod.stats, 1),
16739
+ saturation: decodeStat(mod.stats, 2),
16740
+ }, tier);
15114
16741
  const scaledYield = applySlotMultiplier(caps.yield, amp);
15115
16742
  totalGathYield += scaledYield;
15116
16743
  totalGathDrain += caps.drain;
@@ -15138,8 +16765,9 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15138
16765
  });
15139
16766
  }
15140
16767
  else if (modType === MODULE_STORAGE) {
15141
- const caps = computeStorageCapabilities(decodedStats);
16768
+ const caps = computeStorageCapabilities(decodedStats, item.tier);
15142
16769
  totalStorageCapacity += applySlotMultiplierUint32(caps.capacity, amp);
16770
+ totalCargoHoldDrain += caps.drain;
15143
16771
  }
15144
16772
  else if (modType === MODULE_CRAFTER) {
15145
16773
  hasCrafter = true;
@@ -15154,6 +16782,19 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15154
16782
  outputPct: amp,
15155
16783
  });
15156
16784
  }
16785
+ else if (modType === MODULE_BUILDER) {
16786
+ hasBuilder = true;
16787
+ const caps = computeBuilderCapabilities(decodedStats);
16788
+ const scaledSpeed = applySlotMultiplier(caps.speed, amp);
16789
+ totalBuilderSpeed += scaledSpeed;
16790
+ totalBuilderDrain += caps.drain;
16791
+ builderLanes.push({
16792
+ slotIndex: mod.slotIndex,
16793
+ speed: scaledSpeed,
16794
+ drain: caps.drain,
16795
+ outputPct: amp,
16796
+ });
16797
+ }
15157
16798
  else if (modType === MODULE_HAULER) {
15158
16799
  hasHauler = true;
15159
16800
  const caps = computeHaulerCapabilities(decodedStats, item.tier);
@@ -15188,12 +16829,20 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15188
16829
  totalGenCapacity += totalBatteryCapacity;
15189
16830
  }
15190
16831
  const result = {
15191
- hullmass: computeBaseHullmass(stats) + installedModuleMass,
16832
+ hullmass: computeBaseHullmass(itemId, stats) + installedModuleMass,
15192
16833
  capacity: clampUint32(baseCapacity + totalStorageCapacity),
15193
16834
  };
15194
16835
  if (hasEngine) {
15195
16836
  const avgThm = engineCount > 0 ? Math.trunc(totalEngineThm / engineCount) : 0;
15196
- result.engines = { thrust: totalThrust, drain: computeTravelDrain(totalThrust, avgThm) };
16837
+ const engineDrain = computeTravelDrain(totalThrust, avgThm);
16838
+ const totalDrain = clampUint32(engineDrain + totalCargoHoldDrain + totalHaulerDrain);
16839
+ result.engines = { thrust: totalThrust, drain: totalDrain };
16840
+ result.travelDrain = {
16841
+ engine: engineDrain,
16842
+ cargoHolds: totalCargoHoldDrain,
16843
+ tractorBeams: totalHaulerDrain,
16844
+ total: totalDrain,
16845
+ };
15197
16846
  }
15198
16847
  if (hasGenerator) {
15199
16848
  result.generator = {
@@ -15221,6 +16870,10 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15221
16870
  result.crafter = { speed: clampUint16(totalCrafterSpeed), drain: totalCrafterDrain };
15222
16871
  result.crafterLanes = crafterLanes;
15223
16872
  }
16873
+ if (hasBuilder) {
16874
+ result.builder = { speed: clampUint16(totalBuilderSpeed), drain: totalBuilderDrain };
16875
+ result.builderLanes = builderLanes;
16876
+ }
15224
16877
  if (hasHauler) {
15225
16878
  const efficiency = totalHaulerCapacity > 0 ? Number(weightedHaulerEffNum / BigInt(totalHaulerCapacity)) : 0;
15226
16879
  result.hauler = {
@@ -15248,7 +16901,7 @@ function computeContainerCapabilities(stats) {
15248
16901
  const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
15249
16902
  const exponent = statSum / 1998.0;
15250
16903
  return {
15251
- hullmass: computeBaseHullmass(stats),
16904
+ hullmass: computeBaseHullmass(ITEM_CONTAINER_T1_PACKED, stats),
15252
16905
  capacity: Math.floor(22000000 * 6 ** exponent),
15253
16906
  };
15254
16907
  }
@@ -15314,7 +16967,7 @@ function makeEntity(packedItemId, state) {
15314
16967
  holds: [],
15315
16968
  };
15316
16969
  if (state.energy !== undefined)
15317
- info.energy = UInt16.from(state.energy);
16970
+ info.energy = UInt32.from(state.energy);
15318
16971
  if (kind === 'container') {
15319
16972
  info.modules = [];
15320
16973
  if (state.hullmass !== undefined)
@@ -15374,6 +17027,12 @@ function makeEntity(packedItemId, state) {
15374
17027
  drain: l.drain,
15375
17028
  output_pct: l.outputPct,
15376
17029
  }));
17030
+ info.builder_lanes = (caps.builderLanes ?? []).map((l) => Types.builder_lane.from({
17031
+ slot_index: l.slotIndex,
17032
+ speed: l.speed,
17033
+ drain: l.drain,
17034
+ output_pct: l.outputPct,
17035
+ }));
15377
17036
  info.loader_lanes = (caps.loaderLanes ?? []).map((l) => Types.loader_lane.from({
15378
17037
  slot_index: l.slotIndex,
15379
17038
  mass: l.mass,
@@ -15385,6 +17044,8 @@ function makeEntity(packedItemId, state) {
15385
17044
  info.gatherer_lanes = [];
15386
17045
  if (!info.crafter_lanes)
15387
17046
  info.crafter_lanes = [];
17047
+ if (!info.builder_lanes)
17048
+ info.builder_lanes = [];
15388
17049
  if (!info.loader_lanes)
15389
17050
  info.loader_lanes = [];
15390
17051
  const entityInfo = Types.entity_info.from(info);
@@ -15400,7 +17061,13 @@ function calc_craft_duration(speed, totalInputMass) {
15400
17061
  }
15401
17062
  function calc_craft_energy(drain, totalInputMass) {
15402
17063
  const raw = Math.floor((totalInputMass * drain) / CRAFT_ENERGY_DIVISOR);
15403
- return UInt32.from(Math.min(Math.max(raw + 1, 1), 4294967295));
17064
+ return UInt32.from(Math.min(Math.max(raw + 1, 1000), 4294967295));
17065
+ }
17066
+ function calc_build_duration(speed, totalInputMass) {
17067
+ return calc_craft_duration(speed, totalInputMass);
17068
+ }
17069
+ function calc_build_energy(drain, totalInputMass) {
17070
+ return calc_craft_energy(drain, totalInputMass);
15404
17071
  }
15405
17072
 
15406
17073
  class PlotManager extends BaseManager {
@@ -15463,7 +17130,7 @@ class PlotManager extends BaseManager {
15463
17130
  recipe,
15464
17131
  progress,
15465
17132
  finalizeAction: Name.from('buildplot'),
15466
- finalizerCapability: 'crafter',
17133
+ finalizerCapability: 'builder',
15467
17134
  activeTask,
15468
17135
  scheduledBuild,
15469
17136
  };
@@ -15511,16 +17178,16 @@ class ConstructionManager extends BaseManager {
15511
17178
  continue;
15512
17179
  if (!coordsEqual(entity.coordinates, target.coordinates))
15513
17180
  continue;
15514
- const crafterLanes = entity.crafter_lanes ?? [];
15515
- if (crafterLanes.length === 0)
17181
+ const builderLanes = entity.builder_lanes ?? [];
17182
+ if (builderLanes.length === 0)
15516
17183
  continue;
15517
- const speed = crafterLanes.reduce((s, l) => s + Number(l.speed), 0);
17184
+ const speed = builderLanes.reduce((s, l) => s + Number(l.speed), 0);
15518
17185
  out.push({
15519
17186
  entityId: entity.id,
15520
17187
  entityType: entity.type,
15521
17188
  name: entity.entity_name,
15522
- capability: 'crafter',
15523
- crafterSpeed: speed,
17189
+ capability: 'builder',
17190
+ builderSpeed: speed,
15524
17191
  estimatedDuration: this.estimateFinalizeDuration(target, speed),
15525
17192
  });
15526
17193
  }
@@ -15542,12 +17209,12 @@ class ConstructionManager extends BaseManager {
15542
17209
  cumulativeSec += task.duration.toNumber();
15543
17210
  if (!isPushTask(task))
15544
17211
  continue;
15545
- if (!task.entitytarget)
17212
+ if (task.couplings.length === 0)
15546
17213
  continue;
15547
17214
  const projectedEndMs = startedMs + cumulativeSec * 1000;
15548
17215
  if (projectedEndMs < nowMs)
15549
17216
  continue;
15550
- const targetIdStr = task.entitytarget.entity_id.toString();
17217
+ const targetIdStr = task.couplings[0].counterpart.entity_id.toString();
15551
17218
  const etaSeconds = Math.max(0, Math.round((projectedEndMs - nowMs) / 1000));
15552
17219
  let perTarget = buckets.get(targetIdStr);
15553
17220
  if (!perTarget) {
@@ -15672,8 +17339,8 @@ class ConstructionManager extends BaseManager {
15672
17339
  return [];
15673
17340
  return reservationsOf(source);
15674
17341
  }
15675
- estimateFinalizeDuration(target, crafterSpeed) {
15676
- return calc_craft_duration(crafterSpeed, target.progress.massRequired);
17342
+ estimateFinalizeDuration(target, builderSpeed) {
17343
+ return calc_build_duration(builderSpeed, target.progress.massRequired);
15677
17344
  }
15678
17345
  static isConstructionKind(kind) {
15679
17346
  return CONSTRUCTION_KINDS.has(kind);
@@ -15766,18 +17433,18 @@ function isPushTask(task) {
15766
17433
  }
15767
17434
  function isBuildOfPlot(task, plotId) {
15768
17435
  return (task.type.toNumber() === TaskType.BUILDPLOT &&
15769
- task.entitytarget !== undefined &&
15770
- task.entitytarget.entity_id.equals(plotId));
17436
+ task.couplings.length > 0 &&
17437
+ task.couplings[0].counterpart.entity_id.equals(plotId));
15771
17438
  }
15772
17439
  function reservationsOf(source) {
15773
17440
  const out = new Map();
15774
17441
  for (const task of getTasks(source)) {
15775
17442
  if (!isPushTask(task))
15776
17443
  continue;
15777
- if (!task.entitytarget)
17444
+ if (task.couplings.length === 0)
15778
17445
  continue;
15779
- const targetType = task.entitytarget.entity_type;
15780
- const targetId = task.entitytarget.entity_id;
17446
+ const targetType = task.couplings[0].counterpart.entity_type;
17447
+ const targetId = task.couplings[0].counterpart.entity_id;
15781
17448
  for (const c of task.cargo) {
15782
17449
  const itemId = c.item_id.toNumber();
15783
17450
  const quantity = c.quantity.toNumber();
@@ -15866,11 +17533,23 @@ function planRoute(params) {
15866
17533
  return { ok: false, reason: 'empty-destination' };
15867
17534
  }
15868
17535
  const straightLine = dist(origin, dest);
15869
- const heuristic = (c) => Math.ceil(dist(c, dest) / perLegReach);
17536
+ if (straightLine <= perLegReach) {
17537
+ const directCost = params.legCost?.({
17538
+ from: origin,
17539
+ to: dest,
17540
+ distance: straightLine,
17541
+ isDestination: true,
17542
+ });
17543
+ if (directCost !== null) {
17544
+ return { ok: true, waypoints: [dest], legs: 1, totalDistance: straightLine };
17545
+ }
17546
+ }
17547
+ const heuristic = (c) => params.heuristicCost?.(c, dest) ??
17548
+ (params.legCost ? 0 : Math.ceil(dist(c, dest) / perLegReach));
15870
17549
  const gScore = new Map([[key(origin), 0]]);
15871
17550
  const cameFrom = new Map();
15872
17551
  const frontier = [
15873
- { coord: origin, g: 0, f: heuristic(origin), remaining: straightLine },
17552
+ { coord: origin, legs: 0, cost: 0, f: heuristic(origin), remaining: straightLine },
15874
17553
  ];
15875
17554
  let furthest = origin;
15876
17555
  let furthestRemaining = dist(origin, dest);
@@ -15886,6 +17565,8 @@ function planRoute(params) {
15886
17565
  }
15887
17566
  }
15888
17567
  const current = frontier.splice(bestIdx, 1)[0];
17568
+ if (current.cost !== gScore.get(key(current.coord)))
17569
+ continue;
15889
17570
  if (sameCoord(current.coord, dest)) {
15890
17571
  return reconstruct(cameFrom, origin, dest);
15891
17572
  }
@@ -15899,20 +17580,33 @@ function planRoute(params) {
15899
17580
  const inCorridor = dist(origin, n.coord) + dist(n.coord, dest) <= straightLine + corridorSlack;
15900
17581
  if (!inCorridor)
15901
17582
  continue;
15902
- const tentativeG = current.g + 1;
15903
- if (tentativeG > maxLegs) {
17583
+ const tentativeLegs = current.legs + 1;
17584
+ if (tentativeLegs > maxLegs) {
15904
17585
  cappedByMaxLegs = true;
15905
17586
  continue;
15906
17587
  }
17588
+ const evaluatedCost = params.legCost?.({
17589
+ from: current.coord,
17590
+ to: n.coord,
17591
+ distance: n.dist,
17592
+ isDestination: sameCoord(n.coord, dest),
17593
+ });
17594
+ if (evaluatedCost === null)
17595
+ continue;
17596
+ const legCost = evaluatedCost ?? 1;
17597
+ if (!(legCost >= 0) || !Number.isFinite(legCost))
17598
+ continue;
15907
17599
  const nk = key(n.coord);
15908
- if (tentativeG < (gScore.get(nk) ?? Infinity)) {
15909
- gScore.set(nk, tentativeG);
17600
+ const nextCost = current.cost + legCost;
17601
+ if (nextCost < (gScore.get(nk) ?? Infinity)) {
17602
+ gScore.set(nk, nextCost);
15910
17603
  cameFrom.set(nk, current.coord);
15911
17604
  const remaining = dist(n.coord, dest);
15912
17605
  frontier.push({
15913
17606
  coord: n.coord,
15914
- g: tentativeG,
15915
- f: tentativeG + Math.ceil(remaining / perLegReach),
17607
+ legs: tentativeLegs,
17608
+ cost: nextCost,
17609
+ f: nextCost + heuristic(n.coord),
15916
17610
  remaining,
15917
17611
  });
15918
17612
  }
@@ -15962,47 +17656,22 @@ function reconstruct(cameFrom, origin, dest) {
15962
17656
  const waypoints = path.slice(1);
15963
17657
  return { ok: true, waypoints, legs: waypoints.length, totalDistance };
15964
17658
  }
15965
- let scanProvider = null;
15966
- const graphCache = new Map();
15967
- function setScanProvider(provider) {
15968
- scanProvider = provider;
15969
- graphCache.clear();
15970
- }
15971
- function sdkSystemGraph(seed) {
17659
+ const graphCache = new WeakMap();
17660
+ function sdkSystemGraph(seed, scan) {
15972
17661
  const s = Checksum256.from(seed);
15973
17662
  const seedHex = s.toString();
15974
- const cached = graphCache.get(seedHex);
17663
+ let bySeed = graphCache.get(scan);
17664
+ if (!bySeed) {
17665
+ bySeed = new Map();
17666
+ graphCache.set(scan, bySeed);
17667
+ }
17668
+ const cached = bySeed.get(seedHex);
15975
17669
  if (cached)
15976
17670
  return cached;
15977
- const graph = scanProvider ? wasmSystemGraph(s, seedHex, scanProvider) : jsSystemGraph(s);
15978
- graphCache.set(seedHex, graph);
17671
+ const graph = wasmSystemGraph(s, seedHex, scan);
17672
+ bySeed.set(seedHex, graph);
15979
17673
  return graph;
15980
17674
  }
15981
- function jsSystemGraph(s) {
15982
- return {
15983
- hasSystem: (c) => hasSystem(s, { x: c.x, y: c.y }) || wormholeAt(s, c.x, c.y) !== null,
15984
- nearby: (c, reachTiles) => {
15985
- const seen = new Set([`${c.x},${c.y}`]);
15986
- const out = [];
15987
- for (const d of findNearbyPlanets(s, { x: c.x, y: c.y }, reachTiles * PRECISION$1)) {
15988
- const coord = { x: Number(d.destination.x), y: Number(d.destination.y) };
15989
- const k = `${coord.x},${coord.y}`;
15990
- if (seen.has(k))
15991
- continue;
15992
- seen.add(k);
15993
- out.push({ coord, dist: Number(d.distance) / PRECISION$1 });
15994
- }
15995
- for (const coord of nearbyWormholes(s, c.x, c.y, reachTiles)) {
15996
- const k = `${coord.x},${coord.y}`;
15997
- if (seen.has(k))
15998
- continue;
15999
- seen.add(k);
16000
- out.push({ coord, dist: Math.hypot(coord.x - c.x, coord.y - c.y) });
16001
- }
16002
- return out;
16003
- },
16004
- };
16005
- }
16006
17675
  const SCAN_BUCKET = 48;
16007
17676
  function wasmSystemGraph(s, seedHex, scan) {
16008
17677
  const bucketCache = new Map();
@@ -16055,21 +17724,20 @@ function wasmSystemGraph(s, seedHex, scan) {
16055
17724
  };
16056
17725
  }
16057
17726
 
16058
- function computePerLegReach(s, haulCount = 0) {
17727
+ function computePerLegReach(s) {
16059
17728
  const capacity = s.generator?.capacity;
16060
17729
  const drain = s.engines?.drain;
16061
17730
  if (capacity === undefined || drain === undefined || drain === 0n) {
16062
17731
  throw new Error('entity has no usable engine/generator (cannot compute per-leg reach)');
16063
17732
  }
16064
- const haulDrain = s.hauler && haulCount > 0 ? s.hauler.drain * BigInt(haulCount) : 0n;
16065
- return Number(capacity) / Number(drain + haulDrain);
17733
+ return Number(capacity) / Number(drain);
16066
17734
  }
16067
- function computeGroupPerLegReach(participants, haulCount) {
17735
+ function computeGroupPerLegReach(participants) {
16068
17736
  const movers = participants.filter((p) => p.engines !== undefined && p.engines.drain !== 0n);
16069
17737
  if (movers.length === 0) {
16070
17738
  throw new Error('group has no moving entity (cannot compute per-leg reach)');
16071
17739
  }
16072
- return Math.min(...movers.map((p) => computePerLegReach(p, haulCount)));
17740
+ return Math.min(...movers.map(computePerLegReach));
16073
17741
  }
16074
17742
 
16075
17743
  function simulateRoute(movers, waypoints, origin, recharge) {
@@ -16098,17 +17766,13 @@ function simulateRoute(movers, waypoints, origin, recharge) {
16098
17766
  for (const to of waypoints) {
16099
17767
  const distance = distanceBetweenPoints(from.x, from.y, to.x, to.y);
16100
17768
  const distanceNum = Number(distance);
16101
- const distanceCells = Math.trunc(distanceNum / PRECISION$1);
17769
+ const distanceCells = distanceNum / PRECISION;
16102
17770
  const energyCostByMover = {};
16103
17771
  for (const m of movers) {
16104
17772
  if (!m.hasMovement || !m.engines)
16105
17773
  continue;
16106
17774
  const key = String(m.ref.entityId);
16107
- let cost = Number(calc_energyusage(distance, m.engines.drain));
16108
- if (m.hauler) {
16109
- cost += Math.trunc(distanceCells) * m.hauler.drain * haulCount;
16110
- }
16111
- energyCostByMover[key] = cost;
17775
+ energyCostByMover[key] = Number(calc_energyusage(distance, m.engines.drain));
16112
17776
  }
16113
17777
  let rechargeBefore = false;
16114
17778
  let rechargeSeconds = 0;
@@ -16229,6 +17893,23 @@ function resolveLaneCrafter(modules, entityItemId, laneKey) {
16229
17893
  const drain = computeCrafterDrain(fin);
16230
17894
  return { slotIndex: idx, speed, drain, outputPct: amp };
16231
17895
  }
17896
+ function resolveLaneBuilder(modules, entityItemId, laneKey) {
17897
+ const idx = laneKey - 1;
17898
+ const installed = idx >= 0 && idx < modules.length ? modules[idx].installed : undefined;
17899
+ if (!installed)
17900
+ throw new Error('builder lane has no module');
17901
+ const item = getItem(Number(installed.item_id.value ?? installed.item_id));
17902
+ if (item.moduleType !== 'builder')
17903
+ throw new Error('lane module is not a builder');
17904
+ const stats = BigInt(installed.stats.toString());
17905
+ const res = decodeStat(stats, 0);
17906
+ const fin = decodeStat(stats, 1);
17907
+ const layout = getEntityLayout(entityItemId)?.slots ?? [];
17908
+ const amp = getSlotAmp(layout, idx);
17909
+ const speed = applySlotMultiplier(computeBuilderSpeed(res), amp);
17910
+ const drain = computeBuilderDrain(fin);
17911
+ return { slotIndex: idx, speed, drain, outputPct: amp };
17912
+ }
16232
17913
  function resolveLaneLoader(modules, entityItemId, laneKey) {
16233
17914
  if (laneKey === LANE_MOBILITY) {
16234
17915
  return { slotIndex: -1, thrust: 0, mass: 0, outputPct: 0, valid: false };
@@ -16536,6 +18217,10 @@ function recomputeCaps(entity) {
16536
18217
  hullStats.strength = decodeStat(entity.stats, 0);
16537
18218
  if (hullStats.hardness === undefined)
16538
18219
  hullStats.hardness = decodeStat(entity.stats, 2);
18220
+ if (itemId === ITEM_SHIP_T1_PACKED) {
18221
+ hullStats.__legacyShipChannel3 = decodeStat(entity.stats, 3);
18222
+ hullStats.__legacyShipChannel4 = decodeStat(entity.stats, 4);
18223
+ }
16539
18224
  const layout = getEntityLayout(itemId)?.slots ?? [];
16540
18225
  const installed = toInstalledModules(entity.modules);
16541
18226
  const caps = computeEntityCapabilities(hullStats, itemId, installed, layout);
@@ -16558,6 +18243,12 @@ function recomputeCaps(entity) {
16558
18243
  drain: l.drain,
16559
18244
  output_pct: l.outputPct,
16560
18245
  });
18246
+ const toBuilderLane = (l) => Types.builder_lane.from({
18247
+ slot_index: l.slotIndex,
18248
+ speed: l.speed,
18249
+ drain: l.drain,
18250
+ output_pct: l.outputPct,
18251
+ });
16561
18252
  return {
16562
18253
  hullmass: UInt32.from(caps.hullmass),
16563
18254
  capacity: UInt32.from(caps.capacity),
@@ -16568,6 +18259,7 @@ function recomputeCaps(entity) {
16568
18259
  loaderLanes: (caps.loaderLanes ?? []).map(toLoaderLane),
16569
18260
  gathererLanes: (caps.gathererLanes ?? []).map(toGathererLane),
16570
18261
  crafterLanes: (caps.crafterLanes ?? []).map(toCrafterLane),
18262
+ builderLanes: (caps.builderLanes ?? []).map(toBuilderLane),
16571
18263
  hauler: caps.hauler
16572
18264
  ? Types.hauler_stats.from({
16573
18265
  capacity: caps.hauler.capacity,
@@ -16604,6 +18296,7 @@ function createProjectedEntity(entity) {
16604
18296
  const loaderLanes = entity.loader_lanes ?? caps?.loaderLanes ?? [];
16605
18297
  const gathererLanes = entity.gatherer_lanes ?? caps?.gathererLanes ?? [];
16606
18298
  const crafterLanes = entity.crafter_lanes ?? caps?.crafterLanes ?? [];
18299
+ const builderLanes = entity.builder_lanes ?? caps?.builderLanes ?? [];
16607
18300
  const engines = entity.engines ?? caps?.engines;
16608
18301
  const generator = entity.generator ?? caps?.generator;
16609
18302
  const hauler = entity.hauler ?? caps?.hauler;
@@ -16612,7 +18305,7 @@ function createProjectedEntity(entity) {
16612
18305
  const cargo = entity.cargo.map(cargoItemToStack);
16613
18306
  const projected = {
16614
18307
  location: Coordinates.from(entity.coordinates),
16615
- energy: UInt16.from(entity.energy ?? 0),
18308
+ energy: UInt32.from(entity.energy ?? 0),
16616
18309
  cargo,
16617
18310
  shipMass,
16618
18311
  capacity: capacity ? UInt64.from(capacity) : undefined,
@@ -16623,6 +18316,7 @@ function createProjectedEntity(entity) {
16623
18316
  loaderLanes,
16624
18317
  gathererLanes,
16625
18318
  crafterLanes,
18319
+ builderLanes,
16626
18320
  get cargoMass() {
16627
18321
  return calcStacksMass(this.cargo);
16628
18322
  },
@@ -16668,13 +18362,13 @@ function applyRechargeTask(projected, _task, options) {
16668
18362
  if (!projected.generator)
16669
18363
  return;
16670
18364
  if (options.complete) {
16671
- projected.energy = UInt16.from(projected.generator.capacity);
18365
+ projected.energy = UInt32.from(projected.generator.capacity);
16672
18366
  }
16673
18367
  else if (options.progress !== undefined) {
16674
18368
  const capacity = Number(projected.generator.capacity);
16675
18369
  const currentEnergy = Number(projected.energy);
16676
18370
  const rechargeAmount = (capacity - currentEnergy) * options.progress;
16677
- projected.energy = UInt16.from(Math.min(capacity, currentEnergy + rechargeAmount));
18371
+ projected.energy = UInt32.from(Math.min(capacity, currentEnergy + rechargeAmount));
16678
18372
  }
16679
18373
  }
16680
18374
  function applyFlightTask(projected, task, options) {
@@ -16693,8 +18387,8 @@ function applyFlightTask(projected, task, options) {
16693
18387
  });
16694
18388
  const partialEnergy = UInt64.from(Math.floor(Number(task.energy_cost ?? 0) * options.progress));
16695
18389
  projected.energy = projected.energy.gt(partialEnergy)
16696
- ? UInt16.from(projected.energy.subtracting(partialEnergy))
16697
- : UInt16.from(0);
18390
+ ? UInt32.from(projected.energy.subtracting(partialEnergy))
18391
+ : UInt32.from(0);
16698
18392
  }
16699
18393
  }
16700
18394
  function addCargoItem(projected, item) {
@@ -16716,16 +18410,16 @@ function applyRemoveCargoTask(projected, task) {
16716
18410
  function applyEnergyCost(projected, task) {
16717
18411
  if (!task.energy_cost)
16718
18412
  return;
16719
- const energyCost = UInt16.from(task.energy_cost);
18413
+ const energyCost = UInt32.from(task.energy_cost);
16720
18414
  projected.energy = projected.energy.gt(energyCost)
16721
- ? UInt16.from(projected.energy.subtracting(energyCost))
16722
- : UInt16.from(0);
18415
+ ? UInt32.from(projected.energy.subtracting(energyCost))
18416
+ : UInt32.from(0);
16723
18417
  }
16724
18418
  function applyGatherTask(projected, task, options) {
16725
18419
  if (!options.complete)
16726
18420
  return;
16727
18421
  applyEnergyCost(projected, task);
16728
- if (!task.entitytarget) {
18422
+ if (task.couplings.length === 0) {
16729
18423
  applyAddCargoTask(projected, task);
16730
18424
  }
16731
18425
  }
@@ -16736,12 +18430,8 @@ function applyCraftTask(projected, task) {
16736
18430
  for (let i = 0; i < task.cargo.length - 1; i++) {
16737
18431
  removeCargoItem(projected, task.cargo[i]);
16738
18432
  }
16739
- addCargoItem(projected, task.cargo[task.cargo.length - 1]);
16740
- }
16741
- function applyDeployTask(projected, task) {
16742
- applyEnergyCost(projected, task);
16743
- if (task.cargo.length > 0) {
16744
- removeCargoItem(projected, task.cargo[0]);
18433
+ if (task.couplings.length === 0) {
18434
+ addCargoItem(projected, task.cargo[task.cargo.length - 1]);
16745
18435
  }
16746
18436
  }
16747
18437
  function applyTask(projected, task) {
@@ -16767,9 +18457,6 @@ function applyTask(projected, task) {
16767
18457
  case TaskType.CRAFT:
16768
18458
  applyCraftTask(projected, task);
16769
18459
  break;
16770
- case TaskType.DEPLOY:
16771
- applyDeployTask(projected, task);
16772
- break;
16773
18460
  case TaskType.UNDEPLOY:
16774
18461
  case TaskType.DEMOLISH:
16775
18462
  break;
@@ -16907,10 +18594,6 @@ function projectEntityAt(entity, now) {
16907
18594
  if (taskComplete)
16908
18595
  applyCraftTask(projected, task);
16909
18596
  break;
16910
- case TaskType.DEPLOY:
16911
- if (taskComplete)
16912
- applyDeployTask(projected, task);
16913
- break;
16914
18597
  case TaskType.UNDEPLOY:
16915
18598
  case TaskType.DEMOLISH:
16916
18599
  break;
@@ -16937,7 +18620,7 @@ function taskCargoChanges(task) {
16937
18620
  case TaskType.UNWRAP:
16938
18621
  return items.map((i) => toChange(i, 'in'));
16939
18622
  case TaskType.GATHER:
16940
- return task.entitytarget ? [] : items.map((i) => toChange(i, 'in'));
18623
+ return task.couplings.length > 0 ? [] : items.map((i) => toChange(i, 'in'));
16941
18624
  case TaskType.UNLOAD:
16942
18625
  return items.map((i) => toChange(i, 'out'));
16943
18626
  case TaskType.CRAFT:
@@ -16950,6 +18633,49 @@ function taskCargoChanges(task) {
16950
18633
  }
16951
18634
  }
16952
18635
 
18636
+ const JOB_QUEUE_CAP = 25;
18637
+ function activeOn(jobs, socket, now) {
18638
+ return jobs
18639
+ .filter((j) => j.socket === socket && j.completesAt > now)
18640
+ .sort((a, b) => a.startsAt.getTime() - b.startsAt.getTime());
18641
+ }
18642
+ function jobsToLanes(jobs, socketCount, now) {
18643
+ const lanes = [];
18644
+ for (let socket = 0; socket < socketCount; socket++) {
18645
+ const entries = [];
18646
+ let cursor = null;
18647
+ for (const j of activeOn(jobs, socket, now)) {
18648
+ if (cursor && j.startsAt > cursor) {
18649
+ entries.push({ kind: 'idle', startsAt: cursor, completesAt: j.startsAt });
18650
+ }
18651
+ entries.push({ kind: 'job', startsAt: j.startsAt, completesAt: j.completesAt, job: j });
18652
+ cursor = j.completesAt;
18653
+ }
18654
+ lanes.push({ socket, entries });
18655
+ }
18656
+ return lanes;
18657
+ }
18658
+ function socketTail(jobs, socket, now) {
18659
+ const active = activeOn(jobs, socket, now);
18660
+ const last = active[active.length - 1];
18661
+ return last && last.completesAt > now ? last.completesAt : now;
18662
+ }
18663
+ function pickFabricator(jobs, sockets, durationBySocketMinutes, now) {
18664
+ let best = null;
18665
+ for (let slot = 0; slot < sockets.length; slot++) {
18666
+ if (!sockets[slot].open)
18667
+ continue;
18668
+ if (activeOn(jobs, slot, now).length >= JOB_QUEUE_CAP)
18669
+ continue;
18670
+ const startsAt = socketTail(jobs, slot, now);
18671
+ const completesAt = new Date(startsAt.getTime() + durationBySocketMinutes[slot] * 60000);
18672
+ if (!best || completesAt < best.completesAt) {
18673
+ best = { slot, startsAt, completesAt };
18674
+ }
18675
+ }
18676
+ return best;
18677
+ }
18678
+
16953
18679
  function composeIdleResolve(blocker, action, actions, now, lookupCounterpart) {
16954
18680
  const ids = [];
16955
18681
  const seen = new Set();
@@ -16984,15 +18710,16 @@ function taskCargoEffect(task) {
16984
18710
  case TaskType.UNLOAD:
16985
18711
  return { added: [], removed: task.cargo };
16986
18712
  case TaskType.GATHER:
16987
- return task.entitytarget ? { added: [], removed: [] } : { added: task.cargo, removed: [] };
18713
+ return task.couplings.length > 0
18714
+ ? { added: [], removed: [] }
18715
+ : { added: task.cargo, removed: [] };
16988
18716
  case TaskType.CRAFT:
16989
18717
  if (task.cargo.length === 0)
16990
18718
  return { added: [], removed: [] };
16991
- return { added: [task.cargo[task.cargo.length - 1]], removed: task.cargo.slice(0, -1) };
16992
- case TaskType.DEPLOY:
16993
- return task.cargo.length > 0
16994
- ? { added: [], removed: [task.cargo[0]] }
16995
- : { added: [], removed: [] };
18719
+ return {
18720
+ added: task.couplings.length === 0 ? [task.cargo[task.cargo.length - 1]] : [],
18721
+ removed: task.cargo.slice(0, -1),
18722
+ };
16996
18723
  default:
16997
18724
  return { added: [], removed: [] };
16998
18725
  }
@@ -17170,31 +18897,24 @@ function cancelEligibility(entity, laneKey, fromTaskIndex, input) {
17170
18897
  effects.abandonsRunning = true;
17171
18898
  if (t.energy_cost)
17172
18899
  energyForfeited += t.energy_cost.toNumber();
17173
- if (t.type.equals(TaskType.BUILDPLOT) && t.entitytarget)
17174
- effects.keepsPlotDeposits = { plot: t.entitytarget };
17175
- if (t.hold && t.entitytarget) {
17176
- const counterpart = input.counterparts?.get(t.entitytarget.entity_id.toString());
17177
- const hold = (counterpart?.holds ?? []).find((h) => h.id.equals(t.hold)) ??
17178
- (entity.holds ?? []).find((h) => h.id.equals(t.hold));
17179
- if (hold) {
17180
- const kind = hold.kind.toNumber();
17181
- effects.releasedHolds.push({ counterpart: t.entitytarget, kind });
17182
- if (kind === 1 ) {
17183
- effects.refunds.push({ giver: t.entitytarget, cargo: t.cargo });
17184
- const giver = counterpart;
17185
- if (giver) {
17186
- const returned = t.cargo.reduce((s, c) => s + calcCargoItemMass(c).toNumber(), 0);
17187
- const cap = giver.capacity
17188
- ? giver.capacity.toNumber()
17189
- : Number.MAX_SAFE_INTEGER;
17190
- if (giver.cargomass.toNumber() + returned > cap) {
17191
- return {
17192
- ok: false,
17193
- blockedReason: CancelBlockReason.WOULD_OVERFILL,
17194
- range,
17195
- effects: { ...EMPTY_EFFECTS },
17196
- };
17197
- }
18900
+ if (t.type.equals(TaskType.BUILDPLOT) && t.couplings.length > 0)
18901
+ effects.keepsPlotDeposits = { plot: t.couplings[0].counterpart };
18902
+ for (const c of t.couplings) {
18903
+ const kind = c.kind.toNumber();
18904
+ effects.releasedHolds.push({ counterpart: c.counterpart, kind });
18905
+ if (kind === HoldKind.PULL) {
18906
+ effects.refunds.push({ giver: c.counterpart, cargo: t.cargo });
18907
+ const giver = input.counterparts?.get(c.counterpart.entity_id.toString());
18908
+ if (giver) {
18909
+ const returned = t.cargo.reduce((s, c) => s + calcCargoItemMass(c).toNumber(), 0);
18910
+ const cap = giver.capacity ? giver.capacity.toNumber() : Number.MAX_SAFE_INTEGER;
18911
+ if (giver.cargomass.toNumber() + returned > cap) {
18912
+ return {
18913
+ ok: false,
18914
+ blockedReason: CancelBlockReason.WOULD_OVERFILL,
18915
+ range,
18916
+ effects: { ...EMPTY_EFFECTS },
18917
+ };
17198
18918
  }
17199
18919
  }
17200
18920
  }
@@ -17227,7 +18947,7 @@ function derivedLoaders(lanes) {
17227
18947
  function acceleration(thrust, mass) {
17228
18948
  if (mass <= 0)
17229
18949
  return 0;
17230
- return (thrust / mass) * PRECISION$1;
18950
+ return (thrust / mass) * PRECISION;
17231
18951
  }
17232
18952
  function flightTime(distance, accel) {
17233
18953
  if (accel <= 0 || distance <= 0)
@@ -17237,7 +18957,7 @@ function flightTime(distance, accel) {
17237
18957
  function distance2d(ax, ay, bx, by) {
17238
18958
  const dx = ax - bx;
17239
18959
  const dy = ay - by;
17240
- return Math.floor(Math.sqrt(dx * dx + dy * dy) * PRECISION$1);
18960
+ return Math.floor(Math.sqrt(dx * dx + dy * dy) * PRECISION);
17241
18961
  }
17242
18962
  function unwrapTransitDuration(itemMass, origin, dest) {
17243
18963
  if (itemMass <= 0)
@@ -17402,10 +19122,10 @@ function hasGatherer(e) {
17402
19122
  function maxTravelDistance(entity) {
17403
19123
  return UInt32.from(entity.generator.capacity)
17404
19124
  .dividing(entity.engines.drain)
17405
- .multiplying(PRECISION$1);
19125
+ .multiplying(PRECISION);
17406
19126
  }
17407
19127
  function calcEnergyUsage(entity, distance) {
17408
- return distance.dividing(PRECISION$1).multiplying(entity.engines.drain);
19128
+ return distance.multiplying(entity.engines.drain).dividing(PRECISION);
17409
19129
  }
17410
19130
  function energyPercent(entity) {
17411
19131
  return (Number(entity.energy) / Number(entity.generator.capacity)) * 100;
@@ -17440,13 +19160,12 @@ function calc_gather_rate(gatherer, itemMass, stratum, richness) {
17440
19160
  function calc_gather_energy(gatherer, duration) {
17441
19161
  if (duration <= 0)
17442
19162
  return UInt32.from(0);
17443
- const raw = Math.floor((duration * gatherer.drain.toNumber()) / PRECISION$1);
17444
- return UInt32.from(Math.min(Math.max(raw, 1), 4294967295));
19163
+ const raw = Math.floor((duration * gatherer.drain.toNumber()) / PRECISION);
19164
+ return UInt32.from(Math.min(Math.max(raw, 1000), 4294967295));
17445
19165
  }
17446
19166
 
17447
19167
  const BASE_HAUL_PENALTY_MILLI = 300;
17448
19168
  const HAULER_EFFICIENCY_DENOM = 10000;
17449
- const PRECISION = 10000;
17450
19169
  function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
17451
19170
  if (haulCount === 0)
17452
19171
  return totalThrust;
@@ -17455,9 +19174,6 @@ function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
17455
19174
  HAULER_EFFICIENCY_DENOM);
17456
19175
  return Math.floor((totalThrust * 1000) / penaltyMilli);
17457
19176
  }
17458
- function computeHaulerDrain(distance, drain, haulCount) {
17459
- return Math.floor(distance / PRECISION) * drain * haulCount;
17460
- }
17461
19177
 
17462
19178
  const categoryColors = {
17463
19179
  ore: '#C26D3F',
@@ -17604,6 +19320,7 @@ const capabilityNames = [
17604
19320
  'Gathering',
17605
19321
  'Warp',
17606
19322
  'Crafting',
19323
+ 'Build',
17607
19324
  'Launch',
17608
19325
  'Hauling',
17609
19326
  ];
@@ -17614,8 +19331,17 @@ const capabilityAttributes = [
17614
19331
  attribute: 'capacity',
17615
19332
  description: 'Cargo capacity added by hulls and installed Cargo Hold modules',
17616
19333
  },
19334
+ {
19335
+ capability: 'Storage',
19336
+ attribute: 'drain',
19337
+ description: 'Fixed normal-travel drain contributed by an installed Cargo Hold',
19338
+ },
17617
19339
  { capability: 'Movement', attribute: 'thrust', description: 'Propulsion force' },
17618
- { capability: 'Movement', attribute: 'drain', description: 'Energy consumed per movement' },
19340
+ {
19341
+ capability: 'Movement',
19342
+ attribute: 'drain',
19343
+ description: 'Total installed energy consumed per tile of normal travel',
19344
+ },
17619
19345
  {
17620
19346
  capability: 'Energy',
17621
19347
  attribute: 'capacity',
@@ -17640,6 +19366,12 @@ const capabilityAttributes = [
17640
19366
  description: 'Energy consumed per second while crafting',
17641
19367
  },
17642
19368
  { capability: 'Crafting', attribute: 'quality', description: 'Modifier on output quality' },
19369
+ { capability: 'Build', attribute: 'speed', description: 'Build progress per second' },
19370
+ {
19371
+ capability: 'Build',
19372
+ attribute: 'drain',
19373
+ description: 'Energy consumed per second while building',
19374
+ },
17643
19375
  { capability: 'Launch', attribute: 'range', description: 'Maximum launch distance' },
17644
19376
  { capability: 'Launch', attribute: 'capacity', description: 'Maximum mass per launch' },
17645
19377
  { capability: 'Launch', attribute: 'drain', description: 'Energy consumed per launch' },
@@ -17656,7 +19388,7 @@ const capabilityAttributes = [
17656
19388
  {
17657
19389
  capability: 'Hauling',
17658
19390
  attribute: 'drain',
17659
- description: 'Energy consumed per target during haul-beam operation',
19391
+ description: 'Fixed normal-travel drain contributed by an installed Tractor Beam',
17660
19392
  },
17661
19393
  ];
17662
19394
  const invertedAttributes = new Set(['drain', 'mass']);
@@ -17697,6 +19429,10 @@ const SLOT_FORMULAS = {
17697
19429
  0: { capability: 'Crafting', attribute: 'speed' },
17698
19430
  1: { capability: 'Crafting', attribute: 'drain' },
17699
19431
  },
19432
+ builder: {
19433
+ 0: { capability: 'Build', attribute: 'speed' },
19434
+ 1: { capability: 'Build', attribute: 'drain' },
19435
+ },
17700
19436
  storage: {
17701
19437
  0: { capability: 'Storage', attribute: 'capacity' },
17702
19438
  1: { capability: 'Storage', attribute: 'capacity' },
@@ -17730,6 +19466,7 @@ const KIND_TO_ITEM_ID = {
17730
19466
  gatherer: ITEM_GATHERER_T1,
17731
19467
  loader: ITEM_LOADER_T1,
17732
19468
  crafter: ITEM_CRAFTER_T1,
19469
+ builder: ITEM_BUILDER_T1,
17733
19470
  storage: ITEM_STORAGE_T1,
17734
19471
  hauler: ITEM_HAULER_T1,
17735
19472
  warp: ITEM_WARP_T1,
@@ -18022,6 +19759,20 @@ function rollupCrafter(lanes) {
18022
19759
  drain: UInt32.from(totalDrain),
18023
19760
  };
18024
19761
  }
19762
+ function rollupBuilder(lanes) {
19763
+ if (lanes.length === 0)
19764
+ return undefined;
19765
+ let totalSpeed = 0;
19766
+ let totalDrain = 0;
19767
+ for (const l of lanes) {
19768
+ totalSpeed += Number(l.speed);
19769
+ totalDrain += Number(l.drain);
19770
+ }
19771
+ return {
19772
+ speed: UInt16.from(Math.min(totalSpeed, 65535)),
19773
+ drain: UInt32.from(totalDrain),
19774
+ };
19775
+ }
18025
19776
  function rollupLoaders(lanes) {
18026
19777
  if (lanes.length === 0)
18027
19778
  return undefined;
@@ -18125,8 +19876,8 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18125
19876
  return {
18126
19877
  capability: 'Generator',
18127
19878
  attributes: [
18128
- { label: 'Capacity', value: caps.capacity },
18129
- { label: 'Recharge', value: caps.recharge },
19879
+ { label: 'Capacity', value: toWholeEnergy$1(caps.capacity) },
19880
+ { label: 'Recharge', value: toWholeEnergy$1(caps.recharge) },
18130
19881
  ],
18131
19882
  };
18132
19883
  }
@@ -18136,7 +19887,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18136
19887
  capability: 'Gatherer',
18137
19888
  attributes: [
18138
19889
  { label: 'Yield', value: caps.yield },
18139
- { label: 'Drain', value: caps.drain },
19890
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18140
19891
  { label: 'Depth', value: caps.depth },
18141
19892
  ],
18142
19893
  };
@@ -18158,7 +19909,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18158
19909
  capability: 'Crafting',
18159
19910
  attributes: [
18160
19911
  { label: 'Speed', value: caps.speed },
18161
- { label: 'Drain', value: caps.drain },
19912
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18162
19913
  ],
18163
19914
  };
18164
19915
  }
@@ -18169,12 +19920,12 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18169
19920
  attributes: [
18170
19921
  { label: 'Capacity', value: caps.capacity },
18171
19922
  { label: 'Efficiency', value: caps.efficiency },
18172
- { label: 'Drain', value: caps.drain },
19923
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18173
19924
  ],
18174
19925
  };
18175
19926
  }
18176
19927
  case MODULE_STORAGE: {
18177
- const caps = computeStorageCapabilities(stats);
19928
+ const caps = computeStorageCapabilities(stats, tier);
18178
19929
  return {
18179
19930
  capability: 'Storage',
18180
19931
  attributes: [
@@ -18182,6 +19933,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18182
19933
  label: 'Cargo Capacity',
18183
19934
  value: applySlotMultiplierUint32(caps.capacity, outputPct),
18184
19935
  },
19936
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18185
19937
  ],
18186
19938
  };
18187
19939
  }
@@ -18192,7 +19944,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18192
19944
  attributes: [
18193
19945
  {
18194
19946
  label: 'Energy Capacity',
18195
- value: applySlotMultiplierUint32(caps.capacity, outputPct),
19947
+ value: toWholeEnergy$1(applySlotMultiplierUint32(caps.capacity, outputPct)),
18196
19948
  },
18197
19949
  ],
18198
19950
  };
@@ -18234,10 +19986,19 @@ function resolveModule(id, stats) {
18234
19986
  attributes,
18235
19987
  };
18236
19988
  }
18237
- function hullCapsForEntity(itemId, decoded) {
19989
+ function hullCapsForEntity(itemId, decoded, packedStats) {
19990
+ const hullStats = getPackedEntityType(itemId)?.equals(ENTITY_SHIP)
19991
+ ? {
19992
+ strength: decodeStat(packedStats, 0),
19993
+ hardness: decodeStat(packedStats, 1),
19994
+ plasticity: decodeStat(packedStats, 2),
19995
+ volatility: decodeStat(packedStats, 3),
19996
+ conductivity: decodeStat(packedStats, 4),
19997
+ }
19998
+ : decoded;
18238
19999
  return {
18239
- hullmass: computeBaseHullmass(decoded),
18240
- capacity: computeBaseCapacity(itemId, decoded),
20000
+ hullmass: computeBaseHullmass(itemId, hullStats),
20001
+ capacity: computeBaseCapacity(itemId, hullStats),
18241
20002
  };
18242
20003
  }
18243
20004
  function resolveEntity(id, stats, modules) {
@@ -18254,7 +20015,7 @@ function resolveEntity(id, stats, modules) {
18254
20015
  decoded.density = decodeStat(bigStats, 1);
18255
20016
  if (decoded.hardness === undefined)
18256
20017
  decoded.hardness = decodeStat(bigStats, 2);
18257
- const hullCaps = hullCapsForEntity(id, decoded);
20018
+ const hullCaps = hullCapsForEntity(id, decoded, bigStats);
18258
20019
  attributes = [
18259
20020
  {
18260
20021
  capability: 'Hull',
@@ -18490,6 +20251,9 @@ function moduleSlotsForImmutable(modules) {
18490
20251
  }));
18491
20252
  }
18492
20253
  const IMAGE_HOST_URL = 'https://item.shiploadgame.com/item';
20254
+ function toWholeEnergy(milli) {
20255
+ return Math.floor((milli + 500) / 1000);
20256
+ }
18493
20257
  function bytesToBase64Url(bytes) {
18494
20258
  let binary = '';
18495
20259
  for (let i = 0; i < bytes.byteLength; i++)
@@ -18555,8 +20319,14 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18555
20319
  const thm = decodeStat(stats, 1);
18556
20320
  base.push({ first: 'volatility', second: ['uint16', vol] });
18557
20321
  base.push({ first: 'thermal', second: ['uint16', thm] });
18558
- base.push({ first: 'thrust', second: ['uint32', computeEngineThrust(vol)] });
18559
- base.push({ first: 'drain', second: ['uint16', computeEngineDrain(thm)] });
20322
+ base.push({
20323
+ first: 'thrust',
20324
+ second: ['uint32', computeEngineThrust(computeEffectiveModuleStat(vol))],
20325
+ });
20326
+ base.push({
20327
+ first: 'drain',
20328
+ second: ['uint16', computeEngineDrain(computeEffectiveModuleStat(thm))],
20329
+ });
18560
20330
  break;
18561
20331
  }
18562
20332
  case MODULE_GENERATOR: {
@@ -18564,8 +20334,20 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18564
20334
  const ref = decodeStat(stats, 1);
18565
20335
  base.push({ first: 'resonance', second: ['uint16', res] });
18566
20336
  base.push({ first: 'reflectivity', second: ['uint16', ref] });
18567
- base.push({ first: 'capacity', second: ['uint16', computeGeneratorCap(res)] });
18568
- base.push({ first: 'recharge', second: ['uint16', computeGeneratorRech(ref)] });
20337
+ base.push({
20338
+ first: 'capacity',
20339
+ second: [
20340
+ 'uint16',
20341
+ toWholeEnergy(computeGeneratorCap(computeEffectiveModuleStat(res))),
20342
+ ],
20343
+ });
20344
+ base.push({
20345
+ first: 'recharge',
20346
+ second: [
20347
+ 'uint16',
20348
+ toWholeEnergy(computeGeneratorRech(computeEffectiveModuleStat(ref))),
20349
+ ],
20350
+ });
18569
20351
  break;
18570
20352
  }
18571
20353
  case MODULE_GATHERER: {
@@ -18576,7 +20358,10 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18576
20358
  base.push({ first: 'hardness', second: ['uint16', hrd] });
18577
20359
  base.push({ first: 'saturation', second: ['uint16', sat] });
18578
20360
  base.push({ first: 'yield', second: ['uint16', computeGathererYield(str)] });
18579
- base.push({ first: 'drain', second: ['uint16', computeGathererDrain(sat)] });
20361
+ base.push({
20362
+ first: 'drain',
20363
+ second: ['uint16', toWholeEnergy(computeGathererDrain(sat))],
20364
+ });
18580
20365
  base.push({ first: 'depth', second: ['uint16', computeGathererDepth(hrd, item.tier)] });
18581
20366
  break;
18582
20367
  }
@@ -18601,7 +20386,16 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18601
20386
  base.push({ first: 'fineness', second: ['uint16', fin] });
18602
20387
  base.push({ first: 'conductivity', second: ['uint16', con] });
18603
20388
  base.push({ first: 'speed', second: ['uint16', computeCrafterSpeed(fin)] });
18604
- base.push({ first: 'drain', second: ['uint16', computeCrafterDrain(con)] });
20389
+ base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeCrafterDrain(con))] });
20390
+ break;
20391
+ }
20392
+ case MODULE_BUILDER: {
20393
+ const res = decodeStat(stats, 0);
20394
+ const fin = decodeStat(stats, 1);
20395
+ base.push({ first: 'resonance', second: ['uint16', res] });
20396
+ base.push({ first: 'fineness', second: ['uint16', fin] });
20397
+ base.push({ first: 'speed', second: ['uint16', computeBuilderSpeed(res)] });
20398
+ base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeBuilderDrain(fin))] });
18605
20399
  break;
18606
20400
  }
18607
20401
  case MODULE_STORAGE: {
@@ -18615,7 +20409,11 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18615
20409
  base.push({ first: 'cohesion', second: ['uint16', com] });
18616
20410
  base.push({
18617
20411
  first: 'capacity',
18618
- second: ['uint32', computeCargoBayCapacity(str, den, hrd, com)],
20412
+ second: ['uint32', computeCargoBayCapacity(str, den, hrd)],
20413
+ });
20414
+ base.push({
20415
+ first: 'drain',
20416
+ second: ['uint16', toWholeEnergy(computeCargoBayDrain(com, item.tier))],
18619
20417
  });
18620
20418
  break;
18621
20419
  }
@@ -18630,7 +20428,7 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18630
20428
  base.push({ first: 'insulation', second: ['uint16', ins] });
18631
20429
  base.push({
18632
20430
  first: 'capacity',
18633
- second: ['uint32', computeBatteryBankCapacity(vol, thm, pla, ins)],
20431
+ second: ['uint32', toWholeEnergy(computeBatteryBankCapacity(vol, thm, pla, ins))],
18634
20432
  });
18635
20433
  break;
18636
20434
  }
@@ -18643,7 +20441,10 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18643
20441
  base.push({ first: 'conductivity', second: ['uint16', con] });
18644
20442
  base.push({ first: 'capacity', second: ['uint8', computeHaulerCapacity(res, item.tier)] });
18645
20443
  base.push({ first: 'efficiency', second: ['uint16', computeHaulerEfficiency(pla)] });
18646
- base.push({ first: 'drain', second: ['uint16', computeHaulerDrain$1(con)] });
20444
+ base.push({
20445
+ first: 'drain',
20446
+ second: ['uint16', toWholeEnergy(computeHaulerDrain(con, item.tier))],
20447
+ });
18647
20448
  break;
18648
20449
  }
18649
20450
  }
@@ -18696,6 +20497,7 @@ var index = /*#__PURE__*/Object.freeze({
18696
20497
  deserializeModule: deserializeModule,
18697
20498
  deserializeEntity: deserializeEntity,
18698
20499
  deserializeAsset: deserializeAsset,
20500
+ toWholeEnergy: toWholeEnergy$1,
18699
20501
  computeBaseHullmass: computeBaseHullmass$1,
18700
20502
  computeBaseCapacityShip: computeBaseCapacityShip,
18701
20503
  computeBaseCapacityContainer: computeBaseCapacityContainer,
@@ -18715,9 +20517,13 @@ var index = /*#__PURE__*/Object.freeze({
18715
20517
  computeLoaderThrust: computeLoaderThrust,
18716
20518
  computeCrafterSpeed: computeCrafterSpeed,
18717
20519
  computeCrafterDrain: computeCrafterDrain,
20520
+ computeBuilderSpeed: computeBuilderSpeed,
20521
+ computeBuilderDrain: computeBuilderDrain,
18718
20522
  computeHaulerCapacity: computeHaulerCapacity,
18719
20523
  computeHaulerEfficiency: computeHaulerEfficiency,
18720
- computeHaulerDrain: computeHaulerDrain$1,
20524
+ supportDrainTierPercent: supportDrainTierPercent,
20525
+ computeHaulerDrain: computeHaulerDrain,
20526
+ computeCargoBayDrain: computeCargoBayDrain,
18721
20527
  computeWarpRange: computeWarpRange,
18722
20528
  computeCargoBayCapacity: computeCargoBayCapacity,
18723
20529
  computeBatteryBankCapacity: computeBatteryBankCapacity,
@@ -18963,5 +20769,5 @@ function planParallelTransfer(entity, target) {
18963
20769
  return allocateProportional(laneWeights, requestedQty).filter((e) => e.quantity > 0);
18964
20770
  }
18965
20771
 
18966
- export { ALL_ENTITY_TYPES, ATOMICASSETS_ACCOUNT, ActionsManager, BASE_HAUL_PENALTY_MILLI$1 as BASE_HAUL_PENALTY_MILLI, BASE_ORBITAL_MASS, BLEND_INPUTS_MUST_MATCH, BLEND_REQUIRES_MULTIPLE, BLEND_STAT_LESS_NOT_SUPPORTED, CANCEL_CONTAINS_GROUPED_TASK, CAPACITY_TIER_TABLE, CAP_DEMOLISH, CAP_MODULES, CAP_UNDEPLOY, CAP_WRAP, CATEGORY_LABELS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, COMPONENT_TIER_PREFIXES, CONTAINER_NOT_FOUND, CONTAINER_Z, COORD_MAX, COORD_MIN, COORD_OFFSET, CRAFT_ENERGY_DIVISOR, CRAFT_EXCEEDS_ENERGY_CAPACITY, CRAFT_NOT_ENOUGH_ENERGY, CancelBlockReason, ClusterManager, ConstructionManager, Coordinates, DEPLOY_ENTITY_HAS_SCHEDULE, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, DESTINATION_CAPACITY_EXCEEDED, ENGINE_DRAIN_BASE, ENGINE_DRAIN_REF_THM, ENGINE_DRAIN_REF_THRUST, ENTITY_ALREADY_THERE, ENTITY_CAPACITY_EXCEEDED, ENTITY_CARGO_NOT_LOADED, ENTITY_CARGO_NOT_OWNED, ENTITY_CONTAINER, ENTITY_EXTRACTOR, ENTITY_FACTORY, ENTITY_HUB, ENTITY_INVALID_CARGO, ENTITY_INVALID_DESTINATION, ENTITY_INVALID_TRAVEL_DURATION, ENTITY_NEXUS, ENTITY_NOT_ENOUGH_ENERGY, ENTITY_NOT_ENOUGH_ENERGY_CAPACITY, ENTITY_NO_CRAFTER, ENTITY_SHIP, ENTITY_WAREHOUSE, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, Entity, EntityClass, EntityInventory, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GATHERER_DEPTH_MAX_TIER, GATHERER_DEPTH_TABLE, GATHER_EXCEEDS_ENERGY_CAPACITY, GATHER_MASS_DIVISOR, GATHER_NOT_ENOUGH_ENERGY, GROUP_DUPLICATE_ENTITY, GROUP_EMPTY, GROUP_ENTITY_NOT_MOVABLE, GROUP_HAUL_CAPACITY_EXCEEDED, GROUP_NOT_FOUND, GROUP_NOT_SAME_LOCATION, GROUP_NOT_SAME_OWNER, GROUP_NO_THRUST, GameState, HAULER_EFFICIENCY_DENOM$1 as HAULER_EFFICIENCY_DENOM, HoldKind, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_BATTERY_T1, ITEM_BEAM, ITEM_BEAM_T2, ITEM_BIOMASS_T1, ITEM_BIOMASS_T10, ITEM_BIOMASS_T2, ITEM_BIOMASS_T3, ITEM_BIOMASS_T4, ITEM_BIOMASS_T5, ITEM_BIOMASS_T6, ITEM_BIOMASS_T7, ITEM_BIOMASS_T8, ITEM_BIOMASS_T9, ITEM_CERAMIC, ITEM_CERAMIC_T2, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_CRAFTER_T1, ITEM_CRYSTAL_T1, ITEM_CRYSTAL_T10, ITEM_CRYSTAL_T2, ITEM_CRYSTAL_T3, ITEM_CRYSTAL_T4, ITEM_CRYSTAL_T5, ITEM_CRYSTAL_T6, ITEM_CRYSTAL_T7, ITEM_CRYSTAL_T8, ITEM_CRYSTAL_T9, ITEM_DOES_NOT_EXIST, ITEM_ENGINE_T1, ITEM_EXTRACTOR_T1_PACKED, ITEM_FACTORY_T1_PACKED, ITEM_FRAME, ITEM_FRAME_T2, ITEM_GAS_T1, ITEM_GAS_T10, ITEM_GAS_T2, ITEM_GAS_T3, ITEM_GAS_T4, ITEM_GAS_T5, ITEM_GAS_T6, ITEM_GAS_T7, ITEM_GAS_T8, ITEM_GAS_T9, ITEM_GATHERER_T1, ITEM_GATHERER_T2, ITEM_GENERATOR_T1, ITEM_HAULER_SHIP_T2_PACKED, ITEM_HAULER_T1, ITEM_HAULER_T2, ITEM_HUB_T1_PACKED, ITEM_LAUNCHER_T1, ITEM_LOADER_T1, ITEM_MASS_CATCHER_T1_PACKED, ITEM_MASS_DRIVER_T1_PACKED, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_NOT_DEPLOYABLE, ITEM_NOT_PACKED_ENTITY, ITEM_ORE_T1, ITEM_ORE_T10, ITEM_ORE_T2, ITEM_ORE_T3, ITEM_ORE_T4, ITEM_ORE_T5, ITEM_ORE_T6, ITEM_ORE_T7, ITEM_ORE_T8, ITEM_ORE_T9, ITEM_PLASMA_CELL, ITEM_PLASMA_CELL_T2, ITEM_PLATE, ITEM_PLATE_T2, ITEM_POLYMER, ITEM_POLYMER_T2, ITEM_PROSPECTOR_T2_PACKED, ITEM_REACTOR, ITEM_REACTOR_T2, ITEM_REGOLITH_T1, ITEM_REGOLITH_T10, ITEM_REGOLITH_T2, ITEM_REGOLITH_T3, ITEM_REGOLITH_T4, ITEM_REGOLITH_T5, ITEM_REGOLITH_T6, ITEM_REGOLITH_T7, ITEM_REGOLITH_T8, ITEM_REGOLITH_T9, ITEM_RESIN, ITEM_RESIN_T2, ITEM_RESONATOR, ITEM_RESONATOR_T2, ITEM_SENSOR, ITEM_SENSOR_T2, ITEM_SHIP_T1_PACKED, ITEM_STORAGE_T1, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, ITEM_WARP_T1, InventoryAccessor, LANE_BARRIER, LANE_MOBILITY, LOCAL_HALF, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_LEGS, MAX_ORBITAL_ALTITUDE, MAX_STARS_PER_STAT, MAX_STAR_RATING, MIN_ORBITAL_ALTITUDE, MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL, MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE, MODULE_ANY, MODULE_BATTERY, MODULE_CARGO_NOT_FOUND, MODULE_CRAFTER, MODULE_ENGINE, MODULE_ENTITY_BUSY, MODULE_GATHERER, MODULE_GENERATOR, MODULE_HAULER, MODULE_LAUNCHER, MODULE_LOADER, MODULE_NOT_MODULE, MODULE_SLOT_EMPTY, MODULE_SLOT_INVALID, MODULE_SLOT_OCCUPIED, MODULE_STORAGE, MODULE_TIER_PREFIXES, MODULE_TYPE_MISMATCH, MODULE_WARP, index as NFT, NO_SCHEDULE, NftManager, PLANETARY_STRUCTURE_Z, PLANET_SUBTYPE_GAS_GIANT, PLANET_SUBTYPE_ICY, PLANET_SUBTYPE_INDUSTRIAL, PLANET_SUBTYPE_OCEAN, PLANET_SUBTYPE_ROCKY, PLANET_SUBTYPE_TERRESTRIAL, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PLAYER_NOT_JOINED, PRECISION$1 as PRECISION, platform as PlatformContract, Types$1 as PlatformTypes, Player, PlayersManager, RECIPE_INPUTS_EXCESS, RECIPE_INPUTS_INSUFFICIENT, RECIPE_INPUTS_INVALID, RECIPE_INPUTS_MIXED, RECIPE_NOT_FOUND, REGION_DIV, REGION_PER_AXIS, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, RESERVE_TIERS, RESOLVE_COUNT_EXCEEDS_COMPLETED, RESOURCE_TIER_ADJECTIVES, RESOURCE_TIER_MULT_TENTHS, SECTORS_PER_AXIS, SECTOR_DIV, SHIPLOAD_COLLECTION, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_NOT_ARRIVED, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, SLOT_FORMULAS, STAR_STEP, ScheduleAccessor, server as ServerContract, Types as ServerTypes, Shipload, SubscriptionsManager, TIER_ROLL_MAX, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_NOT_FOUND, WARP_HAS_CARGO, WARP_HAS_SCHEDULE, WARP_NOT_FULL_ENERGY, WARP_NO_CAPABILITY, WARP_OUT_OF_RANGE, WH, WOULD_OVERFILL, WOULD_STRAND, WebSocketConnection, YIELD_FRACTION_DEEP, YIELD_FRACTION_SHALLOW, addressFromCoordinates, allBuildableItems, allPlotBuildableItems, allocateProportional, applyCapacityTier, applyResourceTierMultiplier, availableBuildMethods, availableCapacity, availableCapacityFromMass, availableForItem, baseName, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildComponentImmutable, buildEntityDescription, buildEntityImmutable, buildGatherPlan, buildImmutableData, buildMintAssetAction, buildModuleImmutable, buildResourceImmutable, calcCargoItemMass, calcCargoMass, calcEnergyUsage, calcStacksMass, calc_acceleration, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_flighttime, calc_gather_duration, calc_gather_energy, calc_gather_rate, calc_group_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_onesided_duration, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calc_transit_duration, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, cancelEligibility, candidateLaneCompletesAt, capabilityAttributes, capabilityNames, capacityTierMultiplier, capsHasCrafter, capsHasGatherer, capsHasHauler, capsHasLauncher, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoItem, cargoItemToStack, cargoReadyAt, cargoRef, cargoUtils, categoryColors, categoryFromIndex, categoryLabel, categoryLabelFromIndex, compareByStars, componentIcon, composeIdleResolve, computeBaseCapacity, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass$1 as computeBaseHullmass, computeBatteryCapabilities, computeComponentStats, computeContainerCapabilities, computeCraftedOutputStats, computeCrafterCapabilities, computeCrafterDrain, computeCrafterSpeed, computeEngineCapabilities, computeEngineDrain, computeEngineThrust, computeEntityCapabilities, computeEntityStats, computeFreeCells, computeGathererCapabilities, computeGathererDepth, computeGathererDrain, computeGathererYield, computeGeneratorCap, computeGeneratorCapabilities, computeGeneratorRech, computeGroupPerLegReach, computeHaulPenalty, computeHaulerCapabilities, computeHaulerCapacity, computeHaulerDrain, computeHaulerEfficiency, computeInputMass, computeLauncherCapabilities, computeLoaderCapabilities, computeLoaderMass, computeLoaderThrust, computeNftImageUrl, computePerLegReach, computeShipHullCapabilities, computeStorageCapabilities, computeTravelDrain, computeWarehouseHullCapabilities, computeWarpCapabilities, computeWarpRange, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeAddress, decodeAtomicAsset, decodeCraftedItemStats, decodeRegion, decodeSector, decodeStat, decodeStats, Shipload as default, deriveLocation, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStatMappings, deriveStrata, deriveStratum, derivedLoaders, describeItem, describeModule, describeModuleForItem, describeModuleForSlot, deserializeAsset, deserializeAtomicData, deserializeComponent, deserializeEntity, deserializeModule, deserializeResource, displayName, distanceBetweenCoordinates, distanceBetweenPoints, easeFlightProgress, eligibleUpgrades, encodeAddress, encodeAddressMemo, encodeGatheredCargoStats, encodeRegion, encodeSector, encodeStats, energyAtTime, energyPercent, entityDisplayName, estimateDealTravelTime, estimateTravelTime, estimateUnwrapDuration, feistel, feistelInv, fetchAtomicAssetsForOwner, fetchAtomicSchemas, filterByBuildMethod, findNearbyPlanets, flightSpeedFactor, formatLocation, formatMass, formatMassDelta, formatMassScaled, formatModuleLine, formatTier, gatherEnergyCost, gathererDepthForTier, getAllRecipes, getCapabilityAttributeRows, getCapabilityAttributes, getCategoryInfo, getComponentDemand, getComponents, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEffectiveReserve, getEligibleResources, getEntityClass, getEntityItems, getEntityLayout, getEpochInfo, getFlightOrigin, getInterpolatedPosition, getItem, getItems, getKindMeta, getLocationCandidates, getLocationKind, getLocationProfile, getLocationType, getLocationTypeName, getModuleCapabilityType, getModules, getPackedEntityType, getPlanetSubtype, getPlanetSubtypes, getPositionAt, getProducersForAttribute, getRecipe, getRecipeConsumers, getResourceDemand, getResourceTier, getResourceWeight, getResources, getStatDefinitions, getStatMappings, getStatMappingsForCapability, getStatMappingsForStat, getStatName, getSystemName, getTemplateMeta, hasEnergy, hasEnergyForDistance, hasGatherer, hasLoaders, hasMass, hasSchedule, hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, incomingHoldMass, interpolateFlightPosition, isBuildable, isContainer, isCraftedItem, isExtractor, isFactory, isFull, isFullFromMass, isGatherableLocation, isHub, isInvertedAttribute, isLocationBuildable, isModuleItem, isNexus, isPlot, isPlotBuildable, isRelatedItem, isShip, isSubscriptionsDebugEnabled, isValidWormholePair, isWarehouse, itemAbbreviations, itemCategory, itemIds, itemOffset, itemTier, itemTypeCode, kindCan, laneKeyForModule, lerp$1 as lerp, makeEntity, mapEntity, maxCraftable, maxQtyForCharge, maxTravelDistance, mergeStacks, moduleAccepts, moduleDisplayName, moduleIcon, moduleSlotTypeToCode, nearbyWormholes, needsRecharge, normalizeDisplayName, parseWireEntity, partnerRegion, planParallelTransfer, planRoute, projectEntity, projectEntityAt, projectRemainingAt, projectedCargoAvailableAt, projectedPeakCargomass, rawScheduleEnd, readCommonBase, receiveFits, regionOf, removeFromStacks, renderDescription, resolveItem, resolveItemCategory, resolveLaneCrafter, resolveLaneGatherer, resolveLaneLoader, resolveLockedAmount, resolveStats, rollTier, rollWithinTier, rollupCrafter, rollupGatherer, rollupLoaders, rotation, schedule, sdkSystemGraph, selectGatherLane, setScanProvider, setSubscriptionsDebug, simulateRoute, slotAcceptsModule, sourceLabelForOutput, splitCost, stackKey, stackToCargoItem, stacksEqual, starRating, starsForStat, statMagnitude, subtractFromStacks, taskCargoChanges, taskCargoEffect, tierAdjective, tierColors, tierOfReserve, toLocation, typeLabel, unwrapLoadDuration, unwrapTransitDuration, validateDisplayName, validateSchedule, workerLaneKey, wormholeAt, wormholeAtRegionEndpoint, yieldThresholdAt };
20772
+ export { ALL_ENTITY_TYPES, ATOMICASSETS_ACCOUNT, ActionsManager, BASE_HAUL_PENALTY_MILLI$1 as BASE_HAUL_PENALTY_MILLI, BASE_ORBITAL_MASS, BLEND_INPUTS_MUST_MATCH, BLEND_REQUIRES_MULTIPLE, BLEND_STAT_LESS_NOT_SUPPORTED, CANCEL_CONTAINS_GROUPED_TASK, CAPACITY_TIER_TABLE, CAP_DEMOLISH, CAP_MODULES, CAP_UNDEPLOY, CAP_WRAP, CATEGORY_LABELS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, COMPONENT_TIER_PREFIXES, CONTAINER_NOT_FOUND, CONTAINER_Z, COORD_MAX, COORD_MIN, COORD_OFFSET, CRAFT_ENERGY_DIVISOR, CRAFT_EXCEEDS_ENERGY_CAPACITY, CRAFT_NOT_ENOUGH_ENERGY, CancelBlockReason, ClusterManager, ConstructionManager, Coordinates, DEFAULT_BASE_HULLMASS, DEPLOY_ENTITY_HAS_SCHEDULE, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, DESTINATION_CAPACITY_EXCEEDED, ENGINE_DRAIN_BASE, ENGINE_DRAIN_REF_THM, ENGINE_DRAIN_REF_THRUST, ENTITY_ALREADY_THERE, ENTITY_CAPACITY_EXCEEDED, ENTITY_CARGO_NOT_LOADED, ENTITY_CARGO_NOT_OWNED, ENTITY_CONTAINER, ENTITY_EXTRACTOR, ENTITY_FACTORY, ENTITY_HUB, ENTITY_INVALID_CARGO, ENTITY_INVALID_DESTINATION, ENTITY_INVALID_TRAVEL_DURATION, ENTITY_NEXUS, ENTITY_NOT_ENOUGH_ENERGY, ENTITY_NOT_ENOUGH_ENERGY_CAPACITY, ENTITY_NO_CRAFTER, ENTITY_SHIP, ENTITY_WAREHOUSE, ENTITY_WORKSHOP, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, Entity, EntityClass, EntityInventory, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GATHERER_DEPTH_MAX_TIER, GATHERER_DEPTH_TABLE, GATHER_EXCEEDS_ENERGY_CAPACITY, GATHER_MASS_DIVISOR, GATHER_NOT_ENOUGH_ENERGY, GROUP_DUPLICATE_ENTITY, GROUP_EMPTY, GROUP_ENTITY_NOT_MOVABLE, GROUP_HAUL_CAPACITY_EXCEEDED, GROUP_NOT_FOUND, GROUP_NOT_SAME_LOCATION, GROUP_NOT_SAME_OWNER, GROUP_NO_THRUST, GameState, HAULER_EFFICIENCY_DENOM$1 as HAULER_EFFICIENCY_DENOM, HoldKind, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_BATTERY_T1, ITEM_BEAM, ITEM_BEAM_T2, ITEM_BIOMASS_T1, ITEM_BIOMASS_T10, ITEM_BIOMASS_T2, ITEM_BIOMASS_T3, ITEM_BIOMASS_T4, ITEM_BIOMASS_T5, ITEM_BIOMASS_T6, ITEM_BIOMASS_T7, ITEM_BIOMASS_T8, ITEM_BIOMASS_T9, ITEM_BUILDER_T1, ITEM_CERAMIC, ITEM_CERAMIC_T2, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_CRAFTER_T1, ITEM_CRYSTAL_T1, ITEM_CRYSTAL_T10, ITEM_CRYSTAL_T2, ITEM_CRYSTAL_T3, ITEM_CRYSTAL_T4, ITEM_CRYSTAL_T5, ITEM_CRYSTAL_T6, ITEM_CRYSTAL_T7, ITEM_CRYSTAL_T8, ITEM_CRYSTAL_T9, ITEM_DOES_NOT_EXIST, ITEM_DREDGER_T1_PACKED, ITEM_ENGINE_T1, ITEM_EXTRACTOR_T1_PACKED, ITEM_FACTORY_T1_PACKED, ITEM_FRAME, ITEM_FRAME_T2, ITEM_GAS_T1, ITEM_GAS_T10, ITEM_GAS_T2, ITEM_GAS_T3, ITEM_GAS_T4, ITEM_GAS_T5, ITEM_GAS_T6, ITEM_GAS_T7, ITEM_GAS_T8, ITEM_GAS_T9, ITEM_GATHERER_T1, ITEM_GATHERER_T2, ITEM_GENERATOR_T1, ITEM_HAULER_SHIP_T2_PACKED, ITEM_HAULER_T1, ITEM_HAULER_T2, ITEM_HUB_T1_PACKED, ITEM_LAUNCHER_T1, ITEM_LOADER_T1, ITEM_MASS_CATCHER_T1_PACKED, ITEM_MASS_DRIVER_T1_PACKED, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_NOT_DEPLOYABLE, ITEM_NOT_PACKED_ENTITY, ITEM_ORE_T1, ITEM_ORE_T10, ITEM_ORE_T2, ITEM_ORE_T3, ITEM_ORE_T4, ITEM_ORE_T5, ITEM_ORE_T6, ITEM_ORE_T7, ITEM_ORE_T8, ITEM_ORE_T9, ITEM_PLASMA_CELL, ITEM_PLASMA_CELL_T2, ITEM_PLATE, ITEM_PLATE_T2, ITEM_POLYMER, ITEM_POLYMER_T2, ITEM_PORTER_T1_PACKED, ITEM_PROSPECTOR_T1_PACKED, ITEM_PROSPECTOR_T2_PACKED, ITEM_REACTOR, ITEM_REACTOR_T2, ITEM_REGOLITH_T1, ITEM_REGOLITH_T10, ITEM_REGOLITH_T2, ITEM_REGOLITH_T3, ITEM_REGOLITH_T4, ITEM_REGOLITH_T5, ITEM_REGOLITH_T6, ITEM_REGOLITH_T7, ITEM_REGOLITH_T8, ITEM_REGOLITH_T9, ITEM_RESIN, ITEM_RESIN_T2, ITEM_RESONATOR, ITEM_RESONATOR_T2, ITEM_ROUSTABOUT_T1_PACKED, ITEM_SENSOR, ITEM_SENSOR_T2, ITEM_SHIP_T1_PACKED, ITEM_STORAGE_T1, ITEM_TENDER_T1_PACKED, ITEM_TUG_T1_PACKED, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, ITEM_WARP_T1, ITEM_WORKSHOP_T1_PACKED, ITEM_WRANGLER_T1_PACKED, ITEM_WRIGHT_T1_PACKED, InventoryAccessor, JOB_QUEUE_CAP, LANE_BARRIER, LANE_MOBILITY, LOCAL_HALF, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_LEGS, MAX_ORBITAL_ALTITUDE, MAX_STARS_PER_STAT, MAX_STAR_RATING, MIN_ORBITAL_ALTITUDE, MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL, MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE, MODULE_ANY, MODULE_BATTERY, MODULE_BUILDER, MODULE_CARGO_NOT_FOUND, MODULE_CRAFTER, MODULE_ENGINE, MODULE_ENTITY_BUSY, MODULE_GATHERER, MODULE_GENERATOR, MODULE_HAULER, MODULE_LAUNCHER, MODULE_LOADER, MODULE_NOT_MODULE, MODULE_SLOT_EMPTY, MODULE_SLOT_INVALID, MODULE_SLOT_OCCUPIED, MODULE_STAT_SCALING_ANCHOR, MODULE_STAT_SCALING_POST_ANCHOR_PERCENT, MODULE_STORAGE, MODULE_TIER_PREFIXES, MODULE_TYPE_MISMATCH, MODULE_WARP, index as NFT, NO_SCHEDULE, NftManager, PLANETARY_STRUCTURE_Z, PLANET_SUBTYPE_GAS_GIANT, PLANET_SUBTYPE_ICY, PLANET_SUBTYPE_INDUSTRIAL, PLANET_SUBTYPE_OCEAN, PLANET_SUBTYPE_ROCKY, PLANET_SUBTYPE_TERRESTRIAL, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PLAYER_NOT_JOINED, PRECISION, platform as PlatformContract, Types$1 as PlatformTypes, Player, PlayersManager, RECIPE_INPUTS_EXCESS, RECIPE_INPUTS_INSUFFICIENT, RECIPE_INPUTS_INVALID, RECIPE_INPUTS_MIXED, RECIPE_NOT_FOUND, REGION_DIV, REGION_PER_AXIS, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, RESERVE_TIERS, RESOLVE_COUNT_EXCEEDS_COMPLETED, RESOURCE_TIER_ADJECTIVES, RESOURCE_TIER_MULT_TENTHS, SECTORS_PER_AXIS, SECTOR_DIV, SHIPLOAD_COLLECTION, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_NOT_ARRIVED, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, SLOT_FORMULAS, STAR_STEP, ScheduleAccessor, server as ServerContract, Types as ServerTypes, Shipload, SubscriptionsManager, TIER_ROLL_MAX, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_NOT_FOUND, WARP_HAS_CARGO, WARP_HAS_SCHEDULE, WARP_NOT_FULL_ENERGY, WARP_NO_CAPABILITY, WARP_OUT_OF_RANGE, WH, WOULD_OVERFILL, WOULD_STRAND, WebSocketConnection, YIELD_FRACTION_DEEP, YIELD_FRACTION_SHALLOW, addressFromCoordinates, allBuildableItems, allPlotBuildableItems, allocateProportional, applyCapacityTier, applyResourceTierMultiplier, availableBuildMethods, availableCapacity, availableCapacityFromMass, availableForItem, baseName, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildComponentImmutable, buildEntityDescription, buildEntityImmutable, buildGatherPlan, buildImmutableData, buildMintAssetAction, buildModuleImmutable, buildResourceImmutable, calcCargoItemMass, calcCargoMass, calcEnergyUsage, calcStacksMass, calc_acceleration, calc_build_duration, calc_build_energy, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_flighttime, calc_gather_duration, calc_gather_energy, calc_gather_rate, calc_group_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_onesided_duration, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calc_transit_duration, calc_travel_flighttime, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, cancelEligibility, candidateLaneCompletesAt, capabilityAttributes, capabilityNames, capacityTierMultiplier, capsHasCrafter, capsHasGatherer, capsHasHauler, capsHasLauncher, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoItem, cargoItemToStack, cargoReadyAt, cargoRef, cargoUtils, categoryColors, categoryFromIndex, categoryLabel, categoryLabelFromIndex, compareByStars, componentIcon, composeIdleResolve, computeBaseCapacity, computeBaseCapacityContainer, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass$1 as computeBaseHullmass, computeBatteryCapabilities, computeBuilderCapabilities, computeBuilderDrain, computeBuilderSpeed, computeComponentStats, computeContainerCapabilities, computeCraftedOutputStats, computeCrafterCapabilities, computeCrafterDrain, computeCrafterSpeed, computeEffectiveModuleStat, computeEngineCapabilities, computeEngineDrain, computeEngineThrust, computeEntityCapabilities, computeEntityStats, computeFreeCells, computeGathererCapabilities, computeGathererDepth, computeGathererDrain, computeGathererYield, computeGeneratorCap, computeGeneratorCapabilities, computeGeneratorRech, computeGroupPerLegReach, computeHaulPenalty, computeHaulerCapabilities, computeHaulerCapacity, computeHaulerEfficiency, computeInputMass, computeLauncherCapabilities, computeLoaderCapabilities, computeLoaderMass, computeLoaderThrust, computeNftImageUrl, computePerLegReach, computeShipHullCapabilities, computeStorageCapabilities, computeTravelDrain, computeWarehouseHullCapabilities, computeWarpCapabilities, computeWarpRange, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeAddress, decodeAtomicAsset, decodeCraftedItemStats, decodeRegion, decodeSector, decodeStat, decodeStats, Shipload as default, deriveLocation, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStatMappings, deriveStrata, deriveStratum, derivedLoaders, describeItem, describeModule, describeModuleForItem, describeModuleForSlot, deserializeAsset, deserializeAtomicData, deserializeComponent, deserializeEntity, deserializeModule, deserializeResource, displayName, distanceBetweenCoordinates, distanceBetweenPoints, easeFlightProgress, eligibleUpgrades, encodeAddress, encodeAddressMemo, encodeGatheredCargoStats, encodeRegion, encodeSector, encodeStats, energyAtTime, energyPercent, entityDisplayName, estimateDealTravelTime, estimateTravelTime, estimateUnwrapDuration, feistel, feistelInv, fetchAtomicAssetsForOwner, fetchAtomicSchemas, filterByBuildMethod, findNearbyPlanets, flightSpeedFactor, formatLocation, formatMass, formatMassDelta, formatMassScaled, formatModuleLine, formatTier, gatherEnergyCost, gathererDepthForTier, getAllRecipes, getBaseHullmassFor, getCapabilityAttributeRows, getCapabilityAttributes, getCategoryInfo, getComponentDemand, getComponents, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEffectiveReserve, getEligibleResources, getEntityClass, getEntityItems, getEntityLayout, getEpochInfo, getFlightOrigin, getInterpolatedPosition, getItem, getItems, getKindMeta, getLocationCandidates, getLocationKind, getLocationProfile, getLocationType, getLocationTypeName, getModuleCapabilityType, getModules, getPackedEntityType, getPlanetSubtype, getPlanetSubtypes, getPositionAt, getProducersForAttribute, getRecipe, getRecipeConsumers, getResourceDemand, getResourceTier, getResourceWeight, getResources, getStatDefinitions, getStatMappings, getStatMappingsForCapability, getStatMappingsForStat, getStatName, getSystemName, getTemplateMeta, hasEnergy, hasEnergyForDistance, hasGatherer, hasLoaders, hasMass, hasSchedule, hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, incomingHoldMass, interpolateFlightPosition, isBuildable, isContainer, isCraftedItem, isExtractor, isFactory, isFull, isFullFromMass, isGatherableLocation, isHub, isInvertedAttribute, isLocationBuildable, isModuleItem, isNexus, isPlot, isPlotBuildable, isRelatedItem, isShip, isSubscriptionsDebugEnabled, isValidWormholePair, isWarehouse, isWorkshop, itemAbbreviations, itemCategory, itemIds, itemOffset, itemTier, itemTypeCode, jobsToLanes, kindCan, laneKeyForModule, lerp$1 as lerp, makeEntity, mapEntity, maxCraftable, maxQtyForCharge, maxTravelDistance, mergeStacks, moduleAccepts, moduleDisplayName, moduleIcon, moduleSlotTypeToCode, nearbyWormholes, needsRecharge, normalizeDisplayName, parseWireEntity, partnerRegion, pickFabricator, planParallelTransfer, planRoute, projectEntity, projectEntityAt, projectRemainingAt, projectedCargoAvailableAt, projectedPeakCargomass, rawScheduleEnd, readCommonBase, receiveFits, regionOf, removeFromStacks, renderDescription, resolveItem, resolveItemCategory, resolveLaneBuilder, resolveLaneCrafter, resolveLaneGatherer, resolveLaneLoader, resolveLockedAmount, resolveStats, rollTier, rollWithinTier, rollupBuilder, rollupCrafter, rollupGatherer, rollupLoaders, rotation, schedule, sdkSystemGraph, selectGatherLane, setSubscriptionsDebug, simulateRoute, slotAcceptsModule, socketTail, sourceLabelForOutput, splitCost, stackKey, stackToCargoItem, stacksEqual, starRating, starsForStat, statMagnitude, subtractFromStacks, taskCargoChanges, taskCargoEffect, tierAdjective, tierColors, tierOfReserve, toLocation, typeLabel, unwrapLoadDuration, unwrapTransitDuration, validateDisplayName, validateSchedule, workerLaneKey, wormholeAt, wormholeAtRegionEndpoint, yieldThresholdAt };
18967
20773
  //# sourceMappingURL=shipload.m.js.map