@shipload/sdk 2.0.0-rc2 → 2.0.0-rc3

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.
package/lib/shipload.m.js CHANGED
@@ -205,7 +205,7 @@ var platform = /*#__PURE__*/Object.freeze({
205
205
  Contract: Contract$1
206
206
  });
207
207
 
208
- const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDhQB2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgxidXljb250YWluZXIAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcIYnV5Z29vZHMABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdnb29kX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIHYnV5c2hpcAACB2FjY291bnQEbmFtZQRuYW1lBnN0cmluZwxidXl3YXJlaG91c2UAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcGY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdnb29kX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIJdW5pdF9jb3N0BnVpbnQ2NAdtaXh0dXJlDW1peHR1cmVfaW5mbz8JY2FyZ29fcm93AAUCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHZ29vZF9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CXVuaXRfY29zdAZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ng1jb250YWluZXJfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MGdWludDMyCGNhcGFjaXR5BnVpbnQzMgljYXJnb21hc3MGdWludDMyCHNjaGVkdWxlCXNjaGVkdWxlPwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8GZW5hYmxlAAEHZW5hYmxlZARib29sDGVuZXJneV9zdGF0cwACCGNhcGFjaXR5BnVpbnQxNghyZWNoYXJnZQZ1aW50MTYUZW50aXR5X2N1cnJlbnRfc3RhdGUAAgtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kGdWludDE2C2VudGl0eV9pbmZvABUEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQdsb2FkZXJzDWxvYWRlcl9zdGF0cz8GZW5lcmd5B3VpbnQxNj8IaHVsbG1hc3MHdWludDMyPwdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwhjYXBhY2l0eQd1aW50MzI/CWV4dHJhY3RvchBleHRyYWN0b3Jfc3RhdHM/B2lzX2lkbGUEYm9vbAxjdXJyZW50X3Rhc2sFdGFzaz8UY3VycmVudF90YXNrX2VsYXBzZWQGdWludDMyFmN1cnJlbnRfdGFza19yZW1haW5pbmcGdWludDMyDXBlbmRpbmdfdGFza3MGdGFza1tdB2lkbGVfYXQLdGltZV9wb2ludD8Ic2NoZWR1bGUJc2NoZWR1bGU/CmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQdleHRyYWN0AAEHc2hpcF9pZAZ1aW50NjQPZXh0cmFjdG9yX3N0YXRzAAMEcmF0ZQZ1aW50MTYFZHJhaW4GdWludDE2CmVmZmljaWVuY3kGdWludDE2C2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQIZ2V0Z29vZHMAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0CWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCWdldHBsYXllcgABB2FjY291bnQEbmFtZQpnZXRzdGFydGVyAAAMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwRnb29kAAMCaWQGdWludDE2CmJhc2VfcHJpY2UGdWludDMyBG1hc3MGdWludDMyCmdvb2RzX2luZm8AAQVnb29kcwZnb29kW10LZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nBGluaXQAAQRzZWVkC2NoZWNrc3VtMjU2BGpvaW4AAQdhY2NvdW50BG5hbWUMbG9hZGVyX3N0YXRzAAMEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNghxdWFudGl0eQV1aW50OBBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwtlcG9jaF9wcm9wcw5sb2NhdGlvbl9lcG9jaA5sb2NhdGlvbl9lcG9jaAADBmFjdGl2ZQRib29sBXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DWxvY2F0aW9uX2dvb2QABQJpZAZ1aW50MTYFcHJpY2UGdWludDMyBnN1cHBseQZ1aW50MTYRcmFyaXR5X211bHRpcGxpZXIGdWludDMyE2xvY2F0aW9uX211bHRpcGxpZXIGdWludDMyDWxvY2F0aW9uX2luZm8AAwZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wFZ29vZHMPbG9jYXRpb25fZ29vZFtdDGxvY2F0aW9uX3JvdwAGAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCWNhcmdvbWFzcwZ1aW50MzIFY2FyZ28MY2FyZ29faXRlbVtdCHNjaGVkdWxlCXNjaGVkdWxlPw9sb2NhdGlvbl9zdGF0aWMABQZjb29yZHMLY29vcmRpbmF0ZXMEdHlwZQ1sb2NhdGlvbl90eXBlB3N1YnR5cGUFdWludDgFc2VlZDAFdWludDgFc2VlZDEFdWludDgRbWl4dHVyZV9jb21wb25lbnQAAgdnb29kX2lkBnVpbnQxNgZwdXJpdHkGdWludDE2DG1peHR1cmVfaW5mbwABCmNvbXBvbmVudHMTbWl4dHVyZV9jb21wb25lbnRbXQ5tb3ZlbWVudF9zdGF0cwACBnRocnVzdAZ1aW50MzIFZHJhaW4GdWludDE2C25lYXJieV9pbmZvAAUKY2FuX3RyYXZlbARib29sB2N1cnJlbnQUZW50aXR5X2N1cnJlbnRfc3RhdGUJcHJvamVjdGVkFGVudGl0eV9jdXJyZW50X3N0YXRlCm1heF9lbmVyZ3kGdWludDE2B3N5c3RlbXMPbmVhcmJ5X3N5c3RlbVtdDW5lYXJieV9zeXN0ZW0ABAhkaXN0YW5jZQZ1aW50NjQLZW5lcmd5X2Nvc3QGdWludDY0C2ZsaWdodF90aW1lBnVpbnQzMghsb2NhdGlvbg1sb2NhdGlvbl9pbmZvBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQHcGF5bG9hbgACB2FjY291bnQEbmFtZQZhbW91bnQGdWludDY0C3BsYXllcl9pbmZvAA0Fb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0DmF2YWlsYWJsZV9sb2FuBnVpbnQ2NA9uZXh0X3NoaXBfcHJpY2UGdWludDY0FG5leHRfd2FyZWhvdXNlX3ByaWNlBnVpbnQ2NBRuZXh0X2NvbnRhaW5lcl9wcmljZQZ1aW50NjQKc2hpcF9jb3VudAZ1aW50NjQPd2FyZWhvdXNlX2NvdW50BnVpbnQ2NA9jb250YWluZXJfY291bnQGdWludDY0CnBsYXllcl9yb3cABAVvd25lcgRuYW1lB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0C3B1cmdlc3VwcGx5AAEIbWF4X3Jvd3MHdWludDY0PwhyZWNoYXJnZQACC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0B3Jlc29sdmUAAwtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAVjb3VudAd1aW50NjQ/D3Jlc29sdmVfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ5yZXNvbHZlZF9jb3VudAV1aW50OBRuZXdfc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwRzYWx0AAEEc2FsdAZ1aW50NjQIc2NoZWR1bGUAAgdzdGFydGVkCnRpbWVfcG9pbnQFdGFza3MGdGFza1tdCXNlbGxnb29kcwAEC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0B2dvb2RfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQIc2hpcF9yb3cADgJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwZ1aW50MzIIY2FwYWNpdHkGdWludDMyBmVuZXJneQZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzDm1vdmVtZW50X3N0YXRzCWdlbmVyYXRvcgxlbmVyZ3lfc3RhdHMHbG9hZGVycwxsb2FkZXJfc3RhdHMFdHJhZGUMdHJhZGVfc3RhdHM/CWV4dHJhY3RvchBleHRyYWN0b3Jfc3RhdHM/CHNjaGVkdWxlCXNjaGVkdWxlPwxzdGFydGVyX2luZm8AAwdiYWxhbmNlBnVpbnQ2NARkZWJ0BnVpbnQ2NARzaGlwC2VudGl0eV9pbmZvCXN0YXRlX3JvdwAGB2VuYWJsZWQEYm9vbAVlcG9jaAZ1aW50MzIEc2FsdAZ1aW50NjQFc2hpcHMGdWludDMyBHNlZWQLY2hlY2tzdW0yNTYGY29tbWl0C2NoZWNrc3VtMjU2CnN1cHBseV9yb3cABQJpZAZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMFZXBvY2gGdWludDY0B2dvb2RfaWQGdWludDE2BnN1cHBseQZ1aW50MTYIdGFrZWxvYW4AAgdhY2NvdW50BG5hbWUGYW1vdW50BnVpbnQ2NAR0YXNrAAkEdHlwZQV1aW50OAhkdXJhdGlvbgZ1aW50MzIKY2FuY2VsYWJsZQV1aW50OAtjb29yZGluYXRlcwxjb29yZGluYXRlcz8FY2FyZ28MY2FyZ29faXRlbVtdDGVudGl0eXRhcmdldAtlbnRpdHlfcmVmPwtlbnRpdHlncm91cAd1aW50NjQ/B2NyZWRpdHMGaW50NjQ/C2VuZXJneV9jb3N0B3VpbnQxNj8KdGFza19ldmVudAAOCmV2ZW50X3R5cGUFdWludDgFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKdGFza19pbmRleAV1aW50OAR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MTY/D25ld19jb29yZGluYXRlcwxjb29yZGluYXRlcz8PY2FyZ29tYXNzX2RlbHRhBWludDY0C2NhcmdvX2FkZGVkDGNhcmdvX2l0ZW1bXQ1jYXJnb19yZW1vdmVkDGNhcmdvX2l0ZW1bXQdjcmVkaXRzBmludDY0Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10LdHJhZGVfc3RhdHMAAQZtYXJnaW4GdWludDE2CHRyYW5zZmVyAAYLc291cmNlX3R5cGUEbmFtZQlzb3VyY2VfaWQGdWludDY0CWRlc3RfdHlwZQRuYW1lB2Rlc3RfaWQGdWludDY0B2dvb2RfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgZ0cmF2ZWwABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cAAwJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRFzdGFydGVyX2luZm9fdHlwZQxzdGFydGVyX2luZm8MdXBkYXRlY3JlZGl0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NAp1cGRhdGVkZWJ0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NA13YXJlaG91c2Vfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIY2FwYWNpdHkGdWludDMyCWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycwxsb2FkZXJfc3RhdHMIc2NoZWR1bGUJc2NoZWR1bGU/BHdpcGUAAAx3aXBlc2VxdWVuY2UAACYAAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4ucNV0Jk+KvD4MYnV5Y29udGFpbmVyygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5Y29udGFpbmVyCnN1bW1hcnk6ICdCdXkgYSBuZXcgY29udGFpbmVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJjaGFzZSBhIG5ldyBjb250YWluZXIgYXQgdGhlIGxvY2F0aW9uIG9mIGFuIGlkbGUgc2hpcC4gQ29udGFpbmVycyBwcm92aWRlIGNhcmdvIHN0b3JhZ2UgYnV0IGhhdmUgbm8gbG9hZGVycyBhbmQgY2Fubm90IG1vdmUgaW5kZXBlbmRlbnRseS4AAAA4Ucq8PghidXlnb29kc90BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJ1eWdvb2RzCnN1bW1hcnk6ICdCdXkgZ29vZHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGdvb2RzIGFuZCBhZGQgdGhlbSB0byBhIHNoaXAncyBjYXJnby4AAACguoa9PgdidXlzaGlwxgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5c2hpcApzdW1tYXJ5OiAnQnV5IGEgbmV3IHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHNoaXCgsKZNXcO9PgxidXl3YXJlaG91c2XMAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBidXl3YXJlaG91c2UKc3VtbWFyeTogJ0J1eSBhIG5ldyB3YXJlaG91c2UnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHdhcmVob3VzZSBhdCB0aGUgbG9jYXRpb24gb2YgYW4gaWRsZSBzaGlwLiBXYXJlaG91c2VzIHByb3ZpZGUgY2FyZ28gc3RvcmFnZSB3aXRoIGxvYWRpbmcvdW5sb2FkaW5nIGNhcGFiaWxpdGllcyBidXQgY2Fubm90IG1vdmUuAAAAAESFpkEGY2FuY2VsxwItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuCgotLS0AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl08QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgoKLS0tAAAAAKh4zFQGZW5hYmxl4gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdTZXQgZW5hYmxlZCBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBnYW1lIG9mIFNoaXBsb2FkLgoKLS0tAAAAICNzc1cHZXh0cmFjdKADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGV4dHJhY3QKc3VtbWFyeTogJ0V4dHJhY3QgcmVzb3VyY2VzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFeHRyYWN0IHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZXh0cmFjdGFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhbiBleHRyYWN0aW9uIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGV4dHJhY3RvciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgbWl4dHVyZSBjb21wb3NpdGlvbi4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4AAAA4UcqyYghnZXRnb29kc6oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGdvb2RzCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBnb29kcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRyYWRlYWJsZSBnb29kcyBpbiB0aGUgZ2FtZSBpbmNsdWRpbmcgdGhlaXIgaWQsIG5hbWUsIGJhc2UgcHJpY2UsIGFuZCBtYXNzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGdvb2Q6IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuAADw5xo1s2IJZ2V0bmVhcmJ53gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgZmxpZ2h0IHRpbWUsIGFuZCBtYXJrZXQgaW5mb3JtYXRpb24uAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AwFX5moyzYgpnZXRzdGFydGVyhQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3RhcnRlcgpzdW1tYXJ5OiAnR2V0IHN0YXJ0ZXIgc2hpcCBhbmQgYmFsYW5jZSBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgc3RhcnRlciBzaGlwIHN0YXRzIGFuZCBpbml0aWFsIGJhbGFuY2UgYSBuZXcgcGxheWVyIHdvdWxkIHJlY2VpdmUgdXBvbiBqb2luaW5nLiBVc2VkIGZvciBvbmJvYXJkaW5nIFVJIHRvIGRpc3BsYXkgd2hhdCBwbGF5ZXJzIHdpbGwgZ2V0IGJlZm9yZSB0aGV5IHJlZ2lzdGVyLoCVu0ZKjbNiDGdldHN1bW1hcmllc+gCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN1bW1hcmllcwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdW1tYXJpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGxpZ2h0d2VpZ2h0IHN1bW1hcmllcyBvZiBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIgaW5jbHVkaW5nIHR5cGUsIGlkLCBvd25lciwgbmFtZSwgbG9jYXRpb24sIGFuZCBpZGxlIHN0YXR1cy4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAKLa5uaq6WULZ3JvdXB0cmF2ZWyaBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBncm91cHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBtdWx0aXBsZSBlbnRpdGllcyB0b2dldGhlcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgZ3JvdXAgdHJhdmVsIGZvciBtdWx0aXBsZSBlbnRpdGllcyB0byBhIGRlc3RpbmF0aW9uLiBBbGwgZW50aXRpZXMgbXVzdCBiZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgb3duZWQgYnkgdGhlIGNhbGxlci4gQXQgbGVhc3Qgb25lIGVudGl0eSB3aXRoIGVuZ2luZXMgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aHJ1c3QuIEZsaWdodCBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gY29tYmluZWQgdGhydXN0IGFuZCB0b3RhbCBtYXNzIG9mIGFsbCBlbnRpdGllcy4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBmb3IgYXRvbWljIHJlc29sdXRpb24gYW5kIGNhbmNlbGxhdGlvbi4AAAAAANCwaQRoYXNo/QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaApzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTI1NiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGEyNTYgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgoKLS0tAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAAAAAJDddARpbml0+gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdApzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbskBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAoKLS0tAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAYBoavakHcGF5bG9hbq8BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBheWxvYW4Kc3VtbWFyeTogJ0xvYW4gUGF5bWVudCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQB8rFVjxa6uC3B1cmdlc3VwcGx56QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcHVyZ2VzdXBwbHkKc3VtbWFyeTogJ1VwZGF0ZSBHYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJnZSBvbGQgc3VwcGx5IHJlY29yZHMgYW5kIGhlbHAgY2xlYW51cCBnYW1lIHN0YXRlLgAAAIpd05C6CHJlY2hhcmdl0gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4KCi0tLQAAAEDtSLG6B3Jlc29sdmXVAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuCgotLS0AAAAAAJCjwQRzYWx03QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4KCi0tLQAAwIlSFqPCCXNlbGxnb29kc9UBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNlbGxnb29kcwpzdW1tYXJ5OiAnU2VsbCBnb29kcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2VsbCBnb29kcyBmcm9tIGEgc2hpcCdzIGNhcmdvLgoKLS0tAAAA09CooMkIdGFrZWxvYW7qAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0YWtlbG9hbgpzdW1tYXJ5OiAnQ3JlZGl0IExvYW4nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJvcnJvdyBjcmVkaXRzIGZyb20gdGhlIGJhbmsgdGhhdCB3aWxsIG5lZWQgdG8gYmUgcmVwYWlkLgAAAFctPM3NCHRyYW5zZmVyyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhbnNmZXIKc3VtbWFyeTogJ1RyYW5zZmVyIGNhcmdvIGJldHdlZW4gZW50aXRpZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZmVyIGNhcmdvIGJldHdlZW4gdHdvIGVudGl0aWVzIGF0IHRoZSBzYW1lIGxvY2F0aW9uLiBCb3RoIGVudGl0aWVzIG11c3QgYmUgb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgYXQgbGVhc3Qgb25lIG11c3QgaGF2ZSBsb2FkZXJzLiBDcmVhdGVzIGxvYWQgYW5kIHVubG9hZCB0YXNrcyBvbiBib3RoIGVudGl0aWVzIHdpdGggZHVyYXRpb24gYmFzZWQgb24gY29tYmluZWQgbG9hZGVyIGNhcGFjaXR5IGFuZCBaLWRpc3RhbmNlIGJldHdlZW4gdGhlbS4AAAAARLXNzQZ0cmF2ZWzLAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uCgotLS0KClRoaXMgYWN0aW9uIGRldGVybWluZXMgdGhlIG1hcmtldCBwcmljZSBvZiBhbGwgZ29vZHMgYXQgYSBnaXZlbiBsb2NhdGlvbi6QXVIXqWxS1Qx1cGRhdGVjcmVkaXTCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1cGRhdGVjcmVkaXQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVjcmVkaXQgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAEA+KqlsUtUKdXBkYXRlZGVidL4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVwZGF0ZWRlYnQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVkZWJ0IGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS2g0FTaKqyq4wx3aXBlc2VxdWVuY2XCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlc2VxdWVuY2UKc3VtbWFyeTogJ0RFQlVHOiB3aXBlc2VxdWVuY2UgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCwAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAuGo6kydFA2k2NAAADWNvbnRhaW5lcl9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAAACTumwQjQNpNjQAAAxsb2NhdGlvbl9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAACk2lrcIDaTY0AAAMc2VxdWVuY2Vfcm93AAAAAABQXcMDaTY0AAAIc2hpcF9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAA+FirxgNpNjQAAApzdXBwbHlfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABQWNOmruEDaTY0AAANd2FyZWhvdXNlX3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAAAUAAAAOFHKvD4MdGFza19yZXN1bHRzAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAAAgI3NzVwx0YXNrX3Jlc3VsdHMAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm8AAAA4UcqyYgpnb29kc19pbmZvACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAAPDnGjWzYgtuZWFyYnlfaW5mbwAAuMqbWLNiC3BsYXllcl9pbmZvAMBV+ZqMs2IMc3RhcnRlcl9pbmZvgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAAMCJUhajwgx0YXNrX3Jlc3VsdHMAAABXLTzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHM=');
208
+ const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDhUB2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgxidXljb250YWluZXIAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcIYnV5aXRlbXMABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIHYnV5c2hpcAACB2FjY291bnQEbmFtZQRuYW1lBnN0cmluZwxidXl3YXJlaG91c2UAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcGY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIJdW5pdF9jb3N0BnVpbnQ2NARzZWVkB3VpbnQ2ND8JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CXVuaXRfY29zdAZ1aW50NjQEc2VlZAZ1aW50NjQJY2xlYW5yc3ZwAAIFZXBvY2gGdWludDY0CG1heF9yb3dzBnVpbnQ2NApjbGVhcnRhYmxlAAMKdGFibGVfbmFtZQRuYW1lBXNjb3BlBW5hbWU/CG1heF9yb3dzB3VpbnQ2ND8GY29tbWl0AAEGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZw1jb250YWluZXJfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MGdWludDMyCGNhcGFjaXR5BnVpbnQzMgljYXJnb21hc3MGdWludDMyCHNjaGVkdWxlCXNjaGVkdWxlPwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8GZW5hYmxlAAEHZW5hYmxlZARib29sDGVuZXJneV9zdGF0cwACCGNhcGFjaXR5BnVpbnQxNghyZWNoYXJnZQZ1aW50MTYUZW50aXR5X2N1cnJlbnRfc3RhdGUAAgtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kGdWludDE2D2VudGl0eV9kZWZhdWx0cwAPDXNoaXBfaHVsbG1hc3MGdWludDMyDXNoaXBfY2FwYWNpdHkGdWludDMyC3NoaXBfZW5lcmd5BnVpbnQxNgZzaGlwX3oGdWludDE2DHNoaXBfZW5naW5lcw5tb3ZlbWVudF9zdGF0cw5zaGlwX2dlbmVyYXRvcgxlbmVyZ3lfc3RhdHMMc2hpcF9sb2FkZXJzDGxvYWRlcl9zdGF0cwpzaGlwX3RyYWRlC3RyYWRlX3N0YXRzDnNoaXBfZXh0cmFjdG9yD2V4dHJhY3Rvcl9zdGF0cxJ3YXJlaG91c2VfY2FwYWNpdHkGdWludDMyC3dhcmVob3VzZV96BnVpbnQxNhF3YXJlaG91c2VfbG9hZGVycwxsb2FkZXJfc3RhdHMSY29udGFpbmVyX2h1bGxtYXNzBnVpbnQzMhJjb250YWluZXJfY2FwYWNpdHkGdWludDMyC2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAVBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10HbG9hZGVycw1sb2FkZXJfc3RhdHM/BmVuZXJneQd1aW50MTY/CGh1bGxtYXNzB3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8IY2FwYWNpdHkHdWludDMyPwlleHRyYWN0b3IQZXh0cmFjdG9yX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPwplbnRpdHlfcmVmAAILZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkCnRpbWVfcG9pbnQPZW50aXR5Z3JvdXBfcm93AAICaWQGdWludDY0DHBhcnRpY2lwYW50cwxlbnRpdHlfcmVmW10HZXh0cmFjdAAEC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0B3N0cmF0dW0GdWludDE2CHF1YW50aXR5BnVpbnQzMg9leHRyYWN0b3Jfc3RhdHMABQRyYXRlBnVpbnQxNgVkcmFpbgZ1aW50MTYKZWZmaWNpZW5jeQZ1aW50MTYFZGVwdGgGdWludDE2BWRyaWxsBnVpbnQxNgtnYW1lX2NvbmZpZwADB3ZlcnNpb24GdWludDMyCGRlZmF1bHRzD2VudGl0eV9kZWZhdWx0cwVpdGVtcwppdGVtX2RlZltdCWdldGNvbmZpZwAAC2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQIZ2V0aXRlbXMAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0CWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCWdldHBsYXllcgABB2FjY291bnQEbmFtZQpnZXRzdGFydGVyAAAMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtncm91cHRyYXZlbAAECGVudGl0aWVzDGVudGl0eV9yZWZbXQF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbARoYXNoAAEFdmFsdWUGc3RyaW5nB2hhc2g1MTIAAQV2YWx1ZQZzdHJpbmcEaW5pdAABBHNlZWQLY2hlY2tzdW0yNTYIaXRlbV9kZWYAAwJpZAZ1aW50MTYKYmFzZV9wcmljZQZ1aW50MzIEbWFzcwZ1aW50MzIKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAgxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljC2Vwb2NoX3Byb3BzDmxvY2F0aW9uX2Vwb2NoDmxvY2F0aW9uX2Vwb2NoAAMGYWN0aXZlBGJvb2wFc2VlZDAFdWludDgFc2VlZDEFdWludDgNbG9jYXRpb25faW5mbwADBmNvb3Jkcwtjb29yZGluYXRlcwlpc19zeXN0ZW0EYm9vbAVpdGVtcw9sb2NhdGlvbl9pdGVtW10NbG9jYXRpb25faXRlbQAFAmlkBnVpbnQxNgVwcmljZQZ1aW50MzIGc3VwcGx5BnVpbnQxNhFyYXJpdHlfbXVsdGlwbGllcgZ1aW50MzITbG9jYXRpb25fbXVsdGlwbGllcgZ1aW50MzIMbG9jYXRpb25fcm93AAYCaWQGdWludDY0BW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10Ic2NoZWR1bGUJc2NoZWR1bGU/D2xvY2F0aW9uX3N0YXRpYwAFBmNvb3Jkcwtjb29yZGluYXRlcwR0eXBlDWxvY2F0aW9uX3R5cGUHc3VidHlwZQV1aW50OAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OA5tb3ZlbWVudF9zdGF0cwACBnRocnVzdAZ1aW50MzIFZHJhaW4GdWludDE2C25lYXJieV9pbmZvAAUKY2FuX3RyYXZlbARib29sB2N1cnJlbnQUZW50aXR5X2N1cnJlbnRfc3RhdGUJcHJvamVjdGVkFGVudGl0eV9jdXJyZW50X3N0YXRlCm1heF9lbmVyZ3kGdWludDE2B3N5c3RlbXMPbmVhcmJ5X3N5c3RlbVtdDW5lYXJieV9zeXN0ZW0ABAhkaXN0YW5jZQZ1aW50NjQLZW5lcmd5X2Nvc3QGdWludDY0C2ZsaWdodF90aW1lBnVpbnQzMghsb2NhdGlvbg1sb2NhdGlvbl9pbmZvBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQHcGF5bG9hbgACB2FjY291bnQEbmFtZQZhbW91bnQGdWludDY0C3BsYXllcl9pbmZvAA0Fb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0DmF2YWlsYWJsZV9sb2FuBnVpbnQ2NA9uZXh0X3NoaXBfcHJpY2UGdWludDY0FG5leHRfd2FyZWhvdXNlX3ByaWNlBnVpbnQ2NBRuZXh0X2NvbnRhaW5lcl9wcmljZQZ1aW50NjQKc2hpcF9jb3VudAZ1aW50NjQPd2FyZWhvdXNlX2NvdW50BnVpbnQ2NA9jb250YWluZXJfY291bnQGdWludDY0CnBsYXllcl9yb3cABAVvd25lcgRuYW1lB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0C3B1cmdlc3VwcGx5AAEIbWF4X3Jvd3MHdWludDY0PwhyZWNoYXJnZQACC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0C3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/BHNhbHQAAQRzYWx0BnVpbnQ2NAhzY2hlZHVsZQACB3N0YXJ0ZWQKdGltZV9wb2ludAV0YXNrcwZ0YXNrW10Jc2VsbGl0ZW1zAAQLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyDHNlcXVlbmNlX3JvdwACA2tleQRuYW1lBXZhbHVlBnVpbnQ2NAhzaGlwX3JvdwAOAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIGZW5lcmd5BnVpbnQxNgljYXJnb21hc3MGdWludDMyB2VuZ2luZXMObW92ZW1lbnRfc3RhdHMJZ2VuZXJhdG9yDGVuZXJneV9zdGF0cwdsb2FkZXJzDGxvYWRlcl9zdGF0cwV0cmFkZQx0cmFkZV9zdGF0cz8JZXh0cmFjdG9yEGV4dHJhY3Rvcl9zdGF0cz8Ic2NoZWR1bGUJc2NoZWR1bGU/DHN0YXJ0ZXJfaW5mbwADB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDY0BHNoaXALZW50aXR5X2luZm8Jc3RhdGVfcm93AAYHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzYWx0BnVpbnQ2NAVzaGlwcwZ1aW50MzIEc2VlZAtjaGVja3N1bTI1NgZjb21taXQLY2hlY2tzdW0yNTYKc3VwcGx5X3JvdwAFAmlkBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwVlcG9jaAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYGc3VwcGx5BnVpbnQxNgh0YWtlbG9hbgACB2FjY291bnQEbmFtZQZhbW91bnQGdWludDY0BHRhc2sACQR0eXBlBXVpbnQ4CGR1cmF0aW9uBnVpbnQzMgpjYW5jZWxhYmxlBXVpbnQ4C2Nvb3JkaW5hdGVzDGNvb3JkaW5hdGVzPwVjYXJnbwxjYXJnb19pdGVtW10MZW50aXR5dGFyZ2V0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8HY3JlZGl0cwZpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDE2Pwp0YXNrX2V2ZW50AAkKZXZlbnRfdHlwZQV1aW50OAVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAp0YXNrX2luZGV4BXVpbnQ4BHRhc2sEdGFzawlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludApuZXdfZW5lcmd5B3VpbnQxNj8MdGFza19yZXN1bHRzAAEIZW50aXRpZXMSZW50aXR5X3Rhc2tfaW5mb1tdC3RyYWRlX3N0YXRzAAEGbWFyZ2luBnVpbnQxNgh0cmFuc2ZlcgAGC3NvdXJjZV90eXBlBG5hbWUJc291cmNlX2lkBnVpbnQ2NAlkZXN0X3R5cGUEbmFtZQdkZXN0X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGdHJhdmVsAAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wJdHlwZXNfcm93AAQCaWQGdWludDY0E2VudGl0eV9zdW1tYXJ5X3R5cGUOZW50aXR5X3N1bW1hcnkRc3RhcnRlcl9pbmZvX3R5cGUMc3RhcnRlcl9pbmZvEGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcMdXBkYXRlY3JlZGl0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NAp1cGRhdGVkZWJ0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NA13YXJlaG91c2Vfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIY2FwYWNpdHkGdWludDMyCWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycwxsb2FkZXJfc3RhdHMIc2NoZWR1bGUJc2NoZWR1bGU/BHdpcGUAAAx3aXBlc2VxdWVuY2UAACkAAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4ucNV0Jk+KvD4MYnV5Y29udGFpbmVyygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5Y29udGFpbmVyCnN1bW1hcnk6ICdCdXkgYSBuZXcgY29udGFpbmVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJjaGFzZSBhIG5ldyBjb250YWluZXIgYXQgdGhlIGxvY2F0aW9uIG9mIGFuIGlkbGUgc2hpcC4gQ29udGFpbmVycyBwcm92aWRlIGNhcmdvIHN0b3JhZ2UgYnV0IGhhdmUgbm8gbG9hZGVycyBhbmQgY2Fubm90IG1vdmUgaW5kZXBlbmRlbnRseS4AAABYquy8PghidXlpdGVtc90BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJ1eWl0ZW1zCnN1bW1hcnk6ICdCdXkgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGl0ZW1zIGFuZCBhZGQgdGhlbSB0byBhIHNoaXAncyBjYXJnby4AAACguoa9PgdidXlzaGlwxgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5c2hpcApzdW1tYXJ5OiAnQnV5IGEgbmV3IHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHNoaXCgsKZNXcO9PgxidXl3YXJlaG91c2XMAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBidXl3YXJlaG91c2UKc3VtbWFyeTogJ0J1eSBhIG5ldyB3YXJlaG91c2UnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHdhcmVob3VzZSBhdCB0aGUgbG9jYXRpb24gb2YgYW4gaWRsZSBzaGlwLiBXYXJlaG91c2VzIHByb3ZpZGUgY2FyZ28gc3RvcmFnZSB3aXRoIGxvYWRpbmcvdW5sb2FkaW5nIGNhcGFiaWxpdGllcyBidXQgY2Fubm90IG1vdmUuAAAAAESFpkEGY2FuY2VsxwItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuCgotLS0AAKgb32lURAljbGVhbnJzdnAAAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdPEBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4KCi0tLQAAYDQytyZFCWNvbmZpZ2xvZwAAAAAAqHjMVAZlbmFibGXiAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQuCgotLS0AAAAgI3NzVwdleHRyYWN0oQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZXh0cmFjdApzdW1tYXJ5OiAnRXh0cmFjdCByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkV4dHJhY3QgcmVzb3VyY2VzIGF0IHRoZSBzaGlwJ3MgY3VycmVudCBsb2NhdGlvbi4gT25seSB3b3JrcyBhdCBleHRyYWN0YWJsZSBsb2NhdGlvbiB0eXBlcy4gU2NoZWR1bGVzIGFuIGV4dHJhY3Rpb24gdGFzayB0aGF0IGNvbnN1bWVzIGVuZXJneSBhbmQgeWllbGRzIGNhcmdvIGJhc2VkIG9uIHRoZSBzaGlwJ3MgZXh0cmFjdG9yIHN0YXRzIGFuZCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBjb21wb3NpdGlvbi4AAGBuTYqyYglnZXRjb25maWcAALBy2eWpsmILZ2V0ZW50aXRpZXOkAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdGllcwpzdW1tYXJ5OiAnR2V0IGFsbCBlbnRpdGllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgZnVsbCBlbnRpdHkgaW5mbyBmb3IgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4AAPDZ5amyYglnZXRlbnRpdHmiAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdHkKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gZW50aXR5IGluY2x1ZGluZyBpZGVudGl0eSwgY2FyZ28sIHNjaGVkdWxlIHN0YXRlLCBhbmQgdHlwZS1zcGVjaWZpYyBmaWVsZHMuAAAAWKrssmIIZ2V0aXRlbXOaAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtcwpzdW1tYXJ5OiAnR2V0IGFsbCBhdmFpbGFibGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgYSBsaXN0IG9mIGFsbCBpdGVtcyBpbiB0aGUgZ2FtZSBpbmNsdWRpbmcgdGhlaXIgaWQsIGJhc2UgcHJpY2UsIGFuZCBtYXNzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGl0ZW06IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuAADw5xo1s2IJZ2V0bmVhcmJ53gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgZmxpZ2h0IHRpbWUsIGFuZCBtYXJrZXQgaW5mb3JtYXRpb24uAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AwFX5moyzYgpnZXRzdGFydGVyhQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3RhcnRlcgpzdW1tYXJ5OiAnR2V0IHN0YXJ0ZXIgc2hpcCBhbmQgYmFsYW5jZSBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgc3RhcnRlciBzaGlwIHN0YXRzIGFuZCBpbml0aWFsIGJhbGFuY2UgYSBuZXcgcGxheWVyIHdvdWxkIHJlY2VpdmUgdXBvbiBqb2luaW5nLiBVc2VkIGZvciBvbmJvYXJkaW5nIFVJIHRvIGRpc3BsYXkgd2hhdCBwbGF5ZXJzIHdpbGwgZ2V0IGJlZm9yZSB0aGV5IHJlZ2lzdGVyLoCVu0ZKjbNiDGdldHN1bW1hcmllc+gCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN1bW1hcmllcwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdW1tYXJpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGxpZ2h0d2VpZ2h0IHN1bW1hcmllcyBvZiBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIgaW5jbHVkaW5nIHR5cGUsIGlkLCBvd25lciwgbmFtZSwgbG9jYXRpb24sIGFuZCBpZGxlIHN0YXR1cy4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAKLa5uaq6WULZ3JvdXB0cmF2ZWyaBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBncm91cHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBtdWx0aXBsZSBlbnRpdGllcyB0b2dldGhlcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgZ3JvdXAgdHJhdmVsIGZvciBtdWx0aXBsZSBlbnRpdGllcyB0byBhIGRlc3RpbmF0aW9uLiBBbGwgZW50aXRpZXMgbXVzdCBiZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgb3duZWQgYnkgdGhlIGNhbGxlci4gQXQgbGVhc3Qgb25lIGVudGl0eSB3aXRoIGVuZ2luZXMgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aHJ1c3QuIEZsaWdodCBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gY29tYmluZWQgdGhydXN0IGFuZCB0b3RhbCBtYXNzIG9mIGFsbCBlbnRpdGllcy4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBmb3IgYXRvbWljIHJlc29sdXRpb24gYW5kIGNhbmNlbGxhdGlvbi4AAAAAANCwaQRoYXNo/QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaApzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTI1NiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGEyNTYgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgoKLS0tAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAAAAAJDddARpbml0+gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdApzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbskBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAoKLS0tAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAYBoavakHcGF5bG9hbq8BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBheWxvYW4Kc3VtbWFyeTogJ0xvYW4gUGF5bWVudCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQB8rFVjxa6uC3B1cmdlc3VwcGx56QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcHVyZ2VzdXBwbHkKc3VtbWFyeTogJ1VwZGF0ZSBHYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJnZSBvbGQgc3VwcGx5IHJlY29yZHMgYW5kIGhlbHAgY2xlYW51cCBnYW1lIHN0YXRlLgAAAIpd05C6CHJlY2hhcmdl0gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4KCi0tLQAAAEDtSLG6B3Jlc29sdmXVAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuCgotLS0AAAAAAJCjwQRzYWx03QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4KCi0tLQAAwFJlF6PCCXNlbGxpdGVtc9UBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNlbGxpdGVtcwpzdW1tYXJ5OiAnU2VsbCBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2VsbCBpdGVtcyBmcm9tIGEgc2hpcCdzIGNhcmdvLgoKLS0tAAAA09CooMkIdGFrZWxvYW7qAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0YWtlbG9hbgpzdW1tYXJ5OiAnQ3JlZGl0IExvYW4nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJvcnJvdyBjcmVkaXRzIGZyb20gdGhlIGJhbmsgdGhhdCB3aWxsIG5lZWQgdG8gYmUgcmVwYWlkLgAAAFctPM3NCHRyYW5zZmVyyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhbnNmZXIKc3VtbWFyeTogJ1RyYW5zZmVyIGNhcmdvIGJldHdlZW4gZW50aXRpZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZmVyIGNhcmdvIGJldHdlZW4gdHdvIGVudGl0aWVzIGF0IHRoZSBzYW1lIGxvY2F0aW9uLiBCb3RoIGVudGl0aWVzIG11c3QgYmUgb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgYXQgbGVhc3Qgb25lIG11c3QgaGF2ZSBsb2FkZXJzLiBDcmVhdGVzIGxvYWQgYW5kIHVubG9hZCB0YXNrcyBvbiBib3RoIGVudGl0aWVzIHdpdGggZHVyYXRpb24gYmFzZWQgb24gY29tYmluZWQgbG9hZGVyIGNhcGFjaXR5IGFuZCBaLWRpc3RhbmNlIGJldHdlZW4gdGhlbS4AAAAARLXNzQZ0cmF2ZWzLAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uCgotLS0KClRoaXMgYWN0aW9uIGRldGVybWluZXMgdGhlIG1hcmtldCBwcmljZSBvZiBhbGwgaXRlbXMgYXQgYSBnaXZlbiBsb2NhdGlvbi6QXVIXqWxS1Qx1cGRhdGVjcmVkaXTCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1cGRhdGVjcmVkaXQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVjcmVkaXQgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAEA+KqlsUtUKdXBkYXRlZGVidL4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVwZGF0ZWRlYnQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVkZWJ0IGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS2g0FTaKqyq4wx3aXBlc2VxdWVuY2XCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlc2VxdWVuY2UKc3VtbWFyeTogJ0RFQlVHOiB3aXBlc2VxdWVuY2UgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tDAAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAuGo6kydFA2k2NAAADWNvbnRhaW5lcl9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAAACTumwQjQNpNjQAAAxsb2NhdGlvbl9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAKTaWtwgNpNjQAAAxzZXF1ZW5jZV9yb3cAAAAAAFBdwwNpNjQAAAhzaGlwX3JvdwAAAAAAlU3GA2k2NAAACXN0YXRlX3JvdwAAAAD4WKvGA2k2NAAACnN1cHBseV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAFBY06au4QNpNjQAAA13YXJlaG91c2Vfcm93ARFTaGlwbG9hZCAoU2VydmVyKRFTaGlwbG9hZCAoU2VydmVyKQAAABUAAABYquy8Pgx0YXNrX3Jlc3VsdHMAAAAARIWmQQ5jYW5jZWxfcmVzdWx0cwAAACAjc3NXDHRhc2tfcmVzdWx0cwAAYG5NirJiC2dhbWVfY29uZmlnALBy2eWpsmINZW50aXR5X2luZm9bXQAA8NnlqbJiC2VudGl0eV9pbmZvAAAAWKrssmIKaXRlbXNfaW5mbwAmddkgGrNiDWxvY2F0aW9uX2luZm8AgMkmIRqzYhBsb2NhdGlvbl9kZXJpdmVkAADw5xo1s2ILbmVhcmJ5X2luZm8AALjKm1izYgtwbGF5ZXJfaW5mbwDAVfmajLNiDHN0YXJ0ZXJfaW5mb4CVu0ZKjbNiEGVudGl0eV9zdW1tYXJ5W10Aotrm5qrpZQx0YXNrX3Jlc3VsdHMAAAAAANCwaQtjaGVja3N1bTI1NgAAAECE0rBpC2NoZWNrc3VtNTEyAAAAil3TkLoMdGFza19yZXN1bHRzAAAAQO1IsboPcmVzb2x2ZV9yZXN1bHRzAADAUmUXo8IMdGFza19yZXN1bHRzAAAAVy08zc0MdGFza19yZXN1bHRzAAAAAES1zc0MdGFza19yZXN1bHRz');
209
209
  const abi = ABI.from(abiBlob);
210
210
  var Types;
211
211
  (function (Types) {
@@ -236,24 +236,24 @@ var Types;
236
236
  Struct.type('buycontainer')
237
237
  ], buycontainer);
238
238
  Types.buycontainer = buycontainer;
239
- let buygoods = class buygoods extends Struct {
239
+ let buyitems = class buyitems extends Struct {
240
240
  };
241
241
  __decorate([
242
242
  Struct.field(Name)
243
- ], buygoods.prototype, "entity_type", void 0);
243
+ ], buyitems.prototype, "entity_type", void 0);
244
244
  __decorate([
245
245
  Struct.field(UInt64)
246
- ], buygoods.prototype, "id", void 0);
246
+ ], buyitems.prototype, "id", void 0);
247
247
  __decorate([
248
248
  Struct.field(UInt16)
249
- ], buygoods.prototype, "good_id", void 0);
249
+ ], buyitems.prototype, "item_id", void 0);
250
250
  __decorate([
251
251
  Struct.field(UInt32)
252
- ], buygoods.prototype, "quantity", void 0);
253
- buygoods = __decorate([
254
- Struct.type('buygoods')
255
- ], buygoods);
256
- Types.buygoods = buygoods;
252
+ ], buyitems.prototype, "quantity", void 0);
253
+ buyitems = __decorate([
254
+ Struct.type('buyitems')
255
+ ], buyitems);
256
+ Types.buyitems = buyitems;
257
257
  let buyship = class buyship extends Struct {
258
258
  };
259
259
  __decorate([
@@ -332,32 +332,11 @@ var Types;
332
332
  Struct.type('cancel_results')
333
333
  ], cancel_results);
334
334
  Types.cancel_results = cancel_results;
335
- let mixture_component = class mixture_component extends Struct {
336
- };
337
- __decorate([
338
- Struct.field(UInt16)
339
- ], mixture_component.prototype, "good_id", void 0);
340
- __decorate([
341
- Struct.field(UInt16)
342
- ], mixture_component.prototype, "purity", void 0);
343
- mixture_component = __decorate([
344
- Struct.type('mixture_component')
345
- ], mixture_component);
346
- Types.mixture_component = mixture_component;
347
- let mixture_info = class mixture_info extends Struct {
348
- };
349
- __decorate([
350
- Struct.field(mixture_component, { array: true })
351
- ], mixture_info.prototype, "components", void 0);
352
- mixture_info = __decorate([
353
- Struct.type('mixture_info')
354
- ], mixture_info);
355
- Types.mixture_info = mixture_info;
356
335
  let cargo_item = class cargo_item extends Struct {
357
336
  };
358
337
  __decorate([
359
338
  Struct.field(UInt16)
360
- ], cargo_item.prototype, "good_id", void 0);
339
+ ], cargo_item.prototype, "item_id", void 0);
361
340
  __decorate([
362
341
  Struct.field(UInt32)
363
342
  ], cargo_item.prototype, "quantity", void 0);
@@ -365,8 +344,8 @@ var Types;
365
344
  Struct.field(UInt64)
366
345
  ], cargo_item.prototype, "unit_cost", void 0);
367
346
  __decorate([
368
- Struct.field(mixture_info, { optional: true })
369
- ], cargo_item.prototype, "mixture", void 0);
347
+ Struct.field(UInt64, { optional: true })
348
+ ], cargo_item.prototype, "seed", void 0);
370
349
  cargo_item = __decorate([
371
350
  Struct.type('cargo_item')
372
351
  ], cargo_item);
@@ -381,17 +360,32 @@ var Types;
381
360
  ], cargo_row.prototype, "entity_id", void 0);
382
361
  __decorate([
383
362
  Struct.field(UInt64)
384
- ], cargo_row.prototype, "good_id", void 0);
363
+ ], cargo_row.prototype, "item_id", void 0);
385
364
  __decorate([
386
365
  Struct.field(UInt64)
387
366
  ], cargo_row.prototype, "quantity", void 0);
388
367
  __decorate([
389
368
  Struct.field(UInt64)
390
369
  ], cargo_row.prototype, "unit_cost", void 0);
370
+ __decorate([
371
+ Struct.field(UInt64)
372
+ ], cargo_row.prototype, "seed", void 0);
391
373
  cargo_row = __decorate([
392
374
  Struct.type('cargo_row')
393
375
  ], cargo_row);
394
376
  Types.cargo_row = cargo_row;
377
+ let cleanrsvp = class cleanrsvp extends Struct {
378
+ };
379
+ __decorate([
380
+ Struct.field(UInt64)
381
+ ], cleanrsvp.prototype, "epoch", void 0);
382
+ __decorate([
383
+ Struct.field(UInt64)
384
+ ], cleanrsvp.prototype, "max_rows", void 0);
385
+ cleanrsvp = __decorate([
386
+ Struct.type('cleanrsvp')
387
+ ], cleanrsvp);
388
+ Types.cleanrsvp = cleanrsvp;
395
389
  let cleartable = class cleartable extends Struct {
396
390
  };
397
391
  __decorate([
@@ -416,6 +410,174 @@ var Types;
416
410
  Struct.type('commit')
417
411
  ], commit);
418
412
  Types.commit = commit;
413
+ let movement_stats = class movement_stats extends Struct {
414
+ };
415
+ __decorate([
416
+ Struct.field(UInt32)
417
+ ], movement_stats.prototype, "thrust", void 0);
418
+ __decorate([
419
+ Struct.field(UInt16)
420
+ ], movement_stats.prototype, "drain", void 0);
421
+ movement_stats = __decorate([
422
+ Struct.type('movement_stats')
423
+ ], movement_stats);
424
+ Types.movement_stats = movement_stats;
425
+ let energy_stats = class energy_stats extends Struct {
426
+ };
427
+ __decorate([
428
+ Struct.field(UInt16)
429
+ ], energy_stats.prototype, "capacity", void 0);
430
+ __decorate([
431
+ Struct.field(UInt16)
432
+ ], energy_stats.prototype, "recharge", void 0);
433
+ energy_stats = __decorate([
434
+ Struct.type('energy_stats')
435
+ ], energy_stats);
436
+ Types.energy_stats = energy_stats;
437
+ let loader_stats = class loader_stats extends Struct {
438
+ };
439
+ __decorate([
440
+ Struct.field(UInt32)
441
+ ], loader_stats.prototype, "mass", void 0);
442
+ __decorate([
443
+ Struct.field(UInt16)
444
+ ], loader_stats.prototype, "thrust", void 0);
445
+ __decorate([
446
+ Struct.field(UInt8)
447
+ ], loader_stats.prototype, "quantity", void 0);
448
+ loader_stats = __decorate([
449
+ Struct.type('loader_stats')
450
+ ], loader_stats);
451
+ Types.loader_stats = loader_stats;
452
+ let trade_stats = class trade_stats extends Struct {
453
+ };
454
+ __decorate([
455
+ Struct.field(UInt16)
456
+ ], trade_stats.prototype, "margin", void 0);
457
+ trade_stats = __decorate([
458
+ Struct.type('trade_stats')
459
+ ], trade_stats);
460
+ Types.trade_stats = trade_stats;
461
+ let extractor_stats = class extractor_stats extends Struct {
462
+ };
463
+ __decorate([
464
+ Struct.field(UInt16)
465
+ ], extractor_stats.prototype, "rate", void 0);
466
+ __decorate([
467
+ Struct.field(UInt16)
468
+ ], extractor_stats.prototype, "drain", void 0);
469
+ __decorate([
470
+ Struct.field(UInt16)
471
+ ], extractor_stats.prototype, "efficiency", void 0);
472
+ __decorate([
473
+ Struct.field(UInt16)
474
+ ], extractor_stats.prototype, "depth", void 0);
475
+ __decorate([
476
+ Struct.field(UInt16)
477
+ ], extractor_stats.prototype, "drill", void 0);
478
+ extractor_stats = __decorate([
479
+ Struct.type('extractor_stats')
480
+ ], extractor_stats);
481
+ Types.extractor_stats = extractor_stats;
482
+ let warp_stats = class warp_stats extends Struct {
483
+ };
484
+ __decorate([
485
+ Struct.field(UInt32)
486
+ ], warp_stats.prototype, "range", void 0);
487
+ warp_stats = __decorate([
488
+ Struct.type('warp_stats')
489
+ ], warp_stats);
490
+ Types.warp_stats = warp_stats;
491
+ let entity_defaults = class entity_defaults extends Struct {
492
+ };
493
+ __decorate([
494
+ Struct.field(UInt32)
495
+ ], entity_defaults.prototype, "ship_hullmass", void 0);
496
+ __decorate([
497
+ Struct.field(UInt32)
498
+ ], entity_defaults.prototype, "ship_capacity", void 0);
499
+ __decorate([
500
+ Struct.field(UInt16)
501
+ ], entity_defaults.prototype, "ship_energy", void 0);
502
+ __decorate([
503
+ Struct.field(UInt16)
504
+ ], entity_defaults.prototype, "ship_z", void 0);
505
+ __decorate([
506
+ Struct.field(movement_stats)
507
+ ], entity_defaults.prototype, "ship_engines", void 0);
508
+ __decorate([
509
+ Struct.field(energy_stats)
510
+ ], entity_defaults.prototype, "ship_generator", void 0);
511
+ __decorate([
512
+ Struct.field(loader_stats)
513
+ ], entity_defaults.prototype, "ship_loaders", void 0);
514
+ __decorate([
515
+ Struct.field(trade_stats)
516
+ ], entity_defaults.prototype, "ship_trade", void 0);
517
+ __decorate([
518
+ Struct.field(extractor_stats)
519
+ ], entity_defaults.prototype, "ship_extractor", void 0);
520
+ __decorate([
521
+ Struct.field(UInt32)
522
+ ], entity_defaults.prototype, "warehouse_capacity", void 0);
523
+ __decorate([
524
+ Struct.field(UInt16)
525
+ ], entity_defaults.prototype, "warehouse_z", void 0);
526
+ __decorate([
527
+ Struct.field(loader_stats)
528
+ ], entity_defaults.prototype, "warehouse_loaders", void 0);
529
+ __decorate([
530
+ Struct.field(UInt32)
531
+ ], entity_defaults.prototype, "container_hullmass", void 0);
532
+ __decorate([
533
+ Struct.field(UInt32)
534
+ ], entity_defaults.prototype, "container_capacity", void 0);
535
+ __decorate([
536
+ Struct.field(UInt16)
537
+ ], entity_defaults.prototype, "container_z", void 0);
538
+ entity_defaults = __decorate([
539
+ Struct.type('entity_defaults')
540
+ ], entity_defaults);
541
+ Types.entity_defaults = entity_defaults;
542
+ let item_def = class item_def extends Struct {
543
+ };
544
+ __decorate([
545
+ Struct.field(UInt16)
546
+ ], item_def.prototype, "id", void 0);
547
+ __decorate([
548
+ Struct.field(UInt32)
549
+ ], item_def.prototype, "base_price", void 0);
550
+ __decorate([
551
+ Struct.field(UInt32)
552
+ ], item_def.prototype, "mass", void 0);
553
+ item_def = __decorate([
554
+ Struct.type('item_def')
555
+ ], item_def);
556
+ Types.item_def = item_def;
557
+ let game_config = class game_config extends Struct {
558
+ };
559
+ __decorate([
560
+ Struct.field(UInt32)
561
+ ], game_config.prototype, "version", void 0);
562
+ __decorate([
563
+ Struct.field(entity_defaults)
564
+ ], game_config.prototype, "defaults", void 0);
565
+ __decorate([
566
+ Struct.field(item_def, { array: true })
567
+ ], game_config.prototype, "items", void 0);
568
+ game_config = __decorate([
569
+ Struct.type('game_config')
570
+ ], game_config);
571
+ Types.game_config = game_config;
572
+ let configlog = class configlog extends Struct {
573
+ };
574
+ __decorate([
575
+ Struct.field(game_config)
576
+ ], configlog.prototype, "config", void 0);
577
+ configlog = __decorate([
578
+ Struct.type('configlog')
579
+ ], configlog);
580
+ Types.configlog = configlog;
419
581
  let coordinates = class coordinates extends Struct {
420
582
  };
421
583
  __decorate([
@@ -515,18 +677,6 @@ var Types;
515
677
  Struct.type('enable')
516
678
  ], enable);
517
679
  Types.enable = enable;
518
- let energy_stats = class energy_stats extends Struct {
519
- };
520
- __decorate([
521
- Struct.field(UInt16)
522
- ], energy_stats.prototype, "capacity", void 0);
523
- __decorate([
524
- Struct.field(UInt16)
525
- ], energy_stats.prototype, "recharge", void 0);
526
- energy_stats = __decorate([
527
- Struct.type('energy_stats')
528
- ], energy_stats);
529
- Types.energy_stats = energy_stats;
530
680
  let entity_current_state = class entity_current_state extends Struct {
531
681
  };
532
682
  __decorate([
@@ -539,48 +689,6 @@ var Types;
539
689
  Struct.type('entity_current_state')
540
690
  ], entity_current_state);
541
691
  Types.entity_current_state = entity_current_state;
542
- let loader_stats = class loader_stats extends Struct {
543
- };
544
- __decorate([
545
- Struct.field(UInt32)
546
- ], loader_stats.prototype, "mass", void 0);
547
- __decorate([
548
- Struct.field(UInt16)
549
- ], loader_stats.prototype, "thrust", void 0);
550
- __decorate([
551
- Struct.field(UInt8)
552
- ], loader_stats.prototype, "quantity", void 0);
553
- loader_stats = __decorate([
554
- Struct.type('loader_stats')
555
- ], loader_stats);
556
- Types.loader_stats = loader_stats;
557
- let movement_stats = class movement_stats extends Struct {
558
- };
559
- __decorate([
560
- Struct.field(UInt32)
561
- ], movement_stats.prototype, "thrust", void 0);
562
- __decorate([
563
- Struct.field(UInt16)
564
- ], movement_stats.prototype, "drain", void 0);
565
- movement_stats = __decorate([
566
- Struct.type('movement_stats')
567
- ], movement_stats);
568
- Types.movement_stats = movement_stats;
569
- let extractor_stats = class extractor_stats extends Struct {
570
- };
571
- __decorate([
572
- Struct.field(UInt16)
573
- ], extractor_stats.prototype, "rate", void 0);
574
- __decorate([
575
- Struct.field(UInt16)
576
- ], extractor_stats.prototype, "drain", void 0);
577
- __decorate([
578
- Struct.field(UInt16)
579
- ], extractor_stats.prototype, "efficiency", void 0);
580
- extractor_stats = __decorate([
581
- Struct.type('extractor_stats')
582
- ], extractor_stats);
583
- Types.extractor_stats = extractor_stats;
584
692
  let entity_info = class entity_info extends Struct {
585
693
  };
586
694
  __decorate([
@@ -625,6 +733,9 @@ var Types;
625
733
  __decorate([
626
734
  Struct.field(extractor_stats, { optional: true })
627
735
  ], entity_info.prototype, "extractor", void 0);
736
+ __decorate([
737
+ Struct.field(warp_stats, { optional: true })
738
+ ], entity_info.prototype, "warp", void 0);
628
739
  __decorate([
629
740
  Struct.field('bool')
630
741
  ], entity_info.prototype, "is_idle", void 0);
@@ -712,13 +823,28 @@ var Types;
712
823
  Types.entitygroup_row = entitygroup_row;
713
824
  let extract = class extract extends Struct {
714
825
  };
826
+ __decorate([
827
+ Struct.field(Name)
828
+ ], extract.prototype, "entity_type", void 0);
715
829
  __decorate([
716
830
  Struct.field(UInt64)
717
- ], extract.prototype, "ship_id", void 0);
831
+ ], extract.prototype, "id", void 0);
832
+ __decorate([
833
+ Struct.field(UInt16)
834
+ ], extract.prototype, "stratum", void 0);
835
+ __decorate([
836
+ Struct.field(UInt32)
837
+ ], extract.prototype, "quantity", void 0);
718
838
  extract = __decorate([
719
839
  Struct.type('extract')
720
840
  ], extract);
721
841
  Types.extract = extract;
842
+ let getconfig = class getconfig extends Struct {
843
+ };
844
+ getconfig = __decorate([
845
+ Struct.type('getconfig')
846
+ ], getconfig);
847
+ Types.getconfig = getconfig;
722
848
  let getentities = class getentities extends Struct {
723
849
  };
724
850
  __decorate([
@@ -743,12 +869,12 @@ var Types;
743
869
  Struct.type('getentity')
744
870
  ], getentity);
745
871
  Types.getentity = getentity;
746
- let getgoods = class getgoods extends Struct {
872
+ let getitems = class getitems extends Struct {
747
873
  };
748
- getgoods = __decorate([
749
- Struct.type('getgoods')
750
- ], getgoods);
751
- Types.getgoods = getgoods;
874
+ getitems = __decorate([
875
+ Struct.type('getitems')
876
+ ], getitems);
877
+ Types.getitems = getitems;
752
878
  let getlocation = class getlocation extends Struct {
753
879
  };
754
880
  __decorate([
@@ -815,30 +941,6 @@ var Types;
815
941
  Struct.type('getsummaries')
816
942
  ], getsummaries);
817
943
  Types.getsummaries = getsummaries;
818
- let good = class good extends Struct {
819
- };
820
- __decorate([
821
- Struct.field(UInt16)
822
- ], good.prototype, "id", void 0);
823
- __decorate([
824
- Struct.field(UInt32)
825
- ], good.prototype, "base_price", void 0);
826
- __decorate([
827
- Struct.field(UInt32)
828
- ], good.prototype, "mass", void 0);
829
- good = __decorate([
830
- Struct.type('good')
831
- ], good);
832
- Types.good = good;
833
- let goods_info = class goods_info extends Struct {
834
- };
835
- __decorate([
836
- Struct.field(good, { array: true })
837
- ], goods_info.prototype, "goods", void 0);
838
- goods_info = __decorate([
839
- Struct.type('goods_info')
840
- ], goods_info);
841
- Types.goods_info = goods_info;
842
944
  let grouptravel = class grouptravel extends Struct {
843
945
  };
844
946
  __decorate([
@@ -884,6 +986,15 @@ var Types;
884
986
  Struct.type('init')
885
987
  ], init);
886
988
  Types.init = init;
989
+ let items_info = class items_info extends Struct {
990
+ };
991
+ __decorate([
992
+ Struct.field(item_def, { array: true })
993
+ ], items_info.prototype, "items", void 0);
994
+ items_info = __decorate([
995
+ Struct.type('items_info')
996
+ ], items_info);
997
+ Types.items_info = items_info;
887
998
  let join = class join extends Struct {
888
999
  };
889
1000
  __decorate([
@@ -941,27 +1052,27 @@ var Types;
941
1052
  Struct.type('location_derived')
942
1053
  ], location_derived);
943
1054
  Types.location_derived = location_derived;
944
- let location_good = class location_good extends Struct {
1055
+ let location_item = class location_item extends Struct {
945
1056
  };
946
1057
  __decorate([
947
1058
  Struct.field(UInt16)
948
- ], location_good.prototype, "id", void 0);
1059
+ ], location_item.prototype, "id", void 0);
949
1060
  __decorate([
950
1061
  Struct.field(UInt32)
951
- ], location_good.prototype, "price", void 0);
1062
+ ], location_item.prototype, "price", void 0);
952
1063
  __decorate([
953
1064
  Struct.field(UInt16)
954
- ], location_good.prototype, "supply", void 0);
1065
+ ], location_item.prototype, "supply", void 0);
955
1066
  __decorate([
956
1067
  Struct.field(UInt32)
957
- ], location_good.prototype, "rarity_multiplier", void 0);
1068
+ ], location_item.prototype, "rarity_multiplier", void 0);
958
1069
  __decorate([
959
1070
  Struct.field(UInt32)
960
- ], location_good.prototype, "location_multiplier", void 0);
961
- location_good = __decorate([
962
- Struct.type('location_good')
963
- ], location_good);
964
- Types.location_good = location_good;
1071
+ ], location_item.prototype, "location_multiplier", void 0);
1072
+ location_item = __decorate([
1073
+ Struct.type('location_item')
1074
+ ], location_item);
1075
+ Types.location_item = location_item;
965
1076
  let location_info = class location_info extends Struct {
966
1077
  };
967
1078
  __decorate([
@@ -971,8 +1082,8 @@ var Types;
971
1082
  Struct.field('bool')
972
1083
  ], location_info.prototype, "is_system", void 0);
973
1084
  __decorate([
974
- Struct.field(location_good, { array: true })
975
- ], location_info.prototype, "goods", void 0);
1085
+ Struct.field(location_item, { array: true })
1086
+ ], location_info.prototype, "items", void 0);
976
1087
  location_info = __decorate([
977
1088
  Struct.type('location_info')
978
1089
  ], location_info);
@@ -1069,21 +1180,6 @@ var Types;
1069
1180
  __decorate([
1070
1181
  Struct.field(UInt16, { optional: true })
1071
1182
  ], task_event.prototype, "new_energy", void 0);
1072
- __decorate([
1073
- Struct.field(coordinates, { optional: true })
1074
- ], task_event.prototype, "new_coordinates", void 0);
1075
- __decorate([
1076
- Struct.field(Int64)
1077
- ], task_event.prototype, "cargomass_delta", void 0);
1078
- __decorate([
1079
- Struct.field(cargo_item, { array: true })
1080
- ], task_event.prototype, "cargo_added", void 0);
1081
- __decorate([
1082
- Struct.field(cargo_item, { array: true })
1083
- ], task_event.prototype, "cargo_removed", void 0);
1084
- __decorate([
1085
- Struct.field(Int64, { optional: true })
1086
- ], task_event.prototype, "credits", void 0);
1087
1183
  task_event = __decorate([
1088
1184
  Struct.type('task_event')
1089
1185
  ], task_event);
@@ -1193,6 +1289,18 @@ var Types;
1193
1289
  Struct.type('recharge')
1194
1290
  ], recharge);
1195
1291
  Types.recharge = recharge;
1292
+ let reserve_row = class reserve_row extends Struct {
1293
+ };
1294
+ __decorate([
1295
+ Struct.field(UInt64)
1296
+ ], reserve_row.prototype, "id", void 0);
1297
+ __decorate([
1298
+ Struct.field(UInt32)
1299
+ ], reserve_row.prototype, "remaining", void 0);
1300
+ reserve_row = __decorate([
1301
+ Struct.type('reserve_row')
1302
+ ], reserve_row);
1303
+ Types.reserve_row = reserve_row;
1196
1304
  let resolve = class resolve extends Struct {
1197
1305
  };
1198
1306
  __decorate([
@@ -1241,24 +1349,24 @@ var Types;
1241
1349
  Struct.type('salt')
1242
1350
  ], salt);
1243
1351
  Types.salt = salt;
1244
- let sellgoods = class sellgoods extends Struct {
1352
+ let sellitems = class sellitems extends Struct {
1245
1353
  };
1246
1354
  __decorate([
1247
1355
  Struct.field(Name)
1248
- ], sellgoods.prototype, "entity_type", void 0);
1356
+ ], sellitems.prototype, "entity_type", void 0);
1249
1357
  __decorate([
1250
1358
  Struct.field(UInt64)
1251
- ], sellgoods.prototype, "id", void 0);
1359
+ ], sellitems.prototype, "id", void 0);
1252
1360
  __decorate([
1253
1361
  Struct.field(UInt16)
1254
- ], sellgoods.prototype, "good_id", void 0);
1362
+ ], sellitems.prototype, "item_id", void 0);
1255
1363
  __decorate([
1256
1364
  Struct.field(UInt32)
1257
- ], sellgoods.prototype, "quantity", void 0);
1258
- sellgoods = __decorate([
1259
- Struct.type('sellgoods')
1260
- ], sellgoods);
1261
- Types.sellgoods = sellgoods;
1365
+ ], sellitems.prototype, "quantity", void 0);
1366
+ sellitems = __decorate([
1367
+ Struct.type('sellitems')
1368
+ ], sellitems);
1369
+ Types.sellitems = sellitems;
1262
1370
  let sequence_row = class sequence_row extends Struct {
1263
1371
  };
1264
1372
  __decorate([
@@ -1271,15 +1379,6 @@ var Types;
1271
1379
  Struct.type('sequence_row')
1272
1380
  ], sequence_row);
1273
1381
  Types.sequence_row = sequence_row;
1274
- let trade_stats = class trade_stats extends Struct {
1275
- };
1276
- __decorate([
1277
- Struct.field(UInt16)
1278
- ], trade_stats.prototype, "margin", void 0);
1279
- trade_stats = __decorate([
1280
- Struct.type('trade_stats')
1281
- ], trade_stats);
1282
- Types.trade_stats = trade_stats;
1283
1382
  let ship_row = class ship_row extends Struct {
1284
1383
  };
1285
1384
  __decorate([
@@ -1321,6 +1420,9 @@ var Types;
1321
1420
  __decorate([
1322
1421
  Struct.field(extractor_stats, { optional: true })
1323
1422
  ], ship_row.prototype, "extractor", void 0);
1423
+ __decorate([
1424
+ Struct.field(warp_stats, { optional: true })
1425
+ ], ship_row.prototype, "warp", void 0);
1324
1426
  __decorate([
1325
1427
  Struct.field(schedule, { optional: true })
1326
1428
  ], ship_row.prototype, "schedule", void 0);
@@ -1380,7 +1482,7 @@ var Types;
1380
1482
  ], supply_row.prototype, "epoch", void 0);
1381
1483
  __decorate([
1382
1484
  Struct.field(UInt16)
1383
- ], supply_row.prototype, "good_id", void 0);
1485
+ ], supply_row.prototype, "item_id", void 0);
1384
1486
  __decorate([
1385
1487
  Struct.field(UInt16)
1386
1488
  ], supply_row.prototype, "supply", void 0);
@@ -1425,7 +1527,7 @@ var Types;
1425
1527
  ], transfer.prototype, "dest_id", void 0);
1426
1528
  __decorate([
1427
1529
  Struct.field(UInt16)
1428
- ], transfer.prototype, "good_id", void 0);
1530
+ ], transfer.prototype, "item_id", void 0);
1429
1531
  __decorate([
1430
1532
  Struct.field(UInt32)
1431
1533
  ], transfer.prototype, "quantity", void 0);
@@ -1465,6 +1567,9 @@ var Types;
1465
1567
  __decorate([
1466
1568
  Struct.field(starter_info)
1467
1569
  ], types_row.prototype, "starter_info_type", void 0);
1570
+ __decorate([
1571
+ Struct.field(game_config)
1572
+ ], types_row.prototype, "game_config_type", void 0);
1468
1573
  types_row = __decorate([
1469
1574
  Struct.type('types_row')
1470
1575
  ], types_row);
@@ -1542,6 +1647,7 @@ const TableMap = {
1542
1647
  entitygroup: Types.entitygroup_row,
1543
1648
  location: Types.location_row,
1544
1649
  player: Types.player_row,
1650
+ reserve: Types.reserve_row,
1545
1651
  sequence: Types.sequence_row,
1546
1652
  ship: Types.ship_row,
1547
1653
  state: Types.state_row,
@@ -1588,11 +1694,11 @@ const ERROR_SYSTEM_DISABLED = 'This game is currently disabled.';
1588
1694
  const ERROR_SYSTEM_NOT_INITIALIZED = 'This game has not been initialized.';
1589
1695
  const GAME_NOT_FOUND = 'Cannot find game for given account name.';
1590
1696
  const GAME_SEED_NOT_SET = 'This game has not initialized an epoch seed value.';
1591
- const GOOD_DOES_NOT_EXIST = 'Good does not exist.';
1592
- const GOOD_NOT_AVAILABLE_AT_LOCATION = 'Good is not tradeable at ship location.';
1697
+ const ITEM_DOES_NOT_EXIST = 'Item does not exist.';
1698
+ const ITEM_NOT_AVAILABLE_AT_LOCATION = 'Item is not tradeable at ship location.';
1593
1699
  const INSUFFICIENT_BALANCE = 'Insufficient balance.';
1594
- const INSUFFICIENT_GOOD_QUANTITY = 'Insufficient quantity in cargo.';
1595
- const INSUFFICIENT_GOOD_SUPPLY = 'Insufficient supply of good at location.';
1700
+ const INSUFFICIENT_ITEM_QUANTITY = 'Insufficient quantity in cargo.';
1701
+ const INSUFFICIENT_ITEM_SUPPLY = 'Insufficient supply of item at location.';
1596
1702
  const INVALID_AMOUNT = 'Invalid amount.';
1597
1703
  const REQUIRES_MORE_THAN_ONE = 'A value greater than one is required.';
1598
1704
  const REQUIRES_POSITIVE_VALUE = 'Value must be greater than zero.';
@@ -1653,6 +1759,7 @@ var TaskType;
1653
1759
  TaskType[TaskType["LOAD"] = 3] = "LOAD";
1654
1760
  TaskType[TaskType["UNLOAD"] = 4] = "UNLOAD";
1655
1761
  TaskType[TaskType["EXTRACT"] = 5] = "EXTRACT";
1762
+ TaskType[TaskType["WARP"] = 6] = "WARP";
1656
1763
  })(TaskType || (TaskType = {}));
1657
1764
  var LocationType;
1658
1765
  (function (LocationType) {
@@ -1692,43 +1799,52 @@ function coordsToLocationId(coords) {
1692
1799
  const id = (x << BigInt(32)) | y;
1693
1800
  return UInt64.from(id);
1694
1801
  }
1695
- let Good = class Good extends Struct {
1802
+ let Item = class Item extends Struct {
1696
1803
  };
1697
1804
  __decorate([
1698
1805
  Struct.field(UInt16)
1699
- ], Good.prototype, "id", void 0);
1806
+ ], Item.prototype, "id", void 0);
1700
1807
  __decorate([
1701
1808
  Struct.field('string')
1702
- ], Good.prototype, "name", void 0);
1809
+ ], Item.prototype, "name", void 0);
1703
1810
  __decorate([
1704
1811
  Struct.field('string')
1705
- ], Good.prototype, "description", void 0);
1812
+ ], Item.prototype, "description", void 0);
1706
1813
  __decorate([
1707
1814
  Struct.field(UInt32)
1708
- ], Good.prototype, "base_price", void 0);
1815
+ ], Item.prototype, "base_price", void 0);
1709
1816
  __decorate([
1710
1817
  Struct.field(UInt32)
1711
- ], Good.prototype, "mass", void 0);
1712
- Good = __decorate([
1713
- Struct.type('good')
1714
- ], Good);
1715
- let GoodPrice = class GoodPrice extends Struct {
1818
+ ], Item.prototype, "mass", void 0);
1819
+ __decorate([
1820
+ Struct.field('string')
1821
+ ], Item.prototype, "category", void 0);
1822
+ __decorate([
1823
+ Struct.field('string')
1824
+ ], Item.prototype, "rarity", void 0);
1825
+ __decorate([
1826
+ Struct.field('string')
1827
+ ], Item.prototype, "color", void 0);
1828
+ Item = __decorate([
1829
+ Struct.type('item')
1830
+ ], Item);
1831
+ let ItemPrice = class ItemPrice extends Struct {
1716
1832
  };
1717
1833
  __decorate([
1718
1834
  Struct.field(UInt16)
1719
- ], GoodPrice.prototype, "id", void 0);
1835
+ ], ItemPrice.prototype, "id", void 0);
1720
1836
  __decorate([
1721
- Struct.field(Good)
1722
- ], GoodPrice.prototype, "good", void 0);
1837
+ Struct.field(Item)
1838
+ ], ItemPrice.prototype, "item", void 0);
1723
1839
  __decorate([
1724
1840
  Struct.field(UInt32)
1725
- ], GoodPrice.prototype, "price", void 0);
1841
+ ], ItemPrice.prototype, "price", void 0);
1726
1842
  __decorate([
1727
1843
  Struct.field(UInt16)
1728
- ], GoodPrice.prototype, "supply", void 0);
1729
- GoodPrice = __decorate([
1730
- Struct.type('GoodPrice')
1731
- ], GoodPrice);
1844
+ ], ItemPrice.prototype, "supply", void 0);
1845
+ ItemPrice = __decorate([
1846
+ Struct.type('ItemPrice')
1847
+ ], ItemPrice);
1732
1848
 
1733
1849
  function getCurrentEpoch(game) {
1734
1850
  const current = new Date().getTime();
@@ -2960,7 +3076,7 @@ function getLocationType(gameSeed, coordinates) {
2960
3076
  return LocationType.NEBULA;
2961
3077
  }
2962
3078
  function isExtractableLocation(locationType) {
2963
- return locationType === LocationType.ASTEROID || locationType === LocationType.NEBULA;
3079
+ return locationType !== LocationType.EMPTY;
2964
3080
  }
2965
3081
  function getSystemName(gameSeed, location) {
2966
3082
  const seed = Checksum256.from(gameSeed);
@@ -3005,7 +3121,9 @@ function deriveLocationStatic(gameSeed, coordinates) {
3005
3121
  else {
3006
3122
  loc.type = UInt8.from(LocationType.NEBULA);
3007
3123
  }
3008
- loc.subtype = UInt8.from(hashResult.array[2]);
3124
+ loc.subtype = UInt8.from(Number(loc.type) === LocationType.PLANET
3125
+ ? hashResult.array[2] % 6
3126
+ : hashResult.array[2]);
3009
3127
  loc.seed0 = UInt8.from(hashResult.array[3]);
3010
3128
  loc.seed1 = UInt8.from(hashResult.array[4]);
3011
3129
  return loc;
@@ -3027,35 +3145,6 @@ function deriveLocation(gameSeed, epochSeed, coordinates) {
3027
3145
  epoch_props: deriveLocationEpoch(epochSeed, coordinates),
3028
3146
  });
3029
3147
  }
3030
- function deriveLocationMixture(location, epochSeed) {
3031
- const locationType = location.static_props.type.toNumber();
3032
- if (locationType === LocationType.NEBULA) {
3033
- return Types.mixture_info.from({
3034
- components: [{ good_id: 1, purity: PRECISION }],
3035
- });
3036
- }
3037
- if (locationType === LocationType.ASTEROID) {
3038
- const seed = Checksum256.from(epochSeed);
3039
- const coords = location.static_props.coords;
3040
- const str = `mixture-${coords.x}-${coords.y}`;
3041
- const hashResult = hash512(seed, str);
3042
- const ironPrimary = location.static_props.subtype.toNumber() % 2 === 0;
3043
- const purityRange = 0.3;
3044
- const purityRoll = hashResult.array[0] / 255;
3045
- const primaryPurity = 0.5 + purityRoll * purityRange;
3046
- const primaryId = ironPrimary ? 26 : 29;
3047
- const secondaryId = ironPrimary ? 29 : 26;
3048
- const primaryAmt = Math.floor(primaryPurity * PRECISION);
3049
- const secondaryAmt = PRECISION - primaryAmt;
3050
- return Types.mixture_info.from({
3051
- components: [
3052
- { good_id: primaryId, purity: primaryAmt },
3053
- { good_id: secondaryId, purity: secondaryAmt },
3054
- ],
3055
- });
3056
- }
3057
- return Types.mixture_info.from({ components: [] });
3058
- }
3059
3148
 
3060
3149
  class GameState extends Types.state_row {
3061
3150
  static from(state, game) {
@@ -3150,47 +3239,170 @@ class BaseManager {
3150
3239
  }
3151
3240
  }
3152
3241
 
3153
- var goodsData = [
3242
+ var itemsData = [
3154
3243
  {
3155
3244
  id: 1,
3156
3245
  name: "Hydrogen",
3157
- description: "A lightweight fuel source essential for interstellar travel.",
3246
+ description: "A lightweight gas used for fuel cells and propulsion.",
3158
3247
  base_price: 50,
3159
- mass: 15000
3248
+ mass: 15000,
3249
+ category: "gas",
3250
+ rarity: "common",
3251
+ color: "#7EC8E3"
3252
+ },
3253
+ {
3254
+ id: 2,
3255
+ name: "Helium",
3256
+ description: "An inert noble gas used in energy systems.",
3257
+ base_price: 75,
3258
+ mass: 2000,
3259
+ category: "gas",
3260
+ rarity: "uncommon",
3261
+ color: "#F5E6CC"
3262
+ },
3263
+ {
3264
+ id: 6,
3265
+ name: "Carbon",
3266
+ description: "A versatile element for life support and coatings.",
3267
+ base_price: 100,
3268
+ mass: 12000,
3269
+ category: "organic",
3270
+ rarity: "common",
3271
+ color: "#4A4A4A"
3272
+ },
3273
+ {
3274
+ id: 14,
3275
+ name: "Silicon",
3276
+ description: "A semiconductor used in sensors and computing.",
3277
+ base_price: 150,
3278
+ mass: 28000,
3279
+ category: "mineral",
3280
+ rarity: "common",
3281
+ color: "#B8A9C9"
3282
+ },
3283
+ {
3284
+ id: 18,
3285
+ name: "Argon",
3286
+ description: "A noble gas used in industrial and energy applications.",
3287
+ base_price: 60,
3288
+ mass: 8000,
3289
+ category: "gas",
3290
+ rarity: "rare",
3291
+ color: "#9B59B6"
3292
+ },
3293
+ {
3294
+ id: 22,
3295
+ name: "Titanium",
3296
+ description: "A strong, lightweight metal for ship construction.",
3297
+ base_price: 300,
3298
+ mass: 48000,
3299
+ category: "metal",
3300
+ rarity: "rare",
3301
+ color: "#C0C0C0"
3160
3302
  },
3161
3303
  {
3162
3304
  id: 26,
3163
3305
  name: "Iron",
3164
- description: "A versatile metal used in construction and manufacturing.",
3306
+ description: "A versatile metal used in hulls and structures.",
3165
3307
  base_price: 125,
3166
- mass: 40000
3308
+ mass: 40000,
3309
+ category: "metal",
3310
+ rarity: "common",
3311
+ color: "#B7410E"
3167
3312
  },
3168
3313
  {
3169
3314
  id: 29,
3170
3315
  name: "Copper",
3171
- description: "A conductive metal vital for electronics and wiring.",
3316
+ description: "A conductive metal for electronics and wiring.",
3317
+ base_price: 200,
3318
+ mass: 60000,
3319
+ category: "metal",
3320
+ rarity: "uncommon",
3321
+ color: "#B87333"
3322
+ },
3323
+ {
3324
+ id: 54,
3325
+ name: "Xenon",
3326
+ description: "A rare noble gas for advanced propulsion systems.",
3327
+ base_price: 175,
3328
+ mass: 20000,
3329
+ category: "gas",
3330
+ rarity: "epic",
3331
+ color: "#5B2C6F"
3332
+ },
3333
+ {
3334
+ id: 74,
3335
+ name: "Tungsten",
3336
+ description: "An extremely dense metal for heavy-duty applications.",
3337
+ base_price: 500,
3338
+ mass: 80000,
3339
+ category: "metal",
3340
+ rarity: "epic",
3341
+ color: "#708090"
3342
+ },
3343
+ {
3344
+ id: 1000,
3345
+ name: "Quartz",
3346
+ description: "A crystalline mineral for sensors and optics.",
3172
3347
  base_price: 200,
3173
- mass: 60000
3348
+ mass: 35000,
3349
+ category: "mineral",
3350
+ rarity: "uncommon",
3351
+ color: "#E8D5B7"
3352
+ },
3353
+ {
3354
+ id: 1001,
3355
+ name: "Sapphire",
3356
+ description: "A precious crystal for precision instruments.",
3357
+ base_price: 400,
3358
+ mass: 45000,
3359
+ category: "mineral",
3360
+ rarity: "rare",
3361
+ color: "#0F52BA"
3362
+ },
3363
+ {
3364
+ id: 1002,
3365
+ name: "Polymers",
3366
+ description: "Synthetic materials for coatings and consumables.",
3367
+ base_price: 150,
3368
+ mass: 25000,
3369
+ category: "organic",
3370
+ rarity: "rare",
3371
+ color: "#2ECC71"
3372
+ },
3373
+ {
3374
+ id: 1003,
3375
+ name: "Biomass",
3376
+ description: "Organic matter for life support systems.",
3377
+ base_price: 100,
3378
+ mass: 30000,
3379
+ category: "organic",
3380
+ rarity: "uncommon",
3381
+ color: "#8B4513"
3174
3382
  }
3175
3383
  ];
3176
3384
 
3177
- const goods = goodsData;
3178
- const goodIds = goods.map((g) => g.id);
3179
- function getGood(goodId) {
3180
- const good = goods.find((g) => UInt16.from(goodId).equals(g.id));
3181
- if (!good) {
3182
- throw new Error('Good does not exist');
3183
- }
3184
- return Good.from({
3185
- id: UInt16.from(good.id),
3186
- name: good.name,
3187
- description: good.description,
3188
- base_price: UInt32.from(good.base_price),
3189
- mass: UInt32.from(good.mass),
3190
- });
3191
- }
3192
- function getGoods() {
3193
- return goods.map((g) => getGood(g.id));
3385
+ const items = itemsData.map((g) => Item.from({
3386
+ id: g.id,
3387
+ name: g.name,
3388
+ description: g.description,
3389
+ base_price: g.base_price,
3390
+ mass: g.mass,
3391
+ category: g.category,
3392
+ rarity: g.rarity,
3393
+ color: g.color,
3394
+ }));
3395
+ const itemIds = items.map((i) => i.id);
3396
+ function getItem(itemId) {
3397
+ const id = UInt16.from(itemId);
3398
+ const item = items.find((i) => i.id.equals(id));
3399
+ if (!item) {
3400
+ throw new Error(`Item with id ${id} not found`);
3401
+ }
3402
+ return item;
3403
+ }
3404
+ function getItems() {
3405
+ return items;
3194
3406
  }
3195
3407
 
3196
3408
  function calc_orbital_altitude(mass) {
@@ -3280,7 +3492,7 @@ function calc_ship_mass(ship, cargos) {
3280
3492
  mass.add(ship.loaders.mass.multiplying(ship.loaders.quantity));
3281
3493
  }
3282
3494
  for (const cargo of cargos) {
3283
- mass.add(getGood(cargo.good_id).mass.multiplying(cargo.quantity));
3495
+ mass.add(getItem(cargo.item_id).mass.multiplying(cargo.quantity));
3284
3496
  }
3285
3497
  return mass;
3286
3498
  }
@@ -3290,9 +3502,9 @@ function calc_energyusage(distance, drain) {
3290
3502
  function calculateTransferTime(ship, cargos, quantities) {
3291
3503
  let mass = UInt64.from(0);
3292
3504
  for (const cargo of cargos) {
3293
- const qty = quantities?.get(Number(cargo.good_id)) ?? 0;
3505
+ const qty = quantities?.get(Number(cargo.item_id)) ?? 0;
3294
3506
  if (qty > 0) {
3295
- const good_mass = getGood(cargo.good_id).mass;
3507
+ const good_mass = getItem(cargo.item_id).mass;
3296
3508
  const cargo_mass = good_mass.multiplying(qty);
3297
3509
  mass = UInt64.from(mass).adding(cargo_mass);
3298
3510
  }
@@ -3315,11 +3527,11 @@ function calculateLoadTimeBreakdown(ship, cargos, loadQuantities, unloadQuantiti
3315
3527
  let mass_unload = UInt64.from(0);
3316
3528
  let mass_load = UInt64.from(0);
3317
3529
  for (const cargo of cargos) {
3318
- const goodId = Number(cargo.good_id);
3530
+ const goodId = Number(cargo.item_id);
3319
3531
  const loadQty = loadQuantities?.get(goodId) ?? 0;
3320
3532
  const unloadQty = unloadQuantities?.get(goodId) ?? 0;
3321
3533
  if (loadQty > 0 || unloadQty > 0) {
3322
- const good = getGood(cargo.good_id);
3534
+ const good = getItem(cargo.item_id);
3323
3535
  if (loadQty > 0) {
3324
3536
  const cargo_mass = good.mass.multiplying(loadQty);
3325
3537
  mass_load = UInt64.from(mass_load).adding(cargo_mass);
@@ -3498,7 +3710,7 @@ function capsHasMass(caps) {
3498
3710
  function calcCargoMass(entity) {
3499
3711
  let mass = UInt64.from(0);
3500
3712
  for (const item of entity.cargo) {
3501
- const good = getGood(item.good_id);
3713
+ const good = getItem(item.item_id);
3502
3714
  mass = mass.adding(good.mass.multiplying(item.quantity));
3503
3715
  }
3504
3716
  return mass;
@@ -3797,19 +4009,19 @@ function applyFlightTask(projected, task, options) {
3797
4009
  : UInt16.from(0);
3798
4010
  }
3799
4011
  }
3800
- function getGoodMass(good_id) {
3801
- const good = getGood(good_id);
3802
- return good.mass;
4012
+ function getItemMass(item_id) {
4013
+ const item = getItem(item_id);
4014
+ return item.mass;
3803
4015
  }
3804
4016
  function applyLoadTask(projected, task) {
3805
4017
  for (const item of task.cargo) {
3806
- const good_mass = getGoodMass(item.good_id);
4018
+ const good_mass = getItemMass(item.item_id);
3807
4019
  projected.cargoMass = projected.cargoMass.adding(good_mass.multiplying(item.quantity));
3808
4020
  }
3809
4021
  }
3810
4022
  function applyUnloadTask(projected, task) {
3811
4023
  for (const item of task.cargo) {
3812
- const good_mass = getGoodMass(item.good_id);
4024
+ const good_mass = getItemMass(item.item_id);
3813
4025
  const cargoMass = good_mass.multiplying(item.quantity);
3814
4026
  projected.cargoMass = projected.cargoMass.gt(cargoMass)
3815
4027
  ? projected.cargoMass.subtracting(cargoMass)
@@ -3826,7 +4038,7 @@ function applyExtractTask(projected, task, options) {
3826
4038
  : UInt16.from(0);
3827
4039
  }
3828
4040
  for (const item of task.cargo) {
3829
- const good_mass = getGoodMass(item.good_id);
4041
+ const good_mass = getItemMass(item.item_id);
3830
4042
  projected.cargoMass = projected.cargoMass.adding(good_mass.multiplying(item.quantity));
3831
4043
  }
3832
4044
  }
@@ -3947,7 +4159,7 @@ class Location {
3947
4159
  getSupply(goodId) {
3948
4160
  if (!this._locationRows)
3949
4161
  return undefined;
3950
- const row = this._locationRows.find((r) => r.good_id.equals(goodId) && this._epoch && r.epoch.equals(this._epoch));
4162
+ const row = this._locationRows.find((r) => r.item_id.equals(goodId) && this._epoch && r.epoch.equals(this._epoch));
3951
4163
  return row ? row.supply : undefined;
3952
4164
  }
3953
4165
  get availableGoods() {
@@ -3985,9 +4197,9 @@ class Location {
3985
4197
  ? currentSupply.subtracting(delta)
3986
4198
  : UInt16.from(0)
3987
4199
  : currentSupply.adding(quantityDelta);
3988
- return GoodPrice.from({
4200
+ return ItemPrice.from({
3989
4201
  id: price.id,
3990
- good: price.good,
4202
+ item: price.item,
3991
4203
  price: price.price,
3992
4204
  supply: newSupply,
3993
4205
  });
@@ -3997,7 +4209,7 @@ class Location {
3997
4209
  }
3998
4210
  if (this._locationRows && this._epoch) {
3999
4211
  newLocation._locationRows = this._locationRows.map((row) => {
4000
- if (row.good_id.equals(goodId) && row.epoch.equals(this._epoch)) {
4212
+ if (row.item_id.equals(goodId) && row.epoch.equals(this._epoch)) {
4001
4213
  const currentSupply = UInt16.from(row.supply);
4002
4214
  const delta = UInt16.from(Math.abs(quantityDelta));
4003
4215
  const newSupply = quantityDelta < 0
@@ -4009,7 +4221,7 @@ class Location {
4009
4221
  id: row.id,
4010
4222
  coordinates: row.coordinates,
4011
4223
  epoch: row.epoch,
4012
- good_id: row.good_id,
4224
+ item_id: row.item_id,
4013
4225
  supply: newSupply,
4014
4226
  });
4015
4227
  }
@@ -4090,17 +4302,20 @@ function createScheduleAccessor(entity) {
4090
4302
  }
4091
4303
 
4092
4304
  class EntityInventory extends Types.cargo_item {
4093
- get good() {
4094
- if (!this._good) {
4095
- this._good = getGood(this.good_id);
4305
+ get item() {
4306
+ if (!this._item) {
4307
+ this._item = getItem(this.item_id);
4096
4308
  }
4097
- return this._good;
4309
+ return this._item;
4310
+ }
4311
+ get good() {
4312
+ return this.item;
4098
4313
  }
4099
4314
  get name() {
4100
- return this.good.name;
4315
+ return this.item.name;
4101
4316
  }
4102
4317
  get unitMass() {
4103
- return this.good.mass;
4318
+ return this.item.mass;
4104
4319
  }
4105
4320
  get totalMass() {
4106
4321
  return UInt64.from(this.unitMass).multiplying(this.quantity);
@@ -4132,8 +4347,8 @@ class InventoryAccessor {
4132
4347
  get totalValue() {
4133
4348
  return this.items.reduce((sum, c) => sum.adding(c.totalCost), UInt64.from(0));
4134
4349
  }
4135
- forGood(goodId) {
4136
- return this.items.find((c) => c.good_id.equals(goodId));
4350
+ forItem(goodId) {
4351
+ return this.items.find((c) => c.item_id.equals(goodId));
4137
4352
  }
4138
4353
  get sellable() {
4139
4354
  return this.items.filter((c) => c.hasCargo);
@@ -4178,8 +4393,8 @@ function cargoValue(cargo) {
4178
4393
  return sum.adding(c.totalCost);
4179
4394
  }, UInt64.from(0));
4180
4395
  }
4181
- function getCargoForGood(cargo, goodId) {
4182
- return cargo.find((c) => c.good_id.equals(goodId));
4396
+ function getCargoForItem(cargo, goodId) {
4397
+ return cargo.find((c) => c.item_id.equals(goodId));
4183
4398
  }
4184
4399
  function hasSpace(currentMass, maxCapacity, goodMass, quantity) {
4185
4400
  const additionalMass = goodMass.multiplying(quantity);
@@ -4204,7 +4419,7 @@ function calculateSaleValue(cargo, prices) {
4204
4419
  for (const item of cargo) {
4205
4420
  if (UInt32.from(item.quantity).equals(UInt32.from(0)))
4206
4421
  continue;
4207
- const goodId = Number(item.good_id);
4422
+ const goodId = Number(item.item_id);
4208
4423
  const salePrice = prices.get(goodId);
4209
4424
  if (salePrice) {
4210
4425
  revenue = revenue.adding(salePrice.multiplying(item.quantity));
@@ -4225,30 +4440,30 @@ function calculateSaleValueFromArray(cargo, prices) {
4225
4440
  });
4226
4441
  return calculateSaleValue(cargo, priceMap);
4227
4442
  }
4228
- function afterSellGoods(cargo, goodsToSell) {
4443
+ function afterSellItems(cargo, goodsToSell) {
4229
4444
  if (cargo.length === 0) {
4230
4445
  return [];
4231
4446
  }
4232
4447
  return cargo.map((item) => {
4233
- const saleItem = goodsToSell.find((s) => Number(item.good_id) === s.goodId);
4448
+ const saleItem = goodsToSell.find((s) => Number(item.item_id) === s.goodId);
4234
4449
  if (!saleItem) {
4235
4450
  return new EntityInventory(item);
4236
4451
  }
4237
4452
  const currentQty = Number(item.quantity);
4238
4453
  const newQty = Math.max(0, currentQty - saleItem.quantity);
4239
4454
  return new EntityInventory(Types.cargo_item.from({
4240
- good_id: item.good_id,
4455
+ item_id: item.item_id,
4241
4456
  quantity: UInt32.from(newQty),
4242
4457
  unit_cost: item.unit_cost,
4243
4458
  }));
4244
4459
  });
4245
4460
  }
4246
- function afterSellAllGoods(cargo) {
4461
+ function afterSellAllItems(cargo) {
4247
4462
  if (cargo.length === 0) {
4248
4463
  return [];
4249
4464
  }
4250
4465
  return cargo.map((item) => new EntityInventory(Types.cargo_item.from({
4251
- good_id: item.good_id,
4466
+ item_id: item.item_id,
4252
4467
  quantity: UInt32.from(0),
4253
4468
  unit_cost: item.unit_cost,
4254
4469
  })));
@@ -4258,14 +4473,14 @@ var cargoUtils = /*#__PURE__*/Object.freeze({
4258
4473
  __proto__: null,
4259
4474
  totalCargoMass: totalCargoMass,
4260
4475
  cargoValue: cargoValue,
4261
- getCargoForGood: getCargoForGood,
4476
+ getCargoForItem: getCargoForItem,
4262
4477
  hasSpace: hasSpace,
4263
4478
  availableCapacity: availableCapacity,
4264
4479
  isFull: isFull,
4265
4480
  calculateSaleValue: calculateSaleValue,
4266
4481
  calculateSaleValueFromArray: calculateSaleValueFromArray,
4267
- afterSellGoods: afterSellGoods,
4268
- afterSellAllGoods: afterSellAllGoods
4482
+ afterSellItems: afterSellItems,
4483
+ afterSellAllItems: afterSellAllItems
4269
4484
  });
4270
4485
 
4271
4486
  class Ship extends Types.entity_info {
@@ -4319,6 +4534,9 @@ class Ship extends Types.entity_info {
4319
4534
  get hasExtractor() {
4320
4535
  return this.extractor !== undefined;
4321
4536
  }
4537
+ get hasWarp() {
4538
+ return this.warp !== undefined;
4539
+ }
4322
4540
  project() {
4323
4541
  return projectEntity(this);
4324
4542
  }
@@ -4352,8 +4570,8 @@ class Ship extends Types.entity_info {
4352
4570
  ? UInt64.from(0)
4353
4571
  : this.maxCapacity.subtracting(this.totalMass);
4354
4572
  }
4355
- getCargoForGood(goodId) {
4356
- return this.inv.forGood(goodId);
4573
+ getCargoForItem(goodId) {
4574
+ return this.inv.forItem(goodId);
4357
4575
  }
4358
4576
  get sellableCargo() {
4359
4577
  return this.inv.sellable;
@@ -4388,11 +4606,11 @@ class Ship extends Types.entity_info {
4388
4606
  calculateSaleValueFromArray(prices) {
4389
4607
  return calculateSaleValueFromArray(this.cargo, prices);
4390
4608
  }
4391
- afterSellGoods(goodsToSell) {
4392
- return afterSellGoods(this.cargo, goodsToSell);
4609
+ afterSellItems(goodsToSell) {
4610
+ return afterSellItems(this.cargo, goodsToSell);
4393
4611
  }
4394
- afterSellAllGoods() {
4395
- return afterSellAllGoods(this.cargo);
4612
+ afterSellAllItems() {
4613
+ return afterSellAllItems(this.cargo);
4396
4614
  }
4397
4615
  }
4398
4616
 
@@ -4440,8 +4658,8 @@ class Warehouse extends Types.entity_info {
4440
4658
  get isFull() {
4441
4659
  return this.totalCargoMass.gte(this.maxCapacity);
4442
4660
  }
4443
- getCargoForGood(goodId) {
4444
- return this.inv.forGood(goodId);
4661
+ getCargoForItem(goodId) {
4662
+ return this.inv.forItem(goodId);
4445
4663
  }
4446
4664
  get orbitalAltitude() {
4447
4665
  return this.coordinates.z?.toNumber() || 0;
@@ -4853,22 +5071,22 @@ function getSupply(gameSeed, state, location, goodId) {
4853
5071
  return Math.floor(base * percent * ship * epoch);
4854
5072
  }
4855
5073
  function marketPrice(location, goodId, gameSeed, state) {
4856
- const good = getGood(goodId);
4857
- let price = Number(good.base_price);
5074
+ const item = getItem(goodId);
5075
+ let price = Number(item.base_price);
4858
5076
  const rarityMultiplier = getRarityMultiplier(gameSeed, state.seed, location, goodId);
4859
5077
  price *= rarityMultiplier;
4860
5078
  const locationMultiplier = getLocationMultiplier(gameSeed, location, goodId);
4861
5079
  price *= locationMultiplier;
4862
5080
  const supply = getSupply(gameSeed, state, location, goodId);
4863
- return GoodPrice.from({
5081
+ return ItemPrice.from({
4864
5082
  id: goodId,
4865
- good,
5083
+ item,
4866
5084
  price: UInt32.from(price),
4867
5085
  supply: UInt16.from(supply),
4868
5086
  });
4869
5087
  }
4870
5088
  function marketPrices(location, gameSeed, state) {
4871
- return getGoods().map((good) => marketPrice(location, good.id, gameSeed, state));
5089
+ return getItems().map((item) => marketPrice(location, item.id, gameSeed, state));
4872
5090
  }
4873
5091
 
4874
5092
  class LocationsManager extends BaseManager {
@@ -4892,15 +5110,15 @@ class LocationsManager extends BaseManager {
4892
5110
  const supplyMap = new Map();
4893
5111
  for (const row of supplyRows) {
4894
5112
  if (UInt64.from(row.epoch).equals(state.epoch)) {
4895
- supplyMap.set(Number(row.good_id), Number(row.supply));
5113
+ supplyMap.set(Number(row.item_id), Number(row.supply));
4896
5114
  }
4897
5115
  }
4898
5116
  return prices.map((price) => {
4899
5117
  const actualSupply = supplyMap.get(Number(price.id));
4900
5118
  if (actualSupply !== undefined) {
4901
- return GoodPrice.from({
5119
+ return ItemPrice.from({
4902
5120
  id: price.id,
4903
- good: price.good,
5121
+ item: price.item,
4904
5122
  price: price.price,
4905
5123
  supply: UInt64.from(actualSupply),
4906
5124
  });
@@ -4970,7 +5188,7 @@ function calculateUpdatedCargoCost(currentPaid, currentOwned, purchaseCost, purc
4970
5188
  }
4971
5189
  function calculateMaxTradeQuantity(ship, player, goodPrice) {
4972
5190
  const pricePerUnit = UInt32.from(goodPrice.price);
4973
- const massPerUnit = UInt32.from(goodPrice.good.mass);
5191
+ const massPerUnit = UInt32.from(goodPrice.item.mass);
4974
5192
  const spaceForQuantity = ship.availableCapacity.dividing(massPerUnit);
4975
5193
  const affordableQuantity = player.balance.dividing(pricePerUnit);
4976
5194
  const maxQuantity = spaceForQuantity.lt(affordableQuantity)
@@ -5003,7 +5221,7 @@ function calculateProfitPerSecond(profit, travelTimeSeconds) {
5003
5221
  const t = UInt32.from(travelTimeSeconds);
5004
5222
  return t.gt(UInt32.zero) ? Number(profit) / Number(t) : 0;
5005
5223
  }
5006
- function findBestGoodToTrade(ship, player, originPrices, destPrices, travelTimeSeconds) {
5224
+ function findBestItemToTrade(ship, player, originPrices, destPrices, travelTimeSeconds) {
5007
5225
  let bestTrade = null;
5008
5226
  let bestProfitPerSecond = 0;
5009
5227
  for (const originPrice of originPrices) {
@@ -5020,7 +5238,7 @@ function findBestGoodToTrade(ship, player, originPrices, destPrices, travelTimeS
5020
5238
  if (profitPerSecond > bestProfitPerSecond) {
5021
5239
  bestProfitPerSecond = profitPerSecond;
5022
5240
  bestTrade = {
5023
- good: originPrice,
5241
+ item: originPrice,
5024
5242
  quantity: calc.maxQuantity,
5025
5243
  profit: Number(tradeResult.profit),
5026
5244
  profitPerSecond,
@@ -5070,7 +5288,7 @@ async function findDealsForShip(ship, originLocation, getNearbyLocations, getMar
5070
5288
  const canAfford = balance !== undefined
5071
5289
  ? balance.dividing(originGood.price)
5072
5290
  : UInt64.from(Number.MAX_SAFE_INTEGER);
5073
- const canHaul = effectiveAvailableMass.dividing(originGood.good.mass);
5291
+ const canHaul = effectiveAvailableMass.dividing(originGood.item.mass);
5074
5292
  const supplyLimit = UInt64.from(originGood.supply);
5075
5293
  let maxQuantity = canAfford;
5076
5294
  if (canHaul.lt(maxQuantity))
@@ -5079,7 +5297,7 @@ async function findDealsForShip(ship, originLocation, getNearbyLocations, getMar
5079
5297
  maxQuantity = supplyLimit;
5080
5298
  if (maxQuantity.equals(UInt64.zero))
5081
5299
  continue;
5082
- const cargoMass = originGood.good.mass.multiplying(maxQuantity);
5300
+ const cargoMass = originGood.item.mass.multiplying(maxQuantity);
5083
5301
  const availableSpaceUInt = UInt64.from(availableSpace);
5084
5302
  const baseMass = availableSpace !== undefined
5085
5303
  ? shipCapacity.gte(availableSpaceUInt)
@@ -5102,7 +5320,7 @@ async function findDealsForShip(ship, originLocation, getNearbyLocations, getMar
5102
5320
  deals.push({
5103
5321
  origin,
5104
5322
  destination: destLocation,
5105
- good: originGood,
5323
+ item: originGood,
5106
5324
  distance,
5107
5325
  supply: originGood.supply,
5108
5326
  buyPrice: originGood.price,
@@ -5132,7 +5350,7 @@ function calculateCargoMass(cargo) {
5132
5350
  let mass = UInt32.from(0);
5133
5351
  for (const c of cargo) {
5134
5352
  if (UInt64.from(c.quantity).gt(UInt64.zero)) {
5135
- const goodMass = getGood(c.good_id).mass;
5353
+ const goodMass = getItem(c.item_id).mass;
5136
5354
  mass = mass.adding(goodMass.multiplying(c.quantity));
5137
5355
  }
5138
5356
  }
@@ -5154,7 +5372,7 @@ function analyzeCargoSale(cargo, prices) {
5154
5372
  for (const c of cargo) {
5155
5373
  if (UInt64.from(c.quantity).equals(UInt64.zero))
5156
5374
  continue;
5157
- const goodId = Number(c.good_id);
5375
+ const goodId = Number(c.item_id);
5158
5376
  const salePrice = prices.get(goodId);
5159
5377
  if (salePrice) {
5160
5378
  revenue = revenue.adding(UInt64.from(salePrice).multiplying(c.quantity));
@@ -5172,15 +5390,15 @@ function buildCargoSaleItems(cargo, prices) {
5172
5390
  for (const c of cargo) {
5173
5391
  if (UInt64.from(c.quantity).equals(UInt64.zero))
5174
5392
  continue;
5175
- const goodId = Number(c.good_id);
5393
+ const goodId = Number(c.item_id);
5176
5394
  const salePrice = prices.get(goodId);
5177
5395
  const pricePerUnit = salePrice ? UInt32.from(salePrice) : UInt32.zero;
5178
5396
  const revenue = UInt64.from(pricePerUnit).multiplying(c.quantity);
5179
5397
  const cost = c.unit_cost.multiplying(c.quantity);
5180
5398
  const profit = Int64.from(revenue).subtracting(cost);
5181
5399
  items.push({
5182
- goodId: c.good_id,
5183
- goodName: c.good?.name ?? `Good #${goodId}`,
5400
+ goodId: c.item_id,
5401
+ goodName: c.item?.name ?? `Item #${goodId}`,
5184
5402
  quantity: UInt32.from(c.quantity),
5185
5403
  pricePerUnit,
5186
5404
  revenue,
@@ -5210,10 +5428,10 @@ function createSellAndTradeOption(saleRevenue, saleCost, deal, cargoSale, unload
5210
5428
  }
5211
5429
  : undefined;
5212
5430
  return {
5213
- id: `sell-trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.good.id}`,
5431
+ id: `sell-trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.item.id}`,
5214
5432
  type: 'sell-and-trade',
5215
- title: `Trade ${deal.good.good.name}`,
5216
- description: `Sell cargo, buy ${deal.maxQuantity} ${deal.good.good.name}, deliver to (${deal.destination.coordinates.x}, ${deal.destination.coordinates.y})`,
5433
+ title: `Trade ${deal.item.item.name}`,
5434
+ description: `Sell cargo, buy ${deal.maxQuantity} ${deal.item.item.name}, deliver to (${deal.destination.coordinates.x}, ${deal.destination.coordinates.y})`,
5217
5435
  reason: `${deal.marginPercent.toFixed(0)}% margin, ${deal.profitPerSecond.toFixed(1)}/s profit rate`,
5218
5436
  recommended: false,
5219
5437
  highestProfit: false,
@@ -5275,7 +5493,7 @@ function createSellAndRepositionOption(saleRevenue, saleCost, reposition, cargoS
5275
5493
  id: `sell-reposition-${reposition.location.coordinates.x}-${reposition.location.coordinates.y}`,
5276
5494
  type: 'sell-and-reposition',
5277
5495
  title: 'Sell & Move',
5278
- description: `Sell cargo here, travel empty to buy ${deal.good.good.name}`,
5496
+ description: `Sell cargo here, travel empty to buy ${deal.item.item.name}`,
5279
5497
  reason: `No good trades here — ${deal.marginPercent.toFixed(0)}% margin trade available at destination`,
5280
5498
  recommended: false,
5281
5499
  highestProfit: false,
@@ -5394,9 +5612,9 @@ async function analyzeCollectOptions(ship, arrivedAt, callbacks, options = {}) {
5394
5612
  availableSpace: Number(ship.maxCapacity),
5395
5613
  });
5396
5614
  if (hasCargo && dealsAtOrigin.length > 0) {
5397
- const cargoGoodIds = new Set(cargo.map((c) => Number(c.good_id)));
5615
+ const cargoGoodIds = new Set(cargo.map((c) => Number(c.item_id)));
5398
5616
  for (const deal of dealsAtOrigin.slice(0, 3)) {
5399
- const dealGoodId = Number(deal.good.id);
5617
+ const dealGoodId = Number(deal.item.id);
5400
5618
  if (cargoGoodIds.has(dealGoodId)) {
5401
5619
  continue;
5402
5620
  }
@@ -5493,10 +5711,10 @@ async function analyzeCollectOptions(ship, arrivedAt, callbacks, options = {}) {
5493
5711
  if (!hasCargo && dealsAtOrigin.length > 0) {
5494
5712
  for (const deal of dealsAtOrigin.slice(0, 3)) {
5495
5713
  const option = {
5496
- id: `trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.good.id}`,
5714
+ id: `trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.item.id}`,
5497
5715
  type: 'sell-and-trade',
5498
- title: `Trade ${deal.good.good.name}`,
5499
- description: `Buy ${deal.maxQuantity} ${deal.good.good.name}, deliver to (${deal.destination.coordinates.x}, ${deal.destination.coordinates.y})`,
5716
+ title: `Trade ${deal.item.item.name}`,
5717
+ description: `Buy ${deal.maxQuantity} ${deal.item.item.name}, deliver to (${deal.destination.coordinates.x}, ${deal.destination.coordinates.y})`,
5500
5718
  reason: `${deal.marginPercent.toFixed(0)}% margin, ${deal.profitPerSecond.toFixed(1)}/s profit rate`,
5501
5719
  recommended: false,
5502
5720
  highestProfit: false,
@@ -5534,7 +5752,7 @@ async function analyzeCollectOptions(ship, arrivedAt, callbacks, options = {}) {
5534
5752
  let discountedGood;
5535
5753
  let bestDiscount = 0;
5536
5754
  if (gameSeed && state) {
5537
- const allGoods = getGoods();
5755
+ const allGoods = getItems();
5538
5756
  for (const good of allGoods) {
5539
5757
  const rarity = getRarity(gameSeed, state.seed, dest.coordinates, good.id);
5540
5758
  if (rarity.minMultiplier < 1.0) {
@@ -5562,8 +5780,8 @@ async function analyzeCollectOptions(ship, arrivedAt, callbacks, options = {}) {
5562
5780
  }
5563
5781
  const destDeals = await findDealsForShip(ship, dest.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, { maxDeals: 2 });
5564
5782
  const potentialDeals = destDeals.map((d) => ({
5565
- goodId: Number(d.good.id),
5566
- goodName: d.good.good.name,
5783
+ goodId: Number(d.item.id),
5784
+ goodName: d.item.item.name,
5567
5785
  destinationCoords: d.destination.coordinates,
5568
5786
  marginPercent: d.marginPercent,
5569
5787
  profitPerSecond: d.profitPerSecond,
@@ -5649,9 +5867,9 @@ class TradesManager extends BaseManager {
5649
5867
  const result = prices.map((price) => {
5650
5868
  const actualSupply = locationWithSupply.getSupply(price.id);
5651
5869
  if (actualSupply !== undefined) {
5652
- return GoodPrice.from({
5870
+ return ItemPrice.from({
5653
5871
  id: price.id,
5654
- good: price.good,
5872
+ item: price.item,
5655
5873
  price: price.price,
5656
5874
  supply: actualSupply,
5657
5875
  });
@@ -5776,23 +5994,23 @@ class ActionsManager extends BaseManager {
5776
5994
  source_id: UInt64.from(sourceId),
5777
5995
  dest_type: destType,
5778
5996
  dest_id: UInt64.from(destId),
5779
- good_id: UInt16.from(goodId),
5997
+ item_id: UInt16.from(goodId),
5780
5998
  quantity: UInt32.from(quantity),
5781
5999
  });
5782
6000
  }
5783
- buyGoods(entityId, goodId, quantity, entityType = EntityType.SHIP) {
5784
- return this.server.action('buygoods', {
6001
+ buyItems(entityId, goodId, quantity, entityType = EntityType.SHIP) {
6002
+ return this.server.action('buyitems', {
5785
6003
  entity_type: entityType,
5786
6004
  id: UInt64.from(entityId),
5787
- good_id: UInt16.from(goodId),
6005
+ item_id: UInt16.from(goodId),
5788
6006
  quantity: UInt32.from(quantity),
5789
6007
  });
5790
6008
  }
5791
- sellGoods(entityId, goodId, quantity, entityType = EntityType.SHIP) {
5792
- return this.server.action('sellgoods', {
6009
+ sellItems(entityId, goodId, quantity, entityType = EntityType.SHIP) {
6010
+ return this.server.action('sellitems', {
5793
6011
  entity_type: entityType,
5794
6012
  id: UInt64.from(entityId),
5795
- good_id: UInt16.from(goodId),
6013
+ item_id: UInt16.from(goodId),
5796
6014
  quantity: UInt32.from(quantity),
5797
6015
  });
5798
6016
  }
@@ -5844,6 +6062,16 @@ class ActionsManager extends BaseManager {
5844
6062
  ship_id: UInt64.from(shipId),
5845
6063
  });
5846
6064
  }
6065
+ warp(shipId, destination) {
6066
+ const x = Int64.from(destination.x);
6067
+ const y = Int64.from(destination.y);
6068
+ return this.server.action('warp', {
6069
+ entity_type: EntityType.SHIP,
6070
+ id: UInt64.from(shipId),
6071
+ x,
6072
+ y,
6073
+ });
6074
+ }
5847
6075
  joinGame(account, companyName) {
5848
6076
  return [this.foundCompany(account, companyName), this.join(account)];
5849
6077
  }
@@ -5861,7 +6089,7 @@ class ActionsManager extends BaseManager {
5861
6089
  const shipId = ship instanceof Ship ? ship.id : UInt64.from(ship);
5862
6090
  return shipCargo
5863
6091
  .filter((c) => c.hasCargo)
5864
- .map((c) => this.sellGoods(shipId, c.good_id, c.quantity, EntityType.SHIP));
6092
+ .map((c) => this.sellItems(shipId, c.item_id, c.quantity, EntityType.SHIP));
5865
6093
  }
5866
6094
  }
5867
6095
 
@@ -6070,6 +6298,219 @@ function makeContainer(state) {
6070
6298
  return new Container(entityInfo);
6071
6299
  }
6072
6300
 
6301
+ const DEPTH_THRESHOLD_COMMON = 0;
6302
+ const DEPTH_THRESHOLD_UNCOMMON = 2000;
6303
+ const DEPTH_THRESHOLD_RARE = 10000;
6304
+ const DEPTH_THRESHOLD_EPIC = 30000;
6305
+ const DEPTH_THRESHOLD_LEGENDARY = 55000;
6306
+ const LOCATION_MIN_DEPTH = 500;
6307
+ const LOCATION_MAX_DEPTH = 65535;
6308
+ const YIELD_THRESHOLD = Math.floor(0.003 * 0xffffffff);
6309
+ const PLANET_SUBTYPE_GAS_GIANT = 0;
6310
+ const PLANET_SUBTYPE_ROCKY = 1;
6311
+ const PLANET_SUBTYPE_TERRESTRIAL = 2;
6312
+ const PLANET_SUBTYPE_ICY = 3;
6313
+ const PLANET_SUBTYPE_OCEAN = 4;
6314
+ const PLANET_SUBTYPE_INDUSTRIAL = 5;
6315
+ const RESOURCE_CATALOG = [
6316
+ { id: 26, rarity: 'common' },
6317
+ { id: 1, rarity: 'common' },
6318
+ { id: 14, rarity: 'common' },
6319
+ { id: 6, rarity: 'common' },
6320
+ { id: 29, rarity: 'uncommon' },
6321
+ { id: 2, rarity: 'uncommon' },
6322
+ { id: 1000, rarity: 'uncommon' },
6323
+ { id: 1003, rarity: 'uncommon' },
6324
+ { id: 22, rarity: 'rare' },
6325
+ { id: 18, rarity: 'rare' },
6326
+ { id: 1001, rarity: 'rare' },
6327
+ { id: 1002, rarity: 'rare' },
6328
+ { id: 74, rarity: 'epic' },
6329
+ { id: 54, rarity: 'epic' },
6330
+ ];
6331
+ function getDepthThreshold(rarity) {
6332
+ switch (rarity) {
6333
+ case 'common':
6334
+ return DEPTH_THRESHOLD_COMMON;
6335
+ case 'uncommon':
6336
+ return DEPTH_THRESHOLD_UNCOMMON;
6337
+ case 'rare':
6338
+ return DEPTH_THRESHOLD_RARE;
6339
+ case 'epic':
6340
+ return DEPTH_THRESHOLD_EPIC;
6341
+ case 'legendary':
6342
+ return DEPTH_THRESHOLD_LEGENDARY;
6343
+ }
6344
+ }
6345
+ function getResourceRarity(itemId) {
6346
+ const entry = RESOURCE_CATALOG.find((r) => r.id === itemId);
6347
+ return entry ? entry.rarity : 'legendary';
6348
+ }
6349
+ function getResourceWeight(itemId, stratum) {
6350
+ const rarity = getResourceRarity(itemId);
6351
+ const threshold = getDepthThreshold(rarity);
6352
+ if (stratum < threshold)
6353
+ return 0;
6354
+ const depthAbove = stratum - threshold;
6355
+ switch (rarity) {
6356
+ case 'common':
6357
+ if (stratum < 2000)
6358
+ return 100;
6359
+ if (stratum < 10000)
6360
+ return 80;
6361
+ if (stratum < 30000)
6362
+ return 50;
6363
+ return 30;
6364
+ case 'uncommon':
6365
+ if (depthAbove < 3000)
6366
+ return 40;
6367
+ if (depthAbove < 8000)
6368
+ return 60;
6369
+ return 50;
6370
+ case 'rare':
6371
+ if (depthAbove < 5000)
6372
+ return 20;
6373
+ if (depthAbove < 15000)
6374
+ return 35;
6375
+ return 40;
6376
+ case 'epic':
6377
+ if (depthAbove < 10000)
6378
+ return 10;
6379
+ if (depthAbove < 25000)
6380
+ return 20;
6381
+ return 30;
6382
+ case 'legendary':
6383
+ return 10;
6384
+ }
6385
+ }
6386
+ const ASTEROID_RESOURCES = [26, 29, 22, 74, 14, 1000, 1001];
6387
+ const NEBULA_RESOURCES = [1, 2, 18, 54];
6388
+ const GAS_GIANT_RESOURCES = [1, 2, 18, 54];
6389
+ const ROCKY_RESOURCES = [26, 29, 22, 74, 6, 1003, 1002];
6390
+ const TERRESTRIAL_RESOURCES = [6, 1003, 1002, 1001];
6391
+ const ICY_RESOURCES = [6, 14, 1000, 1001, 18];
6392
+ const OCEAN_RESOURCES = [1, 2, 1003, 1002];
6393
+ const INDUSTRIAL_RESOURCES = [26, 29, 22, 74, 14, 1000, 54];
6394
+ function getLocationCandidates(locationType, subtype) {
6395
+ if (locationType === 2)
6396
+ return ASTEROID_RESOURCES;
6397
+ if (locationType === 3)
6398
+ return NEBULA_RESOURCES;
6399
+ if (locationType === 1) {
6400
+ switch (subtype) {
6401
+ case PLANET_SUBTYPE_GAS_GIANT:
6402
+ return GAS_GIANT_RESOURCES;
6403
+ case PLANET_SUBTYPE_ROCKY:
6404
+ return ROCKY_RESOURCES;
6405
+ case PLANET_SUBTYPE_TERRESTRIAL:
6406
+ return TERRESTRIAL_RESOURCES;
6407
+ case PLANET_SUBTYPE_ICY:
6408
+ return ICY_RESOURCES;
6409
+ case PLANET_SUBTYPE_OCEAN:
6410
+ return OCEAN_RESOURCES;
6411
+ case PLANET_SUBTYPE_INDUSTRIAL:
6412
+ return INDUSTRIAL_RESOURCES;
6413
+ }
6414
+ }
6415
+ return [];
6416
+ }
6417
+ function getEligibleResources(locationType, subtype, stratum) {
6418
+ const candidates = getLocationCandidates(locationType, subtype);
6419
+ return candidates.filter((itemId) => {
6420
+ const rarity = getResourceRarity(itemId);
6421
+ const threshold = getDepthThreshold(rarity);
6422
+ return stratum >= threshold;
6423
+ });
6424
+ }
6425
+ function depthScaleFactor(stratum) {
6426
+ if (stratum <= 1)
6427
+ return 1.0;
6428
+ const logScale = Math.log(stratum) / Math.log(65535);
6429
+ return 1.0 + logScale * 2.0;
6430
+ }
6431
+
6432
+ function deriveStratum(epochSeed, coords, stratum, locationType, subtype, _maxDepth) {
6433
+ const seed = Checksum256.from(epochSeed);
6434
+ const c = Coordinates.from(coords);
6435
+ const input = `stratum-${c.x}-${c.y}-${stratum}`;
6436
+ const hashResult = hash512(seed, input);
6437
+ const bytes = hashResult.array;
6438
+ const rawReserve = ((bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]) >>> 0;
6439
+ let reserve = 0;
6440
+ if (rawReserve <= YIELD_THRESHOLD) {
6441
+ const baseReserve = (rawReserve % 333) + 1;
6442
+ const scale = depthScaleFactor(stratum);
6443
+ reserve = Math.floor(baseReserve * scale);
6444
+ }
6445
+ if (reserve === 0)
6446
+ return { itemId: 0, seed: 0n, richness: 0, reserve: 0 };
6447
+ const eligible = getEligibleResources(locationType, subtype, stratum);
6448
+ if (eligible.length === 0)
6449
+ return { itemId: 0, seed: 0n, richness: 0, reserve: 0 };
6450
+ const resourceRoll = ((bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7]) >>> 0;
6451
+ let totalWeight = 0;
6452
+ for (const id of eligible) {
6453
+ totalWeight += getResourceWeight(id, stratum);
6454
+ }
6455
+ let selectedItemId = eligible[0];
6456
+ if (totalWeight > 0) {
6457
+ const roll = resourceRoll % totalWeight;
6458
+ let cumulative = 0;
6459
+ for (const id of eligible) {
6460
+ cumulative += getResourceWeight(id, stratum);
6461
+ if (roll < cumulative) {
6462
+ selectedItemId = id;
6463
+ break;
6464
+ }
6465
+ }
6466
+ }
6467
+ const seedBigInt = (BigInt(bytes[8]) << 56n) |
6468
+ (BigInt(bytes[9]) << 48n) |
6469
+ (BigInt(bytes[10]) << 40n) |
6470
+ (BigInt(bytes[11]) << 32n) |
6471
+ (BigInt(bytes[12]) << 24n) |
6472
+ (BigInt(bytes[13]) << 16n) |
6473
+ (BigInt(bytes[14]) << 8n) |
6474
+ BigInt(bytes[15]);
6475
+ const rawRichness = (bytes[16] << 8) | bytes[17];
6476
+ const normalized = rawRichness / 65535;
6477
+ const baseRichness = Math.floor(normalized * normalized * 999) + 1;
6478
+ let depthBonus = 0;
6479
+ if (stratum > 1) {
6480
+ depthBonus = 50 * Math.log(stratum) / Math.log(65535);
6481
+ }
6482
+ const richness = Math.min(Math.floor(baseRichness + depthBonus), 1000);
6483
+ return { itemId: selectedItemId, seed: seedBigInt, richness, reserve };
6484
+ }
6485
+ function deriveResourceStats(seed) {
6486
+ const seedStr = seed.toString();
6487
+ const encoder = new TextEncoder();
6488
+ const data = encoder.encode(seedStr);
6489
+ const hashResult = Checksum256.hash(Bytes.from(data));
6490
+ const hashBytes = hashResult.array;
6491
+ const extractU32 = (offset) => ((hashBytes[offset] << 24) |
6492
+ (hashBytes[offset + 1] << 16) |
6493
+ (hashBytes[offset + 2] << 8) |
6494
+ hashBytes[offset + 3]) >>>
6495
+ 0;
6496
+ return {
6497
+ purity: (extractU32(0) % 1000) + 1,
6498
+ density: (extractU32(4) % 1000) + 1,
6499
+ reactivity: (extractU32(8) % 1000) + 1,
6500
+ resonance: (extractU32(12) % 1000) + 1,
6501
+ };
6502
+ }
6503
+
6504
+ function deriveLocationSize(loc) {
6505
+ if (loc.type.toNumber() === LocationType.EMPTY)
6506
+ return 0;
6507
+ const raw = (loc.seed0.toNumber() << 8) | loc.seed1.toNumber();
6508
+ const normalized = raw / 65535;
6509
+ const curved = Math.pow(normalized, 3.0);
6510
+ const range = LOCATION_MAX_DEPTH - LOCATION_MIN_DEPTH;
6511
+ return Math.floor(LOCATION_MIN_DEPTH + curved * range);
6512
+ }
6513
+
6073
6514
  function canMove(e) {
6074
6515
  return 'engines' in e && 'generator' in e && 'energy' in e;
6075
6516
  }
@@ -6102,24 +6543,21 @@ function calcLoadDuration(entity, cargoMass) {
6102
6543
  return UInt32.from(Math.ceil(Number(cargoMass) / totalThrust));
6103
6544
  }
6104
6545
 
6105
- function calc_load_time_internal(loaders, shipZ, cargoMass) {
6106
- if (cargoMass === 0 || loaders.quantity.toNumber() === 0 || loaders.thrust.toNumber() === 0) {
6107
- return 0;
6108
- }
6109
- const totalMass = cargoMass + loaders.mass.toNumber();
6110
- const acceleration = (loaders.thrust.toNumber() / totalMass) * PRECISION;
6111
- const flightTime = Math.floor(2 * Math.sqrt(shipZ / acceleration));
6112
- return Math.floor(flightTime / loaders.quantity.toNumber());
6113
- }
6114
- function calc_extraction_duration(extractor, loaders, shipZ, batchMass) {
6115
- const extractionTime = Math.floor(batchMass / extractor.rate.toNumber());
6116
- const loadingTime = calc_load_time_internal(loaders, shipZ, batchMass);
6117
- return UInt32.from(Math.max(extractionTime, loadingTime));
6546
+ function calc_extraction_duration(extractor, cargoMass, stratum, richness) {
6547
+ const rate = extractor.rate.toNumber();
6548
+ const efficiency = extractor.efficiency.toNumber();
6549
+ const drill = extractor.drill.toNumber();
6550
+ const rateProduct = Math.floor((rate * richness * efficiency) / PRECISION);
6551
+ if (rateProduct === 0)
6552
+ return UInt32.from(0);
6553
+ const extractionTime = Math.floor((cargoMass * PRECISION) / rateProduct);
6554
+ const drillTime = Math.floor(stratum / drill);
6555
+ return UInt32.from(extractionTime + drillTime);
6118
6556
  }
6119
6557
  function calc_extraction_energy(extractor, duration) {
6120
6558
  const energy = Math.floor((duration * extractor.drain.toNumber()) / PRECISION);
6121
6559
  return UInt16.from(energy);
6122
6560
  }
6123
6561
 
6124
- export { ActionsManager, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, CONTAINER_Z, Container, Coordinates, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, EntityInventory, EntityType, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GOOD_DOES_NOT_EXIST, GOOD_NOT_AVAILABLE_AT_LOCATION, GameState, Good, GoodPrice, INITIAL_CONTAINER_CAPACITY, INITIAL_CONTAINER_HULLMASS, INITIAL_EXTRACTOR_DRAIN, INITIAL_EXTRACTOR_EFFICIENCY, INITIAL_EXTRACTOR_RATE, INITIAL_LOADER_MASS, INITIAL_LOADER_QUANTITY, INITIAL_LOADER_THRUST, INITIAL_SHIP_CAPACITY, INITIAL_SHIP_DRAIN, INITIAL_SHIP_ENERGY, INITIAL_SHIP_GENERATOR_CAPACITY, INITIAL_SHIP_HULLMASS, INITIAL_SHIP_MASS, INITIAL_SHIP_RECHARGE, INITIAL_SHIP_THRUST, INITIAL_SHIP_Z, INITIAL_WAREHOUSE_CAPACITY, INSUFFICIENT_BALANCE, INSUFFICIENT_GOOD_QUANTITY, INSUFFICIENT_GOOD_SUPPLY, INVALID_AMOUNT, InventoryAccessor, Location, LocationType, LocationsManager, MAX_ORBITAL_ALTITUDE, MIN_ORBITAL_ALTITUDE, NO_SCHEDULE, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PRECISION, platform as PlatformContract, Player, PlayersManager, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, Rarities, SHIP_ALREADY_THERE, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_CARGO_NOT_LOADED, SHIP_CARGO_NOT_OWNED, SHIP_INVALID_CARGO, SHIP_INVALID_DESTINATION, SHIP_INVALID_TRAVEL_DURATION, SHIP_NOT_ARRIVED, SHIP_NOT_ENOUGH_ENERGY, SHIP_NOT_ENOUGH_ENERGY_CAPACITY, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, ScheduleAccessor, server as ServerContract, Ship, Shipload, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, TradesManager, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_CAPACITY_EXCEEDED, WAREHOUSE_NOT_FOUND, WAREHOUSE_Z, Warehouse, analyzeCargoSale, analyzeCollectOptions, availableCapacity$1 as availableCapacity, availableCapacityFromMass, calcCargoMass, calcCargoValue, calcEnergyUsage, calcLoadDuration, calc_acceleration, calc_energyusage, calc_extraction_duration, calc_extraction_energy, calc_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calculateBreakEvenPrice, calculateFlightTime, calculateLoadTimeBreakdown, calculateMaxTradeQuantity, calculateProfitPerMass, calculateProfitPerSecond, calculateROI, calculateRefuelingTime, calculateTradeProfit, calculateTransferTime, calculateUpdatedCargoCost, canMove, capsHasExtractor, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, capsHasTrade, cargoUtils, coordsToLocationId, createExploreOption, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, createSellAndRepositionOption, createSellAndStayOption, createSellAndTradeOption, createTravelToSellOption, Shipload as default, deriveLocation, deriveLocationEpoch, deriveLocationMixture, deriveLocationStatic, distanceBetweenCoordinates, distanceBetweenPoints, energyPercent, estimateDealTravelTime, estimateTravelTime, findBestDeal, findBestGoodToTrade, findDealsForShip, findNearbyPlanets, getCurrentEpoch, getDestinationLocation, getEpochInfo, getFlightOrigin, getGood, getGoods, getLocationType, getPositionAt, getRarity, getSystemName, goodIds, hasEnergy, hasEnergyForDistance$1 as hasEnergyForDistance, hasExtractor, hasLoaders, hasMass, hasSchedule, hasSpace$1 as hasSpace, hasSpaceForMass, hasStorage, hasSystem, hasTrade, hash, hash512, isExtractableLocation, isFull$1 as isFull, isFullFromMass, isProfitable, lerp, makeContainer, makeShip, makeWarehouse, marketPrice, marketPrices, maxTravelDistance, needsRecharge, projectEntity, projectEntityAt, rotation, schedule, toLocation };
6562
+ export { ActionsManager, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, CONTAINER_Z, Container, Coordinates, DEPTH_THRESHOLD_COMMON, DEPTH_THRESHOLD_EPIC, DEPTH_THRESHOLD_LEGENDARY, DEPTH_THRESHOLD_RARE, DEPTH_THRESHOLD_UNCOMMON, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, EntityInventory, EntityType, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GameState, INITIAL_CONTAINER_CAPACITY, INITIAL_CONTAINER_HULLMASS, INITIAL_EXTRACTOR_DRAIN, INITIAL_EXTRACTOR_EFFICIENCY, INITIAL_EXTRACTOR_RATE, INITIAL_LOADER_MASS, INITIAL_LOADER_QUANTITY, INITIAL_LOADER_THRUST, INITIAL_SHIP_CAPACITY, INITIAL_SHIP_DRAIN, INITIAL_SHIP_ENERGY, INITIAL_SHIP_GENERATOR_CAPACITY, INITIAL_SHIP_HULLMASS, INITIAL_SHIP_MASS, INITIAL_SHIP_RECHARGE, INITIAL_SHIP_THRUST, INITIAL_SHIP_Z, INITIAL_WAREHOUSE_CAPACITY, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_DOES_NOT_EXIST, ITEM_NOT_AVAILABLE_AT_LOCATION, InventoryAccessor, Item, ItemPrice, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_ORBITAL_ALTITUDE, MIN_ORBITAL_ALTITUDE, NO_SCHEDULE, 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, PRECISION, platform as PlatformContract, Player, PlayersManager, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, Rarities, SHIP_ALREADY_THERE, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_CARGO_NOT_LOADED, SHIP_CARGO_NOT_OWNED, SHIP_INVALID_CARGO, SHIP_INVALID_DESTINATION, SHIP_INVALID_TRAVEL_DURATION, SHIP_NOT_ARRIVED, SHIP_NOT_ENOUGH_ENERGY, SHIP_NOT_ENOUGH_ENERGY_CAPACITY, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, ScheduleAccessor, server as ServerContract, Ship, Shipload, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, TradesManager, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_CAPACITY_EXCEEDED, WAREHOUSE_NOT_FOUND, WAREHOUSE_Z, Warehouse, analyzeCargoSale, analyzeCollectOptions, availableCapacity$1 as availableCapacity, availableCapacityFromMass, calcCargoMass, calcCargoValue, calcEnergyUsage, calcLoadDuration, calc_acceleration, calc_energyusage, calc_extraction_duration, calc_extraction_energy, calc_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calculateBreakEvenPrice, calculateFlightTime, calculateLoadTimeBreakdown, calculateMaxTradeQuantity, calculateProfitPerMass, calculateProfitPerSecond, calculateROI, calculateRefuelingTime, calculateTradeProfit, calculateTransferTime, calculateUpdatedCargoCost, canMove, capsHasExtractor, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, capsHasTrade, cargoUtils, coordsToLocationId, createExploreOption, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, createSellAndRepositionOption, createSellAndStayOption, createSellAndTradeOption, createTravelToSellOption, Shipload as default, depthScaleFactor, deriveLocation, deriveLocationEpoch, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStratum, distanceBetweenCoordinates, distanceBetweenPoints, energyPercent, estimateDealTravelTime, estimateTravelTime, findBestDeal, findBestItemToTrade, findDealsForShip, findNearbyPlanets, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEligibleResources, getEpochInfo, getFlightOrigin, getItem, getItems, getLocationCandidates, getLocationType, getPositionAt, getRarity, getResourceRarity, getResourceWeight, getSystemName, hasEnergy, hasEnergyForDistance$1 as hasEnergyForDistance, hasExtractor, hasLoaders, hasMass, hasSchedule, hasSpace$1 as hasSpace, hasSpaceForMass, hasStorage, hasSystem, hasTrade, hash, hash512, isExtractableLocation, isFull$1 as isFull, isFullFromMass, isProfitable, itemIds, lerp, makeContainer, makeShip, makeWarehouse, marketPrice, marketPrices, maxTravelDistance, needsRecharge, projectEntity, projectEntityAt, rotation, schedule, toLocation };
6125
6563
  //# sourceMappingURL=shipload.m.js.map