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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/lib/shipload.d.ts +470 -157
  2. package/lib/shipload.js +2309 -492
  3. package/lib/shipload.js.map +1 -1
  4. package/lib/shipload.m.js +2279 -491
  5. package/lib/shipload.m.js.map +1 -1
  6. package/lib/testing.d.ts +123 -8
  7. package/lib/testing.js +450 -19
  8. package/lib/testing.js.map +1 -1
  9. package/lib/testing.m.js +451 -20
  10. package/lib/testing.m.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/capabilities/crafting.ts +10 -1
  13. package/src/capabilities/gathering.ts +1 -1
  14. package/src/capabilities/hauling.ts +0 -5
  15. package/src/capabilities/modules.ts +6 -0
  16. package/src/capabilities/movement.ts +1 -1
  17. package/src/contracts/server.ts +293 -13
  18. package/src/data/capabilities.ts +11 -2
  19. package/src/data/entities.json +235 -20
  20. package/src/data/item-ids.ts +10 -0
  21. package/src/data/items.json +61 -0
  22. package/src/data/kind-registry.json +53 -1
  23. package/src/data/kind-registry.ts +5 -0
  24. package/src/data/metadata.ts +74 -5
  25. package/src/data/recipes-runtime.ts +1 -0
  26. package/src/data/recipes.json +887 -118
  27. package/src/derivation/capabilities.test.ts +81 -4
  28. package/src/derivation/capabilities.ts +162 -57
  29. package/src/derivation/crafting.ts +2 -0
  30. package/src/derivation/recipe-usage.test.ts +10 -7
  31. package/src/derivation/rollups.ts +16 -0
  32. package/src/derivation/stat-scaling.ts +12 -0
  33. package/src/entities/makers.ts +10 -1
  34. package/src/index-module.ts +29 -3
  35. package/src/managers/actions.ts +77 -46
  36. package/src/managers/construction-types.ts +2 -2
  37. package/src/managers/construction.ts +15 -15
  38. package/src/managers/plot.ts +1 -1
  39. package/src/nft/buildImmutableData.ts +55 -9
  40. package/src/nft/description.ts +99 -36
  41. package/src/planner/planner.test.ts +50 -41
  42. package/src/resolution/resolve-item.test.ts +1 -1
  43. package/src/resolution/resolve-item.ts +26 -11
  44. package/src/scheduling/availability.ts +7 -6
  45. package/src/scheduling/cancel.test.ts +40 -6
  46. package/src/scheduling/cancel.ts +21 -29
  47. package/src/scheduling/jobs.ts +71 -0
  48. package/src/scheduling/lanes.ts +29 -0
  49. package/src/scheduling/projection.ts +42 -25
  50. package/src/scheduling/task-cargo.ts +1 -1
  51. package/src/testing/projection-parity.ts +2 -2
  52. package/src/travel/reach.ts +4 -6
  53. package/src/travel/route-planner.ts +60 -49
  54. package/src/travel/route-simulator.ts +3 -7
  55. package/src/travel/travel.ts +14 -5
  56. package/src/types/capabilities.ts +9 -3
  57. package/src/types.ts +5 -3
  58. package/src/managers/flatten-gather-plan.test.ts +0 -80
package/lib/shipload.js CHANGED
@@ -448,7 +448,7 @@ var platform = /*#__PURE__*/Object.freeze({
448
448
  Contract: Contract$1
449
449
  });
450
450
 
451
- const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDjBAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQlidWlsZHBsb3QAAgpidWlsZGVyX2lkBnVpbnQ2NAdwbG90X2lkBnVpbnQ2NAZjYW5jZWwAAwJpZAZ1aW50NjQIbGFuZV9rZXkFdWludDgFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8JY2xhaW1fcm93AAEFb3duZXIEbmFtZQljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4BmNvbW1pdAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZjb21taXQLY2hlY2tzdW0yNTYKY29tbWl0X3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8FY3JhZnQABgJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwxjcmFmdGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQADAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmBHNsb3QNY2x1c3Rlcl9zbG90PwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDMyCHJlY2hhcmdlBnVpbnQzMhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MzIPZW50aXR5X2RlZmF1bHRzAAILd2FyZWhvdXNlX3oGdWludDE2C2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAWBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXRlbV9pZAZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDMyPwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPw5nYXRoZXJlcl9sYW5lcw9nYXRoZXJlcl9sYW5lW10NY3JhZnRlcl9sYW5lcw5jcmFmdGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ1lbnRpdHlfbGF5b3V0AAIOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10VZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKZW50aXR5X3JvdwAMAmlkBnVpbnQ2NAVvd25lcgRuYW1lBGtpbmQEbmFtZQdpdGVtX2lkBnVpbnQxNgRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdBWxhbmVzBmxhbmVbXQVob2xkcwZob2xkW10OZW50aXR5X3NlcV9yb3cAAQduZXh0X2lkBnVpbnQ2NA5lbnRpdHlfc3VtbWFyeQAIBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXNfaWRsZQRib29sDnJlc29sdmVkX2NvdW50BnVpbnQzMg1wZW5kaW5nX2NvdW50BnVpbnQzMhBlbnRpdHlfdGFza19pbmZvAAQJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lCnRhc2tfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdC2VudW1fbWVtYmVyAAIFdmFsdWUFdWludDgEbmFtZQZzdHJpbmcLZW51bV9yZXN1bHQAAQdtZW1iZXJzDWVudW1fbWVtYmVyW10JZXBvY2hfcm93AAQFZXBvY2gGdWludDY0Cm9yYWNsZV9pZHMGbmFtZVtdCXRocmVzaG9sZAV1aW50OARzZWVkC2NoZWNrc3VtMjU2DGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQQZm9vdHByaW50X3Jlc3VsdAABBWNlbGxzC2dyaWRfY2VsbFtdC2ZvcmNlcmV2ZWFsAAEFZXBvY2gGdWludDY0C2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAUJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyBHNsb3QGdWludDg/DWdhdGhlcmVyX2xhbmUABQpzbG90X2luZGV4BXVpbnQ4BXlpZWxkBnVpbnQxNgVkcmFpbgZ1aW50MzIFZGVwdGgGdWludDE2Cm91dHB1dF9wY3QGdWludDE2DGdlbmVzaXNmbGVldAABCGVudGl0aWVzDGVudGl0eV9yb3dbXQpnZXRjbHVzdGVyAAEGaHViX2lkBnVpbnQ2NAlnZXRjb25maWcAAApnZXRkZXBvc2l0AAIFb3duZXIEbmFtZQhhc3NldF9pZAZ1aW50NjQLZ2V0ZGlzdGFuY2UABAJheAVpbnQ2NAJheQVpbnQ2NAJieAVpbnQ2NAJieQVpbnQ2NAtnZXRlbGlnaWJsZQACBmNvb3Jkcwtjb29yZGluYXRlcwdzdHJhdHVtBnVpbnQxNglnZXRlbnRjbHMAAAtnZXRlbnRpdGllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8JZ2V0ZW50aXR5AAEJZW50aXR5X2lkBnVpbnQ2NAxnZXRmb290cHJpbnQAAQdpdGVtX2lkBnVpbnQxNgtnZXRpdGVtZGF0YQAACmdldGl0ZW1pZHMAAAhnZXRpdGVtcwAAC2dldGl0ZW10eXBlAAEHaXRlbV9pZAZ1aW50MTYMZ2V0aXRlbXR5cGVzAAALZ2V0a2luZG1ldGEAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRiYXNlAAAKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQxnZXRwcm9qc3RhdGUAAgllbnRpdHlfaWQGdWludDY0CnRhc2tfY291bnQGdWludDg/CWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAAhnZXRzbG90cwAACmdldHN0cmF0dW0AAwF4BWludDY0AXkFaW50NjQHc3RyYXR1bQZ1aW50MTYMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtnZXR3b3JtaG9sZQACAXgFaW50NjQBeQVpbnQ2NAlncmlkX2NlbGwAAgJneARpbnQ4Amd5BGludDgMZ3JvdXB0cmFuc2l0AAUIZW50aXRpZXMMZW50aXR5X3JlZltdAmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwxoYXVsZXJfc3RhdHMABAhjYXBhY2l0eQV1aW50OAplZmZpY2llbmN5BnVpbnQxNgVkcmFpbgZ1aW50MzIQY2FwYWNpdHlfYnlfdGllchFoYXVsZXJfdGllcl9jYXBbXQ9oYXVsZXJfdGllcl9jYXAAAgR0aWVyBXVpbnQ4CGNhcGFjaXR5BXVpbnQ4BGhvbGQABQJpZAZ1aW50NjQEa2luZAV1aW50OAtjb3VudGVycGFydAplbnRpdHlfcmVmBXVudGlsCnRpbWVfcG9pbnQNaW5jb21pbmdfbWFzcwZ1aW50MzILaW1wb3J0Y2FyZ28AAQNyb3cJY2FyZ29fcm93DGltcG9ydGVudGl0eQABA3JvdwplbnRpdHlfcm93C2ltcG9ydGdyb3VwAAEDcm93D2VudGl0eWdyb3VwX3JvdwxpbXBvcnRwbGF5ZXIAAQVvd25lcgRuYW1lDWltcG9ydHJlc2VydmUAAgtlcG9jaF9zY29wZQZ1aW50MzIDcm93C3Jlc2VydmVfcm93C2ltcG9ydHN0YXRlAAEDcm93CXN0YXRlX3JvdwhpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUQa2luZF9tZXRhX3Jlc3VsdAACBWtpbmRzD2tpbmRfbWV0YV9yb3dbXQl0ZW1wbGF0ZXMTdGVtcGxhdGVfbWV0YV9yb3dbXQ1raW5kX21ldGFfcm93AAUEa2luZARuYW1lDmNsYXNzaWZpY2F0aW9uBXVpbnQ4EGNhcGFiaWxpdHlfZmxhZ3MFdWludDgHel9jb29yZAZ1aW50MzINZGVmYXVsdF9sYWJlbAZzdHJpbmcEbGFuZQACCGxhbmVfa2V5BXVpbnQ4CHNjaGVkdWxlCHNjaGVkdWxlBmxhdW5jaAADC2xhdW5jaGVyX2lkBnVpbnQ2NApjYXRjaGVyX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10ObGF1bmNoZXJfc3RhdHMAAwtjaGFyZ2VfcmF0ZQZ1aW50MTYIdmVsb2NpdHkGdWludDE2BWRyYWluBnVpbnQxNgRsb2FkAAMCaWQGdWludDY0B2Zyb21faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQtsb2FkZXJfbGFuZQAECnNsb3RfaW5kZXgFdWludDgEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNhBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwRzaXplBnVpbnQxNg1sb2NhdGlvbl9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sC2lzX3dvcm1ob2xlBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQzMghtb3ZldGlsZQAFBmh1Yl9pZAZ1aW50NjQHZnJvbV9neARpbnQ4B2Zyb21fZ3kEaW50OAV0b19neARpbnQ4BXRvX2d5BGludDgLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MzIHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8ObmZ0X2NhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIQbmZ0X2l0ZW1fcGF5bG9hZAACBGl0ZW0ObmZ0X2NhcmdvX2l0ZW0IbG9jYXRpb24MY29vcmRpbmF0ZXM/Dm5mdF9zY2hlbWFfZGVmAAILc2NoZW1hX25hbWUEbmFtZQZmaWVsZHMOc2NoZW1hX2ZpZWxkW10QbmZ0X3RlbXBsYXRlX2RlZgADB2l0ZW1faWQGdWludDE2C3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzINbmZ0Y29uZmlnX3JvdwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJbmZ0aW1ndXJsAAIEaXRlbQpjYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQRb3JhY2xlX2NvbmZpZ19yb3cAAQl0aHJlc2hvbGQFdWludDgKb3JhY2xlX3JvdwABAmlkBG5hbWUNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NApwbGFjZWNhcmdvAAMFb3duZXIEbmFtZQdob3N0X2lkBnVpbnQ2NAhhc3NldF9pZAZ1aW50NjQLcGxhY2VlbnRpdHkAAwVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA90YXJnZXRfbmV4dXNfaWQGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lD3Byb2plY3RlZF9zdGF0ZQAQBW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10MbG9hZGVyX2xhbmVzDWxvYWRlcl9sYW5lW10IbGF1bmNoZXIPbGF1bmNoZXJfc3RhdHM/BHRpZXIFdWludDgIcmVjaGFyZ2UAAQJpZAZ1aW50NjQMcmVjaXBlX2lucHV0AAIHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyEHJlY2lwZV9pdGVtX2luZm8AAgJpZAZ1aW50MTYEbWFzcwZ1aW50MzIPcmVjaXBlX3Jlc3BvbnNlAAgOb3V0cHV0X2l0ZW1faWQGdWludDE2C291dHB1dF9tYXNzBnVpbnQzMgZpbnB1dHMOcmVjaXBlX2lucHV0W10Kc3RhdF9zbG90cxRzdGF0X3Nsb3RfcmVzcG9uc2VbXQ1ibGVuZF93ZWlnaHRzBWJ5dGVzC291dHB1dF9pdGVtEHJlY2lwZV9pdGVtX2luZm8LaW5wdXRfaXRlbXMScmVjaXBlX2l0ZW1faW5mb1tdD3NvdXJjZV9zdWJjbGFzcwd1aW50MTY/DnJlY2lwZXNfcmVzdWx0AAEHcmVjaXBlcxFyZWNpcGVfcmVzcG9uc2VbXQxyZWZyc2hlbnRpdHkAAQllbnRpdHlfaWQGdWludDY0DHJlbW92ZW9yYWNsZQABCW9yYWNsZV9pZARuYW1lBnJlbmFtZQACAmlkBnVpbnQ2NARuYW1lBnN0cmluZwtyZXNlcnZlX3JvdwAFAmlkBnVpbnQ2NAhjb29yZF9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlB3Jlc29sdmUAAgJpZAZ1aW50NjQFY291bnQHdWludDY0Pw9yZXNvbHZlX3Jlc3VsdHMABgllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUOcmVzb2x2ZWRfY291bnQGdWludDMyFG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CnJlc29sdmVhbGwAAQVvd25lcgRuYW1lEnJlc29sdmVhbGxfcmVzdWx0cwACB3NjYW5uZWQGdWludDMyCHJlc29sdmVkBnVpbnQzMg1yZXNvdXJjZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyCGNhdGVnb3J5BXVpbnQ4BHRpZXIFdWludDgOcmVzb3VyY2Vfc3RhdHMAAwVzdGF0MQZ1aW50MTYFc3RhdDIGdWludDE2BXN0YXQzBnVpbnQxNhByZXNvdXJjZXNfcmVzdWx0AAEJcmVzb3VyY2VzD3Jlc291cmNlX2luZm9bXQZyZXZlYWwAAwlvcmFjbGVfaWQEbmFtZQVlcG9jaAZ1aW50NjQGcmV2ZWFsC2NoZWNrc3VtMjU2CnJldmVhbF9yb3cABAJpZAZ1aW50NjQFZXBvY2gGdWludDY0CW9yYWNsZV9pZARuYW1lBnJldmVhbAtjaGVja3N1bTI1NghybW1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4CnRhcmdldF9yZWYKY2FyZ29fcmVmPwhybW5mdGNmZwABB2l0ZW1faWQGdWludDE2DnJvdXRlX3dheXBvaW50AAIBeAVpbnQ2NAF5BWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwlzZXRjb29yZHMAAwllbnRpdHlfaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAlzZXRuZnRjZmcAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDHNldHRocmVzaG9sZAABCXRocmVzaG9sZAV1aW50OAtzZXR3cmFwY29zdAADCWl0ZW1fdHlwZQV1aW50OAR0aWVyBXVpbnQ4BmFtb3VudAZ1aW50NjQKc2V0d3JhcGZlZQACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUIc2xvdF9kZWYAAwR0eXBlBXVpbnQ4Cm91dHB1dF9wY3QGdWludDE2CG1heF90aWVyBXVpbnQ4EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAMHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2CXN0b3djYXJnbwAFBW93bmVyBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhuZXh1c19pZAZ1aW50NjQIY2FyZ29faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NApzdG93ZW50aXR5AAMFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABQdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzILcmVzZXJ2ZV9tYXgGdWludDMyEXN0cmF0dW1fcmVtYWluaW5nAAMHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlCnN3YXBtb2R1bGUAAwllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZghzd2FwdGlsZQAFBmh1Yl9pZAZ1aW50NjQEYV9neARpbnQ4BGFfZ3kEaW50OARiX2d4BGludDgEYl9neQRpbnQ4BHRhc2sACgR0eXBlBXVpbnQ4CGR1cmF0aW9uBnVpbnQzMgpjYW5jZWxhYmxlBXVpbnQ4C2Nvb3JkaW5hdGVzDGNvb3JkaW5hdGVzPwVjYXJnbwxjYXJnb19pdGVtW10MZW50aXR5dGFyZ2V0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDMyPwRob2xkB3VpbnQ2ND8OdGFyZ2V0X2l0ZW1faWQHdWludDE2Pwp0YXNrX2V2ZW50AAoKZXZlbnRfdHlwZQV1aW50OAVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAp0YXNrX2luZGV4BnVpbnQzMgR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MzI/CGxhbmVfa2V5BXVpbnQ4DHRhc2tfcmVzdWx0cwABCGVudGl0aWVzEmVudGl0eV90YXNrX2luZm9bXRF0ZW1wbGF0ZV9tZXRhX3JvdwADB2l0ZW1faWQGdWludDE2BGtpbmQEbmFtZQ1kaXNwbGF5X2xhYmVsBnN0cmluZwd0cmFuc2l0AAUCaWQGdWludDY0AmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0BnRyYXZlbAAEAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAt0cmF2ZWxyb3V0ZQADCGVudGl0aWVzDGVudGl0eV9yZWZbXQl3YXlwb2ludHMQcm91dGVfd2F5cG9pbnRbXQhyZWNoYXJnZQRib29sCXR5cGVzX3JvdwAFAmlkBnVpbnQ2NBNlbnRpdHlfc3VtbWFyeV90eXBlDmVudGl0eV9zdW1tYXJ5EGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcWc3RyYXR1bV9yZW1haW5pbmdfdHlwZRFzdHJhdHVtX3JlbWFpbmluZxVuZnRfaXRlbV9wYXlsb2FkX3R5cGUQbmZ0X2l0ZW1fcGF5bG9hZAh1bmRlcGxveQACB2hvc3RfaWQGdWludDY0CXRhcmdldF9pZAZ1aW50NjQGdW5sb2FkAAMCaWQGdWludDY0BXRvX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10HdXBncmFkZQAFCmJ1aWxkZXJfaWQGdWludDY0CXRhcmdldF9pZAZ1aW50NjQOdGFyZ2V0X2l0ZW1faWQGdWludDE2BmlucHV0cwxjYXJnb19pdGVtW10Ec2xvdAZ1aW50OD8Ed2FycAADAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQKd2FycF9zdGF0cwABBXJhbmdlBnVpbnQzMgR3aXBlAAANd29ybWhvbGVfaW5mbwADBmNvb3Jkcwtjb29yZGluYXRlcwtpc193b3JtaG9sZQRib29sC2Rlc3RpbmF0aW9uC2Nvb3JkaW5hdGVzDndyYXBjb25maWdfcm93AAIHZmVlX3BjdAZ1aW50MTYLZmVlX2FjY291bnQEbmFtZQx3cmFwY29zdF9yb3cAAwlpdGVtX3R5cGUFdWludDgEdGllcgV1aW50OAZhbW91bnQGdWludDY0YgAAUFEnKlMyCWFkZG1vZHVsZccDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG1vZHVsZQpzdW1tYXJ5OiAnSW5zdGFsbCBhIG1vZHVsZSBpbnRvIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFsbCBhIG1vZHVsZSBmcm9tIGNhcmdvIGludG8gYSBtb2R1bGUgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHNsb3QgdHlwZS4gVGhlIG1vZHVsZSBpdGVtIGlzIHJlbW92ZWQgZnJvbSBjYXJnbyB1cG9uIGluc3RhbGxhdGlvbi4AAABYdzVTMghhZGRuZXh1c6cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG5leHVzCnN1bW1hcnk6ICdBZGQgYSBuZXh1cyBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ3JlYXRlIGEgbmV3IG5leHVzIGVudGl0eSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuIE5leHVzZXMgYXJlIG93bmVkIGJ5IHRoZSBjb250cmFjdCBhbmQgc2VydmUgYXMgZml4ZWQgZ2F0aGVyaW5nIHBvaW50cyB3aGVyZSBwbGF5ZXJzIGNhbiB3cmFwLCB1bndyYXAsIGRlcGxveSwgYW5kIG90aGVyd2lzZSBpbnRlcmFjdCB3aXRoIE5GVC1iYWNrZWQgYXNzZXRzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAABQEZlLUzIJYWRkb3JhY2xlAAAAAACANFU8BWJsZW5k/AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYmxlbmQKc3VtbWFyeTogJ0JsZW5kIGNhcmdvIHN0YWNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ29tYmluZSBtdWx0aXBsZSBjYXJnbyBzdGFja3Mgb2YgdGhlIHNhbWUgaXRlbSB0eXBlIGludG8gYSBzaW5nbGUgc3RhY2sgd2l0aCBuZXcgYmxlbmRlZCBzdGF0cy4gQWxsIGlucHV0IHN0YWNrcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGl0ZW0gaWQuIFRoZSBvdXRwdXQgc3RhY2sgaGFzIHRoZSBjb21iaW5lZCBxdWFudGl0eSBvZiBhbGwgaW5wdXRzLgAAyDTWFJ0+CWJ1aWxkcGxvdAAAAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC4AAMg0VulMRAljbGFpbXBsb3QAcFW+JmPpTEQMY2xhaW1zdGFydGVyAAAAqBvfaVRECWNsZWFucnN2cOwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFucnN2cApzdW1tYXJ5OiAnQ2xlYW4gdXAgcGFzdCBlcG9jaCByZXNlcnZlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRXJhc2UgcmVzZXJ2ZSB0YWJsZSByb3dzIGZyb20gYSBwYXN0IGVwb2NoLiBDYW5ub3QgY2xlYW4gdGhlIGN1cnJlbnQgb3IgZnV0dXJlIGVwb2Nocy4gVGhlIG1heF9yb3dzIHBhcmFtZXRlciBjYXBzIHRoZSBudW1iZXIgb2Ygcm93cyBlcmFzZWQgcGVyIGNhbGwgdG8gbGltaXQgQ1BVIHVzYWdlLgCAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAZCclRQZjb21taXTsAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb21taXQKc3VtbWFyeTogJ1NldCBjb21taXQgdmFsdWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNldCB0aGUgaW5pdGlhbCBjb21taXQgdmFsdWUgZHVyaW5nIGdhbWUgaW5pdGlhbGl6YXRpb24uAABgNDK3JkUJY29uZmlnbG9n3QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29uZmlnbG9nCnN1bW1hcnk6ICdMb2cgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBsb2dzIHRoZSBjdXJyZW50IGdhbWUgY29uZmlndXJhdGlvbi4gQ2FsbGVkIGlubGluZSBhZnRlciBpbml0aWFsaXphdGlvbiB0byBicm9hZGNhc3QgY29uZmlnIHZpYSBhY3Rpb24gdHJhY2VzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAAIC8zEUFY3JhZnTIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmFmdApzdW1tYXJ5OiAnQ3JhZnQgaXRlbXMgZnJvbSBhIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmb3JtIGNhcmdvIGl0ZW1zIGludG8gYSBuZXcgaXRlbSB1c2luZyBhIHJlY2lwZS4gVGhlIGVudGl0eSBtdXN0IGhhdmUgYSBjcmFmdGVyIG1vZHVsZSBpbnN0YWxsZWQuIENvbnN1bWVzIGVuZXJneSBhbmQgc2NoZWR1bGVzIGEgY3JhZnRpbmcgdGFzayB3aXRoIGR1cmF0aW9uIGJhc2VkIG9uIHRvdGFsIGlucHV0IG1hc3MgYW5kIGNyYWZ0ZXIgc3BlZWQuIElucHV0IHF1YW50aXRpZXMgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSByZWNpcGUgcmVxdWlyZW1lbnRzLgAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzkAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZml4Y2FyZ29tYXNzCnN1bW1hcnk6ICdERUJVRzogcmVjb21wdXRlIGVudGl0eSBjYXJnbyBtYXNzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgYW5kIHJld3JpdGUgYW4gZW50aXR5J3MgY2FyZ28gbWFzcyBmcm9tIGl0cyBjdXJyZW50IGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIEF2YWlsYWJsZSBmb3IgcmVwYWlyaW5nIGRyaWZ0IGJldHdlZW4gY2FjaGVkIGNhcmdvIG1hc3MgYW5kIHRoZSB0cnVlIG1hc3MgZGVyaXZlZCBmcm9tIGNhcmdvIHJvd3MuAKJRW12FLl0LZm9yY2VyZXZlYWy+BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3JjZXJldmVhbApzdW1tYXJ5OiAnREVCVUc6IGZvcmNlLWZpbmFsaXplIGFuIGVwb2NoIGZyb20gZXhpc3RpbmcgcmV2ZWFscycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRmluYWxpemUgYSBzdHVjayBlcG9jaCBieSBjb21wdXRpbmcgaXRzIHNlZWQgZnJvbSB0aGUgcmV2ZWFscyBhbHJlYWR5IHN1Ym1pdHRlZCwgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4gVGhlIHNlZWQgaXMgZGVyaXZlZCBzb2xlbHkgZnJvbSB0aGUgcHJlLWltYWdlLWxvY2tlZCByZXZlYWxzIGFscmVhZHkgb24gY2hhaW47IG5vIGFkbWluLXN1cHBsaWVkIGVudHJvcHkgaXMgaW50cm9kdWNlZC4gVXNlZCB0byB1bmJsb2NrIGVwb2NoIHByb2dyZXNzaW9uIHdoZW4gdGhlIHRocmVzaG9sZCBjYW5ub3Qgb3RoZXJ3aXNlIGJlIG1ldC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24ukJWKCzuspmIMZ2VuZXNpc2ZsZWV0qQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2VuZXNpc2ZsZWV0CnN1bW1hcnk6ICdNaW50IHRoZSBvbmUtdGltZSBnZW5lc2lzIGZsZWV0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbXBsYWNlIHRoZSBvbmUtdGltZSBnZW5lc2lzIGZsZWV0OiBhIGNhbGxlci1zdXBwbGllZCBzZXQgb2YgZW50aXRpZXMgKHNoaXBzLCBzdHJ1Y3R1cmVzLCBhbmQgY29udGFpbmVycykgd3JpdHRlbiB0byB0aGUgd29ybGQgYXMtaXMuIFZhbGlkIG9ubHkgZHVyaW5nIHRoZSBwcmUtZ2VuZXNpcyB3aW5kb3csIGJlZm9yZSBlcG9jaCAxIGlzIGZpbmFsaXplZC4gVGhlIHN1cHBsaWVkIGVudGl0eSBpZHMgYXJlIGhvbm9yZWQgYW5kIHRoZSBpZCBzZXF1ZW5jZSBpcyBhZHZhbmNlZCBwYXN0IHRoZW07IGlkIDAgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBHZW5lc2lzIE5leHVzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAMBVGeuIsmIKZ2V0Y2x1c3RlcgAAAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgBAdphWlbJiCmdldGRlcG9zaXQAABSaJmOXsmILZ2V0ZGlzdGFuY2UAAFQ8jrmosmILZ2V0ZWxpZ2libGXIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbGlnaWJsZQpzdW1tYXJ5OiAnR2V0IGVsaWdpYmxlIHJlc291cmNlIGl0ZW0gSURzIGF0IGEgbG9jYXRpb24gYW5kIHN0cmF0dW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBsaXN0IG9mIHJlc291cmNlIGl0ZW0gSURzIGVsaWdpYmxlIHRvIGJlIGdhdGhlcmVkIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcyBhbmQgc3RyYXR1bSBkZXB0aC4gSXRlbXMgYXJlIGdhdGVkIGJ5IGJvdGggdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgcHJvZmlsZSBhbmQgdGhlIGRlcHRoIHRocmVzaG9sZCBmb3IgZWFjaCB0aWVyLgAAwBHlqbJiCWdldGVudGNsc4wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGNscwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBjbGFzcyBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIGVudGl0eSBjbGFzcyBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChPcmJpdGFsVmVzc2VsLCBQbGFuZXRhcnlTdHJ1Y3R1cmUpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBlbnRpdHkgY2xhc3MgaWRlbnRpZmllcnMuALBy2eWpsmILZ2V0ZW50aXRpZXOkAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdGllcwpzdW1tYXJ5OiAnR2V0IGFsbCBlbnRpdGllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgZnVsbCBlbnRpdHkgaW5mbyBmb3IgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4AAPDZ5amyYglnZXRlbnRpdHmiAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdHkKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gZW50aXR5IGluY2x1ZGluZyBpZGVudGl0eSwgY2FyZ28sIHNjaGVkdWxlIHN0YXRlLCBhbmQgdHlwZS1zcGVjaWZpYyBmaWVsZHMukKe7NVO6smIMZ2V0Zm9vdHByaW50AABMNkmq7LJiC2dldGl0ZW1kYXRhqAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWRhdGEKc3VtbWFyeTogJ0dldCBmdWxsIGl0ZW0gY2F0YWxvZycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGNvbXBsZXRlIGl0ZW0gY2F0YWxvZyBhcyB0aGUgY29udHJhY3Qgc2VlcyBpdCwgaW5jbHVkaW5nIHR5cGUsIHN1YnR5cGUsIHRpZXIsIG1hc3MsIGFuZCBvdGhlciBzdGF0aWMgbWV0YWRhdGEuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIGNsaWVudHMgdG8gbWlycm9yIHRoZSBjb250cmFjdCdzIGl0ZW0gZGVmaW5pdGlvbnMuAABOTqrssmIKZ2V0aXRlbWlkc4YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1pZHMKc3VtbWFyeTogJ0dldCBpdGVtIGlkIHRvIG5hbWUgbWFwcGluZ3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIG1hcHBpbmcgb2YgaXRlbSBpZCBjb25zdGFudHMgdG8gdGhlaXIgY2Fub25pY2FsIHN0cmluZyBuYW1lcy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byByZXNvbHZlIG51bWVyaWMgaXRlbSBpZHMgdG8gaHVtYW4tcmVhZGFibGUgaWRlbnRpZmllcnMuAAAAWKrssmIIZ2V0aXRlbXOaAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtcwpzdW1tYXJ5OiAnR2V0IGFsbCBhdmFpbGFibGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgYSBsaXN0IG9mIGFsbCBpdGVtcyBpbiB0aGUgZ2FtZSBpbmNsdWRpbmcgdGhlaXIgaWQsIGJhc2UgcHJpY2UsIGFuZCBtYXNzLgBU9Vmq7LJiC2dldGl0ZW10eXBlAIBV9Vmq7LJiDGdldGl0ZW10eXBlc4gDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW10eXBlcwpzdW1tYXJ5OiAnR2V0IGl0ZW0gdHlwZSBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIGl0ZW0gdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChyZXNvdXJjZSwgY29tcG9uZW50LCBtb2R1bGUsIGVudGl0eSkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIGl0ZW0gdHlwZSBpZGVudGlmaWVycy4ATFYyTQezYgtnZXRraW5kbWV0YfgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGtpbmRtZXRhCnN1bW1hcnk6ICdHZXQgZW50aXR5IGtpbmQgbWV0YWRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBlbnRpdHkga2luZCByZWdpc3RyeSBhbmQgdGVtcGxhdGUgcmVnaXN0cnksIGluY2x1ZGluZyBlYWNoIGtpbmQncyBjbGFzc2lmaWNhdGlvbiwgY2FwYWJpbGl0eSBmbGFncywgWi1jb29yZGluYXRlLCBhbmQgZGVmYXVsdCBsYWJlbCwgcGx1cyB0aGUgbWFwcGluZyBvZiBlbnRpdHkgaXRlbSBpZHMgdG8ga2luZHMgd2l0aCBkaXNwbGF5IGxhYmVscy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBpbnRlcnByZXQgZW50aXR5IGtpbmRzIGFuZCBjYXBhYmlsaXRpZXMuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AsKo+JyqzYgtnZXRtb2R0eXBlc9YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHR5cGVzCnN1bW1hcnk6ICdHZXQgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChhbnksIGVuZ2luZSwgZ2VuZXJhdG9yLCBnYXRoZXJlciwgbG9hZGVyLCB3YXJwLCBjcmFmdGVyLCBsYXVuY2hlciwgc3RvcmFnZSwgaGF1bGVyKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgbW9kdWxlIHN1YnR5cGUgaWRlbnRpZmllcnMgYW5kIHNsb3QgY29tcGF0aWJpbGl0eS4AAFZRJyqzYgpnZXRtb2R1bGVzgAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4AAPDnGjWzYglnZXRuZWFyYnnKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBhbmQgZmxpZ2h0IHRpbWUuAIDC5uQ1s2IKZ2V0bmZ0YmFzZQAAAF3T5TWzYgpnZXRuZnRpbmZv8AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS6gssn40VuzYgxnZXRwcm9qc3RhdGXLAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRwcm9qc3RhdGUKc3VtbWFyeTogJ0dldCBwcm9qZWN0ZWQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgcHJvamVjdGVkIHN0YXRlIG9mIGFuIGVudGl0eSBhZnRlciBhcHBseWluZyB0aGUgbmV4dCB0YXNrX2NvdW50IHNjaGVkdWxlZCB0YXNrcyAob3IgYWxsIHRhc2tzIGlmIHRhc2tfY291bnQgaXMgb21pdHRlZCkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gcHJldmlldyB0aGUgcmVzdWx0IG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlIHdpdGhvdXQgcmVzb2x2aW5nIG9uLWNoYWluLgAAUNUhdbNiCWdldHJlY2lwZaYDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZQpzdW1tYXJ5OiAnR2V0IGEgc2luZ2xlIGNyYWZ0aW5nIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHJlY2lwZSB3aG9zZSBvdXRwdXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gaXRlbSBpZCwgaW5jbHVkaW5nIGl0cyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkaXNwbGF5IGNyYWZ0aW5nIHJlcXVpcmVtZW50cy4AAFbVIXWzYgpnZXRyZWNpcGVzrAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlcwpzdW1tYXJ5OiAnTGlzdCBjcmFmdGluZyByZWNpcGVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyBhIHBhZ2luYXRlZCBsaXN0IG9mIGNyYWZ0aW5nIHJlY2lwZXMgc3RhcnRpbmcgYXQgdGhlIHByb3ZpZGVkIGxvd2VyIGJvdW5kIG91dHB1dCBpdGVtIGlkLCB1cCB0byB0aGUgc3BlY2lmaWVkIGxpbWl0LiBFYWNoIGVudHJ5IGluY2x1ZGVzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLgAAzgZhdbNiCmdldHJlc2NhdHOeAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNjYXRzCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiByZXNvdXJjZSBjYXRlZ29yeSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChvcmUsIGdhcywgcmVnb2xpdGgsIGJpb21hc3MsIGNyeXN0YWwpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSByZXNvdXJjZSBzdWJ0eXBlIGlkZW50aWZpZXJzLgCw2ldhdbNiC2dldHJlc2VydmVz/AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzZXJ2ZXMKc3VtbWFyeTogJ0dldCBjdXJyZW50IHJlc2VydmUgbW9kaWZpY2F0aW9ucyBhdCBhIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBjaGFpbidzIG1vZGlmaWNhdGlvbnMgdG8gZGVyaXZlZCByZXNlcnZlcyBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZSBmb3IgdGhlIGN1cnJlbnQgZXBvY2ggYXMgYSBsaXN0IG9mIHtzdHJhdHVtLCByZW1haW5pbmd9IHBhaXJzLiBTdHJhdGEgbm90IHByZXNlbnQgaW4gdGhlIHJlc3BvbnNlIHVzZSB0aGVpciBkZXJpdmVkIGluaXRpYWwgcmVzZXJ2ZS4gQ29tcG9zZSB3aXRoIFNESyBkZXJpdmF0aW9uIHRvIGdldCB0aGUgZnVsbCBwZXItbG9jYXRpb24gc3RyYXRhIHZpZXcugBW6mmJ1s2IMZ2V0cmVzb3VyY2VzhwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzb3VyY2VzCnN1bW1hcnk6ICdHZXQgYWxsIHJlc291cmNlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgcmVzb3VyY2VzLCBpbmNsdWRpbmcgZWFjaCByZXNvdXJjZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgZ2F0aGVyYWJsZSBtYXRlcmlhbHMuAAAAONOIs2IIZ2V0c2xvdHO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzbG90cwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzbG90IGxheW91dHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgc2xvdCBsYXlvdXQgZm9yIGV2ZXJ5IGVudGl0eSBpdGVtIHR5cGUsIGxpc3RpbmcgdGhlIG9yZGVyZWQgc2xvdCB0eXBlcyBhdmFpbGFibGUgZm9yIG1vZHVsZSBpbnN0YWxsYXRpb24uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZSB0eXBlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGEgZ2l2ZW4gZW50aXR5IGh1bGwuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgBUpE1eyrNiC2dldHdvcm1ob2xlAJAdnubmqullDGdyb3VwdHJhbnNpdAAAotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AKLsG5UurdAtpbXBvcnRjYXJnbwDgs8tT5UurdAxpbXBvcnRlbnRpdHkAAKqml+VLq3QLaW1wb3J0Z3JvdXAAcJU3seZLq3QMaW1wb3J0cGxheWVyALqvwurmS6t0DWltcG9ydHJlc2VydmUAAFQ2GedLq3QLaW1wb3J0c3RhdGUAAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAA0NLWJBmxhdW5jaAAAAAAAAJAMjQRsb2FkAAAAACq6rDaVCG1vdmV0aWxlAAAAiFcz6fKaCW5mdGltZ3VybLIDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5mdGltZ3VybApzdW1tYXJ5OiAnR2V0IE5GVCBpbWFnZSBVUkwgZm9yIGEgY2FyZ28gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGltYWdlIFVSTCB0aGUgY29udHJhY3QgZW1pdHMgZm9yIGEgZ2l2ZW4gY2FyZ28gaXRlbSwgb3B0aW9uYWxseSBzY29wZWQgdG8gYSBsb2NhdGlvbi4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBmZXRjaCB0aGUgY2Fub25pY2FsIGFydHdvcmsgZm9yIGFuIGl0ZW0gb3IgcGFja2VkIGVudGl0eS4AAAAA+OUynQZub3RpZnmKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBub3RpZnkKc3VtbWFyeTogJ1Rhc2sgbGlmZWN5Y2xlIG5vdGlmaWNhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbm90aWZpZXMgZW50aXR5IG93bmVycyBvZiB0YXNrIGxpZmVjeWNsZSBldmVudHMgKHJlc29sdmVkLCBjYW5jZWxsZWQpLiBDYWxsZWQgaW5saW5lIHdoZW4gdGFza3MgY2hhbmdlIHN0YXRlLiBVc2VzIHJlcXVpcmVfcmVjaXBpZW50IHRvIGVuYWJsZSBvZmYtY2hhaW4gbW9uaXRvcmluZyB2aWEgYWN0aW9uIHRyYWNlcy4AAGXXIIVMrApwbGFjZWNhcmdvyQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcGxhY2VjYXJnbwpzdW1tYXJ5OiAnUmVzdG9yZSBORlQgY2FyZ28gb250byBhIGhvc3QgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzdG9yZXMgdGhlIGNhcmdvIHJlY29yZGVkIGluIGFuIHVud3JhcHBlZCBORlQgb250byBhIGhvc3QgZW50aXR5LiBWYWxpZGF0ZXMgaG9zdCBvd25lcnNoaXAsIGxvYWRlcnMsIGFuZCByZW1haW5pbmcgY2FwYWNpdHksIGRlc2VyaWFsaXplcyB0aGUgTkZUJ3MgaXRlbSBkYXRhLCBhbmQgYXBwZW5kcyBhbiB1bndyYXAgdGFzayB0byBkZWxpdmVyIHRoZSBjYXJnbyB0byB0aGUgaG9zdC4gVGhlIHBsYXRmb3JtIGNvbnRyYWN0IGNyZWRpdHMgdGhlIGRlcG9zaXQgcmVmdW5kIGFuZCBidXJucyB0aGUgYXNzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AfHZ5KoVMrAtwbGFjZWVudGl0ecAELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBsYWNlZW50aXR5CnN1bW1hcnk6ICdNYXRlcmlhbGl6ZSBhIHBhY2tlZC1lbnRpdHkgTkZUIGFzIGEgbGl2ZSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBFbXBsYWNlcyBhIGxpdmUgb3JiaXRhbCB2ZXNzZWwgKHNoaXAgb3IgY29udGFpbmVyKSBmcm9tIGl0cyBwYWNrZWQtZW50aXR5IE5GVCBkYXRhIGF0IHRoZSByZWNvcmRlZCB3cmFwIG9yaWdpbiwgdGhlbiBxdWV1ZXMgdHJhdmVsIGFuZCByZWNoYXJnZSB0YXNrcyB0byBkZWxpdmVyIGl0IHRvIHRoZSB0YXJnZXQgbmV4dXMgYXQgZnVsbCBlbmVyZ3kuIFRoZSBwbGF0Zm9ybSBjb250cmFjdCBjcmVkaXRzIHRoZSBkZXBvc2l0IHJlZnVuZCBhbmQgYnVybnMgdGhlIGFzc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAil3TkLoIcmVjaGFyZ2XNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWNoYXJnZQpzdW1tYXJ5OiAnUmVjaGFyZ2Ugc2hpcCBlbmVyZ3knCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNjaGVkdWxlIGEgcmVjaGFyZ2UgdGFzayBmb3IgYW4gZW50aXR5IHRvIHJlc3RvcmUgZW5lcmd5IHRvIGZ1bGwgY2FwYWNpdHkuIFRoZSByZWNoYXJnZSBkdXJhdGlvbiBkZXBlbmRzIG9uIGN1cnJlbnQgZW5lcmd5IGxldmVsIGFuZCByZWNoYXJnZSByYXRlLuCzy1M1fJe6DHJlZnJzaGVudGl0ebgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlZnJzaGVudGl0eQpzdW1tYXJ5OiAnUmVmcmVzaCBkZXJpdmVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVjb21wdXRlIGRlcml2ZWQgZmllbGRzIG9uIGFuIGVudGl0eSBmcm9tIGl0cyBjdXJyZW50IGNhcmdvIGFuZCBtb2R1bGVzLCByZWZyZXNoaW5nIGNhcGFiaWxpdHkgc3RhdHMgYW5kIGNhcmdvIG1hc3MuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBVc2VkIHRvIHJlY29uY2lsZSBkZXJpdmVkIHN0YXRlIGFmdGVyIGRhdGEgbWlncmF0aW9ucyBvciBjb250cmFjdCB1cGdyYWRlcy6gIjKXqk2lugxyZW1vdmVvcmFjbGUAAAAAAChpproGcmVuYW1lAAAAAEDtSLG6B3Jlc29sdmXQAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuAECMRu1IsboKcmVzb2x2ZWFsbAAAAAAARKO2ugZyZXZlYWwAAAAAKupEpbwIcm1tb2R1bGW8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW1vZHVsZQpzdW1tYXJ5OiAnUmVtb3ZlIGEgbW9kdWxlIGZyb20gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgYW4gaW5zdGFsbGVkIG1vZHVsZSBmcm9tIGEgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgaXMgcmV0dXJuZWQgdG8gY2FyZ28uIEZhaWxzIGlmIHRoZSBlbnRpdHkgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY2FyZ28gY2FwYWNpdHkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgbW9kdWxlLgAAAGyhvKa8CHJtbmZ0Y2ZnoQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1uZnRjZmcKc3VtbWFyeTogJ1JlbW92ZSBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIHRoZSBBdG9taWNBc3NldHMgdGVtcGxhdGUgbWFwcGluZyBmb3IgdGhlIHNwZWNpZmllZCBpdGVtIGlkIGZyb20gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBBZnRlciByZW1vdmFsIHRoZSBpdGVtIGNhbiBubyBsb25nZXIgYmUgd3JhcHBlZCBvciB1bndyYXBwZWQgdW50aWwgYSBuZXcgbWFwcGluZyBpcyBzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAMDpUoqywglzZXRjb29yZHMAAABgC+U1s8IJc2V0bmZ0Y2ZnxAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2V0bmZ0Y2ZnCnN1bW1hcnk6ICdTZXQgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJpbmQgYW4gaXRlbSBpZCB0byBhbiBBdG9taWNBc3NldHMgdGVtcGxhdGUgaWQgYW5kIHNjaGVtYSBuYW1lLiBVc2VkIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGNvbnRyYWN0IG1pbnRzIGFuZCByZWNvZ25pemVzIE5GVHMgZm9yIGEgZ2l2ZW4gaXRlbS4gSW5zZXJ0cyBhIG5ldyBtYXBwaW5nIGlmIG9uZSBkb2VzIG5vdCBleGlzdCwgb3IgdXBkYXRlcyB0aGUgZXhpc3RpbmcgbWFwcGluZy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LpAibVjdlrPCDHNldHRocmVzaG9sZAAAMqaomsuzwgtzZXR3cmFwY29zdAAAgFKrmsuzwgpzZXR3cmFwZmVlAAAAoOwaxGnGCXN0b3djYXJnb9UFLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHN0b3djYXJnbwpzdW1tYXJ5OiAnUmVzZXJ2ZSBhIGNhcmdvIHN0YWNrIGZvciB3cmFwcGluZyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIFJlc2VydmVzIGFuZCBjb25zdW1lcyBhIGNhcmdvIHN0YWNrIG9uIGEgbGl2ZSBlbnRpdHkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZULiBWYWxpZGF0ZXMgZW50aXR5IG93bmVyc2hpcCwgbG9hZGVycywgYW5kIHByZXNlbmNlIGF0IHRoZSBuZXh1cywgYW5kIGNvbmZpcm1zIHRoZSB0YXJnZXQgY2FyZ28gc3RhY2sgaXMgYXZhaWxhYmxlIGFuZCBub3QgcmVzZXJ2ZWQgYnkgYSBwZW5kaW5nIHRhc2suIENvbXB1dGVzIHRoZSB3cmFwIGNvc3QgYW5kIGZlZSwgZGViaXRzIHRoZW0gZnJvbSB0aGUgb3duZXIncyBwbGF0Zm9ybSBkZXBvc2l0IGJhbGFuY2UsIGRlcml2ZXMgdGhlIE5GVCdzIGltbXV0YWJsZSBkYXRhLCBhbmQgbWludHMgdGhlIE5GVCBpbmxpbmUgYXMgdGhlIGdhbWUgY29udHJhY3QgYmVmb3JlIGNvbnN1bWluZyB0aGUgY2FyZ28uIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AgM8uT8VpxgpzdG93ZW50aXR5mQUtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Rvd2VudGl0eQpzdW1tYXJ5OiAnUmVzZXJ2ZSBhbiBlbnRpdHkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzZXJ2ZXMgYSB3aG9sZSBlbnRpdHkgKHNoaXAsIGNvbnRhaW5lciwgb3IgcGxhbmV0YXJ5IHN0cnVjdHVyZSkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZULiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIGVtcHR5IGNhcmdvIGFuZCBubyBzY2hlZHVsZWQgdGFza3MuIENvbXB1dGVzIHRoZSB3cmFwIGNvc3QgYW5kIGZlZSwgZGViaXRzIHRoZW0gZnJvbSB0aGUgb3duZXIncyBwbGF0Zm9ybSBkZXBvc2l0IGJhbGFuY2UsIGRlcml2ZXMgdGhlIGVudGl0eSBORlQncyBpbW11dGFibGUgZGF0YSwgbWludHMgdGhlIE5GVCBpbmxpbmUgYXMgdGhlIGdhbWUgY29udHJhY3QsIGFuZCBlcmFzZXMgdGhlIGVudGl0eSBmcm9tIHRoZSB3b3JsZC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgCAijpRWQ3HCnN3YXBtb2R1bGUAAAAAKrpcDccIc3dhcHRpbGUAAAAAIDs8zc0HdHJhbnNpdAAAAAAARLXNzQZ0cmF2ZWz7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uAFTW9Ea1zc0LdHJhdmVscm91dGUAAAAAnsaq0tQIdW5kZXBsb3nnBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1bmRlcGxveQpzdW1tYXJ5OiAnUGFjayBhIGRlcGxveWVkIGVudGl0eSBpbnRvIGEgaG9zdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUGFjayBhbiBlbnRpdHkgaW50byBhIGhvc3QgZW50aXR5J3MgY2FyZ28gYXMgYSBwYWNrZWQtZW50aXR5IGl0ZW0uIEhvc3QgYW5kIHRhcmdldCBtdXN0IHNoYXJlIHRoZSBzYW1lIG93bmVyIGFuZCBjb29yZGluYXRlcywgdGhlIGhvc3QgbXVzdCBoYXZlIGxvYWRlcnMgYW5kIGVub3VnaCBjYXBhY2l0eSBmb3IgdGhlIHBhY2tlZCBtYXNzLCBhbmQgdGhlIHRhcmdldCBtdXN0IGJlIGlkbGUgd2l0aCBlbXB0eSBjYXJnby4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBhbmQgc2NoZWR1bGVzIHVuZGVwbG95IHRhc2tzIG9uIGJvdGggZW50aXRpZXM7IG9uIHJlc29sdXRpb24gdGhlIHRhcmdldCBpcyBlcmFzZWQgYW5kIHRoZSBwYWNrZWQgZW50aXR5IGlzIGFkZGVkIHRvIHRoZSBob3N0J3MgY2FyZ28uIEludmVyc2Ugb2YgZGVwbG95LgAAAAAkQ+PUBnVubG9hZAAAAABAJXNZ1Qd1cGdyYWRlAAAAAAAAUK/hBHdhcnCfAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3YXJwCnN1bW1hcnk6ICdXYXJwIHRvIGEgZGVzdGluYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbnRseSB0ZWxlcG9ydCBhbiBlbnRpdHkgdG8gYSBkZXN0aW5hdGlvbiBzeXN0ZW0uIFJlcXVpcmVzIHdhcnAgY2FwYWJpbGl0eSwgZnVsbCBlbmVyZ3ksIGVtcHR5IGNhcmdvLCBhbmQgYW4gZW1wdHkgc2NoZWR1bGUuIFRoZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGEgdmFsaWQgc3lzdGVtIHdpdGhpbiB3YXJwIHJhbmdlLiBSZXNvbHZlcyBpbW1lZGlhdGVseSBhcyBhIHplcm8tZHVyYXRpb24gdGFzay4AAAAAAKCq4wR3aXBlsgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tEgAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAAABg6UxEA2k2NAAACWNsYWltX3JvdwAAAOCqjHVEA2k2NAAAC2NsdXN0ZXJfcm93AAAAAGQnJUUDaTY0AAAKY29tbWl0X3JvdwAAAAD47PJUA2k2NAAACmVudGl0eV9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAALAK++zyVANpNjQAAA5lbnRpdHlfc2VxX3JvdwAAAACAhmhVA2k2NAAACWVwb2NoX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAGALqYjMpQNpNjQAABFvcmFjbGVfY29uZmlnX3JvdwAAAACriMylA2k2NAAACm9yYWNsZV9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAARKO2ugNpNjQAAApyZXZlYWxfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABza1JUzeUDaTY0AAAOd3JhcGNvbmZpZ19yb3cAAAAZU1TN5QNpNjQAAAx3cmFwY29zdF9yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAAQAAAyDTWFJ0+DHRhc2tfcmVzdWx0cwAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAADINFbpTEQMdGFza19yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAADbtIpUoMdGFza19yZXN1bHRzAAAAAHgaq0oMdGFza19yZXN1bHRzAIDPLk+FsEoGc3RyaW5nAAAAAFzVsmEMdGFza19yZXN1bHRzAMBVGeuIsmILY2x1c3Rlcl9yb3cAAGBuTYqyYgtnYW1lX2NvbmZpZwBAdphWlbJiDmV4dGVuZGVkX2Fzc2V0ABSaJmOXsmIGdWludDY0AFQ8jrmosmIIdWludDE2W10AAMAR5amyYgtlbnVtX3Jlc3VsdACwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mb5CnuzVTurJiEGZvb3RwcmludF9yZXN1bHQATDZJquyyYg9pdGVtZGF0YV9yZXN1bHQAAE5OquyyYg9pdGVtX2lkc19yZXN1bHQAAABYquyyYgppdGVtc19pbmZvAFT1WarssmIFdWludDiAVfVZquyyYgtlbnVtX3Jlc3VsdABMVjJNB7NiEGtpbmRfbWV0YV9yZXN1bHQAJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZACwqj4nKrNiC2VudW1fcmVzdWx0AABWUScqs2IObW9kdWxlc19yZXN1bHQAAPDnGjWzYgtuZWFyYnlfaW5mbwCAwubkNbNiCHN0cmluZ1tdAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mb6CyyfjRW7NiD3Byb2plY3RlZF9zdGF0ZQAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AAAAONOIs2IVZW50aXR5X2xheW91dHNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQBUpE1eyrNiDXdvcm1ob2xlX2luZm+QHZ7m5qrpZQx0YXNrX3Jlc3VsdHMAotrm5qrpZQx0YXNrX3Jlc3VsdHMAAAAAANCwaQtjaGVja3N1bTI1NgAAAECE0rBpC2NoZWNrc3VtNTEyAAAAADQ0tYkMdGFza19yZXN1bHRzAAAAAACQDI0MdGFza19yZXN1bHRzAAAAKrqsNpUMdGFza19yZXN1bHRzAACIVzPp8poGc3RyaW5nAABl1yCFTKwMdGFza19yZXN1bHRzAHx2eSqFTKwMdGFza19yZXN1bHRzAAAAil3TkLoMdGFza19yZXN1bHRzAAAAQO1IsboPcmVzb2x2ZV9yZXN1bHRzAECMRu1IsboScmVzb2x2ZWFsbF9yZXN1bHRzAACg7BrEacYMdGFza19yZXN1bHRzAIDPLk/FacYMdGFza19yZXN1bHRzAAAAKrpcDccMdGFza19yZXN1bHRzAAAAIDs8zc0MdGFza19yZXN1bHRzAAAAAES1zc0MdGFza19yZXN1bHRzAFTW9Ea1zc0MdGFza19yZXN1bHRzAAAAnsaq0tQMdGFza19yZXN1bHRzAAAAACRD49QMdGFza19yZXN1bHRzAAAAQCVzWdUMdGFza19yZXN1bHRzAAAAAABQr+EMdGFza19yZXN1bHRz');
451
+ const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDjWAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQxidWlsZGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYJYnVpbGRwbG90AAIKYnVpbGRlcl9pZAZ1aW50NjQHcGxvdF9pZAZ1aW50NjQGY2FuY2VsAAMCaWQGdWludDY0CGxhbmVfa2V5BXVpbnQ4BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwljYW5jZWxqb2IAAgZqb2JfaWQGdWludDY0B3NoaXBfaWQGdWludDY0CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8PY2l2aWNjb25maWdfcm93AAELY2l2aWNfb3duZXIEbmFtZQljbGFpbV9yb3cAAQVvd25lcgRuYW1lCGNsYWltam9iAAIGam9iX2lkBnVpbnQ2NAdzaGlwX2lkBnVpbnQ2NAljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4BmNvbW1pdAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZjb21taXQLY2hlY2tzdW0yNTYKY29tbWl0X3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8IY291cGxpbmcAAwtjb3VudGVycGFydAplbnRpdHlfcmVmBGhvbGQGdWludDY0BGtpbmQFdWludDgFY3JhZnQABgJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwxjcmFmdGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYIY3JhZnRqb2IABgdzaGlwX2lkBnVpbnQ2NAt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OAlyZWNpcGVfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgZpbnB1dHMMY2FyZ29faXRlbVtdCWRlbGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQADAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmBHNsb3QNY2x1c3Rlcl9zbG90PwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDMyCHJlY2hhcmdlBnVpbnQzMhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MzIPZW50aXR5X2RlZmF1bHRzAAILd2FyZWhvdXNlX3oGdWludDE2C2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAXBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXRlbV9pZAZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDMyPwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPw5nYXRoZXJlcl9sYW5lcw9nYXRoZXJlcl9sYW5lW10NY3JhZnRlcl9sYW5lcw5jcmFmdGVyX2xhbmVbXQ1idWlsZGVyX2xhbmVzDmJ1aWxkZXJfbGFuZVtdDGxvYWRlcl9sYW5lcw1sb2FkZXJfbGFuZVtdCGxhdW5jaGVyD2xhdW5jaGVyX3N0YXRzPwVsYW5lcwZsYW5lW10FaG9sZHMGaG9sZFtdDWVudGl0eV9sYXlvdXQAAw5lbnRpdHlfaXRlbV9pZAZ1aW50MTYFc2xvdHMKc2xvdF9kZWZbXQ1iYXNlX2h1bGxtYXNzBnVpbnQzMhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAAQhlbnRpdGllcw9lbnRpdHlfbGF5b3V0W10KZW50aXR5X3JlZgACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAplbnRpdHlfcm93AAwCaWQGdWludDY0BW93bmVyBG5hbWUEa2luZARuYW1lB2l0ZW1faWQGdWludDE2BG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kHdWludDMyPwljYXJnb21hc3MGdWludDMyB21vZHVsZXMObW9kdWxlX2VudHJ5W10FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ5lbnRpdHlfc2VxX3JvdwABB25leHRfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAZ1aW50MzIQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdC2VudW1fbWVtYmVyAAIFdmFsdWUFdWludDgEbmFtZQZzdHJpbmcLZW51bV9yZXN1bHQAAQdtZW1iZXJzDWVudW1fbWVtYmVyW10JZXBvY2hfcm93AAQFZXBvY2gGdWludDY0Cm9yYWNsZV9pZHMGbmFtZVtdCXRocmVzaG9sZAV1aW50OARzZWVkC2NoZWNrc3VtMjU2DGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQQZm9vdHByaW50X3Jlc3VsdAABBWNlbGxzC2dyaWRfY2VsbFtdC2ZvcmNlcmV2ZWFsAAEFZXBvY2gGdWludDY0C2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAUJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyBHNsb3QGdWludDg/DWdhdGhlcmVyX2xhbmUABQpzbG90X2luZGV4BXVpbnQ4BXlpZWxkBnVpbnQxNgVkcmFpbgZ1aW50MzIFZGVwdGgGdWludDE2Cm91dHB1dF9wY3QGdWludDE2CmdhdGhlcnBsYW4ABglzb3VyY2VfaWQGdWludDY0DmRlc3RpbmF0aW9uX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIIcmVjaGFyZ2UEYm9vbAVzbG90cwVieXRlcwxnZW5lc2lzZmxlZXQAAQhlbnRpdGllcwxlbnRpdHlfcm93W10KZ2V0Y2x1c3RlcgABBmh1Yl9pZAZ1aW50NjQJZ2V0Y29uZmlnAAAKZ2V0ZGVwb3NpdAACBW93bmVyBG5hbWUIYXNzZXRfaWQGdWludDY0C2dldGRpc3RhbmNlAAQCYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ2V0ZWxpZ2libGUAAgZjb29yZHMLY29vcmRpbmF0ZXMHc3RyYXR1bQZ1aW50MTYJZ2V0ZW50Y2xzAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQMZ2V0Zm9vdHByaW50AAEHaXRlbV9pZAZ1aW50MTYLZ2V0aXRlbWRhdGEAAApnZXRpdGVtaWRzAAAIZ2V0aXRlbXMAAAtnZXRpdGVtdHlwZQABB2l0ZW1faWQGdWludDE2DGdldGl0ZW10eXBlcwAAB2dldGpvYnMAAQt3b3Jrc2hvcF9pZAZ1aW50NjQLZ2V0a2luZG1ldGEAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRiYXNlAAAKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQxnZXRwcm9qc3RhdGUAAgllbnRpdHlfaWQGdWludDY0CnRhc2tfY291bnQGdWludDg/CWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAApnZXRzZXJ2aWNlAAELd29ya3Nob3BfaWQGdWludDY0CGdldHNsb3RzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dldHdvcm1ob2xlAAIBeAVpbnQ2NAF5BWludDY0CWdyaWRfY2VsbAACAmd4BGludDgCZ3kEaW50OAxncm91cHRyYW5zaXQABQhlbnRpdGllcwxlbnRpdHlfcmVmW10CYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwAECGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQzMhBjYXBhY2l0eV9ieV90aWVyEWhhdWxlcl90aWVyX2NhcFtdD2hhdWxlcl90aWVyX2NhcAACBHRpZXIFdWludDgIY2FwYWNpdHkFdWludDgEaG9sZAAFAmlkBnVpbnQ2NARraW5kBXVpbnQ4C2NvdW50ZXJwYXJ0CmVudGl0eV9yZWYFdW50aWwKdGltZV9wb2ludA1pbmNvbWluZ19tYXNzBnVpbnQzMgtpbXBvcnRjYXJnbwABA3JvdwljYXJnb19yb3cKaW1wb3J0Y2VsbAAEBHJvb3QGdWludDY0Amd4BGludDgCZ3kEaW50OAllbnRpdHlfaWQGdWludDY0DGltcG9ydGVudGl0eQABA3JvdwplbnRpdHlfcm93C2ltcG9ydGdyb3VwAAEDcm93D2VudGl0eWdyb3VwX3JvdwxpbXBvcnRwbGF5ZXIAAQVvd25lcgRuYW1lDWltcG9ydHJlc2VydmUAAgtlcG9jaF9zY29wZQZ1aW50MzIDcm93C3Jlc2VydmVfcm93C2ltcG9ydHN0YXRlAAEDcm93CXN0YXRlX3JvdwhpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdC2pvYl9yZWNlaXB0AAMGam9iX2lkBnVpbnQ2NAlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludAdqb2Jfcm93AAwCaWQGdWludDY0CHdvcmtzaG9wBnVpbnQ2NAZzb2NrZXQFdWludDgFb3duZXIEbmFtZQdzaGlwX2lkBnVpbnQ2NAZjb29yZHMLY29vcmRpbmF0ZXMJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzILZW5lcmd5X3BhaWQGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQtqb2JzX3Jlc3VsdAABBGpvYnMJam9iX3Jvd1tdBGpvaW4AAQdhY2NvdW50BG5hbWUQa2luZF9tZXRhX3Jlc3VsdAACBWtpbmRzD2tpbmRfbWV0YV9yb3dbXQl0ZW1wbGF0ZXMTdGVtcGxhdGVfbWV0YV9yb3dbXQ1raW5kX21ldGFfcm93AAUEa2luZARuYW1lDmNsYXNzaWZpY2F0aW9uBXVpbnQ4EGNhcGFiaWxpdHlfZmxhZ3MFdWludDgHel9jb29yZAZ1aW50MzINZGVmYXVsdF9sYWJlbAZzdHJpbmcEbGFuZQACCGxhbmVfa2V5BXVpbnQ4CHNjaGVkdWxlCHNjaGVkdWxlBmxhdW5jaAADC2xhdW5jaGVyX2lkBnVpbnQ2NApjYXRjaGVyX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10ObGF1bmNoZXJfc3RhdHMAAwtjaGFyZ2VfcmF0ZQZ1aW50MTYIdmVsb2NpdHkGdWludDE2BWRyYWluBnVpbnQxNgRsb2FkAAMCaWQGdWludDY0B2Zyb21faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQtsb2FkZXJfbGFuZQAECnNsb3RfaW5kZXgFdWludDgEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNhBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwRzaXplBnVpbnQxNg1sb2NhdGlvbl9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sC2lzX3dvcm1ob2xlBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1pZ3JhdGV0YXNrcwABBWJhdGNoBnVpbnQzMgdtaWdzd2FwAAEFYmF0Y2gGdWludDMyDG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQzMghtb3ZldGlsZQAFBmh1Yl9pZAZ1aW50NjQHZnJvbV9neARpbnQ4B2Zyb21fZ3kEaW50OAV0b19neARpbnQ4BXRvX2d5BGludDgLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MzIHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8ObmZ0X2NhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIQbmZ0X2l0ZW1fcGF5bG9hZAACBGl0ZW0ObmZ0X2NhcmdvX2l0ZW0IbG9jYXRpb24MY29vcmRpbmF0ZXM/Dm5mdF9zY2hlbWFfZGVmAAILc2NoZW1hX25hbWUEbmFtZQZmaWVsZHMOc2NoZW1hX2ZpZWxkW10QbmZ0X3RlbXBsYXRlX2RlZgADB2l0ZW1faWQGdWludDE2C3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzINbmZ0Y29uZmlnX3JvdwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJbmZ0aW1ndXJsAAIEaXRlbQpjYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQRb3JhY2xlX2NvbmZpZ19yb3cAAQl0aHJlc2hvbGQFdWludDgKb3JhY2xlX3JvdwABAmlkBG5hbWUNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NApwbGFjZWNhcmdvAAMFb3duZXIEbmFtZQdob3N0X2lkBnVpbnQ2NAhhc3NldF9pZAZ1aW50NjQLcGxhY2VlbnRpdHkAAwVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA90YXJnZXRfbmV4dXNfaWQGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lD3Byb2plY3RlZF9zdGF0ZQARBW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10NYnVpbGRlcl9sYW5lcw5idWlsZGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8EdGllcgV1aW50OAhyZWNoYXJnZQABAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAgdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UACA5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10Pc291cmNlX3N1YmNsYXNzB3VpbnQxNj8OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdDHJlZnJzaGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQMcmVtb3Zlb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUGcmVuYW1lAAICaWQGdWludDY0BG5hbWUGc3RyaW5nC3Jlc2VydmVfcm93AAUCaWQGdWludDY0CGNvb3JkX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyCmxhc3RfYmxvY2sUYmxvY2tfdGltZXN0YW1wX3R5cGUHcmVzb2x2ZQACAmlkBnVpbnQ2NAVjb3VudAd1aW50NjQ/D3Jlc29sdmVfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ5yZXNvbHZlZF9jb3VudAZ1aW50MzIUbmV3X3NjaGVkdWxlX3N0YXJ0ZWQLdGltZV9wb2ludD8LZW50aXR5Z3JvdXAHdWludDY0Pw1ncm91cF9tZW1iZXJzFkJfdmVjdG9yX2VudGl0eV9yZWZfRT8KcmVzb2x2ZWFsbAABBW93bmVyBG5hbWUScmVzb2x2ZWFsbF9yZXN1bHRzAAIHc2Nhbm5lZAZ1aW50MzIIcmVzb2x2ZWQGdWludDMyDXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdBnJldmVhbAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZyZXZlYWwLY2hlY2tzdW0yNTYKcmV2ZWFsX3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGcmV2ZWFsC2NoZWNrc3VtMjU2CHJtbW9kdWxlAAMJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgKdGFyZ2V0X3JlZgpjYXJnb19yZWY/CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYOcm91dGVfd2F5cG9pbnQAAgF4BWludDY0AXkFaW50NjQIc2NoZWR1bGUAAgdzdGFydGVkCnRpbWVfcG9pbnQFdGFza3MGdGFza1tdDHNjaGVtYV9maWVsZAACBG5hbWUGc3RyaW5nCmZpZWxkX3R5cGUGc3RyaW5nC3NlcnZpY2Vfcm93AAIGZW50aXR5BnVpbnQ2NAdzb2NrZXRzEHNlcnZpY2Vfc29ja2V0W10Oc2VydmljZV9zb2NrZXQAAQRvcGVuBGJvb2wIc2V0Y2l2aWMAAQdhY2NvdW50BG5hbWUJc2V0Y29vcmRzAAMJZW50aXR5X2lkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQlzZXRzb2NrZXQAAwt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OARvcGVuBGJvb2wMc2V0dGhyZXNob2xkAAEJdGhyZXNob2xkBXVpbnQ4C3NldHdyYXBjb3N0AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NApzZXR3cmFwZmVlAAIHZmVlX3BjdAZ1aW50MTYLZmVlX2FjY291bnQEbmFtZQdzaHV0dGxlAAQHY2FycmllcgZ1aW50NjQHZnJvbV9pZAZ1aW50NjQFdG9faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQhzbG90X2RlZgADBHR5cGUFdWludDgKb3V0cHV0X3BjdAZ1aW50MTYIbWF4X3RpZXIFdWludDgSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cAAwdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNlZWQLY2hlY2tzdW0yNTYJc3Rvd2NhcmdvAAUFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CnN0b3dlbnRpdHkAAwVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0DHN0cmF0dW1fZGF0YQACB3N0cmF0dW0Mc3RyYXR1bV9pbmZvBXN0YXRzDnJlc291cmNlX3N0YXRzDHN0cmF0dW1faW5mbwAFB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CHJpY2huZXNzBnVpbnQxNgdyZXNlcnZlBnVpbnQzMgtyZXNlcnZlX21heAZ1aW50MzIRc3RyYXR1bV9yZW1haW5pbmcAAwdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyCmxhc3RfYmxvY2sUYmxvY2tfdGltZXN0YW1wX3R5cGUKc3dhcG1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4Cm1vZHVsZV9yZWYJY2FyZ29fcmVmCHN3YXB0aWxlAAUGaHViX2lkBnVpbnQ2NARhX2d4BGludDgEYV9neQRpbnQ4BGJfZ3gEaW50OARiX2d5BGludDgEdGFzawAKBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQljb3VwbGluZ3MKY291cGxpbmdbXQdzdWJqZWN0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDMyPw50YXJnZXRfaXRlbV9pZAd1aW50MTY/CnRhc2tfZXZlbnQACgpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgGdWludDMyBHRhc2sEdGFzawlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludApuZXdfZW5lcmd5B3VpbnQzMj8IbGFuZV9rZXkFdWludDgMdGFza19yZXN1bHRzAAEIZW50aXRpZXMSZW50aXR5X3Rhc2tfaW5mb1tdEXRlbXBsYXRlX21ldGFfcm93AAMHaXRlbV9pZAZ1aW50MTYEa2luZARuYW1lDWRpc3BsYXlfbGFiZWwGc3RyaW5nB3RyYW5zaXQABQJpZAZ1aW50NjQCYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQGdHJhdmVsAAQCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sCnRyYXZlbHBsYW4AAwhlbnRpdGllcwxlbnRpdHlfcmVmW10Jd2F5cG9pbnRzEHJvdXRlX3dheXBvaW50W10IcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABQJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcVbmZ0X2l0ZW1fcGF5bG9hZF90eXBlEG5mdF9pdGVtX3BheWxvYWQIdW5kZXBsb3kAAgdob3N0X2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0BnVubG9hZAADAmlkBnVpbnQ2NAV0b19pZAZ1aW50NjQFaXRlbXMMY2FyZ29faXRlbVtdB3VwZ3JhZGUABQpidWlsZGVyX2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0DnRhcmdldF9pdGVtX2lkBnVpbnQxNgZpbnB1dHMMY2FyZ29faXRlbVtdBHNsb3QGdWludDg/BHdhcnAAAwJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADXdvcm1ob2xlX2luZm8AAwZjb29yZHMLY29vcmRpbmF0ZXMLaXNfd29ybWhvbGUEYm9vbAtkZXN0aW5hdGlvbgtjb29yZGluYXRlcw53cmFwY29uZmlnX3JvdwACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUMd3JhcGNvc3Rfcm93AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NG8AAFBRJypTMglhZGRtb2R1bGXHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRtb2R1bGUKc3VtbWFyeTogJ0luc3RhbGwgYSBtb2R1bGUgaW50byBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbGwgYSBtb2R1bGUgZnJvbSBjYXJnbyBpbnRvIGEgbW9kdWxlIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIHR5cGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBzbG90IHR5cGUuIFRoZSBtb2R1bGUgaXRlbSBpcyByZW1vdmVkIGZyb20gY2FyZ28gdXBvbiBpbnN0YWxsYXRpb24uAAAAWHc1UzIIYWRkbmV4dXOnAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRuZXh1cwpzdW1tYXJ5OiAnQWRkIGEgbmV4dXMgbG9jYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNyZWF0ZSBhIG5ldyBuZXh1cyBlbnRpdHkgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBOZXh1c2VzIGFyZSBvd25lZCBieSB0aGUgY29udHJhY3QgYW5kIHNlcnZlIGFzIGZpeGVkIGdhdGhlcmluZyBwb2ludHMgd2hlcmUgcGxheWVycyBjYW4gd3JhcCwgdW53cmFwLCBkZXBsb3ksIGFuZCBvdGhlcndpc2UgaW50ZXJhY3Qgd2l0aCBORlQtYmFja2VkIGFzc2V0cy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAUBGZS1MyCWFkZG9yYWNsZQAAAAAAgDRVPAVibGVuZPwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJsZW5kCnN1bW1hcnk6ICdCbGVuZCBjYXJnbyBzdGFja3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNvbWJpbmUgbXVsdGlwbGUgY2FyZ28gc3RhY2tzIG9mIHRoZSBzYW1lIGl0ZW0gdHlwZSBpbnRvIGEgc2luZ2xlIHN0YWNrIHdpdGggbmV3IGJsZW5kZWQgc3RhdHMuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAMg01hSdPglidWlsZHBsb3QAAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuAAA49EWFpkEJY2FuY2Vsam9iAAAAAIc+6UxECGNsYWltam9iAAAAyDRW6UxECWNsYWltcGxvdABwVb4mY+lMRAxjbGFpbXN0YXJ0ZXIAAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMuAAAAh768zEUIY3JhZnRqb2IAAADw2eWpokoJZGVsZW50aXR5AAAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzkAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZml4Y2FyZ29tYXNzCnN1bW1hcnk6ICdERUJVRzogcmVjb21wdXRlIGVudGl0eSBjYXJnbyBtYXNzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgYW5kIHJld3JpdGUgYW4gZW50aXR5J3MgY2FyZ28gbWFzcyBmcm9tIGl0cyBjdXJyZW50IGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIEF2YWlsYWJsZSBmb3IgcmVwYWlyaW5nIGRyaWZ0IGJldHdlZW4gY2FjaGVkIGNhcmdvIG1hc3MgYW5kIHRoZSB0cnVlIG1hc3MgZGVyaXZlZCBmcm9tIGNhcmdvIHJvd3MuAKJRW12FLl0LZm9yY2VyZXZlYWy+BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3JjZXJldmVhbApzdW1tYXJ5OiAnREVCVUc6IGZvcmNlLWZpbmFsaXplIGFuIGVwb2NoIGZyb20gZXhpc3RpbmcgcmV2ZWFscycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRmluYWxpemUgYSBzdHVjayBlcG9jaCBieSBjb21wdXRpbmcgaXRzIHNlZWQgZnJvbSB0aGUgcmV2ZWFscyBhbHJlYWR5IHN1Ym1pdHRlZCwgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4gVGhlIHNlZWQgaXMgZGVyaXZlZCBzb2xlbHkgZnJvbSB0aGUgcHJlLWltYWdlLWxvY2tlZCByZXZlYWxzIGFscmVhZHkgb24gY2hhaW47IG5vIGFkbWluLXN1cHBsaWVkIGVudHJvcHkgaXMgaW50cm9kdWNlZC4gVXNlZCB0byB1bmJsb2NrIGVwb2NoIHByb2dyZXNzaW9uIHdoZW4gdGhlIHRocmVzaG9sZCBjYW5ub3Qgb3RoZXJ3aXNlIGJlIG1ldC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAMA0sV7VsmEKZ2F0aGVycGxhbgCQlYoLO6ymYgxnZW5lc2lzZmxlZXSpBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZW5lc2lzZmxlZXQKc3VtbWFyeTogJ01pbnQgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVtcGxhY2UgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQ6IGEgY2FsbGVyLXN1cHBsaWVkIHNldCBvZiBlbnRpdGllcyAoc2hpcHMsIHN0cnVjdHVyZXMsIGFuZCBjb250YWluZXJzKSB3cml0dGVuIHRvIHRoZSB3b3JsZCBhcy1pcy4gVmFsaWQgb25seSBkdXJpbmcgdGhlIHByZS1nZW5lc2lzIHdpbmRvdywgYmVmb3JlIGVwb2NoIDEgaXMgZmluYWxpemVkLiBUaGUgc3VwcGxpZWQgZW50aXR5IGlkcyBhcmUgaG9ub3JlZCBhbmQgdGhlIGlkIHNlcXVlbmNlIGlzIGFkdmFuY2VkIHBhc3QgdGhlbTsgaWQgMCBpcyByZXNlcnZlZCBmb3IgdGhlIEdlbmVzaXMgTmV4dXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AwFUZ64iyYgpnZXRjbHVzdGVyAAAAYG5NirJiCWdldGNvbmZpZ8oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGNvbmZpZwpzdW1tYXJ5OiAnR2V0IGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgZ2FtZSBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBkZWZhdWx0IGVudGl0eSBzdGF0cyBmb3Igd2FyZWhvdXNlcyBhbmQgY29udGFpbmVycywgYW5kIHRoZSBmdWxsIGl0ZW0gZGVmaW5pdGlvbnMgdGFibGUuAEB2mFaVsmIKZ2V0ZGVwb3NpdAAAFJomY5eyYgtnZXRkaXN0YW5jZQAAVDyOuaiyYgtnZXRlbGlnaWJsZcgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVsaWdpYmxlCnN1bW1hcnk6ICdHZXQgZWxpZ2libGUgcmVzb3VyY2UgaXRlbSBJRHMgYXQgYSBsb2NhdGlvbiBhbmQgc3RyYXR1bScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGxpc3Qgb2YgcmVzb3VyY2UgaXRlbSBJRHMgZWxpZ2libGUgdG8gYmUgZ2F0aGVyZWQgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCBzdHJhdHVtIGRlcHRoLiBJdGVtcyBhcmUgZ2F0ZWQgYnkgYm90aCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBwcm9maWxlIGFuZCB0aGUgZGVwdGggdGhyZXNob2xkIGZvciBlYWNoIHRpZXIuAADAEeWpsmIJZ2V0ZW50Y2xzjAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50Y2xzCnN1bW1hcnk6ICdHZXQgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKE9yYml0YWxWZXNzZWwsIFBsYW5ldGFyeVN0cnVjdHVyZSkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIGVudGl0eSBjbGFzcyBpZGVudGlmaWVycy4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy6Qp7s1U7qyYgxnZXRmb290cHJpbnQAAEw2SarssmILZ2V0aXRlbWRhdGGoAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtZGF0YQpzdW1tYXJ5OiAnR2V0IGZ1bGwgaXRlbSBjYXRhbG9nJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgY29tcGxldGUgaXRlbSBjYXRhbG9nIGFzIHRoZSBjb250cmFjdCBzZWVzIGl0LCBpbmNsdWRpbmcgdHlwZSwgc3VidHlwZSwgdGllciwgbWFzcywgYW5kIG90aGVyIHN0YXRpYyBtZXRhZGF0YS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgY2xpZW50cyB0byBtaXJyb3IgdGhlIGNvbnRyYWN0J3MgaXRlbSBkZWZpbml0aW9ucy4AAE5OquyyYgpnZXRpdGVtaWRzhgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWlkcwpzdW1tYXJ5OiAnR2V0IGl0ZW0gaWQgdG8gbmFtZSBtYXBwaW5ncycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgbWFwcGluZyBvZiBpdGVtIGlkIGNvbnN0YW50cyB0byB0aGVpciBjYW5vbmljYWwgc3RyaW5nIG5hbWVzLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHJlc29sdmUgbnVtZXJpYyBpdGVtIGlkcyB0byBodW1hbi1yZWFkYWJsZSBpZGVudGlmaWVycy4AAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuAFT1WarssmILZ2V0aXRlbXR5cGUAgFX1WarssmIMZ2V0aXRlbXR5cGVziAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXR5cGVzCnN1bW1hcnk6ICdHZXQgaXRlbSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgaXRlbSB0eXBlIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKHJlc291cmNlLCBjb21wb25lbnQsIG1vZHVsZSwgZW50aXR5KS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgaXRlbSB0eXBlIGlkZW50aWZpZXJzLgAAAAAf+rJiB2dldGpvYnMAAExWMk0Hs2ILZ2V0a2luZG1ldGH4Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRraW5kbWV0YQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBraW5kIG1ldGFkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZW50aXR5IGtpbmQgcmVnaXN0cnkgYW5kIHRlbXBsYXRlIHJlZ2lzdHJ5LCBpbmNsdWRpbmcgZWFjaCBraW5kJ3MgY2xhc3NpZmljYXRpb24sIGNhcGFiaWxpdHkgZmxhZ3MsIFotY29vcmRpbmF0ZSwgYW5kIGRlZmF1bHQgbGFiZWwsIHBsdXMgdGhlIG1hcHBpbmcgb2YgZW50aXR5IGl0ZW0gaWRzIHRvIGtpbmRzIHdpdGggZGlzcGxheSBsYWJlbHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gaW50ZXJwcmV0IGVudGl0eSBraW5kcyBhbmQgY2FwYWJpbGl0aWVzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGl0ZW06IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuALCqPicqs2ILZ2V0bW9kdHlwZXPWAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R0eXBlcwpzdW1tYXJ5OiAnR2V0IG1vZHVsZSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAoYW55LCBlbmdpbmUsIGdlbmVyYXRvciwgZ2F0aGVyZXIsIGxvYWRlciwgd2FycCwgY3JhZnRlciwgbGF1bmNoZXIsIHN0b3JhZ2UsIGhhdWxlcikuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIG1vZHVsZSBzdWJ0eXBlIGlkZW50aWZpZXJzIGFuZCBzbG90IGNvbXBhdGliaWxpdHkuAABWUScqs2IKZ2V0bW9kdWxlc4ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHVsZXMKc3VtbWFyeTogJ0dldCBhbGwgbW9kdWxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgbW9kdWxlcywgaW5jbHVkaW5nIGVhY2ggbW9kdWxlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBpbnN0YWxsYWJsZSBlcXVpcG1lbnQuAADw5xo1s2IJZ2V0bmVhcmJ5ygMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgYW5kIGZsaWdodCB0aW1lLgCAwubkNbNiCmdldG5mdGJhc2UAAABd0+U1s2IKZ2V0bmZ0aW5mb/ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5mdGluZm8Kc3VtbWFyeTogJ0dldCBORlQgc2NoZW1hIGFuZCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgQXRvbWljQXNzZXRzIHNjaGVtYXMgYW5kIHRlbXBsYXRlcyB0aGUgZ2FtZSBjb250cmFjdCBleHBlY3RzLCBwbHVzIHRoZSBjdXJyZW50IGBpdGVtX2lkIOKGkiAodGVtcGxhdGVfaWQsIHNjaGVtYV9uYW1lKWAgbWFwcGluZyBzdG9yZWQgaW4gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHN5bmMgYXRvbWljYXNzZXRzIHN0YXRlIHdpdGggdGhlIGNvbnRyYWN0LgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuoLLJ+NFbs2IMZ2V0cHJvanN0YXRlywMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cHJvanN0YXRlCnN1bW1hcnk6ICdHZXQgcHJvamVjdGVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHByb2plY3RlZCBzdGF0ZSBvZiBhbiBlbnRpdHkgYWZ0ZXIgYXBwbHlpbmcgdGhlIG5leHQgdGFza19jb3VudCBzY2hlZHVsZWQgdGFza3MgKG9yIGFsbCB0YXNrcyBpZiB0YXNrX2NvdW50IGlzIG9taXR0ZWQpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHByZXZpZXcgdGhlIHJlc3VsdCBvZiBhbiBlbnRpdHkncyBzY2hlZHVsZSB3aXRob3V0IHJlc29sdmluZyBvbi1jaGFpbi4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlc/wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc2VydmVzCnN1bW1hcnk6ICdHZXQgY3VycmVudCByZXNlcnZlIG1vZGlmaWNhdGlvbnMgYXQgYSBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgY2hhaW4ncyBtb2RpZmljYXRpb25zIHRvIGRlcml2ZWQgcmVzZXJ2ZXMgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGUgZm9yIHRoZSBjdXJyZW50IGVwb2NoIGFzIGEgbGlzdCBvZiB7c3RyYXR1bSwgcmVtYWluaW5nfSBwYWlycy4gU3RyYXRhIG5vdCBwcmVzZW50IGluIHRoZSByZXNwb25zZSB1c2UgdGhlaXIgZGVyaXZlZCBpbml0aWFsIHJlc2VydmUuIENvbXBvc2Ugd2l0aCBTREsgZGVyaXZhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGVyLWxvY2F0aW9uIHN0cmF0YSB2aWV3LoAVuppidbNiDGdldHJlc291cmNlc4cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc291cmNlcwpzdW1tYXJ5OiAnR2V0IGFsbCByZXNvdXJjZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIHJlc291cmNlcywgaW5jbHVkaW5nIGVhY2ggcmVzb3VyY2UncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGdhdGhlcmFibGUgbWF0ZXJpYWxzLgCAQm5fhbNiCmdldHNlcnZpY2UAAAAAONOIs2IIZ2V0c2xvdHO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzbG90cwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzbG90IGxheW91dHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgc2xvdCBsYXlvdXQgZm9yIGV2ZXJ5IGVudGl0eSBpdGVtIHR5cGUsIGxpc3RpbmcgdGhlIG9yZGVyZWQgc2xvdCB0eXBlcyBhdmFpbGFibGUgZm9yIG1vZHVsZSBpbnN0YWxsYXRpb24uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZSB0eXBlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGEgZ2l2ZW4gZW50aXR5IGh1bGwuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgBUpE1eyrNiC2dldHdvcm1ob2xlAJAdnubmqullDGdyb3VwdHJhbnNpdAAAotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AKLsG5UurdAtpbXBvcnRjYXJnbwAAQIwK5UurdAppbXBvcnRjZWxsAOCzy1PlS6t0DGltcG9ydGVudGl0eQAAqqaX5UurdAtpbXBvcnRncm91cABwlTex5kurdAxpbXBvcnRwbGF5ZXIAuq/C6uZLq3QNaW1wb3J0cmVzZXJ2ZQAAVDYZ50urdAtpbXBvcnRzdGF0ZQAAAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAADQ0tYkGbGF1bmNoAAAAAAAAkAyNBGxvYWQAgCE2WWVzmZMMbWlncmF0ZXRhc2tzAAAAAKAajpmTB21pZ3N3YXAAAAAAKrqsNpUIbW92ZXRpbGUAAACIVzPp8poJbmZ0aW1ndXJssgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbmZ0aW1ndXJsCnN1bW1hcnk6ICdHZXQgTkZUIGltYWdlIFVSTCBmb3IgYSBjYXJnbyBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgaW1hZ2UgVVJMIHRoZSBjb250cmFjdCBlbWl0cyBmb3IgYSBnaXZlbiBjYXJnbyBpdGVtLCBvcHRpb25hbGx5IHNjb3BlZCB0byBhIGxvY2F0aW9uLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBORlQgcmVuZGVyZXJzIHRvIGZldGNoIHRoZSBjYW5vbmljYWwgYXJ0d29yayBmb3IgYW4gaXRlbSBvciBwYWNrZWQgZW50aXR5LgAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAZdcghUysCnBsYWNlY2FyZ2/JBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBwbGFjZWNhcmdvCnN1bW1hcnk6ICdSZXN0b3JlIE5GVCBjYXJnbyBvbnRvIGEgaG9zdCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXN0b3JlcyB0aGUgY2FyZ28gcmVjb3JkZWQgaW4gYW4gdW53cmFwcGVkIE5GVCBvbnRvIGEgaG9zdCBlbnRpdHkuIFZhbGlkYXRlcyBob3N0IG93bmVyc2hpcCwgbG9hZGVycywgYW5kIHJlbWFpbmluZyBjYXBhY2l0eSwgZGVzZXJpYWxpemVzIHRoZSBORlQncyBpdGVtIGRhdGEsIGFuZCBhcHBlbmRzIGFuIHVud3JhcCB0YXNrIHRvIGRlbGl2ZXIgdGhlIGNhcmdvIHRvIHRoZSBob3N0LiBUaGUgcGxhdGZvcm0gY29udHJhY3QgY3JlZGl0cyB0aGUgZGVwb3NpdCByZWZ1bmQgYW5kIGJ1cm5zIHRoZSBhc3NldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgB8dnkqhUysC3BsYWNlZW50aXR5wAQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcGxhY2VlbnRpdHkKc3VtbWFyeTogJ01hdGVyaWFsaXplIGEgcGFja2VkLWVudGl0eSBORlQgYXMgYSBsaXZlIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIEVtcGxhY2VzIGEgbGl2ZSBvcmJpdGFsIHZlc3NlbCAoc2hpcCBvciBjb250YWluZXIpIGZyb20gaXRzIHBhY2tlZC1lbnRpdHkgTkZUIGRhdGEgYXQgdGhlIHJlY29yZGVkIHdyYXAgb3JpZ2luLCB0aGVuIHF1ZXVlcyB0cmF2ZWwgYW5kIHJlY2hhcmdlIHRhc2tzIHRvIGRlbGl2ZXIgaXQgdG8gdGhlIHRhcmdldCBuZXh1cyBhdCBmdWxsIGVuZXJneS4gVGhlIHBsYXRmb3JtIGNvbnRyYWN0IGNyZWRpdHMgdGhlIGRlcG9zaXQgcmVmdW5kIGFuZCBidXJucyB0aGUgYXNzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAACKXdOQughyZWNoYXJnZc0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlY2hhcmdlCnN1bW1hcnk6ICdSZWNoYXJnZSBzaGlwIGVuZXJneScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2NoZWR1bGUgYSByZWNoYXJnZSB0YXNrIGZvciBhbiBlbnRpdHkgdG8gcmVzdG9yZSBlbmVyZ3kgdG8gZnVsbCBjYXBhY2l0eS4gVGhlIHJlY2hhcmdlIGR1cmF0aW9uIGRlcGVuZHMgb24gY3VycmVudCBlbmVyZ3kgbGV2ZWwgYW5kIHJlY2hhcmdlIHJhdGUu4LPLUzV8l7oMcmVmcnNoZW50aXR5uAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVmcnNoZW50aXR5CnN1bW1hcnk6ICdSZWZyZXNoIGRlcml2ZWQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgZGVyaXZlZCBmaWVsZHMgb24gYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgY2FyZ28gYW5kIG1vZHVsZXMsIHJlZnJlc2hpbmcgY2FwYWJpbGl0eSBzdGF0cyBhbmQgY2FyZ28gbWFzcy4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFVzZWQgdG8gcmVjb25jaWxlIGRlcml2ZWQgc3RhdGUgYWZ0ZXIgZGF0YSBtaWdyYXRpb25zIG9yIGNvbnRyYWN0IHVwZ3JhZGVzLqAiMpeqTaW6DHJlbW92ZW9yYWNsZQAAAAAAKGmmugZyZW5hbWUAAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AQIxG7UixugpyZXNvbHZlYWxsAAAAAABEo7a6BnJldmVhbAAAAAAq6kSlvAhybW1vZHVsZbwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbW9kdWxlCnN1bW1hcnk6ICdSZW1vdmUgYSBtb2R1bGUgZnJvbSBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSBhbiBpbnN0YWxsZWQgbW9kdWxlIGZyb20gYSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSBpcyByZXR1cm5lZCB0byBjYXJnby4gRmFpbHMgaWYgdGhlIGVudGl0eSBkb2VzIG5vdCBoYXZlIGVub3VnaCBjYXJnbyBjYXBhY2l0eSB0byBob2xkIHRoZSByZXR1cm5lZCBtb2R1bGUuAAAAbKG8prwIcm1uZnRjZmehAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW5mdGNmZwpzdW1tYXJ5OiAnUmVtb3ZlIE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgdGhlIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBtYXBwaW5nIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0gaWQgZnJvbSB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIEFmdGVyIHJlbW92YWwgdGhlIGl0ZW0gY2FuIG5vIGxvbmdlciBiZSB3cmFwcGVkIG9yIHVud3JhcHBlZCB1bnRpbCBhIG5ldyBtYXBwaW5nIGlzIHNldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAMhth7LCCHNldGNpdmljAAAAwOlSirLCCXNldGNvb3JkcwAAAGAL5TWzwglzZXRuZnRjZmfEAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXRuZnRjZmcKc3VtbWFyeTogJ1NldCBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQmluZCBhbiBpdGVtIGlkIHRvIGFuIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBpZCBhbmQgc2NoZW1hIG5hbWUuIFVzZWQgdG8gY29uZmlndXJlIGhvdyB0aGUgY29udHJhY3QgbWludHMgYW5kIHJlY29nbml6ZXMgTkZUcyBmb3IgYSBnaXZlbiBpdGVtLiBJbnNlcnRzIGEgbmV3IG1hcHBpbmcgaWYgb25lIGRvZXMgbm90IGV4aXN0LCBvciB1cGRhdGVzIHRoZSBleGlzdGluZyBtYXBwaW5nLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAADICiKKs8IJc2V0c29ja2V0AJAibVjdlrPCDHNldHRocmVzaG9sZAAAMqaomsuzwgtzZXR3cmFwY29zdAAAgFKrmsuzwgpzZXR3cmFwZmVlAAAAAEDFnHXDB3NodXR0bGUAAACg7BrEacYJc3Rvd2Nhcmdv1QUtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Rvd2NhcmdvCnN1bW1hcnk6ICdSZXNlcnZlIGEgY2FyZ28gc3RhY2sgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzZXJ2ZXMgYW5kIGNvbnN1bWVzIGEgY2FyZ28gc3RhY2sgb24gYSBsaXZlIGVudGl0eSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQuIFZhbGlkYXRlcyBlbnRpdHkgb3duZXJzaGlwLCBsb2FkZXJzLCBhbmQgcHJlc2VuY2UgYXQgdGhlIG5leHVzLCBhbmQgY29uZmlybXMgdGhlIHRhcmdldCBjYXJnbyBzdGFjayBpcyBhdmFpbGFibGUgYW5kIG5vdCByZXNlcnZlZCBieSBhIHBlbmRpbmcgdGFzay4gQ29tcHV0ZXMgdGhlIHdyYXAgY29zdCBhbmQgZmVlLCBkZWJpdHMgdGhlbSBmcm9tIHRoZSBvd25lcidzIHBsYXRmb3JtIGRlcG9zaXQgYmFsYW5jZSwgZGVyaXZlcyB0aGUgTkZUJ3MgaW1tdXRhYmxlIGRhdGEsIGFuZCBtaW50cyB0aGUgTkZUIGlubGluZSBhcyB0aGUgZ2FtZSBjb250cmFjdCBiZWZvcmUgY29uc3VtaW5nIHRoZSBjYXJnby4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgCAzy5PxWnGCnN0b3dlbnRpdHmZBS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzdG93ZW50aXR5CnN1bW1hcnk6ICdSZXNlcnZlIGFuIGVudGl0eSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXNlcnZlcyBhIHdob2xlIGVudGl0eSAoc2hpcCwgY29udGFpbmVyLCBvciBwbGFuZXRhcnkgc3RydWN0dXJlKSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggZW1wdHkgY2FyZ28gYW5kIG5vIHNjaGVkdWxlZCB0YXNrcy4gQ29tcHV0ZXMgdGhlIHdyYXAgY29zdCBhbmQgZmVlLCBkZWJpdHMgdGhlbSBmcm9tIHRoZSBvd25lcidzIHBsYXRmb3JtIGRlcG9zaXQgYmFsYW5jZSwgZGVyaXZlcyB0aGUgZW50aXR5IE5GVCdzIGltbXV0YWJsZSBkYXRhLCBtaW50cyB0aGUgTkZUIGlubGluZSBhcyB0aGUgZ2FtZSBjb250cmFjdCwgYW5kIGVyYXNlcyB0aGUgZW50aXR5IGZyb20gdGhlIHdvcmxkLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAICKOlFZDccKc3dhcG1vZHVsZQAAAAAqulwNxwhzd2FwdGlsZQAAAAAgOzzNzQd0cmFuc2l0AAAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AwDSxRrXNzQp0cmF2ZWxwbGFuAAAAAJ7GqtLUCHVuZGVwbG955wQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdW5kZXBsb3kKc3VtbWFyeTogJ1BhY2sgYSBkZXBsb3llZCBlbnRpdHkgaW50byBhIGhvc3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClBhY2sgYW4gZW50aXR5IGludG8gYSBob3N0IGVudGl0eSdzIGNhcmdvIGFzIGEgcGFja2VkLWVudGl0eSBpdGVtLiBIb3N0IGFuZCB0YXJnZXQgbXVzdCBzaGFyZSB0aGUgc2FtZSBvd25lciBhbmQgY29vcmRpbmF0ZXMsIHRoZSBob3N0IG11c3QgaGF2ZSBsb2FkZXJzIGFuZCBlbm91Z2ggY2FwYWNpdHkgZm9yIHRoZSBwYWNrZWQgbWFzcywgYW5kIHRoZSB0YXJnZXQgbXVzdCBiZSBpZGxlIHdpdGggZW1wdHkgY2FyZ28uIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgYW5kIHNjaGVkdWxlcyB1bmRlcGxveSB0YXNrcyBvbiBib3RoIGVudGl0aWVzOyBvbiByZXNvbHV0aW9uIHRoZSB0YXJnZXQgaXMgZXJhc2VkIGFuZCB0aGUgcGFja2VkIGVudGl0eSBpcyBhZGRlZCB0byB0aGUgaG9zdCdzIGNhcmdvLiBJbnZlcnNlIG9mIGRlcGxveS4AAAAAJEPj1AZ1bmxvYWQAAAAAQCVzWdUHdXBncmFkZQAAAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLRYAAAAAAMquQQNpNjQAAAljYXJnb19yb3cAmFuTIuS2QwNpNjQAAA9jaXZpY2NvbmZpZ19yb3cAAAAAYOlMRANpNjQAAAljbGFpbV9yb3cAAADgqox1RANpNjQAAAtjbHVzdGVyX3JvdwAAAABkJyVFA2k2NAAACmNvbW1pdF9yb3cAAAAA+OzyVANpNjQAAAplbnRpdHlfcm93AABzEvjs8lQDaTY0AAAKZW50aXR5X3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAsAr77PJUA2k2NAAADmVudGl0eV9zZXFfcm93AAAAAICGaFUDaTY0AAAJZXBvY2hfcm93AAAAAACAD30DaTY0AAAHam9iX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAGALqYjMpQNpNjQAABFvcmFjbGVfY29uZmlnX3JvdwAAAACriMylA2k2NAAACm9yYWNsZV9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAARKO2ugNpNjQAAApyZXZlYWxfcm93AAAAQCG3r8IDaTY0AAALc2VydmljZV9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAHNrUlTN5QNpNjQAAA53cmFwY29uZmlnX3JvdwAAABlTVM3lA2k2NAAADHdyYXBjb3N0X3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAABFAADINNYUnT4MdGFza19yZXN1bHRzAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAMg0VulMRAx0YXNrX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAACHvrzMRQtqb2JfcmVjZWlwdAAAAA27SKVKDHRhc2tfcmVzdWx0cwAAAAB4GqtKDHRhc2tfcmVzdWx0cwCAzy5PhbBKBnN0cmluZwAAAABc1bJhDHRhc2tfcmVzdWx0cwDANLFe1bJhDHRhc2tfcmVzdWx0cwDAVRnriLJiC2NsdXN0ZXJfcm93AABgbk2KsmILZ2FtZV9jb25maWcAQHaYVpWyYg5leHRlbmRlZF9hc3NldAAUmiZjl7JiBnVpbnQ2NABUPI65qLJiCHVpbnQxNltdAADAEeWpsmILZW51bV9yZXN1bHQAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm+Qp7s1U7qyYhBmb290cHJpbnRfcmVzdWx0AEw2SarssmIPaXRlbWRhdGFfcmVzdWx0AABOTqrssmIPaXRlbV9pZHNfcmVzdWx0AAAAWKrssmIKaXRlbXNfaW5mbwBU9Vmq7LJiBXVpbnQ4gFX1WarssmILZW51bV9yZXN1bHQAAAAAH/qyYgtqb2JzX3Jlc3VsdABMVjJNB7NiEGtpbmRfbWV0YV9yZXN1bHQAJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZACwqj4nKrNiC2VudW1fcmVzdWx0AABWUScqs2IObW9kdWxlc19yZXN1bHQAAPDnGjWzYgtuZWFyYnlfaW5mbwCAwubkNbNiCHN0cmluZ1tdAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mb6CyyfjRW7NiD3Byb2plY3RlZF9zdGF0ZQAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AIBCbl+Fs2ILc2VydmljZV9yb3cAAAA404izYhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAFSkTV7Ks2INd29ybWhvbGVfaW5mb5AdnubmqullDHRhc2tfcmVzdWx0cwCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAAAANDS1iQx0YXNrX3Jlc3VsdHMAAAAAAJAMjQx0YXNrX3Jlc3VsdHMAAAAquqw2lQx0YXNrX3Jlc3VsdHMAAIhXM+nymgZzdHJpbmcAAGXXIIVMrAx0YXNrX3Jlc3VsdHMAfHZ5KoVMrAx0YXNrX3Jlc3VsdHMAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAQIxG7UixuhJyZXNvbHZlYWxsX3Jlc3VsdHMAAABAxZx1wwx0YXNrX3Jlc3VsdHMAAKDsGsRpxgx0YXNrX3Jlc3VsdHMAgM8uT8Vpxgx0YXNrX3Jlc3VsdHMAAAAqulwNxwx0YXNrX3Jlc3VsdHMAAAAgOzzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAwDSxRrXNzQx0YXNrX3Jlc3VsdHMAAACexqrS1Ax0YXNrX3Jlc3VsdHMAAAAAJEPj1Ax0YXNrX3Jlc3VsdHMAAABAJXNZ1Qx0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHM=');
452
452
  const abi = antelope.ABI.from(abiBlob);
453
453
  exports.ServerTypes = void 0;
454
454
  (function (Types) {
@@ -569,6 +569,24 @@ exports.ServerTypes = void 0;
569
569
  antelope.Struct.type('blend')
570
570
  ], blend);
571
571
  Types.blend = blend;
572
+ let builder_lane = class builder_lane extends antelope.Struct {
573
+ };
574
+ tslib.__decorate([
575
+ antelope.Struct.field(antelope.UInt8)
576
+ ], builder_lane.prototype, "slot_index", void 0);
577
+ tslib.__decorate([
578
+ antelope.Struct.field(antelope.UInt16)
579
+ ], builder_lane.prototype, "speed", void 0);
580
+ tslib.__decorate([
581
+ antelope.Struct.field(antelope.UInt32)
582
+ ], builder_lane.prototype, "drain", void 0);
583
+ tslib.__decorate([
584
+ antelope.Struct.field(antelope.UInt16)
585
+ ], builder_lane.prototype, "output_pct", void 0);
586
+ builder_lane = tslib.__decorate([
587
+ antelope.Struct.type('builder_lane')
588
+ ], builder_lane);
589
+ Types.builder_lane = builder_lane;
572
590
  let buildplot = class buildplot extends antelope.Struct {
573
591
  };
574
592
  tslib.__decorate([
@@ -632,6 +650,18 @@ exports.ServerTypes = void 0;
632
650
  antelope.Struct.type('cancel_results')
633
651
  ], cancel_results);
634
652
  Types.cancel_results = cancel_results;
653
+ let canceljob = class canceljob extends antelope.Struct {
654
+ };
655
+ tslib.__decorate([
656
+ antelope.Struct.field(antelope.UInt64)
657
+ ], canceljob.prototype, "job_id", void 0);
658
+ tslib.__decorate([
659
+ antelope.Struct.field(antelope.UInt64)
660
+ ], canceljob.prototype, "ship_id", void 0);
661
+ canceljob = tslib.__decorate([
662
+ antelope.Struct.type('canceljob')
663
+ ], canceljob);
664
+ Types.canceljob = canceljob;
635
665
  let cargo_row = class cargo_row extends antelope.Struct {
636
666
  };
637
667
  tslib.__decorate([
@@ -683,6 +713,15 @@ exports.ServerTypes = void 0;
683
713
  antelope.Struct.type('cargo_view')
684
714
  ], cargo_view);
685
715
  Types.cargo_view = cargo_view;
716
+ let civicconfig_row = class civicconfig_row extends antelope.Struct {
717
+ };
718
+ tslib.__decorate([
719
+ antelope.Struct.field(antelope.Name)
720
+ ], civicconfig_row.prototype, "civic_owner", void 0);
721
+ civicconfig_row = tslib.__decorate([
722
+ antelope.Struct.type('civicconfig_row')
723
+ ], civicconfig_row);
724
+ Types.civicconfig_row = civicconfig_row;
686
725
  let claim_row = class claim_row extends antelope.Struct {
687
726
  };
688
727
  tslib.__decorate([
@@ -692,6 +731,18 @@ exports.ServerTypes = void 0;
692
731
  antelope.Struct.type('claim_row')
693
732
  ], claim_row);
694
733
  Types.claim_row = claim_row;
734
+ let claimjob = class claimjob extends antelope.Struct {
735
+ };
736
+ tslib.__decorate([
737
+ antelope.Struct.field(antelope.UInt64)
738
+ ], claimjob.prototype, "job_id", void 0);
739
+ tslib.__decorate([
740
+ antelope.Struct.field(antelope.UInt64)
741
+ ], claimjob.prototype, "ship_id", void 0);
742
+ claimjob = tslib.__decorate([
743
+ antelope.Struct.type('claimjob')
744
+ ], claimjob);
745
+ Types.claimjob = claimjob;
695
746
  let cluster_slot = class cluster_slot extends antelope.Struct {
696
747
  };
697
748
  tslib.__decorate([
@@ -890,6 +941,21 @@ exports.ServerTypes = void 0;
890
941
  antelope.Struct.type('coordinates')
891
942
  ], coordinates);
892
943
  Types.coordinates = coordinates;
944
+ let coupling = class coupling extends antelope.Struct {
945
+ };
946
+ tslib.__decorate([
947
+ antelope.Struct.field(entity_ref)
948
+ ], coupling.prototype, "counterpart", void 0);
949
+ tslib.__decorate([
950
+ antelope.Struct.field(antelope.UInt64)
951
+ ], coupling.prototype, "hold", void 0);
952
+ tslib.__decorate([
953
+ antelope.Struct.field(antelope.UInt8)
954
+ ], coupling.prototype, "kind", void 0);
955
+ coupling = tslib.__decorate([
956
+ antelope.Struct.type('coupling')
957
+ ], coupling);
958
+ Types.coupling = coupling;
893
959
  let craft = class craft extends antelope.Struct {
894
960
  };
895
961
  tslib.__decorate([
@@ -932,6 +998,39 @@ exports.ServerTypes = void 0;
932
998
  antelope.Struct.type('crafter_lane')
933
999
  ], crafter_lane);
934
1000
  Types.crafter_lane = crafter_lane;
1001
+ let craftjob = class craftjob extends antelope.Struct {
1002
+ };
1003
+ tslib.__decorate([
1004
+ antelope.Struct.field(antelope.UInt64)
1005
+ ], craftjob.prototype, "ship_id", void 0);
1006
+ tslib.__decorate([
1007
+ antelope.Struct.field(antelope.UInt64)
1008
+ ], craftjob.prototype, "workshop_id", void 0);
1009
+ tslib.__decorate([
1010
+ antelope.Struct.field(antelope.UInt8)
1011
+ ], craftjob.prototype, "slot", void 0);
1012
+ tslib.__decorate([
1013
+ antelope.Struct.field(antelope.UInt16)
1014
+ ], craftjob.prototype, "recipe_id", void 0);
1015
+ tslib.__decorate([
1016
+ antelope.Struct.field(antelope.UInt32)
1017
+ ], craftjob.prototype, "quantity", void 0);
1018
+ tslib.__decorate([
1019
+ antelope.Struct.field(cargo_item, { array: true })
1020
+ ], craftjob.prototype, "inputs", void 0);
1021
+ craftjob = tslib.__decorate([
1022
+ antelope.Struct.type('craftjob')
1023
+ ], craftjob);
1024
+ Types.craftjob = craftjob;
1025
+ let delentity = class delentity extends antelope.Struct {
1026
+ };
1027
+ tslib.__decorate([
1028
+ antelope.Struct.field(antelope.UInt64)
1029
+ ], delentity.prototype, "entity_id", void 0);
1030
+ delentity = tslib.__decorate([
1031
+ antelope.Struct.type('delentity')
1032
+ ], delentity);
1033
+ Types.delentity = delentity;
935
1034
  let demolish = class demolish extends antelope.Struct {
936
1035
  };
937
1036
  tslib.__decorate([
@@ -1129,18 +1228,18 @@ exports.ServerTypes = void 0;
1129
1228
  tslib.__decorate([
1130
1229
  antelope.Struct.field(cargo_item, { array: true })
1131
1230
  ], task.prototype, "cargo", void 0);
1231
+ tslib.__decorate([
1232
+ antelope.Struct.field(coupling, { array: true })
1233
+ ], task.prototype, "couplings", void 0);
1132
1234
  tslib.__decorate([
1133
1235
  antelope.Struct.field(entity_ref, { optional: true })
1134
- ], task.prototype, "entitytarget", void 0);
1236
+ ], task.prototype, "subject", void 0);
1135
1237
  tslib.__decorate([
1136
1238
  antelope.Struct.field(antelope.UInt64, { optional: true })
1137
1239
  ], task.prototype, "entitygroup", void 0);
1138
1240
  tslib.__decorate([
1139
1241
  antelope.Struct.field(antelope.UInt32, { optional: true })
1140
1242
  ], task.prototype, "energy_cost", void 0);
1141
- tslib.__decorate([
1142
- antelope.Struct.field(antelope.UInt64, { optional: true })
1143
- ], task.prototype, "hold", void 0);
1144
1243
  tslib.__decorate([
1145
1244
  antelope.Struct.field(antelope.UInt16, { optional: true })
1146
1245
  ], task.prototype, "target_item_id", void 0);
@@ -1249,6 +1348,9 @@ exports.ServerTypes = void 0;
1249
1348
  tslib.__decorate([
1250
1349
  antelope.Struct.field(crafter_lane, { array: true })
1251
1350
  ], entity_info.prototype, "crafter_lanes", void 0);
1351
+ tslib.__decorate([
1352
+ antelope.Struct.field(builder_lane, { array: true })
1353
+ ], entity_info.prototype, "builder_lanes", void 0);
1252
1354
  tslib.__decorate([
1253
1355
  antelope.Struct.field(loader_lane, { array: true })
1254
1356
  ], entity_info.prototype, "loader_lanes", void 0);
@@ -1288,6 +1390,9 @@ exports.ServerTypes = void 0;
1288
1390
  tslib.__decorate([
1289
1391
  antelope.Struct.field(slot_def, { array: true })
1290
1392
  ], entity_layout.prototype, "slots", void 0);
1393
+ tslib.__decorate([
1394
+ antelope.Struct.field(antelope.UInt32)
1395
+ ], entity_layout.prototype, "base_hullmass", void 0);
1291
1396
  entity_layout = tslib.__decorate([
1292
1397
  antelope.Struct.type('entity_layout')
1293
1398
  ], entity_layout);
@@ -1391,7 +1496,7 @@ exports.ServerTypes = void 0;
1391
1496
  antelope.Struct.field(antelope.Name)
1392
1497
  ], entity_task_info.prototype, "entity_type", void 0);
1393
1498
  tslib.__decorate([
1394
- antelope.Struct.field(antelope.UInt8)
1499
+ antelope.Struct.field(antelope.UInt32)
1395
1500
  ], entity_task_info.prototype, "task_count", void 0);
1396
1501
  tslib.__decorate([
1397
1502
  antelope.Struct.field(antelope.TimePoint)
@@ -1511,6 +1616,30 @@ exports.ServerTypes = void 0;
1511
1616
  antelope.Struct.type('gather')
1512
1617
  ], gather);
1513
1618
  Types.gather = gather;
1619
+ let gatherplan = class gatherplan extends antelope.Struct {
1620
+ };
1621
+ tslib.__decorate([
1622
+ antelope.Struct.field(antelope.UInt64)
1623
+ ], gatherplan.prototype, "source_id", void 0);
1624
+ tslib.__decorate([
1625
+ antelope.Struct.field(antelope.UInt64)
1626
+ ], gatherplan.prototype, "destination_id", void 0);
1627
+ tslib.__decorate([
1628
+ antelope.Struct.field(antelope.UInt16)
1629
+ ], gatherplan.prototype, "stratum", void 0);
1630
+ tslib.__decorate([
1631
+ antelope.Struct.field(antelope.UInt32)
1632
+ ], gatherplan.prototype, "quantity", void 0);
1633
+ tslib.__decorate([
1634
+ antelope.Struct.field('bool')
1635
+ ], gatherplan.prototype, "recharge", void 0);
1636
+ tslib.__decorate([
1637
+ antelope.Struct.field(antelope.Bytes)
1638
+ ], gatherplan.prototype, "slots", void 0);
1639
+ gatherplan = tslib.__decorate([
1640
+ antelope.Struct.type('gatherplan')
1641
+ ], gatherplan);
1642
+ Types.gatherplan = gatherplan;
1514
1643
  let genesisfleet = class genesisfleet extends antelope.Struct {
1515
1644
  };
1516
1645
  tslib.__decorate([
@@ -1646,6 +1775,15 @@ exports.ServerTypes = void 0;
1646
1775
  antelope.Struct.type('getitemtypes')
1647
1776
  ], getitemtypes);
1648
1777
  Types.getitemtypes = getitemtypes;
1778
+ let getjobs = class getjobs extends antelope.Struct {
1779
+ };
1780
+ tslib.__decorate([
1781
+ antelope.Struct.field(antelope.UInt64)
1782
+ ], getjobs.prototype, "workshop_id", void 0);
1783
+ getjobs = tslib.__decorate([
1784
+ antelope.Struct.type('getjobs')
1785
+ ], getjobs);
1786
+ Types.getjobs = getjobs;
1649
1787
  let getkindmeta = class getkindmeta extends antelope.Struct {
1650
1788
  };
1651
1789
  getkindmeta = tslib.__decorate([
@@ -1778,6 +1916,15 @@ exports.ServerTypes = void 0;
1778
1916
  antelope.Struct.type('getresources')
1779
1917
  ], getresources);
1780
1918
  Types.getresources = getresources;
1919
+ let getservice = class getservice extends antelope.Struct {
1920
+ };
1921
+ tslib.__decorate([
1922
+ antelope.Struct.field(antelope.UInt64)
1923
+ ], getservice.prototype, "workshop_id", void 0);
1924
+ getservice = tslib.__decorate([
1925
+ antelope.Struct.type('getservice')
1926
+ ], getservice);
1927
+ Types.getservice = getservice;
1781
1928
  let getslots = class getslots extends antelope.Struct {
1782
1929
  };
1783
1930
  getslots = tslib.__decorate([
@@ -1889,6 +2036,24 @@ exports.ServerTypes = void 0;
1889
2036
  antelope.Struct.type('importcargo')
1890
2037
  ], importcargo);
1891
2038
  Types.importcargo = importcargo;
2039
+ let importcell = class importcell extends antelope.Struct {
2040
+ };
2041
+ tslib.__decorate([
2042
+ antelope.Struct.field(antelope.UInt64)
2043
+ ], importcell.prototype, "root", void 0);
2044
+ tslib.__decorate([
2045
+ antelope.Struct.field(antelope.Int8)
2046
+ ], importcell.prototype, "gx", void 0);
2047
+ tslib.__decorate([
2048
+ antelope.Struct.field(antelope.Int8)
2049
+ ], importcell.prototype, "gy", void 0);
2050
+ tslib.__decorate([
2051
+ antelope.Struct.field(antelope.UInt64)
2052
+ ], importcell.prototype, "entity_id", void 0);
2053
+ importcell = tslib.__decorate([
2054
+ antelope.Struct.type('importcell')
2055
+ ], importcell);
2056
+ Types.importcell = importcell;
1892
2057
  let importentity = class importentity extends antelope.Struct {
1893
2058
  };
1894
2059
  tslib.__decorate([
@@ -2099,6 +2264,72 @@ exports.ServerTypes = void 0;
2099
2264
  antelope.Struct.type('items_info')
2100
2265
  ], items_info);
2101
2266
  Types.items_info = items_info;
2267
+ let job_receipt = class job_receipt extends antelope.Struct {
2268
+ };
2269
+ tslib.__decorate([
2270
+ antelope.Struct.field(antelope.UInt64)
2271
+ ], job_receipt.prototype, "job_id", void 0);
2272
+ tslib.__decorate([
2273
+ antelope.Struct.field(antelope.TimePoint)
2274
+ ], job_receipt.prototype, "starts_at", void 0);
2275
+ tslib.__decorate([
2276
+ antelope.Struct.field(antelope.TimePoint)
2277
+ ], job_receipt.prototype, "completes_at", void 0);
2278
+ job_receipt = tslib.__decorate([
2279
+ antelope.Struct.type('job_receipt')
2280
+ ], job_receipt);
2281
+ Types.job_receipt = job_receipt;
2282
+ let job_row = class job_row extends antelope.Struct {
2283
+ };
2284
+ tslib.__decorate([
2285
+ antelope.Struct.field(antelope.UInt64)
2286
+ ], job_row.prototype, "id", void 0);
2287
+ tslib.__decorate([
2288
+ antelope.Struct.field(antelope.UInt64)
2289
+ ], job_row.prototype, "workshop", void 0);
2290
+ tslib.__decorate([
2291
+ antelope.Struct.field(antelope.UInt8)
2292
+ ], job_row.prototype, "socket", void 0);
2293
+ tslib.__decorate([
2294
+ antelope.Struct.field(antelope.Name)
2295
+ ], job_row.prototype, "owner", void 0);
2296
+ tslib.__decorate([
2297
+ antelope.Struct.field(antelope.UInt64)
2298
+ ], job_row.prototype, "ship_id", void 0);
2299
+ tslib.__decorate([
2300
+ antelope.Struct.field(coordinates)
2301
+ ], job_row.prototype, "coords", void 0);
2302
+ tslib.__decorate([
2303
+ antelope.Struct.field(antelope.TimePoint)
2304
+ ], job_row.prototype, "starts_at", void 0);
2305
+ tslib.__decorate([
2306
+ antelope.Struct.field(antelope.TimePoint)
2307
+ ], job_row.prototype, "completes_at", void 0);
2308
+ tslib.__decorate([
2309
+ antelope.Struct.field(antelope.UInt16)
2310
+ ], job_row.prototype, "recipe_id", void 0);
2311
+ tslib.__decorate([
2312
+ antelope.Struct.field(antelope.UInt32)
2313
+ ], job_row.prototype, "quantity", void 0);
2314
+ tslib.__decorate([
2315
+ antelope.Struct.field(antelope.UInt32)
2316
+ ], job_row.prototype, "energy_paid", void 0);
2317
+ tslib.__decorate([
2318
+ antelope.Struct.field(cargo_item, { array: true })
2319
+ ], job_row.prototype, "cargo", void 0);
2320
+ job_row = tslib.__decorate([
2321
+ antelope.Struct.type('job_row')
2322
+ ], job_row);
2323
+ Types.job_row = job_row;
2324
+ let jobs_result = class jobs_result extends antelope.Struct {
2325
+ };
2326
+ tslib.__decorate([
2327
+ antelope.Struct.field(job_row, { array: true })
2328
+ ], jobs_result.prototype, "jobs", void 0);
2329
+ jobs_result = tslib.__decorate([
2330
+ antelope.Struct.type('jobs_result')
2331
+ ], jobs_result);
2332
+ Types.jobs_result = jobs_result;
2102
2333
  let join = class join extends antelope.Struct {
2103
2334
  };
2104
2335
  tslib.__decorate([
@@ -2234,6 +2465,24 @@ exports.ServerTypes = void 0;
2234
2465
  antelope.Struct.type('location_info')
2235
2466
  ], location_info);
2236
2467
  Types.location_info = location_info;
2468
+ let migratetasks = class migratetasks extends antelope.Struct {
2469
+ };
2470
+ tslib.__decorate([
2471
+ antelope.Struct.field(antelope.UInt32)
2472
+ ], migratetasks.prototype, "batch", void 0);
2473
+ migratetasks = tslib.__decorate([
2474
+ antelope.Struct.type('migratetasks')
2475
+ ], migratetasks);
2476
+ Types.migratetasks = migratetasks;
2477
+ let migswap = class migswap extends antelope.Struct {
2478
+ };
2479
+ tslib.__decorate([
2480
+ antelope.Struct.field(antelope.UInt32)
2481
+ ], migswap.prototype, "batch", void 0);
2482
+ migswap = tslib.__decorate([
2483
+ antelope.Struct.type('migswap')
2484
+ ], migswap);
2485
+ Types.migswap = migswap;
2237
2486
  let module_info = class module_info extends antelope.Struct {
2238
2487
  };
2239
2488
  tslib.__decorate([
@@ -2587,6 +2836,9 @@ exports.ServerTypes = void 0;
2587
2836
  tslib.__decorate([
2588
2837
  antelope.Struct.field(crafter_lane, { array: true })
2589
2838
  ], projected_state.prototype, "crafter_lanes", void 0);
2839
+ tslib.__decorate([
2840
+ antelope.Struct.field(builder_lane, { array: true })
2841
+ ], projected_state.prototype, "builder_lanes", void 0);
2590
2842
  tslib.__decorate([
2591
2843
  antelope.Struct.field(loader_lane, { array: true })
2592
2844
  ], projected_state.prototype, "loader_lanes", void 0);
@@ -2807,6 +3059,36 @@ exports.ServerTypes = void 0;
2807
3059
  antelope.Struct.type('route_waypoint')
2808
3060
  ], route_waypoint);
2809
3061
  Types.route_waypoint = route_waypoint;
3062
+ let service_socket = class service_socket extends antelope.Struct {
3063
+ };
3064
+ tslib.__decorate([
3065
+ antelope.Struct.field('bool')
3066
+ ], service_socket.prototype, "open", void 0);
3067
+ service_socket = tslib.__decorate([
3068
+ antelope.Struct.type('service_socket')
3069
+ ], service_socket);
3070
+ Types.service_socket = service_socket;
3071
+ let service_row = class service_row extends antelope.Struct {
3072
+ };
3073
+ tslib.__decorate([
3074
+ antelope.Struct.field(antelope.UInt64)
3075
+ ], service_row.prototype, "entity", void 0);
3076
+ tslib.__decorate([
3077
+ antelope.Struct.field(service_socket, { array: true })
3078
+ ], service_row.prototype, "sockets", void 0);
3079
+ service_row = tslib.__decorate([
3080
+ antelope.Struct.type('service_row')
3081
+ ], service_row);
3082
+ Types.service_row = service_row;
3083
+ let setcivic = class setcivic extends antelope.Struct {
3084
+ };
3085
+ tslib.__decorate([
3086
+ antelope.Struct.field(antelope.Name)
3087
+ ], setcivic.prototype, "account", void 0);
3088
+ setcivic = tslib.__decorate([
3089
+ antelope.Struct.type('setcivic')
3090
+ ], setcivic);
3091
+ Types.setcivic = setcivic;
2810
3092
  let setcoords = class setcoords extends antelope.Struct {
2811
3093
  };
2812
3094
  tslib.__decorate([
@@ -2837,6 +3119,21 @@ exports.ServerTypes = void 0;
2837
3119
  antelope.Struct.type('setnftcfg')
2838
3120
  ], setnftcfg);
2839
3121
  Types.setnftcfg = setnftcfg;
3122
+ let setsocket = class setsocket extends antelope.Struct {
3123
+ };
3124
+ tslib.__decorate([
3125
+ antelope.Struct.field(antelope.UInt64)
3126
+ ], setsocket.prototype, "workshop_id", void 0);
3127
+ tslib.__decorate([
3128
+ antelope.Struct.field(antelope.UInt8)
3129
+ ], setsocket.prototype, "slot", void 0);
3130
+ tslib.__decorate([
3131
+ antelope.Struct.field('bool')
3132
+ ], setsocket.prototype, "open", void 0);
3133
+ setsocket = tslib.__decorate([
3134
+ antelope.Struct.type('setsocket')
3135
+ ], setsocket);
3136
+ Types.setsocket = setsocket;
2840
3137
  let setthreshold = class setthreshold extends antelope.Struct {
2841
3138
  };
2842
3139
  tslib.__decorate([
@@ -2873,6 +3170,24 @@ exports.ServerTypes = void 0;
2873
3170
  antelope.Struct.type('setwrapfee')
2874
3171
  ], setwrapfee);
2875
3172
  Types.setwrapfee = setwrapfee;
3173
+ let shuttle = class shuttle extends antelope.Struct {
3174
+ };
3175
+ tslib.__decorate([
3176
+ antelope.Struct.field(antelope.UInt64)
3177
+ ], shuttle.prototype, "carrier", void 0);
3178
+ tslib.__decorate([
3179
+ antelope.Struct.field(antelope.UInt64)
3180
+ ], shuttle.prototype, "from_id", void 0);
3181
+ tslib.__decorate([
3182
+ antelope.Struct.field(antelope.UInt64)
3183
+ ], shuttle.prototype, "to_id", void 0);
3184
+ tslib.__decorate([
3185
+ antelope.Struct.field(cargo_item, { array: true })
3186
+ ], shuttle.prototype, "items", void 0);
3187
+ shuttle = tslib.__decorate([
3188
+ antelope.Struct.type('shuttle')
3189
+ ], shuttle);
3190
+ Types.shuttle = shuttle;
2876
3191
  let stowcargo = class stowcargo extends antelope.Struct {
2877
3192
  };
2878
3193
  tslib.__decorate([
@@ -3041,21 +3356,21 @@ exports.ServerTypes = void 0;
3041
3356
  antelope.Struct.type('travel')
3042
3357
  ], travel);
3043
3358
  Types.travel = travel;
3044
- let travelroute = class travelroute extends antelope.Struct {
3359
+ let travelplan = class travelplan extends antelope.Struct {
3045
3360
  };
3046
3361
  tslib.__decorate([
3047
3362
  antelope.Struct.field(entity_ref, { array: true })
3048
- ], travelroute.prototype, "entities", void 0);
3363
+ ], travelplan.prototype, "entities", void 0);
3049
3364
  tslib.__decorate([
3050
3365
  antelope.Struct.field(route_waypoint, { array: true })
3051
- ], travelroute.prototype, "waypoints", void 0);
3366
+ ], travelplan.prototype, "waypoints", void 0);
3052
3367
  tslib.__decorate([
3053
3368
  antelope.Struct.field('bool')
3054
- ], travelroute.prototype, "recharge", void 0);
3055
- travelroute = tslib.__decorate([
3056
- antelope.Struct.type('travelroute')
3057
- ], travelroute);
3058
- Types.travelroute = travelroute;
3369
+ ], travelplan.prototype, "recharge", void 0);
3370
+ travelplan = tslib.__decorate([
3371
+ antelope.Struct.type('travelplan')
3372
+ ], travelplan);
3373
+ Types.travelplan = travelplan;
3059
3374
  let types_row = class types_row extends antelope.Struct {
3060
3375
  };
3061
3376
  tslib.__decorate([
@@ -3191,19 +3506,23 @@ exports.ServerTypes = void 0;
3191
3506
  })(exports.ServerTypes || (exports.ServerTypes = {}));
3192
3507
  const TableMap = {
3193
3508
  cargo: exports.ServerTypes.cargo_row,
3509
+ civicconfig: exports.ServerTypes.civicconfig_row,
3194
3510
  claims: exports.ServerTypes.claim_row,
3195
3511
  cluster: exports.ServerTypes.cluster_row,
3196
3512
  commit: exports.ServerTypes.commit_row,
3197
3513
  entity: exports.ServerTypes.entity_row,
3514
+ 'entity.mig': exports.ServerTypes.entity_row,
3198
3515
  entitygroup: exports.ServerTypes.entitygroup_row,
3199
3516
  entityseq: exports.ServerTypes.entity_seq_row,
3200
3517
  epoch: exports.ServerTypes.epoch_row,
3518
+ jobs: exports.ServerTypes.job_row,
3201
3519
  nftconfig: exports.ServerTypes.nftconfig_row,
3202
3520
  oraclecfg: exports.ServerTypes.oracle_config_row,
3203
3521
  oracles: exports.ServerTypes.oracle_row,
3204
3522
  player: exports.ServerTypes.player_row,
3205
3523
  reserve: exports.ServerTypes.reserve_row,
3206
3524
  reveal: exports.ServerTypes.reveal_row,
3525
+ service: exports.ServerTypes.service_row,
3207
3526
  state: exports.ServerTypes.state_row,
3208
3527
  types: exports.ServerTypes.types_row,
3209
3528
  wrapconfig: exports.ServerTypes.wrapconfig_row,
@@ -3324,7 +3643,7 @@ const INSUFFICIENT_BALANCE = 'Insufficient balance.';
3324
3643
  const INSUFFICIENT_ITEM_QUANTITY = 'Insufficient quantity in cargo.';
3325
3644
  const INSUFFICIENT_ITEM_SUPPLY = 'Insufficient supply of item at location.';
3326
3645
 
3327
- const PRECISION$1 = 10000;
3646
+ const PRECISION = 10000;
3328
3647
  const CRAFT_ENERGY_DIVISOR = 150000;
3329
3648
  const PLANETARY_STRUCTURE_Z = 0;
3330
3649
  const CONTAINER_Z = 300;
@@ -3346,15 +3665,15 @@ exports.TaskType = void 0;
3346
3665
  TaskType[TaskType["GATHER"] = 5] = "GATHER";
3347
3666
  TaskType[TaskType["WARP"] = 6] = "WARP";
3348
3667
  TaskType[TaskType["CRAFT"] = 7] = "CRAFT";
3349
- TaskType[TaskType["DEPLOY"] = 8] = "DEPLOY";
3350
3668
  TaskType[TaskType["TRANSIT"] = 9] = "TRANSIT";
3351
3669
  TaskType[TaskType["UNWRAP"] = 10] = "UNWRAP";
3352
3670
  TaskType[TaskType["UNDEPLOY"] = 11] = "UNDEPLOY";
3671
+ TaskType[TaskType["LAUNCH"] = 12] = "LAUNCH";
3353
3672
  TaskType[TaskType["DEMOLISH"] = 13] = "DEMOLISH";
3354
- TaskType[TaskType["CLAIMPLOT"] = 14] = "CLAIMPLOT";
3355
3673
  TaskType[TaskType["BUILDPLOT"] = 15] = "BUILDPLOT";
3356
3674
  TaskType[TaskType["CHARGE"] = 16] = "CHARGE";
3357
3675
  TaskType[TaskType["UPGRADE"] = 17] = "UPGRADE";
3676
+ TaskType[TaskType["SHUTTLE"] = 18] = "SHUTTLE";
3358
3677
  })(exports.TaskType || (exports.TaskType = {}));
3359
3678
  exports.HoldKind = void 0;
3360
3679
  (function (HoldKind) {
@@ -3362,6 +3681,7 @@ exports.HoldKind = void 0;
3362
3681
  HoldKind[HoldKind["PUSH"] = 2] = "PUSH";
3363
3682
  HoldKind[HoldKind["GATHER"] = 3] = "GATHER";
3364
3683
  HoldKind[HoldKind["BUILD"] = 4] = "BUILD";
3684
+ HoldKind[HoldKind["FLIGHT"] = 5] = "FLIGHT";
3365
3685
  HoldKind[HoldKind["UPGRADE"] = 6] = "UPGRADE";
3366
3686
  })(exports.HoldKind || (exports.HoldKind = {}));
3367
3687
  exports.LocationType = void 0;
@@ -3496,6 +3816,7 @@ const ITEM_HAULER_T1 = 10106;
3496
3816
  const ITEM_WARP_T1 = 10107;
3497
3817
  const ITEM_BATTERY_T1 = 10108;
3498
3818
  const ITEM_LAUNCHER_T1 = 10109;
3819
+ const ITEM_BUILDER_T1 = 10110;
3499
3820
  const ITEM_CONTAINER_T1_PACKED = 10200;
3500
3821
  const ITEM_SHIP_T1_PACKED = 10201;
3501
3822
  const ITEM_WAREHOUSE_T1_PACKED = 10202;
@@ -3504,6 +3825,15 @@ const ITEM_FACTORY_T1_PACKED = 10204;
3504
3825
  const ITEM_MASS_DRIVER_T1_PACKED = 10205;
3505
3826
  const ITEM_MASS_CATCHER_T1_PACKED = 10206;
3506
3827
  const ITEM_HUB_T1_PACKED = 10207;
3828
+ const ITEM_WORKSHOP_T1_PACKED = 10208;
3829
+ const ITEM_ROUSTABOUT_T1_PACKED = 10210;
3830
+ const ITEM_PROSPECTOR_T1_PACKED = 10211;
3831
+ const ITEM_TENDER_T1_PACKED = 10212;
3832
+ const ITEM_WRIGHT_T1_PACKED = 10213;
3833
+ const ITEM_TUG_T1_PACKED = 10214;
3834
+ const ITEM_PORTER_T1_PACKED = 10215;
3835
+ const ITEM_WRANGLER_T1_PACKED = 10216;
3836
+ const ITEM_DREDGER_T1_PACKED = 10217;
3507
3837
  const ITEM_PLATE_T2 = 20001;
3508
3838
  const ITEM_FRAME_T2 = 20002;
3509
3839
  const ITEM_PLASMA_CELL_T2 = 20003;
@@ -4307,47 +4637,31 @@ var recipes = [
4307
4637
  ]
4308
4638
  },
4309
4639
  {
4310
- outputItemId: 10200,
4311
- outputMass: 1900000,
4640
+ outputItemId: 10110,
4641
+ outputMass: 960000,
4312
4642
  inputs: [
4313
4643
  {
4314
- itemId: 10001,
4315
- quantity: 600
4644
+ itemId: 10005,
4645
+ quantity: 300
4316
4646
  },
4317
4647
  {
4318
- itemId: 10008,
4319
- quantity: 600
4648
+ itemId: 10002,
4649
+ quantity: 300
4320
4650
  }
4321
4651
  ],
4322
4652
  statSlots: [
4323
- {
4324
- sources: [
4325
- {
4326
- inputIndex: 0,
4327
- statIndex: 0
4328
- }
4329
- ]
4330
- },
4331
- {
4332
- sources: [
4333
- {
4334
- inputIndex: 0,
4335
- statIndex: 1
4336
- }
4337
- ]
4338
- },
4339
4653
  {
4340
4654
  sources: [
4341
4655
  {
4342
4656
  inputIndex: 1,
4343
- statIndex: 0
4657
+ statIndex: 1
4344
4658
  }
4345
4659
  ]
4346
4660
  },
4347
4661
  {
4348
4662
  sources: [
4349
4663
  {
4350
- inputIndex: 1,
4664
+ inputIndex: 0,
4351
4665
  statIndex: 1
4352
4666
  }
4353
4667
  ]
@@ -4357,28 +4671,16 @@ var recipes = [
4357
4671
  ]
4358
4672
  },
4359
4673
  {
4360
- outputItemId: 10201,
4361
- outputMass: 2400000,
4674
+ outputItemId: 10200,
4675
+ outputMass: 1900000,
4362
4676
  inputs: [
4363
4677
  {
4364
4678
  itemId: 10001,
4365
- quantity: 300
4679
+ quantity: 600
4366
4680
  },
4367
4681
  {
4368
4682
  itemId: 10008,
4369
- quantity: 300
4370
- },
4371
- {
4372
- itemId: 10007,
4373
- quantity: 300
4374
- },
4375
- {
4376
- itemId: 10003,
4377
- quantity: 300
4378
- },
4379
- {
4380
- itemId: 10006,
4381
- quantity: 300
4683
+ quantity: 600
4382
4684
  }
4383
4685
  ],
4384
4686
  statSlots: [
@@ -4400,10 +4702,18 @@ var recipes = [
4400
4702
  },
4401
4703
  {
4402
4704
  sources: [
4705
+ {
4706
+ inputIndex: 1,
4707
+ statIndex: 0
4708
+ }
4403
4709
  ]
4404
4710
  },
4405
4711
  {
4406
4712
  sources: [
4713
+ {
4714
+ inputIndex: 1,
4715
+ statIndex: 1
4716
+ }
4407
4717
  ]
4408
4718
  }
4409
4719
  ],
@@ -4575,12 +4885,28 @@ var recipes = [
4575
4885
  ]
4576
4886
  },
4577
4887
  {
4578
- outputItemId: 20001,
4579
- outputMass: 4800,
4888
+ outputItemId: 10210,
4889
+ outputMass: 1600000,
4580
4890
  inputs: [
4581
4891
  {
4582
- itemId: 102,
4583
- quantity: 12
4892
+ itemId: 10001,
4893
+ quantity: 200
4894
+ },
4895
+ {
4896
+ itemId: 10008,
4897
+ quantity: 200
4898
+ },
4899
+ {
4900
+ itemId: 10007,
4901
+ quantity: 200
4902
+ },
4903
+ {
4904
+ itemId: 10003,
4905
+ quantity: 200
4906
+ },
4907
+ {
4908
+ itemId: 10006,
4909
+ quantity: 200
4584
4910
  }
4585
4911
  ],
4586
4912
  statSlots: [
@@ -4595,42 +4921,761 @@ var recipes = [
4595
4921
  {
4596
4922
  sources: [
4597
4923
  {
4598
- inputIndex: 0,
4599
- statIndex: 2
4924
+ inputIndex: 1,
4925
+ statIndex: 0
4600
4926
  }
4601
4927
  ]
4602
4928
  },
4603
4929
  {
4604
4930
  sources: [
4605
4931
  {
4606
- inputIndex: 0,
4607
- statIndex: 1
4932
+ inputIndex: 2,
4933
+ statIndex: 0
4608
4934
  }
4609
4935
  ]
4610
- }
4611
- ],
4612
- blendWeights: [
4613
- ]
4614
- },
4615
- {
4616
- outputItemId: 20002,
4617
- outputMass: 4800,
4618
- inputs: [
4619
- {
4620
- itemId: 402,
4621
- quantity: 6
4622
4936
  },
4623
- {
4624
- itemId: 502,
4625
- quantity: 6
4626
- }
4627
- ],
4628
- statSlots: [
4629
4937
  {
4630
4938
  sources: [
4631
4939
  {
4632
- inputIndex: 0,
4633
- statIndex: 1
4940
+ inputIndex: 3,
4941
+ statIndex: 0
4942
+ }
4943
+ ]
4944
+ },
4945
+ {
4946
+ sources: [
4947
+ {
4948
+ inputIndex: 4,
4949
+ statIndex: 0
4950
+ }
4951
+ ]
4952
+ }
4953
+ ],
4954
+ blendWeights: [
4955
+ ]
4956
+ },
4957
+ {
4958
+ outputItemId: 10211,
4959
+ outputMass: 2400000,
4960
+ inputs: [
4961
+ {
4962
+ itemId: 10005,
4963
+ quantity: 100
4964
+ },
4965
+ {
4966
+ itemId: 10002,
4967
+ quantity: 100
4968
+ },
4969
+ {
4970
+ itemId: 10010,
4971
+ quantity: 100
4972
+ },
4973
+ {
4974
+ itemId: 10009,
4975
+ quantity: 100
4976
+ },
4977
+ {
4978
+ itemId: 10004,
4979
+ quantity: 100
4980
+ },
4981
+ {
4982
+ itemId: 10210,
4983
+ quantity: 1
4984
+ }
4985
+ ],
4986
+ statSlots: [
4987
+ {
4988
+ sources: [
4989
+ {
4990
+ inputIndex: 0,
4991
+ statIndex: 0
4992
+ },
4993
+ {
4994
+ inputIndex: 5,
4995
+ statIndex: 0
4996
+ }
4997
+ ]
4998
+ },
4999
+ {
5000
+ sources: [
5001
+ {
5002
+ inputIndex: 1,
5003
+ statIndex: 0
5004
+ },
5005
+ {
5006
+ inputIndex: 5,
5007
+ statIndex: 1
5008
+ }
5009
+ ]
5010
+ },
5011
+ {
5012
+ sources: [
5013
+ {
5014
+ inputIndex: 2,
5015
+ statIndex: 0
5016
+ },
5017
+ {
5018
+ inputIndex: 5,
5019
+ statIndex: 2
5020
+ }
5021
+ ]
5022
+ },
5023
+ {
5024
+ sources: [
5025
+ {
5026
+ inputIndex: 3,
5027
+ statIndex: 0
5028
+ },
5029
+ {
5030
+ inputIndex: 5,
5031
+ statIndex: 3
5032
+ }
5033
+ ]
5034
+ },
5035
+ {
5036
+ sources: [
5037
+ {
5038
+ inputIndex: 4,
5039
+ statIndex: 0
5040
+ },
5041
+ {
5042
+ inputIndex: 5,
5043
+ statIndex: 4
5044
+ }
5045
+ ]
5046
+ }
5047
+ ],
5048
+ blendWeights: [
5049
+ ],
5050
+ sourceSubclass: 10210
5051
+ },
5052
+ {
5053
+ outputItemId: 10212,
5054
+ outputMass: 2400000,
5055
+ inputs: [
5056
+ {
5057
+ itemId: 10005,
5058
+ quantity: 100
5059
+ },
5060
+ {
5061
+ itemId: 10002,
5062
+ quantity: 100
5063
+ },
5064
+ {
5065
+ itemId: 10010,
5066
+ quantity: 100
5067
+ },
5068
+ {
5069
+ itemId: 10009,
5070
+ quantity: 100
5071
+ },
5072
+ {
5073
+ itemId: 10004,
5074
+ quantity: 100
5075
+ },
5076
+ {
5077
+ itemId: 10210,
5078
+ quantity: 1
5079
+ }
5080
+ ],
5081
+ statSlots: [
5082
+ {
5083
+ sources: [
5084
+ {
5085
+ inputIndex: 0,
5086
+ statIndex: 0
5087
+ },
5088
+ {
5089
+ inputIndex: 5,
5090
+ statIndex: 0
5091
+ }
5092
+ ]
5093
+ },
5094
+ {
5095
+ sources: [
5096
+ {
5097
+ inputIndex: 1,
5098
+ statIndex: 0
5099
+ },
5100
+ {
5101
+ inputIndex: 5,
5102
+ statIndex: 1
5103
+ }
5104
+ ]
5105
+ },
5106
+ {
5107
+ sources: [
5108
+ {
5109
+ inputIndex: 2,
5110
+ statIndex: 0
5111
+ },
5112
+ {
5113
+ inputIndex: 5,
5114
+ statIndex: 2
5115
+ }
5116
+ ]
5117
+ },
5118
+ {
5119
+ sources: [
5120
+ {
5121
+ inputIndex: 3,
5122
+ statIndex: 0
5123
+ },
5124
+ {
5125
+ inputIndex: 5,
5126
+ statIndex: 3
5127
+ }
5128
+ ]
5129
+ },
5130
+ {
5131
+ sources: [
5132
+ {
5133
+ inputIndex: 4,
5134
+ statIndex: 0
5135
+ },
5136
+ {
5137
+ inputIndex: 5,
5138
+ statIndex: 4
5139
+ }
5140
+ ]
5141
+ }
5142
+ ],
5143
+ blendWeights: [
5144
+ ],
5145
+ sourceSubclass: 10210
5146
+ },
5147
+ {
5148
+ outputItemId: 10213,
5149
+ outputMass: 2400000,
5150
+ inputs: [
5151
+ {
5152
+ itemId: 10005,
5153
+ quantity: 100
5154
+ },
5155
+ {
5156
+ itemId: 10002,
5157
+ quantity: 100
5158
+ },
5159
+ {
5160
+ itemId: 10010,
5161
+ quantity: 100
5162
+ },
5163
+ {
5164
+ itemId: 10009,
5165
+ quantity: 100
5166
+ },
5167
+ {
5168
+ itemId: 10004,
5169
+ quantity: 100
5170
+ },
5171
+ {
5172
+ itemId: 10210,
5173
+ quantity: 1
5174
+ }
5175
+ ],
5176
+ statSlots: [
5177
+ {
5178
+ sources: [
5179
+ {
5180
+ inputIndex: 0,
5181
+ statIndex: 0
5182
+ },
5183
+ {
5184
+ inputIndex: 5,
5185
+ statIndex: 0
5186
+ }
5187
+ ]
5188
+ },
5189
+ {
5190
+ sources: [
5191
+ {
5192
+ inputIndex: 1,
5193
+ statIndex: 0
5194
+ },
5195
+ {
5196
+ inputIndex: 5,
5197
+ statIndex: 1
5198
+ }
5199
+ ]
5200
+ },
5201
+ {
5202
+ sources: [
5203
+ {
5204
+ inputIndex: 2,
5205
+ statIndex: 0
5206
+ },
5207
+ {
5208
+ inputIndex: 5,
5209
+ statIndex: 2
5210
+ }
5211
+ ]
5212
+ },
5213
+ {
5214
+ sources: [
5215
+ {
5216
+ inputIndex: 3,
5217
+ statIndex: 0
5218
+ },
5219
+ {
5220
+ inputIndex: 5,
5221
+ statIndex: 3
5222
+ }
5223
+ ]
5224
+ },
5225
+ {
5226
+ sources: [
5227
+ {
5228
+ inputIndex: 4,
5229
+ statIndex: 0
5230
+ },
5231
+ {
5232
+ inputIndex: 5,
5233
+ statIndex: 4
5234
+ }
5235
+ ]
5236
+ }
5237
+ ],
5238
+ blendWeights: [
5239
+ ],
5240
+ sourceSubclass: 10210
5241
+ },
5242
+ {
5243
+ outputItemId: 10214,
5244
+ outputMass: 2400000,
5245
+ inputs: [
5246
+ {
5247
+ itemId: 10005,
5248
+ quantity: 100
5249
+ },
5250
+ {
5251
+ itemId: 10002,
5252
+ quantity: 100
5253
+ },
5254
+ {
5255
+ itemId: 10010,
5256
+ quantity: 100
5257
+ },
5258
+ {
5259
+ itemId: 10009,
5260
+ quantity: 100
5261
+ },
5262
+ {
5263
+ itemId: 10004,
5264
+ quantity: 100
5265
+ },
5266
+ {
5267
+ itemId: 10210,
5268
+ quantity: 1
5269
+ }
5270
+ ],
5271
+ statSlots: [
5272
+ {
5273
+ sources: [
5274
+ {
5275
+ inputIndex: 0,
5276
+ statIndex: 0
5277
+ },
5278
+ {
5279
+ inputIndex: 5,
5280
+ statIndex: 0
5281
+ }
5282
+ ]
5283
+ },
5284
+ {
5285
+ sources: [
5286
+ {
5287
+ inputIndex: 1,
5288
+ statIndex: 0
5289
+ },
5290
+ {
5291
+ inputIndex: 5,
5292
+ statIndex: 1
5293
+ }
5294
+ ]
5295
+ },
5296
+ {
5297
+ sources: [
5298
+ {
5299
+ inputIndex: 2,
5300
+ statIndex: 0
5301
+ },
5302
+ {
5303
+ inputIndex: 5,
5304
+ statIndex: 2
5305
+ }
5306
+ ]
5307
+ },
5308
+ {
5309
+ sources: [
5310
+ {
5311
+ inputIndex: 3,
5312
+ statIndex: 0
5313
+ },
5314
+ {
5315
+ inputIndex: 5,
5316
+ statIndex: 3
5317
+ }
5318
+ ]
5319
+ },
5320
+ {
5321
+ sources: [
5322
+ {
5323
+ inputIndex: 4,
5324
+ statIndex: 0
5325
+ },
5326
+ {
5327
+ inputIndex: 5,
5328
+ statIndex: 4
5329
+ }
5330
+ ]
5331
+ }
5332
+ ],
5333
+ blendWeights: [
5334
+ ],
5335
+ sourceSubclass: 10210
5336
+ },
5337
+ {
5338
+ outputItemId: 10215,
5339
+ outputMass: 2400000,
5340
+ inputs: [
5341
+ {
5342
+ itemId: 10005,
5343
+ quantity: 100
5344
+ },
5345
+ {
5346
+ itemId: 10002,
5347
+ quantity: 100
5348
+ },
5349
+ {
5350
+ itemId: 10010,
5351
+ quantity: 100
5352
+ },
5353
+ {
5354
+ itemId: 10009,
5355
+ quantity: 100
5356
+ },
5357
+ {
5358
+ itemId: 10004,
5359
+ quantity: 100
5360
+ },
5361
+ {
5362
+ itemId: 10210,
5363
+ quantity: 1
5364
+ }
5365
+ ],
5366
+ statSlots: [
5367
+ {
5368
+ sources: [
5369
+ {
5370
+ inputIndex: 0,
5371
+ statIndex: 0
5372
+ },
5373
+ {
5374
+ inputIndex: 5,
5375
+ statIndex: 0
5376
+ }
5377
+ ]
5378
+ },
5379
+ {
5380
+ sources: [
5381
+ {
5382
+ inputIndex: 1,
5383
+ statIndex: 0
5384
+ },
5385
+ {
5386
+ inputIndex: 5,
5387
+ statIndex: 1
5388
+ }
5389
+ ]
5390
+ },
5391
+ {
5392
+ sources: [
5393
+ {
5394
+ inputIndex: 2,
5395
+ statIndex: 0
5396
+ },
5397
+ {
5398
+ inputIndex: 5,
5399
+ statIndex: 2
5400
+ }
5401
+ ]
5402
+ },
5403
+ {
5404
+ sources: [
5405
+ {
5406
+ inputIndex: 3,
5407
+ statIndex: 0
5408
+ },
5409
+ {
5410
+ inputIndex: 5,
5411
+ statIndex: 3
5412
+ }
5413
+ ]
5414
+ },
5415
+ {
5416
+ sources: [
5417
+ {
5418
+ inputIndex: 4,
5419
+ statIndex: 0
5420
+ },
5421
+ {
5422
+ inputIndex: 5,
5423
+ statIndex: 4
5424
+ }
5425
+ ]
5426
+ }
5427
+ ],
5428
+ blendWeights: [
5429
+ ],
5430
+ sourceSubclass: 10210
5431
+ },
5432
+ {
5433
+ outputItemId: 10216,
5434
+ outputMass: 3600000,
5435
+ inputs: [
5436
+ {
5437
+ itemId: 10005,
5438
+ quantity: 150
5439
+ },
5440
+ {
5441
+ itemId: 10002,
5442
+ quantity: 150
5443
+ },
5444
+ {
5445
+ itemId: 10010,
5446
+ quantity: 150
5447
+ },
5448
+ {
5449
+ itemId: 10009,
5450
+ quantity: 150
5451
+ },
5452
+ {
5453
+ itemId: 10004,
5454
+ quantity: 150
5455
+ },
5456
+ {
5457
+ itemId: 10211,
5458
+ quantity: 1
5459
+ }
5460
+ ],
5461
+ statSlots: [
5462
+ {
5463
+ sources: [
5464
+ {
5465
+ inputIndex: 0,
5466
+ statIndex: 0
5467
+ },
5468
+ {
5469
+ inputIndex: 5,
5470
+ statIndex: 0
5471
+ }
5472
+ ]
5473
+ },
5474
+ {
5475
+ sources: [
5476
+ {
5477
+ inputIndex: 1,
5478
+ statIndex: 0
5479
+ },
5480
+ {
5481
+ inputIndex: 5,
5482
+ statIndex: 1
5483
+ }
5484
+ ]
5485
+ },
5486
+ {
5487
+ sources: [
5488
+ {
5489
+ inputIndex: 2,
5490
+ statIndex: 0
5491
+ },
5492
+ {
5493
+ inputIndex: 5,
5494
+ statIndex: 2
5495
+ }
5496
+ ]
5497
+ },
5498
+ {
5499
+ sources: [
5500
+ {
5501
+ inputIndex: 3,
5502
+ statIndex: 0
5503
+ },
5504
+ {
5505
+ inputIndex: 5,
5506
+ statIndex: 3
5507
+ }
5508
+ ]
5509
+ },
5510
+ {
5511
+ sources: [
5512
+ {
5513
+ inputIndex: 4,
5514
+ statIndex: 0
5515
+ },
5516
+ {
5517
+ inputIndex: 5,
5518
+ statIndex: 4
5519
+ }
5520
+ ]
5521
+ }
5522
+ ],
5523
+ blendWeights: [
5524
+ ],
5525
+ sourceSubclass: 10211
5526
+ },
5527
+ {
5528
+ outputItemId: 10217,
5529
+ outputMass: 3600000,
5530
+ inputs: [
5531
+ {
5532
+ itemId: 10005,
5533
+ quantity: 150
5534
+ },
5535
+ {
5536
+ itemId: 10002,
5537
+ quantity: 150
5538
+ },
5539
+ {
5540
+ itemId: 10010,
5541
+ quantity: 150
5542
+ },
5543
+ {
5544
+ itemId: 10009,
5545
+ quantity: 150
5546
+ },
5547
+ {
5548
+ itemId: 10004,
5549
+ quantity: 150
5550
+ },
5551
+ {
5552
+ itemId: 10211,
5553
+ quantity: 1
5554
+ }
5555
+ ],
5556
+ statSlots: [
5557
+ {
5558
+ sources: [
5559
+ {
5560
+ inputIndex: 0,
5561
+ statIndex: 0
5562
+ },
5563
+ {
5564
+ inputIndex: 5,
5565
+ statIndex: 0
5566
+ }
5567
+ ]
5568
+ },
5569
+ {
5570
+ sources: [
5571
+ {
5572
+ inputIndex: 1,
5573
+ statIndex: 0
5574
+ },
5575
+ {
5576
+ inputIndex: 5,
5577
+ statIndex: 1
5578
+ }
5579
+ ]
5580
+ },
5581
+ {
5582
+ sources: [
5583
+ {
5584
+ inputIndex: 2,
5585
+ statIndex: 0
5586
+ },
5587
+ {
5588
+ inputIndex: 5,
5589
+ statIndex: 2
5590
+ }
5591
+ ]
5592
+ },
5593
+ {
5594
+ sources: [
5595
+ {
5596
+ inputIndex: 3,
5597
+ statIndex: 0
5598
+ },
5599
+ {
5600
+ inputIndex: 5,
5601
+ statIndex: 3
5602
+ }
5603
+ ]
5604
+ },
5605
+ {
5606
+ sources: [
5607
+ {
5608
+ inputIndex: 4,
5609
+ statIndex: 0
5610
+ },
5611
+ {
5612
+ inputIndex: 5,
5613
+ statIndex: 4
5614
+ }
5615
+ ]
5616
+ }
5617
+ ],
5618
+ blendWeights: [
5619
+ ],
5620
+ sourceSubclass: 10211
5621
+ },
5622
+ {
5623
+ outputItemId: 20001,
5624
+ outputMass: 4800,
5625
+ inputs: [
5626
+ {
5627
+ itemId: 102,
5628
+ quantity: 12
5629
+ }
5630
+ ],
5631
+ statSlots: [
5632
+ {
5633
+ sources: [
5634
+ {
5635
+ inputIndex: 0,
5636
+ statIndex: 0
5637
+ }
5638
+ ]
5639
+ },
5640
+ {
5641
+ sources: [
5642
+ {
5643
+ inputIndex: 0,
5644
+ statIndex: 2
5645
+ }
5646
+ ]
5647
+ },
5648
+ {
5649
+ sources: [
5650
+ {
5651
+ inputIndex: 0,
5652
+ statIndex: 1
5653
+ }
5654
+ ]
5655
+ }
5656
+ ],
5657
+ blendWeights: [
5658
+ ]
5659
+ },
5660
+ {
5661
+ outputItemId: 20002,
5662
+ outputMass: 4800,
5663
+ inputs: [
5664
+ {
5665
+ itemId: 402,
5666
+ quantity: 6
5667
+ },
5668
+ {
5669
+ itemId: 502,
5670
+ quantity: 6
5671
+ }
5672
+ ],
5673
+ statSlots: [
5674
+ {
5675
+ sources: [
5676
+ {
5677
+ inputIndex: 0,
5678
+ statIndex: 1
4634
5679
  }
4635
5680
  ]
4636
5681
  },
@@ -5174,27 +6219,27 @@ var recipes = [
5174
6219
  outputMass: 3840000,
5175
6220
  inputs: [
5176
6221
  {
5177
- itemId: 20001,
5178
- quantity: 300
6222
+ itemId: 20005,
6223
+ quantity: 150
5179
6224
  },
5180
6225
  {
5181
- itemId: 20008,
5182
- quantity: 300
6226
+ itemId: 20002,
6227
+ quantity: 150
5183
6228
  },
5184
6229
  {
5185
- itemId: 20007,
5186
- quantity: 300
6230
+ itemId: 20010,
6231
+ quantity: 150
5187
6232
  },
5188
6233
  {
5189
- itemId: 20003,
5190
- quantity: 300
6234
+ itemId: 20009,
6235
+ quantity: 150
5191
6236
  },
5192
6237
  {
5193
- itemId: 20006,
5194
- quantity: 300
6238
+ itemId: 20004,
6239
+ quantity: 150
5195
6240
  },
5196
6241
  {
5197
- itemId: 10201,
6242
+ itemId: 10211,
5198
6243
  quantity: 1
5199
6244
  }
5200
6245
  ],
@@ -5214,8 +6259,8 @@ var recipes = [
5214
6259
  {
5215
6260
  sources: [
5216
6261
  {
5217
- inputIndex: 0,
5218
- statIndex: 1
6262
+ inputIndex: 1,
6263
+ statIndex: 0
5219
6264
  },
5220
6265
  {
5221
6266
  inputIndex: 5,
@@ -5225,207 +6270,484 @@ var recipes = [
5225
6270
  },
5226
6271
  {
5227
6272
  sources: [
6273
+ {
6274
+ inputIndex: 2,
6275
+ statIndex: 0
6276
+ },
6277
+ {
6278
+ inputIndex: 5,
6279
+ statIndex: 2
6280
+ }
6281
+ ]
6282
+ },
6283
+ {
6284
+ sources: [
6285
+ {
6286
+ inputIndex: 3,
6287
+ statIndex: 0
6288
+ },
6289
+ {
6290
+ inputIndex: 5,
6291
+ statIndex: 3
6292
+ }
5228
6293
  ]
5229
6294
  },
5230
6295
  {
5231
6296
  sources: [
6297
+ {
6298
+ inputIndex: 4,
6299
+ statIndex: 0
6300
+ },
6301
+ {
6302
+ inputIndex: 5,
6303
+ statIndex: 4
6304
+ }
5232
6305
  ]
5233
6306
  }
5234
6307
  ],
5235
6308
  blendWeights: [
5236
6309
  ],
5237
- sourceSubclass: 10201
6310
+ sourceSubclass: 10211
5238
6311
  },
5239
6312
  {
5240
6313
  outputItemId: 20211,
5241
6314
  outputMass: 3840000,
5242
6315
  inputs: [
5243
6316
  {
5244
- itemId: 20001,
5245
- quantity: 300
6317
+ itemId: 20005,
6318
+ quantity: 150
5246
6319
  },
5247
6320
  {
5248
6321
  itemId: 20002,
5249
- quantity: 300
6322
+ quantity: 150
5250
6323
  },
5251
6324
  {
5252
- itemId: 20008,
5253
- quantity: 300
6325
+ itemId: 20010,
6326
+ quantity: 150
5254
6327
  },
5255
6328
  {
5256
- itemId: 20010,
5257
- quantity: 300
6329
+ itemId: 20009,
6330
+ quantity: 150
5258
6331
  },
5259
6332
  {
5260
6333
  itemId: 20004,
5261
- quantity: 300
6334
+ quantity: 150
6335
+ },
6336
+ {
6337
+ itemId: 10214,
6338
+ quantity: 1
6339
+ }
6340
+ ],
6341
+ statSlots: [
6342
+ {
6343
+ sources: [
6344
+ {
6345
+ inputIndex: 0,
6346
+ statIndex: 0
6347
+ },
6348
+ {
6349
+ inputIndex: 5,
6350
+ statIndex: 0
6351
+ }
6352
+ ]
6353
+ },
6354
+ {
6355
+ sources: [
6356
+ {
6357
+ inputIndex: 1,
6358
+ statIndex: 0
6359
+ },
6360
+ {
6361
+ inputIndex: 5,
6362
+ statIndex: 1
6363
+ }
6364
+ ]
6365
+ },
6366
+ {
6367
+ sources: [
6368
+ {
6369
+ inputIndex: 2,
6370
+ statIndex: 0
6371
+ },
6372
+ {
6373
+ inputIndex: 5,
6374
+ statIndex: 2
6375
+ }
6376
+ ]
6377
+ },
6378
+ {
6379
+ sources: [
6380
+ {
6381
+ inputIndex: 3,
6382
+ statIndex: 0
6383
+ },
6384
+ {
6385
+ inputIndex: 5,
6386
+ statIndex: 3
6387
+ }
6388
+ ]
6389
+ },
6390
+ {
6391
+ sources: [
6392
+ {
6393
+ inputIndex: 4,
6394
+ statIndex: 0
6395
+ },
6396
+ {
6397
+ inputIndex: 5,
6398
+ statIndex: 4
6399
+ }
6400
+ ]
6401
+ }
6402
+ ],
6403
+ blendWeights: [
6404
+ ],
6405
+ sourceSubclass: 10214
6406
+ }
6407
+ ];
6408
+
6409
+ var entities = [
6410
+ {
6411
+ entityItemId: 10200,
6412
+ slots: [
6413
+ ],
6414
+ baseHullmass: 100000
6415
+ },
6416
+ {
6417
+ entityItemId: 10201,
6418
+ slots: [
6419
+ {
6420
+ type: "any",
6421
+ outputPct: 80,
6422
+ maxTier: 1
6423
+ },
6424
+ {
6425
+ type: "any",
6426
+ outputPct: 80,
6427
+ maxTier: 1
6428
+ },
6429
+ {
6430
+ type: "any",
6431
+ outputPct: 80,
6432
+ maxTier: 1
6433
+ },
6434
+ {
6435
+ type: "any",
6436
+ outputPct: 80,
6437
+ maxTier: 1
6438
+ },
6439
+ {
6440
+ type: "any",
6441
+ outputPct: 80,
6442
+ maxTier: 1
6443
+ }
6444
+ ],
6445
+ baseHullmass: 4000000
6446
+ },
6447
+ {
6448
+ entityItemId: 10202,
6449
+ slots: [
6450
+ {
6451
+ type: "loader",
6452
+ outputPct: 100,
6453
+ maxTier: 1
6454
+ },
6455
+ {
6456
+ type: "storage",
6457
+ outputPct: 100,
6458
+ maxTier: 1
6459
+ },
6460
+ {
6461
+ type: "storage",
6462
+ outputPct: 100,
6463
+ maxTier: 1
6464
+ },
6465
+ {
6466
+ type: "storage",
6467
+ outputPct: 100,
6468
+ maxTier: 1
6469
+ },
6470
+ {
6471
+ type: "storage",
6472
+ outputPct: 100,
6473
+ maxTier: 1
6474
+ }
6475
+ ],
6476
+ baseHullmass: 100000
6477
+ },
6478
+ {
6479
+ entityItemId: 10203,
6480
+ slots: [
6481
+ {
6482
+ type: "generator",
6483
+ outputPct: 200,
6484
+ maxTier: 1
6485
+ },
6486
+ {
6487
+ type: "gatherer",
6488
+ outputPct: 200,
6489
+ maxTier: 1
6490
+ }
6491
+ ],
6492
+ baseHullmass: 100000
6493
+ },
6494
+ {
6495
+ entityItemId: 10204,
6496
+ slots: [
6497
+ {
6498
+ type: "generator",
6499
+ outputPct: 200,
6500
+ maxTier: 1
6501
+ },
6502
+ {
6503
+ type: "crafter",
6504
+ outputPct: 200,
6505
+ maxTier: 1
6506
+ }
6507
+ ],
6508
+ baseHullmass: 100000
6509
+ },
6510
+ {
6511
+ entityItemId: 10205,
6512
+ slots: [
6513
+ {
6514
+ type: "generator",
6515
+ outputPct: 200,
6516
+ maxTier: 1
6517
+ },
6518
+ {
6519
+ type: "launcher",
6520
+ outputPct: 200,
6521
+ maxTier: 1
6522
+ }
6523
+ ],
6524
+ baseHullmass: 100000
6525
+ },
6526
+ {
6527
+ entityItemId: 10206,
6528
+ slots: [
6529
+ {
6530
+ type: "storage",
6531
+ outputPct: 100,
6532
+ maxTier: 1
6533
+ },
6534
+ {
6535
+ type: "storage",
6536
+ outputPct: 100,
6537
+ maxTier: 1
5262
6538
  },
5263
6539
  {
5264
- itemId: 10201,
5265
- quantity: 1
6540
+ type: "storage",
6541
+ outputPct: 100,
6542
+ maxTier: 1
5266
6543
  }
5267
6544
  ],
5268
- statSlots: [
6545
+ baseHullmass: 100000
6546
+ },
6547
+ {
6548
+ entityItemId: 10207,
6549
+ slots: [
6550
+ ],
6551
+ baseHullmass: 100000
6552
+ },
6553
+ {
6554
+ entityItemId: 10208,
6555
+ slots: [
5269
6556
  {
5270
- sources: [
5271
- {
5272
- inputIndex: 0,
5273
- statIndex: 0
5274
- },
5275
- {
5276
- inputIndex: 5,
5277
- statIndex: 0
5278
- }
5279
- ]
6557
+ type: "crafter",
6558
+ outputPct: 75,
6559
+ maxTier: 1
5280
6560
  },
5281
6561
  {
5282
- sources: [
5283
- {
5284
- inputIndex: 0,
5285
- statIndex: 1
5286
- },
5287
- {
5288
- inputIndex: 5,
5289
- statIndex: 1
5290
- }
5291
- ]
6562
+ type: "crafter",
6563
+ outputPct: 75,
6564
+ maxTier: 1
5292
6565
  },
5293
6566
  {
5294
- sources: [
5295
- ]
6567
+ type: "crafter",
6568
+ outputPct: 75,
6569
+ maxTier: 1
5296
6570
  },
5297
6571
  {
5298
- sources: [
5299
- ]
6572
+ type: "crafter",
6573
+ outputPct: 75,
6574
+ maxTier: 1
6575
+ },
6576
+ {
6577
+ type: "crafter",
6578
+ outputPct: 75,
6579
+ maxTier: 1
5300
6580
  }
5301
6581
  ],
5302
- blendWeights: [
5303
- ],
5304
- sourceSubclass: 10201
5305
- }
5306
- ];
5307
-
5308
- var entities = [
5309
- {
5310
- entityItemId: 10200,
5311
- slots: [
5312
- ]
6582
+ baseHullmass: 100000
5313
6583
  },
5314
6584
  {
5315
- entityItemId: 10201,
6585
+ entityItemId: 10210,
5316
6586
  slots: [
5317
6587
  {
5318
- type: "any",
6588
+ type: "generator",
5319
6589
  outputPct: 80,
5320
6590
  maxTier: 1
5321
6591
  },
5322
6592
  {
5323
- type: "any",
6593
+ type: "engine",
5324
6594
  outputPct: 80,
5325
6595
  maxTier: 1
5326
6596
  },
5327
6597
  {
5328
6598
  type: "any",
5329
- outputPct: 80,
6599
+ outputPct: 60,
6600
+ maxTier: 1
6601
+ }
6602
+ ],
6603
+ baseHullmass: 3200000
6604
+ },
6605
+ {
6606
+ entityItemId: 10211,
6607
+ slots: [
6608
+ {
6609
+ type: "generator",
6610
+ outputPct: 85,
5330
6611
  maxTier: 1
5331
6612
  },
5332
6613
  {
5333
- type: "any",
5334
- outputPct: 80,
6614
+ type: "engine",
6615
+ outputPct: 85,
5335
6616
  maxTier: 1
5336
6617
  },
5337
6618
  {
5338
- type: "any",
5339
- outputPct: 80,
6619
+ type: "gatherer",
6620
+ outputPct: 100,
5340
6621
  maxTier: 1
5341
6622
  }
5342
- ]
6623
+ ],
6624
+ baseHullmass: 3600000
5343
6625
  },
5344
6626
  {
5345
- entityItemId: 10202,
6627
+ entityItemId: 10212,
5346
6628
  slots: [
5347
6629
  {
5348
- type: "loader",
5349
- outputPct: 100,
6630
+ type: "generator",
6631
+ outputPct: 85,
5350
6632
  maxTier: 1
5351
6633
  },
5352
6634
  {
5353
- type: "storage",
5354
- outputPct: 100,
6635
+ type: "engine",
6636
+ outputPct: 85,
5355
6637
  maxTier: 1
5356
6638
  },
5357
6639
  {
5358
- type: "storage",
6640
+ type: "loader",
5359
6641
  outputPct: 100,
5360
6642
  maxTier: 1
6643
+ }
6644
+ ],
6645
+ baseHullmass: 3600000
6646
+ },
6647
+ {
6648
+ entityItemId: 10213,
6649
+ slots: [
6650
+ {
6651
+ type: "generator",
6652
+ outputPct: 85,
6653
+ maxTier: 1
5361
6654
  },
5362
6655
  {
5363
- type: "storage",
5364
- outputPct: 100,
6656
+ type: "engine",
6657
+ outputPct: 85,
5365
6658
  maxTier: 1
5366
6659
  },
5367
6660
  {
5368
- type: "storage",
6661
+ type: "builder",
5369
6662
  outputPct: 100,
5370
6663
  maxTier: 1
5371
6664
  }
5372
- ]
6665
+ ],
6666
+ baseHullmass: 4400000
5373
6667
  },
5374
6668
  {
5375
- entityItemId: 10203,
6669
+ entityItemId: 10214,
5376
6670
  slots: [
5377
6671
  {
5378
6672
  type: "generator",
5379
- outputPct: 200,
6673
+ outputPct: 85,
5380
6674
  maxTier: 1
5381
6675
  },
5382
6676
  {
5383
- type: "gatherer",
5384
- outputPct: 200,
6677
+ type: "engine",
6678
+ outputPct: 85,
6679
+ maxTier: 1
6680
+ },
6681
+ {
6682
+ type: "hauler",
6683
+ outputPct: 100,
5385
6684
  maxTier: 1
5386
6685
  }
5387
- ]
6686
+ ],
6687
+ baseHullmass: 4400000
5388
6688
  },
5389
6689
  {
5390
- entityItemId: 10204,
6690
+ entityItemId: 10215,
5391
6691
  slots: [
5392
6692
  {
5393
6693
  type: "generator",
5394
- outputPct: 200,
6694
+ outputPct: 85,
5395
6695
  maxTier: 1
5396
6696
  },
5397
6697
  {
5398
- type: "crafter",
5399
- outputPct: 200,
6698
+ type: "engine",
6699
+ outputPct: 85,
6700
+ maxTier: 1
6701
+ },
6702
+ {
6703
+ type: "storage",
6704
+ outputPct: 100,
5400
6705
  maxTier: 1
5401
6706
  }
5402
- ]
6707
+ ],
6708
+ baseHullmass: 5000000
5403
6709
  },
5404
6710
  {
5405
- entityItemId: 10205,
6711
+ entityItemId: 10216,
5406
6712
  slots: [
5407
6713
  {
5408
6714
  type: "generator",
5409
- outputPct: 200,
6715
+ outputPct: 90,
5410
6716
  maxTier: 1
5411
6717
  },
5412
6718
  {
5413
- type: "launcher",
5414
- outputPct: 200,
6719
+ type: "engine",
6720
+ outputPct: 90,
6721
+ maxTier: 1
6722
+ },
6723
+ {
6724
+ type: "gatherer",
6725
+ outputPct: 100,
6726
+ maxTier: 1
6727
+ },
6728
+ {
6729
+ type: "gatherer",
6730
+ outputPct: 100,
5415
6731
  maxTier: 1
5416
6732
  }
5417
- ]
6733
+ ],
6734
+ baseHullmass: 4000000
5418
6735
  },
5419
6736
  {
5420
- entityItemId: 10206,
6737
+ entityItemId: 10217,
5421
6738
  slots: [
5422
6739
  {
5423
- type: "storage",
5424
- outputPct: 100,
6740
+ type: "generator",
6741
+ outputPct: 90,
5425
6742
  maxTier: 1
5426
6743
  },
5427
6744
  {
5428
- type: "storage",
6745
+ type: "engine",
6746
+ outputPct: 90,
6747
+ maxTier: 1
6748
+ },
6749
+ {
6750
+ type: "gatherer",
5429
6751
  outputPct: 100,
5430
6752
  maxTier: 1
5431
6753
  },
@@ -5434,23 +6756,20 @@ var entities = [
5434
6756
  outputPct: 100,
5435
6757
  maxTier: 1
5436
6758
  }
5437
- ]
5438
- },
5439
- {
5440
- entityItemId: 10207,
5441
- slots: [
5442
- ]
6759
+ ],
6760
+ baseHullmass: 4800000
5443
6761
  },
5444
6762
  {
5445
6763
  entityItemId: 20200,
5446
6764
  slots: [
5447
- ]
6765
+ ],
6766
+ baseHullmass: 100000
5448
6767
  },
5449
6768
  {
5450
6769
  entityItemId: 20210,
5451
6770
  slots: [
5452
6771
  {
5453
- type: "engine",
6772
+ type: "generator",
5454
6773
  outputPct: 100,
5455
6774
  maxTier: 2
5456
6775
  },
@@ -5460,7 +6779,7 @@ var entities = [
5460
6779
  maxTier: 2
5461
6780
  },
5462
6781
  {
5463
- type: "gatherer",
6782
+ type: "engine",
5464
6783
  outputPct: 100,
5465
6784
  maxTier: 2
5466
6785
  },
@@ -5468,24 +6787,20 @@ var entities = [
5468
6787
  type: "gatherer",
5469
6788
  outputPct: 100,
5470
6789
  maxTier: 2
5471
- },
5472
- {
5473
- type: "any",
5474
- outputPct: 80,
5475
- maxTier: 1
5476
6790
  }
5477
- ]
6791
+ ],
6792
+ baseHullmass: 5760000
5478
6793
  },
5479
6794
  {
5480
6795
  entityItemId: 20211,
5481
6796
  slots: [
5482
6797
  {
5483
- type: "engine",
6798
+ type: "generator",
5484
6799
  outputPct: 100,
5485
6800
  maxTier: 2
5486
6801
  },
5487
6802
  {
5488
- type: "generator",
6803
+ type: "engine",
5489
6804
  outputPct: 100,
5490
6805
  maxTier: 2
5491
6806
  },
@@ -5499,7 +6814,8 @@ var entities = [
5499
6814
  outputPct: 100,
5500
6815
  maxTier: 2
5501
6816
  }
5502
- ]
6817
+ ],
6818
+ baseHullmass: 7040000
5503
6819
  }
5504
6820
  ];
5505
6821
 
@@ -6024,6 +7340,13 @@ var items = [
6024
7340
  tier: 1,
6025
7341
  subtype: "launcher"
6026
7342
  },
7343
+ {
7344
+ id: 10110,
7345
+ mass: 960000,
7346
+ type: "module",
7347
+ tier: 1,
7348
+ subtype: "builder"
7349
+ },
6027
7350
  {
6028
7351
  id: 10200,
6029
7352
  mass: 1900000,
@@ -6072,6 +7395,60 @@ var items = [
6072
7395
  type: "entity",
6073
7396
  tier: 1
6074
7397
  },
7398
+ {
7399
+ id: 10208,
7400
+ mass: 1900000,
7401
+ type: "entity",
7402
+ tier: 1
7403
+ },
7404
+ {
7405
+ id: 10210,
7406
+ mass: 1600000,
7407
+ type: "entity",
7408
+ tier: 1
7409
+ },
7410
+ {
7411
+ id: 10211,
7412
+ mass: 2400000,
7413
+ type: "entity",
7414
+ tier: 1
7415
+ },
7416
+ {
7417
+ id: 10212,
7418
+ mass: 2400000,
7419
+ type: "entity",
7420
+ tier: 1
7421
+ },
7422
+ {
7423
+ id: 10213,
7424
+ mass: 2400000,
7425
+ type: "entity",
7426
+ tier: 1
7427
+ },
7428
+ {
7429
+ id: 10214,
7430
+ mass: 2400000,
7431
+ type: "entity",
7432
+ tier: 1
7433
+ },
7434
+ {
7435
+ id: 10215,
7436
+ mass: 2400000,
7437
+ type: "entity",
7438
+ tier: 1
7439
+ },
7440
+ {
7441
+ id: 10216,
7442
+ mass: 3600000,
7443
+ type: "entity",
7444
+ tier: 1
7445
+ },
7446
+ {
7447
+ id: 10217,
7448
+ mass: 3600000,
7449
+ type: "entity",
7450
+ tier: 1
7451
+ },
6075
7452
  {
6076
7453
  id: 20001,
6077
7454
  mass: 4800,
@@ -6335,7 +7712,7 @@ const itemMetadata = {
6335
7712
  },
6336
7713
  10106: {
6337
7714
  name: 'Tractor Beam',
6338
- description: 'Projects a haul beam to lock onto and transport containers or warehouses through group travel.',
7715
+ description: 'Projects a haul beam to lock onto and transport containers through group travel.',
6339
7716
  color: '#4ADBFF',
6340
7717
  },
6341
7718
  10107: {
@@ -6353,13 +7730,18 @@ const itemMetadata = {
6353
7730
  description: 'Accelerates and launches cargo payloads toward a remote mass catcher.',
6354
7731
  color: '#E86344',
6355
7732
  },
7733
+ 10110: {
7734
+ name: 'Assembly Arm',
7735
+ description: 'Heavy manipulator arms for on-site construction work. Claims build sites, builds them out, and upgrades ships in place.',
7736
+ color: '#FFB347',
7737
+ },
6356
7738
  10200: {
6357
7739
  name: 'Container',
6358
7740
  description: 'Passive floating cargo storage in space. Towed by ships.',
6359
7741
  color: '#7B8D9E',
6360
7742
  },
6361
7743
  10201: {
6362
- name: 'Roustabout',
7744
+ name: 'Ship',
6363
7745
  description: 'General-purpose vessel with 5 module slots.',
6364
7746
  color: '#4AE898',
6365
7747
  },
@@ -6383,15 +7765,60 @@ const itemMetadata = {
6383
7765
  description: 'Planetary launch platform with power core and drive coil module slots.',
6384
7766
  color: '#E86344',
6385
7767
  },
6386
- 10206: {
6387
- name: 'Mass Catcher',
6388
- description: 'Planetary receiving platform with storage module slots; catches launched payloads.',
7768
+ 10206: {
7769
+ name: 'Mass Catcher',
7770
+ description: 'Planetary receiving platform with storage module slots; catches launched payloads.',
7771
+ color: '#4AE898',
7772
+ },
7773
+ 10207: {
7774
+ name: 'Station Hub',
7775
+ description: 'Orbital command structure. Anchors a player station cluster.',
7776
+ color: '#A0B8D0',
7777
+ },
7778
+ 10208: {
7779
+ name: 'Workshop',
7780
+ description: 'A station workshop with five independent workers. Visiting ships bring materials and power, and the workshop does the crafting.',
7781
+ color: '#B877FF',
7782
+ },
7783
+ 10210: {
7784
+ name: 'Roustabout',
7785
+ description: 'A basic starter ship. One engine, one power core, and one open slot to fit as you like.',
7786
+ color: '#4AE898',
7787
+ },
7788
+ 10211: {
7789
+ name: 'Prospector',
7790
+ description: 'A light gathering ship. One engine, one power core, one gathering rig.',
7791
+ color: '#4AE898',
7792
+ },
7793
+ 10212: {
7794
+ name: 'Tender',
7795
+ description: 'A logistics ship with a shuttle bay for moving cargo between ships and stations.',
7796
+ color: '#4AE898',
7797
+ },
7798
+ 10213: {
7799
+ name: 'Wright',
7800
+ description: 'A construction ship with an assembly arm for building structures and upgrading ships.',
7801
+ color: '#4AE898',
7802
+ },
7803
+ 10214: {
7804
+ name: 'Tug',
7805
+ description: 'A logistics ship with a tractor beam for towing containers from place to place.',
7806
+ color: '#4AE898',
7807
+ },
7808
+ 10215: {
7809
+ name: 'Porter',
7810
+ description: 'A cargo ship built around a large storage hold. The extra mass makes it slower than a Roustabout.',
6389
7811
  color: '#4AE898',
6390
7812
  },
6391
- 10207: {
6392
- name: 'Station Hub',
6393
- description: 'Orbital command structure. Anchors a player station cluster.',
6394
- color: '#A0B8D0',
7813
+ 10216: {
7814
+ name: 'Wrangler',
7815
+ description: 'A heavy gathering ship with two gathering rigs, so it mines faster.',
7816
+ color: '#4AE898',
7817
+ },
7818
+ 10217: {
7819
+ name: 'Dredger',
7820
+ description: 'A gathering ship with its own storage hold, so it can keep mining before it has to offload.',
7821
+ color: '#4AE898',
6395
7822
  },
6396
7823
  20001: {
6397
7824
  name: 'Plate',
@@ -6464,13 +7891,21 @@ const itemMetadata = {
6464
7891
  color: '#4AE898',
6465
7892
  },
6466
7893
  20211: {
6467
- name: 'Hauler',
7894
+ name: 'Tug',
6468
7895
  description: 'Advanced towing vessel with tiered engine, generator, and tractor beam slots.',
6469
7896
  color: '#4AE898',
6470
7897
  },
6471
7898
  };
6472
7899
  const entityMetadata = {
6473
7900
  10201: { moduleSlotLabels: ['Engine', 'Power Core', 'Limpet Bay', 'Shuttle Bay', 'Cargo Hold'] },
7901
+ 10210: { moduleSlotLabels: ['Power Core', 'Engine', 'Utility Bay'] },
7902
+ 10211: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay'] },
7903
+ 10212: { moduleSlotLabels: ['Power Core', 'Engine', 'Shuttle Bay'] },
7904
+ 10213: { moduleSlotLabels: ['Power Core', 'Engine', 'Assembly Arm'] },
7905
+ 10214: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam'] },
7906
+ 10215: { moduleSlotLabels: ['Power Core', 'Engine', 'Cargo Hold'] },
7907
+ 10216: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Limpet Bay'] },
7908
+ 10217: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Cargo Hold'] },
6474
7909
  10202: {
6475
7910
  moduleSlotLabels: ['Shuttle Bay', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold'],
6476
7911
  },
@@ -6478,8 +7913,11 @@ const entityMetadata = {
6478
7913
  10204: { moduleSlotLabels: ['Power Core', 'Fabricator'] },
6479
7914
  10205: { moduleSlotLabels: ['Power Core', 'Drive Coil'] },
6480
7915
  10206: { moduleSlotLabels: ['Cargo Hold', 'Cargo Hold', 'Cargo Hold'] },
6481
- 20210: { moduleSlotLabels: ['Engine', 'Power Core', 'Limpet Bay', 'Limpet Bay', 'Flex Slot'] },
6482
- 20211: { moduleSlotLabels: ['Engine', 'Power Core', 'Tractor Beam', 'Tractor Beam'] },
7916
+ 10208: {
7917
+ moduleSlotLabels: ['Fabricator', 'Fabricator', 'Fabricator', 'Fabricator', 'Fabricator'],
7918
+ },
7919
+ 20210: { moduleSlotLabels: ['Power Core', 'Power Core', 'Engine', 'Limpet Bay'] },
7920
+ 20211: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam', 'Tractor Beam'] },
6483
7921
  };
6484
7922
  for (const item of items) {
6485
7923
  if (!itemMetadata[item.id]) {
@@ -9370,14 +10808,61 @@ var kinds = [
9370
10808
  capabilityFlags: 4,
9371
10809
  zCoord: 0,
9372
10810
  defaultLabel: "Station Hub"
10811
+ },
10812
+ {
10813
+ kind: "workshop",
10814
+ classification: "OrbitalStructure",
10815
+ capabilityFlags: 20,
10816
+ zCoord: 0,
10817
+ defaultLabel: "Workshop"
9373
10818
  }
9374
10819
  ];
9375
10820
  var templates = [
9376
10821
  {
9377
10822
  itemId: 10201,
9378
10823
  kind: "ship",
10824
+ displayLabel: "Ship"
10825
+ },
10826
+ {
10827
+ itemId: 10210,
10828
+ kind: "ship",
9379
10829
  displayLabel: "Roustabout"
9380
10830
  },
10831
+ {
10832
+ itemId: 10211,
10833
+ kind: "ship",
10834
+ displayLabel: "Prospector"
10835
+ },
10836
+ {
10837
+ itemId: 10212,
10838
+ kind: "ship",
10839
+ displayLabel: "Tender"
10840
+ },
10841
+ {
10842
+ itemId: 10213,
10843
+ kind: "ship",
10844
+ displayLabel: "Wright"
10845
+ },
10846
+ {
10847
+ itemId: 10214,
10848
+ kind: "ship",
10849
+ displayLabel: "Tug"
10850
+ },
10851
+ {
10852
+ itemId: 10215,
10853
+ kind: "ship",
10854
+ displayLabel: "Porter"
10855
+ },
10856
+ {
10857
+ itemId: 10216,
10858
+ kind: "ship",
10859
+ displayLabel: "Wrangler"
10860
+ },
10861
+ {
10862
+ itemId: 10217,
10863
+ kind: "ship",
10864
+ displayLabel: "Dredger"
10865
+ },
9381
10866
  {
9382
10867
  itemId: 10202,
9383
10868
  kind: "warehouse",
@@ -9418,6 +10903,11 @@ var templates = [
9418
10903
  kind: "hub",
9419
10904
  displayLabel: ""
9420
10905
  },
10906
+ {
10907
+ itemId: 10208,
10908
+ kind: "workshop",
10909
+ displayLabel: ""
10910
+ },
9421
10911
  {
9422
10912
  itemId: 20210,
9423
10913
  kind: "ship",
@@ -9426,7 +10916,7 @@ var templates = [
9426
10916
  {
9427
10917
  itemId: 20211,
9428
10918
  kind: "ship",
9429
- displayLabel: "Hauler"
10919
+ displayLabel: "Tug"
9430
10920
  }
9431
10921
  ];
9432
10922
  var kindRegistryJson = {
@@ -9510,6 +11000,7 @@ const ENTITY_SHIP = antelope.Name.from('ship');
9510
11000
  const ENTITY_WAREHOUSE = antelope.Name.from('warehouse');
9511
11001
  const ENTITY_EXTRACTOR = antelope.Name.from('extractor');
9512
11002
  const ENTITY_FACTORY = antelope.Name.from('factory');
11003
+ const ENTITY_WORKSHOP = antelope.Name.from('workshop');
9513
11004
  const ENTITY_CONTAINER = antelope.Name.from('container');
9514
11005
  const ENTITY_NEXUS = antelope.Name.from('nexus');
9515
11006
  const ENTITY_PLOT = antelope.Name.from('plot');
@@ -9528,6 +11019,9 @@ function isExtractor(entity) {
9528
11019
  function isFactory(entity) {
9529
11020
  return entity.type?.equals(ENTITY_FACTORY) ?? false;
9530
11021
  }
11022
+ function isWorkshop(entity) {
11023
+ return entity.type?.equals(ENTITY_WORKSHOP) ?? false;
11024
+ }
9531
11025
  function isContainer(entity) {
9532
11026
  return entity.type?.equals(ENTITY_CONTAINER) ?? false;
9533
11027
  }
@@ -10009,7 +11503,7 @@ function distanceBetweenCoordinates(origin, destination) {
10009
11503
  function distanceBetweenPoints(x1, y1, x2, y2) {
10010
11504
  const x = (x1 - x2) ** 2;
10011
11505
  const y = (y1 - y2) ** 2;
10012
- return antelope.UInt64.from(Math.sqrt(x + y) * PRECISION$1);
11506
+ return antelope.UInt64.from(Math.sqrt(x + y) * PRECISION);
10013
11507
  }
10014
11508
  function lerp$1(origin, destination, time) {
10015
11509
  return {
@@ -10055,9 +11549,9 @@ function getInterpolatedPosition(entity, taskIndex, taskProgress) {
10055
11549
  function rotation(origin, destination) {
10056
11550
  return Math.atan2(destination.y - origin.y, destination.x - origin.x) * (180 / Math.PI) + 90;
10057
11551
  }
10058
- function findNearbyPlanets(seed, origin, maxDistance = 20 * PRECISION$1) {
11552
+ function findNearbyPlanets(seed, origin, maxDistance = 20 * PRECISION) {
10059
11553
  const nearbySystems = [];
10060
- const max = antelope.UInt64.from(maxDistance / PRECISION$1);
11554
+ const max = antelope.UInt64.from(maxDistance / PRECISION);
10061
11555
  const xMin = antelope.Int64.from(origin.x).subtracting(max);
10062
11556
  const xMax = antelope.Int64.from(origin.x).adding(max);
10063
11557
  const yMin = antelope.Int64.from(origin.y).subtracting(max);
@@ -10089,14 +11583,22 @@ function calc_rechargetime(capacity, energy, recharge) {
10089
11583
  function calc_ship_rechargetime(ship) {
10090
11584
  if (!ship.generator)
10091
11585
  return antelope.UInt32.from(0);
10092
- return calc_rechargetime(ship.generator.capacity, ship.energy ?? antelope.UInt16.from(0), ship.generator.recharge);
11586
+ return calc_rechargetime(ship.generator.capacity, ship.energy ?? antelope.UInt32.from(0), ship.generator.recharge);
10093
11587
  }
10094
11588
  function calc_flighttime(distance, acceleration) {
10095
11589
  return antelope.UInt32.from(2 * Math.sqrt(Number(distance) / acceleration));
10096
11590
  }
11591
+ function calc_travel_flighttime(distance, acceleration) {
11592
+ const cruiseTransitionDistance = 2 * PRECISION;
11593
+ if (Number(distance) <= cruiseTransitionDistance) {
11594
+ return calc_flighttime(distance, acceleration);
11595
+ }
11596
+ const cruiseVelocity = Math.sqrt(acceleration * cruiseTransitionDistance);
11597
+ return antelope.UInt32.from(Number(distance) / cruiseVelocity + cruiseVelocity / acceleration);
11598
+ }
10097
11599
  function calc_transit_duration(ax, ay, bx, by) {
10098
11600
  const distance = distanceBetweenPoints(ax, ay, bx, by);
10099
- return antelope.UInt32.from(Math.floor(distance.toNumber() / (PRECISION$1 * WH.TRANSIT_SPEED)));
11601
+ return antelope.UInt32.from(Math.floor(distance.toNumber() / (PRECISION * WH.TRANSIT_SPEED)));
10100
11602
  }
10101
11603
  function shipLoaderLane(ship) {
10102
11604
  const lanes = ship.loader_lanes ?? [];
@@ -10120,14 +11622,14 @@ function calc_loader_acceleration(ship, mass) {
10120
11622
  }
10121
11623
  function calc_ship_flighttime(ship, mass, distance) {
10122
11624
  const acceleration = calc_ship_acceleration(ship, mass);
10123
- return calc_flighttime(distance, acceleration);
11625
+ return calc_travel_flighttime(distance, acceleration);
10124
11626
  }
10125
11627
  function calc_ship_acceleration(ship, mass) {
10126
11628
  const thrust = ship.engines ? Number(ship.engines.thrust) : 0;
10127
11629
  return calc_acceleration(thrust, Number(mass));
10128
11630
  }
10129
11631
  function calc_acceleration(thrust, mass) {
10130
- return (thrust / mass) * PRECISION$1;
11632
+ return (thrust / mass) * PRECISION;
10131
11633
  }
10132
11634
  function calc_ship_mass(ship, cargos) {
10133
11635
  const mass = antelope.UInt64.from(0);
@@ -10153,10 +11655,10 @@ function calc_group_flighttime(totalThrust, haulCount, pooledHaulCap, weightedHa
10153
11655
  effectiveThrust = Math.trunc((totalThrust * 1000) / penaltyMilli);
10154
11656
  }
10155
11657
  const acceleration = calc_acceleration(effectiveThrust, totalMass);
10156
- return calc_flighttime(distance, acceleration);
11658
+ return calc_travel_flighttime(distance, acceleration);
10157
11659
  }
10158
11660
  function calc_energyusage(distance, drain) {
10159
- return antelope.UInt64.from(distance).dividing(PRECISION$1).multiplying(drain);
11661
+ return antelope.UInt64.from(distance).multiplying(drain).dividing(PRECISION);
10160
11662
  }
10161
11663
  function calculateTransferTime(ship, cargos, quantities) {
10162
11664
  let mass = antelope.UInt64.from(0);
@@ -10256,7 +11758,7 @@ function estimateDealTravelTime(ship, shipMass, distance, loadMass) {
10256
11758
  function hasEnergyForDistance(ship, distance) {
10257
11759
  if (!ship.engines)
10258
11760
  return false;
10259
- const energyNeeded = antelope.UInt64.from(distance).dividing(PRECISION$1).multiplying(ship.engines.drain);
11761
+ const energyNeeded = antelope.UInt64.from(distance).dividing(PRECISION).multiplying(ship.engines.drain);
10260
11762
  return antelope.UInt64.from(ship.energy ?? 0).gte(energyNeeded);
10261
11763
  }
10262
11764
  function toNum$1(v) {
@@ -10963,6 +12465,8 @@ function getItemStatKeys(itemId) {
10963
12465
  return [];
10964
12466
  return getStatDefinitions(item.category).map((d) => d.key);
10965
12467
  }
12468
+ if (itemId === ITEM_SHIP_T1_PACKED)
12469
+ return ['strength', 'density', '', ''];
10966
12470
  const recipe = getRecipe(itemId);
10967
12471
  if (!recipe)
10968
12472
  return [];
@@ -11773,6 +13277,7 @@ const MODULE_LAUNCHER = 7;
11773
13277
  const MODULE_STORAGE = 8;
11774
13278
  const MODULE_HAULER = 9;
11775
13279
  const MODULE_BATTERY = 10;
13280
+ const MODULE_BUILDER = 12;
11776
13281
  function moduleAccepts(slotType, moduleType) {
11777
13282
  return slotType === MODULE_ANY || slotType === moduleType;
11778
13283
  }
@@ -11789,6 +13294,8 @@ function getModuleCapabilityType(itemId) {
11789
13294
  return MODULE_LOADER;
11790
13295
  case ITEM_CRAFTER_T1:
11791
13296
  return MODULE_CRAFTER;
13297
+ case ITEM_BUILDER_T1:
13298
+ return MODULE_BUILDER;
11792
13299
  case ITEM_STORAGE_T1:
11793
13300
  return MODULE_STORAGE;
11794
13301
  case ITEM_HAULER_T1:
@@ -11823,6 +13330,8 @@ function moduleSlotTypeToCode(slotType) {
11823
13330
  return MODULE_WARP;
11824
13331
  case 'crafter':
11825
13332
  return MODULE_CRAFTER;
13333
+ case 'builder':
13334
+ return MODULE_BUILDER;
11826
13335
  case 'launcher':
11827
13336
  return MODULE_LAUNCHER;
11828
13337
  case 'storage':
@@ -13466,7 +14975,7 @@ const UINT32_MAX = 4294967295;
13466
14975
  const UINT32_MAX_BIGINT = 4294967295n;
13467
14976
  const UINT32_MOD = 4294967296n;
13468
14977
  const UINT64_MAX = 18446744073709551615n;
13469
- const PRECISION_BIGINT = BigInt(PRECISION$1);
14978
+ const PRECISION_BIGINT = BigInt(PRECISION);
13470
14979
  function toNumber(value) {
13471
14980
  if (typeof value === 'number')
13472
14981
  return Math.trunc(value);
@@ -13515,7 +15024,7 @@ function calcDistance(origin, destination) {
13515
15024
  const b = Coordinates.from(destination);
13516
15025
  const dx = toNumber(a.x) - toNumber(b.x);
13517
15026
  const dy = toNumber(a.y) - toNumber(b.y);
13518
- return BigInt(Math.trunc(Math.sqrt(dx * dx + dy * dy) * PRECISION$1));
15027
+ return BigInt(Math.trunc(Math.sqrt(dx * dx + dy * dy) * PRECISION));
13519
15028
  }
13520
15029
  function calcCargoItemMassUint32(item) {
13521
15030
  let mass = toUint32(BigInt(getItem(item.item_id).mass) * toUint32(toBigInt(item.quantity)));
@@ -13585,10 +15094,10 @@ class ActionsManager extends BaseManager {
13585
15094
  recharge,
13586
15095
  });
13587
15096
  }
13588
- travelroute(entities, waypoints, recharge = true) {
15097
+ travelplan(entities, waypoints, recharge = true) {
13589
15098
  const entityRefs = this.entityRefs(entities);
13590
15099
  const wps = waypoints.map((w) => exports.ServerTypes.route_waypoint.from({ x: antelope.Int64.from(w.x), y: antelope.Int64.from(w.y) }));
13591
- return this.server.action('travelroute', {
15100
+ return this.server.action('travelplan', {
13592
15101
  entities: entityRefs,
13593
15102
  waypoints: wps,
13594
15103
  recharge,
@@ -13675,6 +15184,14 @@ class ActionsManager extends BaseManager {
13675
15184
  items,
13676
15185
  });
13677
15186
  }
15187
+ shuttle(carrierId, fromId, toId, items) {
15188
+ return this.server.action('shuttle', {
15189
+ carrier: antelope.UInt64.from(carrierId),
15190
+ from_id: antelope.UInt64.from(fromId),
15191
+ to_id: antelope.UInt64.from(toId),
15192
+ items,
15193
+ });
15194
+ }
13678
15195
  launch(launcherId, catcherId, items) {
13679
15196
  return this.server.action('launch', {
13680
15197
  launcher_id: antelope.UInt64.from(launcherId),
@@ -13723,26 +15240,16 @@ class ActionsManager extends BaseManager {
13723
15240
  }
13724
15241
  return this.server.action('gather', params);
13725
15242
  }
13726
- bundleGather(gathers) {
13727
- const actions = gathers.map(({ sourceId, destinationId, stratum, quantity, slot }) => this.gather(sourceId, destinationId, stratum, quantity, slot));
13728
- return antelope.Transaction.from({
13729
- expiration: 0,
13730
- ref_block_num: 0,
13731
- ref_block_prefix: 0,
13732
- actions,
15243
+ gatherplan(sourceId, destinationId, stratum, quantity, recharge = true, slots = []) {
15244
+ return this.server.action('gatherplan', {
15245
+ source_id: antelope.UInt64.from(sourceId),
15246
+ destination_id: antelope.UInt64.from(destinationId),
15247
+ stratum: antelope.UInt16.from(stratum),
15248
+ quantity: antelope.UInt32.from(quantity),
15249
+ recharge,
15250
+ slots: antelope.Bytes.from(slots),
13733
15251
  });
13734
15252
  }
13735
- flattenGatherPlan(plan, ctx) {
13736
- const actions = [];
13737
- for (const cycle of plan.cycles) {
13738
- if (cycle.rechargeBefore)
13739
- actions.push(this.recharge(ctx.sourceId));
13740
- for (const limpet of cycle.limpets) {
13741
- actions.push(this.gather(ctx.sourceId, ctx.destinationId, ctx.stratum, limpet.quantity, limpet.slot));
13742
- }
13743
- }
13744
- return actions;
13745
- }
13746
15253
  warp(entityId, destination) {
13747
15254
  const x = antelope.Int64.from(destination.x);
13748
15255
  const y = antelope.Int64.from(destination.y);
@@ -13767,6 +15274,39 @@ class ActionsManager extends BaseManager {
13767
15274
  }
13768
15275
  return this.server.action('craft', params);
13769
15276
  }
15277
+ craftjob(shipId, workshopId, slot, recipeId, quantity, inputs) {
15278
+ const params = {
15279
+ ship_id: antelope.UInt64.from(shipId),
15280
+ workshop_id: antelope.UInt64.from(workshopId),
15281
+ slot: antelope.UInt8.from(slot),
15282
+ recipe_id: antelope.UInt16.from(recipeId),
15283
+ quantity: antelope.UInt32.from(quantity),
15284
+ inputs,
15285
+ };
15286
+ return this.server.action('craftjob', params);
15287
+ }
15288
+ claimjob(jobId, shipId) {
15289
+ const params = {
15290
+ job_id: antelope.UInt64.from(jobId),
15291
+ ship_id: antelope.UInt64.from(shipId),
15292
+ };
15293
+ return this.server.action('claimjob', params);
15294
+ }
15295
+ canceljob(jobId, shipId) {
15296
+ const params = {
15297
+ job_id: antelope.UInt64.from(jobId),
15298
+ ship_id: antelope.UInt64.from(shipId),
15299
+ };
15300
+ return this.server.action('canceljob', params);
15301
+ }
15302
+ setsocket(workshopId, slot, open) {
15303
+ const params = {
15304
+ workshop_id: antelope.UInt64.from(workshopId),
15305
+ slot: antelope.UInt8.from(slot),
15306
+ open,
15307
+ };
15308
+ return this.server.action('setsocket', params);
15309
+ }
13770
15310
  blend(entityId, inputs) {
13771
15311
  return this.server.action('blend', {
13772
15312
  id: antelope.UInt64.from(entityId),
@@ -14681,6 +16221,15 @@ class Shipload {
14681
16221
  }
14682
16222
  }
14683
16223
 
16224
+ const MODULE_STAT_SCALING_ANCHOR = 213;
16225
+ const MODULE_STAT_SCALING_POST_ANCHOR_PERCENT = 40;
16226
+ function computeEffectiveModuleStat(stat) {
16227
+ if (stat <= MODULE_STAT_SCALING_ANCHOR)
16228
+ return stat;
16229
+ return (MODULE_STAT_SCALING_ANCHOR +
16230
+ Math.floor(((stat - MODULE_STAT_SCALING_ANCHOR) * MODULE_STAT_SCALING_POST_ANCHOR_PERCENT) / 100));
16231
+ }
16232
+
14684
16233
  const U16_MAX = 65535;
14685
16234
  function packedModulesToInstalled(entries) {
14686
16235
  const installed = [];
@@ -14712,13 +16261,27 @@ function getSlotAmp(layout, slotIndex) {
14712
16261
  function idiv(a, b) {
14713
16262
  return Math.floor(a / b);
14714
16263
  }
14715
- function computeBaseHullmass$1(stats) {
16264
+ function toWholeEnergy$1(milli) {
16265
+ return idiv(milli + 500, 1000);
16266
+ }
16267
+ function isShipHull$1(itemId) {
16268
+ return getPackedEntityType(itemId)?.equals(ENTITY_SHIP) ?? false;
16269
+ }
16270
+ function sumPackedShipChannels(stats) {
16271
+ let sum = 0;
16272
+ for (let slot = 0; slot < 5; slot++)
16273
+ sum += decodeStat(stats, slot);
16274
+ return sum;
16275
+ }
16276
+ function computeBaseHullmass$1(itemId, stats) {
16277
+ if (isShipHull$1(itemId)) {
16278
+ return Math.floor((getBaseHullmassFor(itemId) * (10000 - sumPackedShipChannels(stats))) / 10000);
16279
+ }
14716
16280
  const density = decodeStat(stats, 1);
14717
- return 100000 - 75 * density;
16281
+ return Math.floor((getBaseHullmassFor(itemId) * (2000 - density)) / 2000);
14718
16282
  }
14719
16283
  function computeBaseCapacityShip(stats) {
14720
- const s = decodeStat(stats, 0) + decodeStat(stats, 2);
14721
- return Math.floor(5000000 * 6 ** (s / 1998));
16284
+ return Math.floor(5000000 * 6 ** (sumPackedShipChannels(stats) / 4995));
14722
16285
  }
14723
16286
  function computeBaseCapacityContainer(stats) {
14724
16287
  const s = decodeStat(stats, 0) + decodeStat(stats, 2);
@@ -14730,35 +16293,57 @@ function computeBaseCapacityWarehouse(stats) {
14730
16293
  }
14731
16294
  const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
14732
16295
  const computeEngineDrain = (thm) => 2 * Math.max(30, 50 - idiv(thm, 70));
14733
- const ENGINE_DRAIN_BASE = 118;
16296
+ const ENGINE_DRAIN_BASE = 156;
14734
16297
  const ENGINE_DRAIN_REF_THRUST = 775;
14735
16298
  const ENGINE_DRAIN_REF_THM = 500;
14736
16299
  const computeTravelDrain = (totalThrust, avgThm) => {
14737
16300
  if (totalThrust <= 0)
14738
16301
  return 0;
14739
- const num = ENGINE_DRAIN_BASE * ENGINE_DRAIN_REF_THRUST * computeEngineDrain(avgThm);
14740
- const den = totalThrust * computeEngineDrain(ENGINE_DRAIN_REF_THM);
14741
- return idiv(num, den);
16302
+ const thermalFactor = computeEngineDrain(avgThm) / computeEngineDrain(ENGINE_DRAIN_REF_THM);
16303
+ const thrustFactor = Math.sqrt(ENGINE_DRAIN_REF_THRUST / totalThrust);
16304
+ return Math.floor(ENGINE_DRAIN_BASE * 1000 * thermalFactor * thrustFactor);
14742
16305
  };
14743
- const computeGeneratorCap = (com) => 1300 + idiv(com, 2);
14744
- const computeGeneratorRech = (fin) => 2 * (1 + idiv(fin * 3, 1000));
16306
+ const computeGeneratorCap = (com) => 1300000 + com * 500;
16307
+ const computeGeneratorRech = (fin) => 2000 + fin * 6;
14745
16308
  const computeGathererYield = (str) => 200 + str;
14746
- const computeGathererDrain = (con) => 2 * Math.max(250, 1250 - idiv(con * 25, 20));
16309
+ const computeGathererDrain = (con) => 2 * Math.max(250000, 1250000 - con * 1250);
14747
16310
  const computeGathererDepth = (tol, tier) => gathererDepthForTier(tol, tier);
14748
16311
  const computeLoaderMass = (ins) => Math.max(200, 2000 - ins * 2);
14749
16312
  const computeLoaderThrust = (pla) => 1 + idiv(pla * pla, 10000);
14750
16313
  const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
14751
- const computeCrafterDrain = (fin) => Math.max(5, 30 - idiv(fin, 33));
16314
+ const computeCrafterDrain = (fin) => Math.max(5000, 30000 - idiv(fin * 1000, 33));
16315
+ const computeBuilderSpeed = (coh) => 100 + idiv(coh * 4, 5);
16316
+ const computeBuilderDrain = (tol) => Math.max(5000, 30000 - idiv(tol * 1000, 33));
14752
16317
  const computeHaulerCapacity = (fin, tier) => Math.max(tier, tier + idiv(fin, 400));
14753
16318
  const computeHaulerEfficiency = (con) => 2000 + con * 6;
14754
- const computeHaulerDrain$1 = (com) => Math.max(3, 15 - idiv(com, 80));
16319
+ const supportDrainTierPercent = (tier) => {
16320
+ const clampedTier = Math.min(10, Math.max(1, Math.trunc(tier)));
16321
+ return Math.max(50, 110 - clampedTier * 10);
16322
+ };
16323
+ const computeT1LogisticsDrain = (stat) => Math.max(3000, 15000 - Math.min(12000, idiv(stat * 1000, 80)));
16324
+ const computeHaulerDrain = (conductivity, tier) => idiv(computeT1LogisticsDrain(conductivity) * supportDrainTierPercent(tier), 100);
16325
+ const computeCargoBayDrain = (cohesion, tier) => idiv(computeT1LogisticsDrain(cohesion) * 3 * supportDrainTierPercent(tier), 400);
14755
16326
  const computeWarpRange = (stat) => 100 + stat * 3;
14756
- const computeCargoBayCapacity = (strength, density, hardness, cohesion) => 10000000 + idiv((strength + density + hardness + cohesion) * 50000000, 3996);
14757
- const computeBatteryBankCapacity = (volatility, thermal, plasticity, insulation) => 2500 + idiv((volatility + thermal + plasticity + insulation) * 7500, 3996);
16327
+ const computeCargoBayCapacity = (strength, density, hardness) => 10000000 + idiv((strength + density + hardness) * 50000000, 2997);
16328
+ const computeBatteryBankCapacity = (volatility, thermal, plasticity, insulation) => 2500000 + idiv((volatility + thermal + plasticity + insulation) * 7500000, 3996);
14758
16329
  function entityDisplayName(itemId) {
14759
16330
  switch (itemId) {
14760
16331
  case ITEM_SHIP_T1_PACKED:
16332
+ return 'Ship';
16333
+ case ITEM_ROUSTABOUT_T1_PACKED:
14761
16334
  return 'Roustabout';
16335
+ case ITEM_PROSPECTOR_T1_PACKED:
16336
+ return 'Prospector';
16337
+ case ITEM_TENDER_T1_PACKED:
16338
+ return 'Tender';
16339
+ case ITEM_TUG_T1_PACKED:
16340
+ return 'Tug';
16341
+ case ITEM_PORTER_T1_PACKED:
16342
+ return 'Porter';
16343
+ case ITEM_WRANGLER_T1_PACKED:
16344
+ return 'Wrangler';
16345
+ case ITEM_DREDGER_T1_PACKED:
16346
+ return 'Dredger';
14762
16347
  case ITEM_WAREHOUSE_T1_PACKED:
14763
16348
  return 'Warehouse';
14764
16349
  case ITEM_EXTRACTOR_T1_PACKED:
@@ -14772,7 +16357,7 @@ function entityDisplayName(itemId) {
14772
16357
  case ITEM_PROSPECTOR_T2_PACKED:
14773
16358
  return 'Prospector';
14774
16359
  case ITEM_HAULER_SHIP_T2_PACKED:
14775
- return 'Hauler';
16360
+ return 'Tug';
14776
16361
  default:
14777
16362
  return 'Entity';
14778
16363
  }
@@ -14790,6 +16375,8 @@ function moduleDisplayName(itemId) {
14790
16375
  return 'Shuttle Bay';
14791
16376
  case ITEM_CRAFTER_T1:
14792
16377
  return 'Fabricator';
16378
+ case ITEM_BUILDER_T1:
16379
+ return 'Assembly Arm';
14793
16380
  case ITEM_STORAGE_T1:
14794
16381
  return 'Cargo Hold';
14795
16382
  case ITEM_HAULER_T1:
@@ -14815,15 +16402,15 @@ function formatModuleLine(slot, itemId, stats) {
14815
16402
  const subtype = getModuleCapabilityType(itemId);
14816
16403
  switch (subtype) {
14817
16404
  case MODULE_ENGINE: {
14818
- const vol = decodeStat(stats, 0);
14819
- const thm = decodeStat(stats, 1);
16405
+ const vol = computeEffectiveModuleStat(decodeStat(stats, 0));
16406
+ const thm = computeEffectiveModuleStat(decodeStat(stats, 1));
14820
16407
  out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
14821
16408
  break;
14822
16409
  }
14823
16410
  case MODULE_GENERATOR: {
14824
- const res = decodeStat(stats, 0);
14825
- const ref = decodeStat(stats, 1);
14826
- out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(ref)}`;
16411
+ const res = computeEffectiveModuleStat(decodeStat(stats, 0));
16412
+ const ref = computeEffectiveModuleStat(decodeStat(stats, 1));
16413
+ out += ` Capacity ${toWholeEnergy$1(computeGeneratorCap(res))} Recharge ${toWholeEnergy$1(computeGeneratorRech(ref))}`;
14827
16414
  break;
14828
16415
  }
14829
16416
  case MODULE_GATHERER: {
@@ -14831,7 +16418,7 @@ function formatModuleLine(slot, itemId, stats) {
14831
16418
  const tol = decodeStat(stats, 1);
14832
16419
  const con = decodeStat(stats, 2);
14833
16420
  const tier = getItem(itemId).tier;
14834
- out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Drain ${computeGathererDrain(con)}`;
16421
+ out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Drain ${toWholeEnergy$1(computeGathererDrain(con))}`;
14835
16422
  break;
14836
16423
  }
14837
16424
  case MODULE_LOADER: {
@@ -14843,23 +16430,30 @@ function formatModuleLine(slot, itemId, stats) {
14843
16430
  case MODULE_CRAFTER: {
14844
16431
  const rea = decodeStat(stats, 0);
14845
16432
  const con = decodeStat(stats, 1);
14846
- out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(con)}`;
16433
+ out += ` Speed ${computeCrafterSpeed(rea)} Drain ${toWholeEnergy$1(computeCrafterDrain(con))}`;
16434
+ break;
16435
+ }
16436
+ case MODULE_BUILDER: {
16437
+ const coh = decodeStat(stats, 0);
16438
+ const tol = decodeStat(stats, 1);
16439
+ out += ` Speed ${computeBuilderSpeed(coh)} Drain ${toWholeEnergy$1(computeBuilderDrain(tol))}`;
14847
16440
  break;
14848
16441
  }
14849
16442
  case MODULE_STORAGE: {
14850
16443
  const str = decodeStat(stats, 0);
14851
16444
  const den = decodeStat(stats, 1);
14852
16445
  const hrd = decodeStat(stats, 2);
14853
- const com = decodeStat(stats, 3);
14854
- out += ` Cargo Capacity ${computeCargoBayCapacity(str, den, hrd, com)}`;
16446
+ const coh = decodeStat(stats, 3);
16447
+ const tier = getItem(itemId).tier;
16448
+ out += ` Cargo Capacity ${computeCargoBayCapacity(str, den, hrd)} Drain ${toWholeEnergy$1(computeCargoBayDrain(coh, tier))}`;
14855
16449
  break;
14856
16450
  }
14857
16451
  case MODULE_HAULER: {
14858
16452
  const res = decodeStat(stats, 0);
14859
16453
  const pla = decodeStat(stats, 1);
14860
- const ref = decodeStat(stats, 2);
16454
+ const con = decodeStat(stats, 2);
14861
16455
  const tier = getItem(itemId).tier;
14862
- out += ` Capacity ${computeHaulerCapacity(res, tier)} Efficiency ${computeHaulerEfficiency(pla)} Drain ${computeHaulerDrain$1(ref)}`;
16456
+ out += ` Capacity ${computeHaulerCapacity(res, tier)} Efficiency ${computeHaulerEfficiency(pla)} Drain ${toWholeEnergy$1(computeHaulerDrain(con, tier))}`;
14863
16457
  break;
14864
16458
  }
14865
16459
  case MODULE_WARP: {
@@ -14872,18 +16466,16 @@ function formatModuleLine(slot, itemId, stats) {
14872
16466
  const thm = decodeStat(stats, 1);
14873
16467
  const pla = decodeStat(stats, 2);
14874
16468
  const ins = decodeStat(stats, 3);
14875
- out += ` Energy Capacity ${computeBatteryBankCapacity(vol, thm, pla, ins)}`;
16469
+ out += ` Energy Capacity ${toWholeEnergy$1(computeBatteryBankCapacity(vol, thm, pla, ins))}`;
14876
16470
  break;
14877
16471
  }
14878
16472
  }
14879
16473
  return out;
14880
16474
  }
14881
16475
  function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
14882
- const hullMass = computeBaseHullmass$1(hullStats);
16476
+ const hullMass = computeBaseHullmass$1(itemId, hullStats);
14883
16477
  let baseCapacity = 0;
14884
- if (itemId === ITEM_SHIP_T1_PACKED ||
14885
- itemId === ITEM_PROSPECTOR_T2_PACKED ||
14886
- itemId === ITEM_HAULER_SHIP_T2_PACKED) {
16478
+ if (isShipHull$1(itemId)) {
14887
16479
  baseCapacity = computeBaseCapacityShip(hullStats);
14888
16480
  }
14889
16481
  else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
@@ -14908,31 +16500,45 @@ function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
14908
16500
  return out;
14909
16501
  }
14910
16502
 
14911
- function computeBaseHullmass(stats) {
14912
- return 100000 - 75 * stats.density;
16503
+ const DEFAULT_BASE_HULLMASS = 100000;
16504
+ function getBaseHullmassFor(itemId) {
16505
+ return getEntityLayout(itemId)?.baseHullmass ?? DEFAULT_BASE_HULLMASS;
14913
16506
  }
14914
- function computeShipHullCapabilities(stats) {
14915
- const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
14916
- const exponent = statSum / 1998.0;
16507
+ function isShipHull(itemId) {
16508
+ return getPackedEntityType(itemId)?.equals(ENTITY_SHIP) ?? false;
16509
+ }
16510
+ function sumHullStats(stats) {
16511
+ return Object.values(stats).reduce((sum, value) => sum + value, 0);
16512
+ }
16513
+ function computeBaseHullmass(itemId, stats) {
16514
+ if (isShipHull(itemId)) {
16515
+ return Math.floor((getBaseHullmassFor(itemId) * (10000 - sumHullStats(stats))) / 10000);
16516
+ }
16517
+ const lightness = stats.density ?? stats.hardness ?? 0;
16518
+ return Math.floor((getBaseHullmassFor(itemId) * (2000 - lightness)) / 2000);
16519
+ }
16520
+ function computeShipHullCapabilities(stats, itemId = ITEM_SHIP_T1_PACKED) {
16521
+ const statSum = sumHullStats(stats);
16522
+ const exponent = statSum / 4995.0;
14917
16523
  return {
14918
- hullmass: computeBaseHullmass(stats),
16524
+ hullmass: computeBaseHullmass(itemId, stats),
14919
16525
  capacity: Math.floor(5000000 * 6 ** exponent),
14920
16526
  };
14921
16527
  }
14922
16528
  function computeEngineCapabilities(stats) {
14923
- const vol = stats.volatility;
14924
- const thm = stats.thermal;
16529
+ const vol = computeEffectiveModuleStat(stats.volatility);
16530
+ const thm = computeEffectiveModuleStat(stats.thermal);
14925
16531
  return {
14926
16532
  thrust: 400 + Math.floor((vol * 3) / 4),
14927
16533
  drain: 2 * Math.max(30, 50 - Math.floor(thm / 70)),
14928
16534
  };
14929
16535
  }
14930
16536
  function computeGeneratorCapabilities(stats) {
14931
- const res = stats.resonance;
14932
- const ref = stats.reflectivity;
16537
+ const res = computeEffectiveModuleStat(stats.resonance);
16538
+ const ref = computeEffectiveModuleStat(stats.reflectivity);
14933
16539
  return {
14934
- capacity: 1300 + Math.floor(res / 2),
14935
- recharge: 2 * (1 + Math.floor((ref * 3) / 1000)),
16540
+ capacity: 1300000 + res * 500,
16541
+ recharge: 2000 + ref * 6,
14936
16542
  };
14937
16543
  }
14938
16544
  const GATHERER_DEPTH_TABLE = [
@@ -14958,11 +16564,11 @@ function gathererDepthForTier(tol, tier) {
14958
16564
  function computeGathererCapabilities(stats, tier) {
14959
16565
  const str = stats.strength;
14960
16566
  const con = stats.saturation;
14961
- const hrd = stats.hardness;
16567
+ const tol = stats.tolerance ?? stats.hardness;
14962
16568
  return {
14963
16569
  yield: 200 + str,
14964
- drain: 2 * Math.max(250, 1250 - Math.floor((con * 25) / 20)),
14965
- depth: gathererDepthForTier(hrd, tier),
16570
+ drain: 2 * Math.max(250000, 1250000 - con * 1250),
16571
+ depth: gathererDepthForTier(tol, tier),
14966
16572
  };
14967
16573
  }
14968
16574
  function computeLoaderCapabilities(stats) {
@@ -14979,7 +16585,15 @@ function computeCrafterCapabilities(stats) {
14979
16585
  const con = stats.conductivity;
14980
16586
  return {
14981
16587
  speed: 100 + Math.floor((fin * 4) / 5),
14982
- drain: Math.max(5, 30 - Math.floor(con / 33)),
16588
+ drain: Math.max(5000, 30000 - Math.floor((con * 1000) / 33)),
16589
+ };
16590
+ }
16591
+ function computeBuilderCapabilities(stats) {
16592
+ const coh = stats.cohesion;
16593
+ const tol = stats.tolerance;
16594
+ return {
16595
+ speed: 100 + Math.floor((coh * 4) / 5),
16596
+ drain: Math.max(5000, 30000 - Math.floor((tol * 1000) / 33)),
14983
16597
  };
14984
16598
  }
14985
16599
  function computeHaulerCapabilities(stats, tier) {
@@ -14989,7 +16603,7 @@ function computeHaulerCapabilities(stats, tier) {
14989
16603
  return {
14990
16604
  capacity: computeHaulerCapacity(resonance, tier),
14991
16605
  efficiency: 2000 + plasticity * 6,
14992
- drain: Math.max(3, 15 - Math.floor(conductivity / 80)),
16606
+ drain: computeHaulerDrain(conductivity, tier),
14993
16607
  };
14994
16608
  }
14995
16609
  function computeLauncherCapabilities(stats, amp = 100) {
@@ -14999,13 +16613,11 @@ function computeLauncherCapabilities(stats, amp = 100) {
14999
16613
  drain: stats.drain,
15000
16614
  };
15001
16615
  }
15002
- function computeStorageCapabilities(stats) {
15003
- const strength = stats.strength ?? 0;
15004
- const density = stats.density ?? 0;
15005
- const hardness = stats.hardness ?? 0;
15006
- const cohesion = stats.cohesion ?? 0;
15007
- const statSum = strength + density + hardness + cohesion;
15008
- return { capacity: 10000000 + Math.floor((statSum * 50000000) / 3996) };
16616
+ function computeStorageCapabilities(stats, tier) {
16617
+ return {
16618
+ capacity: computeCargoBayCapacity(stats.strength ?? 0, stats.density ?? 0, stats.hardness ?? 0),
16619
+ drain: computeCargoBayDrain(stats.cohesion ?? 0, tier),
16620
+ };
15009
16621
  }
15010
16622
  function computeBatteryCapabilities(stats) {
15011
16623
  const volatility = stats.volatility ?? 0;
@@ -15013,7 +16625,7 @@ function computeBatteryCapabilities(stats) {
15013
16625
  const plasticity = stats.plasticity ?? 0;
15014
16626
  const insulation = stats.insulation ?? 0;
15015
16627
  const statSum = volatility + thermal + plasticity + insulation;
15016
- return { capacity: 2500 + Math.floor((statSum * 7500) / 3996) };
16628
+ return { capacity: 2500000 + Math.floor((statSum * 7500000) / 3996) };
15017
16629
  }
15018
16630
  const CAPACITY_TIER_TABLE = [1.0, 1.4, 1.8, 2.2, 2.6, 3.0, 3.4, 3.8, 4.2, 4.6];
15019
16631
  function capacityTierMultiplier(tier) {
@@ -15025,25 +16637,25 @@ function applyCapacityTier(baseCapacity, tier) {
15025
16637
  }
15026
16638
  function computeBaseCapacity(itemId, stats) {
15027
16639
  let base;
15028
- switch (itemId) {
15029
- case ITEM_SHIP_T1_PACKED:
15030
- case ITEM_PROSPECTOR_T2_PACKED:
15031
- case ITEM_HAULER_SHIP_T2_PACKED:
15032
- base = computeShipHullCapabilities(stats).capacity;
15033
- break;
15034
- case ITEM_EXTRACTOR_T1_PACKED:
15035
- case ITEM_FACTORY_T1_PACKED:
15036
- case ITEM_MASS_DRIVER_T1_PACKED:
15037
- case ITEM_MASS_CATCHER_T1_PACKED:
15038
- case ITEM_CONTAINER_T1_PACKED:
15039
- case ITEM_CONTAINER_T2_PACKED:
15040
- base = computeContainerCapabilities(stats).capacity;
15041
- break;
15042
- case ITEM_WAREHOUSE_T1_PACKED:
15043
- base = computeWarehouseHullCapabilities(stats).capacity;
15044
- break;
15045
- default:
15046
- return 0;
16640
+ if (isShipHull(itemId)) {
16641
+ base = computeShipHullCapabilities(stats, itemId).capacity;
16642
+ }
16643
+ else {
16644
+ switch (itemId) {
16645
+ case ITEM_EXTRACTOR_T1_PACKED:
16646
+ case ITEM_FACTORY_T1_PACKED:
16647
+ case ITEM_MASS_DRIVER_T1_PACKED:
16648
+ case ITEM_MASS_CATCHER_T1_PACKED:
16649
+ case ITEM_CONTAINER_T1_PACKED:
16650
+ case ITEM_CONTAINER_T2_PACKED:
16651
+ base = computeContainerCapabilities(stats).capacity;
16652
+ break;
16653
+ case ITEM_WAREHOUSE_T1_PACKED:
16654
+ base = computeWarehouseHullCapabilities(stats).capacity;
16655
+ break;
16656
+ default:
16657
+ return 0;
16658
+ }
15047
16659
  }
15048
16660
  return applyCapacityTier(base, getItem(itemId).tier);
15049
16661
  }
@@ -15055,7 +16667,7 @@ function computeWarehouseHullCapabilities(stats) {
15055
16667
  const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
15056
16668
  const exponent = statSum / 1998.0;
15057
16669
  return {
15058
- hullmass: computeBaseHullmass(stats),
16670
+ hullmass: computeBaseHullmass(ITEM_WAREHOUSE_T1_PACKED, stats),
15059
16671
  capacity: Math.floor(100000000 * 6 ** exponent),
15060
16672
  };
15061
16673
  }
@@ -15076,11 +16688,15 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15076
16688
  let maxGathDepth = 0;
15077
16689
  let hasGatherer = false;
15078
16690
  let totalStorageCapacity = 0;
16691
+ let totalCargoHoldDrain = 0;
15079
16692
  const baseCapacity = computeBaseCapacity(itemId, stats);
15080
16693
  let installedModuleMass = 0;
15081
16694
  let totalCrafterSpeed = 0;
15082
16695
  let totalCrafterDrain = 0;
15083
16696
  let hasCrafter = false;
16697
+ let totalBuilderSpeed = 0;
16698
+ let totalBuilderDrain = 0;
16699
+ let hasBuilder = false;
15084
16700
  let totalHaulerCapacity = 0;
15085
16701
  let weightedHaulerEffNum = 0n;
15086
16702
  let totalHaulerDrain = 0;
@@ -15095,6 +16711,7 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15095
16711
  let totalBatteryCapacity = 0;
15096
16712
  const gathererLanes = [];
15097
16713
  const crafterLanes = [];
16714
+ const builderLanes = [];
15098
16715
  const loaderLanes = [];
15099
16716
  for (const mod of modules) {
15100
16717
  const item = getItem(mod.itemId);
@@ -15106,19 +16723,23 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15106
16723
  hasEngine = true;
15107
16724
  const caps = computeEngineCapabilities(decodedStats);
15108
16725
  totalThrust += applySlotMultiplier(caps.thrust, amp);
15109
- totalEngineThm += decodedStats.thermal ?? 0;
16726
+ totalEngineThm += computeEffectiveModuleStat(decodedStats.thermal ?? 0);
15110
16727
  engineCount += 1;
15111
16728
  }
15112
16729
  else if (modType === MODULE_GENERATOR) {
15113
16730
  hasGenerator = true;
15114
16731
  const caps = computeGeneratorCapabilities(decodedStats);
15115
- totalGenCapacity += applySlotMultiplier(caps.capacity, amp);
15116
- totalGenRecharge += applySlotMultiplier(caps.recharge, amp);
16732
+ totalGenCapacity += applySlotMultiplierUint32(caps.capacity, amp);
16733
+ totalGenRecharge += applySlotMultiplierUint32(caps.recharge, amp);
15117
16734
  }
15118
16735
  else if (modType === MODULE_GATHERER) {
15119
16736
  hasGatherer = true;
15120
16737
  const tier = item.tier;
15121
- const caps = computeGathererCapabilities(decodedStats, tier);
16738
+ const caps = computeGathererCapabilities({
16739
+ strength: decodeStat(mod.stats, 0),
16740
+ tolerance: decodeStat(mod.stats, 1),
16741
+ saturation: decodeStat(mod.stats, 2),
16742
+ }, tier);
15122
16743
  const scaledYield = applySlotMultiplier(caps.yield, amp);
15123
16744
  totalGathYield += scaledYield;
15124
16745
  totalGathDrain += caps.drain;
@@ -15146,8 +16767,9 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15146
16767
  });
15147
16768
  }
15148
16769
  else if (modType === MODULE_STORAGE) {
15149
- const caps = computeStorageCapabilities(decodedStats);
16770
+ const caps = computeStorageCapabilities(decodedStats, item.tier);
15150
16771
  totalStorageCapacity += applySlotMultiplierUint32(caps.capacity, amp);
16772
+ totalCargoHoldDrain += caps.drain;
15151
16773
  }
15152
16774
  else if (modType === MODULE_CRAFTER) {
15153
16775
  hasCrafter = true;
@@ -15162,6 +16784,19 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15162
16784
  outputPct: amp,
15163
16785
  });
15164
16786
  }
16787
+ else if (modType === MODULE_BUILDER) {
16788
+ hasBuilder = true;
16789
+ const caps = computeBuilderCapabilities(decodedStats);
16790
+ const scaledSpeed = applySlotMultiplier(caps.speed, amp);
16791
+ totalBuilderSpeed += scaledSpeed;
16792
+ totalBuilderDrain += caps.drain;
16793
+ builderLanes.push({
16794
+ slotIndex: mod.slotIndex,
16795
+ speed: scaledSpeed,
16796
+ drain: caps.drain,
16797
+ outputPct: amp,
16798
+ });
16799
+ }
15165
16800
  else if (modType === MODULE_HAULER) {
15166
16801
  hasHauler = true;
15167
16802
  const caps = computeHaulerCapabilities(decodedStats, item.tier);
@@ -15196,12 +16831,20 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15196
16831
  totalGenCapacity += totalBatteryCapacity;
15197
16832
  }
15198
16833
  const result = {
15199
- hullmass: computeBaseHullmass(stats) + installedModuleMass,
16834
+ hullmass: computeBaseHullmass(itemId, stats) + installedModuleMass,
15200
16835
  capacity: clampUint32(baseCapacity + totalStorageCapacity),
15201
16836
  };
15202
16837
  if (hasEngine) {
15203
16838
  const avgThm = engineCount > 0 ? Math.trunc(totalEngineThm / engineCount) : 0;
15204
- result.engines = { thrust: totalThrust, drain: computeTravelDrain(totalThrust, avgThm) };
16839
+ const engineDrain = computeTravelDrain(totalThrust, avgThm);
16840
+ const totalDrain = clampUint32(engineDrain + totalCargoHoldDrain + totalHaulerDrain);
16841
+ result.engines = { thrust: totalThrust, drain: totalDrain };
16842
+ result.travelDrain = {
16843
+ engine: engineDrain,
16844
+ cargoHolds: totalCargoHoldDrain,
16845
+ tractorBeams: totalHaulerDrain,
16846
+ total: totalDrain,
16847
+ };
15205
16848
  }
15206
16849
  if (hasGenerator) {
15207
16850
  result.generator = {
@@ -15229,6 +16872,10 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15229
16872
  result.crafter = { speed: clampUint16(totalCrafterSpeed), drain: totalCrafterDrain };
15230
16873
  result.crafterLanes = crafterLanes;
15231
16874
  }
16875
+ if (hasBuilder) {
16876
+ result.builder = { speed: clampUint16(totalBuilderSpeed), drain: totalBuilderDrain };
16877
+ result.builderLanes = builderLanes;
16878
+ }
15232
16879
  if (hasHauler) {
15233
16880
  const efficiency = totalHaulerCapacity > 0 ? Number(weightedHaulerEffNum / BigInt(totalHaulerCapacity)) : 0;
15234
16881
  result.hauler = {
@@ -15256,7 +16903,7 @@ function computeContainerCapabilities(stats) {
15256
16903
  const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
15257
16904
  const exponent = statSum / 1998.0;
15258
16905
  return {
15259
- hullmass: computeBaseHullmass(stats),
16906
+ hullmass: computeBaseHullmass(ITEM_CONTAINER_T1_PACKED, stats),
15260
16907
  capacity: Math.floor(22000000 * 6 ** exponent),
15261
16908
  };
15262
16909
  }
@@ -15322,7 +16969,7 @@ function makeEntity(packedItemId, state) {
15322
16969
  holds: [],
15323
16970
  };
15324
16971
  if (state.energy !== undefined)
15325
- info.energy = antelope.UInt16.from(state.energy);
16972
+ info.energy = antelope.UInt32.from(state.energy);
15326
16973
  if (kind === 'container') {
15327
16974
  info.modules = [];
15328
16975
  if (state.hullmass !== undefined)
@@ -15382,6 +17029,12 @@ function makeEntity(packedItemId, state) {
15382
17029
  drain: l.drain,
15383
17030
  output_pct: l.outputPct,
15384
17031
  }));
17032
+ info.builder_lanes = (caps.builderLanes ?? []).map((l) => exports.ServerTypes.builder_lane.from({
17033
+ slot_index: l.slotIndex,
17034
+ speed: l.speed,
17035
+ drain: l.drain,
17036
+ output_pct: l.outputPct,
17037
+ }));
15385
17038
  info.loader_lanes = (caps.loaderLanes ?? []).map((l) => exports.ServerTypes.loader_lane.from({
15386
17039
  slot_index: l.slotIndex,
15387
17040
  mass: l.mass,
@@ -15393,6 +17046,8 @@ function makeEntity(packedItemId, state) {
15393
17046
  info.gatherer_lanes = [];
15394
17047
  if (!info.crafter_lanes)
15395
17048
  info.crafter_lanes = [];
17049
+ if (!info.builder_lanes)
17050
+ info.builder_lanes = [];
15396
17051
  if (!info.loader_lanes)
15397
17052
  info.loader_lanes = [];
15398
17053
  const entityInfo = exports.ServerTypes.entity_info.from(info);
@@ -15408,7 +17063,13 @@ function calc_craft_duration(speed, totalInputMass) {
15408
17063
  }
15409
17064
  function calc_craft_energy(drain, totalInputMass) {
15410
17065
  const raw = Math.floor((totalInputMass * drain) / CRAFT_ENERGY_DIVISOR);
15411
- return antelope.UInt32.from(Math.min(Math.max(raw + 1, 1), 4294967295));
17066
+ return antelope.UInt32.from(Math.min(Math.max(raw + 1, 1000), 4294967295));
17067
+ }
17068
+ function calc_build_duration(speed, totalInputMass) {
17069
+ return calc_craft_duration(speed, totalInputMass);
17070
+ }
17071
+ function calc_build_energy(drain, totalInputMass) {
17072
+ return calc_craft_energy(drain, totalInputMass);
15412
17073
  }
15413
17074
 
15414
17075
  class PlotManager extends BaseManager {
@@ -15471,7 +17132,7 @@ class PlotManager extends BaseManager {
15471
17132
  recipe,
15472
17133
  progress,
15473
17134
  finalizeAction: antelope.Name.from('buildplot'),
15474
- finalizerCapability: 'crafter',
17135
+ finalizerCapability: 'builder',
15475
17136
  activeTask,
15476
17137
  scheduledBuild,
15477
17138
  };
@@ -15519,16 +17180,16 @@ class ConstructionManager extends BaseManager {
15519
17180
  continue;
15520
17181
  if (!coordsEqual(entity.coordinates, target.coordinates))
15521
17182
  continue;
15522
- const crafterLanes = entity.crafter_lanes ?? [];
15523
- if (crafterLanes.length === 0)
17183
+ const builderLanes = entity.builder_lanes ?? [];
17184
+ if (builderLanes.length === 0)
15524
17185
  continue;
15525
- const speed = crafterLanes.reduce((s, l) => s + Number(l.speed), 0);
17186
+ const speed = builderLanes.reduce((s, l) => s + Number(l.speed), 0);
15526
17187
  out.push({
15527
17188
  entityId: entity.id,
15528
17189
  entityType: entity.type,
15529
17190
  name: entity.entity_name,
15530
- capability: 'crafter',
15531
- crafterSpeed: speed,
17191
+ capability: 'builder',
17192
+ builderSpeed: speed,
15532
17193
  estimatedDuration: this.estimateFinalizeDuration(target, speed),
15533
17194
  });
15534
17195
  }
@@ -15550,12 +17211,12 @@ class ConstructionManager extends BaseManager {
15550
17211
  cumulativeSec += task.duration.toNumber();
15551
17212
  if (!isPushTask(task))
15552
17213
  continue;
15553
- if (!task.entitytarget)
17214
+ if (task.couplings.length === 0)
15554
17215
  continue;
15555
17216
  const projectedEndMs = startedMs + cumulativeSec * 1000;
15556
17217
  if (projectedEndMs < nowMs)
15557
17218
  continue;
15558
- const targetIdStr = task.entitytarget.entity_id.toString();
17219
+ const targetIdStr = task.couplings[0].counterpart.entity_id.toString();
15559
17220
  const etaSeconds = Math.max(0, Math.round((projectedEndMs - nowMs) / 1000));
15560
17221
  let perTarget = buckets.get(targetIdStr);
15561
17222
  if (!perTarget) {
@@ -15680,8 +17341,8 @@ class ConstructionManager extends BaseManager {
15680
17341
  return [];
15681
17342
  return reservationsOf(source);
15682
17343
  }
15683
- estimateFinalizeDuration(target, crafterSpeed) {
15684
- return calc_craft_duration(crafterSpeed, target.progress.massRequired);
17344
+ estimateFinalizeDuration(target, builderSpeed) {
17345
+ return calc_build_duration(builderSpeed, target.progress.massRequired);
15685
17346
  }
15686
17347
  static isConstructionKind(kind) {
15687
17348
  return CONSTRUCTION_KINDS.has(kind);
@@ -15774,18 +17435,18 @@ function isPushTask(task) {
15774
17435
  }
15775
17436
  function isBuildOfPlot(task, plotId) {
15776
17437
  return (task.type.toNumber() === exports.TaskType.BUILDPLOT &&
15777
- task.entitytarget !== undefined &&
15778
- task.entitytarget.entity_id.equals(plotId));
17438
+ task.couplings.length > 0 &&
17439
+ task.couplings[0].counterpart.entity_id.equals(plotId));
15779
17440
  }
15780
17441
  function reservationsOf(source) {
15781
17442
  const out = new Map();
15782
17443
  for (const task of getTasks(source)) {
15783
17444
  if (!isPushTask(task))
15784
17445
  continue;
15785
- if (!task.entitytarget)
17446
+ if (task.couplings.length === 0)
15786
17447
  continue;
15787
- const targetType = task.entitytarget.entity_type;
15788
- const targetId = task.entitytarget.entity_id;
17448
+ const targetType = task.couplings[0].counterpart.entity_type;
17449
+ const targetId = task.couplings[0].counterpart.entity_id;
15789
17450
  for (const c of task.cargo) {
15790
17451
  const itemId = c.item_id.toNumber();
15791
17452
  const quantity = c.quantity.toNumber();
@@ -15874,11 +17535,23 @@ function planRoute(params) {
15874
17535
  return { ok: false, reason: 'empty-destination' };
15875
17536
  }
15876
17537
  const straightLine = dist(origin, dest);
15877
- const heuristic = (c) => Math.ceil(dist(c, dest) / perLegReach);
17538
+ if (straightLine <= perLegReach) {
17539
+ const directCost = params.legCost?.({
17540
+ from: origin,
17541
+ to: dest,
17542
+ distance: straightLine,
17543
+ isDestination: true,
17544
+ });
17545
+ if (directCost !== null) {
17546
+ return { ok: true, waypoints: [dest], legs: 1, totalDistance: straightLine };
17547
+ }
17548
+ }
17549
+ const heuristic = (c) => params.heuristicCost?.(c, dest) ??
17550
+ (params.legCost ? 0 : Math.ceil(dist(c, dest) / perLegReach));
15878
17551
  const gScore = new Map([[key(origin), 0]]);
15879
17552
  const cameFrom = new Map();
15880
17553
  const frontier = [
15881
- { coord: origin, g: 0, f: heuristic(origin), remaining: straightLine },
17554
+ { coord: origin, legs: 0, cost: 0, f: heuristic(origin), remaining: straightLine },
15882
17555
  ];
15883
17556
  let furthest = origin;
15884
17557
  let furthestRemaining = dist(origin, dest);
@@ -15894,6 +17567,8 @@ function planRoute(params) {
15894
17567
  }
15895
17568
  }
15896
17569
  const current = frontier.splice(bestIdx, 1)[0];
17570
+ if (current.cost !== gScore.get(key(current.coord)))
17571
+ continue;
15897
17572
  if (sameCoord(current.coord, dest)) {
15898
17573
  return reconstruct(cameFrom, origin, dest);
15899
17574
  }
@@ -15907,20 +17582,33 @@ function planRoute(params) {
15907
17582
  const inCorridor = dist(origin, n.coord) + dist(n.coord, dest) <= straightLine + corridorSlack;
15908
17583
  if (!inCorridor)
15909
17584
  continue;
15910
- const tentativeG = current.g + 1;
15911
- if (tentativeG > maxLegs) {
17585
+ const tentativeLegs = current.legs + 1;
17586
+ if (tentativeLegs > maxLegs) {
15912
17587
  cappedByMaxLegs = true;
15913
17588
  continue;
15914
17589
  }
17590
+ const evaluatedCost = params.legCost?.({
17591
+ from: current.coord,
17592
+ to: n.coord,
17593
+ distance: n.dist,
17594
+ isDestination: sameCoord(n.coord, dest),
17595
+ });
17596
+ if (evaluatedCost === null)
17597
+ continue;
17598
+ const legCost = evaluatedCost ?? 1;
17599
+ if (!(legCost >= 0) || !Number.isFinite(legCost))
17600
+ continue;
15915
17601
  const nk = key(n.coord);
15916
- if (tentativeG < (gScore.get(nk) ?? Infinity)) {
15917
- gScore.set(nk, tentativeG);
17602
+ const nextCost = current.cost + legCost;
17603
+ if (nextCost < (gScore.get(nk) ?? Infinity)) {
17604
+ gScore.set(nk, nextCost);
15918
17605
  cameFrom.set(nk, current.coord);
15919
17606
  const remaining = dist(n.coord, dest);
15920
17607
  frontier.push({
15921
17608
  coord: n.coord,
15922
- g: tentativeG,
15923
- f: tentativeG + Math.ceil(remaining / perLegReach),
17609
+ legs: tentativeLegs,
17610
+ cost: nextCost,
17611
+ f: nextCost + heuristic(n.coord),
15924
17612
  remaining,
15925
17613
  });
15926
17614
  }
@@ -15970,47 +17658,22 @@ function reconstruct(cameFrom, origin, dest) {
15970
17658
  const waypoints = path.slice(1);
15971
17659
  return { ok: true, waypoints, legs: waypoints.length, totalDistance };
15972
17660
  }
15973
- let scanProvider = null;
15974
- const graphCache = new Map();
15975
- function setScanProvider(provider) {
15976
- scanProvider = provider;
15977
- graphCache.clear();
15978
- }
15979
- function sdkSystemGraph(seed) {
17661
+ const graphCache = new WeakMap();
17662
+ function sdkSystemGraph(seed, scan) {
15980
17663
  const s = antelope.Checksum256.from(seed);
15981
17664
  const seedHex = s.toString();
15982
- const cached = graphCache.get(seedHex);
17665
+ let bySeed = graphCache.get(scan);
17666
+ if (!bySeed) {
17667
+ bySeed = new Map();
17668
+ graphCache.set(scan, bySeed);
17669
+ }
17670
+ const cached = bySeed.get(seedHex);
15983
17671
  if (cached)
15984
17672
  return cached;
15985
- const graph = scanProvider ? wasmSystemGraph(s, seedHex, scanProvider) : jsSystemGraph(s);
15986
- graphCache.set(seedHex, graph);
17673
+ const graph = wasmSystemGraph(s, seedHex, scan);
17674
+ bySeed.set(seedHex, graph);
15987
17675
  return graph;
15988
17676
  }
15989
- function jsSystemGraph(s) {
15990
- return {
15991
- hasSystem: (c) => hasSystem(s, { x: c.x, y: c.y }) || wormholeAt(s, c.x, c.y) !== null,
15992
- nearby: (c, reachTiles) => {
15993
- const seen = new Set([`${c.x},${c.y}`]);
15994
- const out = [];
15995
- for (const d of findNearbyPlanets(s, { x: c.x, y: c.y }, reachTiles * PRECISION$1)) {
15996
- const coord = { x: Number(d.destination.x), y: Number(d.destination.y) };
15997
- const k = `${coord.x},${coord.y}`;
15998
- if (seen.has(k))
15999
- continue;
16000
- seen.add(k);
16001
- out.push({ coord, dist: Number(d.distance) / PRECISION$1 });
16002
- }
16003
- for (const coord of nearbyWormholes(s, c.x, c.y, reachTiles)) {
16004
- const k = `${coord.x},${coord.y}`;
16005
- if (seen.has(k))
16006
- continue;
16007
- seen.add(k);
16008
- out.push({ coord, dist: Math.hypot(coord.x - c.x, coord.y - c.y) });
16009
- }
16010
- return out;
16011
- },
16012
- };
16013
- }
16014
17677
  const SCAN_BUCKET = 48;
16015
17678
  function wasmSystemGraph(s, seedHex, scan) {
16016
17679
  const bucketCache = new Map();
@@ -16063,21 +17726,20 @@ function wasmSystemGraph(s, seedHex, scan) {
16063
17726
  };
16064
17727
  }
16065
17728
 
16066
- function computePerLegReach(s, haulCount = 0) {
17729
+ function computePerLegReach(s) {
16067
17730
  const capacity = s.generator?.capacity;
16068
17731
  const drain = s.engines?.drain;
16069
17732
  if (capacity === undefined || drain === undefined || drain === 0n) {
16070
17733
  throw new Error('entity has no usable engine/generator (cannot compute per-leg reach)');
16071
17734
  }
16072
- const haulDrain = s.hauler && haulCount > 0 ? s.hauler.drain * BigInt(haulCount) : 0n;
16073
- return Number(capacity) / Number(drain + haulDrain);
17735
+ return Number(capacity) / Number(drain);
16074
17736
  }
16075
- function computeGroupPerLegReach(participants, haulCount) {
17737
+ function computeGroupPerLegReach(participants) {
16076
17738
  const movers = participants.filter((p) => p.engines !== undefined && p.engines.drain !== 0n);
16077
17739
  if (movers.length === 0) {
16078
17740
  throw new Error('group has no moving entity (cannot compute per-leg reach)');
16079
17741
  }
16080
- return Math.min(...movers.map((p) => computePerLegReach(p, haulCount)));
17742
+ return Math.min(...movers.map(computePerLegReach));
16081
17743
  }
16082
17744
 
16083
17745
  function simulateRoute(movers, waypoints, origin, recharge) {
@@ -16106,17 +17768,13 @@ function simulateRoute(movers, waypoints, origin, recharge) {
16106
17768
  for (const to of waypoints) {
16107
17769
  const distance = distanceBetweenPoints(from.x, from.y, to.x, to.y);
16108
17770
  const distanceNum = Number(distance);
16109
- const distanceCells = Math.trunc(distanceNum / PRECISION$1);
17771
+ const distanceCells = distanceNum / PRECISION;
16110
17772
  const energyCostByMover = {};
16111
17773
  for (const m of movers) {
16112
17774
  if (!m.hasMovement || !m.engines)
16113
17775
  continue;
16114
17776
  const key = String(m.ref.entityId);
16115
- let cost = Number(calc_energyusage(distance, m.engines.drain));
16116
- if (m.hauler) {
16117
- cost += Math.trunc(distanceCells) * m.hauler.drain * haulCount;
16118
- }
16119
- energyCostByMover[key] = cost;
17777
+ energyCostByMover[key] = Number(calc_energyusage(distance, m.engines.drain));
16120
17778
  }
16121
17779
  let rechargeBefore = false;
16122
17780
  let rechargeSeconds = 0;
@@ -16237,6 +17895,23 @@ function resolveLaneCrafter(modules, entityItemId, laneKey) {
16237
17895
  const drain = computeCrafterDrain(fin);
16238
17896
  return { slotIndex: idx, speed, drain, outputPct: amp };
16239
17897
  }
17898
+ function resolveLaneBuilder(modules, entityItemId, laneKey) {
17899
+ const idx = laneKey - 1;
17900
+ const installed = idx >= 0 && idx < modules.length ? modules[idx].installed : undefined;
17901
+ if (!installed)
17902
+ throw new Error('builder lane has no module');
17903
+ const item = getItem(Number(installed.item_id.value ?? installed.item_id));
17904
+ if (item.moduleType !== 'builder')
17905
+ throw new Error('lane module is not a builder');
17906
+ const stats = BigInt(installed.stats.toString());
17907
+ const coh = decodeStat(stats, 0);
17908
+ const tol = decodeStat(stats, 1);
17909
+ const layout = getEntityLayout(entityItemId)?.slots ?? [];
17910
+ const amp = getSlotAmp(layout, idx);
17911
+ const speed = applySlotMultiplier(computeBuilderSpeed(coh), amp);
17912
+ const drain = computeBuilderDrain(tol);
17913
+ return { slotIndex: idx, speed, drain, outputPct: amp };
17914
+ }
16240
17915
  function resolveLaneLoader(modules, entityItemId, laneKey) {
16241
17916
  if (laneKey === LANE_MOBILITY) {
16242
17917
  return { slotIndex: -1, thrust: 0, mass: 0, outputPct: 0, valid: false };
@@ -16544,6 +18219,10 @@ function recomputeCaps(entity) {
16544
18219
  hullStats.strength = decodeStat(entity.stats, 0);
16545
18220
  if (hullStats.hardness === undefined)
16546
18221
  hullStats.hardness = decodeStat(entity.stats, 2);
18222
+ if (itemId === ITEM_SHIP_T1_PACKED) {
18223
+ hullStats.__legacyShipChannel3 = decodeStat(entity.stats, 3);
18224
+ hullStats.__legacyShipChannel4 = decodeStat(entity.stats, 4);
18225
+ }
16547
18226
  const layout = getEntityLayout(itemId)?.slots ?? [];
16548
18227
  const installed = toInstalledModules(entity.modules);
16549
18228
  const caps = computeEntityCapabilities(hullStats, itemId, installed, layout);
@@ -16566,6 +18245,12 @@ function recomputeCaps(entity) {
16566
18245
  drain: l.drain,
16567
18246
  output_pct: l.outputPct,
16568
18247
  });
18248
+ const toBuilderLane = (l) => exports.ServerTypes.builder_lane.from({
18249
+ slot_index: l.slotIndex,
18250
+ speed: l.speed,
18251
+ drain: l.drain,
18252
+ output_pct: l.outputPct,
18253
+ });
16569
18254
  return {
16570
18255
  hullmass: antelope.UInt32.from(caps.hullmass),
16571
18256
  capacity: antelope.UInt32.from(caps.capacity),
@@ -16576,6 +18261,7 @@ function recomputeCaps(entity) {
16576
18261
  loaderLanes: (caps.loaderLanes ?? []).map(toLoaderLane),
16577
18262
  gathererLanes: (caps.gathererLanes ?? []).map(toGathererLane),
16578
18263
  crafterLanes: (caps.crafterLanes ?? []).map(toCrafterLane),
18264
+ builderLanes: (caps.builderLanes ?? []).map(toBuilderLane),
16579
18265
  hauler: caps.hauler
16580
18266
  ? exports.ServerTypes.hauler_stats.from({
16581
18267
  capacity: caps.hauler.capacity,
@@ -16612,6 +18298,7 @@ function createProjectedEntity(entity) {
16612
18298
  const loaderLanes = entity.loader_lanes ?? caps?.loaderLanes ?? [];
16613
18299
  const gathererLanes = entity.gatherer_lanes ?? caps?.gathererLanes ?? [];
16614
18300
  const crafterLanes = entity.crafter_lanes ?? caps?.crafterLanes ?? [];
18301
+ const builderLanes = entity.builder_lanes ?? caps?.builderLanes ?? [];
16615
18302
  const engines = entity.engines ?? caps?.engines;
16616
18303
  const generator = entity.generator ?? caps?.generator;
16617
18304
  const hauler = entity.hauler ?? caps?.hauler;
@@ -16620,7 +18307,7 @@ function createProjectedEntity(entity) {
16620
18307
  const cargo = entity.cargo.map(cargoItemToStack);
16621
18308
  const projected = {
16622
18309
  location: Coordinates.from(entity.coordinates),
16623
- energy: antelope.UInt16.from(entity.energy ?? 0),
18310
+ energy: antelope.UInt32.from(entity.energy ?? 0),
16624
18311
  cargo,
16625
18312
  shipMass,
16626
18313
  capacity: capacity ? antelope.UInt64.from(capacity) : undefined,
@@ -16631,6 +18318,7 @@ function createProjectedEntity(entity) {
16631
18318
  loaderLanes,
16632
18319
  gathererLanes,
16633
18320
  crafterLanes,
18321
+ builderLanes,
16634
18322
  get cargoMass() {
16635
18323
  return calcStacksMass(this.cargo);
16636
18324
  },
@@ -16676,13 +18364,13 @@ function applyRechargeTask(projected, _task, options) {
16676
18364
  if (!projected.generator)
16677
18365
  return;
16678
18366
  if (options.complete) {
16679
- projected.energy = antelope.UInt16.from(projected.generator.capacity);
18367
+ projected.energy = antelope.UInt32.from(projected.generator.capacity);
16680
18368
  }
16681
18369
  else if (options.progress !== undefined) {
16682
18370
  const capacity = Number(projected.generator.capacity);
16683
18371
  const currentEnergy = Number(projected.energy);
16684
18372
  const rechargeAmount = (capacity - currentEnergy) * options.progress;
16685
- projected.energy = antelope.UInt16.from(Math.min(capacity, currentEnergy + rechargeAmount));
18373
+ projected.energy = antelope.UInt32.from(Math.min(capacity, currentEnergy + rechargeAmount));
16686
18374
  }
16687
18375
  }
16688
18376
  function applyFlightTask(projected, task, options) {
@@ -16701,8 +18389,8 @@ function applyFlightTask(projected, task, options) {
16701
18389
  });
16702
18390
  const partialEnergy = antelope.UInt64.from(Math.floor(Number(task.energy_cost ?? 0) * options.progress));
16703
18391
  projected.energy = projected.energy.gt(partialEnergy)
16704
- ? antelope.UInt16.from(projected.energy.subtracting(partialEnergy))
16705
- : antelope.UInt16.from(0);
18392
+ ? antelope.UInt32.from(projected.energy.subtracting(partialEnergy))
18393
+ : antelope.UInt32.from(0);
16706
18394
  }
16707
18395
  }
16708
18396
  function addCargoItem(projected, item) {
@@ -16724,16 +18412,16 @@ function applyRemoveCargoTask(projected, task) {
16724
18412
  function applyEnergyCost(projected, task) {
16725
18413
  if (!task.energy_cost)
16726
18414
  return;
16727
- const energyCost = antelope.UInt16.from(task.energy_cost);
18415
+ const energyCost = antelope.UInt32.from(task.energy_cost);
16728
18416
  projected.energy = projected.energy.gt(energyCost)
16729
- ? antelope.UInt16.from(projected.energy.subtracting(energyCost))
16730
- : antelope.UInt16.from(0);
18417
+ ? antelope.UInt32.from(projected.energy.subtracting(energyCost))
18418
+ : antelope.UInt32.from(0);
16731
18419
  }
16732
18420
  function applyGatherTask(projected, task, options) {
16733
18421
  if (!options.complete)
16734
18422
  return;
16735
18423
  applyEnergyCost(projected, task);
16736
- if (!task.entitytarget) {
18424
+ if (task.couplings.length === 0) {
16737
18425
  applyAddCargoTask(projected, task);
16738
18426
  }
16739
18427
  }
@@ -16744,12 +18432,8 @@ function applyCraftTask(projected, task) {
16744
18432
  for (let i = 0; i < task.cargo.length - 1; i++) {
16745
18433
  removeCargoItem(projected, task.cargo[i]);
16746
18434
  }
16747
- addCargoItem(projected, task.cargo[task.cargo.length - 1]);
16748
- }
16749
- function applyDeployTask(projected, task) {
16750
- applyEnergyCost(projected, task);
16751
- if (task.cargo.length > 0) {
16752
- removeCargoItem(projected, task.cargo[0]);
18435
+ if (task.couplings.length === 0) {
18436
+ addCargoItem(projected, task.cargo[task.cargo.length - 1]);
16753
18437
  }
16754
18438
  }
16755
18439
  function applyTask(projected, task) {
@@ -16775,9 +18459,6 @@ function applyTask(projected, task) {
16775
18459
  case exports.TaskType.CRAFT:
16776
18460
  applyCraftTask(projected, task);
16777
18461
  break;
16778
- case exports.TaskType.DEPLOY:
16779
- applyDeployTask(projected, task);
16780
- break;
16781
18462
  case exports.TaskType.UNDEPLOY:
16782
18463
  case exports.TaskType.DEMOLISH:
16783
18464
  break;
@@ -16915,10 +18596,6 @@ function projectEntityAt(entity, now) {
16915
18596
  if (taskComplete)
16916
18597
  applyCraftTask(projected, task);
16917
18598
  break;
16918
- case exports.TaskType.DEPLOY:
16919
- if (taskComplete)
16920
- applyDeployTask(projected, task);
16921
- break;
16922
18599
  case exports.TaskType.UNDEPLOY:
16923
18600
  case exports.TaskType.DEMOLISH:
16924
18601
  break;
@@ -16945,7 +18622,7 @@ function taskCargoChanges(task) {
16945
18622
  case exports.TaskType.UNWRAP:
16946
18623
  return items.map((i) => toChange(i, 'in'));
16947
18624
  case exports.TaskType.GATHER:
16948
- return task.entitytarget ? [] : items.map((i) => toChange(i, 'in'));
18625
+ return task.couplings.length > 0 ? [] : items.map((i) => toChange(i, 'in'));
16949
18626
  case exports.TaskType.UNLOAD:
16950
18627
  return items.map((i) => toChange(i, 'out'));
16951
18628
  case exports.TaskType.CRAFT:
@@ -16958,6 +18635,49 @@ function taskCargoChanges(task) {
16958
18635
  }
16959
18636
  }
16960
18637
 
18638
+ const JOB_QUEUE_CAP = 25;
18639
+ function activeOn(jobs, socket, now) {
18640
+ return jobs
18641
+ .filter((j) => j.socket === socket && j.completesAt > now)
18642
+ .sort((a, b) => a.startsAt.getTime() - b.startsAt.getTime());
18643
+ }
18644
+ function jobsToLanes(jobs, socketCount, now) {
18645
+ const lanes = [];
18646
+ for (let socket = 0; socket < socketCount; socket++) {
18647
+ const entries = [];
18648
+ let cursor = null;
18649
+ for (const j of activeOn(jobs, socket, now)) {
18650
+ if (cursor && j.startsAt > cursor) {
18651
+ entries.push({ kind: 'idle', startsAt: cursor, completesAt: j.startsAt });
18652
+ }
18653
+ entries.push({ kind: 'job', startsAt: j.startsAt, completesAt: j.completesAt, job: j });
18654
+ cursor = j.completesAt;
18655
+ }
18656
+ lanes.push({ socket, entries });
18657
+ }
18658
+ return lanes;
18659
+ }
18660
+ function socketTail(jobs, socket, now) {
18661
+ const active = activeOn(jobs, socket, now);
18662
+ const last = active[active.length - 1];
18663
+ return last && last.completesAt > now ? last.completesAt : now;
18664
+ }
18665
+ function pickFabricator(jobs, sockets, durationBySocketMinutes, now) {
18666
+ let best = null;
18667
+ for (let slot = 0; slot < sockets.length; slot++) {
18668
+ if (!sockets[slot].open)
18669
+ continue;
18670
+ if (activeOn(jobs, slot, now).length >= JOB_QUEUE_CAP)
18671
+ continue;
18672
+ const startsAt = socketTail(jobs, slot, now);
18673
+ const completesAt = new Date(startsAt.getTime() + durationBySocketMinutes[slot] * 60000);
18674
+ if (!best || completesAt < best.completesAt) {
18675
+ best = { slot, startsAt, completesAt };
18676
+ }
18677
+ }
18678
+ return best;
18679
+ }
18680
+
16961
18681
  function composeIdleResolve(blocker, action, actions, now, lookupCounterpart) {
16962
18682
  const ids = [];
16963
18683
  const seen = new Set();
@@ -16992,15 +18712,16 @@ function taskCargoEffect(task) {
16992
18712
  case exports.TaskType.UNLOAD:
16993
18713
  return { added: [], removed: task.cargo };
16994
18714
  case exports.TaskType.GATHER:
16995
- return task.entitytarget ? { added: [], removed: [] } : { added: task.cargo, removed: [] };
18715
+ return task.couplings.length > 0
18716
+ ? { added: [], removed: [] }
18717
+ : { added: task.cargo, removed: [] };
16996
18718
  case exports.TaskType.CRAFT:
16997
18719
  if (task.cargo.length === 0)
16998
18720
  return { added: [], removed: [] };
16999
- return { added: [task.cargo[task.cargo.length - 1]], removed: task.cargo.slice(0, -1) };
17000
- case exports.TaskType.DEPLOY:
17001
- return task.cargo.length > 0
17002
- ? { added: [], removed: [task.cargo[0]] }
17003
- : { added: [], removed: [] };
18721
+ return {
18722
+ added: task.couplings.length === 0 ? [task.cargo[task.cargo.length - 1]] : [],
18723
+ removed: task.cargo.slice(0, -1),
18724
+ };
17004
18725
  default:
17005
18726
  return { added: [], removed: [] };
17006
18727
  }
@@ -17178,31 +18899,24 @@ function cancelEligibility(entity, laneKey, fromTaskIndex, input) {
17178
18899
  effects.abandonsRunning = true;
17179
18900
  if (t.energy_cost)
17180
18901
  energyForfeited += t.energy_cost.toNumber();
17181
- if (t.type.equals(exports.TaskType.BUILDPLOT) && t.entitytarget)
17182
- effects.keepsPlotDeposits = { plot: t.entitytarget };
17183
- if (t.hold && t.entitytarget) {
17184
- const counterpart = input.counterparts?.get(t.entitytarget.entity_id.toString());
17185
- const hold = (counterpart?.holds ?? []).find((h) => h.id.equals(t.hold)) ??
17186
- (entity.holds ?? []).find((h) => h.id.equals(t.hold));
17187
- if (hold) {
17188
- const kind = hold.kind.toNumber();
17189
- effects.releasedHolds.push({ counterpart: t.entitytarget, kind });
17190
- if (kind === 1 ) {
17191
- effects.refunds.push({ giver: t.entitytarget, cargo: t.cargo });
17192
- const giver = counterpart;
17193
- if (giver) {
17194
- const returned = t.cargo.reduce((s, c) => s + calcCargoItemMass(c).toNumber(), 0);
17195
- const cap = giver.capacity
17196
- ? giver.capacity.toNumber()
17197
- : Number.MAX_SAFE_INTEGER;
17198
- if (giver.cargomass.toNumber() + returned > cap) {
17199
- return {
17200
- ok: false,
17201
- blockedReason: exports.CancelBlockReason.WOULD_OVERFILL,
17202
- range,
17203
- effects: { ...EMPTY_EFFECTS },
17204
- };
17205
- }
18902
+ if (t.type.equals(exports.TaskType.BUILDPLOT) && t.couplings.length > 0)
18903
+ effects.keepsPlotDeposits = { plot: t.couplings[0].counterpart };
18904
+ for (const c of t.couplings) {
18905
+ const kind = c.kind.toNumber();
18906
+ effects.releasedHolds.push({ counterpart: c.counterpart, kind });
18907
+ if (kind === exports.HoldKind.PULL) {
18908
+ effects.refunds.push({ giver: c.counterpart, cargo: t.cargo });
18909
+ const giver = input.counterparts?.get(c.counterpart.entity_id.toString());
18910
+ if (giver) {
18911
+ const returned = t.cargo.reduce((s, c) => s + calcCargoItemMass(c).toNumber(), 0);
18912
+ const cap = giver.capacity ? giver.capacity.toNumber() : Number.MAX_SAFE_INTEGER;
18913
+ if (giver.cargomass.toNumber() + returned > cap) {
18914
+ return {
18915
+ ok: false,
18916
+ blockedReason: exports.CancelBlockReason.WOULD_OVERFILL,
18917
+ range,
18918
+ effects: { ...EMPTY_EFFECTS },
18919
+ };
17206
18920
  }
17207
18921
  }
17208
18922
  }
@@ -17235,7 +18949,7 @@ function derivedLoaders(lanes) {
17235
18949
  function acceleration(thrust, mass) {
17236
18950
  if (mass <= 0)
17237
18951
  return 0;
17238
- return (thrust / mass) * PRECISION$1;
18952
+ return (thrust / mass) * PRECISION;
17239
18953
  }
17240
18954
  function flightTime(distance, accel) {
17241
18955
  if (accel <= 0 || distance <= 0)
@@ -17245,7 +18959,7 @@ function flightTime(distance, accel) {
17245
18959
  function distance2d(ax, ay, bx, by) {
17246
18960
  const dx = ax - bx;
17247
18961
  const dy = ay - by;
17248
- return Math.floor(Math.sqrt(dx * dx + dy * dy) * PRECISION$1);
18962
+ return Math.floor(Math.sqrt(dx * dx + dy * dy) * PRECISION);
17249
18963
  }
17250
18964
  function unwrapTransitDuration(itemMass, origin, dest) {
17251
18965
  if (itemMass <= 0)
@@ -17410,10 +19124,10 @@ function hasGatherer(e) {
17410
19124
  function maxTravelDistance(entity) {
17411
19125
  return antelope.UInt32.from(entity.generator.capacity)
17412
19126
  .dividing(entity.engines.drain)
17413
- .multiplying(PRECISION$1);
19127
+ .multiplying(PRECISION);
17414
19128
  }
17415
19129
  function calcEnergyUsage(entity, distance) {
17416
- return distance.dividing(PRECISION$1).multiplying(entity.engines.drain);
19130
+ return distance.multiplying(entity.engines.drain).dividing(PRECISION);
17417
19131
  }
17418
19132
  function energyPercent(entity) {
17419
19133
  return (Number(entity.energy) / Number(entity.generator.capacity)) * 100;
@@ -17448,13 +19162,12 @@ function calc_gather_rate(gatherer, itemMass, stratum, richness) {
17448
19162
  function calc_gather_energy(gatherer, duration) {
17449
19163
  if (duration <= 0)
17450
19164
  return antelope.UInt32.from(0);
17451
- const raw = Math.floor((duration * gatherer.drain.toNumber()) / PRECISION$1);
17452
- return antelope.UInt32.from(Math.min(Math.max(raw, 1), 4294967295));
19165
+ const raw = Math.floor((duration * gatherer.drain.toNumber()) / PRECISION);
19166
+ return antelope.UInt32.from(Math.min(Math.max(raw, 1000), 4294967295));
17453
19167
  }
17454
19168
 
17455
19169
  const BASE_HAUL_PENALTY_MILLI = 300;
17456
19170
  const HAULER_EFFICIENCY_DENOM = 10000;
17457
- const PRECISION = 10000;
17458
19171
  function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
17459
19172
  if (haulCount === 0)
17460
19173
  return totalThrust;
@@ -17463,9 +19176,6 @@ function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
17463
19176
  HAULER_EFFICIENCY_DENOM);
17464
19177
  return Math.floor((totalThrust * 1000) / penaltyMilli);
17465
19178
  }
17466
- function computeHaulerDrain(distance, drain, haulCount) {
17467
- return Math.floor(distance / PRECISION) * drain * haulCount;
17468
- }
17469
19179
 
17470
19180
  const categoryColors = {
17471
19181
  ore: '#C26D3F',
@@ -17622,8 +19332,17 @@ const capabilityAttributes = [
17622
19332
  attribute: 'capacity',
17623
19333
  description: 'Cargo capacity added by hulls and installed Cargo Hold modules',
17624
19334
  },
19335
+ {
19336
+ capability: 'Storage',
19337
+ attribute: 'drain',
19338
+ description: 'Fixed normal-travel drain contributed by an installed Cargo Hold',
19339
+ },
17625
19340
  { capability: 'Movement', attribute: 'thrust', description: 'Propulsion force' },
17626
- { capability: 'Movement', attribute: 'drain', description: 'Energy consumed per movement' },
19341
+ {
19342
+ capability: 'Movement',
19343
+ attribute: 'drain',
19344
+ description: 'Total installed energy consumed per tile of normal travel',
19345
+ },
17627
19346
  {
17628
19347
  capability: 'Energy',
17629
19348
  attribute: 'capacity',
@@ -17664,7 +19383,7 @@ const capabilityAttributes = [
17664
19383
  {
17665
19384
  capability: 'Hauling',
17666
19385
  attribute: 'drain',
17667
- description: 'Energy consumed per target during haul-beam operation',
19386
+ description: 'Fixed normal-travel drain contributed by an installed Tractor Beam',
17668
19387
  },
17669
19388
  ];
17670
19389
  const invertedAttributes = new Set(['drain', 'mass']);
@@ -18030,6 +19749,20 @@ function rollupCrafter(lanes) {
18030
19749
  drain: antelope.UInt32.from(totalDrain),
18031
19750
  };
18032
19751
  }
19752
+ function rollupBuilder(lanes) {
19753
+ if (lanes.length === 0)
19754
+ return undefined;
19755
+ let totalSpeed = 0;
19756
+ let totalDrain = 0;
19757
+ for (const l of lanes) {
19758
+ totalSpeed += Number(l.speed);
19759
+ totalDrain += Number(l.drain);
19760
+ }
19761
+ return {
19762
+ speed: antelope.UInt16.from(Math.min(totalSpeed, 65535)),
19763
+ drain: antelope.UInt32.from(totalDrain),
19764
+ };
19765
+ }
18033
19766
  function rollupLoaders(lanes) {
18034
19767
  if (lanes.length === 0)
18035
19768
  return undefined;
@@ -18133,8 +19866,8 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18133
19866
  return {
18134
19867
  capability: 'Generator',
18135
19868
  attributes: [
18136
- { label: 'Capacity', value: caps.capacity },
18137
- { label: 'Recharge', value: caps.recharge },
19869
+ { label: 'Capacity', value: toWholeEnergy$1(caps.capacity) },
19870
+ { label: 'Recharge', value: toWholeEnergy$1(caps.recharge) },
18138
19871
  ],
18139
19872
  };
18140
19873
  }
@@ -18144,7 +19877,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18144
19877
  capability: 'Gatherer',
18145
19878
  attributes: [
18146
19879
  { label: 'Yield', value: caps.yield },
18147
- { label: 'Drain', value: caps.drain },
19880
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18148
19881
  { label: 'Depth', value: caps.depth },
18149
19882
  ],
18150
19883
  };
@@ -18166,7 +19899,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18166
19899
  capability: 'Crafting',
18167
19900
  attributes: [
18168
19901
  { label: 'Speed', value: caps.speed },
18169
- { label: 'Drain', value: caps.drain },
19902
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18170
19903
  ],
18171
19904
  };
18172
19905
  }
@@ -18177,12 +19910,12 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18177
19910
  attributes: [
18178
19911
  { label: 'Capacity', value: caps.capacity },
18179
19912
  { label: 'Efficiency', value: caps.efficiency },
18180
- { label: 'Drain', value: caps.drain },
19913
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18181
19914
  ],
18182
19915
  };
18183
19916
  }
18184
19917
  case MODULE_STORAGE: {
18185
- const caps = computeStorageCapabilities(stats);
19918
+ const caps = computeStorageCapabilities(stats, tier);
18186
19919
  return {
18187
19920
  capability: 'Storage',
18188
19921
  attributes: [
@@ -18190,6 +19923,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18190
19923
  label: 'Cargo Capacity',
18191
19924
  value: applySlotMultiplierUint32(caps.capacity, outputPct),
18192
19925
  },
19926
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18193
19927
  ],
18194
19928
  };
18195
19929
  }
@@ -18200,7 +19934,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18200
19934
  attributes: [
18201
19935
  {
18202
19936
  label: 'Energy Capacity',
18203
- value: applySlotMultiplierUint32(caps.capacity, outputPct),
19937
+ value: toWholeEnergy$1(applySlotMultiplierUint32(caps.capacity, outputPct)),
18204
19938
  },
18205
19939
  ],
18206
19940
  };
@@ -18242,10 +19976,19 @@ function resolveModule(id, stats) {
18242
19976
  attributes,
18243
19977
  };
18244
19978
  }
18245
- function hullCapsForEntity(itemId, decoded) {
19979
+ function hullCapsForEntity(itemId, decoded, packedStats) {
19980
+ const hullStats = getPackedEntityType(itemId)?.equals(ENTITY_SHIP)
19981
+ ? {
19982
+ strength: decodeStat(packedStats, 0),
19983
+ hardness: decodeStat(packedStats, 1),
19984
+ plasticity: decodeStat(packedStats, 2),
19985
+ volatility: decodeStat(packedStats, 3),
19986
+ conductivity: decodeStat(packedStats, 4),
19987
+ }
19988
+ : decoded;
18246
19989
  return {
18247
- hullmass: computeBaseHullmass(decoded),
18248
- capacity: computeBaseCapacity(itemId, decoded),
19990
+ hullmass: computeBaseHullmass(itemId, hullStats),
19991
+ capacity: computeBaseCapacity(itemId, hullStats),
18249
19992
  };
18250
19993
  }
18251
19994
  function resolveEntity(id, stats, modules) {
@@ -18262,7 +20005,7 @@ function resolveEntity(id, stats, modules) {
18262
20005
  decoded.density = decodeStat(bigStats, 1);
18263
20006
  if (decoded.hardness === undefined)
18264
20007
  decoded.hardness = decodeStat(bigStats, 2);
18265
- const hullCaps = hullCapsForEntity(id, decoded);
20008
+ const hullCaps = hullCapsForEntity(id, decoded, bigStats);
18266
20009
  attributes = [
18267
20010
  {
18268
20011
  capability: 'Hull',
@@ -18498,6 +20241,9 @@ function moduleSlotsForImmutable(modules) {
18498
20241
  }));
18499
20242
  }
18500
20243
  const IMAGE_HOST_URL = 'https://item.shiploadgame.com/item';
20244
+ function toWholeEnergy(milli) {
20245
+ return Math.floor((milli + 500) / 1000);
20246
+ }
18501
20247
  function bytesToBase64Url(bytes) {
18502
20248
  let binary = '';
18503
20249
  for (let i = 0; i < bytes.byteLength; i++)
@@ -18563,8 +20309,14 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18563
20309
  const thm = decodeStat(stats, 1);
18564
20310
  base.push({ first: 'volatility', second: ['uint16', vol] });
18565
20311
  base.push({ first: 'thermal', second: ['uint16', thm] });
18566
- base.push({ first: 'thrust', second: ['uint32', computeEngineThrust(vol)] });
18567
- base.push({ first: 'drain', second: ['uint16', computeEngineDrain(thm)] });
20312
+ base.push({
20313
+ first: 'thrust',
20314
+ second: ['uint32', computeEngineThrust(computeEffectiveModuleStat(vol))],
20315
+ });
20316
+ base.push({
20317
+ first: 'drain',
20318
+ second: ['uint16', computeEngineDrain(computeEffectiveModuleStat(thm))],
20319
+ });
18568
20320
  break;
18569
20321
  }
18570
20322
  case MODULE_GENERATOR: {
@@ -18572,8 +20324,20 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18572
20324
  const ref = decodeStat(stats, 1);
18573
20325
  base.push({ first: 'resonance', second: ['uint16', res] });
18574
20326
  base.push({ first: 'reflectivity', second: ['uint16', ref] });
18575
- base.push({ first: 'capacity', second: ['uint16', computeGeneratorCap(res)] });
18576
- base.push({ first: 'recharge', second: ['uint16', computeGeneratorRech(ref)] });
20327
+ base.push({
20328
+ first: 'capacity',
20329
+ second: [
20330
+ 'uint16',
20331
+ toWholeEnergy(computeGeneratorCap(computeEffectiveModuleStat(res))),
20332
+ ],
20333
+ });
20334
+ base.push({
20335
+ first: 'recharge',
20336
+ second: [
20337
+ 'uint16',
20338
+ toWholeEnergy(computeGeneratorRech(computeEffectiveModuleStat(ref))),
20339
+ ],
20340
+ });
18577
20341
  break;
18578
20342
  }
18579
20343
  case MODULE_GATHERER: {
@@ -18584,7 +20348,10 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18584
20348
  base.push({ first: 'hardness', second: ['uint16', hrd] });
18585
20349
  base.push({ first: 'saturation', second: ['uint16', sat] });
18586
20350
  base.push({ first: 'yield', second: ['uint16', computeGathererYield(str)] });
18587
- base.push({ first: 'drain', second: ['uint16', computeGathererDrain(sat)] });
20351
+ base.push({
20352
+ first: 'drain',
20353
+ second: ['uint16', toWholeEnergy(computeGathererDrain(sat))],
20354
+ });
18588
20355
  base.push({ first: 'depth', second: ['uint16', computeGathererDepth(hrd, item.tier)] });
18589
20356
  break;
18590
20357
  }
@@ -18609,7 +20376,16 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18609
20376
  base.push({ first: 'fineness', second: ['uint16', fin] });
18610
20377
  base.push({ first: 'conductivity', second: ['uint16', con] });
18611
20378
  base.push({ first: 'speed', second: ['uint16', computeCrafterSpeed(fin)] });
18612
- base.push({ first: 'drain', second: ['uint16', computeCrafterDrain(con)] });
20379
+ base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeCrafterDrain(con))] });
20380
+ break;
20381
+ }
20382
+ case MODULE_BUILDER: {
20383
+ const coh = decodeStat(stats, 0);
20384
+ const tol = decodeStat(stats, 1);
20385
+ base.push({ first: 'cohesion', second: ['uint16', coh] });
20386
+ base.push({ first: 'tolerance', second: ['uint16', tol] });
20387
+ base.push({ first: 'speed', second: ['uint16', computeBuilderSpeed(coh)] });
20388
+ base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeBuilderDrain(tol))] });
18613
20389
  break;
18614
20390
  }
18615
20391
  case MODULE_STORAGE: {
@@ -18623,7 +20399,11 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18623
20399
  base.push({ first: 'cohesion', second: ['uint16', com] });
18624
20400
  base.push({
18625
20401
  first: 'capacity',
18626
- second: ['uint32', computeCargoBayCapacity(str, den, hrd, com)],
20402
+ second: ['uint32', computeCargoBayCapacity(str, den, hrd)],
20403
+ });
20404
+ base.push({
20405
+ first: 'drain',
20406
+ second: ['uint16', toWholeEnergy(computeCargoBayDrain(com, item.tier))],
18627
20407
  });
18628
20408
  break;
18629
20409
  }
@@ -18638,7 +20418,7 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18638
20418
  base.push({ first: 'insulation', second: ['uint16', ins] });
18639
20419
  base.push({
18640
20420
  first: 'capacity',
18641
- second: ['uint32', computeBatteryBankCapacity(vol, thm, pla, ins)],
20421
+ second: ['uint32', toWholeEnergy(computeBatteryBankCapacity(vol, thm, pla, ins))],
18642
20422
  });
18643
20423
  break;
18644
20424
  }
@@ -18651,7 +20431,10 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18651
20431
  base.push({ first: 'conductivity', second: ['uint16', con] });
18652
20432
  base.push({ first: 'capacity', second: ['uint8', computeHaulerCapacity(res, item.tier)] });
18653
20433
  base.push({ first: 'efficiency', second: ['uint16', computeHaulerEfficiency(pla)] });
18654
- base.push({ first: 'drain', second: ['uint16', computeHaulerDrain$1(con)] });
20434
+ base.push({
20435
+ first: 'drain',
20436
+ second: ['uint16', toWholeEnergy(computeHaulerDrain(con, item.tier))],
20437
+ });
18655
20438
  break;
18656
20439
  }
18657
20440
  }
@@ -18704,6 +20487,7 @@ var index = /*#__PURE__*/Object.freeze({
18704
20487
  deserializeModule: deserializeModule,
18705
20488
  deserializeEntity: deserializeEntity,
18706
20489
  deserializeAsset: deserializeAsset,
20490
+ toWholeEnergy: toWholeEnergy$1,
18707
20491
  computeBaseHullmass: computeBaseHullmass$1,
18708
20492
  computeBaseCapacityShip: computeBaseCapacityShip,
18709
20493
  computeBaseCapacityContainer: computeBaseCapacityContainer,
@@ -18723,9 +20507,13 @@ var index = /*#__PURE__*/Object.freeze({
18723
20507
  computeLoaderThrust: computeLoaderThrust,
18724
20508
  computeCrafterSpeed: computeCrafterSpeed,
18725
20509
  computeCrafterDrain: computeCrafterDrain,
20510
+ computeBuilderSpeed: computeBuilderSpeed,
20511
+ computeBuilderDrain: computeBuilderDrain,
18726
20512
  computeHaulerCapacity: computeHaulerCapacity,
18727
20513
  computeHaulerEfficiency: computeHaulerEfficiency,
18728
- computeHaulerDrain: computeHaulerDrain$1,
20514
+ supportDrainTierPercent: supportDrainTierPercent,
20515
+ computeHaulerDrain: computeHaulerDrain,
20516
+ computeCargoBayDrain: computeCargoBayDrain,
18729
20517
  computeWarpRange: computeWarpRange,
18730
20518
  computeCargoBayCapacity: computeCargoBayCapacity,
18731
20519
  computeBatteryBankCapacity: computeBatteryBankCapacity,
@@ -19002,6 +20790,7 @@ exports.CRAFT_NOT_ENOUGH_ENERGY = CRAFT_NOT_ENOUGH_ENERGY;
19002
20790
  exports.ClusterManager = ClusterManager;
19003
20791
  exports.ConstructionManager = ConstructionManager;
19004
20792
  exports.Coordinates = Coordinates;
20793
+ exports.DEFAULT_BASE_HULLMASS = DEFAULT_BASE_HULLMASS;
19005
20794
  exports.DEPLOY_ENTITY_HAS_SCHEDULE = DEPLOY_ENTITY_HAS_SCHEDULE;
19006
20795
  exports.DEPTH_THRESHOLD_T1 = DEPTH_THRESHOLD_T1;
19007
20796
  exports.DEPTH_THRESHOLD_T2 = DEPTH_THRESHOLD_T2;
@@ -19029,6 +20818,7 @@ exports.ENTITY_NOT_ENOUGH_ENERGY_CAPACITY = ENTITY_NOT_ENOUGH_ENERGY_CAPACITY;
19029
20818
  exports.ENTITY_NO_CRAFTER = ENTITY_NO_CRAFTER;
19030
20819
  exports.ENTITY_SHIP = ENTITY_SHIP;
19031
20820
  exports.ENTITY_WAREHOUSE = ENTITY_WAREHOUSE;
20821
+ exports.ENTITY_WORKSHOP = ENTITY_WORKSHOP;
19032
20822
  exports.EPOCH_NON_ZERO = EPOCH_NON_ZERO;
19033
20823
  exports.EPOCH_NOT_READY = EPOCH_NOT_READY;
19034
20824
  exports.ERROR_SYSTEM_ALREADY_INITIALIZED = ERROR_SYSTEM_ALREADY_INITIALIZED;
@@ -19072,6 +20862,7 @@ exports.ITEM_BIOMASS_T6 = ITEM_BIOMASS_T6;
19072
20862
  exports.ITEM_BIOMASS_T7 = ITEM_BIOMASS_T7;
19073
20863
  exports.ITEM_BIOMASS_T8 = ITEM_BIOMASS_T8;
19074
20864
  exports.ITEM_BIOMASS_T9 = ITEM_BIOMASS_T9;
20865
+ exports.ITEM_BUILDER_T1 = ITEM_BUILDER_T1;
19075
20866
  exports.ITEM_CERAMIC = ITEM_CERAMIC;
19076
20867
  exports.ITEM_CERAMIC_T2 = ITEM_CERAMIC_T2;
19077
20868
  exports.ITEM_CONTAINER_T1_PACKED = ITEM_CONTAINER_T1_PACKED;
@@ -19088,6 +20879,7 @@ exports.ITEM_CRYSTAL_T7 = ITEM_CRYSTAL_T7;
19088
20879
  exports.ITEM_CRYSTAL_T8 = ITEM_CRYSTAL_T8;
19089
20880
  exports.ITEM_CRYSTAL_T9 = ITEM_CRYSTAL_T9;
19090
20881
  exports.ITEM_DOES_NOT_EXIST = ITEM_DOES_NOT_EXIST;
20882
+ exports.ITEM_DREDGER_T1_PACKED = ITEM_DREDGER_T1_PACKED;
19091
20883
  exports.ITEM_ENGINE_T1 = ITEM_ENGINE_T1;
19092
20884
  exports.ITEM_EXTRACTOR_T1_PACKED = ITEM_EXTRACTOR_T1_PACKED;
19093
20885
  exports.ITEM_FACTORY_T1_PACKED = ITEM_FACTORY_T1_PACKED;
@@ -19133,6 +20925,8 @@ exports.ITEM_PLATE = ITEM_PLATE;
19133
20925
  exports.ITEM_PLATE_T2 = ITEM_PLATE_T2;
19134
20926
  exports.ITEM_POLYMER = ITEM_POLYMER;
19135
20927
  exports.ITEM_POLYMER_T2 = ITEM_POLYMER_T2;
20928
+ exports.ITEM_PORTER_T1_PACKED = ITEM_PORTER_T1_PACKED;
20929
+ exports.ITEM_PROSPECTOR_T1_PACKED = ITEM_PROSPECTOR_T1_PACKED;
19136
20930
  exports.ITEM_PROSPECTOR_T2_PACKED = ITEM_PROSPECTOR_T2_PACKED;
19137
20931
  exports.ITEM_REACTOR = ITEM_REACTOR;
19138
20932
  exports.ITEM_REACTOR_T2 = ITEM_REACTOR_T2;
@@ -19150,17 +20944,24 @@ exports.ITEM_RESIN = ITEM_RESIN;
19150
20944
  exports.ITEM_RESIN_T2 = ITEM_RESIN_T2;
19151
20945
  exports.ITEM_RESONATOR = ITEM_RESONATOR;
19152
20946
  exports.ITEM_RESONATOR_T2 = ITEM_RESONATOR_T2;
20947
+ exports.ITEM_ROUSTABOUT_T1_PACKED = ITEM_ROUSTABOUT_T1_PACKED;
19153
20948
  exports.ITEM_SENSOR = ITEM_SENSOR;
19154
20949
  exports.ITEM_SENSOR_T2 = ITEM_SENSOR_T2;
19155
20950
  exports.ITEM_SHIP_T1_PACKED = ITEM_SHIP_T1_PACKED;
19156
20951
  exports.ITEM_STORAGE_T1 = ITEM_STORAGE_T1;
20952
+ exports.ITEM_TENDER_T1_PACKED = ITEM_TENDER_T1_PACKED;
20953
+ exports.ITEM_TUG_T1_PACKED = ITEM_TUG_T1_PACKED;
19157
20954
  exports.ITEM_TYPE_COMPONENT = ITEM_TYPE_COMPONENT;
19158
20955
  exports.ITEM_TYPE_ENTITY = ITEM_TYPE_ENTITY;
19159
20956
  exports.ITEM_TYPE_MODULE = ITEM_TYPE_MODULE;
19160
20957
  exports.ITEM_TYPE_RESOURCE = ITEM_TYPE_RESOURCE;
19161
20958
  exports.ITEM_WAREHOUSE_T1_PACKED = ITEM_WAREHOUSE_T1_PACKED;
19162
20959
  exports.ITEM_WARP_T1 = ITEM_WARP_T1;
20960
+ exports.ITEM_WORKSHOP_T1_PACKED = ITEM_WORKSHOP_T1_PACKED;
20961
+ exports.ITEM_WRANGLER_T1_PACKED = ITEM_WRANGLER_T1_PACKED;
20962
+ exports.ITEM_WRIGHT_T1_PACKED = ITEM_WRIGHT_T1_PACKED;
19163
20963
  exports.InventoryAccessor = InventoryAccessor;
20964
+ exports.JOB_QUEUE_CAP = JOB_QUEUE_CAP;
19164
20965
  exports.LANE_BARRIER = LANE_BARRIER;
19165
20966
  exports.LANE_MOBILITY = LANE_MOBILITY;
19166
20967
  exports.LOCAL_HALF = LOCAL_HALF;
@@ -19177,6 +20978,7 @@ exports.MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL = MIN_TRANSFER_DISTANCE_ORBITAL_VES
19177
20978
  exports.MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE = MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE;
19178
20979
  exports.MODULE_ANY = MODULE_ANY;
19179
20980
  exports.MODULE_BATTERY = MODULE_BATTERY;
20981
+ exports.MODULE_BUILDER = MODULE_BUILDER;
19180
20982
  exports.MODULE_CARGO_NOT_FOUND = MODULE_CARGO_NOT_FOUND;
19181
20983
  exports.MODULE_CRAFTER = MODULE_CRAFTER;
19182
20984
  exports.MODULE_ENGINE = MODULE_ENGINE;
@@ -19190,6 +20992,8 @@ exports.MODULE_NOT_MODULE = MODULE_NOT_MODULE;
19190
20992
  exports.MODULE_SLOT_EMPTY = MODULE_SLOT_EMPTY;
19191
20993
  exports.MODULE_SLOT_INVALID = MODULE_SLOT_INVALID;
19192
20994
  exports.MODULE_SLOT_OCCUPIED = MODULE_SLOT_OCCUPIED;
20995
+ exports.MODULE_STAT_SCALING_ANCHOR = MODULE_STAT_SCALING_ANCHOR;
20996
+ exports.MODULE_STAT_SCALING_POST_ANCHOR_PERCENT = MODULE_STAT_SCALING_POST_ANCHOR_PERCENT;
19193
20997
  exports.MODULE_STORAGE = MODULE_STORAGE;
19194
20998
  exports.MODULE_TIER_PREFIXES = MODULE_TIER_PREFIXES;
19195
20999
  exports.MODULE_TYPE_MISMATCH = MODULE_TYPE_MISMATCH;
@@ -19207,7 +21011,7 @@ exports.PLANET_SUBTYPE_TERRESTRIAL = PLANET_SUBTYPE_TERRESTRIAL;
19207
21011
  exports.PLAYER_ALREADY_JOINED = PLAYER_ALREADY_JOINED;
19208
21012
  exports.PLAYER_NOT_FOUND = PLAYER_NOT_FOUND;
19209
21013
  exports.PLAYER_NOT_JOINED = PLAYER_NOT_JOINED;
19210
- exports.PRECISION = PRECISION$1;
21014
+ exports.PRECISION = PRECISION;
19211
21015
  exports.PlatformContract = platform;
19212
21016
  exports.Player = Player;
19213
21017
  exports.PlayersManager = PlayersManager;
@@ -19286,6 +21090,8 @@ exports.calcCargoMass = calcCargoMass;
19286
21090
  exports.calcEnergyUsage = calcEnergyUsage;
19287
21091
  exports.calcStacksMass = calcStacksMass;
19288
21092
  exports.calc_acceleration = calc_acceleration;
21093
+ exports.calc_build_duration = calc_build_duration;
21094
+ exports.calc_build_energy = calc_build_energy;
19289
21095
  exports.calc_craft_duration = calc_craft_duration;
19290
21096
  exports.calc_craft_energy = calc_craft_energy;
19291
21097
  exports.calc_energyusage = calc_energyusage;
@@ -19305,6 +21111,7 @@ exports.calc_ship_mass = calc_ship_mass;
19305
21111
  exports.calc_ship_rechargetime = calc_ship_rechargetime;
19306
21112
  exports.calc_transfer_duration = calc_transfer_duration;
19307
21113
  exports.calc_transit_duration = calc_transit_duration;
21114
+ exports.calc_travel_flighttime = calc_travel_flighttime;
19308
21115
  exports.calculateFlightTime = calculateFlightTime;
19309
21116
  exports.calculateLoadTimeBreakdown = calculateLoadTimeBreakdown;
19310
21117
  exports.calculateRefuelingTime = calculateRefuelingTime;
@@ -19336,16 +21143,21 @@ exports.compareByStars = compareByStars;
19336
21143
  exports.componentIcon = componentIcon;
19337
21144
  exports.composeIdleResolve = composeIdleResolve;
19338
21145
  exports.computeBaseCapacity = computeBaseCapacity;
21146
+ exports.computeBaseCapacityContainer = computeBaseCapacityContainer;
19339
21147
  exports.computeBaseCapacityShip = computeBaseCapacityShip;
19340
21148
  exports.computeBaseCapacityWarehouse = computeBaseCapacityWarehouse;
19341
21149
  exports.computeBaseHullmass = computeBaseHullmass$1;
19342
21150
  exports.computeBatteryCapabilities = computeBatteryCapabilities;
21151
+ exports.computeBuilderCapabilities = computeBuilderCapabilities;
21152
+ exports.computeBuilderDrain = computeBuilderDrain;
21153
+ exports.computeBuilderSpeed = computeBuilderSpeed;
19343
21154
  exports.computeComponentStats = computeComponentStats;
19344
21155
  exports.computeContainerCapabilities = computeContainerCapabilities;
19345
21156
  exports.computeCraftedOutputStats = computeCraftedOutputStats;
19346
21157
  exports.computeCrafterCapabilities = computeCrafterCapabilities;
19347
21158
  exports.computeCrafterDrain = computeCrafterDrain;
19348
21159
  exports.computeCrafterSpeed = computeCrafterSpeed;
21160
+ exports.computeEffectiveModuleStat = computeEffectiveModuleStat;
19349
21161
  exports.computeEngineCapabilities = computeEngineCapabilities;
19350
21162
  exports.computeEngineDrain = computeEngineDrain;
19351
21163
  exports.computeEngineThrust = computeEngineThrust;
@@ -19363,7 +21175,6 @@ exports.computeGroupPerLegReach = computeGroupPerLegReach;
19363
21175
  exports.computeHaulPenalty = computeHaulPenalty;
19364
21176
  exports.computeHaulerCapabilities = computeHaulerCapabilities;
19365
21177
  exports.computeHaulerCapacity = computeHaulerCapacity;
19366
- exports.computeHaulerDrain = computeHaulerDrain;
19367
21178
  exports.computeHaulerEfficiency = computeHaulerEfficiency;
19368
21179
  exports.computeInputMass = computeInputMass;
19369
21180
  exports.computeLauncherCapabilities = computeLauncherCapabilities;
@@ -19441,6 +21252,7 @@ exports.formatTier = formatTier;
19441
21252
  exports.gatherEnergyCost = gatherEnergyCost;
19442
21253
  exports.gathererDepthForTier = gathererDepthForTier;
19443
21254
  exports.getAllRecipes = getAllRecipes;
21255
+ exports.getBaseHullmassFor = getBaseHullmassFor;
19444
21256
  exports.getCapabilityAttributeRows = getCapabilityAttributeRows;
19445
21257
  exports.getCapabilityAttributes = getCapabilityAttributes;
19446
21258
  exports.getCategoryInfo = getCategoryInfo;
@@ -19519,12 +21331,14 @@ exports.isShip = isShip;
19519
21331
  exports.isSubscriptionsDebugEnabled = isSubscriptionsDebugEnabled;
19520
21332
  exports.isValidWormholePair = isValidWormholePair;
19521
21333
  exports.isWarehouse = isWarehouse;
21334
+ exports.isWorkshop = isWorkshop;
19522
21335
  exports.itemAbbreviations = itemAbbreviations;
19523
21336
  exports.itemCategory = itemCategory;
19524
21337
  exports.itemIds = itemIds;
19525
21338
  exports.itemOffset = itemOffset;
19526
21339
  exports.itemTier = itemTier;
19527
21340
  exports.itemTypeCode = itemTypeCode;
21341
+ exports.jobsToLanes = jobsToLanes;
19528
21342
  exports.kindCan = kindCan;
19529
21343
  exports.laneKeyForModule = laneKeyForModule;
19530
21344
  exports.lerp = lerp$1;
@@ -19543,6 +21357,7 @@ exports.needsRecharge = needsRecharge;
19543
21357
  exports.normalizeDisplayName = normalizeDisplayName;
19544
21358
  exports.parseWireEntity = parseWireEntity;
19545
21359
  exports.partnerRegion = partnerRegion;
21360
+ exports.pickFabricator = pickFabricator;
19546
21361
  exports.planParallelTransfer = planParallelTransfer;
19547
21362
  exports.planRoute = planRoute;
19548
21363
  exports.projectEntity = projectEntity;
@@ -19558,6 +21373,7 @@ exports.removeFromStacks = removeFromStacks;
19558
21373
  exports.renderDescription = renderDescription;
19559
21374
  exports.resolveItem = resolveItem;
19560
21375
  exports.resolveItemCategory = resolveItemCategory;
21376
+ exports.resolveLaneBuilder = resolveLaneBuilder;
19561
21377
  exports.resolveLaneCrafter = resolveLaneCrafter;
19562
21378
  exports.resolveLaneGatherer = resolveLaneGatherer;
19563
21379
  exports.resolveLaneLoader = resolveLaneLoader;
@@ -19565,6 +21381,7 @@ exports.resolveLockedAmount = resolveLockedAmount;
19565
21381
  exports.resolveStats = resolveStats;
19566
21382
  exports.rollTier = rollTier;
19567
21383
  exports.rollWithinTier = rollWithinTier;
21384
+ exports.rollupBuilder = rollupBuilder;
19568
21385
  exports.rollupCrafter = rollupCrafter;
19569
21386
  exports.rollupGatherer = rollupGatherer;
19570
21387
  exports.rollupLoaders = rollupLoaders;
@@ -19572,10 +21389,10 @@ exports.rotation = rotation;
19572
21389
  exports.schedule = schedule;
19573
21390
  exports.sdkSystemGraph = sdkSystemGraph;
19574
21391
  exports.selectGatherLane = selectGatherLane;
19575
- exports.setScanProvider = setScanProvider;
19576
21392
  exports.setSubscriptionsDebug = setSubscriptionsDebug;
19577
21393
  exports.simulateRoute = simulateRoute;
19578
21394
  exports.slotAcceptsModule = slotAcceptsModule;
21395
+ exports.socketTail = socketTail;
19579
21396
  exports.sourceLabelForOutput = sourceLabelForOutput;
19580
21397
  exports.splitCost = splitCost;
19581
21398
  exports.stackKey = stackKey;