@kepler.gl/reducers 3.3.0-alpha.16 → 3.3.0-alpha.17

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 (38) hide show
  1. package/dist/cjs/column-edit-reconcile.js +100 -0
  2. package/dist/cjs/column-edit-updaters.spec.js +840 -0
  3. package/dist/cjs/dataset-ops-updaters.js +101 -15
  4. package/dist/cjs/dataset-ops-updaters.spec.js +129 -4
  5. package/dist/cjs/export-utils.js +118 -46
  6. package/dist/cjs/interaction-utils.js +11 -3
  7. package/dist/cjs/layer-utils.js +3 -2
  8. package/dist/cjs/ui-state-updaters.js +70 -26
  9. package/dist/cjs/ui-state.js +2 -2
  10. package/dist/cjs/vis-state-merger-text-label.spec.js +75 -0
  11. package/dist/cjs/vis-state-merger.js +65 -22
  12. package/dist/cjs/vis-state-updaters.js +581 -177
  13. package/dist/cjs/vis-state.js +2 -2
  14. package/dist/column-edit-reconcile.d.ts +4 -0
  15. package/dist/column-edit-updaters.spec.d.ts +1 -0
  16. package/dist/dataset-ops-updaters.d.ts +3 -0
  17. package/dist/esm/column-edit-reconcile.js +95 -0
  18. package/dist/esm/column-edit-updaters.spec.js +839 -0
  19. package/dist/esm/dataset-ops-updaters.js +99 -16
  20. package/dist/esm/dataset-ops-updaters.spec.js +129 -4
  21. package/dist/esm/export-utils.js +117 -45
  22. package/dist/esm/interaction-utils.js +10 -3
  23. package/dist/esm/layer-utils.js +3 -2
  24. package/dist/esm/ui-state-updaters.js +69 -25
  25. package/dist/esm/ui-state.js +2 -2
  26. package/dist/esm/vis-state-merger-text-label.spec.js +74 -0
  27. package/dist/esm/vis-state-merger.js +66 -24
  28. package/dist/esm/vis-state-updaters.js +571 -185
  29. package/dist/esm/vis-state.js +2 -2
  30. package/dist/export-utils.d.ts +2 -2
  31. package/dist/interaction-utils.d.ts +4 -1
  32. package/dist/layer-utils.d.ts +1 -0
  33. package/dist/ui-state-updaters.d.ts +10 -0
  34. package/dist/vis-state-merger-text-label.spec.d.ts +1 -0
  35. package/dist/vis-state-merger.d.ts +10 -2
  36. package/dist/vis-state-updaters.d.ts +31 -4
  37. package/dist/vis-state.d.ts +4 -0
  38. package/package.json +17 -17
@@ -169,7 +169,8 @@ export function getLayerHoverProp(_ref) {
169
169
  fields: fields,
170
170
  fieldsToShow: fieldsToShow,
171
171
  layer: layer,
172
- currentTime: animationConfig.currentTime
172
+ currentTime: animationConfig.currentTime,
173
+ timezone: interactionConfig.tooltip.config.timezone
173
174
  };
174
175
  }
175
176
  }
@@ -730,4 +731,4 @@ export function areAnyDeckLayersLoading(layers) {
730
731
  return layer.internalState && !layer.isLoaded;
731
732
  });
732
733
  }
733
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zb2xlIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIk9WRVJMQVlfVFlQRV9DT05TVCIsImdldEVkaXRvckxheWVyIiwiaXNGdW5jdGlvbiIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJEYXRhUm93IiwiaXNQbGFpbk9iamVjdCIsImFycmF5TW92ZSIsImdlbmVyYXRlSGFzaElkIiwiZ2V0TGF5ZXJab29tT3BhY2l0eUZhY3RvciIsIlRocmVlREJ1aWxkaW5nTGF5ZXIiLCJmaW5kRGVmYXVsdExheWVyIiwiZGF0YXNldCIsImxheWVyQ2xhc3NlcyIsImxheWVyUHJvcHMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicHJldmlvdXMiLCJsYyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsInByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwiZm91bmRMYXllcnMiLCJjb25jYXQiLCJtYXAiLCJwIiwiX29iamVjdFNwcmVhZCIsInR5cGUiLCJkYXRhSWQiLCJpZCIsImlzVmlzaWJsZSIsImxheWVyIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwiZGF0YUNvbnRhaW5lciIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInN0YXRlIiwicGF0Y2giLCJkYXRhc2V0SWRzVG9QYXRjaCIsImxlbmd0aCIsImhhc0RlZmluZWRQYXRjaFZhbHVlIiwic29tZSIsImtleSIsInVuZGVmaW5lZCIsImRhdGFzZXRJZFNldCIsIlNldCIsImxheWVycyIsImNvbmZpZyIsImhhcyIsInNldHRpbmdzIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJhbGxvd2VkS2V5cyIsImZpbHRlciIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInBhcnRpYWwiLCJhY2MiLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsImNhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsImxheWVyRGF0YSIsImlzVmFsaWQiLCJfb2xkRGF0YVVwZGF0ZVRyaWdnZXJzIiwiaGFzQWxsQ29sdW1ucyIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwidXBkYXRlTGF5ZXJDb25maWciLCJlcnJvck1lc3NhZ2UiLCJlcnIiLCJlcnJvciIsIkVycm9yIiwibWVzc2FnZSIsInN1YnN0cmluZyIsImdldExheWVySG92ZXJQcm9wIiwiX3JlZiIsImFuaW1hdGlvbkNvbmZpZyIsImludGVyYWN0aW9uQ29uZmlnIiwiaG92ZXJJbmZvIiwibGF5ZXJzVG9SZW5kZXIiLCJ0b29sdGlwIiwiZW5hYmxlZCIsInBpY2tlZCIsIm9iamVjdCIsIm92ZXJsYXkiLCJpZHgiLCJpbmRleCIsImdldEhvdmVyRGF0YSIsIl9kYXRhc2V0cyRkYXRhSWQiLCJmaWVsZHMiLCJkYXRhIiwiZmllbGRzVG9TaG93IiwiY3VycmVudFRpbWUiLCJaT09NX09QQUNJVFlfUFJPUF9LRVlTIiwic2NhbGVab29tT3BhY2l0eVN1YkxheWVyUHJvcHMiLCJzdWJMYXllclByb3BzIiwiZmFjdG9yIiwiY2hhbmdlZCIsIm5leHQiLCJfaSIsIl9PYmplY3Qka2V5cyIsInN1YmxheWVyIiwiX3R5cGVvZiIsInNjYWxlZCIsInN1YmxheWVyQ2hhbmdlZCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImUiLCJmIiwiYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyIiwiZGVja0xheWVyIiwiX2RlY2tMYXllciRwcm9wcyIsIl9kZWNrTGF5ZXIkcHJvcHMyIiwiX2RlY2tMYXllciRwcm9wczMiLCJjbG9uZSIsImJhc2VPcGFjaXR5Iiwib3BhY2l0eSIsIl9zdWJMYXllclByb3BzIiwidmlzaWJsZSIsInJlbmRlckRlY2tHbExheWVyIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckluZGV4IiwiY2xpY2tlZCIsIm1hcFN0YXRlIiwibWFwTGF5ZXJzIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsIl9yZWYyIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsIkJvb2xlYW4iLCJyZW5kZXJlZCIsInJlbmRlckxheWVyIiwiem9vbSIsImlzTGF5ZXJSZW5kZXJhYmxlIiwic2hvdWxkUmVuZGVyTGF5ZXIiLCJpc0xheWVyVmlzaWJsZSIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwiYWNjdSIsIl9kZWZpbmVQcm9wZXJ0eSIsIm92ZXJsYXlUeXBlIiwiZGVja2dsIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwiZ2V0Q3VzdG9tRGVja0xheWVycyIsImRlY2tHbFByb3BzIiwiYm90dG9tRGVja0xheWVycyIsInRvcERlY2tMYXllcnMiLCJ0b3BMYXllcnMiLCJiaW5kTGF5ZXJDYWxsYmFja3MiLCJhcmd1bWVudHMiLCJ2YWwiLCJjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyIiwibGF5ZXJPcmRlciIsImN1cnJlbnRMYXllcnNGb3JEZWNrIiwicmVuZGVyUHJvcHMiLCJoYXNTaGFkb3dFZmZlY3QiLCJpc0Fubm90YXRpb25Nb2RlIiwic2xpY2UiLCJyZXZlcnNlIiwib3ZlcmxheXMiLCJlbGVtZW50IiwibGF5ZXJHcm91cCIsImxheWVySWQiLCJmaW5kSW5kZXgiLCJfcmVmMyIsImJpbmRlZExheWVyQ2FsbGJhY2tzIiwibGF5ZXJPdmVybGF5IiwiY29tcHV0ZURlY2tMYXllcnMiLCJfcmVmNCIsIm9wdGlvbnMiLCJ2aXNTdGF0ZSIsIm1hcFN0eWxlIiwiZWZmZWN0cyIsInNwbGl0TWFwcyIsIl9yZWY1IiwibWFwSW5kZXgiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsInByaW1hcnlNYXAiLCJsYXllcnNGb3JEZWNrIiwiZWRpdG9ySW5mbyIsImRhdGFMYXllcnMiLCJlZmZlY3QiLCJfcmVmNiIsInZpc2libGVMYXllckdyb3VwcyIsInB1c2giLCJ0aHJlZURCdWlsZGluZ0NvbG9yIiwicGlja2FibGUiLCJ1cGRhdGVUcmlnZ2VycyIsImdldEZpbGxDb2xvciIsIl9nZXRDdXN0b21EZWNrTGF5ZXJzIiwiX2dldEN1c3RvbURlY2tMYXllcnMyIiwiX3NsaWNlZFRvQXJyYXkiLCJjdXN0b21Cb3R0b21EZWNrTGF5ZXJzIiwiY3VzdG9tVG9wRGVja0xheWVycyIsImVkaXRvckxheWVyIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJfcmVmNyIsImdldE5ld0xheWVyR3JvdXAiLCJfcHJvcHMkaWQiLCJfcHJvcHMkbGFiZWwiLCJfcHJvcHMkaXNWaXNpYmxlIiwiX3Byb3BzJGxheWVyT3JkZXIiLCJfcHJvcHMkaXNJbmNsdWRlZEluTGUiLCJsYWJlbCIsImlzSW5jbHVkZWRJbkxlZ2VuZCIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsImF0SW5kZXgiLCJzcGxpY2UiLCJyZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIiLCJlbGVtZW50SWQiLCJuZXdMYXllck9yZGVyIiwiZW50cnkiLCJncm91cCIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVyR3JvdXBJZCIsImkiLCJncnAiLCJnZXRBbmNlc3RvckxheWVyR3JvdXBzIiwiZW50cnlJZCIsImFuY2VzdG9ycyIsInZpc2l0IiwiZW50cmllcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpc0xheWVyU2hvd25JbkxlZ2VuZCIsImV2ZXJ5IiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibmVzdGVkIiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwibGF5ZXJFbnRyeUlkIiwiaXNMYXllclByZXNlbnRJbkxheWVyT3JkZXIiLCJmb3VuZCIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwib2xkRW50cnkiLCJuZXdFbnRyeSIsIm9sZEVudHJ5SWQiLCJ1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyIiwibmV3TGF5ZXJHcm91cCIsImdldEZsYXRMYXllck9yZGVyIiwib3JkZXJFbnRyeSIsImJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeSIsInZhbGlkTGF5ZXJzIiwiZmluZCIsImwiLCJoaWRkZW4iLCJyZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIiLCJyZW9yZGVyTGF5ZXJPcmRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJhY3RpdmVJbmRleCIsIm92ZXJJbmRleCIsImFkZExheWVyVG9MYXllck9yZGVyIiwiZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZSIsImZpZWxkSW5kZXgiLCJ2YWx1ZUF0IiwiYXJlQW55RGVja0xheWVyc0xvYWRpbmciLCJpbnRlcm5hbFN0YXRlIiwiaXNMb2FkZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGF5ZXItdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuXG5pbXBvcnQge0dFT0NPREVSX0xBWUVSX0lELCBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVH0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMYXllciBhcyBEZWNrTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xudHlwZSBEZWNrTGF5ZXJQcm9wcyA9IGFueTtcbmltcG9ydCB7XG4gIEZpZWxkLFxuICBMYXllclZpc0NvbmZpZyxcbiAgVG9vbHRpcEZpZWxkLFxuICBDb21wYXJlVHlwZSxcbiAgU3BsaXRNYXBMYXllcnMsXG4gIEVkaXRvcixcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZVNlbGVjdGlvbkNvbnRleHQsXG4gIEJpbmRlZExheWVyQ2FsbGJhY2tzLFxuICBMYXllckNhbGxiYWNrcyxcbiAgVmlld3BvcnQsXG4gIExheWVyT3JkZXJHcm91cCxcbiAgTGF5ZXJPcmRlcixcbiAgTGF5ZXJPcmRlckVudHJ5LFxuICBGbGF0TGF5ZXJPcmRlcixcbiAgTGF5ZXJPcmRlckhpZXJhcmNoeVxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlLFxuICBGaW5kRGVmYXVsdExheWVyUHJvcHMsXG4gIExheWVyLFxuICBMYXllckNsYXNzZXNUeXBlLFxuICBPVkVSTEFZX1RZUEVfQ09OU1QsXG4gIGdldEVkaXRvckxheWVyXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcblxuaW1wb3J0IEtlcGxlclRhYmxlIGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7aXNGdW5jdGlvbiwgZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcywgRGF0YVJvdywgaXNQbGFpbk9iamVjdH0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2FycmF5TW92ZSwgZ2VuZXJhdGVIYXNoSWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7Z2V0TGF5ZXJab29tT3BhY2l0eUZhY3Rvcn0gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5cbmltcG9ydCB7VGhyZWVEQnVpbGRpbmdMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJzVG9SZW5kZXIgPSB7XG4gIFtsYXllcklkOiBzdHJpbmddOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSA9IHtcbiAgcG9pbnRzOiBhbnlbXTtcbiAgY29sb3JWYWx1ZT86IGFueTtcbiAgZWxldmF0aW9uVmFsdWU/OiBhbnk7XG4gIGFnZ3JlZ2F0ZWREYXRhPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBtZWFzdXJlOiBzdHJpbmc7XG4gICAgICB2YWx1ZT86IGFueTtcbiAgICB9XG4gID47XG59O1xuXG5leHBvcnQgdHlwZSBMYXllckhvdmVyUHJvcCA9IHtcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGw7XG4gIGZpZWxkczogRmllbGRbXTtcbiAgZmllbGRzVG9TaG93OiBUb29sdGlwRmllbGRbXTtcbiAgbGF5ZXI6IExheWVyO1xuICBwcmltYXJ5RGF0YT86IERhdGFSb3cgfCBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhIHwgYW55W10gfCBudWxsO1xuICBjb21wYXJlVHlwZT86IENvbXBhcmVUeXBlO1xuICBjdXJyZW50VGltZT86IFZpc1N0YXRlWydhbmltYXRpb25Db25maWcnXVsnY3VycmVudFRpbWUnXTtcbn07XG5cbi8qKlxuICogRmluZCBkZWZhdWx0IGxheWVycyBmcm9tIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlZmF1bHRMYXllcihkYXRhc2V0OiBLZXBsZXJUYWJsZSwgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXNUeXBlKTogTGF5ZXJbXSB7XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyUHJvcHMgPSAoT2JqZWN0LmtleXMobGF5ZXJDbGFzc2VzKSBhcyBBcnJheTxrZXlvZiBMYXllckNsYXNzZXNUeXBlPikucmVkdWNlKFxuICAgIChwcmV2aW91cywgbGMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUgPVxuICAgICAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIHByZXZpb3VzKVxuICAgICAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgICAgIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuICAgICAgY29uc3QgZm91bmRMYXllcnMgPSByZXN1bHQuZm91bmRMYXllcnMgfHwgcHJldmlvdXM7XG5cbiAgICAgIHJldHVybiBmb3VuZExheWVycy5jb25jYXQoXG4gICAgICAgIHByb3BzLm1hcChwID0+ICh7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICB0eXBlOiBsYyxcbiAgICAgICAgICBkYXRhSWQ6IGRhdGFzZXQuaWQsXG4gICAgICAgICAgLy8gc2V0IGFyYyBsYXllciBpbml0aWFsIHZpc2libGl0eSB0byBmYWxzZSwgYmVjYXVzZSBhcmNzIHRlbmQgdG8gYmUgdG9vIG11c3lcbiAgICAgICAgICAuLi4obGMgPT09ICdhcmMnIHx8IGxjID09PSAnbGluZScgPyB7aXNWaXNpYmxlOiBmYWxzZX0gOiB7fSlcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW10gYXMgKEZpbmREZWZhdWx0TGF5ZXJQcm9wcyAmIHt0eXBlOiBzdHJpbmd9KVtdXG4gICk7XG5cbiAgLy8gZ28gdGhyb3VnaCBhbGwgbGF5ZXJQcm9wcyB0byBjcmVhdGUgbGF5ZXJcbiAgcmV0dXJuIGxheWVyUHJvcHMubWFwKHByb3BzID0+IHtcbiAgICBjb25zdCBsYXllciA9IG5ldyBsYXllckNsYXNzZXNbcHJvcHMudHlwZV0ocHJvcHMpO1xuICAgIHJldHVybiB0eXBlb2YgbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nICYmIGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgICAgPyBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICAgIDogbGF5ZXI7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYHBhdGNoYCB0byBgY29uZmlnLnZpc0NvbmZpZ2Agb25seSBmb3IgbGF5ZXJzIHdob3NlIGBkYXRhSWRgIGlzIGluIGBkYXRhc2V0SWRzVG9QYXRjaGAuXG4gKiBMYXllcnMgZm9yIGRhdGFzZXRzIHRoYXQgd2VyZSBhbHJlYWR5IG9uIHRoZSBtYXAgYXJlIGxlZnQgdW5jaGFuZ2VkIOKAlCBgYWRkRGF0YVRvTWFwYFxuICogS2V5cyB3aG9zZSBwYXRjaCB2YWx1ZSBpcyBgdW5kZWZpbmVkYCBhcmUgc2tpcHBlZCBzbyBleGlzdGluZyB2aXNDb25maWcgaXMgbm90IGNsZWFyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF0Y2g6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkLFxuICBkYXRhc2V0SWRzVG9QYXRjaDogc3RyaW5nW11cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFwYXRjaCB8fCAhT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGhhc0RlZmluZWRQYXRjaFZhbHVlID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLnNvbWUoXG4gICAga2V5ID0+IHBhdGNoW2tleV0gIT09IHVuZGVmaW5lZFxuICApO1xuICBpZiAoIWhhc0RlZmluZWRQYXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldElkU2V0ID0gbmV3IFNldChkYXRhc2V0SWRzVG9QYXRjaCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkIHx8ICFkYXRhc2V0SWRTZXQuaGFzKGxheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3M7XG4gICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLmZpbHRlcihcbiAgICAgICAga2V5ID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXR0aW5ncywga2V5KSAmJiBwYXRjaFtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0aWFsID0gYWxsb3dlZEtleXMucmVkdWNlPFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSBwYXRjaFtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHBhcnRpYWwpO1xuICAgIH0pXG4gIH07XG59XG5cbnR5cGUgTWluVmlzU3RhdGVGb3JMYXllckRhdGEgPSB7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbiAgYW5pbWF0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ107XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBsYXllciBkYXRhIGJhc2VkIG9uIGxheWVyIHR5cGUsIGNvbCBDb25maWcsXG4gKiByZXR1cm4gdXBkYXRlZCBsYXllciBpZiBjb2xvckRvbWFpbiwgZGF0YU1hcCBoYXMgY2hhbmdlZC5cbiAqIEFsc28sIHJldHVybnMgdXBkYXRlZCBsYXllciBpbiBjYXNlIHRoZSBpbnB1dCBsYXllciB3YXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAqIEFkZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgbGF5ZXIgaW4gY2FzZSBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGE8UyBleHRlbmRzIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhPihcbiAgbGF5ZXI6IExheWVyLFxuICBzdGF0ZTogUyxcbiAgb2xkTGF5ZXJEYXRhPzogYW55XG4pOiB7XG4gIGxheWVyRGF0YTogYW55O1xuICBsYXllcjogTGF5ZXI7XG59IHtcbiAgbGV0IGxheWVyRGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIHVwZGF0ZXMgZGF0YSBhZnRlciBhbiBlcnJvclxuICAgIGlmICghbGF5ZXIuaXNWYWxpZCkge1xuICAgICAgbGF5ZXIuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgfHwgIWxheWVyLmhhc0FsbENvbHVtbnMoKSB8fCAhbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gICAgfVxuXG4gICAgbGF5ZXJEYXRhID0gbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKHN0YXRlLmRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGF0YSBmb3IgdGhlIGxheWVyIGlzIHVwZGF0ZWQgd2l0aG91dCBlcnJvcnNcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIC8vIFN3aXRjaCB0byB2aXNpYmxlIGFmdGVyIGFuIGVycm9yXG4gICAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgbGF5ZXIuaXNWYWxpZCA9IHRydWU7XG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgQ29uc29sZS5lcnJvcihlcnIpO1xuICAgIGxheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIGxheWVyLmlzVmFsaWQgPSBmYWxzZTtcblxuICAgIGxheWVyLmVycm9yTWVzc2FnZSA9XG4gICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCAxMDApIDogJ1Vua25vd24gZXJyb3InO1xuXG4gICAgbGF5ZXJEYXRhID0ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxheWVyLFxuICAgIGxheWVyRGF0YVxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBwcm9wcyBwYXNzZWQgdG8gTGF5ZXJIb3ZlckluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wKHtcbiAgYW5pbWF0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgaG92ZXJJbmZvLFxuICBsYXllcnMsXG4gIGxheWVyc1RvUmVuZGVyLFxuICBkYXRhc2V0c1xufToge1xuICBpbnRlcmFjdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2ludGVyYWN0aW9uQ29uZmlnJ107XG4gIGFuaW1hdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddO1xuICBob3ZlckluZm86IFZpc1N0YXRlWydob3ZlckluZm8nXTtcbiAgbGF5ZXJzOiBWaXNTdGF0ZVsnbGF5ZXJzJ107XG4gIGxheWVyc1RvUmVuZGVyOiBMYXllcnNUb1JlbmRlcjtcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddO1xufSk6IExheWVySG92ZXJQcm9wIHwgbnVsbCB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmVuYWJsZWQgJiYgaG92ZXJJbmZvICYmIGhvdmVySW5mby5waWNrZWQpIHtcbiAgICAvLyBpZiBhbnl0aGluZyBob3ZlcmVkXG4gICAgY29uc3Qge29iamVjdCwgbGF5ZXI6IG92ZXJsYXl9ID0gaG92ZXJJbmZvO1xuXG4gICAgLy8gZGVja2dsIGxheWVyIHRvIGtlcGxlci1nbCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW292ZXJsYXkucHJvcHMuaWR4XTtcblxuICAgIC8vIE5PVEU6IGZvciBiaW5hcnkgZm9ybWF0IEdlb2pzb25MYXllciwgZGVjayB3aWxsIHJldHVybiBvYmplY3Q9bnVsbCBidXQgaG92ZXJJbmZvLmluZGV4ID49IDBcbiAgICBpZiAoXG4gICAgICAob2JqZWN0IHx8IGhvdmVySW5mby5pbmRleCA+PSAwKSAmJlxuICAgICAgbGF5ZXIgJiZcbiAgICAgIGxheWVyLmdldEhvdmVyRGF0YSAmJlxuICAgICAgbGF5ZXJzVG9SZW5kZXJbbGF5ZXIuaWRdXG4gICAgKSB7XG4gICAgICAvLyBpZiBsYXllciBpcyB2aXNpYmxlIGFuZCBoYXZlIGhvdmVyZWQgZGF0YVxuICAgICAgY29uc3Qge1xuICAgICAgICBjb25maWc6IHtkYXRhSWR9XG4gICAgICB9ID0gbGF5ZXI7XG4gICAgICBpZiAoIWRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWVsZHN9ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgICAgIGNvbnN0IGRhdGE6IERhdGFSb3cgfCBudWxsID0gbGF5ZXIuZ2V0SG92ZXJEYXRhKFxuICAgICAgICBvYmplY3QgfHwgaG92ZXJJbmZvLmluZGV4LFxuICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvXG4gICAgICApO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZmllbGRzVG9TaG93LFxuICAgICAgICBsYXllcixcbiAgICAgICAgY3VycmVudFRpbWU6IGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgWk9PTV9PUEFDSVRZX1BST1BfS0VZUyA9IFsnb3BhY2l0eScsICdsaW5lT3BhY2l0eScsICdzdHJva2VPcGFjaXR5J107XG5cbi8qKiBTdHJva2UgYW5kIG91dGxpbmUgcHJvcHMgcmVwbGFjZSB0aGUgcGFyZW50IG9wYWNpdHksIHNvIHRoZXkgbmVlZCB0aGUgc2FtZSBmYWN0b3IuICovXG5mdW5jdGlvbiBzY2FsZVpvb21PcGFjaXR5U3ViTGF5ZXJQcm9wcyhcbiAgc3ViTGF5ZXJQcm9wczogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCxcbiAgZmFjdG9yOiBudW1iZXJcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAoIXN1YkxheWVyUHJvcHMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGNvbnN0IG5leHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyhzdWJMYXllclByb3BzKSkge1xuICAgIGNvbnN0IHN1YmxheWVyID0gc3ViTGF5ZXJQcm9wc1tpZF07XG4gICAgaWYgKCFzdWJsYXllciB8fCB0eXBlb2Ygc3VibGF5ZXIgIT09ICdvYmplY3QnKSB7XG4gICAgICBuZXh0W2lkXSA9IHN1YmxheWVyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNjYWxlZCA9IHsuLi5zdWJsYXllcn07XG4gICAgbGV0IHN1YmxheWVyQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFpPT01fT1BBQ0lUWV9QUk9QX0tFWVMpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3VibGF5ZXJba2V5XSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2NhbGVkW2tleV0gPSBzdWJsYXllcltrZXldICogZmFjdG9yO1xuICAgICAgICBzdWJsYXllckNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXh0W2lkXSA9IHN1YmxheWVyQ2hhbmdlZCA/IHNjYWxlZCA6IHN1YmxheWVyO1xuICAgIGlmIChzdWJsYXllckNoYW5nZWQpIHtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2hhbmdlZCA/IG5leHQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFwcGx5Wm9vbU9wYWNpdHlUb0RlY2tMYXllcihkZWNrTGF5ZXI6IGFueSwgZmFjdG9yOiBudW1iZXIpOiBhbnkge1xuICBpZiAoQXJyYXkuaXNBcnJheShkZWNrTGF5ZXIpKSB7XG4gICAgcmV0dXJuIGRlY2tMYXllci5tYXAobGF5ZXIgPT4gYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyKGxheWVyLCBmYWN0b3IpKTtcbiAgfVxuICBpZiAoIWRlY2tMYXllciB8fCBmYWN0b3IgPT09IDEgfHwgdHlwZW9mIGRlY2tMYXllci5jbG9uZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBkZWNrTGF5ZXI7XG4gIH1cbiAgY29uc3QgYmFzZU9wYWNpdHkgPSBkZWNrTGF5ZXIucHJvcHM/Lm9wYWNpdHk7XG4gIGNvbnN0IG9wYWNpdHkgPSAodHlwZW9mIGJhc2VPcGFjaXR5ID09PSAnbnVtYmVyJyA/IGJhc2VPcGFjaXR5IDogMSkgKiBmYWN0b3I7XG4gIGNvbnN0IHN1YkxheWVyUHJvcHMgPSBzY2FsZVpvb21PcGFjaXR5U3ViTGF5ZXJQcm9wcyhkZWNrTGF5ZXIucHJvcHM/Ll9zdWJMYXllclByb3BzLCBmYWN0b3IpO1xuICByZXR1cm4gZGVja0xheWVyLmNsb25lKHtcbiAgICBvcGFjaXR5LFxuICAgIC8vIEZ1bGx5IGZhZGVkIGxheWVycyBhcmUgbm90IHBpY2thYmxlLlxuICAgIHZpc2libGU6IGRlY2tMYXllci5wcm9wcz8udmlzaWJsZSAhPT0gZmFsc2UgJiYgZmFjdG9yID4gMCxcbiAgICAuLi4oc3ViTGF5ZXJQcm9wcyA/IHtfc3ViTGF5ZXJQcm9wczogc3ViTGF5ZXJQcm9wc30gOiB7fSlcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEZWNrR2xMYXllcihwcm9wczogYW55LCBsYXllckNhbGxiYWNrczoge1trZXk6IHN0cmluZ106IGFueX0pIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGxheWVyLFxuICAgIGxheWVySW5kZXgsXG4gICAgZGF0YSxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBtYXBTdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgbWFwTGF5ZXJzLFxuICAgIGV4cGVyaW1lbnRhbENvbnRleHRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IHtncHVGaWx0ZXJ9ID0gZGF0YXNldCB8fCB7fTtcbiAgY29uc3Qgb2JqZWN0SG92ZXJlZCA9IGNsaWNrZWQgfHwgaG92ZXJJbmZvO1xuICAvLyBpbiBzcGxpdCBtb2RlIGEgbGF5ZXIgbWlzc2luZyBmcm9tIG1hcExheWVycyBpcyBoaWRkZW4sIHNvIGNvZXJjZSB0byBhIGJvb2xlYW5cbiAgLy8gaW5zdGVhZCBvZiBsZWFraW5nIHVuZGVmaW5lZCBpbnRvIGRlY2suZ2wncyB2aXNpYmxlIHByb3BcbiAgY29uc3QgdmlzaWJsZSA9ICFtYXBMYXllcnMgfHwgQm9vbGVhbihtYXBMYXllcnNbbGF5ZXIuaWRdKTtcbiAgLy8gTGF5ZXIgaXMgTGF5ZXIgY2xhc3NcbiAgY29uc3QgcmVuZGVyZWQgPSBsYXllci5yZW5kZXJMYXllcih7XG4gICAgZGF0YSxcbiAgICBncHVGaWx0ZXIsXG4gICAgaWR4OiBsYXllckluZGV4LFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGxheWVyQ2FsbGJhY2tzLFxuICAgIG1hcFN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBvYmplY3RIb3ZlcmVkLFxuICAgIHZpc2libGUsXG4gICAgZGF0YXNldCxcbiAgICBleHBlcmltZW50YWxDb250ZXh0XG4gIH0pO1xuICBjb25zdCBmYWN0b3IgPSBnZXRMYXllclpvb21PcGFjaXR5RmFjdG9yKGxheWVyLmlkLCBtYXBTdGF0ZT8uem9vbSwgaW50ZXJhY3Rpb25Db25maWcpO1xuICByZXR1cm4gYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyKHJlbmRlcmVkLCBmYWN0b3IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclJlbmRlcmFibGUobGF5ZXI6IExheWVyLCBsYXllckRhdGEpIHtcbiAgcmV0dXJuIGxheWVyLmlkICE9PSBHRU9DT0RFUl9MQVlFUl9JRCAmJiBsYXllci5zaG91bGRSZW5kZXJMYXllcihsYXllckRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycykge1xuICByZXR1cm4gKFxuICAgIGxheWVyLmNvbmZpZy5pc1Zpc2libGUgJiZcbiAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBkb24ndCByZW5kZXIgaXRcbiAgICAoIW1hcExheWVycyB8fCAobWFwTGF5ZXJzICYmIG1hcExheWVyc1tsYXllci5pZF0pKVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiBsYXllcnMgcmVuZGVyZWQgYnkgdGhlIGRlY2suZ2xcbi8vIE5vdGUsIGlzVmlzaWJsZTogZmFsc2UgbGF5ZXIgaXMgcGFzc2VkIHRvIGRlY2suZ2wgaGVyZVxuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNGb3JEZWNrKFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogVmlzU3RhdGVbJ2xheWVyRGF0YSddXG4pOiB7XG4gIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XG59IHtcbiAgcmV0dXJuIGxheWVycy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyLCBpZHgpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2xheWVyLmlkXTpcbiAgICAgICAgaXNMYXllclJlbmRlcmFibGUobGF5ZXIsIGxheWVyRGF0YVtpZHhdKSAmJiBsYXllci5vdmVybGF5VHlwZSA9PT0gT1ZFUkxBWV9UWVBFX0NPTlNULmRlY2tnbFxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8vIFByZXBhcmUgYSBkaWN0IG9mIHJlbmRlcmVkIGxheWVycyByZW5kZXJlZCBpbiB0aGUgbWFwXG4vLyBUaGlzIGluY2x1ZGVzIG9ubHkgdGhlIHZpc2liaWxlIGxheWVycyBmb3Igc2luZ2xlIG1hcCB2aWV3IGFuZCBzcGxpdCBtYXAgdmlld1xuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNUb1JlbmRlcihcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IFZpc1N0YXRlWydsYXllckRhdGEnXSxcbiAgbWFwTGF5ZXJzPzogU3BsaXRNYXBMYXllcnMgfCB1bmRlZmluZWQgfCBudWxsXG4pOiBMYXllcnNUb1JlbmRlciB7XG4gIHJldHVybiBsYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllciwgaWR4KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5pZF06IGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyLCBsYXllckRhdGFbaWR4XSkgJiYgaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycylcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG50eXBlIEN1c3RvbURlY2tMYXllciA9IERlY2tMYXllcjxEZWNrTGF5ZXJQcm9wcz47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21EZWNrTGF5ZXJzKGRlY2tHbFByb3BzPzogYW55KTogW0N1c3RvbURlY2tMYXllcltdLCBDdXN0b21EZWNrTGF5ZXJbXV0ge1xuICBjb25zdCBib3R0b21EZWNrTGF5ZXJzID0gQXJyYXkuaXNBcnJheShkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVyc1xuICAgIDogaXNGdW5jdGlvbihkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVycygpXG4gICAgOiBbXTtcbiAgY29uc3QgdG9wRGVja0xheWVycyA9IEFycmF5LmlzQXJyYXkoZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnNcbiAgICA6IGlzRnVuY3Rpb24oZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnMoKVxuICAgIDogW107XG5cbiAgcmV0dXJuIFtib3R0b21EZWNrTGF5ZXJzLCB0b3BEZWNrTGF5ZXJzXTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcHV0ZURlY2tMYXllcnNQcm9wcyA9IHtcbiAgbWFwSW5kZXg/OiBudW1iZXI7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw/OiBzdHJpbmc7XG4gIHByaW1hcnlNYXA/OiBib29sZWFuO1xuICBpc0Fubm90YXRpb25Nb2RlPzogYm9vbGVhbjtcbiAgbGF5ZXJzRm9yRGVjaz86IHtba2V5OiBzdHJpbmddOiBib29sZWFufTtcbiAgZWRpdG9ySW5mbz86IHtcbiAgICBlZGl0b3I6IEVkaXRvcjtcbiAgICBlZGl0b3JNZW51QWN0aXZlOiBib29sZWFuO1xuICAgIG9uU2V0RmVhdHVyZXM6IChmZWF0dXJlczogRmVhdHVyZVtdKSA9PiBhbnk7XG4gICAgc2V0U2VsZWN0ZWRGZWF0dXJlOiAoXG4gICAgICBmZWF0dXJlOiBGZWF0dXJlIHwgbnVsbCxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHQ/OiBGZWF0dXJlU2VsZWN0aW9uQ29udGV4dFxuICAgICkgPT4gYW55O1xuICAgIG9uQXBwbHlQb2x5Z29uRmlsdGVyQWxsPzogKGZlYXR1cmU6IEZlYXR1cmUpID0+IGFueTtcbiAgICBmZWF0dXJlQ29sbGVjdGlvbjoge1xuICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbiAgICB9O1xuICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4ZXM6IG51bWJlcltdO1xuICAgIHZpZXdwb3J0OiBWaWV3cG9ydDtcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTGF5ZXJDYWxsYmFja3MoXG4gIGxheWVyQ2FsbGJhY2tzOiBMYXllckNhbGxiYWNrcyA9IHt9LFxuICBpZHg6IG51bWJlclxuKTogQmluZGVkTGF5ZXJDYWxsYmFja3Mge1xuICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJDYWxsYmFja3MpLnJlZHVjZShcbiAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtrZXldOiB2YWwgPT4gbGF5ZXJDYWxsYmFja3Nba2V5XShpZHgsIHZhbClcbiAgICB9KSxcbiAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCAodmFsOiB1bmtub3duKSA9PiB2b2lkPlxuICApO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogYW55W10sXG4gIGN1cnJlbnRMYXllcnNGb3JEZWNrOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0sXG4gIHJlbmRlclByb3BzOiB7XG4gICAgZGF0YXNldHM6IGFueTtcbiAgICBob3ZlckluZm86IGFueTtcbiAgICBjbGlja2VkOiBhbnk7XG4gICAgbWFwU3RhdGU6IGFueTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzogYW55O1xuICAgIGFuaW1hdGlvbkNvbmZpZzogYW55O1xuICAgIG1hcExheWVyczogYW55O1xuICAgIGhhc1NoYWRvd0VmZmVjdDogYm9vbGVhbjtcbiAgICBpc0Fubm90YXRpb25Nb2RlPzogYm9vbGVhbjtcbiAgfSxcbiAgbGF5ZXJDYWxsYmFja3M/OiBhbnlcbik6IGFueVtdIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnMsXG4gICAgaGFzU2hhZG93RWZmZWN0LFxuICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgfSA9IHJlbmRlclByb3BzO1xuICByZXR1cm4gbGF5ZXJPcmRlclxuICAgIC5zbGljZSgpXG4gICAgLnJldmVyc2UoKVxuICAgIC5yZWR1Y2UoKG92ZXJsYXlzLCBlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBsYXllckdyb3VwID0gZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgIGlmICghbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChcbiAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgbGF5ZXJHcm91cC5sYXllck9yZGVyLFxuICAgICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgY3VycmVudExheWVyc0ZvckRlY2ssXG4gICAgICAgICAgICByZW5kZXJQcm9wcyxcbiAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF5ZXJJZCA9IGVsZW1lbnQgYXMgc3RyaW5nO1xuICAgICAgaWYgKCFjdXJyZW50TGF5ZXJzRm9yRGVja1tsYXllcklkXSkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgPyBiaW5kTGF5ZXJDYWxsYmFja3MobGF5ZXJDYWxsYmFja3MsIGxheWVySW5kZXgpXG4gICAgICAgIDoge307XG4gICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgIGNvbnN0IGRhdGEgPSBsYXllckRhdGFbbGF5ZXJJbmRleF07XG4gICAgICBjb25zdCBsYXllck92ZXJsYXkgPSByZW5kZXJEZWNrR2xMYXllcihcbiAgICAgICAge1xuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbENvbnRleHQ6IHtcbiAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRlZExheWVyQ2FsbGJhY2tzXG4gICAgICApO1xuICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgIH0sIFtdIGFzIGFueVtdKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRGVja0xheWVycyhcbiAge3Zpc1N0YXRlLCBtYXBTdGF0ZSwgbWFwU3R5bGV9OiBhbnksXG4gIG9wdGlvbnM/OiBDb21wdXRlRGVja0xheWVyc1Byb3BzLFxuICBsYXllckNhbGxiYWNrcz86IExheWVyQ2FsbGJhY2tzLFxuICBkZWNrR2xQcm9wcz86IGFueVxuKTogTGF5ZXJbXSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhc2V0cyxcbiAgICBlZmZlY3RzLFxuICAgIGxheWVycyxcbiAgICBsYXllck9yZGVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgc3BsaXRNYXBzXG4gIH0gPSB2aXNTdGF0ZTtcblxuICBjb25zdCB7XG4gICAgbWFwSW5kZXgsXG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgbWFwYm94QXBpVXJsLFxuICAgIHByaW1hcnlNYXAsXG4gICAgbGF5ZXJzRm9yRGVjayxcbiAgICBlZGl0b3JJbmZvLFxuICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGRhdGFMYXllcnM6IGFueVtdID0gW107XG5cbiAgY29uc3QgaGFzU2hhZG93RWZmZWN0ID0gZWZmZWN0cy5zb21lKGVmZmVjdCA9PiB7XG4gICAgcmV0dXJuIGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlO1xuICB9KTtcblxuICBpZiAobGF5ZXJEYXRhICYmIGxheWVyRGF0YS5sZW5ndGgpIHtcbiAgICBjb25zdCBtYXBMYXllcnMgPSBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzKHNwbGl0TWFwcywgbWFwSW5kZXggfHwgMCk7XG5cbiAgICBjb25zdCBjdXJyZW50TGF5ZXJzRm9yRGVjayA9IGxheWVyc0ZvckRlY2sgfHwgcHJlcGFyZUxheWVyc0ZvckRlY2sobGF5ZXJzLCBsYXllckRhdGEpO1xuXG4gICAgZGF0YUxheWVycyA9IGxheWVyT3JkZXJcbiAgICAgIC5zbGljZSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAucmVkdWNlKChvdmVybGF5cywgZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBlbGVtZW50IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgICBpZiAoIWxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQoXG4gICAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgICBsYXllckdyb3VwLmxheWVyT3JkZXIsXG4gICAgICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgICBjdXJyZW50TGF5ZXJzRm9yRGVjayxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICBtYXBMYXllcnMsXG4gICAgICAgICAgICAgICAgaGFzU2hhZG93RWZmZWN0LFxuICAgICAgICAgICAgICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxheWVySWQgPSBlbGVtZW50IGFzIHN0cmluZztcbiAgICAgICAgaWYgKCFjdXJyZW50TGF5ZXJzRm9yRGVja1tsYXllcklkXSkge1xuICAgICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgICBpZiAobGF5ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmluZGVkTGF5ZXJDYWxsYmFja3MgPSBsYXllckNhbGxiYWNrc1xuICAgICAgICAgID8gYmluZExheWVyQ2FsbGJhY2tzKGxheWVyQ2FsbGJhY2tzLCBsYXllckluZGV4KVxuICAgICAgICAgIDoge307XG4gICAgICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW2xheWVySW5kZXhdO1xuICAgICAgICBjb25zdCBkYXRhID0gbGF5ZXJEYXRhW2xheWVySW5kZXhdO1xuICAgICAgICBjb25zdCBsYXllck92ZXJsYXkgPSByZW5kZXJEZWNrR2xMYXllcihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgbGF5ZXJJbmRleCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIG1hcExheWVycyxcbiAgICAgICAgICAgIGV4cGVyaW1lbnRhbENvbnRleHQ6IHtcbiAgICAgICAgICAgICAgaGFzU2hhZG93RWZmZWN0LFxuICAgICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBiaW5kZWRMYXllckNhbGxiYWNrc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KGxheWVyT3ZlcmxheSB8fCBbXSk7XG4gICAgICB9LCBbXSk7XG4gIH1cblxuICBpZiAoIXByaW1hcnlNYXApIHtcbiAgICByZXR1cm4gZGF0YUxheWVycztcbiAgfVxuXG4gIGlmIChcbiAgICBtYXBTdHlsZT8udmlzaWJsZUxheWVyR3JvdXBzWyczZCBidWlsZGluZyddICYmXG4gICAgcHJpbWFyeU1hcCAmJlxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuICYmXG4gICAgbWFwYm94QXBpVXJsXG4gICkge1xuICAgIGRhdGFMYXllcnMucHVzaChcbiAgICAgIG5ldyBUaHJlZURCdWlsZGluZ0xheWVyKHtcbiAgICAgICAgaWQ6ICdfa2VwbGVyZ2xfM2QtYnVpbGRpbmcnLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICB0aHJlZURCdWlsZGluZ0NvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yLFxuICAgICAgICBwaWNrYWJsZTogQm9vbGVhbihpc0Fubm90YXRpb25Nb2RlKSxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICBnZXRGaWxsQ29sb3I6IG1hcFN0eWxlLnRocmVlREJ1aWxkaW5nQ29sb3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY29uc3QgW2N1c3RvbUJvdHRvbURlY2tMYXllcnMsIGN1c3RvbVRvcERlY2tMYXllcnNdID0gZ2V0Q3VzdG9tRGVja0xheWVycyhkZWNrR2xQcm9wcyk7XG5cbiAgY29uc3QgZWRpdG9yTGF5ZXI6IGFueVtdID0gW107XG4gIGlmIChlZGl0b3JJbmZvKSB7XG4gICAgZWRpdG9yTGF5ZXIucHVzaChcbiAgICAgIGdldEVkaXRvckxheWVyKHtcbiAgICAgICAgLi4uZWRpdG9ySW5mbyxcbiAgICAgICAgbWFwU3RhdGVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBbLi4uY3VzdG9tQm90dG9tRGVja0xheWVycywgLi4uZGF0YUxheWVycywgLi4uY3VzdG9tVG9wRGVja0xheWVycywgLi4uZWRpdG9yTGF5ZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnM8VCBleHRlbmRzIHtpZDogc3RyaW5nfT4obGF5ZXJzOiBUW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBsYXllcnMubWFwKCh7aWR9KSA9PiBpZCk7XG59XG5cbi8vIC0tLSBMYXllciBHcm91cCBVdGlsaXRpZXMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdMYXllckdyb3VwKHByb3BzPzogUGFydGlhbDxMYXllck9yZGVyR3JvdXA+KTogTGF5ZXJPcmRlckdyb3VwIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogcHJvcHM/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBwcm9wcz8ubGFiZWwgPz8gJ05ldyBncm91cCcsXG4gICAgaXNWaXNpYmxlOiBwcm9wcz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgbGF5ZXJPcmRlcjogcHJvcHM/LmxheWVyT3JkZXIgPz8gW10sXG4gICAgaXNJbmNsdWRlZEluTGVnZW5kOiBwcm9wcz8uaXNJbmNsdWRlZEluTGVnZW5kID8/IHRydWVcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgZWxlbWVudDogTGF5ZXJPcmRlckVudHJ5LFxuICBhdEluZGV4PzogbnVtYmVyXG4pOiBMYXllck9yZGVyIHtcbiAgY29uc3QgaWR4ID0gYXRJbmRleCA/PyAwO1xuICBjb25zdCByZXN1bHQgPSBbLi4ubGF5ZXJPcmRlcl07XG4gIHJlc3VsdC5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgZWxlbWVudDogTGF5ZXJPcmRlckVudHJ5XG4pOiBMYXllck9yZGVyIHtcbiAgaWYgKCFsYXllck9yZGVyKSByZXR1cm4gW107XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyA/IGVsZW1lbnQgOiBlbGVtZW50LmlkO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IGxheWVyT3JkZXIuZmlsdGVyKGVudHJ5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHJldHVybiAoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5pZCAhPT0gZWxlbWVudElkO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnkgIT09IGVsZW1lbnRJZDtcbiAgfSk7XG5cbiAgbmV3TGF5ZXJPcmRlciA9IG5ld0xheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihncm91cC5sYXllck9yZGVyLCBlbGVtZW50SWQpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0pO1xuXG4gIHJldHVybiBuZXdMYXllck9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllckdyb3VwSWQ6IHN0cmluZ1xuKTogTGF5ZXJPcmRlckdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGdyb3VwOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWdyb3VwOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBncm91cCA9XG4gICAgICAgIGdycC5pZCA9PT0gbGF5ZXJHcm91cElkID8gZ3JwIDogZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKGdycC5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogR3JvdXBzIHRoYXQgY29udGFpbiBgZW50cnlJZGAsIG5lYXJlc3QgcGFyZW50IGZpcnN0LlxuICogYGVudHJ5SWRgIG1heSBiZSBhIGxheWVyIGlkIG9yIGEgbmVzdGVkIGdyb3VwIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5jZXN0b3JMYXllckdyb3VwcyhsYXllck9yZGVyOiBMYXllck9yZGVyLCBlbnRyeUlkOiBzdHJpbmcpOiBMYXllck9yZGVyR3JvdXBbXSB7XG4gIGNvbnN0IGFuY2VzdG9yczogTGF5ZXJPcmRlckdyb3VwW10gPSBbXTtcblxuICBjb25zdCB2aXNpdCA9IChlbnRyaWVzOiBMYXllck9yZGVyKTogYm9vbGVhbiA9PiB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoZW50cnkgPT09IGVudHJ5SWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGlmIChncm91cC5pZCA9PT0gZW50cnlJZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh2aXNpdChncm91cC5sYXllck9yZGVyKSkge1xuICAgICAgICBhbmNlc3RvcnMucHVzaChncm91cCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgdmlzaXQobGF5ZXJPcmRlcik7XG4gIHJldHVybiBhbmNlc3RvcnM7XG59XG5cbi8qKlxuICogV2hldGhlciBhIGxheWVyIHNob3VsZCBiZSBkcmF3biBpbiB0aGUgbWFwIGxlZ2VuZC5cbiAqIEEgbGF5ZXIgc3RheXMgb24gdGhlIG1hcCB3aGVuIHRoaXMgaXMgZmFsc2UuIE1pc3NpbmcgZmxhZ3MgY291bnQgYXMgaW5jbHVkZWQuXG4gKiBBbiBhbmNlc3RvciBncm91cCB3aXRoIGBpc0luY2x1ZGVkSW5MZWdlbmQ6IGZhbHNlYCBoaWRlcyB0aGUgbGF5ZXIgYXMgd2VsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJTaG93bkluTGVnZW5kKFxuICBsYXllcjoge2lkOiBzdHJpbmc7IGNvbmZpZzoge2lzSW5jbHVkZWRJbkxlZ2VuZD86IGJvb2xlYW59fSxcbiAgbGF5ZXJPcmRlcj86IExheWVyT3JkZXJcbik6IGJvb2xlYW4ge1xuICBpZiAobGF5ZXIuY29uZmlnLmlzSW5jbHVkZWRJbkxlZ2VuZCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFsYXllck9yZGVyPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZ2V0QW5jZXN0b3JMYXllckdyb3VwcyhsYXllck9yZGVyLCBsYXllci5pZCkuZXZlcnkoXG4gICAgZ3JvdXAgPT4gZ3JvdXAuaXNJbmNsdWRlZEluTGVnZW5kICE9PSBmYWxzZVxuICApO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHBhcmVudCBncm91cCB0aGF0IGNvbnRhaW5zIGEgZ2l2ZW4gbGF5ZXIgSUQuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgbGF5ZXIgaXMgYXQgdGhlIHJvb3QgbGV2ZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJJZDogc3RyaW5nXG4pOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxheWVyT3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdyb3VwLmxheWVyT3JkZXIuc29tZShlID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJyAmJiBlID09PSBsYXllcklkKSkge1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXN0ZWQgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihncm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgICAgIGlmIChuZXN0ZWQpIHJldHVybiBuZXN0ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmRleEZyb21MYXllckVudHJ5SWQobGF5ZXJPcmRlcjogTGF5ZXJPcmRlciwgbGF5ZXJFbnRyeUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICBpc1BsYWluT2JqZWN0KGVudHJ5KSA/IChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmlkID09PSBsYXllckVudHJ5SWQgOiBlbnRyeSA9PT0gbGF5ZXJFbnRyeUlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyLCBsYXllcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWZvdW5kOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBmb3VuZCA9IGlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3VuZCA9IGxheWVySWQgPT09IGVudHJ5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgb2xkRW50cnk6IExheWVyT3JkZXJFbnRyeSxcbiAgbmV3RW50cnk6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IG9sZEVudHJ5SWQgPSB0eXBlb2Ygb2xkRW50cnkgPT09ICdzdHJpbmcnID8gb2xkRW50cnkgOiBvbGRFbnRyeS5pZDtcbiAgcmV0dXJuIGxheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVudHJ5ID09PSBvbGRFbnRyeUlkID8gbmV3RW50cnkgOiBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmlkID09PSBvbGRFbnRyeUlkKSB7XG4gICAgICAgIHJldHVybiBuZXdFbnRyeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIG9sZEVudHJ5LCBuZXdFbnRyeSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBuZXdMYXllckdyb3VwOiBMYXllck9yZGVyR3JvdXBcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdycC5pZCA9PT0gbmV3TGF5ZXJHcm91cC5pZCkge1xuICAgICAgICByZXR1cm4gbmV3TGF5ZXJHcm91cDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbGF0TGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyKTogRmxhdExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgb3JkZXJFbnRyeSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9yZGVyRW50cnkpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgLi4uZ2V0RmxhdExheWVyT3JkZXIoKG9yZGVyRW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKV07XG4gICAgfVxuICAgIHJldHVybiBbLi4uYWNjLCBvcmRlckVudHJ5IGFzIHN0cmluZ107XG4gIH0sIFtdIGFzIEZsYXRMYXllck9yZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeShcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzPzogTGF5ZXJbXSB8IHJlYWRvbmx5IExheWVyW11cbik6IExheWVyT3JkZXJIaWVyYXJjaHkge1xuICBjb25zdCB2YWxpZExheWVycyA9IGxheWVycz8uZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgWydsYXllckdyb3VwJywgZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXBdIGFzIGNvbnN0XTtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXIgPSB2YWxpZExheWVycz8uZmluZChsID0+IGwuaWQgPT09IGVsZW1lbnQpO1xuICAgIGlmICghbGF5ZXIgfHwgbGF5ZXIuY29uZmlnLmhpZGRlbikge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5hY2MsIFsnbGF5ZXInLCBsYXllcl0gYXMgY29uc3RdO1xuICB9LCBbXSBhcyBMYXllck9yZGVySGllcmFyY2h5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiB7aWQ6IHN0cmluZ31bXVxuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAobGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBlbnRyeSkpIHtcbiAgICAgICAgYWNjLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmxheWVyT3JkZXIpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIC4uLmdycCxcbiAgICAgICAgICBsYXllck9yZGVyOiByZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIGxheWVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzIExheWVyT3JkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIG9yaWdpbkxheWVySWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25MYXllcklkOiBzdHJpbmdcbik6IFZpc1N0YXRlWydsYXllck9yZGVyJ10ge1xuICBjb25zdCBhY3RpdmVJbmRleCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChsYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgY29uc3Qgb3ZlckluZGV4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKGxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG5cbiAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSB8fCBvdmVySW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIGxheWVyT3JkZXI7XG4gIH1cbiAgcmV0dXJuIGFycmF5TW92ZShsYXllck9yZGVyLCBhY3RpdmVJbmRleCwgb3ZlckluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyVG9MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBWaXNTdGF0ZVsnbGF5ZXJPcmRlciddLFxuICBsYXllcklkOiBzdHJpbmdcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gW2xheWVySWQsIC4uLmxheWVyT3JkZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZShcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGZpZWxkSW5kZXg6IG51bWJlclxuKSB7XG4gIGlmICghZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRhUm93KSByZXR1cm4gZGF0YS52YWx1ZUF0KGZpZWxkSW5kZXgpO1xuICByZXR1cm4gZGF0YVtmaWVsZEluZGV4XTtcbn1cblxuLyoqIENoZWNrcyBpZiBhbnkgRGVjayBsYXllcnMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYXJlQW55RGVja0xheWVyc0xvYWRpbmcobGF5ZXJzOiBEZWNrTGF5ZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXJzLnNvbWUoXG4gICAgLy8gbGF5ZXIuaXNMb2FkZWQgY2hhbmdlcyBmcmVxdWVudGx5IGluIERlY2sgKGV2ZW4gb24gaG92ZXIpIHNvIHdlIGNoZWNrIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgIGxheWVyID0+IGxheWVyLmludGVybmFsU3RhdGUgJiYgIWxheWVyLmlzTG9hZGVkXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsT0FBT0EsT0FBTyxNQUFNLGdCQUFnQjtBQUVwQyxTQUFRQyxpQkFBaUIsRUFBRUMsdUJBQXVCLFFBQU8sc0JBQXNCO0FBcUIvRSxTQUtFQyxrQkFBa0IsRUFDbEJDLGNBQWMs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
734
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zb2xlIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIk9WRVJMQVlfVFlQRV9DT05TVCIsImdldEVkaXRvckxheWVyIiwiaXNGdW5jdGlvbiIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJEYXRhUm93IiwiaXNQbGFpbk9iamVjdCIsImFycmF5TW92ZSIsImdlbmVyYXRlSGFzaElkIiwiZ2V0TGF5ZXJab29tT3BhY2l0eUZhY3RvciIsIlRocmVlREJ1aWxkaW5nTGF5ZXIiLCJmaW5kRGVmYXVsdExheWVyIiwiZGF0YXNldCIsImxheWVyQ2xhc3NlcyIsImxheWVyUHJvcHMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicHJldmlvdXMiLCJsYyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsInByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwiZm91bmRMYXllcnMiLCJjb25jYXQiLCJtYXAiLCJwIiwiX29iamVjdFNwcmVhZCIsInR5cGUiLCJkYXRhSWQiLCJpZCIsImlzVmlzaWJsZSIsImxheWVyIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwiZGF0YUNvbnRhaW5lciIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInN0YXRlIiwicGF0Y2giLCJkYXRhc2V0SWRzVG9QYXRjaCIsImxlbmd0aCIsImhhc0RlZmluZWRQYXRjaFZhbHVlIiwic29tZSIsImtleSIsInVuZGVmaW5lZCIsImRhdGFzZXRJZFNldCIsIlNldCIsImxheWVycyIsImNvbmZpZyIsImhhcyIsInNldHRpbmdzIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJhbGxvd2VkS2V5cyIsImZpbHRlciIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInBhcnRpYWwiLCJhY2MiLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsImNhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsImxheWVyRGF0YSIsImlzVmFsaWQiLCJfb2xkRGF0YVVwZGF0ZVRyaWdnZXJzIiwiaGFzQWxsQ29sdW1ucyIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwidXBkYXRlTGF5ZXJDb25maWciLCJlcnJvck1lc3NhZ2UiLCJlcnIiLCJlcnJvciIsIkVycm9yIiwibWVzc2FnZSIsInN1YnN0cmluZyIsImdldExheWVySG92ZXJQcm9wIiwiX3JlZiIsImFuaW1hdGlvbkNvbmZpZyIsImludGVyYWN0aW9uQ29uZmlnIiwiaG92ZXJJbmZvIiwibGF5ZXJzVG9SZW5kZXIiLCJ0b29sdGlwIiwiZW5hYmxlZCIsInBpY2tlZCIsIm9iamVjdCIsIm92ZXJsYXkiLCJpZHgiLCJpbmRleCIsImdldEhvdmVyRGF0YSIsIl9kYXRhc2V0cyRkYXRhSWQiLCJmaWVsZHMiLCJkYXRhIiwiZmllbGRzVG9TaG93IiwiY3VycmVudFRpbWUiLCJ0aW1lem9uZSIsIlpPT01fT1BBQ0lUWV9QUk9QX0tFWVMiLCJzY2FsZVpvb21PcGFjaXR5U3ViTGF5ZXJQcm9wcyIsInN1YkxheWVyUHJvcHMiLCJmYWN0b3IiLCJjaGFuZ2VkIiwibmV4dCIsIl9pIiwiX09iamVjdCRrZXlzIiwic3VibGF5ZXIiLCJfdHlwZW9mIiwic2NhbGVkIiwic3VibGF5ZXJDaGFuZ2VkIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZSIsImYiLCJhcHBseVpvb21PcGFjaXR5VG9EZWNrTGF5ZXIiLCJkZWNrTGF5ZXIiLCJfZGVja0xheWVyJHByb3BzIiwiX2RlY2tMYXllciRwcm9wczIiLCJfZGVja0xheWVyJHByb3BzMyIsImNsb25lIiwiYmFzZU9wYWNpdHkiLCJvcGFjaXR5IiwiX3N1YkxheWVyUHJvcHMiLCJ2aXNpYmxlIiwicmVuZGVyRGVja0dsTGF5ZXIiLCJsYXllckNhbGxiYWNrcyIsImxheWVySW5kZXgiLCJjbGlja2VkIiwibWFwU3RhdGUiLCJtYXBMYXllcnMiLCJleHBlcmltZW50YWxDb250ZXh0IiwiX3JlZjIiLCJncHVGaWx0ZXIiLCJvYmplY3RIb3ZlcmVkIiwiQm9vbGVhbiIsInJlbmRlcmVkIiwicmVuZGVyTGF5ZXIiLCJ6b29tIiwiaXNMYXllclJlbmRlcmFibGUiLCJzaG91bGRSZW5kZXJMYXllciIsImlzTGF5ZXJWaXNpYmxlIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJhY2N1IiwiX2RlZmluZVByb3BlcnR5Iiwib3ZlcmxheVR5cGUiLCJkZWNrZ2wiLCJwcmVwYXJlTGF5ZXJzVG9SZW5kZXIiLCJnZXRDdXN0b21EZWNrTGF5ZXJzIiwiZGVja0dsUHJvcHMiLCJib3R0b21EZWNrTGF5ZXJzIiwidG9wRGVja0xheWVycyIsInRvcExheWVycyIsImJpbmRMYXllckNhbGxiYWNrcyIsImFyZ3VtZW50cyIsInZhbCIsImNvbXB1dGVEZWNrTGF5ZXJzRnJvbUxheWVyT3JkZXIiLCJsYXllck9yZGVyIiwiY3VycmVudExheWVyc0ZvckRlY2siLCJyZW5kZXJQcm9wcyIsImhhc1NoYWRvd0VmZmVjdCIsImlzQW5ub3RhdGlvbk1vZGUiLCJzbGljZSIsInJldmVyc2UiLCJvdmVybGF5cyIsImVsZW1lbnQiLCJsYXllckdyb3VwIiwibGF5ZXJJZCIsImZpbmRJbmRleCIsIl9yZWYzIiwiYmluZGVkTGF5ZXJDYWxsYmFja3MiLCJsYXllck92ZXJsYXkiLCJjb21wdXRlRGVja0xheWVycyIsIl9yZWY0Iiwib3B0aW9ucyIsInZpc1N0YXRlIiwibWFwU3R5bGUiLCJlZmZlY3RzIiwic3BsaXRNYXBzIiwiX3JlZjUiLCJtYXBJbmRleCIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwibWFwYm94QXBpVXJsIiwicHJpbWFyeU1hcCIsImxheWVyc0ZvckRlY2siLCJlZGl0b3JJbmZvIiwiZGF0YUxheWVycyIsImVmZmVjdCIsIl9yZWY2IiwidmlzaWJsZUxheWVyR3JvdXBzIiwicHVzaCIsInRocmVlREJ1aWxkaW5nQ29sb3IiLCJwaWNrYWJsZSIsInVwZGF0ZVRyaWdnZXJzIiwiZ2V0RmlsbENvbG9yIiwiX2dldEN1c3RvbURlY2tMYXllcnMiLCJfZ2V0Q3VzdG9tRGVja0xheWVyczIiLCJfc2xpY2VkVG9BcnJheSIsImN1c3RvbUJvdHRvbURlY2tMYXllcnMiLCJjdXN0b21Ub3BEZWNrTGF5ZXJzIiwiZWRpdG9yTGF5ZXIiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsIl9yZWY3IiwiZ2V0TmV3TGF5ZXJHcm91cCIsIl9wcm9wcyRpZCIsIl9wcm9wcyRsYWJlbCIsIl9wcm9wcyRpc1Zpc2libGUiLCJfcHJvcHMkbGF5ZXJPcmRlciIsIl9wcm9wcyRpc0luY2x1ZGVkSW5MZSIsImxhYmVsIiwiaXNJbmNsdWRlZEluTGVnZW5kIiwiYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyIiwiYXRJbmRleCIsInNwbGljZSIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsImVsZW1lbnRJZCIsIm5ld0xheWVyT3JkZXIiLCJlbnRyeSIsImdyb3VwIiwiZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyIiwibGF5ZXJHcm91cElkIiwiaSIsImdycCIsImdldEFuY2VzdG9yTGF5ZXJHcm91cHMiLCJlbnRyeUlkIiwiYW5jZXN0b3JzIiwidmlzaXQiLCJlbnRyaWVzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImlzTGF5ZXJTaG93bkluTGVnZW5kIiwiZXZlcnkiLCJmaW5kUGFyZW50R3JvdXBGb3JMYXllciIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJuZXN0ZWQiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJsYXllckVudHJ5SWQiLCJpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlciIsImZvdW5kIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJvbGRFbnRyeSIsIm5ld0VudHJ5Iiwib2xkRW50cnlJZCIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJuZXdMYXllckdyb3VwIiwiZ2V0RmxhdExheWVyT3JkZXIiLCJvcmRlckVudHJ5IiwiYnVpbGRMYXllck9yZGVySGllcmFyY2h5IiwidmFsaWRMYXllcnMiLCJmaW5kIiwibCIsImhpZGRlbiIsInJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlciIsInJlb3JkZXJMYXllck9yZGVyIiwib3JpZ2luTGF5ZXJJZCIsImRlc3RpbmF0aW9uTGF5ZXJJZCIsImFjdGl2ZUluZGV4Iiwib3ZlckluZGV4IiwiYWRkTGF5ZXJUb0xheWVyT3JkZXIiLCJnZXRMYXllckhvdmVyUHJvcFZhbHVlIiwiZmllbGRJbmRleCIsInZhbHVlQXQiLCJhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyIsImludGVybmFsU3RhdGUiLCJpc0xvYWRlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllci11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5cbmltcG9ydCB7R0VPQ09ERVJfTEFZRVJfSUQsIExJR0hUX0FORF9TSEFET1dfRUZGRUNUfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xheWVyIGFzIERlY2tMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG50eXBlIERlY2tMYXllclByb3BzID0gYW55O1xuaW1wb3J0IHtcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBUb29sdGlwRmllbGQsXG4gIENvbXBhcmVUeXBlLFxuICBTcGxpdE1hcExheWVycyxcbiAgRWRpdG9yLFxuICBGZWF0dXJlLFxuICBGZWF0dXJlU2VsZWN0aW9uQ29udGV4dCxcbiAgQmluZGVkTGF5ZXJDYWxsYmFja3MsXG4gIExheWVyQ2FsbGJhY2tzLFxuICBWaWV3cG9ydCxcbiAgTGF5ZXJPcmRlckdyb3VwLFxuICBMYXllck9yZGVyLFxuICBMYXllck9yZGVyRW50cnksXG4gIEZsYXRMYXllck9yZGVyLFxuICBMYXllck9yZGVySGllcmFyY2h5XG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUsXG4gIEZpbmREZWZhdWx0TGF5ZXJQcm9wcyxcbiAgTGF5ZXIsXG4gIExheWVyQ2xhc3Nlc1R5cGUsXG4gIE9WRVJMQVlfVFlQRV9DT05TVCxcbiAgZ2V0RWRpdG9yTGF5ZXJcbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuXG5pbXBvcnQgS2VwbGVyVGFibGUgZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtpc0Z1bmN0aW9uLCBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzLCBEYXRhUm93LCBpc1BsYWluT2JqZWN0fSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7YXJyYXlNb3ZlLCBnZW5lcmF0ZUhhc2hJZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtnZXRMYXllclpvb21PcGFjaXR5RmFjdG9yfSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcblxuaW1wb3J0IHtUaHJlZURCdWlsZGluZ0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnO1xuXG5leHBvcnQgdHlwZSBMYXllcnNUb1JlbmRlciA9IHtcbiAgW2xheWVySWQ6IHN0cmluZ106IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhID0ge1xuICBwb2ludHM6IGFueVtdO1xuICBjb2xvclZhbHVlPzogYW55O1xuICBlbGV2YXRpb25WYWx1ZT86IGFueTtcbiAgYWdncmVnYXRlZERhdGE/OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHtcbiAgICAgIG1lYXN1cmU6IHN0cmluZztcbiAgICAgIHZhbHVlPzogYW55O1xuICAgIH1cbiAgPjtcbn07XG5cbmV4cG9ydCB0eXBlIExheWVySG92ZXJQcm9wID0ge1xuICBkYXRhOiBEYXRhUm93IHwgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSB8IGFueVtdIHwgbnVsbDtcbiAgZmllbGRzOiBGaWVsZFtdO1xuICBmaWVsZHNUb1Nob3c6IFRvb2x0aXBGaWVsZFtdO1xuICBsYXllcjogTGF5ZXI7XG4gIHByaW1hcnlEYXRhPzogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGw7XG4gIGNvbXBhcmVUeXBlPzogQ29tcGFyZVR5cGU7XG4gIGN1cnJlbnRUaW1lPzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddWydjdXJyZW50VGltZSddO1xuICB0aW1lem9uZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG4vKipcbiAqIEZpbmQgZGVmYXVsdCBsYXllcnMgZnJvbSBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldDogS2VwbGVyVGFibGUsIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzVHlwZSk6IExheWVyW10ge1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBsYXllclByb3BzID0gKE9iamVjdC5rZXlzKGxheWVyQ2xhc3NlcykgYXMgQXJyYXk8a2V5b2YgTGF5ZXJDbGFzc2VzVHlwZT4pLnJlZHVjZShcbiAgICAocHJldmlvdXMsIGxjKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQ6IEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlID1cbiAgICAgICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBsYXllckNsYXNzZXNbbGNdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBwcmV2aW91cylcbiAgICAgICAgICA6IHtwcm9wczogW119O1xuXG4gICAgICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcbiAgICAgIGNvbnN0IGZvdW5kTGF5ZXJzID0gcmVzdWx0LmZvdW5kTGF5ZXJzIHx8IHByZXZpb3VzO1xuXG4gICAgICByZXR1cm4gZm91bmRMYXllcnMuY29uY2F0KFxuICAgICAgICBwcm9wcy5tYXAocCA9PiAoe1xuICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgdHlwZTogbGMsXG4gICAgICAgICAgZGF0YUlkOiBkYXRhc2V0LmlkLFxuICAgICAgICAgIC8vIHNldCBhcmMgbGF5ZXIgaW5pdGlhbCB2aXNpYmxpdHkgdG8gZmFsc2UsIGJlY2F1c2UgYXJjcyB0ZW5kIHRvIGJlIHRvbyBtdXN5XG4gICAgICAgICAgLi4uKGxjID09PSAnYXJjJyB8fCBsYyA9PT0gJ2xpbmUnID8ge2lzVmlzaWJsZTogZmFsc2V9IDoge30pXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtdIGFzIChGaW5kRGVmYXVsdExheWVyUHJvcHMgJiB7dHlwZTogc3RyaW5nfSlbXVxuICApO1xuXG4gIC8vIGdvIHRocm91Z2ggYWxsIGxheWVyUHJvcHMgdG8gY3JlYXRlIGxheWVyXG4gIHJldHVybiBsYXllclByb3BzLm1hcChwcm9wcyA9PiB7XG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3Byb3BzLnR5cGVdKHByb3BzKTtcbiAgICByZXR1cm4gdHlwZW9mIGxheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJyAmJiBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAgID8gbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgICA6IGxheWVyO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGBwYXRjaGAgdG8gYGNvbmZpZy52aXNDb25maWdgIG9ubHkgZm9yIGxheWVycyB3aG9zZSBgZGF0YUlkYCBpcyBpbiBgZGF0YXNldElkc1RvUGF0Y2hgLlxuICogTGF5ZXJzIGZvciBkYXRhc2V0cyB0aGF0IHdlcmUgYWxyZWFkeSBvbiB0aGUgbWFwIGFyZSBsZWZ0IHVuY2hhbmdlZCDigJQgYGFkZERhdGFUb01hcGBcbiAqIEtleXMgd2hvc2UgcGF0Y2ggdmFsdWUgaXMgYHVuZGVmaW5lZGAgYXJlIHNraXBwZWQgc28gZXhpc3RpbmcgdmlzQ29uZmlnIGlzIG5vdCBjbGVhcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBhdGNoOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPiB8IHVuZGVmaW5lZCxcbiAgZGF0YXNldElkc1RvUGF0Y2g6IHN0cmluZ1tdXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghcGF0Y2ggfHwgIU9iamVjdC5rZXlzKHBhdGNoKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBoYXNEZWZpbmVkUGF0Y2hWYWx1ZSA9IChPYmplY3Qua2V5cyhwYXRjaCkgYXMgQXJyYXk8a2V5b2YgTGF5ZXJWaXNDb25maWc+KS5zb21lKFxuICAgIGtleSA9PiBwYXRjaFtrZXldICE9PSB1bmRlZmluZWRcbiAgKTtcbiAgaWYgKCFoYXNEZWZpbmVkUGF0Y2hWYWx1ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRJZFNldCA9IG5ldyBTZXQoZGF0YXNldElkc1RvUGF0Y2gpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICAgIGlmICghbGF5ZXIuY29uZmlnLmRhdGFJZCB8fCAhZGF0YXNldElkU2V0LmhhcyhsYXllci5jb25maWcuZGF0YUlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzO1xuICAgICAgaWYgKCFzZXR0aW5ncykge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBhbGxvd2VkS2V5cyA9IChPYmplY3Qua2V5cyhwYXRjaCkgYXMgQXJyYXk8a2V5b2YgTGF5ZXJWaXNDb25maWc+KS5maWx0ZXIoXG4gICAgICAgIGtleSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2V0dGluZ3MsIGtleSkgJiYgcGF0Y2hba2V5XSAhPT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgaWYgKCFhbGxvd2VkS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFydGlhbCA9IGFsbG93ZWRLZXlzLnJlZHVjZTxQYXJ0aWFsPExheWVyVmlzQ29uZmlnPj4oKGFjYywga2V5KSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gcGF0Y2hba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcbiAgICAgIHJldHVybiBsYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhwYXJ0aWFsKTtcbiAgICB9KVxuICB9O1xufVxuXG50eXBlIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhID0ge1xuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ107XG4gIGFuaW1hdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgbGF5ZXIgZGF0YSBiYXNlZCBvbiBsYXllciB0eXBlLCBjb2wgQ29uZmlnLFxuICogcmV0dXJuIHVwZGF0ZWQgbGF5ZXIgaWYgY29sb3JEb21haW4sIGRhdGFNYXAgaGFzIGNoYW5nZWQuXG4gKiBBbHNvLCByZXR1cm5zIHVwZGF0ZWQgbGF5ZXIgaW4gY2FzZSB0aGUgaW5wdXQgbGF5ZXIgd2FzIGluIGludmFsaWQgc3RhdGUuXG4gKiBBZGRzIGFuIGVycm9yIG1lc3NhZ2UgdG8gdGhlIGxheWVyIGluIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTGF5ZXJEYXRhPFMgZXh0ZW5kcyBNaW5WaXNTdGF0ZUZvckxheWVyRGF0YT4oXG4gIGxheWVyOiBMYXllcixcbiAgc3RhdGU6IFMsXG4gIG9sZExheWVyRGF0YT86IGFueVxuKToge1xuICBsYXllckRhdGE6IGFueTtcbiAgbGF5ZXI6IExheWVyO1xufSB7XG4gIGxldCBsYXllckRhdGE7XG4gIHRyeSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciB1cGRhdGVzIGRhdGEgYWZ0ZXIgYW4gZXJyb3JcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIGxheWVyLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFsYXllci50eXBlIHx8ICFsYXllci5oYXNBbGxDb2x1bW5zKCkgfHwgIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAgIHJldHVybiB7bGF5ZXIsIGxheWVyRGF0YToge319O1xuICAgIH1cblxuICAgIGxheWVyRGF0YSA9IGxheWVyLmZvcm1hdExheWVyRGF0YShzdGF0ZS5kYXRhc2V0cywgb2xkTGF5ZXJEYXRhKTtcblxuICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGRhdGEgZm9yIHRoZSBsYXllciBpcyB1cGRhdGVkIHdpdGhvdXQgZXJyb3JzXG4gICAgaWYgKCFsYXllci5pc1ZhbGlkKSB7XG4gICAgICAvLyBTd2l0Y2ggdG8gdmlzaWJsZSBhZnRlciBhbiBlcnJvclxuICAgICAgbGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxheWVyLmlzVmFsaWQgPSB0cnVlO1xuICAgIGxheWVyLmVycm9yTWVzc2FnZSA9IG51bGw7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIENvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICB9KTtcbiAgICBsYXllci5pc1ZhbGlkID0gZmFsc2U7XG5cbiAgICBsYXllci5lcnJvck1lc3NhZ2UgPVxuICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZS5zdWJzdHJpbmcoMCwgMTAwKSA6ICdVbmtub3duIGVycm9yJztcblxuICAgIGxheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsYXllcixcbiAgICBsYXllckRhdGFcbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgcHJvcHMgcGFzc2VkIHRvIExheWVySG92ZXJJbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXllckhvdmVyUHJvcCh7XG4gIGFuaW1hdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Db25maWcsXG4gIGhvdmVySW5mbyxcbiAgbGF5ZXJzLFxuICBsYXllcnNUb1JlbmRlcixcbiAgZGF0YXNldHNcbn06IHtcbiAgaW50ZXJhY3Rpb25Db25maWc6IFZpc1N0YXRlWydpbnRlcmFjdGlvbkNvbmZpZyddO1xuICBhbmltYXRpb25Db25maWc6IFZpc1N0YXRlWydhbmltYXRpb25Db25maWcnXTtcbiAgaG92ZXJJbmZvOiBWaXNTdGF0ZVsnaG92ZXJJbmZvJ107XG4gIGxheWVyczogVmlzU3RhdGVbJ2xheWVycyddO1xuICBsYXllcnNUb1JlbmRlcjogTGF5ZXJzVG9SZW5kZXI7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbn0pOiBMYXllckhvdmVyUHJvcCB8IG51bGwge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5lbmFibGVkICYmIGhvdmVySW5mbyAmJiBob3ZlckluZm8ucGlja2VkKSB7XG4gICAgLy8gaWYgYW55dGhpbmcgaG92ZXJlZFxuICAgIGNvbnN0IHtvYmplY3QsIGxheWVyOiBvdmVybGF5fSA9IGhvdmVySW5mbztcblxuICAgIC8vIGRlY2tnbCBsYXllciB0byBrZXBsZXItZ2wgbGF5ZXJcbiAgICBjb25zdCBsYXllciA9IGxheWVyc1tvdmVybGF5LnByb3BzLmlkeF07XG5cbiAgICAvLyBOT1RFOiBmb3IgYmluYXJ5IGZvcm1hdCBHZW9qc29uTGF5ZXIsIGRlY2sgd2lsbCByZXR1cm4gb2JqZWN0PW51bGwgYnV0IGhvdmVySW5mby5pbmRleCA+PSAwXG4gICAgaWYgKFxuICAgICAgKG9iamVjdCB8fCBob3ZlckluZm8uaW5kZXggPj0gMCkgJiZcbiAgICAgIGxheWVyICYmXG4gICAgICBsYXllci5nZXRIb3ZlckRhdGEgJiZcbiAgICAgIGxheWVyc1RvUmVuZGVyW2xheWVyLmlkXVxuICAgICkge1xuICAgICAgLy8gaWYgbGF5ZXIgaXMgdmlzaWJsZSBhbmQgaGF2ZSBob3ZlcmVkIGRhdGFcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29uZmlnOiB7ZGF0YUlkfVxuICAgICAgfSA9IGxheWVyO1xuICAgICAgaWYgKCFkYXRhSWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB7ZGF0YUNvbnRhaW5lciwgZmllbGRzfSA9IGRhdGFzZXRzW2RhdGFJZF07XG4gICAgICBjb25zdCBkYXRhOiBEYXRhUm93IHwgbnVsbCA9IGxheWVyLmdldEhvdmVyRGF0YShcbiAgICAgICAgb2JqZWN0IHx8IGhvdmVySW5mby5pbmRleCxcbiAgICAgICAgZGF0YUNvbnRhaW5lcixcbiAgICAgICAgZmllbGRzLFxuICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgIGhvdmVySW5mb1xuICAgICAgKTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpZWxkc1RvU2hvdyA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGZpZWxkc1RvU2hvdyxcbiAgICAgICAgbGF5ZXIsXG4gICAgICAgIGN1cnJlbnRUaW1lOiBhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsXG4gICAgICAgIHRpbWV6b25lOiBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy50aW1lem9uZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgWk9PTV9PUEFDSVRZX1BST1BfS0VZUyA9IFsnb3BhY2l0eScsICdsaW5lT3BhY2l0eScsICdzdHJva2VPcGFjaXR5J107XG5cbi8qKiBTdHJva2UgYW5kIG91dGxpbmUgcHJvcHMgcmVwbGFjZSB0aGUgcGFyZW50IG9wYWNpdHksIHNvIHRoZXkgbmVlZCB0aGUgc2FtZSBmYWN0b3IuICovXG5mdW5jdGlvbiBzY2FsZVpvb21PcGFjaXR5U3ViTGF5ZXJQcm9wcyhcbiAgc3ViTGF5ZXJQcm9wczogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCxcbiAgZmFjdG9yOiBudW1iZXJcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAoIXN1YkxheWVyUHJvcHMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGNvbnN0IG5leHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyhzdWJMYXllclByb3BzKSkge1xuICAgIGNvbnN0IHN1YmxheWVyID0gc3ViTGF5ZXJQcm9wc1tpZF07XG4gICAgaWYgKCFzdWJsYXllciB8fCB0eXBlb2Ygc3VibGF5ZXIgIT09ICdvYmplY3QnKSB7XG4gICAgICBuZXh0W2lkXSA9IHN1YmxheWVyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNjYWxlZCA9IHsuLi5zdWJsYXllcn07XG4gICAgbGV0IHN1YmxheWVyQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFpPT01fT1BBQ0lUWV9QUk9QX0tFWVMpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3VibGF5ZXJba2V5XSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2NhbGVkW2tleV0gPSBzdWJsYXllcltrZXldICogZmFjdG9yO1xuICAgICAgICBzdWJsYXllckNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXh0W2lkXSA9IHN1YmxheWVyQ2hhbmdlZCA/IHNjYWxlZCA6IHN1YmxheWVyO1xuICAgIGlmIChzdWJsYXllckNoYW5nZWQpIHtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2hhbmdlZCA/IG5leHQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFwcGx5Wm9vbU9wYWNpdHlUb0RlY2tMYXllcihkZWNrTGF5ZXI6IGFueSwgZmFjdG9yOiBudW1iZXIpOiBhbnkge1xuICBpZiAoQXJyYXkuaXNBcnJheShkZWNrTGF5ZXIpKSB7XG4gICAgcmV0dXJuIGRlY2tMYXllci5tYXAobGF5ZXIgPT4gYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyKGxheWVyLCBmYWN0b3IpKTtcbiAgfVxuICBpZiAoIWRlY2tMYXllciB8fCBmYWN0b3IgPT09IDEgfHwgdHlwZW9mIGRlY2tMYXllci5jbG9uZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBkZWNrTGF5ZXI7XG4gIH1cbiAgY29uc3QgYmFzZU9wYWNpdHkgPSBkZWNrTGF5ZXIucHJvcHM/Lm9wYWNpdHk7XG4gIGNvbnN0IG9wYWNpdHkgPSAodHlwZW9mIGJhc2VPcGFjaXR5ID09PSAnbnVtYmVyJyA/IGJhc2VPcGFjaXR5IDogMSkgKiBmYWN0b3I7XG4gIGNvbnN0IHN1YkxheWVyUHJvcHMgPSBzY2FsZVpvb21PcGFjaXR5U3ViTGF5ZXJQcm9wcyhkZWNrTGF5ZXIucHJvcHM/Ll9zdWJMYXllclByb3BzLCBmYWN0b3IpO1xuICByZXR1cm4gZGVja0xheWVyLmNsb25lKHtcbiAgICBvcGFjaXR5LFxuICAgIC8vIEZ1bGx5IGZhZGVkIGxheWVycyBhcmUgbm90IHBpY2thYmxlLlxuICAgIHZpc2libGU6IGRlY2tMYXllci5wcm9wcz8udmlzaWJsZSAhPT0gZmFsc2UgJiYgZmFjdG9yID4gMCxcbiAgICAuLi4oc3ViTGF5ZXJQcm9wcyA/IHtfc3ViTGF5ZXJQcm9wczogc3ViTGF5ZXJQcm9wc30gOiB7fSlcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEZWNrR2xMYXllcihwcm9wczogYW55LCBsYXllckNhbGxiYWNrczoge1trZXk6IHN0cmluZ106IGFueX0pIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGxheWVyLFxuICAgIGxheWVySW5kZXgsXG4gICAgZGF0YSxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBtYXBTdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgbWFwTGF5ZXJzLFxuICAgIGV4cGVyaW1lbnRhbENvbnRleHRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IHtncHVGaWx0ZXJ9ID0gZGF0YXNldCB8fCB7fTtcbiAgY29uc3Qgb2JqZWN0SG92ZXJlZCA9IGNsaWNrZWQgfHwgaG92ZXJJbmZvO1xuICAvLyBpbiBzcGxpdCBtb2RlIGEgbGF5ZXIgbWlzc2luZyBmcm9tIG1hcExheWVycyBpcyBoaWRkZW4sIHNvIGNvZXJjZSB0byBhIGJvb2xlYW5cbiAgLy8gaW5zdGVhZCBvZiBsZWFraW5nIHVuZGVmaW5lZCBpbnRvIGRlY2suZ2wncyB2aXNpYmxlIHByb3BcbiAgY29uc3QgdmlzaWJsZSA9ICFtYXBMYXllcnMgfHwgQm9vbGVhbihtYXBMYXllcnNbbGF5ZXIuaWRdKTtcbiAgLy8gTGF5ZXIgaXMgTGF5ZXIgY2xhc3NcbiAgY29uc3QgcmVuZGVyZWQgPSBsYXllci5yZW5kZXJMYXllcih7XG4gICAgZGF0YSxcbiAgICBncHVGaWx0ZXIsXG4gICAgaWR4OiBsYXllckluZGV4LFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGxheWVyQ2FsbGJhY2tzLFxuICAgIG1hcFN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBvYmplY3RIb3ZlcmVkLFxuICAgIHZpc2libGUsXG4gICAgZGF0YXNldCxcbiAgICBleHBlcmltZW50YWxDb250ZXh0XG4gIH0pO1xuICBjb25zdCBmYWN0b3IgPSBnZXRMYXllclpvb21PcGFjaXR5RmFjdG9yKGxheWVyLmlkLCBtYXBTdGF0ZT8uem9vbSwgaW50ZXJhY3Rpb25Db25maWcpO1xuICByZXR1cm4gYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyKHJlbmRlcmVkLCBmYWN0b3IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclJlbmRlcmFibGUobGF5ZXI6IExheWVyLCBsYXllckRhdGEpIHtcbiAgcmV0dXJuIGxheWVyLmlkICE9PSBHRU9DT0RFUl9MQVlFUl9JRCAmJiBsYXllci5zaG91bGRSZW5kZXJMYXllcihsYXllckRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycykge1xuICByZXR1cm4gKFxuICAgIGxheWVyLmNvbmZpZy5pc1Zpc2libGUgJiZcbiAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBkb24ndCByZW5kZXIgaXRcbiAgICAoIW1hcExheWVycyB8fCAobWFwTGF5ZXJzICYmIG1hcExheWVyc1tsYXllci5pZF0pKVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiBsYXllcnMgcmVuZGVyZWQgYnkgdGhlIGRlY2suZ2xcbi8vIE5vdGUsIGlzVmlzaWJsZTogZmFsc2UgbGF5ZXIgaXMgcGFzc2VkIHRvIGRlY2suZ2wgaGVyZVxuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNGb3JEZWNrKFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogVmlzU3RhdGVbJ2xheWVyRGF0YSddXG4pOiB7XG4gIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XG59IHtcbiAgcmV0dXJuIGxheWVycy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyLCBpZHgpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2xheWVyLmlkXTpcbiAgICAgICAgaXNMYXllclJlbmRlcmFibGUobGF5ZXIsIGxheWVyRGF0YVtpZHhdKSAmJiBsYXllci5vdmVybGF5VHlwZSA9PT0gT1ZFUkxBWV9UWVBFX0NPTlNULmRlY2tnbFxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8vIFByZXBhcmUgYSBkaWN0IG9mIHJlbmRlcmVkIGxheWVycyByZW5kZXJlZCBpbiB0aGUgbWFwXG4vLyBUaGlzIGluY2x1ZGVzIG9ubHkgdGhlIHZpc2liaWxlIGxheWVycyBmb3Igc2luZ2xlIG1hcCB2aWV3IGFuZCBzcGxpdCBtYXAgdmlld1xuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNUb1JlbmRlcihcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IFZpc1N0YXRlWydsYXllckRhdGEnXSxcbiAgbWFwTGF5ZXJzPzogU3BsaXRNYXBMYXllcnMgfCB1bmRlZmluZWQgfCBudWxsXG4pOiBMYXllcnNUb1JlbmRlciB7XG4gIHJldHVybiBsYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllciwgaWR4KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5pZF06IGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyLCBsYXllckRhdGFbaWR4XSkgJiYgaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycylcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG50eXBlIEN1c3RvbURlY2tMYXllciA9IERlY2tMYXllcjxEZWNrTGF5ZXJQcm9wcz47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21EZWNrTGF5ZXJzKGRlY2tHbFByb3BzPzogYW55KTogW0N1c3RvbURlY2tMYXllcltdLCBDdXN0b21EZWNrTGF5ZXJbXV0ge1xuICBjb25zdCBib3R0b21EZWNrTGF5ZXJzID0gQXJyYXkuaXNBcnJheShkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVyc1xuICAgIDogaXNGdW5jdGlvbihkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVycygpXG4gICAgOiBbXTtcbiAgY29uc3QgdG9wRGVja0xheWVycyA9IEFycmF5LmlzQXJyYXkoZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnNcbiAgICA6IGlzRnVuY3Rpb24oZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnMoKVxuICAgIDogW107XG5cbiAgcmV0dXJuIFtib3R0b21EZWNrTGF5ZXJzLCB0b3BEZWNrTGF5ZXJzXTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcHV0ZURlY2tMYXllcnNQcm9wcyA9IHtcbiAgbWFwSW5kZXg/OiBudW1iZXI7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw/OiBzdHJpbmc7XG4gIHByaW1hcnlNYXA/OiBib29sZWFuO1xuICBpc0Fubm90YXRpb25Nb2RlPzogYm9vbGVhbjtcbiAgbGF5ZXJzRm9yRGVjaz86IHtba2V5OiBzdHJpbmddOiBib29sZWFufTtcbiAgZWRpdG9ySW5mbz86IHtcbiAgICBlZGl0b3I6IEVkaXRvcjtcbiAgICBlZGl0b3JNZW51QWN0aXZlOiBib29sZWFuO1xuICAgIG9uU2V0RmVhdHVyZXM6IChmZWF0dXJlczogRmVhdHVyZVtdKSA9PiBhbnk7XG4gICAgc2V0U2VsZWN0ZWRGZWF0dXJlOiAoXG4gICAgICBmZWF0dXJlOiBGZWF0dXJlIHwgbnVsbCxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHQ/OiBGZWF0dXJlU2VsZWN0aW9uQ29udGV4dFxuICAgICkgPT4gYW55O1xuICAgIG9uQXBwbHlQb2x5Z29uRmlsdGVyQWxsPzogKGZlYXR1cmU6IEZlYXR1cmUpID0+IGFueTtcbiAgICBmZWF0dXJlQ29sbGVjdGlvbjoge1xuICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbiAgICB9O1xuICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4ZXM6IG51bWJlcltdO1xuICAgIHZpZXdwb3J0OiBWaWV3cG9ydDtcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTGF5ZXJDYWxsYmFja3MoXG4gIGxheWVyQ2FsbGJhY2tzOiBMYXllckNhbGxiYWNrcyA9IHt9LFxuICBpZHg6IG51bWJlclxuKTogQmluZGVkTGF5ZXJDYWxsYmFja3Mge1xuICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJDYWxsYmFja3MpLnJlZHVjZShcbiAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtrZXldOiB2YWwgPT4gbGF5ZXJDYWxsYmFja3Nba2V5XShpZHgsIHZhbClcbiAgICB9KSxcbiAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCAodmFsOiB1bmtub3duKSA9PiB2b2lkPlxuICApO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogYW55W10sXG4gIGN1cnJlbnRMYXllcnNGb3JEZWNrOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0sXG4gIHJlbmRlclByb3BzOiB7XG4gICAgZGF0YXNldHM6IGFueTtcbiAgICBob3ZlckluZm86IGFueTtcbiAgICBjbGlja2VkOiBhbnk7XG4gICAgbWFwU3RhdGU6IGFueTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzogYW55O1xuICAgIGFuaW1hdGlvbkNvbmZpZzogYW55O1xuICAgIG1hcExheWVyczogYW55O1xuICAgIGhhc1NoYWRvd0VmZmVjdDogYm9vbGVhbjtcbiAgICBpc0Fubm90YXRpb25Nb2RlPzogYm9vbGVhbjtcbiAgfSxcbiAgbGF5ZXJDYWxsYmFja3M/OiBhbnlcbik6IGFueVtdIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnMsXG4gICAgaGFzU2hhZG93RWZmZWN0LFxuICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgfSA9IHJlbmRlclByb3BzO1xuICByZXR1cm4gbGF5ZXJPcmRlclxuICAgIC5zbGljZSgpXG4gICAgLnJldmVyc2UoKVxuICAgIC5yZWR1Y2UoKG92ZXJsYXlzLCBlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBsYXllckdyb3VwID0gZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgIGlmICghbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChcbiAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgbGF5ZXJHcm91cC5sYXllck9yZGVyLFxuICAgICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgY3VycmVudExheWVyc0ZvckRlY2ssXG4gICAgICAgICAgICByZW5kZXJQcm9wcyxcbiAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF5ZXJJZCA9IGVsZW1lbnQgYXMgc3RyaW5nO1xuICAgICAgaWYgKCFjdXJyZW50TGF5ZXJzRm9yRGVja1tsYXllcklkXSkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgPyBiaW5kTGF5ZXJDYWxsYmFja3MobGF5ZXJDYWxsYmFja3MsIGxheWVySW5kZXgpXG4gICAgICAgIDoge307XG4gICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgIGNvbnN0IGRhdGEgPSBsYXllckRhdGFbbGF5ZXJJbmRleF07XG4gICAgICBjb25zdCBsYXllck92ZXJsYXkgPSByZW5kZXJEZWNrR2xMYXllcihcbiAgICAgICAge1xuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbENvbnRleHQ6IHtcbiAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRlZExheWVyQ2FsbGJhY2tzXG4gICAgICApO1xuICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgIH0sIFtdIGFzIGFueVtdKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRGVja0xheWVycyhcbiAge3Zpc1N0YXRlLCBtYXBTdGF0ZSwgbWFwU3R5bGV9OiBhbnksXG4gIG9wdGlvbnM/OiBDb21wdXRlRGVja0xheWVyc1Byb3BzLFxuICBsYXllckNhbGxiYWNrcz86IExheWVyQ2FsbGJhY2tzLFxuICBkZWNrR2xQcm9wcz86IGFueVxuKTogTGF5ZXJbXSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhc2V0cyxcbiAgICBlZmZlY3RzLFxuICAgIGxheWVycyxcbiAgICBsYXllck9yZGVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgc3BsaXRNYXBzXG4gIH0gPSB2aXNTdGF0ZTtcblxuICBjb25zdCB7XG4gICAgbWFwSW5kZXgsXG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgbWFwYm94QXBpVXJsLFxuICAgIHByaW1hcnlNYXAsXG4gICAgbGF5ZXJzRm9yRGVjayxcbiAgICBlZGl0b3JJbmZvLFxuICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGRhdGFMYXllcnM6IGFueVtdID0gW107XG5cbiAgY29uc3QgaGFzU2hhZG93RWZmZWN0ID0gZWZmZWN0cy5zb21lKGVmZmVjdCA9PiB7XG4gICAgcmV0dXJuIGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlO1xuICB9KTtcblxuICBpZiAobGF5ZXJEYXRhICYmIGxheWVyRGF0YS5sZW5ndGgpIHtcbiAgICBjb25zdCBtYXBMYXllcnMgPSBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzKHNwbGl0TWFwcywgbWFwSW5kZXggfHwgMCk7XG5cbiAgICBjb25zdCBjdXJyZW50TGF5ZXJzRm9yRGVjayA9IGxheWVyc0ZvckRlY2sgfHwgcHJlcGFyZUxheWVyc0ZvckRlY2sobGF5ZXJzLCBsYXllckRhdGEpO1xuXG4gICAgZGF0YUxheWVycyA9IGxheWVyT3JkZXJcbiAgICAgIC5zbGljZSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAucmVkdWNlKChvdmVybGF5cywgZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBlbGVtZW50IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgICBpZiAoIWxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQoXG4gICAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgICBsYXllckdyb3VwLmxheWVyT3JkZXIsXG4gICAgICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgICBjdXJyZW50TGF5ZXJzRm9yRGVjayxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICBtYXBMYXllcnMsXG4gICAgICAgICAgICAgICAgaGFzU2hhZG93RWZmZWN0LFxuICAgICAgICAgICAgICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxheWVySWQgPSBlbGVtZW50IGFzIHN0cmluZztcbiAgICAgICAgaWYgKCFjdXJyZW50TGF5ZXJzRm9yRGVja1tsYXllcklkXSkge1xuICAgICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgICBpZiAobGF5ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmluZGVkTGF5ZXJDYWxsYmFja3MgPSBsYXllckNhbGxiYWNrc1xuICAgICAgICAgID8gYmluZExheWVyQ2FsbGJhY2tzKGxheWVyQ2FsbGJhY2tzLCBsYXllckluZGV4KVxuICAgICAgICAgIDoge307XG4gICAgICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW2xheWVySW5kZXhdO1xuICAgICAgICBjb25zdCBkYXRhID0gbGF5ZXJEYXRhW2xheWVySW5kZXhdO1xuICAgICAgICBjb25zdCBsYXllck92ZXJsYXkgPSByZW5kZXJEZWNrR2xMYXllcihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgbGF5ZXJJbmRleCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIG1hcExheWVycyxcbiAgICAgICAgICAgIGV4cGVyaW1lbnRhbENvbnRleHQ6IHtcbiAgICAgICAgICAgICAgaGFzU2hhZG93RWZmZWN0LFxuICAgICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBiaW5kZWRMYXllckNhbGxiYWNrc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KGxheWVyT3ZlcmxheSB8fCBbXSk7XG4gICAgICB9LCBbXSk7XG4gIH1cblxuICBpZiAoIXByaW1hcnlNYXApIHtcbiAgICByZXR1cm4gZGF0YUxheWVycztcbiAgfVxuXG4gIGlmIChcbiAgICBtYXBTdHlsZT8udmlzaWJsZUxheWVyR3JvdXBzWyczZCBidWlsZGluZyddICYmXG4gICAgcHJpbWFyeU1hcCAmJlxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuICYmXG4gICAgbWFwYm94QXBpVXJsXG4gICkge1xuICAgIGRhdGFMYXllcnMucHVzaChcbiAgICAgIG5ldyBUaHJlZURCdWlsZGluZ0xheWVyKHtcbiAgICAgICAgaWQ6ICdfa2VwbGVyZ2xfM2QtYnVpbGRpbmcnLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICB0aHJlZURCdWlsZGluZ0NvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yLFxuICAgICAgICBwaWNrYWJsZTogQm9vbGVhbihpc0Fubm90YXRpb25Nb2RlKSxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICBnZXRGaWxsQ29sb3I6IG1hcFN0eWxlLnRocmVlREJ1aWxkaW5nQ29sb3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY29uc3QgW2N1c3RvbUJvdHRvbURlY2tMYXllcnMsIGN1c3RvbVRvcERlY2tMYXllcnNdID0gZ2V0Q3VzdG9tRGVja0xheWVycyhkZWNrR2xQcm9wcyk7XG5cbiAgY29uc3QgZWRpdG9yTGF5ZXI6IGFueVtdID0gW107XG4gIGlmIChlZGl0b3JJbmZvKSB7XG4gICAgZWRpdG9yTGF5ZXIucHVzaChcbiAgICAgIGdldEVkaXRvckxheWVyKHtcbiAgICAgICAgLi4uZWRpdG9ySW5mbyxcbiAgICAgICAgbWFwU3RhdGVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBbLi4uY3VzdG9tQm90dG9tRGVja0xheWVycywgLi4uZGF0YUxheWVycywgLi4uY3VzdG9tVG9wRGVja0xheWVycywgLi4uZWRpdG9yTGF5ZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnM8VCBleHRlbmRzIHtpZDogc3RyaW5nfT4obGF5ZXJzOiBUW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBsYXllcnMubWFwKCh7aWR9KSA9PiBpZCk7XG59XG5cbi8vIC0tLSBMYXllciBHcm91cCBVdGlsaXRpZXMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdMYXllckdyb3VwKHByb3BzPzogUGFydGlhbDxMYXllck9yZGVyR3JvdXA+KTogTGF5ZXJPcmRlckdyb3VwIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogcHJvcHM/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBwcm9wcz8ubGFiZWwgPz8gJ05ldyBncm91cCcsXG4gICAgaXNWaXNpYmxlOiBwcm9wcz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgbGF5ZXJPcmRlcjogcHJvcHM/LmxheWVyT3JkZXIgPz8gW10sXG4gICAgaXNJbmNsdWRlZEluTGVnZW5kOiBwcm9wcz8uaXNJbmNsdWRlZEluTGVnZW5kID8/IHRydWVcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgZWxlbWVudDogTGF5ZXJPcmRlckVudHJ5LFxuICBhdEluZGV4PzogbnVtYmVyXG4pOiBMYXllck9yZGVyIHtcbiAgY29uc3QgaWR4ID0gYXRJbmRleCA/PyAwO1xuICBjb25zdCByZXN1bHQgPSBbLi4ubGF5ZXJPcmRlcl07XG4gIHJlc3VsdC5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgZWxlbWVudDogTGF5ZXJPcmRlckVudHJ5XG4pOiBMYXllck9yZGVyIHtcbiAgaWYgKCFsYXllck9yZGVyKSByZXR1cm4gW107XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyA/IGVsZW1lbnQgOiBlbGVtZW50LmlkO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IGxheWVyT3JkZXIuZmlsdGVyKGVudHJ5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHJldHVybiAoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5pZCAhPT0gZWxlbWVudElkO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnkgIT09IGVsZW1lbnRJZDtcbiAgfSk7XG5cbiAgbmV3TGF5ZXJPcmRlciA9IG5ld0xheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihncm91cC5sYXllck9yZGVyLCBlbGVtZW50SWQpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0pO1xuXG4gIHJldHVybiBuZXdMYXllck9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllckdyb3VwSWQ6IHN0cmluZ1xuKTogTGF5ZXJPcmRlckdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGdyb3VwOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWdyb3VwOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBncm91cCA9XG4gICAgICAgIGdycC5pZCA9PT0gbGF5ZXJHcm91cElkID8gZ3JwIDogZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKGdycC5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogR3JvdXBzIHRoYXQgY29udGFpbiBgZW50cnlJZGAsIG5lYXJlc3QgcGFyZW50IGZpcnN0LlxuICogYGVudHJ5SWRgIG1heSBiZSBhIGxheWVyIGlkIG9yIGEgbmVzdGVkIGdyb3VwIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5jZXN0b3JMYXllckdyb3VwcyhsYXllck9yZGVyOiBMYXllck9yZGVyLCBlbnRyeUlkOiBzdHJpbmcpOiBMYXllck9yZGVyR3JvdXBbXSB7XG4gIGNvbnN0IGFuY2VzdG9yczogTGF5ZXJPcmRlckdyb3VwW10gPSBbXTtcblxuICBjb25zdCB2aXNpdCA9IChlbnRyaWVzOiBMYXllck9yZGVyKTogYm9vbGVhbiA9PiB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoZW50cnkgPT09IGVudHJ5SWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGlmIChncm91cC5pZCA9PT0gZW50cnlJZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh2aXNpdChncm91cC5sYXllck9yZGVyKSkge1xuICAgICAgICBhbmNlc3RvcnMucHVzaChncm91cCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgdmlzaXQobGF5ZXJPcmRlcik7XG4gIHJldHVybiBhbmNlc3RvcnM7XG59XG5cbi8qKlxuICogV2hldGhlciBhIGxheWVyIHNob3VsZCBiZSBkcmF3biBpbiB0aGUgbWFwIGxlZ2VuZC5cbiAqIEEgbGF5ZXIgc3RheXMgb24gdGhlIG1hcCB3aGVuIHRoaXMgaXMgZmFsc2UuIE1pc3NpbmcgZmxhZ3MgY291bnQgYXMgaW5jbHVkZWQuXG4gKiBBbiBhbmNlc3RvciBncm91cCB3aXRoIGBpc0luY2x1ZGVkSW5MZWdlbmQ6IGZhbHNlYCBoaWRlcyB0aGUgbGF5ZXIgYXMgd2VsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJTaG93bkluTGVnZW5kKFxuICBsYXllcjoge2lkOiBzdHJpbmc7IGNvbmZpZzoge2lzSW5jbHVkZWRJbkxlZ2VuZD86IGJvb2xlYW59fSxcbiAgbGF5ZXJPcmRlcj86IExheWVyT3JkZXJcbik6IGJvb2xlYW4ge1xuICBpZiAobGF5ZXIuY29uZmlnLmlzSW5jbHVkZWRJbkxlZ2VuZCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFsYXllck9yZGVyPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZ2V0QW5jZXN0b3JMYXllckdyb3VwcyhsYXllck9yZGVyLCBsYXllci5pZCkuZXZlcnkoXG4gICAgZ3JvdXAgPT4gZ3JvdXAuaXNJbmNsdWRlZEluTGVnZW5kICE9PSBmYWxzZVxuICApO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHBhcmVudCBncm91cCB0aGF0IGNvbnRhaW5zIGEgZ2l2ZW4gbGF5ZXIgSUQuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgbGF5ZXIgaXMgYXQgdGhlIHJvb3QgbGV2ZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJJZDogc3RyaW5nXG4pOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxheWVyT3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdyb3VwLmxheWVyT3JkZXIuc29tZShlID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJyAmJiBlID09PSBsYXllcklkKSkge1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXN0ZWQgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihncm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgICAgIGlmIChuZXN0ZWQpIHJldHVybiBuZXN0ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmRleEZyb21MYXllckVudHJ5SWQobGF5ZXJPcmRlcjogTGF5ZXJPcmRlciwgbGF5ZXJFbnRyeUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICBpc1BsYWluT2JqZWN0KGVudHJ5KSA/IChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmlkID09PSBsYXllckVudHJ5SWQgOiBlbnRyeSA9PT0gbGF5ZXJFbnRyeUlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyLCBsYXllcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWZvdW5kOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBmb3VuZCA9IGlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3VuZCA9IGxheWVySWQgPT09IGVudHJ5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgb2xkRW50cnk6IExheWVyT3JkZXJFbnRyeSxcbiAgbmV3RW50cnk6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IG9sZEVudHJ5SWQgPSB0eXBlb2Ygb2xkRW50cnkgPT09ICdzdHJpbmcnID8gb2xkRW50cnkgOiBvbGRFbnRyeS5pZDtcbiAgcmV0dXJuIGxheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVudHJ5ID09PSBvbGRFbnRyeUlkID8gbmV3RW50cnkgOiBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmlkID09PSBvbGRFbnRyeUlkKSB7XG4gICAgICAgIHJldHVybiBuZXdFbnRyeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIG9sZEVudHJ5LCBuZXdFbnRyeSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBuZXdMYXllckdyb3VwOiBMYXllck9yZGVyR3JvdXBcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdycC5pZCA9PT0gbmV3TGF5ZXJHcm91cC5pZCkge1xuICAgICAgICByZXR1cm4gbmV3TGF5ZXJHcm91cDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbGF0TGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyKTogRmxhdExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgb3JkZXJFbnRyeSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9yZGVyRW50cnkpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgLi4uZ2V0RmxhdExheWVyT3JkZXIoKG9yZGVyRW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKV07XG4gICAgfVxuICAgIHJldHVybiBbLi4uYWNjLCBvcmRlckVudHJ5IGFzIHN0cmluZ107XG4gIH0sIFtdIGFzIEZsYXRMYXllck9yZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeShcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzPzogTGF5ZXJbXSB8IHJlYWRvbmx5IExheWVyW11cbik6IExheWVyT3JkZXJIaWVyYXJjaHkge1xuICBjb25zdCB2YWxpZExheWVycyA9IGxheWVycz8uZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgWydsYXllckdyb3VwJywgZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXBdIGFzIGNvbnN0XTtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXIgPSB2YWxpZExheWVycz8uZmluZChsID0+IGwuaWQgPT09IGVsZW1lbnQpO1xuICAgIGlmICghbGF5ZXIgfHwgbGF5ZXIuY29uZmlnLmhpZGRlbikge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5hY2MsIFsnbGF5ZXInLCBsYXllcl0gYXMgY29uc3RdO1xuICB9LCBbXSBhcyBMYXllck9yZGVySGllcmFyY2h5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiB7aWQ6IHN0cmluZ31bXVxuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAobGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBlbnRyeSkpIHtcbiAgICAgICAgYWNjLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmxheWVyT3JkZXIpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIC4uLmdycCxcbiAgICAgICAgICBsYXllck9yZGVyOiByZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIGxheWVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzIExheWVyT3JkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIG9yaWdpbkxheWVySWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25MYXllcklkOiBzdHJpbmdcbik6IFZpc1N0YXRlWydsYXllck9yZGVyJ10ge1xuICBjb25zdCBhY3RpdmVJbmRleCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChsYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgY29uc3Qgb3ZlckluZGV4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKGxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG5cbiAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSB8fCBvdmVySW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIGxheWVyT3JkZXI7XG4gIH1cbiAgcmV0dXJuIGFycmF5TW92ZShsYXllck9yZGVyLCBhY3RpdmVJbmRleCwgb3ZlckluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyVG9MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBWaXNTdGF0ZVsnbGF5ZXJPcmRlciddLFxuICBsYXllcklkOiBzdHJpbmdcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gW2xheWVySWQsIC4uLmxheWVyT3JkZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZShcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGZpZWxkSW5kZXg6IG51bWJlclxuKSB7XG4gIGlmICghZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRhUm93KSByZXR1cm4gZGF0YS52YWx1ZUF0KGZpZWxkSW5kZXgpO1xuICByZXR1cm4gZGF0YVtmaWVsZEluZGV4XTtcbn1cblxuLyoqIENoZWNrcyBpZiBhbnkgRGVjayBsYXllcnMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYXJlQW55RGVja0xheWVyc0xvYWRpbmcobGF5ZXJzOiBEZWNrTGF5ZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXJzLnNvbWUoXG4gICAgLy8gbGF5ZXIuaXNMb2FkZWQgY2hhbmdlcyBmcmVxdWVudGx5IGluIERlY2sgKGV2ZW4gb24gaG92ZXIpIHNvIHdlIGNoZWNrIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgIGxheWVyID0+IGxheWVyLmludGVybmFsU3RhdGUgJiYgIWxheWVyLmlzTG9hZGVkXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FB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