@signaltree/core 3.0.2 → 3.1.0

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 (104) hide show
  1. package/package.json +59 -12
  2. package/src/enhancers/batching/index.d.ts +1 -0
  3. package/src/enhancers/batching/index.js +1 -0
  4. package/src/enhancers/batching/jest.config.d.ts +15 -0
  5. package/src/enhancers/batching/jest.config.js +21 -0
  6. package/src/enhancers/batching/lib/batching.d.ts +16 -0
  7. package/src/enhancers/batching/lib/batching.js +155 -0
  8. package/src/enhancers/batching/test-setup.d.ts +1 -0
  9. package/src/enhancers/batching/test-setup.js +5 -0
  10. package/src/enhancers/computed/index.d.ts +1 -0
  11. package/src/enhancers/computed/index.js +1 -0
  12. package/src/enhancers/computed/jest.config.d.ts +15 -0
  13. package/src/enhancers/computed/jest.config.js +21 -0
  14. package/src/enhancers/computed/lib/computed.d.ts +12 -0
  15. package/src/enhancers/computed/lib/computed.js +18 -0
  16. package/src/enhancers/devtools/index.d.ts +1 -0
  17. package/src/enhancers/devtools/index.js +1 -0
  18. package/src/enhancers/devtools/jest.config.d.ts +15 -0
  19. package/src/enhancers/devtools/jest.config.js +21 -0
  20. package/src/enhancers/devtools/lib/devtools.d.ts +77 -0
  21. package/src/enhancers/devtools/lib/devtools.js +278 -0
  22. package/src/enhancers/devtools/test-setup.d.ts +1 -0
  23. package/src/enhancers/devtools/test-setup.js +5 -0
  24. package/src/enhancers/entities/index.d.ts +1 -0
  25. package/src/enhancers/entities/index.js +1 -0
  26. package/src/enhancers/entities/jest.config.d.ts +15 -0
  27. package/src/enhancers/entities/jest.config.js +21 -0
  28. package/src/enhancers/entities/lib/entities.d.ts +22 -0
  29. package/src/enhancers/entities/lib/entities.js +110 -0
  30. package/src/enhancers/entities/test-setup.d.ts +1 -0
  31. package/src/enhancers/entities/test-setup.js +5 -0
  32. package/src/enhancers/index.d.ts +3 -0
  33. package/src/enhancers/index.js +84 -0
  34. package/src/enhancers/memoization/index.d.ts +1 -0
  35. package/src/enhancers/memoization/index.js +1 -0
  36. package/src/enhancers/memoization/jest.config.d.ts +15 -0
  37. package/src/enhancers/memoization/jest.config.js +21 -0
  38. package/src/enhancers/memoization/lib/memoization.d.ts +65 -0
  39. package/src/enhancers/memoization/lib/memoization.js +391 -0
  40. package/src/enhancers/memoization/test-setup.d.ts +1 -0
  41. package/src/enhancers/memoization/test-setup.js +5 -0
  42. package/src/enhancers/middleware/index.d.ts +2 -0
  43. package/src/enhancers/middleware/index.js +2 -0
  44. package/src/enhancers/middleware/jest.config.d.ts +15 -0
  45. package/src/enhancers/middleware/jest.config.js +21 -0
  46. package/src/enhancers/middleware/lib/async-helpers.d.ts +8 -0
  47. package/src/enhancers/middleware/lib/async-helpers.js +85 -0
  48. package/src/enhancers/middleware/lib/middleware.d.ts +11 -0
  49. package/src/enhancers/middleware/lib/middleware.js +179 -0
  50. package/src/enhancers/middleware/test-setup.d.ts +1 -0
  51. package/src/enhancers/middleware/test-setup.js +5 -0
  52. package/src/enhancers/presets/index.d.ts +1 -0
  53. package/src/enhancers/presets/index.js +1 -0
  54. package/src/enhancers/presets/jest.config.d.ts +15 -0
  55. package/src/enhancers/presets/jest.config.js +21 -0
  56. package/src/enhancers/presets/lib/presets.d.ts +11 -0
  57. package/src/enhancers/presets/lib/presets.js +102 -0
  58. package/src/enhancers/presets/test-setup.d.ts +1 -0
  59. package/src/enhancers/presets/test-setup.js +5 -0
  60. package/src/enhancers/serialization/constants.d.ts +14 -0
  61. package/src/enhancers/serialization/constants.js +14 -0
  62. package/src/enhancers/serialization/index.d.ts +2 -0
  63. package/src/enhancers/serialization/index.js +2 -0
  64. package/src/enhancers/serialization/jest.config.d.ts +15 -0
  65. package/src/enhancers/serialization/jest.config.js +21 -0
  66. package/src/enhancers/serialization/lib/serialization.d.ts +59 -0
  67. package/src/enhancers/serialization/lib/serialization.js +668 -0
  68. package/src/enhancers/serialization/test-setup.d.ts +1 -0
  69. package/src/enhancers/serialization/test-setup.js +5 -0
  70. package/src/enhancers/time-travel/index.d.ts +1 -0
  71. package/src/enhancers/time-travel/index.js +1 -0
  72. package/src/enhancers/time-travel/jest.config.d.ts +15 -0
  73. package/src/enhancers/time-travel/jest.config.js +21 -0
  74. package/src/enhancers/time-travel/lib/time-travel.d.ts +36 -0
  75. package/src/enhancers/time-travel/lib/time-travel.js +192 -0
  76. package/src/enhancers/time-travel/lib/utils.d.ts +1 -0
  77. package/src/enhancers/time-travel/lib/utils.js +1 -0
  78. package/src/enhancers/time-travel/test-setup.d.ts +1 -0
  79. package/src/enhancers/time-travel/test-setup.js +5 -0
  80. package/src/enhancers/types.d.ts +105 -0
  81. package/src/enhancers/types.js +0 -0
  82. package/src/index.d.ts +16 -0
  83. package/src/index.js +15 -0
  84. package/src/lib/constants.d.ts +42 -0
  85. package/src/lib/constants.js +61 -0
  86. package/src/lib/memory/memory-manager.d.ts +30 -0
  87. package/src/lib/memory/memory-manager.js +166 -0
  88. package/src/lib/performance/diff-engine.d.ts +33 -0
  89. package/src/lib/performance/diff-engine.js +156 -0
  90. package/src/lib/performance/path-index.d.ts +25 -0
  91. package/src/lib/performance/path-index.js +154 -0
  92. package/src/lib/performance/update-engine.d.ts +32 -0
  93. package/src/lib/performance/update-engine.js +193 -0
  94. package/src/lib/security/security-validator.d.ts +33 -0
  95. package/src/lib/security/security-validator.js +139 -0
  96. package/src/lib/signal-tree.d.ts +8 -0
  97. package/{fesm2022/signaltree-core.mjs → src/lib/signal-tree.js} +100 -573
  98. package/src/lib/types.d.ts +164 -0
  99. package/src/lib/types.js +9 -0
  100. package/src/lib/utils.d.ts +27 -0
  101. package/src/lib/utils.js +286 -0
  102. package/README.md +0 -1455
  103. package/fesm2022/signaltree-core.mjs.map +0 -1
  104. package/index.d.ts +0 -216
@@ -1 +0,0 @@
1
- {"version":3,"file":"signaltree-core.mjs","sources":["../tmp-esm2022/lib/constants.js","../tmp-esm2022/lib/types.js","../tmp-esm2022/lib/enhancers.js","../tmp-esm2022/lib/utils.js","../tmp-esm2022/lib/signal-tree.js"],"sourcesContent":["export const SIGNAL_TREE_CONSTANTS = {\n MAX_PATH_CACHE_SIZE: 1000,\n LAZY_THRESHOLD: 50,\n ESTIMATE_MAX_DEPTH: 3,\n ESTIMATE_SAMPLE_SIZE_ARRAY: 3,\n ESTIMATE_SAMPLE_SIZE_OBJECT: 5,\n DEFAULT_CACHE_SIZE: 100,\n DEFAULT_BATCH_SIZE: 10,\n};\nconst DEV_MESSAGES = {\n NULL_OR_UNDEFINED: 'null/undefined',\n CIRCULAR_REF: 'circular ref',\n UPDATER_INVALID: 'updater invalid',\n LAZY_FALLBACK: 'lazy fallback',\n SIGNAL_CREATION_FAILED: 'signal creation failed',\n UPDATE_PATH_NOT_FOUND: 'update path not found',\n UPDATE_FAILED: 'update failed',\n ROLLBACK_FAILED: 'rollback failed',\n CLEANUP_ERROR: 'cleanup error',\n PRESET_UNKNOWN: 'unknown preset',\n STRATEGY_SELECTION: 'strategy select',\n TREE_DESTROYED: 'destroyed',\n UPDATE_TRANSACTION: 'update tx',\n BATCH_NOT_ENABLED: 'batching disabled',\n MEMOIZE_NOT_ENABLED: 'memoize disabled',\n MIDDLEWARE_NOT_AVAILABLE: 'middleware missing',\n ENTITY_HELPERS_NOT_AVAILABLE: 'entity helpers missing',\n ASYNC_ACTIONS_NOT_AVAILABLE: 'async actions missing',\n TIME_TRAVEL_NOT_AVAILABLE: 'time travel missing',\n OPTIMIZE_NOT_AVAILABLE: 'optimize missing',\n CACHE_NOT_AVAILABLE: 'cache missing',\n PERFORMANCE_NOT_ENABLED: 'performance disabled',\n ENHANCER_ORDER_FAILED: 'enhancer order failed',\n ENHANCER_CYCLE_DETECTED: 'enhancer cycle',\n ENHANCER_REQUIREMENT_MISSING: 'enhancer req missing',\n ENHANCER_PROVIDES_MISSING: 'enhancer provides missing',\n ENHANCER_FAILED: 'enhancer failed',\n ENHANCER_NOT_FUNCTION: 'enhancer not function',\n EFFECT_NO_CONTEXT: 'no angular context',\n SUBSCRIBE_NO_CONTEXT: 'no angular context',\n};\nconst PROD_MESSAGES = (() => {\n const out = {};\n let i = 0;\n for (const k of Object.keys(DEV_MESSAGES)) {\n out[k] = String(i++);\n }\n return out;\n})();\nconst _isProdByEnv = Boolean(typeof globalThis === 'object' &&\n globalThis !== null &&\n 'process' in globalThis &&\n typeof globalThis.process === 'object' &&\n 'env' in globalThis.process &&\n globalThis.process.env.NODE_ENV === 'production');\nconst _isDev = typeof ngDevMode !== 'undefined' ? Boolean(ngDevMode) : !_isProdByEnv;\nexport const SIGNAL_TREE_MESSAGES = Object.freeze(_isDev\n ? DEV_MESSAGES\n : PROD_MESSAGES);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUVuQyxtQkFBbUIsRUFBRSxJQUFJO0lBR3pCLGNBQWMsRUFBRSxFQUFFO0lBQ2xCLGtCQUFrQixFQUFFLENBQUM7SUFDckIsMEJBQTBCLEVBQUUsQ0FBQztJQUM3QiwyQkFBMkIsRUFBRSxDQUFDO0lBRzlCLGtCQUFrQixFQUFFLEdBQUc7SUFDdkIsa0JBQWtCLEVBQUUsRUFBRTtDQUNkLENBQUM7QUFHWCxNQUFNLFlBQVksR0FBRztJQUNuQixpQkFBaUIsRUFBRSxnQkFBZ0I7SUFDbkMsWUFBWSxFQUFFLGNBQWM7SUFDNUIsZUFBZSxFQUFFLGlCQUFpQjtJQUNsQyxhQUFhLEVBQUUsZUFBZTtJQUM5QixzQkFBc0IsRUFBRSx3QkFBd0I7SUFDaEQscUJBQXFCLEVBQUUsdUJBQXVCO0lBQzlDLGFBQWEsRUFBRSxlQUFlO0lBQzlCLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsYUFBYSxFQUFFLGVBQWU7SUFDOUIsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxrQkFBa0IsRUFBRSxpQkFBaUI7SUFDckMsY0FBYyxFQUFFLFdBQVc7SUFDM0Isa0JBQWtCLEVBQUUsV0FBVztJQUMvQixpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsbUJBQW1CLEVBQUUsa0JBQWtCO0lBQ3ZDLHdCQUF3QixFQUFFLG9CQUFvQjtJQUM5Qyw0QkFBNEIsRUFBRSx3QkFBd0I7SUFDdEQsMkJBQTJCLEVBQUUsdUJBQXVCO0lBQ3BELHlCQUF5QixFQUFFLHFCQUFxQjtJQUNoRCxzQkFBc0IsRUFBRSxrQkFBa0I7SUFDMUMsbUJBQW1CLEVBQUUsZUFBZTtJQUNwQyx1QkFBdUIsRUFBRSxzQkFBc0I7SUFDL0MscUJBQXFCLEVBQUUsdUJBQXVCO0lBQzlDLHVCQUF1QixFQUFFLGdCQUFnQjtJQUN6Qyw0QkFBNEIsRUFBRSxzQkFBc0I7SUFDcEQseUJBQXlCLEVBQUUsMkJBQTJCO0lBQ3RELGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMscUJBQXFCLEVBQUUsdUJBQXVCO0lBQzlDLGlCQUFpQixFQUFFLG9CQUFvQjtJQUN2QyxvQkFBb0IsRUFBRSxvQkFBb0I7Q0FDbEMsQ0FBQztBQUlYLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQzFCLE1BQU0sR0FBRyxHQUFHLEVBQStDLENBQUM7SUFDNUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FFdkMsRUFBRSxDQUFDO1FBQ0YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFRTCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQzFCLE9BQU8sVUFBVSxLQUFLLFFBQVE7SUFDNUIsVUFBVSxLQUFLLElBQUk7SUFDbkIsU0FBUyxJQUFJLFVBQVU7SUFDdkIsT0FBUSxVQUFrQixDQUFDLE9BQU8sS0FBSyxRQUFRO0lBQy9DLEtBQUssSUFBSyxVQUFrQixDQUFDLE9BQU87SUFDbkMsVUFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQzVELENBQUM7QUFFRixNQUFNLE1BQU0sR0FDVixPQUFPLFNBQVMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7QUFFeEUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDL0MsTUFBTTtJQUNKLENBQUMsQ0FBRSxZQUFvQztJQUN2QyxDQUFDLENBQUUsYUFBcUMsQ0FDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2lnbmFsVHJlZSBDb25zdGFudHNcbiAqIENlbnRyYWxpemVkIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFuZCBtZXNzYWdlc1xuICovXG5cbmV4cG9ydCBjb25zdCBTSUdOQUxfVFJFRV9DT05TVEFOVFMgPSB7XG4gIC8qKiBDYWNoZSBjb25maWd1cmF0aW9uICovXG4gIE1BWF9QQVRIX0NBQ0hFX1NJWkU6IDEwMDAsXG5cbiAgLyoqIFBlcmZvcm1hbmNlIHRocmVzaG9sZHMgKi9cbiAgTEFaWV9USFJFU0hPTEQ6IDUwLFxuICBFU1RJTUFURV9NQVhfREVQVEg6IDMsXG4gIEVTVElNQVRFX1NBTVBMRV9TSVpFX0FSUkFZOiAzLFxuICBFU1RJTUFURV9TQU1QTEVfU0laRV9PQkpFQ1Q6IDUsXG5cbiAgLyoqIERlZmF1bHQgdmFsdWVzICovXG4gIERFRkFVTFRfQ0FDSEVfU0laRTogMTAwLFxuICBERUZBVUxUX0JBVENIX1NJWkU6IDEwLFxufSBhcyBjb25zdDtcblxuLy8gRnVsbCBkZXZlbG9wZXItZmFjaW5nIG1lc3NhZ2VzXG5jb25zdCBERVZfTUVTU0FHRVMgPSB7XG4gIE5VTExfT1JfVU5ERUZJTkVEOiAnbnVsbC91bmRlZmluZWQnLFxuICBDSVJDVUxBUl9SRUY6ICdjaXJjdWxhciByZWYnLFxuICBVUERBVEVSX0lOVkFMSUQ6ICd1cGRhdGVyIGludmFsaWQnLFxuICBMQVpZX0ZBTExCQUNLOiAnbGF6eSBmYWxsYmFjaycsXG4gIFNJR05BTF9DUkVBVElPTl9GQUlMRUQ6ICdzaWduYWwgY3JlYXRpb24gZmFpbGVkJyxcbiAgVVBEQVRFX1BBVEhfTk9UX0ZPVU5EOiAndXBkYXRlIHBhdGggbm90IGZvdW5kJyxcbiAgVVBEQVRFX0ZBSUxFRDogJ3VwZGF0ZSBmYWlsZWQnLFxuICBST0xMQkFDS19GQUlMRUQ6ICdyb2xsYmFjayBmYWlsZWQnLFxuICBDTEVBTlVQX0VSUk9SOiAnY2xlYW51cCBlcnJvcicsXG4gIFBSRVNFVF9VTktOT1dOOiAndW5rbm93biBwcmVzZXQnLFxuICBTVFJBVEVHWV9TRUxFQ1RJT046ICdzdHJhdGVneSBzZWxlY3QnLFxuICBUUkVFX0RFU1RST1lFRDogJ2Rlc3Ryb3llZCcsXG4gIFVQREFURV9UUkFOU0FDVElPTjogJ3VwZGF0ZSB0eCcsXG4gIEJBVENIX05PVF9FTkFCTEVEOiAnYmF0Y2hpbmcgZGlzYWJsZWQnLFxuICBNRU1PSVpFX05PVF9FTkFCTEVEOiAnbWVtb2l6ZSBkaXNhYmxlZCcsXG4gIE1JRERMRVdBUkVfTk9UX0FWQUlMQUJMRTogJ21pZGRsZXdhcmUgbWlzc2luZycsXG4gIEVOVElUWV9IRUxQRVJTX05PVF9BVkFJTEFCTEU6ICdlbnRpdHkgaGVscGVycyBtaXNzaW5nJyxcbiAgQVNZTkNfQUNUSU9OU19OT1RfQVZBSUxBQkxFOiAnYXN5bmMgYWN0aW9ucyBtaXNzaW5nJyxcbiAgVElNRV9UUkFWRUxfTk9UX0FWQUlMQUJMRTogJ3RpbWUgdHJhdmVsIG1pc3NpbmcnLFxuICBPUFRJTUlaRV9OT1RfQVZBSUxBQkxFOiAnb3B0aW1pemUgbWlzc2luZycsXG4gIENBQ0hFX05PVF9BVkFJTEFCTEU6ICdjYWNoZSBtaXNzaW5nJyxcbiAgUEVSRk9STUFOQ0VfTk9UX0VOQUJMRUQ6ICdwZXJmb3JtYW5jZSBkaXNhYmxlZCcsXG4gIEVOSEFOQ0VSX09SREVSX0ZBSUxFRDogJ2VuaGFuY2VyIG9yZGVyIGZhaWxlZCcsXG4gIEVOSEFOQ0VSX0NZQ0xFX0RFVEVDVEVEOiAnZW5oYW5jZXIgY3ljbGUnLFxuICBFTkhBTkNFUl9SRVFVSVJFTUVOVF9NSVNTSU5HOiAnZW5oYW5jZXIgcmVxIG1pc3NpbmcnLFxuICBFTkhBTkNFUl9QUk9WSURFU19NSVNTSU5HOiAnZW5oYW5jZXIgcHJvdmlkZXMgbWlzc2luZycsXG4gIEVOSEFOQ0VSX0ZBSUxFRDogJ2VuaGFuY2VyIGZhaWxlZCcsXG4gIEVOSEFOQ0VSX05PVF9GVU5DVElPTjogJ2VuaGFuY2VyIG5vdCBmdW5jdGlvbicsXG4gIEVGRkVDVF9OT19DT05URVhUOiAnbm8gYW5ndWxhciBjb250ZXh0JyxcbiAgU1VCU0NSSUJFX05PX0NPTlRFWFQ6ICdubyBhbmd1bGFyIGNvbnRleHQnLFxufSBhcyBjb25zdDtcblxuLy8gQ29tcGFjdCBwcm9kdWN0aW9uIG1lc3NhZ2VzICh2ZXJ5IHNob3J0IG51bWVyaWMgY29kZXMpIHRvIGtlZXAgYnVuZGxlcyBtaW5pbWFsLlxuLy8gV2UgbWFwIGVhY2gga2V5IHRvIGEgc2hvcnQgbnVtZXJpYyBzdHJpbmcgbGlrZSAnMCcsJzEnLCcyJyB0byBtaW5pbWl6ZSBieXRlcy5cbmNvbnN0IFBST0RfTUVTU0FHRVMgPSAoKCkgPT4ge1xuICBjb25zdCBvdXQgPSB7fSBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIERFVl9NRVNTQUdFUywgc3RyaW5nPjtcbiAgbGV0IGkgPSAwO1xuICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoREVWX01FU1NBR0VTKSBhcyBBcnJheTxcbiAgICBrZXlvZiB0eXBlb2YgREVWX01FU1NBR0VTXG4gID4pIHtcbiAgICBvdXRba10gPSBTdHJpbmcoaSsrKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufSkoKTtcblxuLy8gUHJlZmVyIEFuZ3VsYXIncyBjb21waWxlLXRpbWUgYG5nRGV2TW9kZWAgZmxhZy4gV2hlbiBgbmdEZXZNb2RlYCBpcyBmYWxzZVxuLy8gaW4gcHJvZHVjdGlvbiBidWlsZHMsIERFVl9NRVNTQUdFUyBjYW4gYmUgdHJlZS1zaGFrZW4uIEZhbGxiYWNrIHRvXG4vLyBwcm9jZXNzLmVudiB3aGVuIG5nRGV2TW9kZSBpcyBub3QgcHJlc2VudC5cbmRlY2xhcmUgY29uc3QgbmdEZXZNb2RlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuLy8gQXZvaWQgcmVmZXJlbmNpbmcgdGhlIGJhcmUgYHByb2Nlc3NgIGlkZW50aWZpZXIgdG8ga2VlcCBidWlsZHMgZnJlZSBvZiBOb2RlXG4vLyB0eXBlIGFzc3VtcHRpb25zOyB1c2UgZ2xvYmFsVGhpcyB0byBjaGVjayBlbnYgd2hlbiBhdmFpbGFibGUuXG5jb25zdCBfaXNQcm9kQnlFbnYgPSBCb29sZWFuKFxuICB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcgJiZcbiAgICBnbG9iYWxUaGlzICE9PSBudWxsICYmXG4gICAgJ3Byb2Nlc3MnIGluIGdsb2JhbFRoaXMgJiZcbiAgICB0eXBlb2YgKGdsb2JhbFRoaXMgYXMgYW55KS5wcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgICdlbnYnIGluIChnbG9iYWxUaGlzIGFzIGFueSkucHJvY2VzcyAmJlxuICAgIChnbG9iYWxUaGlzIGFzIGFueSkucHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xuKTtcblxuY29uc3QgX2lzRGV2ID1cbiAgdHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgPyBCb29sZWFuKG5nRGV2TW9kZSkgOiAhX2lzUHJvZEJ5RW52O1xuXG5leHBvcnQgY29uc3QgU0lHTkFMX1RSRUVfTUVTU0FHRVMgPSBPYmplY3QuZnJlZXplKFxuICBfaXNEZXZcbiAgICA/IChERVZfTUVTU0FHRVMgYXMgdHlwZW9mIERFVl9NRVNTQUdFUylcbiAgICA6IChQUk9EX01FU1NBR0VTIGFzIHR5cGVvZiBERVZfTUVTU0FHRVMpXG4pO1xuIl19","export const ENHANCER_META = Symbol('signaltree:enhancer:meta');\nexport function isSignalTree(value) {\n return (value !== null &&\n typeof value === 'function' &&\n 'state' in value &&\n '$' in value &&\n 'with' in value &&\n 'destroy' in value);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEtBLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQXVQaEUsTUFBTSxVQUFVLFlBQVksQ0FBSSxLQUFjO0lBQzVDLE9BQU8sQ0FDTCxLQUFLLEtBQUssSUFBSTtRQUNkLE9BQU8sS0FBSyxLQUFLLFVBQVU7UUFDM0IsT0FBTyxJQUFJLEtBQUs7UUFDaEIsR0FBRyxJQUFJLEtBQUs7UUFDWixNQUFNLElBQUksS0FBSztRQUNmLFNBQVMsSUFBSSxLQUFLLENBQ25CLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFNpZ25hbFRyZWUgQ29yZSBUeXBlcyB2Mi4wLjJcbiAqIE1JVCBMaWNlbnNlIC0gQ29weXJpZ2h0IChjKSAyMDI1IEpvbmF0aGFuIEQgQm9yZ2lhXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPUkUgVFlQRSBERUZJTklUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBIZWxwZXIgdHlwZSBwcmV2ZW50aW5nIGFtYmlndWl0eSB3aGVuIGEgbm9kZSBpdHNlbGYgc3RvcmVzIGEgZnVuY3Rpb24gdmFsdWUuXG4gKiBJbiB0aGF0IGNhc2UgZGlyZWN0IGNhbGxhYmxlIHNldChmbikgd291bGQgY2xhc2ggd2l0aCB0aGUgdXBkYXRlKGZuKSBzaWduYXR1cmUuXG4gKiBXZSBleGNsdWRlIHJhdyBmdW5jdGlvbiB2YWx1ZXMgZnJvbSB0aGUgZGlyZWN0LXNldCBvdmVybG9hZCBzbyB1c2VycyBtdXN0IHVzZSAuc2V0KGZuKVxuICogKGFmdGVyIHRyYW5zZm9ybSkgaW5zdGVhZCBvZiBjYWxsYWJsZSBmb3JtLCB3aGlsZSB1cGRhdGVyIGZvcm0gc3RpbGwgd29ya3MuXG4gKi9cbmV4cG9ydCB0eXBlIE5vdEZuPFQ+ID0gVCBleHRlbmRzICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24gPyBuZXZlciA6IFQ7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUWVBFU0NSSVBUIEFVR01FTlRBVElPTlMgRk9SIERYIFNVR0FSXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEF1Z21lbnQgQW5ndWxhcidzIFdyaXRhYmxlU2lnbmFsIHRvIHN1cHBvcnQgY2FsbGFibGUgc3ludGF4IGZvciBEWC5cbiAqIFRoaXMgaXMgcHVyZWx5IFR5cGVTY3JpcHQtbGV2ZWwgLSB0aGUgdHJhbnNmb3JtIGNvbnZlcnRzIHRoZXNlIGNhbGxzIHRvIC5zZXQvLnVwZGF0ZVxuICovXG5kZWNsYXJlIG1vZHVsZSAnQGFuZ3VsYXIvY29yZScge1xuICBpbnRlcmZhY2UgV3JpdGFibGVTaWduYWw8VD4ge1xuICAgICh2YWx1ZTogTm90Rm48VD4pOiB2b2lkO1xuICAgICh1cGRhdGVyOiAoY3VycmVudDogVCkgPT4gVCk6IHZvaWQ7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPUkUgVFlQRSBERUZJTklUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQcmltaXRpdmUgdHlwZXMgZm9yIHR5cGUgY2hlY2tpbmdcbiAqL1xuZXhwb3J0IHR5cGUgUHJpbWl0aXZlID1cbiAgfCBzdHJpbmdcbiAgfCBudW1iZXJcbiAgfCBib29sZWFuXG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZFxuICB8IGJpZ2ludFxuICB8IHN5bWJvbDtcblxuLyoqXG4gKiBCdWlsdC1pbiBvYmplY3QgdHlwZXMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBwcmltaXRpdmUgdmFsdWVzXG4gKiAoS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHJ1bnRpbWUgaXNCdWlsdEluT2JqZWN0KVxuICovXG5leHBvcnQgdHlwZSBCdWlsdEluT2JqZWN0ID1cbiAgLy8gQ29yZSBKU1xuICB8IERhdGVcbiAgfCBSZWdFeHBcbiAgfCAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bilcbiAgfCBNYXA8dW5rbm93biwgdW5rbm93bj5cbiAgfCBTZXQ8dW5rbm93bj5cbiAgfCBXZWFrTWFwPG9iamVjdCwgdW5rbm93bj5cbiAgfCBXZWFrU2V0PG9iamVjdD5cbiAgfCBBcnJheUJ1ZmZlclxuICB8IERhdGFWaWV3XG4gIHwgRXJyb3JcbiAgfCBQcm9taXNlPHVua25vd24+XG4gIC8vIFR5cGVkIEFycmF5c1xuICB8IFVpbnQxNkFycmF5XG4gIHwgSW50MzJBcnJheVxuICB8IFVpbnQzMkFycmF5XG4gIHwgRmxvYXQzMkFycmF5XG4gIHwgRmxvYXQ2NEFycmF5XG4gIHwgQmlnSW50NjRBcnJheVxuICB8IEJpZ1VpbnQ2NEFycmF5XG4gIC8vIFdlYiBBUElzXG4gIHwgVVJMXG4gIHwgVVJMU2VhcmNoUGFyYW1zXG4gIHwgRm9ybURhdGFcbiAgfCBCbG9iXG4gIHwgRmlsZVxuICB8IEhlYWRlcnNcbiAgfCBSZXF1ZXN0XG4gIHwgUmVzcG9uc2VcbiAgfCBBYm9ydENvbnRyb2xsZXJcbiAgfCBBYm9ydFNpZ25hbDtcblxuLyoqXG4gKiBIZWxwZXIgdHlwZSB0byB1bndyYXAgc2lnbmFscyBhbmQgcmVtb3ZlIGFueSBzaWduYWwtc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgdHlwZSBVbndyYXA8VD4gPSBUIGV4dGVuZHMgV3JpdGFibGVTaWduYWw8aW5mZXIgVT5cbiAgPyBVXG4gIDogVCBleHRlbmRzIFNpZ25hbDxpbmZlciBVPlxuICA/IFVcbiAgOiBUIGV4dGVuZHMgQnVpbHRJbk9iamVjdFxuICA/IFQgLy8gUHJlc2VydmUgYnVpbHQtaW4gb2JqZWN0cyBleGFjdGx5IGFzIHRoZXkgYXJlXG4gIDogVCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXVxuICA/IFQgLy8gUHJlc2VydmUgYXJyYXlzIGV4YWN0bHkgYXMgdGhleSBhcmVcbiAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gID8geyBbSyBpbiBrZXlvZiBUXTogVW53cmFwPFRbS10+IH1cbiAgOiBUO1xuXG4vKipcbiAqIE5vZGUgYWNjZXNzb3IgaW50ZXJmYWNlIC0gdW5pZmllZCBBUEkgZm9yIGdldC9zZXQvdXBkYXRlIHZpYSBmdW5jdGlvbiBjYWxscy5cbiAqIE92ZXJsb2FkczpcbiAqICAoKTogVCAgICAgICAgICAgICAgICAgICAgIC0gZ2V0dGVyXG4gKiAgKHZhbHVlOiBOb3RGbjxUPik6IHZvaWQgICAtIGRpcmVjdCBzZXQgKGJsb2NrZWQgd2hlbiBUIGlzIGl0c2VsZiBhIGZ1bmN0aW9uKVxuICogICh1cGRhdGVyOiAoVCk9PlQpOiB2b2lkICAgLSBmdW5jdGlvbmFsIHVwZGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVBY2Nlc3NvcjxUPiB7XG4gICgpOiBUO1xuICAodmFsdWU6IFQpOiB2b2lkO1xuICAodXBkYXRlcjogKGN1cnJlbnQ6IFQpID0+IFQpOiB2b2lkO1xufVxuXG4vKipcbiAqIFNpZ25hbGlmaWVkIG5vZGUgd2l0aCBjYWxsYWJsZSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IHR5cGUgQWNjZXNzaWJsZU5vZGU8VD4gPSBOb2RlQWNjZXNzb3I8VD4gJiBUcmVlTm9kZTxUPjtcblxuLyoqXG4gKiBEZWVwIHNpZ25hbGlmaWNhdGlvbiB0eXBlIC0gY29udmVydHMgb2JqZWN0IHByb3BlcnRpZXMgdG8gc2lnbmFscyByZWN1cnNpdmVseVxuICogLSBMZWF2ZXMgKHByaW1pdGl2ZXMsIGFycmF5cywgZnVuY3Rpb25zLCBidWlsdC1pbnMpOiBSYXcgQW5ndWxhciBXcml0YWJsZVNpZ25hbDxUPlxuICogLSBOZXN0ZWQgb2JqZWN0czogTm9kZUFjY2Vzc29yPFQ+IChjYWxsYWJsZSkgKyByZWN1cnNpdmUgVHJlZU5vZGU8VD4gcHJvcGVydGllc1xuICovXG4vLyBXcml0YWJsZVNpZ25hbCB3aXRoIGNhbGxhYmxlIHNldC91cGRhdGUgb3ZlcmxvYWRzIChwdXJlbHkgdHlwZS1sZXZlbCBhdWdtZW50YXRpb24pXG5leHBvcnQgdHlwZSBDYWxsYWJsZVdyaXRhYmxlU2lnbmFsPFQ+ID0gV3JpdGFibGVTaWduYWw8VD4gJiB7XG4gICh2YWx1ZTogTm90Rm48VD4pOiB2b2lkO1xuICAodXBkYXRlcjogKGN1cnJlbnQ6IFQpID0+IFQpOiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgVHJlZU5vZGU8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdXG4gICAgPyBDYWxsYWJsZVdyaXRhYmxlU2lnbmFsPFRbS10+IC8vIEFycmF5cyBnZXQgY2FsbGFibGUgb3ZlcmxvYWRzXG4gICAgOiBUW0tdIGV4dGVuZHMgb2JqZWN0XG4gICAgPyBUW0tdIGV4dGVuZHMgU2lnbmFsPHVua25vd24+XG4gICAgICA/IFRbS11cbiAgICAgIDogVFtLXSBleHRlbmRzIEJ1aWx0SW5PYmplY3RcbiAgICAgID8gQ2FsbGFibGVXcml0YWJsZVNpZ25hbDxUW0tdPiAvLyBCdWlsdC1pbnMgYXMgY2FsbGFibGUgd3JpdGFibGUgc2lnbmFsc1xuICAgICAgOiBUW0tdIGV4dGVuZHMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93blxuICAgICAgPyBDYWxsYWJsZVdyaXRhYmxlU2lnbmFsPFRbS10+IC8vIEZ1bmN0aW9uIGxlYXZlcyBhcyBjYWxsYWJsZSB3cml0YWJsZSBzaWduYWxzXG4gICAgICA6IEFjY2Vzc2libGVOb2RlPFRbS10+IC8vIE5lc3RlZCBvYmplY3RzXG4gICAgOiBDYWxsYWJsZVdyaXRhYmxlU2lnbmFsPFRbS10+OyAvLyBQcmltaXRpdmVzXG59O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byByZW1vdmUgc2lnbmFsLXNwZWNpZmljIG1ldGhvZHMgZnJvbSBhIHR5cGVcbiAqIFVzZWQgYnkgY2xlYW5VbndyYXAgdG8gcmV0dXJuIHRoZSBvcmlnaW5hbCB0eXBlIHNoYXBlXG4gKi9cbmV4cG9ydCB0eXBlIFJlbW92ZVNpZ25hbE1ldGhvZHM8VD4gPSBUIGV4dGVuZHMgaW5mZXIgVSA/IFUgOiBuZXZlcjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVOSEFOQ0VSIFNZU1RFTSBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEVuaGFuY2VyIG1ldGFkYXRhIGZvciBvcHRpb25hbCBhdXRvLW9yZGVyaW5nICovXG5leHBvcnQgaW50ZXJmYWNlIEVuaGFuY2VyTWV0YSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHJlcXVpcmVzPzogc3RyaW5nW107XG4gIHByb3ZpZGVzPzogc3RyaW5nW107XG59XG5cbi8qKiBFbmhhbmNlciBmdW5jdGlvbiB0aGF0IG1heSBjYXJyeSBtZXRhZGF0YSAqL1xuZXhwb3J0IHR5cGUgRW5oYW5jZXI8SW5wdXQgPSB1bmtub3duLCBPdXRwdXQgPSB1bmtub3duPiA9IChcbiAgaW5wdXQ6IElucHV0XG4pID0+IE91dHB1dDtcblxuLyoqIEVuaGFuY2VyIHdpdGggb3B0aW9uYWwgbWV0YWRhdGEgYXR0YWNoZWQgKi9cbmV4cG9ydCB0eXBlIEVuaGFuY2VyV2l0aE1ldGE8SW5wdXQgPSB1bmtub3duLCBPdXRwdXQgPSB1bmtub3duPiA9IEVuaGFuY2VyPFxuICBJbnB1dCxcbiAgT3V0cHV0XG4+ICYgeyBtZXRhZGF0YT86IEVuaGFuY2VyTWV0YSB9O1xuXG4vKiogU3ltYm9sIGtleSBmb3IgZW5oYW5jZXIgbWV0YWRhdGEgKi9cbmV4cG9ydCBjb25zdCBFTkhBTkNFUl9NRVRBID0gU3ltYm9sKCdzaWduYWx0cmVlOmVuaGFuY2VyOm1ldGEnKTtcblxuLyoqIEluZmVyIHRoZSBmaW5hbCByZXN1bHQgdHlwZSBhZnRlciBhcHBseWluZyBlbmhhbmNlcnMgKi9cbmV4cG9ydCB0eXBlIENoYWluUmVzdWx0PFxuICBTdGFydCxcbiAgRSBleHRlbmRzIEFycmF5PEVuaGFuY2VyV2l0aE1ldGE8dW5rbm93biwgdW5rbm93bj4+XG4+ID0gRSBleHRlbmRzIFtpbmZlciBILCAuLi5pbmZlciBSXVxuICA/IC8vIElmIGVuaGFuY2VyIGFjY2VwdHMgU2lnbmFsVHJlZTxhbnk+IChub24tZ2VuZXJpYyBlbmhhbmNlciksIHRyZWF0IGl0IGFzIGNvbXBhdGlibGVcbiAgICBIIGV4dGVuZHMgRW5oYW5jZXJXaXRoTWV0YTxTaWduYWxUcmVlPGFueT4sIGluZmVyIE8+XG4gICAgPyBSIGV4dGVuZHMgQXJyYXk8RW5oYW5jZXJXaXRoTWV0YTx1bmtub3duLCB1bmtub3duPj5cbiAgICAgID8gQ2hhaW5SZXN1bHQ8TywgUj5cbiAgICAgIDogT1xuICAgIDogSCBleHRlbmRzIEVuaGFuY2VyV2l0aE1ldGE8aW5mZXIgSSwgaW5mZXIgTz5cbiAgICA/IFN0YXJ0IGV4dGVuZHMgSVxuICAgICAgPyBSIGV4dGVuZHMgQXJyYXk8RW5oYW5jZXJXaXRoTWV0YTx1bmtub3duLCB1bmtub3duPj5cbiAgICAgICAgPyBDaGFpblJlc3VsdDxPLCBSPlxuICAgICAgICA6IE9cbiAgICAgIDogYW55XG4gICAgOiB1bmtub3duXG4gIDogU3RhcnQ7XG5cbi8qKlxuICogT3ZlcmxvYWQgc2V0IGZvciAud2l0aCgpIG1ldGhvZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhNZXRob2Q8VD4ge1xuICAoKTogU2lnbmFsVHJlZTxUPjtcbiAgPE8xPihlMTogKGlucHV0OiBTaWduYWxUcmVlPFQ+KSA9PiBPMSk6IE8xO1xuICAvLyBBY2NlcHQgYSBnZW5lcmljIGVuaGFuY2VyIGZ1bmN0aW9uIGxpa2UgYGZ1bmN0aW9uIDxVPih0cmVlOiBTaWduYWxUcmVlPFU+KTogUmBcbiAgPE8xLCBPMj4oZTE6IChpbnB1dDogU2lnbmFsVHJlZTxUPikgPT4gTzEsIGUyOiAoaW5wdXQ6IE8xKSA9PiBPMik6IE8yO1xuICA8TzEsIE8yLCBPMz4oXG4gICAgZTE6IChpbnB1dDogU2lnbmFsVHJlZTxUPikgPT4gTzEsXG4gICAgZTI6IChpbnB1dDogTzEpID0+IE8yLFxuICAgIGUzOiAoaW5wdXQ6IE8yKSA9PiBPM1xuICApOiBPMztcbiAgPE8xLCBPMiwgTzMsIE80PihcbiAgICBlMTogKGlucHV0OiBTaWduYWxUcmVlPFQ+KSA9PiBPMSxcbiAgICBlMjogKGlucHV0OiBPMSkgPT4gTzIsXG4gICAgZTM6IChpbnB1dDogTzIpID0+IE8zLFxuICAgIGU0OiAoaW5wdXQ6IE8zKSA9PiBPNFxuICApOiBPNDtcbiAgLy8gT3ZlcmxvYWRzIGZvciBFbmhhbmNlcldpdGhNZXRhIGZvcm0gc28gZW5oYW5jZXJzIGV4cG9ydGVkIHdpdGggbWV0YWRhdGFcbiAgPE8xPihlMTogRW5oYW5jZXJXaXRoTWV0YTxTaWduYWxUcmVlPFQ+LCBPMT4pOiBPMTtcbiAgLy8gQWNjZXB0IGVuaGFuY2VycyB0aGF0IG9wZXJhdGUgb24gU2lnbmFsVHJlZTxhbnk+IChoZWxwcyBub24tZ2VuZXJpYyBlbmhhbmNlcnMpXG4gIDxPMT4oZTE6IEVuaGFuY2VyV2l0aE1ldGE8U2lnbmFsVHJlZTxhbnk+LCBPMT4pOiBPMTtcbiAgLy8gR2VuZXJpYyBvdmVybG9hZCB0byBhY2NlcHQgRW5oYW5jZXJXaXRoTWV0YSBzdGFydGluZyBmcm9tIFN0YXJ0IHR5cGVcbiAgPE8xPihlMTogRW5oYW5jZXJXaXRoTWV0YTxTaWduYWxUcmVlPFQ+LCBPMT4pOiBPMTtcbiAgPE8xPihcbiAgICBlMTogRW5oYW5jZXJXaXRoTWV0YTxTaWduYWxUcmVlPGFueT4sIE8xPixcbiAgICBlMjogRW5oYW5jZXJXaXRoTWV0YTxPMSwgdW5rbm93bj5cbiAgKTogdW5rbm93bjtcbiAgPE8xLCBPMj4oXG4gICAgZTE6IEVuaGFuY2VyV2l0aE1ldGE8U2lnbmFsVHJlZTxUPiwgTzE+LFxuICAgIGUyOiBFbmhhbmNlcldpdGhNZXRhPE8xLCBPMj5cbiAgKTogTzI7XG4gIDxPMSwgTzI+KFxuICAgIGUxOiBFbmhhbmNlcldpdGhNZXRhPFNpZ25hbFRyZWU8YW55PiwgTzE+LFxuICAgIGUyOiBFbmhhbmNlcldpdGhNZXRhPE8xLCBPMj5cbiAgKTogTzI7XG4gIDxPMSwgTzIsIE8zPihcbiAgICBlMTogRW5oYW5jZXJXaXRoTWV0YTxTaWduYWxUcmVlPFQ+LCBPMT4sXG4gICAgZTI6IEVuaGFuY2VyV2l0aE1ldGE8TzEsIE8yPixcbiAgICBlMzogRW5oYW5jZXJXaXRoTWV0YTxPMiwgTzM+XG4gICk6IE8zO1xuICA8TzEsIE8yLCBPMz4oXG4gICAgZTE6IEVuaGFuY2VyV2l0aE1ldGE8U2lnbmFsVHJlZTxhbnk+LCBPMT4sXG4gICAgZTI6IEVuaGFuY2VyV2l0aE1ldGE8TzEsIE8yPixcbiAgICBlMzogRW5oYW5jZXJXaXRoTWV0YTxPMiwgTzM+XG4gICk6IE8zO1xuICA8TzEsIE8yLCBPMywgTzQ+KFxuICAgIGUxOiBFbmhhbmNlcldpdGhNZXRhPFNpZ25hbFRyZWU8VD4sIE8xPixcbiAgICBlMjogRW5oYW5jZXJXaXRoTWV0YTxPMSwgTzI+LFxuICAgIGUzOiBFbmhhbmNlcldpdGhNZXRhPE8yLCBPMz4sXG4gICAgZTQ6IEVuaGFuY2VyV2l0aE1ldGE8TzMsIE80PlxuICApOiBPNDtcbiAgPE8xLCBPMiwgTzMsIE80PihcbiAgICBlMTogRW5oYW5jZXJXaXRoTWV0YTxTaWduYWxUcmVlPGFueT4sIE8xPixcbiAgICBlMjogRW5oYW5jZXJXaXRoTWV0YTxPMSwgTzI+LFxuICAgIGUzOiBFbmhhbmNlcldpdGhNZXRhPE8yLCBPMz4sXG4gICAgZTQ6IEVuaGFuY2VyV2l0aE1ldGE8TzMsIE80PlxuICApOiBPNDtcbiAgPE8xLCBPMj4oXG4gICAgZTE6IEVuaGFuY2VyV2l0aE1ldGE8U2lnbmFsVHJlZTxUPiwgTzE+LFxuICAgIGUyOiBFbmhhbmNlcldpdGhNZXRhPE8xLCBPMj5cbiAgKTogTzI7XG4gIDxPMSwgTzIsIE8zPihcbiAgICBlMTogRW5oYW5jZXJXaXRoTWV0YTxTaWduYWxUcmVlPFQ+LCBPMT4sXG4gICAgZTI6IEVuaGFuY2VyV2l0aE1ldGE8TzEsIE8yPixcbiAgICBlMzogRW5oYW5jZXJXaXRoTWV0YTxPMiwgTzM+XG4gICk6IE8zO1xuICA8TzEsIE8yLCBPMywgTzQ+KFxuICAgIGUxOiBFbmhhbmNlcldpdGhNZXRhPFNpZ25hbFRyZWU8VD4sIE8xPixcbiAgICBlMjogRW5oYW5jZXJXaXRoTWV0YTxPMSwgTzI+LFxuICAgIGUzOiBFbmhhbmNlcldpdGhNZXRhPE8yLCBPMz4sXG4gICAgZTQ6IEVuaGFuY2VyV2l0aE1ldGE8TzMsIE80PlxuICApOiBPNDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNJR05BTCBUUkVFIElOVEVSRkFDRVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBNYWluIFNpZ25hbFRyZWUgdHlwZSB3aXRoIGFsbCBtZXRob2RzXG4gKi9cbmV4cG9ydCB0eXBlIFNpZ25hbFRyZWU8VD4gPSBOb2RlQWNjZXNzb3I8VD4gJiB7XG4gIC8qKiBUaGUgcmVhY3RpdmUgc3RhdGUgb2JqZWN0ICovXG4gIHN0YXRlOiBUcmVlTm9kZTxUPjtcblxuICAvKiogU2hvcnRoYW5kIGFsaWFzIGZvciBzdGF0ZSAqL1xuICAkOiBUcmVlTm9kZTxUPjtcblxuICAvKiogQ29yZSBtZXRob2RzICovXG4gIHdpdGg6IFdpdGhNZXRob2Q8VD47XG4gIGRlc3Ryb3koKTogdm9pZDtcblxuICAvKiogRW5oYW5jZWQgZnVuY3Rpb25hbGl0eSAqL1xuICBlZmZlY3QoZm46ICh0cmVlOiBUKSA9PiB2b2lkKTogdm9pZDtcbiAgc3Vic2NyaWJlKGZuOiAodHJlZTogVCkgPT4gdm9pZCk6ICgpID0+IHZvaWQ7XG4gIGJhdGNoKHVwZGF0ZXI6ICh0cmVlOiBUKSA9PiB2b2lkKTogdm9pZDtcbiAgYmF0Y2hVcGRhdGUodXBkYXRlcjogKGN1cnJlbnQ6IFQpID0+IFBhcnRpYWw8VD4pOiB2b2lkO1xuICBtZW1vaXplPFI+KGZuOiAodHJlZTogVCkgPT4gUiwgY2FjaGVLZXk/OiBzdHJpbmcpOiBTaWduYWw8Uj47XG4gIC8vIE1lbW9pemF0aW9uIGhlbHBlcnMgKHN0dWJzIGluIGNvcmU7IHJlYWwgaW1wbCBieSB3aXRoTWVtb2l6YXRpb24pXG4gIG1lbW9pemVkVXBkYXRlKHVwZGF0ZXI6IChjdXJyZW50OiBUKSA9PiBQYXJ0aWFsPFQ+LCBjYWNoZUtleT86IHN0cmluZyk6IHZvaWQ7XG4gIGNsZWFyTWVtb0NhY2hlKGtleT86IHN0cmluZyk6IHZvaWQ7XG4gIGdldENhY2hlU3RhdHMoKToge1xuICAgIHNpemU6IG51bWJlcjtcbiAgICBoaXRSYXRlOiBudW1iZXI7XG4gICAgdG90YWxIaXRzOiBudW1iZXI7XG4gICAgdG90YWxNaXNzZXM6IG51bWJlcjtcbiAgICBrZXlzOiBzdHJpbmdbXTtcbiAgfTtcblxuICAvKiogUGVyZm9ybWFuY2UgbWV0aG9kcyAqL1xuICBvcHRpbWl6ZSgpOiB2b2lkO1xuICBjbGVhckNhY2hlKCk6IHZvaWQ7XG4gIGludmFsaWRhdGVQYXR0ZXJuKHBhdHRlcm46IHN0cmluZyk6IG51bWJlcjtcbiAgZ2V0TWV0cmljcygpOiBQZXJmb3JtYW5jZU1ldHJpY3M7XG5cbiAgLyoqIE1pZGRsZXdhcmUgKi9cbiAgYWRkVGFwKG1pZGRsZXdhcmU6IE1pZGRsZXdhcmU8VD4pOiB2b2lkO1xuICByZW1vdmVUYXAoaWQ6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqIEVudGl0eSBoZWxwZXJzICovXG4gIGVudGl0aWVzPEUgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfCBudW1iZXIgfT4oXG4gICAgZW50aXR5S2V5Pzoga2V5b2YgVFxuICApOiBFbnRpdHlIZWxwZXJzPEU+O1xuXG4gIC8qKiBBc3luYyBhY3Rpb25zICovXG4gIGFzeW5jQWN0aW9uPFRJbnB1dCwgVFJlc3VsdD4oXG4gICAgb3BlcmF0aW9uOiAoaW5wdXQ6IFRJbnB1dCkgPT4gUHJvbWlzZTxUUmVzdWx0PixcbiAgICBjb25maWc/OiBBc3luY0FjdGlvbkNvbmZpZzxULCBUUmVzdWx0PlxuICApOiBBc3luY0FjdGlvbjxUSW5wdXQsIFRSZXN1bHQ+O1xuXG4gIC8qKiBUaW1lIHRyYXZlbCAqL1xuICB1bmRvKCk6IHZvaWQ7XG4gIHJlZG8oKTogdm9pZDtcbiAgZ2V0SGlzdG9yeSgpOiBUaW1lVHJhdmVsRW50cnk8VD5bXTtcbiAgcmVzZXRIaXN0b3J5KCk6IHZvaWQ7XG4gIC8vIE9wdGlvbmFsIGNvbnZlbmllbmNlIGhlbHBlcnMgcHJvdmlkZWQgYnkgdGltZS10cmF2ZWwgZW5oYW5jZXJcbiAganVtcFRvPzogKGluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG4gIGNhblVuZG8/OiAoKSA9PiBib29sZWFuO1xuICBjYW5SZWRvPzogKCkgPT4gYm9vbGVhbjtcbiAgZ2V0Q3VycmVudEluZGV4PzogKCkgPT4gbnVtYmVyO1xuXG4gIC8qKiBJbmRleCBzaWduYXR1cmUgZm9yIGVuaGFuY2VyIGNvbXBhdGliaWxpdHkgKi9cbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05GSUdVUkFUSU9OIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBUcmVlUHJlc2V0ID0gJ2Jhc2ljJyB8ICdwZXJmb3JtYW5jZScgfCAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVDb25maWcge1xuICBiYXRjaFVwZGF0ZXM/OiBib29sZWFuO1xuICB1c2VNZW1vaXphdGlvbj86IGJvb2xlYW47XG4gIGVuYWJsZVRpbWVUcmF2ZWw/OiBib29sZWFuO1xuICB1c2VMYXp5U2lnbmFscz86IGJvb2xlYW47XG4gIHVzZVNoYWxsb3dDb21wYXJpc29uPzogYm9vbGVhbjtcbiAgbWF4Q2FjaGVTaXplPzogbnVtYmVyO1xuICB0cmFja1BlcmZvcm1hbmNlPzogYm9vbGVhbjtcbiAgdHJlZU5hbWU/OiBzdHJpbmc7XG4gIGVuYWJsZURldlRvb2xzPzogYm9vbGVhbjtcbiAgZGVidWdNb2RlPzogYm9vbGVhbjtcbiAgdXNlU3RydWN0dXJhbFNoYXJpbmc/OiBib29sZWFuO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRkVBVFVSRSBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBNaWRkbGV3YXJlPFQ+IHtcbiAgaWQ6IHN0cmluZztcbiAgYmVmb3JlPzogKGFjdGlvbjogc3RyaW5nLCBwYXlsb2FkOiB1bmtub3duLCBzdGF0ZTogVCkgPT4gYm9vbGVhbjtcbiAgYWZ0ZXI/OiAoYWN0aW9uOiBzdHJpbmcsIHBheWxvYWQ6IHVua25vd24sIHN0YXRlOiBULCBuZXdTdGF0ZTogVCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJmb3JtYW5jZU1ldHJpY3Mge1xuICB1cGRhdGVzOiBudW1iZXI7XG4gIGNvbXB1dGF0aW9uczogbnVtYmVyO1xuICBjYWNoZUhpdHM6IG51bWJlcjtcbiAgY2FjaGVNaXNzZXM6IG51bWJlcjtcbiAgYXZlcmFnZVVwZGF0ZVRpbWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlIZWxwZXJzPEUgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfCBudW1iZXIgfT4ge1xuICBhZGQoZW50aXR5OiBFKTogdm9pZDtcbiAgdXBkYXRlKGlkOiBFWydpZCddLCB1cGRhdGVzOiBQYXJ0aWFsPEU+KTogdm9pZDtcbiAgcmVtb3ZlKGlkOiBFWydpZCddKTogdm9pZDtcbiAgdXBzZXJ0KGVudGl0eTogRSk6IHZvaWQ7XG4gIHNlbGVjdEJ5SWQoaWQ6IEVbJ2lkJ10pOiBTaWduYWw8RSB8IHVuZGVmaW5lZD47XG4gIHNlbGVjdEJ5KHByZWRpY2F0ZTogKGVudGl0eTogRSkgPT4gYm9vbGVhbik6IFNpZ25hbDxFW10+O1xuICBzZWxlY3RJZHMoKTogU2lnbmFsPEFycmF5PHN0cmluZyB8IG51bWJlcj4+O1xuICBzZWxlY3RBbGwoKTogU2lnbmFsPEVbXT47XG4gIHNlbGVjdFRvdGFsKCk6IFNpZ25hbDxudW1iZXI+O1xuICBjbGVhcigpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jQWN0aW9uQ29uZmlnPFQsIFRSZXN1bHQ+IHtcbiAgb25TdGFydD86IChzdGF0ZTogVCkgPT4gUGFydGlhbDxUPjtcbiAgb25TdWNjZXNzPzogKHJlc3VsdDogVFJlc3VsdCwgc3RhdGU6IFQpID0+IFBhcnRpYWw8VD47XG4gIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCBzdGF0ZTogVCkgPT4gUGFydGlhbDxUPjtcbiAgb25Db21wbGV0ZT86IChzdGF0ZTogVCkgPT4gUGFydGlhbDxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3luY0FjdGlvbjxUSW5wdXQsIFRSZXN1bHQ+IHtcbiAgZXhlY3V0ZShpbnB1dDogVElucHV0KTogUHJvbWlzZTxUUmVzdWx0PjtcbiAgcGVuZGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICBlcnJvcjogU2lnbmFsPEVycm9yIHwgbnVsbD47XG4gIHJlc3VsdDogU2lnbmFsPFRSZXN1bHQgfCBudWxsPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaW1lVHJhdmVsRW50cnk8VD4ge1xuICBhY3Rpb246IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHN0YXRlOiBUO1xuICBwYXlsb2FkPzogdW5rbm93bjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEUgR1VBUkRTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIFNpZ25hbFRyZWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2lnbmFsVHJlZTxUPih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFNpZ25hbFRyZWU8VD4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmIC8vIEl0J3MgYSBjYWxsYWJsZSBmdW5jdGlvblxuICAgICdzdGF0ZScgaW4gdmFsdWUgJiZcbiAgICAnJCcgaW4gdmFsdWUgJiZcbiAgICAnd2l0aCcgaW4gdmFsdWUgJiZcbiAgICAnZGVzdHJveScgaW4gdmFsdWVcbiAgKTtcbn1cbiJdfQ==","import { SIGNAL_TREE_MESSAGES } from './constants';\nimport { ENHANCER_META } from './types';\nexport function createEnhancer(meta, enhancerFn) {\n const fn = enhancerFn;\n try {\n fn.metadata = meta;\n try {\n fn[ENHANCER_META] = meta;\n }\n catch {\n }\n }\n catch {\n }\n return fn;\n}\nexport function resolveEnhancerOrder(enhancers, availableCapabilities = new Set(), debugMode = false) {\n const nodes = enhancers.map((e, idx) => ({\n fn: e,\n name: e.metadata && e.metadata.name\n ? String(e.metadata.name)\n : `enhancer#${idx}`,\n requires: new Set(e.metadata?.requires ?? []),\n provides: new Set(e.metadata?.provides ?? []),\n }));\n const adj = new Map();\n const nameToNode = new Map();\n for (const n of nodes) {\n nameToNode.set(n.name, n);\n adj.set(n.name, new Set());\n }\n for (const a of nodes) {\n for (const b of nodes) {\n if (a === b)\n continue;\n for (const req of b.requires) {\n if (availableCapabilities.has(req))\n continue;\n if (a.provides.has(req)) {\n const set = adj.get(a.name);\n if (set)\n set.add(b.name);\n }\n }\n }\n }\n const inDegree = new Map();\n for (const entry of adj.keys())\n inDegree.set(entry, 0);\n for (const [, outs] of adj) {\n for (const to of outs)\n inDegree.set(to, (inDegree.get(to) || 0) + 1);\n }\n const queue = [];\n for (const [name, deg] of inDegree.entries()) {\n if (deg === 0)\n queue.push(name);\n }\n const ordered = [];\n while (queue.length > 0) {\n const n = queue.shift();\n if (!n)\n break;\n ordered.push(n);\n const outs = adj.get(n);\n if (!outs)\n continue;\n for (const m of outs) {\n inDegree.set(m, (inDegree.get(m) || 0) - 1);\n if (inDegree.get(m) === 0)\n queue.push(m);\n }\n }\n if (ordered.length !== nodes.length) {\n if (debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.ENHANCER_CYCLE_DETECTED);\n }\n return enhancers;\n }\n return ordered.map((name) => {\n const n = nameToNode.get(name);\n return (n ? n.fn : enhancers[0]);\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5oYW5jZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL2VuaGFuY2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQXlCeEMsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsSUFBa0IsRUFDbEIsVUFBMkI7SUFFM0IsTUFBTSxFQUFFLEdBQUcsVUFBb0MsQ0FBQztJQUNoRCxJQUFJLENBQUM7UUFDSCxFQUFFLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUVuQixJQUFJLENBQUM7WUFDRixFQUF5QyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNuRSxDQUFDO1FBQUMsTUFBTSxDQUFDO1FBRVQsQ0FBQztJQUNILENBQUM7SUFBQyxNQUFNLENBQUM7SUFFVCxDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBVUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxTQUErQyxFQUMvQyx3QkFBcUMsSUFBSSxHQUFHLEVBQVUsRUFDdEQsU0FBUyxHQUFHLEtBQUs7SUFHakIsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkMsRUFBRSxFQUFFLENBQUM7UUFDTCxJQUFJLEVBQ0YsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUk7WUFDM0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUN6QixDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUU7UUFDdkIsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJ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QUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFHRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFHRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUMxQixNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBdUMsQ0FBQztJQUN6RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNpZ25hbFRyZWUgRW5oYW5jZXIgU3lzdGVtXG4gKiBIYW5kbGVzIGVuaGFuY2VyIGNvbXBvc2l0aW9uIGFuZCBkZXBlbmRlbmN5IHJlc29sdXRpb25cbiAqL1xuaW1wb3J0IHsgU0lHTkFMX1RSRUVfTUVTU0FHRVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFTkhBTkNFUl9NRVRBIH0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHsgRW5oYW5jZXJNZXRhLCBFbmhhbmNlcldpdGhNZXRhIH0gZnJvbSAnLi90eXBlcyc7XG4vKipcbiAqIEhlbHBlciB0byBjcmVhdGUgYW4gZW5oYW5jZXIgd2l0aCBtZXRhZGF0YSBhdHRhY2hlZFxuICpcbiAqIEBwYXJhbSBtZXRhIC0gTWV0YWRhdGEgZGVzY3JpYmluZyB0aGUgZW5oYW5jZXJcbiAqIEBwYXJhbSBlbmhhbmNlckZuIC0gVGhlIGVuaGFuY2VyIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBFbmhhbmNlciBmdW5jdGlvbiB3aXRoIG1ldGFkYXRhIGF0dGFjaGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG15RW5oYW5jZXIgPSBjcmVhdGVFbmhhbmNlcihcbiAqICAge1xuICogICAgIG5hbWU6ICdteUVuaGFuY2VyJyxcbiAqICAgICBwcm92aWRlczogWydmZWF0dXJlMSddLFxuICogICAgIHJlcXVpcmVzOiBbJ2ZlYXR1cmUyJ11cbiAqICAgfSxcbiAqICAgKHRyZWUpID0+IHtcbiAqICAgICAvLyBFbmhhbmNlIHRoZSB0cmVlXG4gKiAgICAgcmV0dXJuIHsgLi4udHJlZSwgZmVhdHVyZTE6IHRydWUgfTtcbiAqICAgfVxuICogKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW5oYW5jZXI8SSA9IHVua25vd24sIE8gPSB1bmtub3duPihcbiAgbWV0YTogRW5oYW5jZXJNZXRhLFxuICBlbmhhbmNlckZuOiAoaW5wdXQ6IEkpID0+IE9cbik6IEVuaGFuY2VyV2l0aE1ldGE8SSwgTz4ge1xuICBjb25zdCBmbiA9IGVuaGFuY2VyRm4gYXMgRW5oYW5jZXJXaXRoTWV0YTxJLCBPPjtcbiAgdHJ5IHtcbiAgICBmbi5tZXRhZGF0YSA9IG1ldGE7XG4gICAgLy8gQWxzbyBhdHRhY2ggdW5kZXIgc3ltYm9sIGZvciB0aGlyZC1wYXJ0eSBjb21wYXRpYmlsaXR5XG4gICAgdHJ5IHtcbiAgICAgIChmbiBhcyB1bmtub3duIGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+KVtFTkhBTkNFUl9NRVRBXSA9IG1ldGE7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmUgaWYgcHJvcGVydHkgY2FuJ3QgYmUgc2V0XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgZXJyb3JzXG4gIH1cbiAgcmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFJlc29sdmUgZW5oYW5jZXIgb3JkZXIgdXNpbmcgdG9wb2xvZ2ljYWwgc29ydCBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAqXG4gKiBAcGFyYW0gZW5oYW5jZXJzIC0gQXJyYXkgb2YgZW5oYW5jZXJzIHRvIG9yZGVyXG4gKiBAcGFyYW0gYXZhaWxhYmxlQ2FwYWJpbGl0aWVzIC0gU2V0IG9mIGFscmVhZHkgYXZhaWxhYmxlIGNhcGFiaWxpdGllc1xuICogQHBhcmFtIGRlYnVnTW9kZSAtIFdoZXRoZXIgdG8gbG9nIGRlYnVnIGluZm9ybWF0aW9uXG4gKiBAcmV0dXJucyBPcmRlcmVkIGFycmF5IG9mIGVuaGFuY2Vyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVuaGFuY2VyT3JkZXIoXG4gIGVuaGFuY2VyczogRW5oYW5jZXJXaXRoTWV0YTx1bmtub3duLCB1bmtub3duPltdLFxuICBhdmFpbGFibGVDYXBhYmlsaXRpZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCksXG4gIGRlYnVnTW9kZSA9IGZhbHNlXG4pOiBFbmhhbmNlcldpdGhNZXRhPHVua25vd24sIHVua25vd24+W10ge1xuICAvLyBCdWlsZCBub2RlcyB3aXRoIG1ldGFkYXRhXG4gIGNvbnN0IG5vZGVzID0gZW5oYW5jZXJzLm1hcCgoZSwgaWR4KSA9PiAoe1xuICAgIGZuOiBlLFxuICAgIG5hbWU6XG4gICAgICBlLm1ldGFkYXRhICYmIGUubWV0YWRhdGEubmFtZVxuICAgICAgICA/IFN0cmluZyhlLm1ldGFkYXRhLm5hbWUpXG4gICAgICAgIDogYGVuaGFuY2VyIyR7aWR4fWAsXG4gICAgcmVxdWlyZXM6IG5ldyBTZXQ8c3RyaW5nPihlLm1ldGFkYXRhPy5yZXF1aXJlcyA/PyBbXSksXG4gICAgcHJvdmlkZXM6IG5ldyBTZXQ8c3RyaW5nPihlLm1ldGFkYXRhPy5wcm92aWRlcyA/PyBbXSksXG4gIH0pKTtcblxuICAvLyBCdWlsZCBkZXBlbmRlbmN5IGdyYXBoXG4gIGNvbnN0IGFkaiA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcbiAgY29uc3QgbmFtZVRvTm9kZSA9IG5ldyBNYXA8c3RyaW5nLCAodHlwZW9mIG5vZGVzKVswXT4oKTtcblxuICBmb3IgKGNvbnN0IG4gb2Ygbm9kZXMpIHtcbiAgICBuYW1lVG9Ob2RlLnNldChuLm5hbWUsIG4pO1xuICAgIGFkai5zZXQobi5uYW1lLCBuZXcgU2V0PHN0cmluZz4oKSk7XG4gIH1cblxuICAvLyBDcmVhdGUgZWRnZXMgYmFzZWQgb24gcmVxdWlyZW1lbnRzXG4gIGZvciAoY29uc3QgYSBvZiBub2Rlcykge1xuICAgIGZvciAoY29uc3QgYiBvZiBub2Rlcykge1xuICAgICAgaWYgKGEgPT09IGIpIGNvbnRpbnVlO1xuICAgICAgZm9yIChjb25zdCByZXEgb2YgYi5yZXF1aXJlcykge1xuICAgICAgICAvLyBTa2lwIGlmIHJlcXVpcmVtZW50IGlzIGFscmVhZHkgc2F0aXNmaWVkXG4gICAgICAgIGlmIChhdmFpbGFibGVDYXBhYmlsaXRpZXMuaGFzKHJlcSkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChhLnByb3ZpZGVzLmhhcyhyZXEpKSB7XG4gICAgICAgICAgLy8gYSBtdXN0IGNvbWUgYmVmb3JlIGJcbiAgICAgICAgICBjb25zdCBzZXQgPSBhZGouZ2V0KGEubmFtZSk7XG4gICAgICAgICAgaWYgKHNldCkgc2V0LmFkZChiLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gS2FobidzIGFsZ29yaXRobSBmb3IgdG9wb2xvZ2ljYWwgc29ydFxuICBjb25zdCBpbkRlZ3JlZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgYWRqLmtleXMoKSkgaW5EZWdyZWUuc2V0KGVudHJ5LCAwKTtcbiAgZm9yIChjb25zdCBbLCBvdXRzXSBvZiBhZGopIHtcbiAgICBmb3IgKGNvbnN0IHRvIG9mIG91dHMpIGluRGVncmVlLnNldCh0bywgKGluRGVncmVlLmdldCh0bykgfHwgMCkgKyAxKTtcbiAgfVxuXG4gIGNvbnN0IHF1ZXVlOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IFtuYW1lLCBkZWddIG9mIGluRGVncmVlLmVudHJpZXMoKSkge1xuICAgIGlmIChkZWcgPT09IDApIHF1ZXVlLnB1c2gobmFtZSk7XG4gIH1cblxuICBjb25zdCBvcmRlcmVkOiBzdHJpbmdbXSA9IFtdO1xuICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG4gPSBxdWV1ZS5zaGlmdCgpIGFzIHN0cmluZztcbiAgICBpZiAoIW4pIGJyZWFrO1xuICAgIG9yZGVyZWQucHVzaChuKTtcbiAgICBjb25zdCBvdXRzID0gYWRqLmdldChuKTtcbiAgICBpZiAoIW91dHMpIGNvbnRpbnVlO1xuICAgIGZvciAoY29uc3QgbSBvZiBvdXRzKSB7XG4gICAgICBpbkRlZ3JlZS5zZXQobSwgKGluRGVncmVlLmdldChtKSB8fCAwKSAtIDEpO1xuICAgICAgaWYgKGluRGVncmVlLmdldChtKSA9PT0gMCkgcXVldWUucHVzaChtKTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBmb3IgY3ljbGVzXG4gIGlmIChvcmRlcmVkLmxlbmd0aCAhPT0gbm9kZXMubGVuZ3RoKSB7XG4gICAgaWYgKGRlYnVnTW9kZSkge1xuICAgICAgY29uc29sZS53YXJuKFNJR05BTF9UUkVFX01FU1NBR0VTLkVOSEFOQ0VSX0NZQ0xFX0RFVEVDVEVEKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuaGFuY2VycztcbiAgfVxuXG4gIC8vIE1hcCBvcmRlcmVkIG5hbWVzIGJhY2sgdG8gZW5oYW5jZXIgZnVuY3Rpb25zXG4gIHJldHVybiBvcmRlcmVkLm1hcCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IG4gPSBuYW1lVG9Ob2RlLmdldChuYW1lKTtcbiAgICByZXR1cm4gKG4gPyBuLmZuIDogZW5oYW5jZXJzWzBdKSBhcyBFbmhhbmNlcldpdGhNZXRhPHVua25vd24sIHVua25vd24+O1xuICB9KTtcbn1cbiJdfQ==","import { isSignal, signal } from '@angular/core';\nimport { SIGNAL_TREE_CONSTANTS } from './constants';\nconst CALLABLE_SIGNAL_SYMBOL = Symbol.for('NodeAccessor');\nexport function equal(a, b) {\n if (a === b)\n return true;\n if (a == null || b == null)\n return a === b;\n const typeA = typeof a;\n const typeB = typeof b;\n if (typeA !== typeB)\n return false;\n if (typeA !== 'object')\n return false;\n if (a instanceof Date && b instanceof Date)\n return a.getTime() === b.getTime();\n if (a instanceof RegExp && b instanceof RegExp)\n return a.source === b.source && a.flags === b.flags;\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size)\n return false;\n for (const [key, value] of a) {\n if (!b.has(key) || !equal(value, b.get(key)))\n return false;\n }\n return true;\n }\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size)\n return false;\n for (const value of a) {\n if (!b.has(value))\n return false;\n }\n return true;\n }\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length)\n return false;\n return a.every((item, i) => equal(item, b[i]));\n }\n if (Array.isArray(b))\n return false;\n const objA = a;\n const objB = b;\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length)\n return false;\n return keysA.every((k) => k in objB && equal(objA[k], objB[k]));\n}\nexport const deepEqual = equal;\nexport function isBuiltInObject(v) {\n if (v === null || v === undefined)\n return false;\n if (v instanceof Date ||\n v instanceof RegExp ||\n typeof v === 'function' ||\n v instanceof Map ||\n v instanceof Set ||\n v instanceof WeakMap ||\n v instanceof WeakSet ||\n v instanceof ArrayBuffer ||\n v instanceof DataView ||\n v instanceof Error ||\n v instanceof Promise) {\n return true;\n }\n if (v instanceof Int8Array ||\n v instanceof Uint8Array ||\n v instanceof Uint8ClampedArray ||\n v instanceof Int16Array ||\n v instanceof Uint16Array ||\n v instanceof Int32Array ||\n v instanceof Uint32Array ||\n v instanceof Float32Array ||\n v instanceof Float64Array ||\n v instanceof BigInt64Array ||\n v instanceof BigUint64Array) {\n return true;\n }\n if (typeof window !== 'undefined') {\n if (v instanceof URL ||\n v instanceof URLSearchParams ||\n v instanceof FormData ||\n v instanceof Blob ||\n (typeof File !== 'undefined' && v instanceof File) ||\n (typeof FileList !== 'undefined' && v instanceof FileList) ||\n (typeof Headers !== 'undefined' && v instanceof Headers) ||\n (typeof Request !== 'undefined' && v instanceof Request) ||\n (typeof Response !== 'undefined' && v instanceof Response) ||\n (typeof AbortController !== 'undefined' &&\n v instanceof AbortController) ||\n (typeof AbortSignal !== 'undefined' && v instanceof AbortSignal)) {\n return true;\n }\n }\n try {\n const NodeBuffer = globalThis?.Buffer;\n if (NodeBuffer &&\n v instanceof NodeBuffer)\n return true;\n }\n catch {\n }\n return false;\n}\nexport function isNodeAccessor(value) {\n return (typeof value === 'function' && value && CALLABLE_SIGNAL_SYMBOL in value);\n}\nexport function isAnySignal(value) {\n return isSignal(value) || isNodeAccessor(value);\n}\nclass LRUCache {\n maxSize;\n cache = new Map();\n constructor(maxSize) {\n this.maxSize = maxSize;\n }\n set(key, value) {\n if (this.cache.size >= this.maxSize) {\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined)\n this.cache.delete(firstKey);\n }\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n get(key) {\n const value = this.cache.get(key);\n if (value !== undefined) {\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n clear() {\n this.cache.clear();\n }\n size() {\n return this.cache.size;\n }\n}\nconst pathCache = new LRUCache(SIGNAL_TREE_CONSTANTS.MAX_PATH_CACHE_SIZE);\nexport function parsePath(path) {\n const cached = pathCache.get(path);\n if (cached)\n return cached;\n const parts = path.split('.');\n pathCache.set(path, parts);\n return parts;\n}\nexport function composeEnhancers(...enhancers) {\n return (tree) => enhancers.reduce((t, e) => e(t), tree);\n}\nexport function createLazySignalTree(obj, equalityFn, basePath = '') {\n const signalCache = new Map();\n const nestedProxies = new Map();\n const nestedCleanups = new Map();\n const cleanup = () => {\n nestedCleanups.forEach((fn) => {\n try {\n fn();\n }\n catch (error) {\n console.warn('Error during nested cleanup:', error);\n }\n });\n nestedCleanups.clear();\n signalCache.clear();\n nestedProxies.clear();\n };\n const proxy = new Proxy(obj, {\n get(target, prop) {\n if (prop === '__cleanup__')\n return cleanup;\n if (typeof prop === 'symbol') {\n return target[prop];\n }\n if (prop === 'valueOf' || prop === 'toString') {\n return target[prop];\n }\n const key = prop;\n const path = basePath ? `${basePath}.${key}` : key;\n if (!(key in target))\n return undefined;\n const value = target[key];\n if (isSignal(value))\n return value;\n if (signalCache.has(path))\n return signalCache.get(path);\n if (nestedProxies.has(path))\n return nestedProxies.get(path);\n if (value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n !isSignal(value) &&\n !isBuiltInObject(value)) {\n try {\n const nestedProxy = createLazySignalTree(value, equalityFn, path);\n nestedProxies.set(path, nestedProxy);\n const proxyWithCleanup = nestedProxy;\n if (typeof proxyWithCleanup.__cleanup__ === 'function') {\n nestedCleanups.set(path, proxyWithCleanup.__cleanup__);\n }\n return nestedProxy;\n }\n catch (error) {\n console.warn(`Failed to create lazy proxy for path \"${path}\":`, error);\n const fallbackSignal = signal(value, ...(ngDevMode ? [{ debugName: \"fallbackSignal\", equal: equalityFn }] : [{ equal: equalityFn }]));\n signalCache.set(path, fallbackSignal);\n return fallbackSignal;\n }\n }\n try {\n const newSignal = signal(value, ...(ngDevMode ? [{ debugName: \"newSignal\", equal: equalityFn }] : [{ equal: equalityFn }]));\n signalCache.set(path, newSignal);\n return newSignal;\n }\n catch (error) {\n console.warn(`Failed to create signal for path \"${path}\":`, error);\n return value;\n }\n },\n set(target, prop, value) {\n if (typeof prop === 'symbol') {\n target[prop] = value;\n return true;\n }\n const key = prop;\n const path = basePath ? `${basePath}.${key}` : key;\n try {\n target[key] = value;\n const cachedSignal = signalCache.get(path);\n if (cachedSignal && 'set' in cachedSignal) {\n cachedSignal.set(value);\n }\n if (nestedProxies.has(path)) {\n const nestedCleanup = nestedCleanups.get(path);\n if (nestedCleanup) {\n nestedCleanup();\n nestedCleanups.delete(path);\n }\n nestedProxies.delete(path);\n }\n return true;\n }\n catch (error) {\n console.warn(`Failed to set value for path \"${path}\":`, error);\n return false;\n }\n },\n has(target, prop) {\n return prop in target;\n },\n ownKeys(target) {\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n });\n return proxy;\n}\nexport function unwrap(node) {\n if (node === null || node === undefined) {\n return node;\n }\n if (isNodeAccessor(node)) {\n const result = {};\n for (const key in node) {\n if (!Object.prototype.hasOwnProperty.call(node, key))\n continue;\n if (key === 'length' || key === 'prototype')\n continue;\n if (key === 'name') {\n const value = node[key];\n if (!isSignal(value) && !isNodeAccessor(value)) {\n continue;\n }\n }\n const value = node[key];\n if (isNodeAccessor(value)) {\n result[key] = unwrap(value);\n }\n else if (isSignal(value)) {\n const unwrappedValue = value();\n if (typeof unwrappedValue === 'object' &&\n unwrappedValue !== null &&\n !Array.isArray(unwrappedValue) &&\n !isBuiltInObject(unwrappedValue)) {\n result[key] = unwrap(unwrappedValue);\n }\n else {\n result[key] = unwrappedValue;\n }\n }\n else if (typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !isBuiltInObject(value)) {\n result[key] = unwrap(value);\n }\n else {\n result[key] = value;\n }\n }\n return result;\n }\n if (isSignal(node)) {\n const value = node();\n if (typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !isBuiltInObject(value)) {\n return unwrap(value);\n }\n return value;\n }\n if (typeof node !== 'object') {\n return node;\n }\n if (Array.isArray(node)) {\n return node;\n }\n if (isBuiltInObject(node)) {\n return node;\n }\n const result = {};\n for (const key in node) {\n if (!Object.prototype.hasOwnProperty.call(node, key))\n continue;\n if (key === 'set' || key === 'update') {\n const v = node[key];\n if (typeof v === 'function')\n continue;\n }\n const value = node[key];\n if (isNodeAccessor(value)) {\n const unwrappedValue = value();\n if (typeof unwrappedValue === 'object' &&\n unwrappedValue !== null &&\n !Array.isArray(unwrappedValue) &&\n !isBuiltInObject(unwrappedValue)) {\n result[key] = unwrap(unwrappedValue);\n }\n else {\n result[key] = unwrappedValue;\n }\n }\n else if (isSignal(value)) {\n const unwrappedValue = value();\n if (typeof unwrappedValue === 'object' &&\n unwrappedValue !== null &&\n !Array.isArray(unwrappedValue) &&\n !isBuiltInObject(unwrappedValue)) {\n result[key] = unwrap(unwrappedValue);\n }\n else {\n result[key] = unwrappedValue;\n }\n }\n else if (typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !isBuiltInObject(value)) {\n result[key] = unwrap(value);\n }\n else {\n result[key] = value;\n }\n }\n const symbols = Object.getOwnPropertySymbols(node);\n for (const sym of symbols) {\n const value = node[sym];\n if (isNodeAccessor(value)) {\n const unwrappedValue = value();\n if (typeof unwrappedValue === 'object' &&\n unwrappedValue !== null &&\n !Array.isArray(unwrappedValue) &&\n !isBuiltInObject(unwrappedValue)) {\n result[sym] = unwrap(unwrappedValue);\n }\n else {\n result[sym] = unwrappedValue;\n }\n }\n else if (isSignal(value)) {\n const unwrappedValue = value();\n if (typeof unwrappedValue === 'object' &&\n unwrappedValue !== null &&\n !Array.isArray(unwrappedValue) &&\n !isBuiltInObject(unwrappedValue)) {\n result[sym] = unwrap(unwrappedValue);\n }\n else {\n result[sym] = unwrappedValue;\n }\n }\n else if (typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !isBuiltInObject(value)) {\n result[sym] = unwrap(value);\n }\n else {\n result[sym] = value;\n }\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBRXpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdwRCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFTMUQsTUFBTSxVQUFVLEtBQUssQ0FBSSxDQUFJLEVBQUUsQ0FBSTtJQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDekIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJO1FBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLElBQUksS0FBSyxLQUFLLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNsQyxJQUFJLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFckMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJO1FBQ3hDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNyQyxJQUFJLENBQUMsWUFBWSxNQUFNLElBQUksQ0FBQyxZQUFZLE1BQU07UUFDNUMsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBRXRELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxF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RSxDQUFDO2lCQUFNLENBQUM7Z0JBQ0wsTUFBa0MsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUM7WUFDNUQsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sY0FBYyxHQUFJLEtBQXlCLEVBQUUsQ0FBQztZQUNwRCxJQUNFLE9BQU8sY0FBYyxLQUFLLFFBQVE7Z0JBQ2xDLGNBQWMsS0FBSyxJQUFJO2dCQUN2QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO2dCQUM5QixDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsRUFDaEMsQ0FBQztnQkFDQSxNQUFrQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNwRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ0wsTUFBa0MsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUM7WUFDNUQsQ0FBQztRQUNILENBQUM7YUFBTSxJQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFDekIsS0FBSyxLQUFLLElBQUk7WUFDZCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3JCLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUN2QixDQUFDO1lBQ0EsTUFBa0MsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDTCxNQUFrQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBc0IsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNTaWduYWwsIFNpZ25hbCwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTSUdOQUxfVFJFRV9DT05TVEFOVFMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKiBTeW1ib2wgdG8gbWFyayBjYWxsYWJsZSBzaWduYWxzIC0gdXNpbmcgZ2xvYmFsIHN5bWJvbCB0byBtYXRjaCBhY3Jvc3MgZmlsZXMgKi9cbmNvbnN0IENBTExBQkxFX1NJR05BTF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdOb2RlQWNjZXNzb3InKTtcblxuLyoqXG4gKiBTaWduYWxUcmVlIFV0aWxpdHkgRnVuY3Rpb25zIHYxLjEuNlxuICogQ29yZSB1dGlsaXRpZXMgZm9yIHNpZ25hbCB0cmVlIG9wZXJhdGlvbnNcbiAqL1xuaW1wb3J0IHR5cGUgeyBUcmVlTm9kZSwgTm9kZUFjY2Vzc29yIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKiBEZWVwIGVxdWFsaXR5ICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWw8VD4oYTogVCwgYjogVCk6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gYSA9PT0gYjtcblxuICBjb25zdCB0eXBlQSA9IHR5cGVvZiBhO1xuICBjb25zdCB0eXBlQiA9IHR5cGVvZiBiO1xuICBpZiAodHlwZUEgIT09IHR5cGVCKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlQSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpXG4gICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgaWYgKGEgaW5zdGFuY2VvZiBSZWdFeHAgJiYgYiBpbnN0YW5jZW9mIFJlZ0V4cClcbiAgICByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG5cbiAgaWYgKGEgaW5zdGFuY2VvZiBNYXAgJiYgYiBpbnN0YW5jZW9mIE1hcCkge1xuICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGEpIHtcbiAgICAgIGlmICghYi5oYXMoa2V5KSB8fCAhZXF1YWwodmFsdWUsIGIuZ2V0KGtleSkpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGEgaW5zdGFuY2VvZiBTZXQgJiYgYiBpbnN0YW5jZW9mIFNldCkge1xuICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYSkge1xuICAgICAgaWYgKCFiLmhhcyh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShiKSB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gYS5ldmVyeSgoaXRlbSwgaSkgPT4gZXF1YWwoaXRlbSwgKGIgYXMgdW5rbm93biBhcyB1bmtub3duW10pW2ldKSk7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShiKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IG9iakEgPSBhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBvYmpCID0gYiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBrZXlzQS5ldmVyeSgoaykgPT4gayBpbiBvYmpCICYmIGVxdWFsKG9iakFba10sIG9iakJba10pKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZXBFcXVhbCA9IGVxdWFsO1xuXG4vKiogUnVudGltZSBidWlsdC1pbiBkZXRlY3Rpb24gKGtlZXAgaW4gc3luYyB3aXRoIHR5cGVzIEJ1aWx0SW5PYmplY3QpICovXG5leHBvcnQgZnVuY3Rpb24gaXNCdWlsdEluT2JqZWN0KHY6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKFxuICAgIHYgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgdiBpbnN0YW5jZW9mIFJlZ0V4cCB8fFxuICAgIHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nIHx8XG4gICAgdiBpbnN0YW5jZW9mIE1hcCB8fFxuICAgIHYgaW5zdGFuY2VvZiBTZXQgfHxcbiAgICB2IGluc3RhbmNlb2YgV2Vha01hcCB8fFxuICAgIHYgaW5zdGFuY2VvZiBXZWFrU2V0IHx8XG4gICAgdiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgdiBpbnN0YW5jZW9mIERhdGFWaWV3IHx8XG4gICAgdiBpbnN0YW5jZW9mIEVycm9yIHx8XG4gICAgdiBpbnN0YW5jZW9mIFByb21pc2VcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgdiBpbnN0YW5jZW9mIEludDhBcnJheSB8fFxuICAgIHYgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8XG4gICAgdiBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5IHx8XG4gICAgdiBpbnN0YW5jZW9mIEludDE2QXJyYXkgfHxcbiAgICB2IGluc3RhbmNlb2YgVWludDE2QXJyYXkgfHxcbiAgICB2IGluc3RhbmNlb2YgSW50MzJBcnJheSB8fFxuICAgIHYgaW5zdGFuY2VvZiBVaW50MzJBcnJheSB8fFxuICAgIHYgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcbiAgICB2IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5IHx8XG4gICAgdiBpbnN0YW5jZW9mIEJpZ0ludDY0QXJyYXkgfHxcbiAgICB2IGluc3RhbmNlb2YgQmlnVWludDY0QXJyYXlcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoXG4gICAgICB2IGluc3RhbmNlb2YgVVJMIHx8XG4gICAgICB2IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zIHx8XG4gICAgICB2IGluc3RhbmNlb2YgRm9ybURhdGEgfHxcbiAgICAgIHYgaW5zdGFuY2VvZiBCbG9iIHx8XG4gICAgICAodHlwZW9mIEZpbGUgIT09ICd1bmRlZmluZWQnICYmIHYgaW5zdGFuY2VvZiBGaWxlKSB8fFxuICAgICAgKHR5cGVvZiBGaWxlTGlzdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdiBpbnN0YW5jZW9mIEZpbGVMaXN0KSB8fFxuICAgICAgKHR5cGVvZiBIZWFkZXJzICE9PSAndW5kZWZpbmVkJyAmJiB2IGluc3RhbmNlb2YgSGVhZGVycykgfHxcbiAgICAgICh0eXBlb2YgUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdiBpbnN0YW5jZW9mIFJlcXVlc3QpIHx8XG4gICAgICAodHlwZW9mIFJlc3BvbnNlICE9PSAndW5kZWZpbmVkJyAmJiB2IGluc3RhbmNlb2YgUmVzcG9uc2UpIHx8XG4gICAgICAodHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgdiBpbnN0YW5jZW9mIEFib3J0Q29udHJvbGxlcikgfHxcbiAgICAgICh0eXBlb2YgQWJvcnRTaWduYWwgIT09ICd1bmRlZmluZWQnICYmIHYgaW5zdGFuY2VvZiBBYm9ydFNpZ25hbClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgTm9kZUJ1ZmZlciA9IChnbG9iYWxUaGlzIGFzIHsgQnVmZmVyPzogdW5rbm93biB9KT8uQnVmZmVyO1xuICAgIGlmIChcbiAgICAgIE5vZGVCdWZmZXIgJiZcbiAgICAgIHYgaW5zdGFuY2VvZiAoTm9kZUJ1ZmZlciBhcyBuZXcgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bilcbiAgICApXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgLyogaWdub3JlICovXG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgYSBub2RlIGFjY2Vzc29yIGNyZWF0ZWQgYnkgbWFrZU5vZGVBY2Nlc3NvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlQWNjZXNzb3IodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBOb2RlQWNjZXNzb3I8dW5rbm93bj4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZSAmJiBDQUxMQUJMRV9TSUdOQUxfU1lNQk9MIGluIHZhbHVlXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgZWl0aGVyIGFuIEFuZ3VsYXIgc2lnbmFsIG9yIGEgY2FsbGFibGUgc2lnbmFsXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgcGFja2FnZXMgdGhhdCBuZWVkIHRvIHdvcmsgd2l0aCBib3RoIHR5cGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FueVNpZ25hbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNTaWduYWwodmFsdWUpIHx8IGlzTm9kZUFjY2Vzc29yKHZhbHVlKTtcbn1cblxuLyoqIFNtYWxsIExSVSBjYWNoZSB1c2VkIGJ5IHBhcnNlUGF0aCAqL1xuY2xhc3MgTFJVQ2FjaGU8SywgVj4ge1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxLLCBWPigpO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1heFNpemU6IG51bWJlcikge31cbiAgc2V0KGtleTogSywgdmFsdWU6IFYpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYWNoZS5zaXplID49IHRoaXMubWF4U2l6ZSkge1xuICAgICAgY29uc3QgZmlyc3RLZXkgPSB0aGlzLmNhY2hlLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICBpZiAoZmlyc3RLZXkgIT09IHVuZGVmaW5lZCkgdGhpcy5jYWNoZS5kZWxldGUoZmlyc3RLZXkpO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICB9XG4gIGdldChrZXk6IEspOiBWIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuc2l6ZTtcbiAgfVxufVxuXG5jb25zdCBwYXRoQ2FjaGUgPSBuZXcgTFJVQ2FjaGU8c3RyaW5nLCBzdHJpbmdbXT4oXG4gIFNJR05BTF9UUkVFX0NPTlNUQU5UUy5NQVhfUEFUSF9DQUNIRV9TSVpFXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgY2FjaGVkID0gcGF0aENhY2hlLmdldChwYXRoKTtcbiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gIHBhdGhDYWNoZS5zZXQocGF0aCwgcGFydHMpO1xuICByZXR1cm4gcGFydHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlRW5oYW5jZXJzPFQ+KFxuICAuLi5lbmhhbmNlcnM6IEFycmF5PCh0cmVlOiBUKSA9PiBUPlxuKTogKHRyZWU6IFQpID0+IFQge1xuICByZXR1cm4gKHRyZWU6IFQpID0+IGVuaGFuY2Vycy5yZWR1Y2UoKHQsIGUpID0+IGUodCksIHRyZWUpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXp5IHNpZ25hbCB0cmVlIHVzaW5nIFByb3h5IGZvciBvbi1kZW1hbmQgc2lnbmFsIGNyZWF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXp5U2lnbmFsVHJlZTxUIGV4dGVuZHMgb2JqZWN0PihcbiAgb2JqOiBULFxuICBlcXVhbGl0eUZuOiAoYTogdW5rbm93biwgYjogdW5rbm93bikgPT4gYm9vbGVhbixcbiAgYmFzZVBhdGggPSAnJ1xuKTogVHJlZU5vZGU8VD4ge1xuICBjb25zdCBzaWduYWxDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBXcml0YWJsZVNpZ25hbDx1bmtub3duPj4oKTtcbiAgY29uc3QgbmVzdGVkUHJveGllcyA9IG5ldyBNYXA8c3RyaW5nLCB1bmtub3duPigpO1xuICBjb25zdCBuZXN0ZWRDbGVhbnVwcyA9IG5ldyBNYXA8c3RyaW5nLCAoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgbmVzdGVkQ2xlYW51cHMuZm9yRWFjaCgoZm4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIGR1cmluZyBuZXN0ZWQgY2xlYW51cDonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbmVzdGVkQ2xlYW51cHMuY2xlYXIoKTtcbiAgICBzaWduYWxDYWNoZS5jbGVhcigpO1xuICAgIG5lc3RlZFByb3hpZXMuY2xlYXIoKTtcbiAgfTtcblxuICBjb25zdCBwcm94eSA9IG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQodGFyZ2V0OiBvYmplY3QsIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgICAgaWYgKHByb3AgPT09ICdfX2NsZWFudXBfXycpIHJldHVybiBjbGVhbnVwO1xuXG4gICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHJldHVybiAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+KVtwcm9wXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3AgPT09ICd2YWx1ZU9mJyB8fCBwcm9wID09PSAndG9TdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+KVtwcm9wXTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gcHJvcCBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBwYXRoID0gYmFzZVBhdGggPyBgJHtiYXNlUGF0aH0uJHtrZXl9YCA6IGtleTtcblxuICAgICAgaWYgKCEoa2V5IGluIHRhcmdldCkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gKHRhcmdldCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcblxuICAgICAgaWYgKGlzU2lnbmFsKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuXG4gICAgICBpZiAoc2lnbmFsQ2FjaGUuaGFzKHBhdGgpKSByZXR1cm4gc2lnbmFsQ2FjaGUuZ2V0KHBhdGgpO1xuICAgICAgaWYgKG5lc3RlZFByb3hpZXMuaGFzKHBhdGgpKSByZXR1cm4gbmVzdGVkUHJveGllcy5nZXQocGF0aCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgIWlzU2lnbmFsKHZhbHVlKSAmJlxuICAgICAgICAhaXNCdWlsdEluT2JqZWN0KHZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbmVzdGVkUHJveHkgPSBjcmVhdGVMYXp5U2lnbmFsVHJlZShcbiAgICAgICAgICAgIHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgZXF1YWxpdHlGbixcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICApO1xuICAgICAgICAgIG5lc3RlZFByb3hpZXMuc2V0KHBhdGgsIG5lc3RlZFByb3h5KTtcblxuICAgICAgICAgIGNvbnN0IHByb3h5V2l0aENsZWFudXAgPSBuZXN0ZWRQcm94eSBhcyB7IF9fY2xlYW51cF9fPzogKCkgPT4gdm9pZCB9O1xuICAgICAgICAgIGlmICh0eXBlb2YgcHJveHlXaXRoQ2xlYW51cC5fX2NsZWFudXBfXyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVzdGVkQ2xlYW51cHMuc2V0KHBhdGgsIHByb3h5V2l0aENsZWFudXAuX19jbGVhbnVwX18pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXN0ZWRQcm94eTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgRmFpbGVkIHRvIGNyZWF0ZSBsYXp5IHByb3h5IGZvciBwYXRoIFwiJHtwYXRofVwiOmAsXG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZmFsbGJhY2tTaWduYWwgPSBzaWduYWwodmFsdWUsIHsgZXF1YWw6IGVxdWFsaXR5Rm4gfSk7XG4gICAgICAgICAgc2lnbmFsQ2FjaGUuc2V0KFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIGZhbGxiYWNrU2lnbmFsIGFzIHVua25vd24gYXMgV3JpdGFibGVTaWduYWw8dW5rbm93bj5cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBmYWxsYmFja1NpZ25hbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXdTaWduYWwgPSBzaWduYWwodmFsdWUsIHsgZXF1YWw6IGVxdWFsaXR5Rm4gfSk7XG4gICAgICAgIHNpZ25hbENhY2hlLnNldChwYXRoLCBuZXdTaWduYWwgYXMgdW5rbm93biBhcyBXcml0YWJsZVNpZ25hbDx1bmtub3duPik7XG4gICAgICAgIHJldHVybiBuZXdTaWduYWw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBjcmVhdGUgc2lnbmFsIGZvciBwYXRoIFwiJHtwYXRofVwiOmAsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXQodGFyZ2V0OiBvYmplY3QsIHByb3A6IHN0cmluZyB8IHN5bWJvbCwgdmFsdWU6IHVua25vd24pIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgKHRhcmdldCBhcyBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCB1bmtub3duPilbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHByb3AgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoID8gYCR7YmFzZVBhdGh9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgICh0YXJnZXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSB2YWx1ZTtcblxuICAgICAgICBjb25zdCBjYWNoZWRTaWduYWwgPSBzaWduYWxDYWNoZS5nZXQocGF0aCk7XG4gICAgICAgIGlmIChjYWNoZWRTaWduYWwgJiYgJ3NldCcgaW4gY2FjaGVkU2lnbmFsKSB7XG4gICAgICAgICAgKGNhY2hlZFNpZ25hbCBhcyBXcml0YWJsZVNpZ25hbDx1bmtub3duPikuc2V0KHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXN0ZWRQcm94aWVzLmhhcyhwYXRoKSkge1xuICAgICAgICAgIGNvbnN0IG5lc3RlZENsZWFudXAgPSBuZXN0ZWRDbGVhbnVwcy5nZXQocGF0aCk7XG4gICAgICAgICAgaWYgKG5lc3RlZENsZWFudXApIHtcbiAgICAgICAgICAgIG5lc3RlZENsZWFudXAoKTtcbiAgICAgICAgICAgIG5lc3RlZENsZWFudXBzLmRlbGV0ZShwYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmVzdGVkUHJveGllcy5kZWxldGUocGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIHNldCB2YWx1ZSBmb3IgcGF0aCBcIiR7cGF0aH1cIjpgLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGFzKHRhcmdldCwgcHJvcCkge1xuICAgICAgcmV0dXJuIHByb3AgaW4gdGFyZ2V0O1xuICAgIH0sXG5cbiAgICBvd25LZXlzKHRhcmdldCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpO1xuICAgIH0sXG5cbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wKTtcbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gcHJveHkgYXMgVHJlZU5vZGU8VD47XG59XG5cbi8qKlxuICogVW53cmFwcyBhIHNpZ25hbCBvciBzaWduYWwgdHJlZSBpbnRvIGEgcGxhaW4gSlMgdmFsdWUgc2hhcGVkIGFzIFQuXG4gKiBOT1RFOiBSdW50aW1lIHN0cmlwcyB0aGUgZHluYW1pYyBzZXQvdXBkYXRlIGhlbHBlcnM7IGNhbGwgc2l0ZXMgcmVjZWl2ZSBULlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwPFQ+KG5vZGU6IFRyZWVOb2RlPFQ+KTogVDtcbmV4cG9ydCBmdW5jdGlvbiB1bndyYXA8VD4obm9kZTogTm9kZUFjY2Vzc29yPFQ+ICYgVHJlZU5vZGU8VD4pOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcDxUPihub2RlOiBOb2RlQWNjZXNzb3I8VD4pOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcDxUPihub2RlOiB1bmtub3duKTogVDtcbmV4cG9ydCBmdW5jdGlvbiB1bndyYXA8VD4obm9kZTogdW5rbm93bik6IFQge1xuICBpZiAobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbm9kZSBhcyBUO1xuICB9XG5cbiAgLy8gSGFuZGxlIGNhbGxhYmxlIHNpZ25hbHMgZmlyc3RcbiAgaWYgKGlzTm9kZUFjY2Vzc29yKG5vZGUpKSB7XG4gICAgLy8gRm9yIE5vZGVBY2Nlc3NvcnMsIGRvbid0IGNhbGwgdGhlbSAtIHJlYWQgZnJvbSB0aGVpciBwcm9wZXJ0aWVzIGRpcmVjdGx5XG4gICAgLy8gVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSByZWN1cnNpb24gd2hlbiBOb2RlQWNjZXNzb3IgY2FsbHMgdW53cmFwKGFjY2Vzc29yKVxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gbm9kZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBrZXkpKSBjb250aW51ZTtcblxuICAgICAgLy8gU2tpcCBmdW5jdGlvbiBwcm90b3R5cGUgcHJvcGVydGllcyBvbmx5LCBub3QgdXNlciBwcm9wZXJ0aWVzXG4gICAgICBpZiAoa2V5ID09PSAnbGVuZ3RoJyB8fCBrZXkgPT09ICdwcm90b3R5cGUnKSBjb250aW51ZTtcblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgJ25hbWUnIC0gaWYgaXQncyBhIHNpZ25hbCBvciBOb2RlQWNjZXNzb3IsIGluY2x1ZGUgaXRcbiAgICAgIGlmIChrZXkgPT09ICduYW1lJykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChub2RlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICAgIGlmICghaXNTaWduYWwodmFsdWUpICYmICFpc05vZGVBY2Nlc3Nvcih2YWx1ZSkpIHtcbiAgICAgICAgICAvLyBTa2lwIGlmIGl0J3MganVzdCB0aGUgZnVuY3Rpb24gbmFtZSBwcm9wZXJ0eVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gKG5vZGUgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcblxuICAgICAgaWYgKGlzTm9kZUFjY2Vzc29yKHZhbHVlKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHVud3JhcCh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzU2lnbmFsKHZhbHVlKSkge1xuICAgICAgICBjb25zdCB1bndyYXBwZWRWYWx1ZSA9ICh2YWx1ZSBhcyBTaWduYWw8dW5rbm93bj4pKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgdW53cmFwcGVkVmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgdW53cmFwcGVkVmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheSh1bndyYXBwZWRWYWx1ZSkgJiZcbiAgICAgICAgICAhaXNCdWlsdEluT2JqZWN0KHVud3JhcHBlZFZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHVud3JhcCh1bndyYXBwZWRWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB1bndyYXBwZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgIWlzQnVpbHRJbk9iamVjdCh2YWx1ZSlcbiAgICAgICkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHVud3JhcCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQgYXMgVDtcbiAgfVxuICBpZiAoaXNTaWduYWwobm9kZSkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChub2RlIGFzIFNpZ25hbDx1bmtub3duPikoKTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAhaXNCdWlsdEluT2JqZWN0KHZhbHVlKVxuICAgICkge1xuICAgICAgcmV0dXJuIHVud3JhcCh2YWx1ZSkgYXMgVDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlIGFzIFQ7XG4gIH1cblxuICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG5vZGUgYXMgVDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUgYXMgVDtcbiAgfVxuXG4gIGlmIChpc0J1aWx0SW5PYmplY3Qobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gbm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGtleSkpIGNvbnRpbnVlO1xuXG4gICAgaWYgKGtleSA9PT0gJ3NldCcgfHwga2V5ID09PSAndXBkYXRlJykge1xuICAgICAgY29uc3QgdiA9IChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuXG4gICAgaWYgKGlzTm9kZUFjY2Vzc29yKHZhbHVlKSkge1xuICAgICAgY29uc3QgdW53cmFwcGVkVmFsdWUgPSB2YWx1ZSgpO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdW53cmFwcGVkVmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHVud3JhcHBlZFZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KHVud3JhcHBlZFZhbHVlKSAmJlxuICAgICAgICAhaXNCdWlsdEluT2JqZWN0KHVud3JhcHBlZFZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdW53cmFwKHVud3JhcHBlZFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdW53cmFwcGVkVmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NpZ25hbCh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHVud3JhcHBlZFZhbHVlID0gKHZhbHVlIGFzIFNpZ25hbDx1bmtub3duPikoKTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHVud3JhcHBlZFZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB1bndyYXBwZWRWYWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheSh1bndyYXBwZWRWYWx1ZSkgJiZcbiAgICAgICAgIWlzQnVpbHRJbk9iamVjdCh1bndyYXBwZWRWYWx1ZSlcbiAgICAgICkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHVud3JhcCh1bndyYXBwZWRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IHVud3JhcHBlZFZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAhaXNCdWlsdEluT2JqZWN0KHZhbHVlKVxuICAgICkge1xuICAgICAgcmVzdWx0W2tleV0gPSB1bndyYXAodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG5vZGUgYXMgb2JqZWN0KTtcbiAgZm9yIChjb25zdCBzeW0gb2Ygc3ltYm9scykge1xuICAgIGNvbnN0IHZhbHVlID0gKG5vZGUgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW3N5bV07XG4gICAgaWYgKGlzTm9kZUFjY2Vzc29yKHZhbHVlKSkge1xuICAgICAgY29uc3QgdW53cmFwcGVkVmFsdWUgPSB2YWx1ZSgpO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdW53cmFwcGVkVmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHVud3JhcHBlZFZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KHVud3JhcHBlZFZhbHVlKSAmJlxuICAgICAgICAhaXNCdWlsdEluT2JqZWN0KHVud3JhcHBlZFZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIChyZXN1bHQgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW3N5bV0gPSB1bndyYXAodW53cmFwcGVkVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKHJlc3VsdCBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilbc3ltXSA9IHVud3JhcHBlZFZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICBjb25zdCB1bndyYXBwZWRWYWx1ZSA9ICh2YWx1ZSBhcyBTaWduYWw8dW5rbm93bj4pKCk7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB1bndyYXBwZWRWYWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdW53cmFwcGVkVmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkodW53cmFwcGVkVmFsdWUpICYmXG4gICAgICAgICFpc0J1aWx0SW5PYmplY3QodW53cmFwcGVkVmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgKHJlc3VsdCBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilbc3ltXSA9IHVud3JhcCh1bndyYXBwZWRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAocmVzdWx0IGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+KVtzeW1dID0gdW53cmFwcGVkVmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICFpc0J1aWx0SW5PYmplY3QodmFsdWUpXG4gICAgKSB7XG4gICAgICAocmVzdWx0IGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+KVtzeW1dID0gdW53cmFwKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgKHJlc3VsdCBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilbc3ltXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBUO1xufVxuIl19","import { computed, DestroyRef, effect, inject, isSignal, signal, } from '@angular/core';\nimport { SIGNAL_TREE_CONSTANTS, SIGNAL_TREE_MESSAGES } from './constants';\nimport { resolveEnhancerOrder } from './enhancers';\nimport { createLazySignalTree, equal, isBuiltInObject, unwrap } from './utils';\nconst NODE_ACCESSOR_SYMBOL = Symbol.for('NodeAccessor');\nfunction makeNodeAccessor() {\n const accessor = function (arg) {\n if (arguments.length === 0) {\n return unwrap(accessor);\n }\n if (typeof arg === 'function') {\n const updater = arg;\n const currentValue = unwrap(accessor);\n const newValue = updater(currentValue);\n recursiveUpdate(accessor, newValue);\n }\n else {\n recursiveUpdate(accessor, arg);\n }\n };\n accessor[NODE_ACCESSOR_SYMBOL] = true;\n return accessor;\n}\nfunction makeRootNodeAccessor(readSignal, writeSignal) {\n const accessor = function (arg) {\n if (arguments.length === 0) {\n return readSignal();\n }\n if (typeof arg === 'function') {\n const updater = arg;\n writeSignal.set(updater(readSignal()));\n }\n else {\n writeSignal.set(arg);\n }\n };\n accessor[NODE_ACCESSOR_SYMBOL] = true;\n return accessor;\n}\nfunction recursiveUpdate(target, updates) {\n if (!updates || typeof updates !== 'object') {\n return;\n }\n let targetObj;\n if (isNodeAccessor(target)) {\n targetObj = target;\n }\n else if (target && typeof target === 'object') {\n targetObj = target;\n }\n else {\n return;\n }\n const updatesObj = updates;\n for (const key in updatesObj) {\n if (!(key in targetObj)) {\n continue;\n }\n const targetProp = targetObj[key];\n const updateValue = updatesObj[key];\n if (isSignal(targetProp)) {\n if ('set' in targetProp && typeof targetProp.set === 'function') {\n targetProp.set(updateValue);\n }\n }\n else if (isNodeAccessor(targetProp)) {\n if (updateValue && typeof updateValue === 'object') {\n recursiveUpdate(targetProp, updateValue);\n }\n else {\n targetProp(updateValue);\n }\n }\n }\n}\nexport function isNodeAccessor(value) {\n return (typeof value === 'function' &&\n value &&\n value[NODE_ACCESSOR_SYMBOL] === true);\n}\nfunction estimateObjectSize(obj, maxDepth = SIGNAL_TREE_CONSTANTS.ESTIMATE_MAX_DEPTH, currentDepth = 0) {\n if (currentDepth >= maxDepth)\n return 1;\n if (obj === null || obj === undefined)\n return 0;\n if (typeof obj !== 'object')\n return 1;\n let size = 0;\n try {\n if (Array.isArray(obj)) {\n size = obj.length;\n const sampleSize = Math.min(SIGNAL_TREE_CONSTANTS.ESTIMATE_SAMPLE_SIZE_ARRAY, obj.length);\n for (let i = 0; i < sampleSize; i++) {\n size += estimateObjectSize(obj[i], maxDepth, currentDepth + 1) * 0.1;\n }\n }\n else {\n const keys = Object.keys(obj);\n size = keys.length;\n const sampleSize = Math.min(SIGNAL_TREE_CONSTANTS.ESTIMATE_SAMPLE_SIZE_OBJECT, keys.length);\n for (let i = 0; i < sampleSize; i++) {\n const value = obj[keys[i]];\n size += estimateObjectSize(value, maxDepth, currentDepth + 1) * 0.5;\n }\n }\n }\n catch {\n return 1;\n }\n return Math.floor(size);\n}\nfunction shouldUseLazy(obj, config, precomputedSize) {\n if (config.useLazySignals !== undefined)\n return config.useLazySignals;\n if (config.debugMode || config.enableDevTools)\n return false;\n if (config.batchUpdates && config.useMemoization)\n return true;\n const estimatedSize = precomputedSize ?? estimateObjectSize(obj);\n return estimatedSize > SIGNAL_TREE_CONSTANTS.LAZY_THRESHOLD;\n}\nfunction createEqualityFn(useShallowComparison) {\n return useShallowComparison ? Object.is : equal;\n}\nfunction createSignalStore(obj, equalityFn) {\n if (obj === null || obj === undefined || typeof obj !== 'object') {\n return signal(obj, { equal: equalityFn });\n }\n if (Array.isArray(obj)) {\n return signal(obj, { equal: equalityFn });\n }\n if (isBuiltInObject(obj)) {\n return signal(obj, { equal: equalityFn });\n }\n const store = {};\n const processedObjects = new WeakSet();\n if (processedObjects.has(obj)) {\n console.warn(SIGNAL_TREE_MESSAGES.CIRCULAR_REF);\n return signal(obj, { equal: equalityFn });\n }\n processedObjects.add(obj);\n try {\n for (const [key, value] of Object.entries(obj)) {\n try {\n if (typeof key === 'symbol')\n continue;\n if (isSignal(value)) {\n store[key] = value;\n continue;\n }\n if (value === null || value === undefined) {\n store[key] = signal(value, {\n equal: equalityFn,\n });\n }\n else if (typeof value !== 'object') {\n store[key] = signal(value, {\n equal: equalityFn,\n });\n }\n else if (Array.isArray(value) || isBuiltInObject(value)) {\n store[key] = signal(value, {\n equal: equalityFn,\n });\n }\n else {\n const branch = createSignalStore(value, equalityFn);\n const callableBranch = makeNodeAccessor();\n for (const branchKey in branch) {\n if (Object.prototype.hasOwnProperty.call(branch, branchKey)) {\n try {\n Object.defineProperty(callableBranch, branchKey, {\n value: branch[branchKey],\n enumerable: true,\n configurable: true,\n });\n }\n catch {\n }\n }\n }\n store[key] = callableBranch;\n }\n }\n catch (error) {\n console.warn(`${SIGNAL_TREE_MESSAGES.SIGNAL_CREATION_FAILED} \"${key}\":`, error);\n store[key] = signal(value, {\n equal: equalityFn,\n });\n }\n }\n const symbols = Object.getOwnPropertySymbols(obj);\n for (const sym of symbols) {\n const value = obj[sym];\n try {\n if (isSignal(value)) {\n store[sym] = value;\n }\n else {\n store[sym] = signal(value, {\n equal: equalityFn,\n });\n }\n }\n catch (error) {\n console.warn(SIGNAL_TREE_MESSAGES.SIGNAL_CREATION_FAILED, error);\n }\n }\n }\n catch (error) {\n throw new Error(`Failed to create signal store: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n return store;\n}\nfunction enhanceTree(tree, config = {}) {\n const isLazy = config.useLazySignals ?? shouldUseLazy(tree.state, config);\n tree.with = ((...enhancers) => {\n if (enhancers.length === 0) {\n return tree;\n }\n const coreCapabilities = new Set();\n if (config.batchUpdates)\n coreCapabilities.add('batchUpdate');\n if (config.useMemoization)\n coreCapabilities.add('memoize');\n if (config.enableTimeTravel)\n coreCapabilities.add('undo');\n if (config.enableDevTools)\n coreCapabilities.add('connectDevTools');\n try {\n for (const key of Object.keys(tree))\n coreCapabilities.add(String(key));\n }\n catch {\n }\n const hasMetadata = enhancers.some((e) => Boolean(e.metadata && (e.metadata.requires || e.metadata.provides)));\n let orderedEnhancers = enhancers;\n if (hasMetadata) {\n try {\n orderedEnhancers = resolveEnhancerOrder(enhancers, coreCapabilities, config.debugMode);\n }\n catch (err) {\n console.warn(SIGNAL_TREE_MESSAGES.ENHANCER_ORDER_FAILED, err);\n }\n }\n const provided = new Set(coreCapabilities);\n let currentTree = tree;\n for (let i = 0; i < orderedEnhancers.length; i++) {\n const enhancer = orderedEnhancers[i];\n if (typeof enhancer !== 'function') {\n throw new Error(SIGNAL_TREE_MESSAGES.ENHANCER_NOT_FUNCTION.replace('%d', String(i)));\n }\n const reqs = enhancer.metadata?.requires ?? [];\n for (const r of reqs) {\n if (!(r in currentTree) && !provided.has(r)) {\n const name = enhancer.metadata?.name ?? `enhancer#${i}`;\n const msg = SIGNAL_TREE_MESSAGES.ENHANCER_REQUIREMENT_MISSING.replace('%s', name).replace('%s', r);\n if (config.debugMode) {\n throw new Error(msg);\n }\n else {\n console.warn(msg);\n }\n }\n }\n try {\n const result = enhancer(currentTree);\n if (result !== currentTree)\n currentTree = result;\n const provs = enhancer.metadata?.provides ?? [];\n for (const p of provs)\n provided.add(p);\n if (config.debugMode && provs.length > 0) {\n for (const p of provs) {\n if (!(p in currentTree)) {\n console.warn(SIGNAL_TREE_MESSAGES.ENHANCER_PROVIDES_MISSING.replace('%s', enhancer.metadata?.name ?? String(i)).replace('%s', p));\n }\n }\n }\n }\n catch (error) {\n const name = enhancer.metadata?.name || `enhancer at index ${i}`;\n console.error(SIGNAL_TREE_MESSAGES.ENHANCER_FAILED.replace('%s', name), error);\n if (config.debugMode) {\n console.error('[SignalTree] Enhancer stack trace:', enhancer);\n console.error('[SignalTree] Tree state at failure:', currentTree);\n }\n throw error;\n }\n }\n return currentTree;\n });\n tree.destroy = () => {\n try {\n if (isLazy) {\n const state = tree.state;\n if (state && typeof state === 'object' && '__cleanup__' in state) {\n const cleanup = state.__cleanup__;\n if (typeof cleanup === 'function') {\n cleanup();\n }\n }\n }\n if (config.debugMode) {\n console.log(SIGNAL_TREE_MESSAGES.TREE_DESTROYED);\n }\n }\n catch (error) {\n console.error(SIGNAL_TREE_MESSAGES.CLEANUP_ERROR, error);\n }\n };\n addStubMethods(tree, config);\n return tree;\n}\nfunction addStubMethods(tree, config) {\n tree.batchUpdate = (updater) => {\n console.warn(SIGNAL_TREE_MESSAGES.BATCH_NOT_ENABLED);\n tree((current) => {\n const partial = updater(current);\n return { ...current, ...partial };\n });\n };\n tree.memoize = (fn, cacheKey) => {\n console.warn(SIGNAL_TREE_MESSAGES.MEMOIZE_NOT_ENABLED);\n void cacheKey;\n return computed(() => fn(tree()));\n };\n tree.memoizedUpdate = (updater) => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.MEMOIZE_NOT_ENABLED);\n }\n tree((current) => ({ ...current, ...updater(current) }));\n };\n tree.clearMemoCache = () => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.MEMOIZE_NOT_ENABLED);\n }\n };\n tree.getCacheStats = () => ({\n size: 0,\n hitRate: 0,\n totalHits: 0,\n totalMisses: 0,\n keys: [],\n });\n tree.effect = (fn) => {\n try {\n effect(() => fn(tree()));\n }\n catch (error) {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.EFFECT_NO_CONTEXT, error);\n }\n }\n };\n tree.subscribe = (fn) => {\n try {\n const destroyRef = inject(DestroyRef);\n let isDestroyed = false;\n const effectRef = effect(() => {\n if (!isDestroyed) {\n fn(tree());\n }\n }, ...(ngDevMode ? [{ debugName: \"effectRef\" }] : []));\n const unsubscribe = () => {\n isDestroyed = true;\n effectRef.destroy();\n };\n destroyRef.onDestroy(unsubscribe);\n return unsubscribe;\n }\n catch (error) {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.SUBSCRIBE_NO_CONTEXT, error);\n }\n fn(tree());\n return () => {\n };\n }\n };\n tree.optimize = () => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.OPTIMIZE_NOT_AVAILABLE);\n }\n };\n tree.clearCache = () => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.CACHE_NOT_AVAILABLE);\n }\n };\n tree.invalidatePattern = () => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.PERFORMANCE_NOT_ENABLED);\n }\n return 0;\n };\n tree.getMetrics = () => {\n return {\n updates: 0,\n computations: 0,\n cacheHits: 0,\n cacheMisses: 0,\n averageUpdateTime: 0,\n };\n };\n tree.addTap = (middleware) => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.MIDDLEWARE_NOT_AVAILABLE);\n }\n void middleware;\n };\n tree.removeTap = (id) => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.MIDDLEWARE_NOT_AVAILABLE);\n }\n void id;\n };\n tree.entities = () => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.ENTITY_HELPERS_NOT_AVAILABLE);\n }\n return {};\n };\n tree.asyncAction = (operation, asyncConfig = {}) => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.ASYNC_ACTIONS_NOT_AVAILABLE);\n }\n void operation;\n void asyncConfig;\n return {};\n };\n tree.undo = () => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.TIME_TRAVEL_NOT_AVAILABLE);\n }\n };\n tree.redo = () => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.TIME_TRAVEL_NOT_AVAILABLE);\n }\n };\n tree.getHistory = () => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.TIME_TRAVEL_NOT_AVAILABLE);\n }\n return [];\n };\n tree.resetHistory = () => {\n if (config.debugMode) {\n console.warn(SIGNAL_TREE_MESSAGES.TIME_TRAVEL_NOT_AVAILABLE);\n }\n };\n}\nfunction create(obj, config = {}) {\n if (obj === null || obj === undefined) {\n throw new Error(SIGNAL_TREE_MESSAGES.NULL_OR_UNDEFINED);\n }\n const estimatedSize = estimateObjectSize(obj);\n const equalityFn = createEqualityFn(config.useShallowComparison ?? false);\n if (Array.isArray(obj)) {\n const signalState = signal(obj, {\n equal: equalityFn,\n });\n const tree = makeRootNodeAccessor(signalState, signalState);\n Object.defineProperty(tree, 'state', {\n value: signalState,\n enumerable: false,\n });\n Object.defineProperty(tree, '$', { value: signalState, enumerable: false });\n enhanceTree(tree, config);\n return tree;\n }\n const useLazy = shouldUseLazy(obj, config, estimatedSize);\n if (config.debugMode) {\n console.log(SIGNAL_TREE_MESSAGES.STRATEGY_SELECTION.replace('%s', useLazy ? 'lazy' : 'eager').replace('%d', String(estimatedSize)));\n }\n let signalState;\n try {\n if (useLazy && typeof obj === 'object') {\n signalState = createLazySignalTree(obj, equalityFn);\n }\n else {\n signalState = createSignalStore(obj, equalityFn);\n }\n }\n catch (error) {\n if (useLazy) {\n console.warn(SIGNAL_TREE_MESSAGES.LAZY_FALLBACK, error);\n signalState = createSignalStore(obj, equalityFn);\n }\n else {\n throw error;\n }\n }\n const tree = function (arg) {\n if (arguments.length === 0) {\n return unwrap(signalState);\n }\n if (typeof arg === 'function') {\n const updater = arg;\n const currentValue = unwrap(signalState);\n const newValue = updater(currentValue);\n recursiveUpdate(signalState, newValue);\n }\n else {\n recursiveUpdate(signalState, arg);\n }\n };\n Object.defineProperty(tree, NODE_ACCESSOR_SYMBOL, {\n value: true,\n enumerable: false,\n });\n Object.defineProperty(tree, 'state', {\n value: signalState,\n enumerable: false,\n });\n Object.defineProperty(tree, '$', { value: signalState, enumerable: false });\n enhanceTree(tree, config);\n for (const key in signalState) {\n if (Object.prototype.hasOwnProperty.call(signalState, key)) {\n if (!(key in tree)) {\n try {\n Object.defineProperty(tree, key, {\n value: signalState[key],\n enumerable: true,\n configurable: true,\n });\n }\n catch {\n }\n }\n }\n }\n return tree;\n}\nconst presetConfigs = {\n basic: {\n useLazySignals: false,\n debugMode: false,\n },\n performance: {\n useLazySignals: true,\n batchUpdates: true,\n useMemoization: true,\n useShallowComparison: true,\n },\n development: {\n useLazySignals: false,\n debugMode: true,\n enableDevTools: true,\n trackPerformance: true,\n },\n production: {\n useLazySignals: true,\n batchUpdates: true,\n useMemoization: true,\n debugMode: false,\n },\n};\nexport function signalTree(obj, configOrPreset) {\n if (typeof configOrPreset === 'string') {\n const config = presetConfigs[configOrPreset];\n if (!config) {\n console.warn(SIGNAL_TREE_MESSAGES.PRESET_UNKNOWN.replace('%s', configOrPreset));\n return create(obj, {});\n }\n return create(obj, config);\n }\n const config = configOrPreset || {};\n return create(obj, config);\n}\nexport function applyEnhancer(tree, enhancer) {\n return enhancer(tree);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLXRyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvc2lnbmFsLXRyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBRVIsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRy9FLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQTZCeEQsU0FBUyxnQkFBZ0I7SUFDdkIsTUFBTSxRQUFRLEdBQUcsVUFBVSxHQUFhO1FBQ3RDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUUzQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM5QixNQUFNLE9BQU8sR0FBRyxHQUF3QixDQUFDO1lBQ3pDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQU0sQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkMsZUFBZSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQU0sQ0FBQztZQUVOLGVBQWUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQW9CLENBQUM7SUFF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QUFJO1FBQ3BCLG9CQUFvQixFQUFFLElBQUk7S0FDM0I7SUFDRCxXQUFXLEVBQUU7UUFDWCxjQUFjLEVBQUUsS0FBSztRQUNyQixTQUFTLEVBQUUsSUFBSTtRQUNmLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLGdCQUFnQixFQUFFLElBQUk7S0FDdkI7SUFDRCxVQUFVLEVBQUU7UUFDVixjQUFjLEVBQUUsSUFBSTtRQUNwQixZQUFZLEVBQUUsSUFBSTtRQUNsQixjQUFjLEVBQUUsSUFBSTtRQUNwQixTQUFTLEVBQUUsS0FBSztLQUNqQjtDQUNGLENBQUM7QUFpQkYsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsR0FBTSxFQUNOLGNBQXdDO0lBRXhDLElBQUksT0FBTyxjQUFjLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysb0JBQW9CLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQ2xFLENBQUM7WUFDRixPQUFPLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsY0FBYyxJQUFJLEVBQUUsQ0FBQztJQUNwQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQU9ELE1BQU0sVUFBVSxhQUFhLENBQzNCLElBQW1CLEVBQ25CLFFBQTRDO0lBRTVDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBTSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21wdXRlZCxcbiAgRGVzdHJveVJlZixcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlzU2lnbmFsLFxuICBTaWduYWwsXG4gIHNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTSUdOQUxfVFJFRV9DT05TVEFOVFMsIFNJR05BTF9UUkVFX01FU1NBR0VTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZUVuaGFuY2VyT3JkZXIgfSBmcm9tICcuL2VuaGFuY2Vycyc7XG5pbXBvcnQgeyBjcmVhdGVMYXp5U2lnbmFsVHJlZSwgZXF1YWwsIGlzQnVpbHRJbk9iamVjdCwgdW53cmFwIH0gZnJvbSAnLi91dGlscyc7XG5cbi8vIEdsb2JhbCBzeW1ib2wgZm9yIE5vZGVBY2Nlc3NvciBpZGVudGlmaWNhdGlvblxuY29uc3QgTk9ERV9BQ0NFU1NPUl9TWU1CT0wgPSBTeW1ib2wuZm9yKCdOb2RlQWNjZXNzb3InKTtcblxuaW1wb3J0IHR5cGUge1xuICBTaWduYWxUcmVlLFxuICBUcmVlTm9kZSxcbiAgVHJlZUNvbmZpZyxcbiAgVHJlZVByZXNldCxcbiAgTWlkZGxld2FyZSxcbiAgUGVyZm9ybWFuY2VNZXRyaWNzLFxuICBFbnRpdHlIZWxwZXJzLFxuICBBc3luY0FjdGlvbkNvbmZpZyxcbiAgQXN5bmNBY3Rpb24sXG4gIFRpbWVUcmF2ZWxFbnRyeSxcbiAgRW5oYW5jZXJXaXRoTWV0YSxcbiAgQ2hhaW5SZXN1bHQsXG4gIFdpdGhNZXRob2QsXG4gIE5vZGVBY2Nlc3Nvcixcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIFR5cGUgYWxpYXMgZm9yIGludGVybmFsIHVzZVxudHlwZSBMb2NhbFVua25vd25FbmhhbmNlciA9IEVuaGFuY2VyV2l0aE1ldGE8dW5rbm93biwgdW5rbm93bj47XG5cbi8vIE5vdGU6IENhbGxhYmxlIHN5bnRheCBpcyBzdXBwb3J0ZWQgdmlhIG9wdGlvbmFsIGJ1aWxkLXRpbWUgdHJhbnNmb3JtIG9ubHkuXG4vLyBObyBydW50aW1lIFByb3h5IHdyYXBwaW5nIGlzIGFwcGxpZWQgdG8gd3JpdGFibGUgc2lnbmFscyB0byBrZWVwIHplcm8tY29zdCBzZW1hbnRpY3MuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGNhbGxhYmxlIE5vZGVBY2Nlc3NvciBmb3IgbmVzdGVkIG9iamVjdHMgV0lUSE9VVCBhIGJhY2tpbmcgc2lnbmFsXG4gKiBUaGlzIGFjY2Vzc29yIHJlYWRzIGZyb20gYW5kIHdyaXRlcyB0byBjaGlsZCBzaWduYWxzIGRpcmVjdGx5XG4gKi9cbmZ1bmN0aW9uIG1ha2VOb2RlQWNjZXNzb3I8VD4oKTogTm9kZUFjY2Vzc29yPFQ+IHtcbiAgY29uc3QgYWNjZXNzb3IgPSBmdW5jdGlvbiAoYXJnPzogdW5rbm93bik6IFQgfCB2b2lkIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gUmVhZCBmcm9tIGNoaWxkIHNpZ25hbHMgLSB1c2UgdGhlIGFjY2Vzc29yIGl0c2VsZiBhcyB0aGUgY29udGV4dFxuICAgICAgcmV0dXJuIHVud3JhcChhY2Nlc3Nvcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZXIgPSBhcmcgYXMgKGN1cnJlbnQ6IFQpID0+IFQ7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB1bndyYXAoYWNjZXNzb3IpIGFzIFQ7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHVwZGF0ZXIoY3VycmVudFZhbHVlKTtcbiAgICAgIHJlY3Vyc2l2ZVVwZGF0ZShhY2Nlc3NvciwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEaXJlY3Qgc2V0XG4gICAgICByZWN1cnNpdmVVcGRhdGUoYWNjZXNzb3IsIGFyZyk7XG4gICAgfVxuICB9IGFzIE5vZGVBY2Nlc3NvcjxUPjtcblxuICAoYWNjZXNzb3IgYXMgTm9kZUFjY2Vzc29yPFQ+ICYgUmVjb3JkPHN5bWJvbCwgYm9vbGVhbj4pW1xuICAgIE5PREVfQUNDRVNTT1JfU1lNQk9MXG4gIF0gPSB0cnVlO1xuICByZXR1cm4gYWNjZXNzb3I7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIE5vZGVBY2Nlc3NvciBmb3IgdGhlIHJvb3QgdHJlZSB0aGF0IG1hbmFnZXMgYSBiYWNraW5nIHNpZ25hbFxuICovXG5mdW5jdGlvbiBtYWtlUm9vdE5vZGVBY2Nlc3NvcjxUPihcbiAgcmVhZFNpZ25hbDogU2lnbmFsPFQ+LFxuICB3cml0ZVNpZ25hbDogV3JpdGFibGVTaWduYWw8VD5cbik6IE5vZGVBY2Nlc3NvcjxUPiB7XG4gIGNvbnN0IGFjY2Vzc29yID0gZnVuY3Rpb24gKGFyZz86IHVua25vd24pOiBUIHwgdm9pZCB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiByZWFkU2lnbmFsKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZXIgPSBhcmcgYXMgKGN1cnJlbnQ6IFQpID0+IFQ7XG4gICAgICB3cml0ZVNpZ25hbC5zZXQodXBkYXRlcihyZWFkU2lnbmFsKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVTaWduYWwuc2V0KGFyZyBhcyBUKTtcbiAgICB9XG4gIH0gYXMgTm9kZUFjY2Vzc29yPFQ+O1xuXG4gIChhY2Nlc3NvciBhcyBOb2RlQWNjZXNzb3I8VD4gJiBSZWNvcmQ8c3ltYm9sLCBib29sZWFuPilbXG4gICAgTk9ERV9BQ0NFU1NPUl9TWU1CT0xcbiAgXSA9IHRydWU7XG4gIHJldHVybiBhY2Nlc3Nvcjtcbn1cblxuZnVuY3Rpb24gcmVjdXJzaXZlVXBkYXRlKHRhcmdldDogdW5rbm93biwgdXBkYXRlczogdW5rbm93bik6IHZvaWQge1xuICBpZiAoIXVwZGF0ZXMgfHwgdHlwZW9mIHVwZGF0ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHRhcmdldE9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gSGFuZGxlIE5vZGVBY2Nlc3NvciAoZnVuY3Rpb24pIGFzIHRhcmdldFxuICBpZiAoaXNOb2RlQWNjZXNzb3IodGFyZ2V0KSkge1xuICAgIHRhcmdldE9iaiA9IHRhcmdldCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0Jykge1xuICAgIHRhcmdldE9iaiA9IHRhcmdldCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB1cGRhdGVzT2JqID0gdXBkYXRlcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBmb3IgKGNvbnN0IGtleSBpbiB1cGRhdGVzT2JqKSB7XG4gICAgaWYgKCEoa2V5IGluIHRhcmdldE9iaikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldFByb3AgPSB0YXJnZXRPYmpba2V5XTtcbiAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IHVwZGF0ZXNPYmpba2V5XTtcblxuICAgIGlmIChpc1NpZ25hbCh0YXJnZXRQcm9wKSkge1xuICAgICAgLy8gTGVhZiBzaWduYWwgLSBjaGVjayBpZiBpdCdzIHdyaXRhYmxlXG4gICAgICBpZiAoJ3NldCcgaW4gdGFyZ2V0UHJvcCAmJiB0eXBlb2YgdGFyZ2V0UHJvcC5zZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgKHRhcmdldFByb3AgYXMgV3JpdGFibGVTaWduYWw8dW5rbm93bj4pLnNldCh1cGRhdGVWYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc05vZGVBY2Nlc3Nvcih0YXJnZXRQcm9wKSkge1xuICAgICAgLy8gRm9yIG5lc3RlZCBvYmplY3RzLCBjaGVjayBpZiB1cGRhdGVWYWx1ZSBpcyBhbiBvYmplY3QgZm9yIHJlY3Vyc2l2ZSB1cGRhdGVcbiAgICAgIGlmICh1cGRhdGVWYWx1ZSAmJiB0eXBlb2YgdXBkYXRlVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJlY3Vyc2l2ZVVwZGF0ZSh0YXJnZXRQcm9wLCB1cGRhdGVWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEaXJlY3QgdmFsdWUgYXNzaWdubWVudFxuICAgICAgICB0YXJnZXRQcm9wKHVwZGF0ZVZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhIE5vZGVBY2Nlc3NvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlQWNjZXNzb3IodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBOb2RlQWNjZXNzb3I8dW5rbm93bj4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHZhbHVlICYmXG4gICAgKHZhbHVlIGFzIHVua25vd24gYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW05PREVfQUNDRVNTT1JfU1lNQk9MXSA9PT0gdHJ1ZVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUEVSRk9STUFOQ0UgSEVVUklTVElDU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gZXN0aW1hdGVPYmplY3RTaXplKFxuICBvYmo6IHVua25vd24sXG4gIG1heERlcHRoID0gU0lHTkFMX1RSRUVfQ09OU1RBTlRTLkVTVElNQVRFX01BWF9ERVBUSCxcbiAgY3VycmVudERlcHRoID0gMFxuKTogbnVtYmVyIHtcbiAgaWYgKGN1cnJlbnREZXB0aCA+PSBtYXhEZXB0aCkgcmV0dXJuIDE7XG4gIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHJldHVybiAxO1xuXG4gIGxldCBzaXplID0gMDtcblxuICB0cnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHNpemUgPSBvYmoubGVuZ3RoO1xuICAgICAgY29uc3Qgc2FtcGxlU2l6ZSA9IE1hdGgubWluKFxuICAgICAgICBTSUdOQUxfVFJFRV9DT05TVEFOVFMuRVNUSU1BVEVfU0FNUExFX1NJWkVfQVJSQVksXG4gICAgICAgIG9iai5sZW5ndGhcbiAgICAgICk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbXBsZVNpemU7IGkrKykge1xuICAgICAgICBzaXplICs9IGVzdGltYXRlT2JqZWN0U2l6ZShvYmpbaV0sIG1heERlcHRoLCBjdXJyZW50RGVwdGggKyAxKSAqIDAuMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICBzaXplID0ga2V5cy5sZW5ndGg7XG4gICAgICBjb25zdCBzYW1wbGVTaXplID0gTWF0aC5taW4oXG4gICAgICAgIFNJR05BTF9UUkVFX0NPTlNUQU5UUy5FU1RJTUFURV9TQU1QTEVfU0laRV9PQkpFQ1QsXG4gICAgICAgIGtleXMubGVuZ3RoXG4gICAgICApO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAob2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXlzW2ldXTtcbiAgICAgICAgc2l6ZSArPSBlc3RpbWF0ZU9iamVjdFNpemUodmFsdWUsIG1heERlcHRoLCBjdXJyZW50RGVwdGggKyAxKSAqIDAuNTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguZmxvb3Ioc2l6ZSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZUxhenkoXG4gIG9iajogdW5rbm93bixcbiAgY29uZmlnOiBUcmVlQ29uZmlnLFxuICBwcmVjb21wdXRlZFNpemU/OiBudW1iZXJcbik6IGJvb2xlYW4ge1xuICBpZiAoY29uZmlnLnVzZUxhenlTaWduYWxzICE9PSB1bmRlZmluZWQpIHJldHVybiBjb25maWcudXNlTGF6eVNpZ25hbHM7XG4gIGlmIChjb25maWcuZGVidWdNb2RlIHx8IGNvbmZpZy5lbmFibGVEZXZUb29scykgcmV0dXJuIGZhbHNlO1xuICBpZiAoY29uZmlnLmJhdGNoVXBkYXRlcyAmJiBjb25maWcudXNlTWVtb2l6YXRpb24pIHJldHVybiB0cnVlO1xuICBjb25zdCBlc3RpbWF0ZWRTaXplID0gcHJlY29tcHV0ZWRTaXplID8/IGVzdGltYXRlT2JqZWN0U2l6ZShvYmopO1xuICByZXR1cm4gZXN0aW1hdGVkU2l6ZSA+IFNJR05BTF9UUkVFX0NPTlNUQU5UUy5MQVpZX1RIUkVTSE9MRDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXF1YWxpdHlGbih1c2VTaGFsbG93Q29tcGFyaXNvbjogYm9vbGVhbikge1xuICByZXR1cm4gdXNlU2hhbGxvd0NvbXBhcmlzb24gPyBPYmplY3QuaXMgOiBlcXVhbDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNJR05BTCBDUkVBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gY3JlYXRlU2lnbmFsU3RvcmU8VD4oXG4gIG9iajogVCxcbiAgZXF1YWxpdHlGbjogKGE6IHVua25vd24sIGI6IHVua25vd24pID0+IGJvb2xlYW5cbik6IFRyZWVOb2RlPFQ+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBzaWduYWwob2JqLCB7IGVxdWFsOiBlcXVhbGl0eUZuIH0pIGFzIHVua25vd24gYXMgVHJlZU5vZGU8VD47XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIHNpZ25hbChvYmosIHsgZXF1YWw6IGVxdWFsaXR5Rm4gfSkgYXMgdW5rbm93biBhcyBUcmVlTm9kZTxUPjtcbiAgfVxuXG4gIGlmIChpc0J1aWx0SW5PYmplY3Qob2JqKSkge1xuICAgIHJldHVybiBzaWduYWwob2JqLCB7IGVxdWFsOiBlcXVhbGl0eUZuIH0pIGFzIHVua25vd24gYXMgVHJlZU5vZGU8VD47XG4gIH1cblxuICBjb25zdCBzdG9yZTogUGFydGlhbDxUcmVlTm9kZTxUPj4gPSB7fTtcbiAgY29uc3QgcHJvY2Vzc2VkT2JqZWN0cyA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcblxuICBpZiAocHJvY2Vzc2VkT2JqZWN0cy5oYXMob2JqIGFzIG9iamVjdCkpIHtcbiAgICBjb25zb2xlLndhcm4oU0lHTkFMX1RSRUVfTUVTU0FHRVMuQ0lSQ1VMQVJfUkVGKTtcbiAgICByZXR1cm4gc2lnbmFsKG9iaiwgeyBlcXVhbDogZXF1YWxpdHlGbiB9KSBhcyB1bmtub3duIGFzIFRyZWVOb2RlPFQ+O1xuICB9XG4gIHByb2Nlc3NlZE9iamVjdHMuYWRkKG9iaiBhcyBvYmplY3QpO1xuXG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzeW1ib2wnKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3Rpbmcgc2lnbmFscyBhcy1pc1xuICAgICAgICAgIChzdG9yZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoc3RvcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSBzaWduYWwodmFsdWUsIHtcbiAgICAgICAgICAgIGVxdWFsOiBlcXVhbGl0eUZuLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAoc3RvcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSBzaWduYWwodmFsdWUsIHtcbiAgICAgICAgICAgIGVxdWFsOiBlcXVhbGl0eUZuLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IGlzQnVpbHRJbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAoc3RvcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSBzaWduYWwodmFsdWUsIHtcbiAgICAgICAgICAgIGVxdWFsOiBlcXVhbGl0eUZuLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5lc3RlZCBvYmplY3QgLSBjcmVhdGUgcmVjdXJzaXZlIHN0cnVjdHVyZVxuICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IGNyZWF0ZVNpZ25hbFN0b3JlKHZhbHVlLCBlcXVhbGl0eUZuKTtcblxuICAgICAgICAgIC8vIENyZWF0ZSBhIE5vZGVBY2Nlc3NvciBmb3IgdGhpcyBuZXN0ZWQgb2JqZWN0IChubyBiYWNraW5nIHNpZ25hbClcbiAgICAgICAgICBjb25zdCBjYWxsYWJsZUJyYW5jaCA9IG1ha2VOb2RlQWNjZXNzb3I8dHlwZW9mIHZhbHVlPigpO1xuXG4gICAgICAgICAgLy8gQ29weSBhbGwgdGhlIG5lc3RlZCBzaWduYWwgcHJvcGVydGllcyBvbnRvIHRoZSBjYWxsYWJsZSBicmFuY2hcbiAgICAgICAgICBmb3IgKGNvbnN0IGJyYW5jaEtleSBpbiBicmFuY2gpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYnJhbmNoLCBicmFuY2hLZXkpKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNhbGxhYmxlQnJhbmNoLCBicmFuY2hLZXksIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAoYnJhbmNoIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVticmFuY2hLZXldLFxuICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBpZiBwcm9wZXJ0eSBjYW4ndCBiZSBkZWZpbmVkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAoc3RvcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSBjYWxsYWJsZUJyYW5jaDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGAke1NJR05BTF9UUkVFX01FU1NBR0VTLlNJR05BTF9DUkVBVElPTl9GQUlMRUR9IFwiJHtrZXl9XCI6YCxcbiAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgICAgICAoc3RvcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSBzaWduYWwodmFsdWUsIHtcbiAgICAgICAgICBlcXVhbDogZXF1YWxpdHlGbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcbiAgICBmb3IgKGNvbnN0IHN5bSBvZiBzeW1ib2xzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChvYmogYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW3N5bV07XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICAgICAgKHN0b3JlIGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+KVtzeW1dID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKHN0b3JlIGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+KVtzeW1dID0gc2lnbmFsKHZhbHVlLCB7XG4gICAgICAgICAgICBlcXVhbDogZXF1YWxpdHlGbixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFNJR05BTF9UUkVFX01FU1NBR0VTLlNJR05BTF9DUkVBVElPTl9GQUlMRUQsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBjcmVhdGUgc2lnbmFsIHN0b3JlOiAke1xuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ1xuICAgICAgfWBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHN0b3JlIGFzIFRyZWVOb2RlPFQ+O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFJFRSBFTkhBTkNFTUVOVFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gZW5oYW5jZVRyZWU8VD4oXG4gIHRyZWU6IFNpZ25hbFRyZWU8VD4sXG4gIGNvbmZpZzogVHJlZUNvbmZpZyA9IHt9XG4pOiBTaWduYWxUcmVlPFQ+IHtcbiAgY29uc3QgaXNMYXp5ID0gY29uZmlnLnVzZUxhenlTaWduYWxzID8/IHNob3VsZFVzZUxhenkodHJlZS5zdGF0ZSwgY29uZmlnKTtcblxuICAvLyB3aXRoKCkgZW5oYW5jZXIgY29tcG9zaXRpb25cbiAgdHJlZS53aXRoID0gKDxFIGV4dGVuZHMgQXJyYXk8RW5oYW5jZXJXaXRoTWV0YTx1bmtub3duLCB1bmtub3duPj4+KFxuICAgIC4uLmVuaGFuY2VyczogRVxuICApOiBDaGFpblJlc3VsdDxTaWduYWxUcmVlPFQ+LCBFPiA9PiB7XG4gICAgaWYgKGVuaGFuY2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cmVlIGFzIHVua25vd24gYXMgQ2hhaW5SZXN1bHQ8U2lnbmFsVHJlZTxUPiwgRT47XG4gICAgfVxuXG4gICAgY29uc3QgY29yZUNhcGFiaWxpdGllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGlmIChjb25maWcuYmF0Y2hVcGRhdGVzKSBjb3JlQ2FwYWJpbGl0aWVzLmFkZCgnYmF0Y2hVcGRhdGUnKTtcbiAgICBpZiAoY29uZmlnLnVzZU1lbW9pemF0aW9uKSBjb3JlQ2FwYWJpbGl0aWVzLmFkZCgnbWVtb2l6ZScpO1xuICAgIGlmIChjb25maWcuZW5hYmxlVGltZVRyYXZlbCkgY29yZUNhcGFiaWxpdGllcy5hZGQoJ3VuZG8nKTtcbiAgICBpZiAoY29uZmlnLmVuYWJsZURldlRvb2xzKSBjb3JlQ2FwYWJpbGl0aWVzLmFkZCgnY29ubmVjdERldlRvb2xzJyk7XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModHJlZSkpIGNvcmVDYXBhYmlsaXRpZXMuYWRkKFN0cmluZyhrZXkpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yZSByZWZsZWN0aW9uIGlzc3Vlc1xuICAgIH1cblxuICAgIGNvbnN0IGhhc01ldGFkYXRhID0gZW5oYW5jZXJzLnNvbWUoKGUpID0+XG4gICAgICBCb29sZWFuKGUubWV0YWRhdGEgJiYgKGUubWV0YWRhdGEucmVxdWlyZXMgfHwgZS5tZXRhZGF0YS5wcm92aWRlcykpXG4gICAgKTtcblxuICAgIGxldCBvcmRlcmVkRW5oYW5jZXJzID0gZW5oYW5jZXJzIGFzIExvY2FsVW5rbm93bkVuaGFuY2VyW107XG5cbiAgICBpZiAoaGFzTWV0YWRhdGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9yZGVyZWRFbmhhbmNlcnMgPSByZXNvbHZlRW5oYW5jZXJPcmRlcihcbiAgICAgICAgICBlbmhhbmNlcnMgYXMgTG9jYWxVbmtub3duRW5oYW5jZXJbXSxcbiAgICAgICAgICBjb3JlQ2FwYWJpbGl0aWVzLFxuICAgICAgICAgIGNvbmZpZy5kZWJ1Z01vZGVcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oU0lHTkFMX1RSRUVfTUVTU0FHRVMuRU5IQU5DRVJfT1JERVJfRkFJTEVELCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3ZpZGVkID0gbmV3IFNldDxzdHJpbmc+KGNvcmVDYXBhYmlsaXRpZXMpO1xuICAgIGxldCBjdXJyZW50VHJlZTogdW5rbm93biA9IHRyZWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyZWRFbmhhbmNlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVuaGFuY2VyID0gb3JkZXJlZEVuaGFuY2Vyc1tpXTtcblxuICAgICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgU0lHTkFMX1RSRUVfTUVTU0FHRVMuRU5IQU5DRVJfTk9UX0ZVTkNUSU9OLnJlcGxhY2UoJyVkJywgU3RyaW5nKGkpKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXFzID0gZW5oYW5jZXIubWV0YWRhdGE/LnJlcXVpcmVzID8/IFtdO1xuICAgICAgZm9yIChjb25zdCByIG9mIHJlcXMpIHtcbiAgICAgICAgaWYgKCEociBpbiAoY3VycmVudFRyZWUgYXMgb2JqZWN0KSkgJiYgIXByb3ZpZGVkLmhhcyhyKSkge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSBlbmhhbmNlci5tZXRhZGF0YT8ubmFtZSA/PyBgZW5oYW5jZXIjJHtpfWA7XG4gICAgICAgICAgY29uc3QgbXNnID0gU0lHTkFMX1RSRUVfTUVTU0FHRVMuRU5IQU5DRVJfUkVRVUlSRU1FTlRfTUlTU0lORy5yZXBsYWNlKFxuICAgICAgICAgICAgJyVzJyxcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApLnJlcGxhY2UoJyVzJywgcik7XG4gICAgICAgICAgaWYgKGNvbmZpZy5kZWJ1Z01vZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4obXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZW5oYW5jZXIoY3VycmVudFRyZWUgYXMgdW5rbm93bik7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IGN1cnJlbnRUcmVlKSBjdXJyZW50VHJlZSA9IHJlc3VsdDtcblxuICAgICAgICBjb25zdCBwcm92cyA9IGVuaGFuY2VyLm1ldGFkYXRhPy5wcm92aWRlcyA/PyBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHByb3ZzKSBwcm92aWRlZC5hZGQocCk7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5kZWJ1Z01vZGUgJiYgcHJvdnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwcm92cykge1xuICAgICAgICAgICAgaWYgKCEocCBpbiAoY3VycmVudFRyZWUgYXMgb2JqZWN0KSkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIFNJR05BTF9UUkVFX01FU1NBR0VTLkVOSEFOQ0VSX1BST1ZJREVTX01JU1NJTkcucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICclcycsXG4gICAgICAgICAgICAgICAgICBlbmhhbmNlci5tZXRhZGF0YT8ubmFtZSA/PyBTdHJpbmcoaSlcbiAgICAgICAgICAgICAgICApLnJlcGxhY2UoJyVzJywgcClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBlbmhhbmNlci5tZXRhZGF0YT8ubmFtZSB8fCBgZW5oYW5jZXIgYXQgaW5kZXggJHtpfWA7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgU0lHTkFMX1RSRUVfTUVTU0FHRVMuRU5IQU5DRVJfRkFJTEVELnJlcGxhY2UoJyVzJywgbmFtZSksXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNvbmZpZy5kZWJ1Z01vZGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbU2lnbmFsVHJlZV0gRW5oYW5jZXIgc3RhY2sgdHJhY2U6JywgZW5oYW5jZXIpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTaWduYWxUcmVlXSBUcmVlIHN0YXRlIGF0IGZhaWx1cmU6JywgY3VycmVudFRyZWUpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50VHJlZSBhcyBDaGFpblJlc3VsdDxTaWduYWxUcmVlPFQ+LCBFPjtcbiAgfSkgYXMgdW5rbm93biBhcyBXaXRoTWV0aG9kPFQ+O1xuXG4gIC8vIGRlc3Ryb3kgdW5jaGFuZ2VkXG4gIHRyZWUuZGVzdHJveSA9ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKGlzTGF6eSkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRyZWUuc3RhdGUgYXMgdW5rbm93bjtcbiAgICAgICAgaWYgKHN0YXRlICYmIHR5cGVvZiBzdGF0ZSA9PT0gJ29iamVjdCcgJiYgJ19fY2xlYW51cF9fJyBpbiBzdGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGNsZWFudXAgPSAoc3RhdGUgYXMgeyBfX2NsZWFudXBfXzogdW5rbm93biB9KS5fX2NsZWFudXBfXztcbiAgICAgICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5kZWJ1Z01vZGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coU0lHTkFMX1RSRUVfTUVTU0FHRVMuVFJFRV9ERVNUUk9ZRUQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFNJR05BTF9UUkVFX01FU1NBR0VTLkNMRUFOVVBfRVJST1IsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gQWRkIHN0dWIgaW1wbGVtZW50YXRpb25zIGZvciBhZHZhbmNlZCBmZWF0dXJlc1xuICBhZGRTdHViTWV0aG9kcyh0cmVlLCBjb25maWcpO1xuXG4gIHJldHVybiB0cmVlO1xufVxuXG5mdW5jdGlvbiBhZGRTdHViTWV0aG9kczxUPih0cmVlOiBTaWduYWxUcmVlPFQ+LCBjb25maWc6IFRyZWVDb25maWcpOiB2b2lkIHtcbiAgdHJlZS5iYXRjaFVwZGF0ZSA9ICh1cGRhdGVyOiAoY3VycmVudDogVCkgPT4gUGFydGlhbDxUPikgPT4ge1xuICAgIGNvbnNvbGUud2FybihTSUdOQUxfVFJFRV9NRVNTQUdFUy5CQVRDSF9OT1RfRU5BQkxFRCk7XG4gICAgdHJlZSgoY3VycmVudDogVCkgPT4ge1xuICAgICAgY29uc3QgcGFydGlhbCA9IHVwZGF0ZXIoY3VycmVudCk7XG4gICAgICByZXR1cm4geyAuLi5jdXJyZW50LCAuLi5wYXJ0aWFsIH0gYXMgVDtcbiAgICB9KTtcbiAgfTtcblxuICB0cmVlLm1lbW9pemUgPSA8Uj4oZm46ICh0cmVlOiBUKSA9PiBSLCBjYWNoZUtleT86IHN0cmluZyk6IFNpZ25hbDxSPiA9PiB7XG4gICAgY29uc29sZS53YXJuKFNJR05BTF9UUkVFX01FU1NBR0VTLk1FTU9JWkVfTk9UX0VOQUJMRUQpO1xuICAgIHZvaWQgY2FjaGVLZXk7XG4gICAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IGZuKHRyZWUoKSkpO1xuICB9O1xuXG4gIC8vIE1lbW9pemF0aW9uIGhlbHBlciBzdHVicyAob3ZlcnJpZGRlbiBieSB3aXRoTWVtb2l6YXRpb24pXG4gIChcbiAgICB0cmVlIGFzIHVua25vd24gYXMge1xuICAgICAgbWVtb2l6ZWRVcGRhdGU6IChcbiAgICAgICAgdXBkYXRlcjogKGN1cnJlbnQ6IFQpID0+IFBhcnRpYWw8VD4sXG4gICAgICAgIGNhY2hlS2V5Pzogc3RyaW5nXG4gICAgICApID0+IHZvaWQ7XG4gICAgICBjbGVhck1lbW9DYWNoZTogKGtleT86IHN0cmluZykgPT4gdm9pZDtcbiAgICAgIGdldENhY2hlU3RhdHM6ICgpID0+IHtcbiAgICAgICAgc2l6ZTogbnVtYmVyO1xuICAgICAgICBoaXRSYXRlOiBudW1iZXI7XG4gICAgICAgIHRvdGFsSGl0czogbnVtYmVyO1xuICAgICAgICB0b3RhbE1pc3NlczogbnVtYmVyO1xuICAgICAgICBrZXlzOiBzdHJpbmdbXTtcbiAgICAgIH07XG4gICAgfVxuICApLm1lbW9pemVkVXBkYXRlID0gKHVwZGF0ZXI6IChjdXJyZW50OiBUKSA9PiBQYXJ0aWFsPFQ+KTogdm9pZCA9PiB7XG4gICAgaWYgKGNvbmZpZy5kZWJ1Z01vZGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihTSUdOQUxfVFJFRV9NRVNTQUdFUy5NRU1PSVpFX05PVF9FTkFCTEVEKTtcbiAgICB9XG4gICAgLy8gRmFsbGJhY2s6IGFwcGx5IHRoZSB1cGRhdGUgd2l0aG91dCBjYWNoaW5nXG4gICAgdHJlZSgoY3VycmVudDogVCkgPT4gKHsgLi4uY3VycmVudCwgLi4udXBkYXRlcihjdXJyZW50KSB9KSk7XG4gIH07XG5cbiAgKFxuICAgIHRyZWUgYXMgdW5rbm93biBhcyB7IGNsZWFyTWVtb0NhY2hlOiAoa2V5Pzogc3RyaW5nKSA9PiB2b2lkIH1cbiAgKS5jbGVhck1lbW9DYWNoZSA9ICgpID0+IHtcbiAgICBpZiAoY29uZmlnLmRlYnVnTW9kZSkge1xuICAgICAgY29uc29sZS53YXJuKFNJR05BTF9UUkVFX01FU1NBR0VTLk1FTU9JWkVfTk9UX0VOQUJMRUQpO1xuICAgIH1cbiAgICAvLyBuby1vcFxuICB9O1xuXG4gIChcbiAgICB0cmVlIGFzIHVua25vd24gYXMge1xuICAgICAgZ2V0Q2FjaGVTdGF0czogKCkgPT4ge1xuICAgICAgICBzaXplOiBudW1iZXI7XG4gICAgICAgIGhpdFJhdGU6IG51bWJlcjtcbiAgICAgICAgdG90YWxIaXRzOiBudW1iZXI7XG4gICAgICAgIHRvdGFsTWlzc2VzOiBudW1iZXI7XG4gICAgICAgIGtleXM6IHN0cmluZ1tdO1xuICAgICAgfTtcbiAgICB9XG4gICkuZ2V0Q2FjaGVTdGF0cyA9ICgpID0+ICh7XG4gICAgc2l6ZTogMCxcbiAgICBoaXRSYXRlOiAwLFxuICAgIHRvdGFsSGl0czogMCxcbiAgICB0b3RhbE1pc3NlczogMCxcbiAgICBrZXlzOiBbXSxcbiAgfSk7XG5cbiAgLy8gTWVtb2l6YXRpb24gaGVscGVyIG1ldGhvZHMgYXJlIG9ubHkgcHJlc2VudCB3aGVuIHdpdGhNZW1vaXphdGlvbiBpcyBhcHBsaWVkXG5cbiAgdHJlZS5lZmZlY3QgPSAoZm46ICh0cmVlOiBUKSA9PiB2b2lkKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGVmZmVjdCgoKSA9PiBmbih0cmVlKCkpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGNvbmZpZy5kZWJ1Z01vZGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFNJR05BTF9UUkVFX01FU1NBR0VTLkVGRkVDVF9OT19DT05URVhULCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHRyZWUuc3Vic2NyaWJlID0gKGZuOiAodHJlZTogVCkgPT4gdm9pZCk6ICgoKSA9PiB2b2lkKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgICBsZXQgaXNEZXN0cm95ZWQgPSBmYWxzZTtcblxuICAgICAgY29uc3QgZWZmZWN0UmVmID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIGZuKHRyZWUoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICBlZmZlY3RSZWYuZGVzdHJveSgpO1xuICAgICAgfTtcblxuICAgICAgZGVzdHJveVJlZi5vbkRlc3Ryb3kodW5zdWJzY3JpYmUpO1xuICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoY29uZmlnLmRlYnVnTW9kZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oU0lHTkFMX1RSRUVfTUVTU0FHRVMuU1VCU0NSSUJFX05PX0NPTlRFWFQsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIGZuKHRyZWUoKSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAvLyBOby1vcFxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUGVyZm9ybWFuY2Ugc3R1YnNcbiAgdHJlZS5vcHRpbWl6ZSA9ICgpID0+IHtcbiAgICBpZiAoY29uZmlnLmRlYnVnTW9kZSkge1xuICAgICAgY29uc29sZS53YXJuKFNJR05BTF9UUkVFX01FU1NBR0VTLk9QVElNSVpFX05PVF9BVkFJTEFCTEUpO1xuICAgIH1cbiAgfTtcblxuICB0cmVlLmNsZWFyQ2FjaGUgPSAoKSA9PiB7XG4gICAgaWYgKGNvbmZpZy5kZWJ1Z01vZGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihTSUdOQUxfVFJFRV9NRVNTQUdFUy5DQUNIRV9OT1RfQVZBSUxBQkxFKTtcbiAgICB9XG4gIH07XG5cbiAgdHJlZS5pbnZhbGlkYXRlUGF0dGVybiA9ICgpOiBudW1iZXIgPT4ge1xuICAgIGlmIChjb25maWcuZGVidWdNb2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oU0lHTkFMX1RSRUVfTUVTU0FHRVMuUEVSRk9STUFOQ0VfTk9UX0VOQUJMRUQpO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfTtcblxuICB0cmVlLmdldE1ldHJpY3MgPSAoKTogUGVyZm9ybWFuY2VNZXRyaWNzID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBkYXRlczogMCxcbiAgICAgIGNvbXB1dGF0aW9uczogMCxcbiAgICAgIGNhY2hlSGl0czogMCxcbiAgICAgIGNhY2hlTWlzc2VzOiAwLFxuICAgICAgYXZlcmFnZVVwZGF0ZVRpbWU6IDAsXG4gICAgfTtcbiAgfTtcblxuICAvLyBNaWRkbGV3YXJlIHN0dWJzXG4gIHRyZWUuYWRkVGFwID0gKG1pZGRsZXdhcmU6IE1pZGRsZXdhcmU8VD4pID0+IHtcbiAgICBpZiAoY29uZmlnLmRlYnVnTW9kZSkge1xuICAgICAgY29uc29sZS53YXJuKFNJR05BTF9UUkVFX01FU1NBR0VTLk1JRERMRVdBUkVfTk9UX0FWQUlMQUJMRSk7XG4gICAgfVxuICAgIHZvaWQgbWlkZGxld2FyZTtcbiAgfTtcblxuICB0cmVlLnJlbW92ZVRhcCA9IChpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGNvbmZpZy5kZWJ1Z01vZGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihTSUdOQUxfVFJFRV9NRVNTQUdFUy5NSURETEVXQVJFX05PVF9BVkFJTEFCTEUpO1xuICAgIH1cbiAgICB2b2lkIGlkO1xuICB9O1xuXG4gIC8vIEVudGl0eSBoZWxwZXJzIHN0dWJcbiAgdHJlZS5lbnRpdGllcyA9IDxFIGV4dGVuZHMgeyBpZDogc3RyaW5nIHwgbnVtYmVyIH0+KCk6IEVudGl0eUhlbHBlcnM8RT4gPT4ge1xuICAgIGlmIChjb25maWcuZGVidWdNb2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oU0lHTkFMX1RSRUVfTUVTU0FHRVMuRU5USVRZX0hFTFBFUlNfTk9UX0FWQUlMQUJMRSk7XG4gICAgfVxuICAgIHJldHVybiB7fSBhcyBFbnRpdHlIZWxwZXJzPEU+O1xuICB9O1xuXG4gIC8vIEFzeW5jIGFjdGlvbiBzdHViXG4gIHRyZWUuYXN5bmNBY3Rpb24gPSA8VElucHV0LCBUUmVzdWx0PihcbiAgICBvcGVyYXRpb246IChpbnB1dDogVElucHV0KSA9PiBQcm9taXNlPFRSZXN1bHQ+LFxuICAgIGFzeW5jQ29uZmlnOiBBc3luY0FjdGlvbkNvbmZpZzxULCBUUmVzdWx0PiA9IHt9XG4gICk6IEFzeW5jQWN0aW9uPFRJbnB1dCwgVFJlc3VsdD4gPT4ge1xuICAgIGlmIChjb25maWcuZGVidWdNb2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oU0lHTkFMX1RSRUVfTUVTU0FHRVMuQVNZTkNfQUNUSU9OU19OT1RfQVZBSUxBQkxFKTtcbiAgICB9XG4gICAgdm9pZCBvcGVyYXRpb247XG4gICAgdm9pZCBhc3luY0NvbmZpZztcbiAgICByZXR1cm4ge30gYXMgQXN5bmNBY3Rpb248VElucHV0LCBUUmVzdWx0PjtcbiAgfTtcblxuICAvLyBUaW1lIHRyYXZlbCBzdHVic1xuICB0cmVlLnVuZG8gPSAoKSA9PiB7XG4gICAgaWYgKGNvbmZpZy5kZWJ1Z01vZGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihTSUdOQUxfVFJFRV9NRVNTQUdFUy5USU1FX1RSQVZFTF9OT1RfQVZBSUxBQkxFKTtcbiAgICB9XG4gIH07XG5cbiAgdHJlZS5yZWRvID0gKCkgPT4ge1xuICAgIGlmIChjb25maWcuZGVidWdNb2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oU0lHTkFMX1RSRUVfTUVTU0FHRVMuVElNRV9UUkFWRUxfTk9UX0FWQUlMQUJMRSk7XG4gICAgfVxuICB9O1xuXG4gIHRyZWUuZ2V0SGlzdG9yeSA9ICgpOiBUaW1lVHJhdmVsRW50cnk8VD5bXSA9PiB7XG4gICAgaWYgKGNvbmZpZy5kZWJ1Z01vZGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihTSUdOQUxfVFJFRV9NRVNTQUdFUy5USU1FX1RSQVZFTF9OT1RfQVZBSUxBQkxFKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9O1xuXG4gIHRyZWUucmVzZXRIaXN0b3J5ID0gKCkgPT4ge1xuICAgIGlmIChjb25maWcuZGVidWdNb2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oU0lHTkFMX1RSRUVfTUVTU0FHRVMuVElNRV9UUkFWRUxfTk9UX0FWQUlMQUJMRSk7XG4gICAgfVxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ09SRSBDUkVBVElPTiBGVU5DVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gY3JlYXRlPFQ+KG9iajogVCwgY29uZmlnOiBUcmVlQ29uZmlnID0ge30pOiBTaWduYWxUcmVlPFQ+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihTSUdOQUxfVFJFRV9NRVNTQUdFUy5OVUxMX09SX1VOREVGSU5FRCk7XG4gIH1cblxuICBjb25zdCBlc3RpbWF0ZWRTaXplID0gZXN0aW1hdGVPYmplY3RTaXplKG9iaik7XG4gIGNvbnN0IGVxdWFsaXR5Rm4gPSBjcmVhdGVFcXVhbGl0eUZuKGNvbmZpZy51c2VTaGFsbG93Q29tcGFyaXNvbiA/PyBmYWxzZSk7XG5cbiAgLy8gQVJSQVkgUk9PVCBNT0RFOiBhcnJheXMgYXJlIHRyZWF0ZWQgYXMgc2luZ2xlIHNpZ25hbHNcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGNvbnN0IHNpZ25hbFN0YXRlID0gc2lnbmFsKG9iaiBhcyB1bmtub3duIGFzIFQsIHtcbiAgICAgIGVxdWFsOiBlcXVhbGl0eUZuLFxuICAgIH0pIGFzIFdyaXRhYmxlU2lnbmFsPFQ+O1xuXG4gICAgY29uc3QgdHJlZSA9IG1ha2VSb290Tm9kZUFjY2Vzc29yKFxuICAgICAgc2lnbmFsU3RhdGUsXG4gICAgICBzaWduYWxTdGF0ZVxuICAgICkgYXMgU2lnbmFsVHJlZTxUPjtcblxuICAgIC8vIEFkZCBzdGF0ZSBhbmQgJCBwcm9wZXJ0aWVzIHRoYXQgcmVmZXJlbmNlIHRoZSBzaWduYWwgaXRzZWxmXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRyZWUsICdzdGF0ZScsIHtcbiAgICAgIHZhbHVlOiBzaWduYWxTdGF0ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0cmVlLCAnJCcsIHsgdmFsdWU6IHNpZ25hbFN0YXRlLCBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcblxuICAgIGVuaGFuY2VUcmVlKHRyZWUsIGNvbmZpZyk7XG4gICAgcmV0dXJuIHRyZWU7XG4gIH1cblxuICBjb25zdCB1c2VMYXp5ID0gc2hvdWxkVXNlTGF6eShvYmosIGNvbmZpZywgZXN0aW1hdGVkU2l6ZSk7XG5cbiAgaWYgKGNvbmZpZy5kZWJ1Z01vZGUpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIFNJR05BTF9UUkVFX01FU1NBR0VTLlNUUkFURUdZX1NFTEVDVElPTi5yZXBsYWNlKFxuICAgICAgICAnJXMnLFxuICAgICAgICB1c2VMYXp5ID8gJ2xhenknIDogJ2VhZ2VyJ1xuICAgICAgKS5yZXBsYWNlKCclZCcsIFN0cmluZyhlc3RpbWF0ZWRTaXplKSlcbiAgICApO1xuICB9XG5cbiAgbGV0IHNpZ25hbFN0YXRlOiBUcmVlTm9kZTxUPjtcblxuICB0cnkge1xuICAgIGlmICh1c2VMYXp5ICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICBzaWduYWxTdGF0ZSA9IGNyZWF0ZUxhenlTaWduYWxUcmVlKFxuICAgICAgICBvYmogYXMgb2JqZWN0LFxuICAgICAgICBlcXVhbGl0eUZuXG4gICAgICApIGFzIFRyZWVOb2RlPFQ+O1xuICAgIH0gZWxzZSB7XG4gICAgICBzaWduYWxTdGF0ZSA9IGNyZWF0ZVNpZ25hbFN0b3JlKG9iaiwgZXF1YWxpdHlGbikgYXMgVHJlZU5vZGU8VD47XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh1c2VMYXp5KSB7XG4gICAgICBjb25zb2xlLndhcm4oU0lHTkFMX1RSRUVfTUVTU0FHRVMuTEFaWV9GQUxMQkFDSywgZXJyb3IpO1xuICAgICAgc2lnbmFsU3RhdGUgPSBjcmVhdGVTaWduYWxTdG9yZShvYmosIGVxdWFsaXR5Rm4pIGFzIFRyZWVOb2RlPFQ+O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvLyBDcmVhdGUgY2FsbGFibGUgdHJlZSBmdW5jdGlvbiBmb3IgdGhlIHJvb3RcbiAgY29uc3QgdHJlZSA9IGZ1bmN0aW9uIChhcmc/OiB1bmtub3duKTogVCB8IHZvaWQge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW53cmFwKHNpZ25hbFN0YXRlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZXIgPSBhcmcgYXMgKGN1cnJlbnQ6IFQpID0+IFQ7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB1bndyYXAoc2lnbmFsU3RhdGUpO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB1cGRhdGVyKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAvLyBVc2UgcmVjdXJzaXZlIHVwZGF0ZSB0byBwcmVzZXJ2ZSBzaWduYWxzXG4gICAgICByZWN1cnNpdmVVcGRhdGUoc2lnbmFsU3RhdGUsIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGlyZWN0IHNldCAtIHVzZSByZWN1cnNpdmUgdXBkYXRlXG4gICAgICByZWN1cnNpdmVVcGRhdGUoc2lnbmFsU3RhdGUsIGFyZyk7XG4gICAgfVxuICB9IGFzIFNpZ25hbFRyZWU8VD47XG5cbiAgLy8gTWFyayBhcyBOb2RlQWNjZXNzb3JcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRyZWUsIE5PREVfQUNDRVNTT1JfU1lNQk9MLCB7XG4gICAgdmFsdWU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gIH0pO1xuXG4gIC8vIEFkZCBzdGF0ZSBhbmQgJCBwcm9wZXJ0aWVzIGZpcnN0ICh0aGVzZSBhcmUgc2FmZSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRyZWUsICdzdGF0ZScsIHtcbiAgICB2YWx1ZTogc2lnbmFsU3RhdGUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHJlZSwgJyQnLCB7IHZhbHVlOiBzaWduYWxTdGF0ZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG5cbiAgLy8gRW5oYW5jZSB0cmVlIHdpdGggbWV0aG9kc1xuICBlbmhhbmNlVHJlZSh0cmVlLCBjb25maWcpO1xuXG4gIC8vIEF0dGFjaCBzaWduYWwgc3RhdGUgcHJvcGVydGllcyB0byB0aGUgdHJlZSBBRlRFUiBlbmhhbmNlbWVudFxuICAvLyBUaGlzIHByZXZlbnRzIGNvbmZsaWN0cyB3aXRoIGJ1aWx0LWluIG1ldGhvZHNcbiAgZm9yIChjb25zdCBrZXkgaW4gc2lnbmFsU3RhdGUpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNpZ25hbFN0YXRlLCBrZXkpKSB7XG4gICAgICAvLyBTa2lwIGlmIHRoZSBwcm9wZXJ0eSBhbHJlYWR5IGV4aXN0cyAoZnJvbSBlbmhhbmNlbWVudClcbiAgICAgIGlmICghKGtleSBpbiB0cmVlKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0cmVlLCBrZXksIHtcbiAgICAgICAgICAgIHZhbHVlOiAoc2lnbmFsU3RhdGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0sXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBTa2lwIGlmIHByb3BlcnR5IGNhbid0IGJlIGRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cmVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUFJFU0VUIENPTkZJR1VSQVRJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBwcmVzZXRDb25maWdzOiBSZWNvcmQ8VHJlZVByZXNldCwgUGFydGlhbDxUcmVlQ29uZmlnPj4gPSB7XG4gIGJhc2ljOiB7XG4gICAgdXNlTGF6eVNpZ25hbHM6IGZhbHNlLFxuICAgIGRlYnVnTW9kZTogZmFsc2UsXG4gIH0sXG4gIHBlcmZvcm1hbmNlOiB7XG4gICAgdXNlTGF6eVNpZ25hbHM6IHRydWUsXG4gICAgYmF0Y2hVcGRhdGVzOiB0cnVlLFxuICAgIHVzZU1lbW9pemF0aW9uOiB0cnVlLFxuICAgIHVzZVNoYWxsb3dDb21wYXJpc29uOiB0cnVlLFxuICB9LFxuICBkZXZlbG9wbWVudDoge1xuICAgIHVzZUxhenlTaWduYWxzOiBmYWxzZSxcbiAgICBkZWJ1Z01vZGU6IHRydWUsXG4gICAgZW5hYmxlRGV2VG9vbHM6IHRydWUsXG4gICAgdHJhY2tQZXJmb3JtYW5jZTogdHJ1ZSxcbiAgfSxcbiAgcHJvZHVjdGlvbjoge1xuICAgIHVzZUxhenlTaWduYWxzOiB0cnVlLFxuICAgIGJhdGNoVXBkYXRlczogdHJ1ZSxcbiAgICB1c2VNZW1vaXphdGlvbjogdHJ1ZSxcbiAgICBkZWJ1Z01vZGU6IGZhbHNlLFxuICB9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFBVQkxJQyBBUElcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYWxUcmVlPFQ+KG9iajogVCk6IFNpZ25hbFRyZWU8VD47XG5leHBvcnQgZnVuY3Rpb24gc2lnbmFsVHJlZTxUPihvYmo6IFQsIHByZXNldDogVHJlZVByZXNldCk6IFNpZ25hbFRyZWU8VD47XG5leHBvcnQgZnVuY3Rpb24gc2lnbmFsVHJlZTxUPihvYmo6IFQsIGNvbmZpZzogVHJlZUNvbmZpZyk6IFNpZ25hbFRyZWU8VD47XG5leHBvcnQgZnVuY3Rpb24gc2lnbmFsVHJlZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICBvYmo6IFJlcXVpcmVkPFQ+LFxuICBjb25maWdPclByZXNldD86IFRyZWVDb25maWcgfCBUcmVlUHJlc2V0XG4pOiBTaWduYWxUcmVlPFJlcXVpcmVkPFQ+PjtcbmV4cG9ydCBmdW5jdGlvbiBzaWduYWxUcmVlPFQ+KFxuICBvYmo6IFQsXG4gIGNvbmZpZ09yUHJlc2V0PzogVHJlZUNvbmZpZyB8IFRyZWVQcmVzZXRcbik6IFNpZ25hbFRyZWU8VD47XG5leHBvcnQgZnVuY3Rpb24gc2lnbmFsVHJlZTxUPihcbiAgb2JqOiBULFxuICBjb25maWdPclByZXNldD86IFRyZWVDb25maWcgfCBUcmVlUHJlc2V0XG4pOiBTaWduYWxUcmVlPFQ+IHtcbiAgaWYgKHR5cGVvZiBjb25maWdPclByZXNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBjb25maWcgPSBwcmVzZXRDb25maWdzW2NvbmZpZ09yUHJlc2V0XTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBTSUdOQUxfVFJFRV9NRVNTQUdFUy5QUkVTRVRfVU5LTk9XTi5yZXBsYWNlKCclcycsIGNvbmZpZ09yUHJlc2V0KVxuICAgICAgKTtcbiAgICAgIHJldHVybiBjcmVhdGUob2JqLCB7fSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGUob2JqLCBjb25maWcpO1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gY29uZmlnT3JQcmVzZXQgfHwge307XG4gIHJldHVybiBjcmVhdGUob2JqLCBjb25maWcpO1xufVxuXG4vKipcbiAqIFR5cGVkIGhlbHBlciB0byBhcHBseSBhIHNpbmdsZSBlbmhhbmNlciB0byBhIHRyZWUgd2hlbiBgLndpdGhgIGluZmVyZW5jZVxuICogcHJvZHVjZXMgYHVua25vd25gLiBUaGlzIGlzIGEgcHJhZ21hdGljIGVzY2FwZSBoYXRjaCBmb3IgdGVzdHMgYW5kXG4gKiBtaWdyYXRpb24gdW50aWwgYC53aXRoYCBvdmVybG9hZHMgYXJlIHNpbXBsaWZpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUVuaGFuY2VyPFQsIE8+KFxuICB0cmVlOiBTaWduYWxUcmVlPFQ+LFxuICBlbmhhbmNlcjogRW5oYW5jZXJXaXRoTWV0YTxTaWduYWxUcmVlPFQ+LCBPPlxuKTogTyB7XG4gIHJldHVybiBlbmhhbmNlcih0cmVlKSBhcyBPO1xufVxuIl19"],"names":["isNodeAccessor"],"mappings":"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"}