@decaf-ts/db-decorators 0.3.4 → 0.4.1

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 (55) hide show
  1. package/dist/db-decorators.bundle.min.js +1 -1
  2. package/dist/esm/db-decorators.bundle.min.esm.js +1 -1
  3. package/lib/esm/identity/utils.js +3 -3
  4. package/lib/esm/interfaces/Contextual.d.ts +4 -0
  5. package/lib/esm/interfaces/Contextual.js +3 -0
  6. package/lib/esm/interfaces/IRepository.d.ts +3 -3
  7. package/lib/esm/interfaces/IRepository.js +1 -1
  8. package/lib/esm/model/decorators.d.ts +2 -1
  9. package/lib/esm/model/decorators.js +2 -2
  10. package/lib/esm/operations/decorators.d.ts +29 -2
  11. package/lib/esm/operations/decorators.js +33 -2
  12. package/lib/esm/operations/types.d.ts +4 -3
  13. package/lib/esm/operations/types.js +1 -1
  14. package/lib/esm/repository/BaseRepository.d.ts +13 -11
  15. package/lib/esm/repository/BaseRepository.js +68 -52
  16. package/lib/esm/repository/Context.d.ts +11 -0
  17. package/lib/esm/repository/Context.js +49 -0
  18. package/lib/esm/repository/DataCache.d.ts +2 -1
  19. package/lib/esm/repository/DataCache.js +8 -1
  20. package/lib/esm/repository/Repository.js +25 -14
  21. package/lib/esm/repository/index.d.ts +1 -0
  22. package/lib/esm/repository/index.js +2 -1
  23. package/lib/esm/repository/utils.d.ts +7 -1
  24. package/lib/esm/repository/utils.js +5 -4
  25. package/lib/esm/repository/wrappers.d.ts +2 -2
  26. package/lib/esm/repository/wrappers.js +9 -4
  27. package/lib/esm/validation/decorators.d.ts +2 -1
  28. package/lib/esm/validation/decorators.js +3 -3
  29. package/lib/identity/utils.cjs +2 -2
  30. package/lib/interfaces/Contextual.cjs +4 -0
  31. package/lib/interfaces/Contextual.d.ts +4 -0
  32. package/lib/interfaces/IRepository.cjs +1 -1
  33. package/lib/interfaces/IRepository.d.ts +3 -3
  34. package/lib/model/decorators.cjs +2 -2
  35. package/lib/model/decorators.d.ts +2 -1
  36. package/lib/operations/decorators.cjs +35 -2
  37. package/lib/operations/decorators.d.ts +29 -2
  38. package/lib/operations/types.cjs +1 -1
  39. package/lib/operations/types.d.ts +4 -3
  40. package/lib/repository/BaseRepository.cjs +66 -50
  41. package/lib/repository/BaseRepository.d.ts +13 -11
  42. package/lib/repository/Context.cjs +53 -0
  43. package/lib/repository/Context.d.ts +11 -0
  44. package/lib/repository/DataCache.cjs +8 -1
  45. package/lib/repository/DataCache.d.ts +2 -1
  46. package/lib/repository/Repository.cjs +24 -13
  47. package/lib/repository/index.cjs +2 -1
  48. package/lib/repository/index.d.ts +1 -0
  49. package/lib/repository/utils.cjs +5 -4
  50. package/lib/repository/utils.d.ts +7 -1
  51. package/lib/repository/wrappers.cjs +10 -5
  52. package/lib/repository/wrappers.d.ts +2 -2
  53. package/lib/validation/decorators.cjs +3 -3
  54. package/lib/validation/decorators.d.ts +2 -1
  55. package/package.json +1 -1
@@ -30,6 +30,7 @@ export const getHandlerArgs = function (dec, prop, m, accum) {
30
30
  /**
31
31
  *
32
32
  * @param {IRepository<T>} repo
33
+ * @param context
33
34
  * @param {T} model
34
35
  * @param operation
35
36
  * @param prefix
@@ -39,7 +40,7 @@ export const getHandlerArgs = function (dec, prop, m, accum) {
39
40
  *
40
41
  * @memberOf db-decorators.utils
41
42
  */
42
- export async function enforceDBDecorators(repo, model, operation, prefix, oldModel) {
43
+ export async function enforceDBDecorators(repo, context, model, operation, prefix, oldModel) {
43
44
  const decorators = getDbDecorators(model, operation, prefix);
44
45
  if (!decorators)
45
46
  return;
@@ -58,8 +59,8 @@ export async function enforceDBDecorators(repo, model, operation, prefix, oldMod
58
59
  for (let i = 0; i < handlers.length; i++) {
59
60
  handler = handlers[i];
60
61
  data = Object.values(handlerArgs)[i];
61
- const args = [data.data, prop, model];
62
- if (operation === OperationKeys.UPDATE) {
62
+ const args = [context, data.data, prop, model];
63
+ if (operation === OperationKeys.UPDATE && prefix === OperationKeys.ON) {
63
64
  if (!oldModel)
64
65
  throw new InternalError("Missing old model for update operation");
65
66
  args.push(oldModel);
@@ -164,4 +165,4 @@ export const getAllPropertyDecoratorsRecursive = function (model, accum, ...pref
164
165
  return getAllPropertyDecoratorsRecursive(proto, accumulator, ...prefixes);
165
166
  };
166
167
 
167
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUVMLHdCQUF3QixHQUN6QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUdMLFNBQVMsRUFDVCxFQUFFLEdBQ0gsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsVUFDNUIsR0FBUSxFQUNSLElBQVksRUFDWixDQUFtQixFQUNuQixLQUEwQztJQUUxQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUNoQyxJQUFJLENBQUMsSUFBSTtRQUFFLE1BQU0sSUFBSSxhQUFhLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUN0RSxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUVwQixJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM1RCxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFFMUQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzdDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FB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LFNBQVM7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUUxRSx1Q0FBdUM7SUFDdkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQy9CLDREQUE0RDtJQUM1RCwyQ0FBMkM7SUFDM0MsT0FBTyxpQ0FBaUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDNUUsQ0FBQyxDQUFDIiwiZmlsZSI6InJlcG9zaXRvcnkvdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGVyYXRpb25zIH0gZnJvbSBcIi4uL29wZXJhdGlvbnMvT3BlcmF0aW9uc1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uSGFuZGxlciwgVXBkYXRlT3BlcmF0aW9uSGFuZGxlciB9IGZyb20gXCIuLi9vcGVyYXRpb25zL3R5cGVzXCI7XG5pbXBvcnQgeyBJUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL0lSZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIi4uL29wZXJhdGlvbnMvY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBEZWNvcmF0b3JNZXRhZGF0YSxcbiAgZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzLFxufSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7XG4gIENvbnN0cnVjdG9yLFxuICBNb2RlbCxcbiAgTW9kZWxLZXlzLFxuICBzZixcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IHJldHJpZXZlcyB0aGUgYXJndW1lbnRzIGZvciB0aGUgaGFuZGxlclxuICogQHBhcmFtIHthbnl9IGRlYyB0aGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCB0aGUgcHJvcGVydHkgbmFtZVxuICogQHBhcmFtIHt7fX0gbSB0aGUgbW9kZWxcbiAqIEBwYXJhbSB7e319IFthY2N1bV0gYWNjdW11bGF0b3IgdXNlZCBmb3IgaW50ZXJuYWwgcmVjdXJzaXZlbmVzc1xuICpcbiAqIEBmdW5jdGlvbiBnZXRIYW5kbGVyQXJnc1xuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLlJlcG9zaXRvcnlcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhhbmRsZXJBcmdzID0gZnVuY3Rpb24gKFxuICBkZWM6IGFueSxcbiAgcHJvcDogc3RyaW5nLFxuICBtOiBDb25zdHJ1Y3Rvcjxhbnk+LFxuICBhY2N1bT86IFJlY29yZDxzdHJpbmcsIHsgYXJnczogc3RyaW5nW10gfT5cbik6IFJlY29yZDxzdHJpbmcsIHsgYXJnczogc3RyaW5nW10gfT4gfCB2b2lkIHtcbiAgY29uc3QgbmFtZSA9IG0uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKCFuYW1lKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgbW9kZWwgY2xhc3NcIik7XG4gIGFjY3VtID0gYWNjdW0gfHwge307XG5cbiAgaWYgKGRlYy5wcm9wcy5oYW5kbGVyc1tuYW1lXSAmJiBkZWMucHJvcHMuaGFuZGxlcnNbbmFtZV1bcHJvcF0pXG4gICAgYWNjdW0gPSB7IC4uLmRlYy5wcm9wcy5oYW5kbGVyc1tuYW1lXVtwcm9wXSwgLi4uYWNjdW0gfTtcblxuICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobSk7XG4gIGlmIChwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIGFjY3VtO1xuICBpZiAocHJvdG8uY29uc3RydWN0b3IubmFtZSA9PT0gbmFtZSkgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuXG4gIHJldHVybiBnZXRIYW5kbGVyQXJncyhkZWMsIHByb3AsIHByb3RvLCBhY2N1bSk7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0lSZXBvc2l0b3J5PFQ+fSByZXBvXG4gKiBAcGFyYW0ge1R9IG1vZGVsXG4gKiBAcGFyYW0gb3BlcmF0aW9uXG4gKiBAcGFyYW0gcHJlZml4XG4gKlxuICogQHBhcmFtIG9sZE1vZGVsXG4gKiBAZnVuY3Rpb24gZW5mb3JjZURCUHJvcGVydHlEZWNvcmF0b3JzQXN5bmNcbiAqXG4gKiBAbWVtYmVyT2YgZGItZGVjb3JhdG9ycy51dGlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5mb3JjZURCRGVjb3JhdG9yczxcbiAgVCBleHRlbmRzIE1vZGVsLFxuICBZIGV4dGVuZHMgSVJlcG9zaXRvcnk8VD4sXG4gIFYsXG4+KFxuICByZXBvOiBZLFxuICBtb2RlbDogVCxcbiAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gIHByZWZpeDogc3RyaW5nLFxuICBvbGRNb2RlbD86IFRcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkZWNvcmF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBEZWNvcmF0b3JNZXRhZGF0YVtdPiB8IHVuZGVmaW5lZCA9XG4gICAgZ2V0RGJEZWNvcmF0b3JzKG1vZGVsLCBvcGVyYXRpb24sIHByZWZpeCk7XG5cbiAgaWYgKCFkZWNvcmF0b3JzKSByZXR1cm47XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIGRlY29yYXRvcnMpIHtcbiAgICBjb25zdCBkZWNzOiBEZWNvcmF0b3JNZXRhZGF0YVtdID0gZGVjb3JhdG9yc1twcm9wXTtcbiAgICBmb3IgKGNvbnN0IGRlYyBvZiBkZWNzKSB7XG4gICAgICBjb25zdCB7IGtleSB9ID0gZGVjO1xuICAgICAgY29uc3QgaGFuZGxlcnM6IE9wZXJhdGlvbkhhbmRsZXI8VCwgWSwgVj5bXSB8IHVuZGVmaW5lZCA9IE9wZXJhdGlvbnMuZ2V0KFxuICAgICAgICBtb2RlbCxcbiAgICAgICAgcHJvcCxcbiAgICAgICAgcHJlZml4ICsga2V5XG4gICAgICApO1xuICAgICAgaWYgKCFoYW5kbGVycyB8fCAhaGFuZGxlcnMubGVuZ3RoKVxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgcmVnaXN0ZXJlZCBoYW5kbGVyIGZvciB0aGUgb3BlcmF0aW9uICR7cHJlZml4ICsga2V5fSB1bmRlciBwcm9wZXJ0eSAke3Byb3B9YFxuICAgICAgICApO1xuXG4gICAgICBjb25zdCBoYW5kbGVyQXJncyA9IGdldEhhbmRsZXJBcmdzKGRlYywgcHJvcCwgbW9kZWwgYXMgYW55KTtcblxuICAgICAgaWYgKCFoYW5kbGVyQXJncyB8fCBPYmplY3QudmFsdWVzKGhhbmRsZXJBcmdzKS5sZW5ndGggIT09IGhhbmRsZXJzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3Ioc2YoXCJBcmdzIGFuZCBoYW5kbGVycyBsZW5ndGggZG8gbm90IG1hdGNoXCIpKTtcblxuICAgICAgbGV0IGhhbmRsZXI6IE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIGFueT47XG4gICAgICBsZXQgZGF0YTogYW55O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBoYW5kbGVyID0gaGFuZGxlcnNbaV07XG4gICAgICAgIGRhdGEgPSBPYmplY3QudmFsdWVzKGhhbmRsZXJBcmdzKVtpXTtcblxuICAgICAgICBjb25zdCBhcmdzOiBhbnlbXSA9IFtkYXRhLmRhdGEsIHByb3AsIG1vZGVsXTtcblxuICAgICAgICBpZiAob3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlVQREFURSkge1xuICAgICAgICAgIGlmICghb2xkTW9kZWwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIk1pc3Npbmcgb2xkIG1vZGVsIGZvciB1cGRhdGUgb3BlcmF0aW9uXCIpO1xuICAgICAgICAgIGFyZ3MucHVzaChvbGRNb2RlbCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgKGhhbmRsZXIgYXMgVXBkYXRlT3BlcmF0aW9uSGFuZGxlcjxULCBZLCBWPikuYXBwbHkoXG4gICAgICAgICAgcmVwbyxcbiAgICAgICAgICBhcmdzIGFzIFtWLCBhbnksIFQsIFRdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU3BlY2lmaWMgZm9yIERCIERlY29yYXRvcnNcbiAqIEBwYXJhbSB7VH0gbW9kZWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRpb24gQ1JVRCB7QGxpbmsgT3BlcmF0aW9uS2V5c31cbiAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0cmFQcmVmaXhdXG4gKlxuICogQGZ1bmN0aW9uIGdldERiUHJvcGVydHlEZWNvcmF0b3JzXG4gKlxuICogQG1lbWJlck9mIGRiLWRlY29yYXRvcnMudXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERiRGVjb3JhdG9yczxUIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbDogVCxcbiAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gIGV4dHJhUHJlZml4Pzogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBEZWNvcmF0b3JNZXRhZGF0YVtdPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlY29yYXRvcnM6IFJlY29yZDxzdHJpbmcsIERlY29yYXRvck1ldGFkYXRhW10+IHwgdW5kZWZpbmVkID1cbiAgICBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICBtb2RlbCxcbiAgICAgIC8vIHVuZGVmaW5lZCxcbiAgICAgIE9wZXJhdGlvbktleXMuUkVGTEVDVCArIChleHRyYVByZWZpeCA/IGV4dHJhUHJlZml4IDogXCJcIilcbiAgICApO1xuICBpZiAoIWRlY29yYXRvcnMpIHJldHVybjtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGRlY29yYXRvcnMpLnJlZHVjZShcbiAgICAoYWNjdW06IFJlY29yZDxzdHJpbmcsIERlY29yYXRvck1ldGFkYXRhW10+IHwgdW5kZWZpbmVkLCBkZWNvcmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IGRlYyA9IGRlY29yYXRvcnNbZGVjb3JhdG9yXS5maWx0ZXIoKGQpID0+IGQua2V5ID09PSBvcGVyYXRpb24pO1xuICAgICAgaWYgKGRlYyAmJiBkZWMubGVuZ3RoKSB7XG4gICAgICAgIGlmICghYWNjdW0pIGFjY3VtID0ge307XG4gICAgICAgIGFjY3VtW2RlY29yYXRvcl0gPSBkZWM7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSxcbiAgICB1bmRlZmluZWRcbiAgKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIGRlY29yYXRvcnMgZm9yIGFuIG9iamVjdCdzIHByb3BlcnRpZXMgcHJlZml4ZWQgYnkge0BwYXJhbSBwcmVmaXhlc30gcmVjdXJzaXZlbHlcbiAqIEBwYXJhbSBtb2RlbFxuICogQHBhcmFtIGFjY3VtXG4gKiBAcGFyYW0gcHJlZml4ZXNcbiAqXG4gKiBAZnVuY3Rpb24gZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzUmVjdXJzaXZlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnMuUmVwb3NpdG9yeVxuICovXG5leHBvcnQgY29uc3QgZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzUmVjdXJzaXZlID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBULFxuICBhY2N1bTogeyBbaW5kZXhlcjogc3RyaW5nXTogYW55W10gfSB8IHVuZGVmaW5lZCxcbiAgLi4ucHJlZml4ZXM6IHN0cmluZ1tdXG4pOiB7IFtpbmRleGVyOiBzdHJpbmddOiBhbnlbXSB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYWNjdW11bGF0b3IgPSBhY2N1bSB8fCB7fTtcbiAgY29uc3QgbWVyZ2VEZWNvcmF0b3JzID0gZnVuY3Rpb24gKGRlY3M6IHsgW2luZGV4ZXI6IHN0cmluZ106IGFueVtdIH0pIHtcbiAgICBjb25zdCBwdXNoT3JTcXVhc2ggPSAoa2V5OiBzdHJpbmcsIC4uLnZhbHVlczogYW55W10pID0+IHtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgbGV0IG1hdGNoOiBhbnk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKG1hdGNoID0gYWNjdW11bGF0b3Jba2V5XS5maW5kKChlKSA9PiBlLmtleSA9PT0gdmFsLmtleSkpIHx8XG4gICAgICAgICAgbWF0Y2gucHJvcHMub3BlcmF0aW9uICE9PSB2YWwucHJvcHMub3BlcmF0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yW2tleV0ucHVzaCh2YWwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwua2V5ID09PSBNb2RlbEtleXMuVFlQRSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHsgaGFuZGxlcnMsIG9wZXJhdGlvbiB9ID0gdmFsLnByb3BzO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhb3BlcmF0aW9uIHx8XG4gICAgICAgICAgIW9wZXJhdGlvbi5tYXRjaChcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgIGBeKDo/JHtPcGVyYXRpb25LZXlzLk9OfXwke09wZXJhdGlvbktleXMuQUZURVJ9KSg6PyR7T3BlcmF0aW9uS2V5cy5DUkVBVEV9fCR7T3BlcmF0aW9uS2V5cy5SRUFEfXwke09wZXJhdGlvbktleXMuVVBEQVRFfXwke09wZXJhdGlvbktleXMuREVMRVRFfSkkYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3Jba2V5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWNjdW1IYW5kbGVycyA9IG1hdGNoLnByb3BzLmhhbmRsZXJzO1xuXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKS5mb3JFYWNoKChbY2xhenosIGhhbmRsZXJEZWZdKSA9PiB7XG4gICAgICAgICAgaWYgKCEoY2xhenogaW4gYWNjdW1IYW5kbGVycykpIHtcbiAgICAgICAgICAgIGFjY3VtSGFuZGxlcnNbY2xhenpdID0gaGFuZGxlckRlZjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBPYmplY3QuZW50cmllcyhoYW5kbGVyRGVmIGFzIG9iamVjdCkuZm9yRWFjaChcbiAgICAgICAgICAgIChbaGFuZGxlclByb3AsIGhhbmRsZXJdKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghKGhhbmRsZXJQcm9wIGluIGFjY3VtSGFuZGxlcnNbY2xhenpdKSkge1xuICAgICAgICAgICAgICAgIGFjY3VtSGFuZGxlcnNbY2xhenpdW2hhbmRsZXJQcm9wXSA9IGhhbmRsZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoaGFuZGxlciBhcyBvYmplY3QpLmZvckVhY2goXG4gICAgICAgICAgICAgICAgKFtoYW5kbGVyS2V5LCBhcmdzT2JqXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKCEoaGFuZGxlcktleSBpbiBhY2N1bUhhbmRsZXJzW2NsYXp6XVtoYW5kbGVyUHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY3VtSGFuZGxlcnNbY2xhenpdW2hhbmRsZXJQcm9wXVtoYW5kbGVyS2V5XSA9IGFyZ3NPYmo7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgc2YoXG4gICAgICAgICAgICAgICAgICAgICAgXCJTa2lwcGluZyBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmb3IgezB9IHVuZGVyIHByb3AgezB9IGJlY2F1c2UgaGFuZGxlciBpcyB0aGUgc2FtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXp6LFxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJQcm9wXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIE9iamVjdC5lbnRyaWVzKGRlY3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgYWNjdW11bGF0b3Jba2V5XSA9IGFjY3VtdWxhdG9yW2tleV0gfHwgW107XG4gICAgICBwdXNoT3JTcXVhc2goa2V5LCAuLi52YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgZGVjczogeyBbaW5kZXhlcjogc3RyaW5nXTogYW55W10gfSB8IHVuZGVmaW5lZCA9XG4gICAgZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzKG1vZGVsLCAuLi5wcmVmaXhlcyk7XG4gIGlmIChkZWNzKSBtZXJnZURlY29yYXRvcnMoZGVjcyk7XG5cbiAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihtb2RlbCkgPT09IE9iamVjdC5wcm90b3R5cGUpIHJldHVybiBhY2N1bXVsYXRvcjtcblxuICAvLyBjb25zdCBuYW1lID0gbW9kZWwuY29uc3RydWN0b3IubmFtZTtcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kZWwpO1xuICBpZiAoIXByb3RvKSByZXR1cm4gYWNjdW11bGF0b3I7XG4gIC8vIGlmIChwcm90by5jb25zdHJ1Y3RvciAmJiBwcm90by5jb25zdHJ1Y3Rvci5uYW1lID09PSBuYW1lKVxuICAvLyAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pXG4gIHJldHVybiBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnNSZWN1cnNpdmUocHJvdG8sIGFjY3VtdWxhdG9yLCAuLi5wcmVmaXhlcyk7XG59O1xuIl19
168
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUVMLHdCQUF3QixHQUN6QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUdMLFNBQVMsRUFDVCxFQUFFLEdBQ0gsTUFBTSxnQ0FBZ0MsQ0FBQztBQVF4Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsVUFDNUIsR0FBUSxFQUNSLElBQVksRUFDWixDQUFtQixFQUNuQixLQUEwQztJQUUxQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUNoQyxJQUFJLENBQUMsSUFBSTtRQUFFLE1BQU0sSUFBSSxhQUFhLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUN0RSxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUVwQixJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM1RCxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFFMUQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzdDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FB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RWhDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBRTFFLHVDQUF1QztJQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDL0IsNERBQTREO0lBQzVELDJDQUEyQztJQUMzQyxPQUFPLGlDQUFpQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztBQUM1RSxDQUFDLENBQUMiLCJmaWxlIjoicmVwb3NpdG9yeS91dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wZXJhdGlvbnMgfSBmcm9tIFwiLi4vb3BlcmF0aW9ucy9PcGVyYXRpb25zXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25IYW5kbGVyLCBVcGRhdGVPcGVyYXRpb25IYW5kbGVyIH0gZnJvbSBcIi4uL29wZXJhdGlvbnMvdHlwZXNcIjtcbmltcG9ydCB7IElSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvSVJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IE9wZXJhdGlvbktleXMgfSBmcm9tIFwiLi4vb3BlcmF0aW9ucy9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIERlY29yYXRvck1ldGFkYXRhLFxuICBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnMsXG59IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0b3IsXG4gIE1vZGVsLFxuICBNb2RlbEtleXMsXG4gIHNmLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4vQ29udGV4dFwiO1xuXG5leHBvcnQgdHlwZSBDb250ZXh0QXJncyA9IHtcbiAgY29udGV4dDogQ29udGV4dDtcbiAgYXJnczogYW55W107XG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IHJldHJpZXZlcyB0aGUgYXJndW1lbnRzIGZvciB0aGUgaGFuZGxlclxuICogQHBhcmFtIHthbnl9IGRlYyB0aGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCB0aGUgcHJvcGVydHkgbmFtZVxuICogQHBhcmFtIHt7fX0gbSB0aGUgbW9kZWxcbiAqIEBwYXJhbSB7e319IFthY2N1bV0gYWNjdW11bGF0b3IgdXNlZCBmb3IgaW50ZXJuYWwgcmVjdXJzaXZlbmVzc1xuICpcbiAqIEBmdW5jdGlvbiBnZXRIYW5kbGVyQXJnc1xuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLlJlcG9zaXRvcnlcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhhbmRsZXJBcmdzID0gZnVuY3Rpb24gKFxuICBkZWM6IGFueSxcbiAgcHJvcDogc3RyaW5nLFxuICBtOiBDb25zdHJ1Y3Rvcjxhbnk+LFxuICBhY2N1bT86IFJlY29yZDxzdHJpbmcsIHsgYXJnczogc3RyaW5nW10gfT5cbik6IFJlY29yZDxzdHJpbmcsIHsgYXJnczogc3RyaW5nW10gfT4gfCB2b2lkIHtcbiAgY29uc3QgbmFtZSA9IG0uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKCFuYW1lKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgbW9kZWwgY2xhc3NcIik7XG4gIGFjY3VtID0gYWNjdW0gfHwge307XG5cbiAgaWYgKGRlYy5wcm9wcy5oYW5kbGVyc1tuYW1lXSAmJiBkZWMucHJvcHMuaGFuZGxlcnNbbmFtZV1bcHJvcF0pXG4gICAgYWNjdW0gPSB7IC4uLmRlYy5wcm9wcy5oYW5kbGVyc1tuYW1lXVtwcm9wXSwgLi4uYWNjdW0gfTtcblxuICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobSk7XG4gIGlmIChwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIGFjY3VtO1xuICBpZiAocHJvdG8uY29uc3RydWN0b3IubmFtZSA9PT0gbmFtZSkgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuXG4gIHJldHVybiBnZXRIYW5kbGVyQXJncyhkZWMsIHByb3AsIHByb3RvLCBhY2N1bSk7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0lSZXBvc2l0b3J5PFQ+fSByZXBvXG4gKiBAcGFyYW0gY29udGV4dFxuICogQHBhcmFtIHtUfSBtb2RlbFxuICogQHBhcmFtIG9wZXJhdGlvblxuICogQHBhcmFtIHByZWZpeFxuICpcbiAqIEBwYXJhbSBvbGRNb2RlbFxuICogQGZ1bmN0aW9uIGVuZm9yY2VEQlByb3BlcnR5RGVjb3JhdG9yc0FzeW5jXG4gKlxuICogQG1lbWJlck9mIGRiLWRlY29yYXRvcnMudXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuZm9yY2VEQkRlY29yYXRvcnM8XG4gIFQgZXh0ZW5kcyBNb2RlbCxcbiAgWSBleHRlbmRzIElSZXBvc2l0b3J5PFQ+LFxuICBWLFxuPihcbiAgcmVwbzogWSxcbiAgY29udGV4dDogQ29udGV4dCxcbiAgbW9kZWw6IFQsXG4gIG9wZXJhdGlvbjogc3RyaW5nLFxuICBwcmVmaXg6IHN0cmluZyxcbiAgb2xkTW9kZWw/OiBUXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZGVjb3JhdG9yczogUmVjb3JkPHN0cmluZywgRGVjb3JhdG9yTWV0YWRhdGFbXT4gfCB1bmRlZmluZWQgPVxuICAgIGdldERiRGVjb3JhdG9ycyhtb2RlbCwgb3BlcmF0aW9uLCBwcmVmaXgpO1xuXG4gIGlmICghZGVjb3JhdG9ycykgcmV0dXJuO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBkZWNvcmF0b3JzKSB7XG4gICAgY29uc3QgZGVjczogRGVjb3JhdG9yTWV0YWRhdGFbXSA9IGRlY29yYXRvcnNbcHJvcF07XG4gICAgZm9yIChjb25zdCBkZWMgb2YgZGVjcykge1xuICAgICAgY29uc3QgeyBrZXkgfSA9IGRlYztcbiAgICAgIGNvbnN0IGhhbmRsZXJzOiBPcGVyYXRpb25IYW5kbGVyPFQsIFksIFY+W10gfCB1bmRlZmluZWQgPSBPcGVyYXRpb25zLmdldChcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIHByb3AsXG4gICAgICAgIHByZWZpeCArIGtleVxuICAgICAgKTtcbiAgICAgIGlmICghaGFuZGxlcnMgfHwgIWhhbmRsZXJzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHJlZ2lzdGVyZWQgaGFuZGxlciBmb3IgdGhlIG9wZXJhdGlvbiAke3ByZWZpeCArIGtleX0gdW5kZXIgcHJvcGVydHkgJHtwcm9wfWBcbiAgICAgICAgKTtcblxuICAgICAgY29uc3QgaGFuZGxlckFyZ3MgPSBnZXRIYW5kbGVyQXJncyhkZWMsIHByb3AsIG1vZGVsIGFzIGFueSk7XG5cbiAgICAgIGlmICghaGFuZGxlckFyZ3MgfHwgT2JqZWN0LnZhbHVlcyhoYW5kbGVyQXJncykubGVuZ3RoICE9PSBoYW5kbGVycy5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKHNmKFwiQXJncyBhbmQgaGFuZGxlcnMgbGVuZ3RoIGRvIG5vdCBtYXRjaFwiKSk7XG5cbiAgICAgIGxldCBoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBhbnk+O1xuICAgICAgbGV0IGRhdGE6IGFueTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJzW2ldO1xuICAgICAgICBkYXRhID0gT2JqZWN0LnZhbHVlcyhoYW5kbGVyQXJncylbaV07XG5cbiAgICAgICAgY29uc3QgYXJnczogYW55W10gPSBbY29udGV4dCwgZGF0YS5kYXRhLCBwcm9wLCBtb2RlbF07XG5cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5VUERBVEUgJiYgcHJlZml4ID09PSBPcGVyYXRpb25LZXlzLk9OKSB7XG4gICAgICAgICAgaWYgKCFvbGRNb2RlbClcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiTWlzc2luZyBvbGQgbW9kZWwgZm9yIHVwZGF0ZSBvcGVyYXRpb25cIik7XG4gICAgICAgICAgYXJncy5wdXNoKG9sZE1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCAoaGFuZGxlciBhcyBVcGRhdGVPcGVyYXRpb25IYW5kbGVyPFQsIFksIFY+KS5hcHBseShcbiAgICAgICAgICByZXBvLFxuICAgICAgICAgIGFyZ3MgYXMgW0NvbnRleHQsIFYsIGFueSwgVCwgVF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTcGVjaWZpYyBmb3IgREIgRGVjb3JhdG9yc1xuICogQHBhcmFtIHtUfSBtb2RlbFxuICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdGlvbiBDUlVEIHtAbGluayBPcGVyYXRpb25LZXlzfVxuICogQHBhcmFtIHtzdHJpbmd9IFtleHRyYVByZWZpeF1cbiAqXG4gKiBAZnVuY3Rpb24gZ2V0RGJQcm9wZXJ0eURlY29yYXRvcnNcbiAqXG4gKiBAbWVtYmVyT2YgZGItZGVjb3JhdG9ycy51dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGJEZWNvcmF0b3JzPFQgZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBULFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgZXh0cmFQcmVmaXg/OiBzdHJpbmdcbik6IFJlY29yZDxzdHJpbmcsIERlY29yYXRvck1ldGFkYXRhW10+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVjb3JhdG9yczogUmVjb3JkPHN0cmluZywgRGVjb3JhdG9yTWV0YWRhdGFbXT4gfCB1bmRlZmluZWQgPVxuICAgIGdldEFsbFByb3BlcnR5RGVjb3JhdG9ycyhcbiAgICAgIG1vZGVsLFxuICAgICAgLy8gdW5kZWZpbmVkLFxuICAgICAgT3BlcmF0aW9uS2V5cy5SRUZMRUNUICsgKGV4dHJhUHJlZml4ID8gZXh0cmFQcmVmaXggOiBcIlwiKVxuICAgICk7XG4gIGlmICghZGVjb3JhdG9ycykgcmV0dXJuO1xuICByZXR1cm4gT2JqZWN0LmtleXMoZGVjb3JhdG9ycykucmVkdWNlKFxuICAgIChhY2N1bTogUmVjb3JkPHN0cmluZywgRGVjb3JhdG9yTWV0YWRhdGFbXT4gfCB1bmRlZmluZWQsIGRlY29yYXRvcikgPT4ge1xuICAgICAgY29uc3QgZGVjID0gZGVjb3JhdG9yc1tkZWNvcmF0b3JdLmZpbHRlcigoZCkgPT4gZC5rZXkgPT09IG9wZXJhdGlvbik7XG4gICAgICBpZiAoZGVjICYmIGRlYy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFhY2N1bSkgYWNjdW0gPSB7fTtcbiAgICAgICAgYWNjdW1bZGVjb3JhdG9yXSA9IGRlYztcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LFxuICAgIHVuZGVmaW5lZFxuICApO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgZGVjb3JhdG9ycyBmb3IgYW4gb2JqZWN0J3MgcHJvcGVydGllcyBwcmVmaXhlZCBieSB7QHBhcmFtIHByZWZpeGVzfSByZWN1cnNpdmVseVxuICogQHBhcmFtIG1vZGVsXG4gKiBAcGFyYW0gYWNjdW1cbiAqIEBwYXJhbSBwcmVmaXhlc1xuICpcbiAqIEBmdW5jdGlvbiBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnNSZWN1cnNpdmVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5SZXBvc2l0b3J5XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnNSZWN1cnNpdmUgPSBmdW5jdGlvbiA8VCBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IFQsXG4gIGFjY3VtOiB7IFtpbmRleGVyOiBzdHJpbmddOiBhbnlbXSB9IHwgdW5kZWZpbmVkLFxuICAuLi5wcmVmaXhlczogc3RyaW5nW11cbik6IHsgW2luZGV4ZXI6IHN0cmluZ106IGFueVtdIH0gfCB1bmRlZmluZWQge1xuICBjb25zdCBhY2N1bXVsYXRvciA9IGFjY3VtIHx8IHt9O1xuICBjb25zdCBtZXJnZURlY29yYXRvcnMgPSBmdW5jdGlvbiAoZGVjczogeyBbaW5kZXhlcjogc3RyaW5nXTogYW55W10gfSkge1xuICAgIGNvbnN0IHB1c2hPclNxdWFzaCA9IChrZXk6IHN0cmluZywgLi4udmFsdWVzOiBhbnlbXSkgPT4ge1xuICAgICAgdmFsdWVzLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICBsZXQgbWF0Y2g6IGFueTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEobWF0Y2ggPSBhY2N1bXVsYXRvcltrZXldLmZpbmQoKGUpID0+IGUua2V5ID09PSB2YWwua2V5KSkgfHxcbiAgICAgICAgICBtYXRjaC5wcm9wcy5vcGVyYXRpb24gIT09IHZhbC5wcm9wcy5vcGVyYXRpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3Jba2V5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbC5rZXkgPT09IE1vZGVsS2V5cy5UWVBFKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgeyBoYW5kbGVycywgb3BlcmF0aW9uIH0gPSB2YWwucHJvcHM7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFvcGVyYXRpb24gfHxcbiAgICAgICAgICAhb3BlcmF0aW9uLm1hdGNoKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgYF4oOj8ke09wZXJhdGlvbktleXMuT059fCR7T3BlcmF0aW9uS2V5cy5BRlRFUn0pKDo/JHtPcGVyYXRpb25LZXlzLkNSRUFURX18JHtPcGVyYXRpb25LZXlzLlJFQUR9fCR7T3BlcmF0aW9uS2V5cy5VUERBVEV9fCR7T3BlcmF0aW9uS2V5cy5ERUxFVEV9KSRgXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBhY2N1bXVsYXRvcltrZXldLnB1c2godmFsKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY2N1bUhhbmRsZXJzID0gbWF0Y2gucHJvcHMuaGFuZGxlcnM7XG5cbiAgICAgICAgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpLmZvckVhY2goKFtjbGF6eiwgaGFuZGxlckRlZl0pID0+IHtcbiAgICAgICAgICBpZiAoIShjbGF6eiBpbiBhY2N1bUhhbmRsZXJzKSkge1xuICAgICAgICAgICAgYWNjdW1IYW5kbGVyc1tjbGF6el0gPSBoYW5kbGVyRGVmO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJEZWYgYXMgb2JqZWN0KS5mb3JFYWNoKFxuICAgICAgICAgICAgKFtoYW5kbGVyUHJvcCwgaGFuZGxlcl0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKCEoaGFuZGxlclByb3AgaW4gYWNjdW1IYW5kbGVyc1tjbGF6el0pKSB7XG4gICAgICAgICAgICAgICAgYWNjdW1IYW5kbGVyc1tjbGF6el1baGFuZGxlclByb3BdID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhoYW5kbGVyIGFzIG9iamVjdCkuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoW2hhbmRsZXJLZXksIGFyZ3NPYmpdKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIShoYW5kbGVyS2V5IGluIGFjY3VtSGFuZGxlcnNbY2xhenpdW2hhbmRsZXJQcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjdW1IYW5kbGVyc1tjbGF6el1baGFuZGxlclByb3BdW2hhbmRsZXJLZXldID0gYXJnc09iajtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICBzZihcbiAgICAgICAgICAgICAgICAgICAgICBcIlNraXBwaW5nIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZvciB7MH0gdW5kZXIgcHJvcCB7MH0gYmVjYXVzZSBoYW5kbGVyIGlzIHRoZSBzYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2xhenosXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlclByb3BcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmVudHJpZXMoZGVjcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2N1bXVsYXRvcltrZXldID0gYWNjdW11bGF0b3Jba2V5XSB8fCBbXTtcbiAgICAgIHB1c2hPclNxdWFzaChrZXksIC4uLnZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBkZWNzOiB7IFtpbmRleGVyOiBzdHJpbmddOiBhbnlbXSB9IHwgdW5kZWZpbmVkID1cbiAgICBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnMobW9kZWwsIC4uLnByZWZpeGVzKTtcbiAgaWYgKGRlY3MpIG1lcmdlRGVjb3JhdG9ycyhkZWNzKTtcblxuICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG1vZGVsKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIGFjY3VtdWxhdG9yO1xuXG4gIC8vIGNvbnN0IG5hbWUgPSBtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihtb2RlbCk7XG4gIGlmICghcHJvdG8pIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgLy8gaWYgKHByb3RvLmNvbnN0cnVjdG9yICYmIHByb3RvLmNvbnN0cnVjdG9yLm5hbWUgPT09IG5hbWUpXG4gIC8vICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90bylcbiAgcmV0dXJuIGdldEFsbFByb3BlcnR5RGVjb3JhdG9yc1JlY3Vyc2l2ZShwcm90bywgYWNjdW11bGF0b3IsIC4uLnByZWZpeGVzKTtcbn07XG4iXX0=
@@ -31,8 +31,8 @@ export declare function suffixMethod(obj: any, before: (...args: any[]) => any,
31
31
  * @param {Function} after The method to be suffixed
32
32
  * @param {string} [methodName] When the after function anme cannot be extracted, pass it here
33
33
  *
34
- * @function wrapMethod
34
+ * @function wrapMethodWithContext
35
35
  *
36
36
  * @memberOf module:db-decorators.Repository
37
37
  */
38
- export declare function wrapMethod(obj: any, before: (...args: any[]) => any, method: (...args: any[]) => any, after: (...args: any[]) => any, methodName?: string): void;
38
+ export declare function wrapMethodWithContext(obj: any, before: (...args: any[]) => any, method: (...args: any[]) => any, after: (...args: any[]) => any, methodName?: string): void;
@@ -1,3 +1,5 @@
1
+ import { Context } from "./Context";
2
+ import { InternalError } from "./errors";
1
3
  /**
2
4
  * @summary Util method to change a method of an object prefixing it with another
3
5
  * @param {any} obj The Base Object
@@ -59,19 +61,22 @@ export function suffixMethod(obj, before, suffix, beforeName) {
59
61
  * @param {Function} after The method to be suffixed
60
62
  * @param {string} [methodName] When the after function anme cannot be extracted, pass it here
61
63
  *
62
- * @function wrapMethod
64
+ * @function wrapMethodWithContext
63
65
  *
64
66
  * @memberOf module:db-decorators.Repository
65
67
  */
66
- export function wrapMethod(obj, before, method, after, methodName) {
68
+ export function wrapMethodWithContext(obj, before, method, after, methodName) {
67
69
  async function wrapper(...args) {
68
70
  let transformedArgs = before.call(obj, ...args);
69
71
  if (transformedArgs instanceof Promise)
70
72
  transformedArgs = await transformedArgs;
73
+ const context = transformedArgs[transformedArgs.length - 1];
74
+ if (!(context instanceof Context))
75
+ throw new InternalError("Missing a context");
71
76
  let results = await method.call(obj, ...transformedArgs);
72
77
  if (results instanceof Promise)
73
78
  results = await results;
74
- results = after.call(this, results);
79
+ results = after.call(this, results, context);
75
80
  if (results instanceof Promise)
76
81
  results = await results;
77
82
  return results;
@@ -87,4 +92,4 @@ export function wrapMethod(obj, before, method, after, methodName) {
87
92
  obj[name] = wrapped;
88
93
  }
89
94
 
90
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L3dyYXBwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixHQUFRLEVBQ1IsS0FBOEIsRUFDOUIsTUFBK0IsRUFDL0IsU0FBa0I7SUFFbEIsS0FBSyxVQUFVLE9BQU8sQ0FBWSxHQUFHLElBQVc7UUFDOUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUNoRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7UUFDckMsVUFBVSxFQUFFLElBQUk7UUFDaEIsWUFBWSxFQUFFLElBQUk7UUFDbEIsUUFBUSxFQUFFLEtBQUs7UUFDZixLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUMsQ0FBQztJQUNILEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixHQUFRLEVBQ1IsTUFBK0IsRUFDL0IsTUFBK0IsRUFDL0IsVUFBbUI7SUFFbkIsS0FBSyxVQUFVLE9BQU8sQ0FBWSxHQUFHLElBQVc7UUFDOUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDbkQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ3JDLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDLENBQUM7SUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixHQUFRLEVBQ1IsTUFBK0IsRUFDL0IsTUFBK0IsRUFDL0IsS0FBOEIsRUFDOUIsVUFBbUI7SUFFbkIsS0FBSyxVQUFVLE9BQU8sQ0FBWSxHQUFHLElBQVc7UUFDOUMsSUFBSSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLGVBQWUsWUFBWSxPQUFPO1lBQ3BDLGVBQWUsR0FBRyxNQUFNLGVBQWUsQ0FBQztRQUMxQyxJQUFJLE9BQU8sR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDekQsSUFBSSxPQUFPLFlBQVksT0FBTztZQUFFLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQztRQUN4RCxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxPQUFPLFlBQVksT0FBTztZQUFFLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQztRQUN4RCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNuRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7UUFDckMsVUFBVSxFQUFFLElBQUk7UUFDaEIsWUFBWSxFQUFFLElBQUk7UUFDbEIsUUFBUSxFQUFFLEtBQUs7UUFDZixLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUMsQ0FBQztJQUNILEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDdEIsQ0FBQyIsImZpbGUiOiJyZXBvc2l0b3J5L3dyYXBwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAc3VtbWFyeSBVdGlsIG1ldGhvZCB0byBjaGFuZ2UgYSBtZXRob2Qgb2YgYW4gb2JqZWN0IHByZWZpeGluZyBpdCB3aXRoIGFub3RoZXJcbiAqIEBwYXJhbSB7YW55fSBvYmogVGhlIEJhc2UgT2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhZnRlciBUaGUgb3JpZ2luYWwgbWV0aG9kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVmaXggVGhlIFByZWZpeCBtZXRob2QuIFRoZSBvdXRwdXQgd2lsbCBiZSB1c2VkIGFzIGFyZ3VtZW50cyBpbiB0aGUgb3JpZ2luYWwgbWV0aG9kXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FmdGVyTmFtZV0gV2hlbiB0aGUgYWZ0ZXIgZnVuY3Rpb24gYW5tZSBjYW5ub3QgYmUgZXh0cmFjdGVkLCBwYXNzIGl0IGhlcmVcbiAqXG4gKiBAZnVuY3Rpb24gcHJlZml4TWV0aG9kXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLlJlcG9zaXRvcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeE1ldGhvZChcbiAgb2JqOiBhbnksXG4gIGFmdGVyOiAoLi4uYXJnczogYW55W10pID0+IGFueSxcbiAgcHJlZml4OiAoLi4uYXJnczogYW55W10pID0+IGFueSxcbiAgYWZ0ZXJOYW1lPzogc3RyaW5nLFxuKSB7XG4gIGFzeW5jIGZ1bmN0aW9uIHdyYXBwZXIodGhpczogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUocHJlZml4LmNhbGwodGhpcywgLi4uYXJncykpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYWZ0ZXIuYXBwbHkodGhpcywgcmVzdWx0cykpO1xuICB9XG4gIGNvbnN0IHdyYXBwZWQgPSB3cmFwcGVyLmJpbmQob2JqKTtcbiAgY29uc3QgbmFtZSA9IGFmdGVyTmFtZSA/IGFmdGVyTmFtZSA6IGFmdGVyLm5hbWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cmFwcGVkLCBcIm5hbWVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogbmFtZSxcbiAgfSk7XG4gIG9ialtuYW1lXSA9IHdyYXBwZWQ7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgVXRpbCBtZXRob2QgdG8gY2hhbmdlIGEgbWV0aG9kIG9mIGFuIG9iamVjdCBzdWZmaXhpbmcgaXQgd2l0aCBhbm90aGVyXG4gKiBAcGFyYW0ge2FueX0gb2JqIFRoZSBCYXNlIE9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYmVmb3JlIFRoZSBvcmlnaW5hbCBtZXRob2RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN1ZmZpeCBUaGUgUHJlZml4IG1ldGhvZC4gVGhlIG91dHB1dCB3aWxsIGJlIHVzZWQgYXMgYXJndW1lbnRzIGluIHRoZSBvcmlnaW5hbCBtZXRob2RcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYmVmb3JlTmFtZV0gV2hlbiB0aGUgYWZ0ZXIgZnVuY3Rpb24gYW5tZSBjYW5ub3QgYmUgZXh0cmFjdGVkLCBwYXNzIGl0IGhlcmVcbiAqXG4gKiBAZnVuY3Rpb24gc3VmZml4TWV0aG9kXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLlJlcG9zaXRvcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1ZmZpeE1ldGhvZChcbiAgb2JqOiBhbnksXG4gIGJlZm9yZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gIHN1ZmZpeDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gIGJlZm9yZU5hbWU/OiBzdHJpbmcsXG4pIHtcbiAgYXN5bmMgZnVuY3Rpb24gd3JhcHBlcih0aGlzOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShiZWZvcmUuY2FsbCh0aGlzLCAuLi5hcmdzKSk7XG4gICAgcmV0dXJuIHN1ZmZpeC5jYWxsKHRoaXMsIC4uLnJlc3VsdHMpO1xuICB9XG4gIGNvbnN0IHdyYXBwZWQgPSB3cmFwcGVyLmJpbmQob2JqKTtcbiAgY29uc3QgbmFtZSA9IGJlZm9yZU5hbWUgPyBiZWZvcmVOYW1lIDogYmVmb3JlLm5hbWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cmFwcGVkLCBcIm5hbWVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogbmFtZSxcbiAgfSk7XG4gIG9ialtuYW1lXSA9IHdyYXBwZWQ7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgVXRpbCBtZXRob2QgdG8gd3JhcCBhIG1ldGhvZCBvZiBhbiBvYmplY3Qgd2l0aCBhZGRpdGlvbmFsIGxvZ2ljXG4gKlxuICogQHBhcmFtIHthbnl9IG9iaiBUaGUgQmFzZSBPYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGJlZm9yZSB0aGUgbWV0aG9kIHRvIGJlIHByZWZpeGVkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2QgdGhlIG1ldGhvZCB0byBiZSB3cmFwcGVkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhZnRlciBUaGUgbWV0aG9kIHRvIGJlIHN1ZmZpeGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gW21ldGhvZE5hbWVdIFdoZW4gdGhlIGFmdGVyIGZ1bmN0aW9uIGFubWUgY2Fubm90IGJlIGV4dHJhY3RlZCwgcGFzcyBpdCBoZXJlXG4gKlxuICogQGZ1bmN0aW9uIHdyYXBNZXRob2RcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnMuUmVwb3NpdG9yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcE1ldGhvZChcbiAgb2JqOiBhbnksXG4gIGJlZm9yZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gIG1ldGhvZDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gIGFmdGVyOiAoLi4uYXJnczogYW55W10pID0+IGFueSxcbiAgbWV0aG9kTmFtZT86IHN0cmluZyxcbikge1xuICBhc3luYyBmdW5jdGlvbiB3cmFwcGVyKHRoaXM6IGFueSwgLi4uYXJnczogYW55W10pIHtcbiAgICBsZXQgdHJhbnNmb3JtZWRBcmdzID0gYmVmb3JlLmNhbGwob2JqLCAuLi5hcmdzKTtcbiAgICBpZiAodHJhbnNmb3JtZWRBcmdzIGluc3RhbmNlb2YgUHJvbWlzZSlcbiAgICAgIHRyYW5zZm9ybWVkQXJncyA9IGF3YWl0IHRyYW5zZm9ybWVkQXJncztcbiAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IG1ldGhvZC5jYWxsKG9iaiwgLi4udHJhbnNmb3JtZWRBcmdzKTtcbiAgICBpZiAocmVzdWx0cyBpbnN0YW5jZW9mIFByb21pc2UpIHJlc3VsdHMgPSBhd2FpdCByZXN1bHRzO1xuICAgIHJlc3VsdHMgPSBhZnRlci5jYWxsKHRoaXMsIHJlc3VsdHMpO1xuICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkgcmVzdWx0cyA9IGF3YWl0IHJlc3VsdHM7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgY29uc3Qgd3JhcHBlZCA9IHdyYXBwZXIuYmluZChvYmopO1xuICBjb25zdCBuYW1lID0gbWV0aG9kTmFtZSA/IG1ldGhvZE5hbWUgOiBtZXRob2QubmFtZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdyYXBwZWQsIFwibmFtZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBuYW1lLFxuICB9KTtcbiAgb2JqW25hbWVdID0gd3JhcHBlZDtcbn1cbiJdfQ==
95
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L3dyYXBwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV6Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsR0FBUSxFQUNSLEtBQThCLEVBQzlCLE1BQStCLEVBQy9CLFNBQWtCO0lBRWxCLEtBQUssVUFBVSxPQUFPLENBQVksR0FBRyxJQUFXO1FBQzlDLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDaEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ3JDLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDLENBQUM7SUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsR0FBUSxFQUNSLE1BQStCLEVBQy9CLE1BQStCLEVBQy9CLFVBQW1CO0lBRW5CLEtBQUssVUFBVSxPQUFPLENBQVksR0FBRyxJQUFXO1FBQzlDLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ25ELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtRQUNyQyxVQUFVLEVBQUUsSUFBSTtRQUNoQixZQUFZLEVBQUUsSUFBSTtRQUNsQixRQUFRLEVBQUUsS0FBSztRQUNmLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQyxDQUFDO0lBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUN0QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxHQUFRLEVBQ1IsTUFBK0IsRUFDL0IsTUFBK0IsRUFDL0IsS0FBOEIsRUFDOUIsVUFBbUI7SUFFbkIsS0FBSyxVQUFVLE9BQU8sQ0FBWSxHQUFHLElBQVc7UUFDOUMsSUFBSSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLGVBQWUsWUFBWSxPQUFPO1lBQ3BDLGVBQWUsR0FBRyxNQUFNLGVBQWUsQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQVEsQ0FBQztRQUNuRSxJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksT0FBTyxDQUFDO1lBQy9CLE1BQU0sSUFBSSxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMvQyxJQUFJLE9BQU8sR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDekQsSUFBSSxPQUFPLFlBQVksT0FBTztZQUFFLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQztRQUN4RCxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksT0FBTyxZQUFZLE9BQU87WUFBRSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUM7UUFDeEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDbkQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ3JDLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDLENBQUM7SUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3RCLENBQUMiLCJmaWxlIjoicmVwb3NpdG9yeS93cmFwcGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi9Db250ZXh0XCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgVXRpbCBtZXRob2QgdG8gY2hhbmdlIGEgbWV0aG9kIG9mIGFuIG9iamVjdCBwcmVmaXhpbmcgaXQgd2l0aCBhbm90aGVyXG4gKiBAcGFyYW0ge2FueX0gb2JqIFRoZSBCYXNlIE9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYWZ0ZXIgVGhlIG9yaWdpbmFsIG1ldGhvZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZml4IFRoZSBQcmVmaXggbWV0aG9kLiBUaGUgb3V0cHV0IHdpbGwgYmUgdXNlZCBhcyBhcmd1bWVudHMgaW4gdGhlIG9yaWdpbmFsIG1ldGhvZFxuICogQHBhcmFtIHtzdHJpbmd9IFthZnRlck5hbWVdIFdoZW4gdGhlIGFmdGVyIGZ1bmN0aW9uIGFubWUgY2Fubm90IGJlIGV4dHJhY3RlZCwgcGFzcyBpdCBoZXJlXG4gKlxuICogQGZ1bmN0aW9uIHByZWZpeE1ldGhvZFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5SZXBvc2l0b3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhNZXRob2QoXG4gIG9iajogYW55LFxuICBhZnRlcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gIHByZWZpeDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gIGFmdGVyTmFtZT86IHN0cmluZ1xuKSB7XG4gIGFzeW5jIGZ1bmN0aW9uIHdyYXBwZXIodGhpczogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUocHJlZml4LmNhbGwodGhpcywgLi4uYXJncykpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYWZ0ZXIuYXBwbHkodGhpcywgcmVzdWx0cykpO1xuICB9XG4gIGNvbnN0IHdyYXBwZWQgPSB3cmFwcGVyLmJpbmQob2JqKTtcbiAgY29uc3QgbmFtZSA9IGFmdGVyTmFtZSA/IGFmdGVyTmFtZSA6IGFmdGVyLm5hbWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cmFwcGVkLCBcIm5hbWVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogbmFtZSxcbiAgfSk7XG4gIG9ialtuYW1lXSA9IHdyYXBwZWQ7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgVXRpbCBtZXRob2QgdG8gY2hhbmdlIGEgbWV0aG9kIG9mIGFuIG9iamVjdCBzdWZmaXhpbmcgaXQgd2l0aCBhbm90aGVyXG4gKiBAcGFyYW0ge2FueX0gb2JqIFRoZSBCYXNlIE9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYmVmb3JlIFRoZSBvcmlnaW5hbCBtZXRob2RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN1ZmZpeCBUaGUgUHJlZml4IG1ldGhvZC4gVGhlIG91dHB1dCB3aWxsIGJlIHVzZWQgYXMgYXJndW1lbnRzIGluIHRoZSBvcmlnaW5hbCBtZXRob2RcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYmVmb3JlTmFtZV0gV2hlbiB0aGUgYWZ0ZXIgZnVuY3Rpb24gYW5tZSBjYW5ub3QgYmUgZXh0cmFjdGVkLCBwYXNzIGl0IGhlcmVcbiAqXG4gKiBAZnVuY3Rpb24gc3VmZml4TWV0aG9kXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLlJlcG9zaXRvcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1ZmZpeE1ldGhvZChcbiAgb2JqOiBhbnksXG4gIGJlZm9yZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gIHN1ZmZpeDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gIGJlZm9yZU5hbWU/OiBzdHJpbmdcbikge1xuICBhc3luYyBmdW5jdGlvbiB3cmFwcGVyKHRoaXM6IGFueSwgLi4uYXJnczogYW55W10pIHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGJlZm9yZS5jYWxsKHRoaXMsIC4uLmFyZ3MpKTtcbiAgICByZXR1cm4gc3VmZml4LmNhbGwodGhpcywgLi4ucmVzdWx0cyk7XG4gIH1cbiAgY29uc3Qgd3JhcHBlZCA9IHdyYXBwZXIuYmluZChvYmopO1xuICBjb25zdCBuYW1lID0gYmVmb3JlTmFtZSA/IGJlZm9yZU5hbWUgOiBiZWZvcmUubmFtZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdyYXBwZWQsIFwibmFtZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBuYW1lLFxuICB9KTtcbiAgb2JqW25hbWVdID0gd3JhcHBlZDtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBVdGlsIG1ldGhvZCB0byB3cmFwIGEgbWV0aG9kIG9mIGFuIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgbG9naWNcbiAqXG4gKiBAcGFyYW0ge2FueX0gb2JqIFRoZSBCYXNlIE9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYmVmb3JlIHRoZSBtZXRob2QgdG8gYmUgcHJlZml4ZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZCB0aGUgbWV0aG9kIHRvIGJlIHdyYXBwZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFmdGVyIFRoZSBtZXRob2QgdG8gYmUgc3VmZml4ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWV0aG9kTmFtZV0gV2hlbiB0aGUgYWZ0ZXIgZnVuY3Rpb24gYW5tZSBjYW5ub3QgYmUgZXh0cmFjdGVkLCBwYXNzIGl0IGhlcmVcbiAqXG4gKiBAZnVuY3Rpb24gd3JhcE1ldGhvZFdpdGhDb250ZXh0XG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLlJlcG9zaXRvcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBNZXRob2RXaXRoQ29udGV4dChcbiAgb2JqOiBhbnksXG4gIGJlZm9yZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gIG1ldGhvZDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gIGFmdGVyOiAoLi4uYXJnczogYW55W10pID0+IGFueSxcbiAgbWV0aG9kTmFtZT86IHN0cmluZ1xuKSB7XG4gIGFzeW5jIGZ1bmN0aW9uIHdyYXBwZXIodGhpczogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGxldCB0cmFuc2Zvcm1lZEFyZ3MgPSBiZWZvcmUuY2FsbChvYmosIC4uLmFyZ3MpO1xuICAgIGlmICh0cmFuc2Zvcm1lZEFyZ3MgaW5zdGFuY2VvZiBQcm9taXNlKVxuICAgICAgdHJhbnNmb3JtZWRBcmdzID0gYXdhaXQgdHJhbnNmb3JtZWRBcmdzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB0cmFuc2Zvcm1lZEFyZ3NbdHJhbnNmb3JtZWRBcmdzLmxlbmd0aCAtIDFdIGFzIGFueTtcbiAgICBpZiAoIShjb250ZXh0IGluc3RhbmNlb2YgQ29udGV4dCkpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIk1pc3NpbmcgYSBjb250ZXh0XCIpO1xuICAgIGxldCByZXN1bHRzID0gYXdhaXQgbWV0aG9kLmNhbGwob2JqLCAuLi50cmFuc2Zvcm1lZEFyZ3MpO1xuICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkgcmVzdWx0cyA9IGF3YWl0IHJlc3VsdHM7XG4gICAgcmVzdWx0cyA9IGFmdGVyLmNhbGwodGhpcywgcmVzdWx0cywgY29udGV4dCk7XG4gICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSByZXN1bHRzID0gYXdhaXQgcmVzdWx0cztcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBjb25zdCB3cmFwcGVkID0gd3JhcHBlci5iaW5kKG9iaik7XG4gIGNvbnN0IG5hbWUgPSBtZXRob2ROYW1lID8gbWV0aG9kTmFtZSA6IG1ldGhvZC5uYW1lO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod3JhcHBlZCwgXCJuYW1lXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IG5hbWUsXG4gIH0pO1xuICBvYmpbbmFtZV0gPSB3cmFwcGVkO1xufVxuIl19
@@ -1,6 +1,7 @@
1
1
  import { Model } from "@decaf-ts/decorator-validation";
2
2
  import { OperationKeys } from "../operations/constants";
3
3
  import { IRepository } from "../interfaces/IRepository";
4
+ import { Context } from "../repository/Context";
4
5
  /**
5
6
  * Marks the property as readonly.
6
7
  *
@@ -11,7 +12,7 @@ import { IRepository } from "../interfaces/IRepository";
11
12
  * @category Decorators
12
13
  */
13
14
  export declare function readonly(message?: string): PropertyDecorator;
14
- export declare function timestampHandler<T extends Model, V extends IRepository<T>, Y = any>(this: V, data: Y, key: string, model: T): void;
15
+ export declare function timestampHandler<T extends Model, V extends IRepository<T>, Y = any>(this: V, context: Context, data: Y, key: string, model: T): Promise<void>;
15
16
  /**
16
17
  * Marks the property as timestamp.
17
18
  * Makes it {@link required}
@@ -20,8 +20,8 @@ export function readonly(message = DEFAULT_ERROR_MESSAGES.READONLY.INVALID) {
20
20
  message: message,
21
21
  });
22
22
  }
23
- export function timestampHandler(data, key, model) {
24
- model[key] = new Date();
23
+ export async function timestampHandler(context, data, key, model) {
24
+ model[key] = await this.timestamp();
25
25
  }
26
26
  /**
27
27
  * Marks the property as timestamp.
@@ -217,4 +217,4 @@ export function serialize() {
217
217
  // };
218
218
  // }
219
219
 
220
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy92YWxpZGF0aW9uL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLElBQUksRUFFSixZQUFZLEVBQ1osUUFBUSxFQUNSLEVBQUUsRUFDRixJQUFJLEVBQ0osVUFBVSxHQUNYLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQW1CLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0M7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUN0QixVQUFrQixzQkFBc0IsQ0FBQyxRQUFRLENBQUMsT0FBTztJQUV6RCxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN6RCxPQUFPLEVBQUUsT0FBTztLQUNqQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUlyQixJQUFPLEVBQUUsR0FBVyxFQUFFLEtBQVE7SUFDdEMsS0FBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUN2QixZQUE2QixZQUFZLENBQUMsYUFBMkMsRUFDckYsU0FBaUIsd0JBQXdCO0lBRXpDLE1BQU0sVUFBVSxHQUEyQjtRQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQXlCO1FBQzNFLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUF5QjtRQUMzRSxFQUFFLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUF5QjtLQUN4RCxDQUFDO0lBRUYsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsVUFBVSxDQUFDLElBQUksQ0FDYixZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDbkQsT0FBTyxFQUFFLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxPQUFPO1NBQ2xELENBQXlCLENBQzNCLENBQUM7SUFFSixPQUFPLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QixDQUtsQyxJQUFPLEVBQUUsR0FBVyxFQUFFLEtBQVEsRUFBRSxRQUFXO0lBQ3BELElBQUksQ0FBRSxLQUFhLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTztJQUNqQyxJQUFJLENBQUM7UUFDRixLQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBRSxLQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksa0JBQWtCLENBQzFCLEVBQUUsQ0FDQSxvREFBb0QsRUFDcEQsR0FBRyxFQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUN0QixDQUFDLENBQUMsT0FBTyxDQUNWLENBQ0YsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FJNUIsSUFBTyxFQUFFLEdBQVcsRUFBRSxLQUFRO0lBQ3ZDLElBQUksQ0FBRSxLQUFhLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTztJQUNqQyxJQUFJLE9BQVEsS0FBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVE7UUFBRSxPQUFPO0lBRXBELElBQUksQ0FBQztRQUNGLEtBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFFLEtBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxrQkFBa0IsQ0FDMUIsRUFBRSxDQUNBLHNEQUFzRCxFQUN0RCxHQUFHLEVBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQ3RCLENBQUMsQ0FBQyxPQUFPLENBQ1YsQ0FDRixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFNBQVM7SUFDdkIsT0FBTyxLQUFLLENBQ1YsY0FBYyxDQUFDLHVCQUF1QixDQUFDLEVBQ3ZDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLEVBQzFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ2hDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDL0MsQ0FBQztBQUNKLENBQUM7QUFFRCxFQUFFO0FBQ0YsTUFBTTtBQUNOLDZDQUE2QztBQUM3QyxLQUFLO0FBQ0wsbUdBQW1HO0FBQ25HLCtDQUErQztBQUMvQyxvSUFBb0k7QUFDcEksS0FBSztBQUNMLHVCQUF1QjtBQUN2QixLQUFLO0FBQ0wsMkNBQTJDO0FBQzNDLEtBQUs7QUFDTCxvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLE1BQU07QUFDTiw0QkFBNEI7QUFDNUIsNkJBQTZCO0FBQzdCLHNEQUFzRDtBQUN0RCwrQkFBK0I7QUFDL0IsTUFBTTtBQUNOLDJCQUEyQjtBQUMzQixtREFBbUQ7QUFDbkQsNERBQTREO0FBQzVELHVEQUF1RDtBQUN2RCw4RUFBOEU7QUFDOUUsdUVBQXVFO0FBQ3ZFLEVBQUU7QUFDRiw2REFBNkQ7QUFDN0QsNkRBQTZEO0FBQzdELDJEQUEyRDtBQUMzRCw2REFBNkQ7QUFDN0QsRUFBRTtBQUNGLDhCQUE4QjtBQUM5QiwyQ0FBMkM7QUFDM0MsVUFBVTtBQUNWLG1DQUFtQztBQUNuQyxtQ0FBbUM7QUFDbkMsK0JBQStCO0FBQy9CLFdBQVc7QUFDWCxnQkFBZ0I7QUFDaEIscUJBQXFCO0FBQ3JCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsSUFBSTtBQUNKLEVBQUU7QUFDRixNQUFNO0FBQ04sOENBQThDO0FBQzlDLEtBQUs7QUFDTCxtR0FBbUc7QUFDbkcsK0NBQStDO0FBQy9DLEtBQUs7QUFDTCx3QkFBd0I7QUFDeEIsS0FBSztBQUNMLDJDQUEyQztBQUMzQyxLQUFLO0FBQ0wsbUJBQW1CO0FBQ25CLG9CQUFvQjtBQUNwQixNQUFNO0FBQ04sNkJBQTZCO0FBQzdCLDZCQUE2QjtBQUM3QixzREFBc0Q7QUFDdEQsK0JBQStCO0FBQy9CLE1BQU07QUFDTiwyQkFBMkI7QUFDM0IsbURBQW1EO0FBQ25ELGtEQUFrRDtBQUNsRCx3REFBd0Q7QUFDeEQsd0VBQXdFO0FBQ3hFLHdFQUF3RTtBQUN4RSxFQUFFO0FBQ0YsNkRBQTZEO0FBQzdELDZEQUE2RDtBQUM3RCwyREFBMkQ7QUFDM0QsNkRBQTZEO0FBQzdELEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsNENBQTRDO0FBQzVDLFVBQVU7QUFDVixtQ0FBbUM7QUFDbkMsbUNBQW1DO0FBQ25DLFdBQVc7QUFDWCxnQkFBZ0I7QUFDaEIscUJBQXFCO0FBQ3JCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsSUFBSTtBQUNKLEVBQUU7QUFDRixNQUFNO0FBQ04sOENBQThDO0FBQzlDLEtBQUs7QUFDTCxtR0FBbUc7QUFDbkcsK0NBQStDO0FBQy9DLEtBQUs7QUFDTCx5QkFBeUI7QUFDekIsS0FBSztBQUNMLDJDQUEyQztBQUMzQyxLQUFLO0FBQ0wsb0JBQW9CO0FBQ3BCLG1CQUFtQjtBQUNuQixNQUFNO0FBQ04sNkJBQTZCO0FBQzdCLDZCQUE2QjtBQUM3QixzREFBc0Q7QUFDdEQsTUFBTTtBQUNOLDJCQUEyQjtBQUMzQixtREFBbUQ7QUFDbkQsOEJBQThCO0FBQzlCLDRDQUE0QztBQUM1QyxVQUFVO0FBQ1YsbUNBQW1DO0FBQ25DLG1DQUFtQztBQUNuQyxXQUFXO0FBQ1gsZ0JBQWdCO0FBQ2hCLHFCQUFxQjtBQUNyQixTQUFTO0FBQ1QsT0FBTztBQUNQLElBQUkiLCJmaWxlIjoidmFsaWRhdGlvbi9kZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZGF0ZSxcbiAgTW9kZWwsXG4gIHByb3BNZXRhZGF0YSxcbiAgcmVxdWlyZWQsXG4gIHNmLFxuICB0eXBlLFxuICBWYWxpZGF0aW9uLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBEQktleXMsIERFRkFVTFRfVElNRVNUQU1QX0ZPUk1BVCB9IGZyb20gXCIuLi9tb2RlbC9jb25zdGFudHNcIjtcbmltcG9ydCB7IERFRkFVTFRfRVJST1JfTUVTU0FHRVMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IERCT3BlcmF0aW9ucywgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCIuLi9vcGVyYXRpb25zL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgYWZ0ZXIsIG9uLCBvbkNyZWF0ZVVwZGF0ZSB9IGZyb20gXCIuLi9vcGVyYXRpb25zL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IElSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvSVJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IFNlcmlhbGl6YXRpb25FcnJvciB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L2Vycm9yc1wiO1xuaW1wb3J0IHsgYXBwbHksIEN1c3RvbURlY29yYXRvciwgbWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeVwiO1xuXG4vKipcbiAqIE1hcmtzIHRoZSBwcm9wZXJ0eSBhcyByZWFkb25seS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIHRoZSBlcnJvciBtZXNzYWdlLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5SRUFET05MWS5JTlZBTElEfVxuICpcbiAqIEBkZWNvcmF0b3IgcmVhZG9ubHlcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZG9ubHkoXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuUkVBRE9OTFkuSU5WQUxJRFxuKSB7XG4gIHJldHVybiBwcm9wTWV0YWRhdGEoVmFsaWRhdGlvbi51cGRhdGVLZXkoREJLZXlzLlJFQURPTkxZKSwge1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZXN0YW1wSGFuZGxlcjxcbiAgVCBleHRlbmRzIE1vZGVsLFxuICBWIGV4dGVuZHMgSVJlcG9zaXRvcnk8VD4sXG4gIFkgPSBhbnksXG4+KHRoaXM6IFYsIGRhdGE6IFksIGtleTogc3RyaW5nLCBtb2RlbDogVCk6IHZvaWQge1xuICAobW9kZWwgYXMgYW55KVtrZXldID0gbmV3IERhdGUoKTtcbn1cblxuLyoqXG4gKiBNYXJrcyB0aGUgcHJvcGVydHkgYXMgdGltZXN0YW1wLlxuICogTWFrZXMgaXQge0BsaW5rIHJlcXVpcmVkfVxuICogTWFrZXMgaXQgYSB7QGxpbmsgZGF0ZX1cbiAqXG4gKiBEYXRlIEZvcm1hdDpcbiAqXG4gKiA8cHJlPlxuICogICAgICBVc2luZyBzaW1pbGFyIGZvcm1hdHRpbmcgYXMgTW9tZW50LmpzLCBDbGFzcyBEYXRlVGltZUZvcm1hdHRlciAoSmF2YSksIGFuZCBDbGFzcyBTaW1wbGVEYXRlRm9ybWF0IChKYXZhKSxcbiAqICAgICAgSSBpbXBsZW1lbnRlZCBhIGNvbXByZWhlbnNpdmUgc29sdXRpb24gZm9ybWF0RGF0ZShkYXRlLCBwYXR0ZXJuU3RyKSB3aGVyZSB0aGUgY29kZSBpcyBlYXN5IHRvIHJlYWQgYW5kIG1vZGlmeS5cbiAqICAgICAgWW91IGNhbiBkaXNwbGF5IGRhdGUsIHRpbWUsIEFNL1BNLCBldGMuXG4gKlxuICogICAgICBEYXRlIGFuZCBUaW1lIFBhdHRlcm5zXG4gKiAgICAgIHl5ID0gMi1kaWdpdCB5ZWFyOyB5eXl5ID0gZnVsbCB5ZWFyXG4gKiAgICAgIE0gPSBkaWdpdCBtb250aDsgTU0gPSAyLWRpZ2l0IG1vbnRoOyBNTU0gPSBzaG9ydCBtb250aCBuYW1lOyBNTU1NID0gZnVsbCBtb250aCBuYW1lXG4gKiAgICAgIEVFRUUgPSBmdWxsIHdlZWtkYXkgbmFtZTsgRUVFID0gc2hvcnQgd2Vla2RheSBuYW1lXG4gKiAgICAgIGQgPSBkaWdpdCBkYXk7IGRkID0gMi1kaWdpdCBkYXlcbiAqICAgICAgaCA9IGhvdXJzIGFtL3BtOyBoaCA9IDItZGlnaXQgaG91cnMgYW0vcG07IEggPSBob3VyczsgSEggPSAyLWRpZ2l0IGhvdXJzXG4gKiAgICAgIG0gPSBtaW51dGVzOyBtbSA9IDItZGlnaXQgbWludXRlczsgYWFhID0gQU0vUE1cbiAqICAgICAgcyA9IHNlY29uZHM7IHNzID0gMi1kaWdpdCBzZWNvbmRzXG4gKiAgICAgIFMgPSBtaWxpc2Vjb25kc1xuICogPC9wcmU+XG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gb3BlcmF0aW9uIFRoZSB7QGxpbmsgREJPcGVyYXRpb25zfSB0byBhY3Qgb24uIERlZmF1bHRzIHRvIHtAbGluayBEQk9wZXJhdGlvbnMuQ1JFQVRFX1VQREFURX1cbiAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0XSBUaGUgVGltZVN0YW1wIGZvcm1hdC4gZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfVElNRVNUQU1QX0ZPUk1BVH1cbiAqIEBwYXJhbSB7e25ldzogVXBkYXRlVmFsaWRhdG9yfX0gW3ZhbGlkYXRvcl0gZGVmYXVsdHMgdG8ge0BsaW5rIFRpbWVzdGFtcFZhbGlkYXRvcn1cbiAqXG4gKiBAZGVjb3JhdG9yIHRpbWVzdGFtcFxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lc3RhbXAoXG4gIG9wZXJhdGlvbjogT3BlcmF0aW9uS2V5c1tdID0gREJPcGVyYXRpb25zLkNSRUFURV9VUERBVEUgYXMgdW5rbm93biBhcyBPcGVyYXRpb25LZXlzW10sXG4gIGZvcm1hdDogc3RyaW5nID0gREVGQVVMVF9USU1FU1RBTVBfRk9STUFUXG4pIHtcbiAgY29uc3QgZGVjb3JhdG9yczogQ3VzdG9tRGVjb3JhdG9yPGFueT5bXSA9IFtcbiAgICBkYXRlKGZvcm1hdCwgREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5USU1FU1RBTVAuREFURSkgYXMgQ3VzdG9tRGVjb3JhdG9yPGFueT4sXG4gICAgcmVxdWlyZWQoREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5USU1FU1RBTVAuUkVRVUlSRUQpIGFzIEN1c3RvbURlY29yYXRvcjxhbnk+LFxuICAgIG9uKG9wZXJhdGlvbiwgdGltZXN0YW1wSGFuZGxlcikgYXMgQ3VzdG9tRGVjb3JhdG9yPGFueT4sXG4gIF07XG5cbiAgaWYgKG9wZXJhdGlvbi5pbmRleE9mKE9wZXJhdGlvbktleXMuVVBEQVRFKSAhPT0gLTEpXG4gICAgZGVjb3JhdG9ycy5wdXNoKFxuICAgICAgcHJvcE1ldGFkYXRhKFZhbGlkYXRpb24udXBkYXRlS2V5KERCS2V5cy5USU1FU1RBTVApLCB7XG4gICAgICAgIG1lc3NhZ2U6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuVElNRVNUQU1QLklOVkFMSUQsXG4gICAgICB9KSBhcyBDdXN0b21EZWNvcmF0b3I8YW55PlxuICAgICk7XG5cbiAgcmV0dXJuIGFwcGx5KC4uLmRlY29yYXRvcnMpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VyaWFsaXplT25DcmVhdGVVcGRhdGU8XG4gIFQgZXh0ZW5kcyBNb2RlbCxcbiAgViBleHRlbmRzIElSZXBvc2l0b3J5PFQ+LFxuICBZID0gYW55LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4+KHRoaXM6IFYsIGRhdGE6IFksIGtleTogc3RyaW5nLCBtb2RlbDogVCwgb2xkTW9kZWw6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCEobW9kZWwgYXMgYW55KVtrZXldKSByZXR1cm47XG4gIHRyeSB7XG4gICAgKG1vZGVsIGFzIGFueSlba2V5XSA9IEpTT04uc3RyaW5naWZ5KChtb2RlbCBhcyBhbnkpW2tleV0pO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKFxuICAgICAgc2YoXG4gICAgICAgIFwiRmFpbGVkIHRvIHNlcmlhbGl6ZSB7MH0gcHJvcGVydHkgb24gezF9IG1vZGVsOiB7Mn1cIixcbiAgICAgICAga2V5LFxuICAgICAgICBtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICBlLm1lc3NhZ2VcbiAgICAgIClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXJpYWxpemVBZnRlckFsbDxcbiAgVCBleHRlbmRzIE1vZGVsLFxuICBWIGV4dGVuZHMgSVJlcG9zaXRvcnk8VD4sXG4gIFkgPSBhbnksXG4+KHRoaXM6IFYsIGRhdGE6IFksIGtleTogc3RyaW5nLCBtb2RlbDogVCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIShtb2RlbCBhcyBhbnkpW2tleV0pIHJldHVybjtcbiAgaWYgKHR5cGVvZiAobW9kZWwgYXMgYW55KVtrZXldICE9PSBcInN0cmluZ1wiKSByZXR1cm47XG5cbiAgdHJ5IHtcbiAgICAobW9kZWwgYXMgYW55KVtrZXldID0gSlNPTi5wYXJzZSgobW9kZWwgYXMgYW55KVtrZXldKTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihcbiAgICAgIHNmKFxuICAgICAgICBcIkZhaWxlZCB0byBkZXNlcmlhbGl6ZSB7MH0gcHJvcGVydHkgb24gezF9IG1vZGVsOiB7Mn1cIixcbiAgICAgICAga2V5LFxuICAgICAgICBtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICBlLm1lc3NhZ2VcbiAgICAgIClcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQHN1bW1hcnkgU2VyaWFsaXplIERlY29yYXRvclxuICogQGRlc2NyaXB0aW9uIHByb3BlcnRpZXMgZGVjb3JhdGVkIHdpbGwgdGhlIHNlcmlhbGl6ZWQgYmVmb3JlIHN0b3JlZCBpbiB0aGUgZGJcbiAqXG4gKiBAZnVuY3Rpb24gc2VyaWFsaXplXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp3YWxsZXQtZGIuRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKCkge1xuICByZXR1cm4gYXBwbHkoXG4gICAgb25DcmVhdGVVcGRhdGUoc2VyaWFsaXplT25DcmVhdGVVcGRhdGUpLFxuICAgIGFmdGVyKERCT3BlcmF0aW9ucy5BTEwsIHNlcmlhbGl6ZUFmdGVyQWxsKSxcbiAgICB0eXBlKFtTdHJpbmcubmFtZSwgT2JqZWN0Lm5hbWVdKSxcbiAgICBtZXRhZGF0YShSZXBvc2l0b3J5LmtleShEQktleXMuU0VSSUFMSVpFKSwge30pXG4gICk7XG59XG5cbi8vXG4vLyAvKipcbi8vICAqIEBzdW1tYXJ5IE9uZSBUbyBPbmUgcmVsYXRpb24gRGVjb3JhdG9yc1xuLy8gICpcbi8vICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8YW55Pn0gY2xhenogdGhlIHtAbGluayBTZXF1ZW5jZX0gdG8gdXNlLiBEZWZhdWx0cyB0byB7QGxpbmsgTm9uZVNlcXVlbmNlfVxuLy8gICogQHBhcmFtIHtDYXNjYWRlTWV0YWRhdGF9IFtjYXNjYWRlT3B0aW9uc11cbi8vICAqIEBwYXJhbSB7Ym9vbGVhbn0gX3BvcHVsYXRlIElmIHRydWUsIHJlcGxhY2VzIHRoZSBzcGVjaWZpZWQga2V5IGluIHRoZSBkb2N1bWVudCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHJlY29yZCBmcm9tIHRoZSBkYXRhYmFzZVxuLy8gICpcbi8vICAqIEBmdW5jdGlvbiBvblRvT25lXG4vLyAgKlxuLy8gICogQG1lbWJlck9mIG1vZHVsZTp3YWxsZXQtZGIuRGVjb3JhdG9yc1xuLy8gICpcbi8vICAqIEBzZWUgb25lVG9NYW55XG4vLyAgKiBAc2VlIG1hbnlUb09uZVxuLy8gICovXG4vLyBleHBvcnQgZnVuY3Rpb24gb25lVG9PbmUoXG4vLyAgIGNsYXp6OiBDb25zdHJ1Y3Rvcjxhbnk+LFxuLy8gICBjYXNjYWRlT3B0aW9uczogQ2FzY2FkZU1ldGFkYXRhID0gRGVmYXVsdENhc2NhZGUsXG4vLyAgIF9wb3B1bGF0ZTogYm9vbGVhbiA9IHRydWUsXG4vLyApIHtcbi8vICAgTW9kZWwucmVnaXN0ZXIoY2xhenopO1xuLy8gICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4vLyAgICAgdHlwZShbY2xhenoubmFtZSwgU3RyaW5nLm5hbWVdKSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbi8vICAgICBvbkNyZWF0ZShvbmVUb09uZU9uQ3JlYXRlKSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbi8vICAgICBvblVwZGF0ZShvbmVUb09uZU9uVXBkYXRlLCBjYXNjYWRlT3B0aW9ucyBhcyBhbnkpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy8gICAgIG9uRGVsZXRlKG9uZVRvT25lT25EZWxldGUsIGNhc2NhZGVPcHRpb25zKSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbi8vXG4vLyAgICAgYWZ0ZXJDcmVhdGUocG9wdWxhdGUsIF9wb3B1bGF0ZSkodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4vLyAgICAgYWZ0ZXJVcGRhdGUocG9wdWxhdGUsIF9wb3B1bGF0ZSkodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4vLyAgICAgYWZ0ZXJSZWFkKHBvcHVsYXRlLCBfcG9wdWxhdGUpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy8gICAgIGFmdGVyRGVsZXRlKHBvcHVsYXRlLCBfcG9wdWxhdGUpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy9cbi8vICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuLy8gICAgICAgZ2V0REJLZXkoV2FsbGV0RGJLZXlzLk9ORV9UT19PTkUpLFxuLy8gICAgICAge1xuLy8gICAgICAgICBjb25zdHJ1Y3RvcjogY2xhenoubmFtZSxcbi8vICAgICAgICAgY2FzY2FkZTogY2FzY2FkZU9wdGlvbnMsXG4vLyAgICAgICAgIHBvcHVsYXRlOiBfcG9wdWxhdGUsXG4vLyAgICAgICB9LFxuLy8gICAgICAgdGFyZ2V0LFxuLy8gICAgICAgcHJvcGVydHlLZXksXG4vLyAgICAgKTtcbi8vICAgfTtcbi8vIH1cbi8vXG4vLyAvKipcbi8vICAqIEBzdW1tYXJ5IE9uZSBUbyBNYW55IHJlbGF0aW9uIERlY29yYXRvcnNcbi8vICAqXG4vLyAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPGFueT59IGNsYXp6IHRoZSB7QGxpbmsgU2VxdWVuY2V9IHRvIHVzZS4gRGVmYXVsdHMgdG8ge0BsaW5rIE5vbmVTZXF1ZW5jZX1cbi8vICAqIEBwYXJhbSB7Q2FzY2FkZU1ldGFkYXRhfSBbY2FzY2FkZU9wdGlvbnNdXG4vLyAgKlxuLy8gICogQGZ1bmN0aW9uIG9uVG9NYW55XG4vLyAgKlxuLy8gICogQG1lbWJlck9mIG1vZHVsZTp3YWxsZXQtZGIuRGVjb3JhdG9yc1xuLy8gICpcbi8vICAqIEBzZWUgb25lVG9PbmVcbi8vICAqIEBzZWUgbWFueVRvT25lXG4vLyAgKi9cbi8vIGV4cG9ydCBmdW5jdGlvbiBvbmVUb01hbnkoXG4vLyAgIGNsYXp6OiBDb25zdHJ1Y3Rvcjxhbnk+LFxuLy8gICBjYXNjYWRlT3B0aW9uczogQ2FzY2FkZU1ldGFkYXRhID0gRGVmYXVsdENhc2NhZGUsXG4vLyAgIF9wb3B1bGF0ZTogYm9vbGVhbiA9IHRydWUsXG4vLyApIHtcbi8vICAgTW9kZWwucmVnaXN0ZXIoY2xhenopO1xuLy8gICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4vLyAgICAgbGlzdChbY2xhenosIFN0cmluZ10pKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy8gICAgIG9uQ3JlYXRlKG9uZVRvTWFueU9uQ3JlYXRlKSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbi8vICAgICBvblVwZGF0ZShvbmVUb01hbnlPblVwZGF0ZSwgY2FzY2FkZU9wdGlvbnMpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy8gICAgIG9uRGVsZXRlKG9uZVRvTWFueU9uRGVsZXRlLCBjYXNjYWRlT3B0aW9ucykodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4vL1xuLy8gICAgIGFmdGVyQ3JlYXRlKHBvcHVsYXRlLCBfcG9wdWxhdGUpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy8gICAgIGFmdGVyVXBkYXRlKHBvcHVsYXRlLCBfcG9wdWxhdGUpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy8gICAgIGFmdGVyUmVhZChwb3B1bGF0ZSwgX3BvcHVsYXRlKSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbi8vICAgICBhZnRlckRlbGV0ZShwb3B1bGF0ZSwgX3BvcHVsYXRlKSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbi8vXG4vLyAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbi8vICAgICAgIGdldERCS2V5KFdhbGxldERiS2V5cy5PTkVfVE9fTUFOWSksXG4vLyAgICAgICB7XG4vLyAgICAgICAgIGNvbnN0cnVjdG9yOiBjbGF6ei5uYW1lLFxuLy8gICAgICAgICBjYXNjYWRlOiBjYXNjYWRlT3B0aW9ucyxcbi8vICAgICAgIH0sXG4vLyAgICAgICB0YXJnZXQsXG4vLyAgICAgICBwcm9wZXJ0eUtleSxcbi8vICAgICApO1xuLy8gICB9O1xuLy8gfVxuLy9cbi8vIC8qKlxuLy8gICogQHN1bW1hcnkgTWFueSBUbyBPbmUgcmVsYXRpb24gRGVjb3JhdG9yc1xuLy8gICpcbi8vICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8YW55Pn0gY2xhenogdGhlIHtAbGluayBTZXF1ZW5jZX0gdG8gdXNlLiBEZWZhdWx0cyB0byB7QGxpbmsgTm9uZVNlcXVlbmNlfVxuLy8gICogQHBhcmFtIHtDYXNjYWRlTWV0YWRhdGF9IFtjYXNjYWRlT3B0aW9uc11cbi8vICAqXG4vLyAgKiBAZnVuY3Rpb24gbWFueVRvT25lXG4vLyAgKlxuLy8gICogQG1lbWJlck9mIG1vZHVsZTp3YWxsZXQtZGIuRGVjb3JhdG9yc1xuLy8gICpcbi8vICAqIEBzZWUgb25lVG9NYW55XG4vLyAgKiBAc2VlIG9uZVRvT25lXG4vLyAgKi9cbi8vIGV4cG9ydCBmdW5jdGlvbiBtYW55VG9PbmUoXG4vLyAgIGNsYXp6OiBDb25zdHJ1Y3Rvcjxhbnk+LFxuLy8gICBjYXNjYWRlT3B0aW9uczogQ2FzY2FkZU1ldGFkYXRhID0gRGVmYXVsdENhc2NhZGUsXG4vLyApIHtcbi8vICAgTW9kZWwucmVnaXN0ZXIoY2xhenopO1xuLy8gICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4vLyAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbi8vICAgICAgIGdldERCS2V5KFdhbGxldERiS2V5cy5NQU5ZX1RPX09ORSksXG4vLyAgICAgICB7XG4vLyAgICAgICAgIGNvbnN0cnVjdG9yOiBjbGF6ei5uYW1lLFxuLy8gICAgICAgICBjYXNjYWRlOiBjYXNjYWRlT3B0aW9ucyxcbi8vICAgICAgIH0sXG4vLyAgICAgICB0YXJnZXQsXG4vLyAgICAgICBwcm9wZXJ0eUtleSxcbi8vICAgICApO1xuLy8gICB9O1xuLy8gfVxuIl19
220
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy92YWxpZGF0aW9uL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLElBQUksRUFFSixZQUFZLEVBQ1osUUFBUSxFQUNSLEVBQUUsRUFDRixJQUFJLEVBQ0osVUFBVSxHQUNYLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQW1CLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0M7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUN0QixVQUFrQixzQkFBc0IsQ0FBQyxRQUFRLENBQUMsT0FBTztJQUV6RCxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN6RCxPQUFPLEVBQUUsT0FBTztLQUNqQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FJM0IsT0FBZ0IsRUFBRSxJQUFPLEVBQUUsR0FBVyxFQUFFLEtBQVE7SUFDeEQsS0FBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQy9DLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJH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O0FBQ0wsbUdBQW1HO0FBQ25HLCtDQUErQztBQUMvQyxLQUFLO0FBQ0wseUJBQXlCO0FBQ3pCLEtBQUs7QUFDTCwyQ0FBMkM7QUFDM0MsS0FBSztBQUNMLG9CQUFvQjtBQUNwQixtQkFBbUI7QUFDbkIsTUFBTTtBQUNOLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFDN0Isc0RBQXNEO0FBQ3RELE1BQU07QUFDTiwyQkFBMkI7QUFDM0IsbURBQW1EO0FBQ25ELDhCQUE4QjtBQUM5Qiw0Q0FBNEM7QUFDNUMsVUFBVTtBQUNWLG1DQUFtQztBQUNuQyxtQ0FBbUM7QUFDbkMsV0FBVztBQUNYLGdCQUFnQjtBQUNoQixxQkFBcUI7QUFDckIsU0FBUztBQUNULE9BQU87QUFDUCxJQUFJIiwiZmlsZSI6InZhbGlkYXRpb24vZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGRhdGUsXG4gIE1vZGVsLFxuICBwcm9wTWV0YWRhdGEsXG4gIHJlcXVpcmVkLFxuICBzZixcbiAgdHlwZSxcbiAgVmFsaWRhdGlvbixcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgREJLZXlzLCBERUZBVUxUX1RJTUVTVEFNUF9GT1JNQVQgfSBmcm9tIFwiLi4vbW9kZWwvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VSUk9SX01FU1NBR0VTIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBEQk9wZXJhdGlvbnMsIE9wZXJhdGlvbktleXMgfSBmcm9tIFwiLi4vb3BlcmF0aW9ucy9jb25zdGFudHNcIjtcbmltcG9ydCB7IGFmdGVyLCBvbiwgb25DcmVhdGVVcGRhdGUgfSBmcm9tIFwiLi4vb3BlcmF0aW9ucy9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBJUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL0lSZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uRXJyb3IgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9lcnJvcnNcIjtcbmltcG9ydCB7IGFwcGx5LCBDdXN0b21EZWNvcmF0b3IsIG1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL3JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9Db250ZXh0XCI7XG5cbi8qKlxuICogTWFya3MgdGhlIHByb3BlcnR5IGFzIHJlYWRvbmx5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlJFQURPTkxZLklOVkFMSUR9XG4gKlxuICogQGRlY29yYXRvciByZWFkb25seVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkb25seShcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5SRUFET05MWS5JTlZBTElEXG4pIHtcbiAgcmV0dXJuIHByb3BNZXRhZGF0YShWYWxpZGF0aW9uLnVwZGF0ZUtleShEQktleXMuUkVBRE9OTFkpLCB7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aW1lc3RhbXBIYW5kbGVyPFxuICBUIGV4dGVuZHMgTW9kZWwsXG4gIFYgZXh0ZW5kcyBJUmVwb3NpdG9yeTxUPixcbiAgWSA9IGFueSxcbj4odGhpczogViwgY29udGV4dDogQ29udGV4dCwgZGF0YTogWSwga2V5OiBzdHJpbmcsIG1vZGVsOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gIChtb2RlbCBhcyBhbnkpW2tleV0gPSBhd2FpdCB0aGlzLnRpbWVzdGFtcCgpO1xufVxuXG4vKipcbiAqIE1hcmtzIHRoZSBwcm9wZXJ0eSBhcyB0aW1lc3RhbXAuXG4gKiBNYWtlcyBpdCB7QGxpbmsgcmVxdWlyZWR9XG4gKiBNYWtlcyBpdCBhIHtAbGluayBkYXRlfVxuICpcbiAqIERhdGUgRm9ybWF0OlxuICpcbiAqIDxwcmU+XG4gKiAgICAgIFVzaW5nIHNpbWlsYXIgZm9ybWF0dGluZyBhcyBNb21lbnQuanMsIENsYXNzIERhdGVUaW1lRm9ybWF0dGVyIChKYXZhKSwgYW5kIENsYXNzIFNpbXBsZURhdGVGb3JtYXQgKEphdmEpLFxuICogICAgICBJIGltcGxlbWVudGVkIGEgY29tcHJlaGVuc2l2ZSBzb2x1dGlvbiBmb3JtYXREYXRlKGRhdGUsIHBhdHRlcm5TdHIpIHdoZXJlIHRoZSBjb2RlIGlzIGVhc3kgdG8gcmVhZCBhbmQgbW9kaWZ5LlxuICogICAgICBZb3UgY2FuIGRpc3BsYXkgZGF0ZSwgdGltZSwgQU0vUE0sIGV0Yy5cbiAqXG4gKiAgICAgIERhdGUgYW5kIFRpbWUgUGF0dGVybnNcbiAqICAgICAgeXkgPSAyLWRpZ2l0IHllYXI7IHl5eXkgPSBmdWxsIHllYXJcbiAqICAgICAgTSA9IGRpZ2l0IG1vbnRoOyBNTSA9IDItZGlnaXQgbW9udGg7IE1NTSA9IHNob3J0IG1vbnRoIG5hbWU7IE1NTU0gPSBmdWxsIG1vbnRoIG5hbWVcbiAqICAgICAgRUVFRSA9IGZ1bGwgd2Vla2RheSBuYW1lOyBFRUUgPSBzaG9ydCB3ZWVrZGF5IG5hbWVcbiAqICAgICAgZCA9IGRpZ2l0IGRheTsgZGQgPSAyLWRpZ2l0IGRheVxuICogICAgICBoID0gaG91cnMgYW0vcG07IGhoID0gMi1kaWdpdCBob3VycyBhbS9wbTsgSCA9IGhvdXJzOyBISCA9IDItZGlnaXQgaG91cnNcbiAqICAgICAgbSA9IG1pbnV0ZXM7IG1tID0gMi1kaWdpdCBtaW51dGVzOyBhYWEgPSBBTS9QTVxuICogICAgICBzID0gc2Vjb25kczsgc3MgPSAyLWRpZ2l0IHNlY29uZHNcbiAqICAgICAgUyA9IG1pbGlzZWNvbmRzXG4gKiA8L3ByZT5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBvcGVyYXRpb24gVGhlIHtAbGluayBEQk9wZXJhdGlvbnN9IHRvIGFjdCBvbi4gRGVmYXVsdHMgdG8ge0BsaW5rIERCT3BlcmF0aW9ucy5DUkVBVEVfVVBEQVRFfVxuICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXRdIFRoZSBUaW1lU3RhbXAgZm9ybWF0LiBkZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9USU1FU1RBTVBfRk9STUFUfVxuICogQHBhcmFtIHt7bmV3OiBVcGRhdGVWYWxpZGF0b3J9fSBbdmFsaWRhdG9yXSBkZWZhdWx0cyB0byB7QGxpbmsgVGltZXN0YW1wVmFsaWRhdG9yfVxuICpcbiAqIEBkZWNvcmF0b3IgdGltZXN0YW1wXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVzdGFtcChcbiAgb3BlcmF0aW9uOiBPcGVyYXRpb25LZXlzW10gPSBEQk9wZXJhdGlvbnMuQ1JFQVRFX1VQREFURSBhcyB1bmtub3duIGFzIE9wZXJhdGlvbktleXNbXSxcbiAgZm9ybWF0OiBzdHJpbmcgPSBERUZBVUxUX1RJTUVTVEFNUF9GT1JNQVRcbikge1xuICBjb25zdCBkZWNvcmF0b3JzOiBDdXN0b21EZWNvcmF0b3I8YW55PltdID0gW1xuICAgIGRhdGUoZm9ybWF0LCBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlRJTUVTVEFNUC5EQVRFKSBhcyBDdXN0b21EZWNvcmF0b3I8YW55PixcbiAgICByZXF1aXJlZChERUZBVUxUX0VSUk9SX01FU1NBR0VTLlRJTUVTVEFNUC5SRVFVSVJFRCkgYXMgQ3VzdG9tRGVjb3JhdG9yPGFueT4sXG4gICAgb24ob3BlcmF0aW9uLCB0aW1lc3RhbXBIYW5kbGVyKSBhcyBDdXN0b21EZWNvcmF0b3I8YW55PixcbiAgXTtcblxuICBpZiAob3BlcmF0aW9uLmluZGV4T2YoT3BlcmF0aW9uS2V5cy5VUERBVEUpICE9PSAtMSlcbiAgICBkZWNvcmF0b3JzLnB1c2goXG4gICAgICBwcm9wTWV0YWRhdGEoVmFsaWRhdGlvbi51cGRhdGVLZXkoREJLZXlzLlRJTUVTVEFNUCksIHtcbiAgICAgICAgbWVzc2FnZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5USU1FU1RBTVAuSU5WQUxJRCxcbiAgICAgIH0pIGFzIEN1c3RvbURlY29yYXRvcjxhbnk+XG4gICAgKTtcblxuICByZXR1cm4gYXBwbHkoLi4uZGVjb3JhdG9ycyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXJpYWxpemVPbkNyZWF0ZVVwZGF0ZTxcbiAgVCBleHRlbmRzIE1vZGVsLFxuICBWIGV4dGVuZHMgSVJlcG9zaXRvcnk8VD4sXG4gIFkgPSBhbnksXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbj4odGhpczogViwgZGF0YTogWSwga2V5OiBzdHJpbmcsIG1vZGVsOiBULCBvbGRNb2RlbDogVCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIShtb2RlbCBhcyBhbnkpW2tleV0pIHJldHVybjtcbiAgdHJ5IHtcbiAgICAobW9kZWwgYXMgYW55KVtrZXldID0gSlNPTi5zdHJpbmdpZnkoKG1vZGVsIGFzIGFueSlba2V5XSk7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoXG4gICAgICBzZihcbiAgICAgICAgXCJGYWlsZWQgdG8gc2VyaWFsaXplIHswfSBwcm9wZXJ0eSBvbiB7MX0gbW9kZWw6IHsyfVwiLFxuICAgICAgICBrZXksXG4gICAgICAgIG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgIGUubWVzc2FnZVxuICAgICAgKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlcmlhbGl6ZUFmdGVyQWxsPFxuICBUIGV4dGVuZHMgTW9kZWwsXG4gIFYgZXh0ZW5kcyBJUmVwb3NpdG9yeTxUPixcbiAgWSA9IGFueSxcbj4odGhpczogViwgZGF0YTogWSwga2V5OiBzdHJpbmcsIG1vZGVsOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghKG1vZGVsIGFzIGFueSlba2V5XSkgcmV0dXJuO1xuICBpZiAodHlwZW9mIChtb2RlbCBhcyBhbnkpW2tleV0gIT09IFwic3RyaW5nXCIpIHJldHVybjtcblxuICB0cnkge1xuICAgIChtb2RlbCBhcyBhbnkpW2tleV0gPSBKU09OLnBhcnNlKChtb2RlbCBhcyBhbnkpW2tleV0pO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKFxuICAgICAgc2YoXG4gICAgICAgIFwiRmFpbGVkIHRvIGRlc2VyaWFsaXplIHswfSBwcm9wZXJ0eSBvbiB7MX0gbW9kZWw6IHsyfVwiLFxuICAgICAgICBrZXksXG4gICAgICAgIG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgIGUubWVzc2FnZVxuICAgICAgKVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBTZXJpYWxpemUgRGVjb3JhdG9yXG4gKiBAZGVzY3JpcHRpb24gcHJvcGVydGllcyBkZWNvcmF0ZWQgd2lsbCB0aGUgc2VyaWFsaXplZCBiZWZvcmUgc3RvcmVkIGluIHRoZSBkYlxuICpcbiAqIEBmdW5jdGlvbiBzZXJpYWxpemVcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOndhbGxldC1kYi5EZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUoKSB7XG4gIHJldHVybiBhcHBseShcbiAgICBvbkNyZWF0ZVVwZGF0ZShzZXJpYWxpemVPbkNyZWF0ZVVwZGF0ZSksXG4gICAgYWZ0ZXIoREJPcGVyYXRpb25zLkFMTCwgc2VyaWFsaXplQWZ0ZXJBbGwpLFxuICAgIHR5cGUoW1N0cmluZy5uYW1lLCBPYmplY3QubmFtZV0pLFxuICAgIG1ldGFkYXRhKFJlcG9zaXRvcnkua2V5KERCS2V5cy5TRVJJQUxJWkUpLCB7fSlcbiAgKTtcbn1cblxuLy9cbi8vIC8qKlxuLy8gICogQHN1bW1hcnkgT25lIFRvIE9uZSByZWxhdGlvbiBEZWNvcmF0b3JzXG4vLyAgKlxuLy8gICogQHBhcmFtIHtDb25zdHJ1Y3Rvcjxhbnk+fSBjbGF6eiB0aGUge0BsaW5rIFNlcXVlbmNlfSB0byB1c2UuIERlZmF1bHRzIHRvIHtAbGluayBOb25lU2VxdWVuY2V9XG4vLyAgKiBAcGFyYW0ge0Nhc2NhZGVNZXRhZGF0YX0gW2Nhc2NhZGVPcHRpb25zXVxuLy8gICogQHBhcmFtIHtib29sZWFufSBfcG9wdWxhdGUgSWYgdHJ1ZSwgcmVwbGFjZXMgdGhlIHNwZWNpZmllZCBrZXkgaW4gdGhlIGRvY3VtZW50IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlXG4vLyAgKlxuLy8gICogQGZ1bmN0aW9uIG9uVG9PbmVcbi8vICAqXG4vLyAgKiBAbWVtYmVyT2YgbW9kdWxlOndhbGxldC1kYi5EZWNvcmF0b3JzXG4vLyAgKlxuLy8gICogQHNlZSBvbmVUb01hbnlcbi8vICAqIEBzZWUgbWFueVRvT25lXG4vLyAgKi9cbi8vIGV4cG9ydCBmdW5jdGlvbiBvbmVUb09uZShcbi8vICAgY2xheno6IENvbnN0cnVjdG9yPGFueT4sXG4vLyAgIGNhc2NhZGVPcHRpb25zOiBDYXNjYWRlTWV0YWRhdGEgPSBEZWZhdWx0Q2FzY2FkZSxcbi8vICAgX3BvcHVsYXRlOiBib29sZWFuID0gdHJ1ZSxcbi8vICkge1xuLy8gICBNb2RlbC5yZWdpc3RlcihjbGF6eik7XG4vLyAgIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbi8vICAgICB0eXBlKFtjbGF6ei5uYW1lLCBTdHJpbmcubmFtZV0pKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy8gICAgIG9uQ3JlYXRlKG9uZVRvT25lT25DcmVhdGUpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy8gICAgIG9uVXBkYXRlKG9uZVRvT25lT25VcGRhdGUsIGNhc2NhZGVPcHRpb25zIGFzIGFueSkodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4vLyAgICAgb25EZWxldGUob25lVG9PbmVPbkRlbGV0ZSwgY2FzY2FkZU9wdGlvbnMpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy9cbi8vICAgICBhZnRlckNyZWF0ZShwb3B1bGF0ZSwgX3BvcHVsYXRlKSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbi8vICAgICBhZnRlclVwZGF0ZShwb3B1bGF0ZSwgX3BvcHVsYXRlKSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbi8vICAgICBhZnRlclJlYWQocG9wdWxhdGUsIF9wb3B1bGF0ZSkodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4vLyAgICAgYWZ0ZXJEZWxldGUocG9wdWxhdGUsIF9wb3B1bGF0ZSkodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4vL1xuLy8gICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXG4vLyAgICAgICBnZXREQktleShXYWxsZXREYktleXMuT05FX1RPX09ORSksXG4vLyAgICAgICB7XG4vLyAgICAgICAgIGNvbnN0cnVjdG9yOiBjbGF6ei5uYW1lLFxuLy8gICAgICAgICBjYXNjYWRlOiBjYXNjYWRlT3B0aW9ucyxcbi8vICAgICAgICAgcG9wdWxhdGU6IF9wb3B1bGF0ZSxcbi8vICAgICAgIH0sXG4vLyAgICAgICB0YXJnZXQsXG4vLyAgICAgICBwcm9wZXJ0eUtleSxcbi8vICAgICApO1xuLy8gICB9O1xuLy8gfVxuLy9cbi8vIC8qKlxuLy8gICogQHN1bW1hcnkgT25lIFRvIE1hbnkgcmVsYXRpb24gRGVjb3JhdG9yc1xuLy8gICpcbi8vICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8YW55Pn0gY2xhenogdGhlIHtAbGluayBTZXF1ZW5jZX0gdG8gdXNlLiBEZWZhdWx0cyB0byB7QGxpbmsgTm9uZVNlcXVlbmNlfVxuLy8gICogQHBhcmFtIHtDYXNjYWRlTWV0YWRhdGF9IFtjYXNjYWRlT3B0aW9uc11cbi8vICAqXG4vLyAgKiBAZnVuY3Rpb24gb25Ub01hbnlcbi8vICAqXG4vLyAgKiBAbWVtYmVyT2YgbW9kdWxlOndhbGxldC1kYi5EZWNvcmF0b3JzXG4vLyAgKlxuLy8gICogQHNlZSBvbmVUb09uZVxuLy8gICogQHNlZSBtYW55VG9PbmVcbi8vICAqL1xuLy8gZXhwb3J0IGZ1bmN0aW9uIG9uZVRvTWFueShcbi8vICAgY2xheno6IENvbnN0cnVjdG9yPGFueT4sXG4vLyAgIGNhc2NhZGVPcHRpb25zOiBDYXNjYWRlTWV0YWRhdGEgPSBEZWZhdWx0Q2FzY2FkZSxcbi8vICAgX3BvcHVsYXRlOiBib29sZWFuID0gdHJ1ZSxcbi8vICkge1xuLy8gICBNb2RlbC5yZWdpc3RlcihjbGF6eik7XG4vLyAgIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbi8vICAgICBsaXN0KFtjbGF6eiwgU3RyaW5nXSkodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4vLyAgICAgb25DcmVhdGUob25lVG9NYW55T25DcmVhdGUpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy8gICAgIG9uVXBkYXRlKG9uZVRvTWFueU9uVXBkYXRlLCBjYXNjYWRlT3B0aW9ucykodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4vLyAgICAgb25EZWxldGUob25lVG9NYW55T25EZWxldGUsIGNhc2NhZGVPcHRpb25zKSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbi8vXG4vLyAgICAgYWZ0ZXJDcmVhdGUocG9wdWxhdGUsIF9wb3B1bGF0ZSkodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4vLyAgICAgYWZ0ZXJVcGRhdGUocG9wdWxhdGUsIF9wb3B1bGF0ZSkodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4vLyAgICAgYWZ0ZXJSZWFkKHBvcHVsYXRlLCBfcG9wdWxhdGUpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy8gICAgIGFmdGVyRGVsZXRlKHBvcHVsYXRlLCBfcG9wdWxhdGUpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuLy9cbi8vICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuLy8gICAgICAgZ2V0REJLZXkoV2FsbGV0RGJLZXlzLk9ORV9UT19NQU5ZKSxcbi8vICAgICAgIHtcbi8vICAgICAgICAgY29uc3RydWN0b3I6IGNsYXp6Lm5hbWUsXG4vLyAgICAgICAgIGNhc2NhZGU6IGNhc2NhZGVPcHRpb25zLFxuLy8gICAgICAgfSxcbi8vICAgICAgIHRhcmdldCxcbi8vICAgICAgIHByb3BlcnR5S2V5LFxuLy8gICAgICk7XG4vLyAgIH07XG4vLyB9XG4vL1xuLy8gLyoqXG4vLyAgKiBAc3VtbWFyeSBNYW55IFRvIE9uZSByZWxhdGlvbiBEZWNvcmF0b3JzXG4vLyAgKlxuLy8gICogQHBhcmFtIHtDb25zdHJ1Y3Rvcjxhbnk+fSBjbGF6eiB0aGUge0BsaW5rIFNlcXVlbmNlfSB0byB1c2UuIERlZmF1bHRzIHRvIHtAbGluayBOb25lU2VxdWVuY2V9XG4vLyAgKiBAcGFyYW0ge0Nhc2NhZGVNZXRhZGF0YX0gW2Nhc2NhZGVPcHRpb25zXVxuLy8gICpcbi8vICAqIEBmdW5jdGlvbiBtYW55VG9PbmVcbi8vICAqXG4vLyAgKiBAbWVtYmVyT2YgbW9kdWxlOndhbGxldC1kYi5EZWNvcmF0b3JzXG4vLyAgKlxuLy8gICogQHNlZSBvbmVUb01hbnlcbi8vICAqIEBzZWUgb25lVG9PbmVcbi8vICAqL1xuLy8gZXhwb3J0IGZ1bmN0aW9uIG1hbnlUb09uZShcbi8vICAgY2xheno6IENvbnN0cnVjdG9yPGFueT4sXG4vLyAgIGNhc2NhZGVPcHRpb25zOiBDYXNjYWRlTWV0YWRhdGEgPSBEZWZhdWx0Q2FzY2FkZSxcbi8vICkge1xuLy8gICBNb2RlbC5yZWdpc3RlcihjbGF6eik7XG4vLyAgIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbi8vICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuLy8gICAgICAgZ2V0REJLZXkoV2FsbGV0RGJLZXlzLk1BTllfVE9fT05FKSxcbi8vICAgICAgIHtcbi8vICAgICAgICAgY29uc3RydWN0b3I6IGNsYXp6Lm5hbWUsXG4vLyAgICAgICAgIGNhc2NhZGU6IGNhc2NhZGVPcHRpb25zLFxuLy8gICAgICAgfSxcbi8vICAgICAgIHRhcmdldCxcbi8vICAgICAgIHByb3BlcnR5S2V5LFxuLy8gICAgICk7XG4vLyAgIH07XG4vLyB9XG4iXX0=
@@ -60,8 +60,8 @@ function findModelId(model, returnEmpty = false) {
60
60
  const idProp = findPrimaryKey(model).id;
61
61
  const modelId = model[idProp];
62
62
  if (!modelId && !returnEmpty)
63
- throw new errors_1.NotFoundError((0, decorator_validation_1.sf)("No value for the Id is defined under the property {0}", idProp));
63
+ throw new errors_1.InternalError((0, decorator_validation_1.sf)("No value for the Id is defined under the property {0}", idProp));
64
64
  return modelId;
65
65
  }
66
66
 
67
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pZGVudGl0eS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWtCQSx3Q0E4QkM7QUFpQkQsa0NBUUM7QUF6RUQsa0RBQTRDO0FBQzVDLCtDQUF3RTtBQUN4RSx5RUFBc0U7QUFDdEUsaURBQW9FO0FBRXBFOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQWdCLGNBQWMsQ0FBa0IsS0FBUTtJQUN0RCxNQUFNLFVBQVUsR0FBRyxJQUFBLHlDQUFpQyxFQUNsRCxLQUFLLEVBQ0wsU0FBUyxFQUNULGtCQUFNLENBQUMsT0FBTyxHQUFHLGtCQUFNLENBQUMsRUFBRSxDQUMzQixDQUFDO0lBQ0YsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFvQixDQUFDLENBQUMsTUFBTSxDQUM5RCxDQUFDLEtBQW1DLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNwRCxNQUFNLFFBQVEsR0FBSSxJQUEwQixDQUFDLE1BQU0sQ0FDakQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZ0NBQVMsQ0FBQyxJQUFJLENBQ2hDLENBQUM7UUFDRixJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztJQUVGLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU07UUFDcEQsTUFBTSxJQUFJLHNCQUFhLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUNsRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDdEMsTUFBTSxJQUFJLHNCQUFhLENBQUMsSUFBQSx5QkFBRSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLElBQUksQ0FBQyxNQUFNO1FBQUUsTUFBTSxJQUFJLHNCQUFhLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUM3RSxPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU07UUFDVixLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7S0FDckMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxLQUFZLEVBQUUsV0FBVyxHQUFHLEtBQUs7SUFDM0QsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN4QyxNQUFNLE9BQU8sR0FBSSxLQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFdBQVc7UUFDMUIsTUFBTSxJQUFJLHNCQUFhLENBQ3JCLElBQUEseUJBQUUsRUFBQyx1REFBdUQsRUFBRSxNQUFNLENBQUMsQ0FDcEUsQ0FBQztJQUNKLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJmaWxlIjoiaWRlbnRpdHkvdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEQktleXMgfSBmcm9tIFwiLi4vbW9kZWwvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnNSZWN1cnNpdmUgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS91dGlsc1wiO1xuaW1wb3J0IHsgTW9kZWwsIE1vZGVsS2V5cywgc2YgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yLCBOb3RGb3VuZEVycm9yIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvZXJyb3JzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgUmV0dXJucyB0aGUgcHJpbWFyeSBrZXkgYXR0cmlidXRlIGZvciBhIHtAbGluayBNb2RlbH1cbiAqIEBkZXNjcmlwdGlvbiBzZWFyY2hlcyBpbiBhbGwgdGhlIHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCBmb3IgYW4ge0BsaW5rIGlkfSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqXG4gKiBAcGFyYW0ge01vZGVsfSBtb2RlbFxuICpcbiAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IGlmIG5vIHByb3BlcnR5IG9yIG1vcmUgdGhhbiBvbmUgcHJvcGVydGllcyBhcmUge0BsaW5rIGlkfSBkZWNvcmF0ZWRcbiAqIG9yIG5vIHZhbHVlIGlzIHNldCBpbiB0aGF0IHByb3BlcnR5XG4gKlxuICogQGZ1bmN0aW9uIGZpbmRQcmltYXJ5S2V5XG4gKlxuICogQGNhdGVnb3J5IG1hbmFnZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUHJpbWFyeUtleTxUIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBUKSB7XG4gIGNvbnN0IGRlY29yYXRvcnMgPSBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnNSZWN1cnNpdmUoXG4gICAgbW9kZWwsXG4gICAgdW5kZWZpbmVkLFxuICAgIERCS2V5cy5SRUZMRUNUICsgREJLZXlzLklEXG4gICk7XG4gIGNvbnN0IGlkRGVjb3JhdG9ycyA9IE9iamVjdC5lbnRyaWVzKGRlY29yYXRvcnMgYXMgb2JqZWN0KS5yZWR1Y2UoXG4gICAgKGFjY3VtOiB7IFtpbmRleGVyOiBzdHJpbmddOiBhbnlbXSB9LCBbcHJvcCwgZGVjc10pID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gKGRlY3MgYXMgeyBrZXk6IHN0cmluZyB9W10pLmZpbHRlcihcbiAgICAgICAgKGQpID0+IGQua2V5ICE9PSBNb2RlbEtleXMuVFlQRVxuICAgICAgKTtcbiAgICAgIGlmIChmaWx0ZXJlZCAmJiBmaWx0ZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgYWNjdW1bcHJvcF0gPSBhY2N1bVtwcm9wXSB8fCBbXTtcbiAgICAgICAgYWNjdW1bcHJvcF0ucHVzaCguLi5maWx0ZXJlZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghaWREZWNvcmF0b3JzIHx8ICFPYmplY3Qua2V5cyhpZERlY29yYXRvcnMpLmxlbmd0aClcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIkNvdWxkIG5vdCBmaW5kIElEIGRlY29yYXRlZCBQcm9wZXJ0eVwiKTtcbiAgaWYgKE9iamVjdC5rZXlzKGlkRGVjb3JhdG9ycykubGVuZ3RoID4gMSlcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihzZihPYmplY3Qua2V5cyhpZERlY29yYXRvcnMpLmpvaW4oXCIsIFwiKSkpO1xuICBjb25zdCBpZFByb3AgPSBPYmplY3Qua2V5cyhpZERlY29yYXRvcnMpWzBdO1xuICBpZiAoIWlkUHJvcCkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJDb3VsZCBub3QgZmluZCBJRCBkZWNvcmF0ZWQgUHJvcGVydHlcIik7XG4gIHJldHVybiB7XG4gICAgaWQ6IGlkUHJvcCxcbiAgICBwcm9wczogaWREZWNvcmF0b3JzW2lkUHJvcF1bMF0ucHJvcHMsXG4gIH07XG59XG5cbi8qKlxuICogQHN1bW1hcnkgUmV0dXJucyB0aGUgcHJpbWFyeSBrZXkgdmFsdWUgZm9yIGEge0BsaW5rIE1vZGVsfVxuICogQGRlc2NyaXB0aW9uIHNlYXJjaGVzIGluIGFsbCB0aGUgcHJvcGVydGllcyBpbiB0aGUgb2JqZWN0IGZvciBhbiB7QGxpbmsgcGt9IGRlY29yYXRlZCBwcm9wZXJ0eVxuICpcbiAqIEBwYXJhbSB7TW9kZWx9IG1vZGVsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXR1cm5FbXB0eV1cbiAqIEByZXR1cm4ge3N0cmluZ30gcHJpbWFyeSBrZXlcbiAqXG4gKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBpZiBubyBwcm9wZXJ0eSBvciBtb3JlIHRoYW4gb25lIHByb3BlcnRpZXMgYXJlIHtAbGluayBwa30gZGVjb3JhdGVkXG4gKiBAdGhyb3dzIHtOb3RGb3VuZEVycm9yfSByZXR1cm5FbXB0eSBpcyBmYWxzZSBhbmQgbm8gdmFsdWUgaXMgc2V0IG9uIHRoZSB7QGxpbmsgcGt9IGRlY29yYXRlZCBwcm9wZXJ0eVxuICpcbiAqIEBmdW5jdGlvbiBmaW5kTW9kZWxJRFxuICpcbiAqIEBjYXRlZ29yeSBtYW5hZ2Vyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE1vZGVsSWQobW9kZWw6IE1vZGVsLCByZXR1cm5FbXB0eSA9IGZhbHNlKSB7XG4gIGNvbnN0IGlkUHJvcCA9IGZpbmRQcmltYXJ5S2V5KG1vZGVsKS5pZDtcbiAgY29uc3QgbW9kZWxJZCA9IChtb2RlbCBhcyBhbnkpW2lkUHJvcF07XG4gIGlmICghbW9kZWxJZCAmJiAhcmV0dXJuRW1wdHkpXG4gICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXG4gICAgICBzZihcIk5vIHZhbHVlIGZvciB0aGUgSWQgaXMgZGVmaW5lZCB1bmRlciB0aGUgcHJvcGVydHkgezB9XCIsIGlkUHJvcClcbiAgICApO1xuICByZXR1cm4gbW9kZWxJZDtcbn1cbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pZGVudGl0eS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWtCQSx3Q0E4QkM7QUFpQkQsa0NBUUM7QUF6RUQsa0RBQTRDO0FBQzVDLCtDQUF3RTtBQUN4RSx5RUFBc0U7QUFDdEUsaURBQXFEO0FBRXJEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQWdCLGNBQWMsQ0FBa0IsS0FBUTtJQUN0RCxNQUFNLFVBQVUsR0FBRyxJQUFBLHlDQUFpQyxFQUNsRCxLQUFLLEVBQ0wsU0FBUyxFQUNULGtCQUFNLENBQUMsT0FBTyxHQUFHLGtCQUFNLENBQUMsRUFBRSxDQUMzQixDQUFDO0lBQ0YsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFvQixDQUFDLENBQUMsTUFBTSxDQUM5RCxDQUFDLEtBQW1DLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNwRCxNQUFNLFFBQVEsR0FBSSxJQUEwQixDQUFDLE1BQU0sQ0FDakQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZ0NBQVMsQ0FBQyxJQUFJLENBQ2hDLENBQUM7UUFDRixJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztJQUVGLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU07UUFDcEQsTUFBTSxJQUFJLHNCQUFhLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUNsRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDdEMsTUFBTSxJQUFJLHNCQUFhLENBQUMsSUFBQSx5QkFBRSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLElBQUksQ0FBQyxNQUFNO1FBQUUsTUFBTSxJQUFJLHNCQUFhLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUM3RSxPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU07UUFDVixLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7S0FDckMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxLQUFZLEVBQUUsV0FBVyxHQUFHLEtBQUs7SUFDM0QsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN4QyxNQUFNLE9BQU8sR0FBSSxLQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFdBQVc7UUFDMUIsTUFBTSxJQUFJLHNCQUFhLENBQ3JCLElBQUEseUJBQUUsRUFBQyx1REFBdUQsRUFBRSxNQUFNLENBQUMsQ0FDcEUsQ0FBQztJQUNKLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJmaWxlIjoiaWRlbnRpdHkvdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEQktleXMgfSBmcm9tIFwiLi4vbW9kZWwvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnNSZWN1cnNpdmUgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS91dGlsc1wiO1xuaW1wb3J0IHsgTW9kZWwsIE1vZGVsS2V5cywgc2YgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvZXJyb3JzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgUmV0dXJucyB0aGUgcHJpbWFyeSBrZXkgYXR0cmlidXRlIGZvciBhIHtAbGluayBNb2RlbH1cbiAqIEBkZXNjcmlwdGlvbiBzZWFyY2hlcyBpbiBhbGwgdGhlIHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCBmb3IgYW4ge0BsaW5rIGlkfSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqXG4gKiBAcGFyYW0ge01vZGVsfSBtb2RlbFxuICpcbiAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IGlmIG5vIHByb3BlcnR5IG9yIG1vcmUgdGhhbiBvbmUgcHJvcGVydGllcyBhcmUge0BsaW5rIGlkfSBkZWNvcmF0ZWRcbiAqIG9yIG5vIHZhbHVlIGlzIHNldCBpbiB0aGF0IHByb3BlcnR5XG4gKlxuICogQGZ1bmN0aW9uIGZpbmRQcmltYXJ5S2V5XG4gKlxuICogQGNhdGVnb3J5IG1hbmFnZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUHJpbWFyeUtleTxUIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBUKSB7XG4gIGNvbnN0IGRlY29yYXRvcnMgPSBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnNSZWN1cnNpdmUoXG4gICAgbW9kZWwsXG4gICAgdW5kZWZpbmVkLFxuICAgIERCS2V5cy5SRUZMRUNUICsgREJLZXlzLklEXG4gICk7XG4gIGNvbnN0IGlkRGVjb3JhdG9ycyA9IE9iamVjdC5lbnRyaWVzKGRlY29yYXRvcnMgYXMgb2JqZWN0KS5yZWR1Y2UoXG4gICAgKGFjY3VtOiB7IFtpbmRleGVyOiBzdHJpbmddOiBhbnlbXSB9LCBbcHJvcCwgZGVjc10pID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gKGRlY3MgYXMgeyBrZXk6IHN0cmluZyB9W10pLmZpbHRlcihcbiAgICAgICAgKGQpID0+IGQua2V5ICE9PSBNb2RlbEtleXMuVFlQRVxuICAgICAgKTtcbiAgICAgIGlmIChmaWx0ZXJlZCAmJiBmaWx0ZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgYWNjdW1bcHJvcF0gPSBhY2N1bVtwcm9wXSB8fCBbXTtcbiAgICAgICAgYWNjdW1bcHJvcF0ucHVzaCguLi5maWx0ZXJlZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghaWREZWNvcmF0b3JzIHx8ICFPYmplY3Qua2V5cyhpZERlY29yYXRvcnMpLmxlbmd0aClcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIkNvdWxkIG5vdCBmaW5kIElEIGRlY29yYXRlZCBQcm9wZXJ0eVwiKTtcbiAgaWYgKE9iamVjdC5rZXlzKGlkRGVjb3JhdG9ycykubGVuZ3RoID4gMSlcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihzZihPYmplY3Qua2V5cyhpZERlY29yYXRvcnMpLmpvaW4oXCIsIFwiKSkpO1xuICBjb25zdCBpZFByb3AgPSBPYmplY3Qua2V5cyhpZERlY29yYXRvcnMpWzBdO1xuICBpZiAoIWlkUHJvcCkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJDb3VsZCBub3QgZmluZCBJRCBkZWNvcmF0ZWQgUHJvcGVydHlcIik7XG4gIHJldHVybiB7XG4gICAgaWQ6IGlkUHJvcCxcbiAgICBwcm9wczogaWREZWNvcmF0b3JzW2lkUHJvcF1bMF0ucHJvcHMsXG4gIH07XG59XG5cbi8qKlxuICogQHN1bW1hcnkgUmV0dXJucyB0aGUgcHJpbWFyeSBrZXkgdmFsdWUgZm9yIGEge0BsaW5rIE1vZGVsfVxuICogQGRlc2NyaXB0aW9uIHNlYXJjaGVzIGluIGFsbCB0aGUgcHJvcGVydGllcyBpbiB0aGUgb2JqZWN0IGZvciBhbiB7QGxpbmsgcGt9IGRlY29yYXRlZCBwcm9wZXJ0eVxuICpcbiAqIEBwYXJhbSB7TW9kZWx9IG1vZGVsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXR1cm5FbXB0eV1cbiAqIEByZXR1cm4ge3N0cmluZ30gcHJpbWFyeSBrZXlcbiAqXG4gKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBpZiBubyBwcm9wZXJ0eSBvciBtb3JlIHRoYW4gb25lIHByb3BlcnRpZXMgYXJlIHtAbGluayBwa30gZGVjb3JhdGVkXG4gKiBAdGhyb3dzIHtOb3RGb3VuZEVycm9yfSByZXR1cm5FbXB0eSBpcyBmYWxzZSBhbmQgbm8gdmFsdWUgaXMgc2V0IG9uIHRoZSB7QGxpbmsgcGt9IGRlY29yYXRlZCBwcm9wZXJ0eVxuICpcbiAqIEBmdW5jdGlvbiBmaW5kTW9kZWxJRFxuICpcbiAqIEBjYXRlZ29yeSBtYW5hZ2Vyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE1vZGVsSWQobW9kZWw6IE1vZGVsLCByZXR1cm5FbXB0eSA9IGZhbHNlKSB7XG4gIGNvbnN0IGlkUHJvcCA9IGZpbmRQcmltYXJ5S2V5KG1vZGVsKS5pZDtcbiAgY29uc3QgbW9kZWxJZCA9IChtb2RlbCBhcyBhbnkpW2lkUHJvcF07XG4gIGlmICghbW9kZWxJZCAmJiAhcmV0dXJuRW1wdHkpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBzZihcIk5vIHZhbHVlIGZvciB0aGUgSWQgaXMgZGVmaW5lZCB1bmRlciB0aGUgcHJvcGVydHkgezB9XCIsIGlkUHJvcClcbiAgICApO1xuICByZXR1cm4gbW9kZWxJZDtcbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL0NvbnRleHR1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJpbnRlcmZhY2VzL0NvbnRleHR1YWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvQ29udGV4dFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHR1YWwge1xuICBjb250ZXh0KCk6IFByb21pc2U8Q29udGV4dD47XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ import { Context } from "../repository/Context";
2
+ export interface Contextual {
3
+ context(): Promise<Context>;
4
+ }
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
 
4
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL0lSZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoiaW50ZXJmYWNlcy9JUmVwb3NpdG9yeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFDYWNoZSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L0RhdGFDYWNoZVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQnVsa0NydWRPcGVyYXRvciB9IGZyb20gXCIuL0J1bGtDcnVkT3BlcmF0b3JcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBJbnRlcmZhY2UgaG9sZGluZyBiYXNpYyBDUlVEIEFQSXNcbiAqIEB0eXBlZGVmIFQgZXh0ZW5kcyB7QGxpbmsgTW9kZWx9XG4gKiBAaW50ZXJmYWNlIElSZXBvc2l0b3J5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJlcG9zaXRvcnk8TSBleHRlbmRzIE1vZGVsPiBleHRlbmRzIEJ1bGtDcnVkT3BlcmF0b3I8TT4ge1xuICByZWFkb25seSBjYWNoZTogRGF0YUNhY2hlO1xuICByZWFkb25seSBjbGFzczogQ29uc3RydWN0b3I8TT47XG59XG4iXX0=
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL0lSZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoiaW50ZXJmYWNlcy9JUmVwb3NpdG9yeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEJ1bGtDcnVkT3BlcmF0b3IgfSBmcm9tIFwiLi9CdWxrQ3J1ZE9wZXJhdG9yXCI7XG5pbXBvcnQgeyBDb250ZXh0dWFsIH0gZnJvbSBcIi4vQ29udGV4dHVhbFwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEludGVyZmFjZSBob2xkaW5nIGJhc2ljIENSVUQgQVBJc1xuICogQHR5cGVkZWYgVCBleHRlbmRzIHtAbGluayBNb2RlbH1cbiAqIEBpbnRlcmZhY2UgSVJlcG9zaXRvcnlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVwb3NpdG9yeTxNIGV4dGVuZHMgTW9kZWw+XG4gIGV4dGVuZHMgQnVsa0NydWRPcGVyYXRvcjxNPixcbiAgICBDb250ZXh0dWFsIHtcbiAgcmVhZG9ubHkgY2xhc3M6IENvbnN0cnVjdG9yPE0+O1xuICB0aW1lc3RhbXAoKTogUHJvbWlzZTxEYXRlPjtcbn1cbiJdfQ==
@@ -1,12 +1,12 @@
1
- import { DataCache } from "../repository/DataCache";
2
1
  import { Constructor, Model } from "@decaf-ts/decorator-validation";
3
2
  import { BulkCrudOperator } from "./BulkCrudOperator";
3
+ import { Contextual } from "./Contextual";
4
4
  /**
5
5
  * @summary Interface holding basic CRUD APIs
6
6
  * @typedef T extends {@link Model}
7
7
  * @interface IRepository
8
8
  */
9
- export interface IRepository<M extends Model> extends BulkCrudOperator<M> {
10
- readonly cache: DataCache;
9
+ export interface IRepository<M extends Model> extends BulkCrudOperator<M>, Contextual {
11
10
  readonly class: Constructor<M>;
11
+ timestamp(): Promise<Date>;
12
12
  }
@@ -27,7 +27,7 @@ function hashOnCreateUpdate(data, key, model, oldModel) {
27
27
  function hash() {
28
28
  return (0, reflection_1.apply)((0, decorators_1.onCreateUpdate)(hashOnCreateUpdate), (0, decorator_validation_1.propMetadata)(Repository_1.Repository.key(constants_1.DBKeys.HASH), {}));
29
29
  }
30
- function composedFromCreateUpdate(data, key, model) {
30
+ function composedFromCreateUpdate(context, data, key, model) {
31
31
  try {
32
32
  const { args, type, prefix, suffix, separator } = data;
33
33
  const composed = args.map((arg) => {
@@ -73,4 +73,4 @@ function composed(args, separator = constants_1.DefaultSeparator, hash = false,
73
73
  return composedFrom(args, hash, separator, "values", prefix, suffix);
74
74
  }
75
75
 
76
- //# sourceMappingURL=data:application/json;charset=utf8;base64,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TUFBTTtLQUNmLENBQUM7SUFFRixNQUFNLFVBQVUsR0FBRztRQUNqQixJQUFBLDJCQUFjLEVBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDO1FBQzlDLElBQUEsbUNBQVksRUFBQyx1QkFBVSxDQUFDLEdBQUcsQ0FBQyxrQkFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQztLQUNwRCxDQUFDO0lBQ0YsSUFBSSxVQUFVO1FBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sSUFBQSxrQkFBSyxFQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUM5QixJQUFjLEVBQ2QsWUFBb0IsNEJBQWdCLEVBQ3BDLE9BQWdCLEtBQUssRUFDckIsTUFBTSxHQUFHLEVBQUUsRUFDWCxNQUFNLEdBQUcsRUFBRTtJQUVYLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELFNBQWdCLFFBQVEsQ0FDdEIsSUFBYyxFQUNkLFlBQW9CLDRCQUFnQixFQUNwQyxPQUFnQixLQUFLLEVBQ3JCLE1BQU0sR0FBRyxFQUFFLEVBQ1gsTUFBTSxHQUFHLEVBQUU7SUFFWCxPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFLENBQUMiLCJmaWxlIjoibW9kZWwvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERCS2V5cywgRGVmYXVsdFNlcGFyYXRvciB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgYXBwbHkgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7XG4gIEhhc2hpbmcsXG4gIE1vZGVsLFxuICBwcm9wTWV0YWRhdGEsXG4gIHNmLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBvbkNyZWF0ZVVwZGF0ZSB9IGZyb20gXCIuLi9vcGVyYXRpb25zL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IElSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvSVJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9lcnJvcnNcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9SZXBvc2l0b3J5XCI7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyfSBzdHJcbiAqIEBtZW1iZXJPZiBkYi1kZWNvcmF0b3JzLm1vZGVsXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hPbkNyZWF0ZVVwZGF0ZTxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBSIGV4dGVuZHMgSVJlcG9zaXRvcnk8TT4sXG4gIFkgPSBhbnksXG4+KHRoaXM6IFIsIGRhdGE6IFksIGtleTogc3RyaW5nLCBtb2RlbDogTSwgb2xkTW9kZWw/OiBNKTogdm9pZCB7XG4gIGlmICghKG1vZGVsIGFzIGFueSlba2V5XSkgcmV0dXJuO1xuICBjb25zdCBoYXNoID0gSGFzaGluZy5oYXNoKChtb2RlbCBhcyBhbnkpW2tleV0pO1xuICBpZiAob2xkTW9kZWwgJiYgKG1vZGVsIGFzIGFueSlba2V5XSA9PT0gaGFzaCkgcmV0dXJuO1xuICAobW9kZWwgYXMgYW55KVtrZXldID0gaGFzaDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2goKSB7XG4gIHJldHVybiBhcHBseShcbiAgICBvbkNyZWF0ZVVwZGF0ZShoYXNoT25DcmVhdGVVcGRhdGUpLFxuICAgIHByb3BNZXRhZGF0YShSZXBvc2l0b3J5LmtleShEQktleXMuSEFTSCksIHt9KVxuICApO1xufVxuXG5leHBvcnQgdHlwZSBDb21wb3NlZEZyb21NZXRhZGF0YSA9IHtcbiAgYXJnczogc3RyaW5nW107XG4gIHNlcGFyYXRvcjogc3RyaW5nO1xuICBoYXNoUmVzdWx0OiBib29sZWFuO1xuICB0eXBlOiBcImtleXNcIiB8IFwidmFsdWVzXCI7XG4gIHByZWZpeD86IHN0cmluZztcbiAgc3VmZml4Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvc2VkRnJvbUNyZWF0ZVVwZGF0ZTxcbiAgVCBleHRlbmRzIE1vZGVsLFxuICBWIGV4dGVuZHMgSVJlcG9zaXRvcnk8VD4sXG4+KHRoaXM6IFYsIGRhdGE6IENvbXBvc2VkRnJvbU1ldGFkYXRhLCBrZXk6IHN0cmluZywgbW9kZWw6IFQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGFyZ3MsIHR5cGUsIHByZWZpeCwgc3VmZml4LCBzZXBhcmF0b3IgfSA9IGRhdGE7XG4gICAgY29uc3QgY29tcG9zZWQgPSBhcmdzLm1hcCgoYXJnOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghKGFyZyBpbiBtb2RlbCkpXG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgIHNmKFwiUHJvcGVydHkgezB9IG5vdCBmb3VuZCB0byBjb21wb3NlIGZyb21cIiwgYXJnKVxuICAgICAgICApO1xuICAgICAgaWYgKHR5cGUgPT09IFwia2V5c1wiKSByZXR1cm4gYXJnO1xuICAgICAgaWYgKHR5cGVvZiAobW9kZWwgYXMgYW55KVthcmddID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICBzZihcIlByb3BlcnR5IHswfSBkb2VzIG5vdCBjb250YWluIGEgdmFsdWUgdG8gY29tcG9zZSBmcm9tXCIsIGFyZylcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiAoKG1vZGVsIGFzIGFueSlbYXJnXSBhcyBhbnkpLnRvU3RyaW5nKCk7XG4gICAgfSk7XG5cbiAgICBpZiAocHJlZml4KSBjb21wb3NlZC51bnNoaWZ0KHByZWZpeCk7XG4gICAgaWYgKHN1ZmZpeCkgY29tcG9zZWQucHVzaChzdWZmaXgpO1xuXG4gICAgKG1vZGVsIGFzIGFueSlba2V5XSA9IGNvbXBvc2VkLmpvaW4oc2VwYXJhdG9yKTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYEZhaWxlZCB0byBjb21wb3NlIHZhbHVlOiAke2V9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcG9zZWRGcm9tKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgaGFzaFJlc3VsdDogYm9vbGVhbiA9IGZhbHNlLFxuICBzZXBhcmF0b3I6IHN0cmluZyA9IERlZmF1bHRTZXBhcmF0b3IsXG4gIHR5cGU6IFwia2V5c1wiIHwgXCJ2YWx1ZXNcIiA9IFwidmFsdWVzXCIsXG4gIHByZWZpeCA9IFwiXCIsXG4gIHN1ZmZpeCA9IFwiXCJcbikge1xuICBjb25zdCBkYXRhOiBDb21wb3NlZEZyb21NZXRhZGF0YSA9IHtcbiAgICBhcmdzOiBhcmdzLFxuICAgIGhhc2hSZXN1bHQ6IGhhc2hSZXN1bHQsXG4gICAgc2VwYXJhdG9yOiBzZXBhcmF0b3IsXG4gICAgdHlwZTogdHlwZSxcbiAgICBwcmVmaXg6IHByZWZpeCxcbiAgICBzdWZmaXg6IHN1ZmZpeCxcbiAgfTtcblxuICBjb25zdCBkZWNvcmF0b3JzID0gW1xuICAgIG9uQ3JlYXRlVXBkYXRlKGNvbXBvc2VkRnJvbUNyZWF0ZVVwZGF0ZSwgZGF0YSksXG4gICAgcHJvcE1ldGFkYXRhKFJlcG9zaXRvcnkua2V5KERCS2V5cy5DT01QT1NFRCksIGRhdGEpLFxuICBdO1xuICBpZiAoaGFzaFJlc3VsdCkgZGVjb3JhdG9ycy5wdXNoKGhhc2goKSk7XG4gIHJldHVybiBhcHBseSguLi5kZWNvcmF0b3JzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvc2VkRnJvbUtleXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBzZXBhcmF0b3I6IHN0cmluZyA9IERlZmF1bHRTZXBhcmF0b3IsXG4gIGhhc2g6IGJvb2xlYW4gPSBmYWxzZSxcbiAgcHJlZml4ID0gXCJcIixcbiAgc3VmZml4ID0gXCJcIlxuKSB7XG4gIHJldHVybiBjb21wb3NlZEZyb20oYXJncywgaGFzaCwgc2VwYXJhdG9yLCBcImtleXNcIiwgcHJlZml4LCBzdWZmaXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZWQoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBzZXBhcmF0b3I6IHN0cmluZyA9IERlZmF1bHRTZXBhcmF0b3IsXG4gIGhhc2g6IGJvb2xlYW4gPSBmYWxzZSxcbiAgcHJlZml4ID0gXCJcIixcbiAgc3VmZml4ID0gXCJcIlxuKSB7XG4gIHJldHVybiBjb21wb3NlZEZyb20oYXJncywgaGFzaCwgc2VwYXJhdG9yLCBcInZhbHVlc1wiLCBwcmVmaXgsIHN1ZmZpeCk7XG59XG4iXX0=
76
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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ZCxNQUFNLEVBQUUsTUFBTTtLQUNmLENBQUM7SUFFRixNQUFNLFVBQVUsR0FBRztRQUNqQixJQUFBLDJCQUFjLEVBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDO1FBQzlDLElBQUEsbUNBQVksRUFBQyx1QkFBVSxDQUFDLEdBQUcsQ0FBQyxrQkFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQztLQUNwRCxDQUFDO0lBQ0YsSUFBSSxVQUFVO1FBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sSUFBQSxrQkFBSyxFQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUM5QixJQUFjLEVBQ2QsWUFBb0IsNEJBQWdCLEVBQ3BDLE9BQWdCLEtBQUssRUFDckIsTUFBTSxHQUFHLEVBQUUsRUFDWCxNQUFNLEdBQUcsRUFBRTtJQUVYLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELFNBQWdCLFFBQVEsQ0FDdEIsSUFBYyxFQUNkLFlBQW9CLDRCQUFnQixFQUNwQyxPQUFnQixLQUFLLEVBQ3JCLE1BQU0sR0FBRyxFQUFFLEVBQ1gsTUFBTSxHQUFHLEVBQUU7SUFFWCxPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFLENBQUMiLCJmaWxlIjoibW9kZWwvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERCS2V5cywgRGVmYXVsdFNlcGFyYXRvciB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgYXBwbHkgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7XG4gIEhhc2hpbmcsXG4gIE1vZGVsLFxuICBwcm9wTWV0YWRhdGEsXG4gIHNmLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBvbkNyZWF0ZVVwZGF0ZSB9IGZyb20gXCIuLi9vcGVyYXRpb25zL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IElSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvSVJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9lcnJvcnNcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9SZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvQ29udGV4dFwiO1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cn0gc3RyXG4gKiBAbWVtYmVyT2YgZGItZGVjb3JhdG9ycy5tb2RlbFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoT25DcmVhdGVVcGRhdGU8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIElSZXBvc2l0b3J5PE0+LFxuICBZID0gYW55LFxuPih0aGlzOiBSLCBkYXRhOiBZLCBrZXk6IHN0cmluZywgbW9kZWw6IE0sIG9sZE1vZGVsPzogTSk6IHZvaWQge1xuICBpZiAoIShtb2RlbCBhcyBhbnkpW2tleV0pIHJldHVybjtcbiAgY29uc3QgaGFzaCA9IEhhc2hpbmcuaGFzaCgobW9kZWwgYXMgYW55KVtrZXldKTtcbiAgaWYgKG9sZE1vZGVsICYmIChtb2RlbCBhcyBhbnkpW2tleV0gPT09IGhhc2gpIHJldHVybjtcbiAgKG1vZGVsIGFzIGFueSlba2V5XSA9IGhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoKCkge1xuICByZXR1cm4gYXBwbHkoXG4gICAgb25DcmVhdGVVcGRhdGUoaGFzaE9uQ3JlYXRlVXBkYXRlKSxcbiAgICBwcm9wTWV0YWRhdGEoUmVwb3NpdG9yeS5rZXkoREJLZXlzLkhBU0gpLCB7fSlcbiAgKTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcG9zZWRGcm9tTWV0YWRhdGEgPSB7XG4gIGFyZ3M6IHN0cmluZ1tdO1xuICBzZXBhcmF0b3I6IHN0cmluZztcbiAgaGFzaFJlc3VsdDogYm9vbGVhbjtcbiAgdHlwZTogXCJrZXlzXCIgfCBcInZhbHVlc1wiO1xuICBwcmVmaXg/OiBzdHJpbmc7XG4gIHN1ZmZpeD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlZEZyb21DcmVhdGVVcGRhdGU8XG4gIFQgZXh0ZW5kcyBNb2RlbCxcbiAgViBleHRlbmRzIElSZXBvc2l0b3J5PFQ+LFxuPihcbiAgdGhpczogVixcbiAgY29udGV4dDogQ29udGV4dCxcbiAgZGF0YTogQ29tcG9zZWRGcm9tTWV0YWRhdGEsXG4gIGtleTogc3RyaW5nLFxuICBtb2RlbDogVFxuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBhcmdzLCB0eXBlLCBwcmVmaXgsIHN1ZmZpeCwgc2VwYXJhdG9yIH0gPSBkYXRhO1xuICAgIGNvbnN0IGNvbXBvc2VkID0gYXJncy5tYXAoKGFyZzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIShhcmcgaW4gbW9kZWwpKVxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICBzZihcIlByb3BlcnR5IHswfSBub3QgZm91bmQgdG8gY29tcG9zZSBmcm9tXCIsIGFyZylcbiAgICAgICAgKTtcbiAgICAgIGlmICh0eXBlID09PSBcImtleXNcIikgcmV0dXJuIGFyZztcbiAgICAgIGlmICh0eXBlb2YgKG1vZGVsIGFzIGFueSlbYXJnXSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgc2YoXCJQcm9wZXJ0eSB7MH0gZG9lcyBub3QgY29udGFpbiBhIHZhbHVlIHRvIGNvbXBvc2UgZnJvbVwiLCBhcmcpXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gKChtb2RlbCBhcyBhbnkpW2FyZ10gYXMgYW55KS50b1N0cmluZygpO1xuICAgIH0pO1xuXG4gICAgaWYgKHByZWZpeCkgY29tcG9zZWQudW5zaGlmdChwcmVmaXgpO1xuICAgIGlmIChzdWZmaXgpIGNvbXBvc2VkLnB1c2goc3VmZml4KTtcblxuICAgIChtb2RlbCBhcyBhbnkpW2tleV0gPSBjb21wb3NlZC5qb2luKHNlcGFyYXRvcik7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBGYWlsZWQgdG8gY29tcG9zZSB2YWx1ZTogJHtlfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBvc2VkRnJvbShcbiAgYXJnczogc3RyaW5nW10sXG4gIGhhc2hSZXN1bHQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgc2VwYXJhdG9yOiBzdHJpbmcgPSBEZWZhdWx0U2VwYXJhdG9yLFxuICB0eXBlOiBcImtleXNcIiB8IFwidmFsdWVzXCIgPSBcInZhbHVlc1wiLFxuICBwcmVmaXggPSBcIlwiLFxuICBzdWZmaXggPSBcIlwiXG4pIHtcbiAgY29uc3QgZGF0YTogQ29tcG9zZWRGcm9tTWV0YWRhdGEgPSB7XG4gICAgYXJnczogYXJncyxcbiAgICBoYXNoUmVzdWx0OiBoYXNoUmVzdWx0LFxuICAgIHNlcGFyYXRvcjogc2VwYXJhdG9yLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgcHJlZml4OiBwcmVmaXgsXG4gICAgc3VmZml4OiBzdWZmaXgsXG4gIH07XG5cbiAgY29uc3QgZGVjb3JhdG9ycyA9IFtcbiAgICBvbkNyZWF0ZVVwZGF0ZShjb21wb3NlZEZyb21DcmVhdGVVcGRhdGUsIGRhdGEpLFxuICAgIHByb3BNZXRhZGF0YShSZXBvc2l0b3J5LmtleShEQktleXMuQ09NUE9TRUQpLCBkYXRhKSxcbiAgXTtcbiAgaWYgKGhhc2hSZXN1bHQpIGRlY29yYXRvcnMucHVzaChoYXNoKCkpO1xuICByZXR1cm4gYXBwbHkoLi4uZGVjb3JhdG9ycyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlZEZyb21LZXlzKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgc2VwYXJhdG9yOiBzdHJpbmcgPSBEZWZhdWx0U2VwYXJhdG9yLFxuICBoYXNoOiBib29sZWFuID0gZmFsc2UsXG4gIHByZWZpeCA9IFwiXCIsXG4gIHN1ZmZpeCA9IFwiXCJcbikge1xuICByZXR1cm4gY29tcG9zZWRGcm9tKGFyZ3MsIGhhc2gsIHNlcGFyYXRvciwgXCJrZXlzXCIsIHByZWZpeCwgc3VmZml4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvc2VkKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgc2VwYXJhdG9yOiBzdHJpbmcgPSBEZWZhdWx0U2VwYXJhdG9yLFxuICBoYXNoOiBib29sZWFuID0gZmFsc2UsXG4gIHByZWZpeCA9IFwiXCIsXG4gIHN1ZmZpeCA9IFwiXCJcbikge1xuICByZXR1cm4gY29tcG9zZWRGcm9tKGFyZ3MsIGhhc2gsIHNlcGFyYXRvciwgXCJ2YWx1ZXNcIiwgcHJlZml4LCBzdWZmaXgpO1xufVxuIl19
@@ -1,5 +1,6 @@
1
1
  import { Model } from "@decaf-ts/decorator-validation";
2
2
  import { IRepository } from "../interfaces/IRepository";
3
+ import { Context } from "../repository/Context";
3
4
  /**
4
5
  *
5
6
  * @param {str} str
@@ -15,6 +16,6 @@ export type ComposedFromMetadata = {
15
16
  prefix?: string;
16
17
  suffix?: string;
17
18
  };
18
- export declare function composedFromCreateUpdate<T extends Model, V extends IRepository<T>>(this: V, data: ComposedFromMetadata, key: string, model: T): void;
19
+ export declare function composedFromCreateUpdate<T extends Model, V extends IRepository<T>>(this: V, context: Context, data: ComposedFromMetadata, key: string, model: T): void;
19
20
  export declare function composedFromKeys(args: string[], separator?: string, hash?: boolean, prefix?: string, suffix?: string): (target: object, propertyKey?: any, descriptor?: any) => void;
20
21
  export declare function composed(args: string[], separator?: string, hash?: boolean, prefix?: string, suffix?: string): (target: object, propertyKey?: any, descriptor?: any) => void;
@@ -5,12 +5,14 @@ exports.onUpdate = onUpdate;
5
5
  exports.onCreate = onCreate;
6
6
  exports.onRead = onRead;
7
7
  exports.onDelete = onDelete;
8
+ exports.onAny = onAny;
8
9
  exports.on = on;
9
10
  exports.afterCreateUpdate = afterCreateUpdate;
10
11
  exports.afterUpdate = afterUpdate;
11
12
  exports.afterCreate = afterCreate;
12
13
  exports.afterRead = afterRead;
13
14
  exports.afterDelete = afterDelete;
15
+ exports.afterAny = afterAny;
14
16
  exports.after = after;
15
17
  exports.operation = operation;
16
18
  const constants_1 = require("./constants.cjs");
@@ -58,7 +60,7 @@ function onUpdate(handler, data) {
58
60
  * @summary Defines a behaviour to set on the defined {@link DBOperations.CREATE}
59
61
  *
60
62
  * @param {OnOperationHandler<any>} handler The method called upon the operation
61
- * @param data?
63
+ * @param data
62
64
  *
63
65
  * @see on
64
66
  *
@@ -99,6 +101,21 @@ function onRead(handler, data) {
99
101
  function onDelete(handler, data) {
100
102
  return on(constants_1.DBOperations.DELETE, handler, data);
101
103
  }
104
+ /**
105
+ * @summary Defines a behaviour to set on the defined {@link DBOperations.DELETE}
106
+ *
107
+ * @param {OnOperationHandler<any>} handler The method called upon the operation
108
+ * @param data
109
+ *
110
+ * @see on
111
+ *
112
+ * @function onAny
113
+ *
114
+ * @category Decorators
115
+ */
116
+ function onAny(handler, data) {
117
+ return on(constants_1.DBOperations.ALL, handler, data);
118
+ }
102
119
  /**
103
120
  * @summary Defines a behaviour to set on the defined {@link DBOperations}
104
121
  *
@@ -192,6 +209,22 @@ function afterRead(handler, data) {
192
209
  function afterDelete(handler, data) {
193
210
  return after(constants_1.DBOperations.DELETE, handler, data);
194
211
  }
212
+ /**
213
+ * @summary Defines a behaviour to set after the defined {@link DBOperations.DELETE}
214
+ *
215
+ * @param {AfterOperationHandler<any>} handler The method called upon the operation
216
+ * @param data
217
+ * @param {any[]} [args] Arguments that will be passed in order to the handler method
218
+ *
219
+ * @see after
220
+ *
221
+ * @function afterAny
222
+ *
223
+ * @category Decorators
224
+ */
225
+ function afterAny(handler, data) {
226
+ return after(constants_1.DBOperations.ALL, handler, data);
227
+ }
195
228
  /**
196
229
  * @summary Defines a behaviour to set on the defined {@link DBOperations}
197
230
  *
@@ -238,4 +271,4 @@ function operation(baseOp, operation = constants_1.DBOperations.ALL, handler, da
238
271
  };
239
272
  }
240
273
 
241
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vcGVyYXRpb25zL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4QkEsd0NBT0M7QUFjRCw0QkFLQztBQWFELDRCQUtDO0FBY0Qsd0JBRUM7QUFjRCw0QkFFQztBQWVELGdCQU1DO0FBYUQsOENBT0M7QUFjRCxrQ0FLQztBQWNELGtDQUtDO0FBZUQsOEJBS0M7QUFjRCxrQ0FLQztBQWdCRCxzQkFNQztBQUVELDhCQTRDQztBQTlSRCwyQ0FBMEQ7QUFDMUQsNkNBQTBDO0FBQzFDLHFEQUE2QztBQUM3Qyx5RUFBOEQ7QUFFOUQsU0FBUyxNQUFNLENBQUMsRUFBaUIsRUFBRSxPQUF3QztJQUN6RSxPQUFPLENBQUMsTUFBVyxFQUFFLFdBQW1CLEVBQUUsRUFBRTtRQUMxQyx1QkFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixPQUV1QyxFQUN2QyxJQUFRO0lBRVIsT0FBTyxFQUFFLENBQUMsd0JBQVksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFDRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixRQUFRLENBQ3RCLE9BQTRDLEVBQzVDLElBQVE7SUFFUixPQUFPLEVBQUUsQ0FBQyx3QkFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUNEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsUUFBUSxDQUN0QixPQUE4QyxFQUM5QyxJQUFRO0lBRVIsT0FBTyxFQUFFLENBQUMsd0JBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLE1BQU0sQ0FBSSxPQUF3QyxFQUFFLElBQU87SUFDekUsT0FBTyxFQUFFLENBQUMsd0JBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLFFBQVEsQ0FBSSxPQUF3QyxFQUFFLElBQU87SUFDM0UsT0FBTyxFQUFFLENBQUMsd0JBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixFQUFFLENBQ2hCLEtBQXNCLHdCQUFZLENBQUMsR0FBRyxFQUN0QyxPQUFzQyxFQUN0QyxJQUFRO0lBRVIsT0FBTyxTQUFTLENBQUMseUJBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBQ0Q7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FDL0IsT0FFdUMsRUFDdkMsSUFBTztJQUVQLE9BQU8sS0FBSyxDQUFDLHdCQUFZLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixXQUFXLENBQ3pCLE9BQTRDLEVBQzVDLElBQU87SUFFUCxPQUFPLEtBQUssQ0FBQyx3QkFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsV0FBVyxDQUN6QixPQUE4QyxFQUM5QyxJQUFPO0lBRVAsT0FBTyxLQUFLLENBQUMsd0JBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLE9BQThDLEVBQzlDLElBQVE7SUFFUixPQUFPLEtBQUssQ0FBQyx3QkFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUNEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQWdCLFdBQVcsQ0FDekIsT0FBOEMsRUFDOUMsSUFBUTtJQUVSLE9BQU8sS0FBSyxDQUFDLHdCQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQWdCLEtBQUssQ0FDbkIsS0FBc0Isd0JBQVksQ0FBQyxHQUFHLEVBQ3RDLE9BQXNDLEVBQ3RDLElBQVE7SUFFUixPQUFPLFNBQVMsQ0FBQyx5QkFBYSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxTQUFnQixTQUFTLENBQ3ZCLE1BQThDLEVBQzlDLFlBQTZCLHdCQUFZLENBQUMsR0FBRyxFQUM3QyxPQUFzQyxFQUN0QyxTQUFhO0lBRWIsT0FBTyxDQUFDLE1BQWMsRUFBRSxXQUE0QixFQUFFLEVBQUU7UUFDdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUN2RCxNQUFNLFdBQVcsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2hDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQzVCLHVCQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUMzQixNQUFNLEVBQ04sV0FBVyxDQUNaLENBQUM7WUFDRixJQUFJLENBQUMsSUFBSTtnQkFDUCxJQUFJLEdBQUc7b0JBQ0wsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsUUFBUSxFQUFFLEVBQUU7aUJBQ2IsQ0FBQztZQUVKLE1BQU0sVUFBVSxHQUFHLHVCQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXRELElBQ0UsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDcEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ2pELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7b0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHO29CQUM3QyxJQUFJLEVBQUUsU0FBUztpQkFDaEIsQ0FBQztnQkFFRixLQUFLLENBQUMsSUFBSSxDQUNSLE1BQU0sQ0FBQyxXQUE0QixFQUFFLE9BQU8sQ0FBQyxFQUM3QyxJQUFBLG1DQUFZLEVBQUMsdUJBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQ2hELENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDUCxPQUFPLElBQUEsa0JBQUssRUFBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUM7QUFDSixDQUFDIiwiZmlsZSI6Im9wZXJhdGlvbnMvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIElkT3BlcmF0aW9uSGFuZGxlcixcbiAgT3BlcmF0aW9uSGFuZGxlcixcbiAgU3RhbmRhcmRPcGVyYXRpb25IYW5kbGVyLFxuICBVcGRhdGVPcGVyYXRpb25IYW5kbGVyLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgREJPcGVyYXRpb25zLCBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25zIH0gZnJvbSBcIi4vT3BlcmF0aW9uc1wiO1xuaW1wb3J0IHsgYXBwbHkgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IHByb3BNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuZnVuY3Rpb24gaGFuZGxlKG9wOiBPcGVyYXRpb25LZXlzLCBoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBhbnk+KSB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbiAgICBPcGVyYXRpb25zLnJlZ2lzdGVyKGhhbmRsZXIsIG9wLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBvbiB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLkNSRUFURV9VUERBVEV9XG4gKlxuICogQHBhcmFtIHtPbk9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gQXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgaW4gb3JkZXIgdG8gdGhlIGhhbmRsZXIgbWV0aG9kXG4gKlxuICogQHNlZSBvblxuICpcbiAqIEBmdW5jdGlvbiBvbkNyZWF0ZVVwZGF0ZVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkNyZWF0ZVVwZGF0ZTxUPihcbiAgaGFuZGxlcjpcbiAgICB8IFN0YW5kYXJkT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD5cbiAgICB8IFVwZGF0ZU9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhPzogVFxuKSB7XG4gIHJldHVybiBvbihEQk9wZXJhdGlvbnMuQ1JFQVRFX1VQREFURSwgaGFuZGxlciwgZGF0YSk7XG59XG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBiZWhhdmlvdXIgdG8gc2V0IG9uIHRoZSBkZWZpbmVkIHtAbGluayBEQk9wZXJhdGlvbnMuVVBEQVRFfVxuICpcbiAqIEBwYXJhbSB7T25PcGVyYXRpb25IYW5kbGVyPGFueT59IGhhbmRsZXIgVGhlIG1ldGhvZCBjYWxsZWQgdXBvbiB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gZGF0YVxuICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdIEFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIGluIG9yZGVyIHRvIHRoZSBoYW5kbGVyIG1ldGhvZFxuICpcbiAqIEBzZWUgb25cbiAqXG4gKiBAZnVuY3Rpb24gb25VcGRhdGVcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25VcGRhdGU8VD4oXG4gIGhhbmRsZXI6IFVwZGF0ZU9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhPzogVFxuKSB7XG4gIHJldHVybiBvbihEQk9wZXJhdGlvbnMuVVBEQVRFLCBoYW5kbGVyLCBkYXRhKTtcbn1cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgb24gdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5DUkVBVEV9XG4gKlxuICogQHBhcmFtIHtPbk9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhP1xuICpcbiAqIEBzZWUgb25cbiAqXG4gKiBAZnVuY3Rpb24gb25DcmVhdGVcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25DcmVhdGU8VD4oXG4gIGhhbmRsZXI6IFN0YW5kYXJkT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD4sXG4gIGRhdGE/OiBUXG4pIHtcbiAgcmV0dXJuIG9uKERCT3BlcmF0aW9ucy5DUkVBVEUsIGhhbmRsZXIsIGRhdGEpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBiZWhhdmlvdXIgdG8gc2V0IG9uIHRoZSBkZWZpbmVkIHtAbGluayBEQk9wZXJhdGlvbnMuUkVBRH1cbiAqXG4gKiBAcGFyYW0ge09uT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqXG4gKiBAc2VlIG9uXG4gKlxuICogQGZ1bmN0aW9uIG9uUmVhZFxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvblJlYWQ8VD4oaGFuZGxlcjogSWRPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPiwgZGF0YTogVCkge1xuICByZXR1cm4gb24oREJPcGVyYXRpb25zLlJFQUQsIGhhbmRsZXIsIGRhdGEpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBiZWhhdmlvdXIgdG8gc2V0IG9uIHRoZSBkZWZpbmVkIHtAbGluayBEQk9wZXJhdGlvbnMuREVMRVRFfVxuICpcbiAqIEBwYXJhbSB7T25PcGVyYXRpb25IYW5kbGVyPGFueT59IGhhbmRsZXIgVGhlIG1ldGhvZCBjYWxsZWQgdXBvbiB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gZGF0YVxuICpcbiAqIEBzZWUgb25cbiAqXG4gKiBAZnVuY3Rpb24gb25EZWxldGVcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25EZWxldGU8VD4oaGFuZGxlcjogSWRPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPiwgZGF0YTogVCkge1xuICByZXR1cm4gb24oREJPcGVyYXRpb25zLkRFTEVURSwgaGFuZGxlciwgZGF0YSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgb24gdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9uc31cbiAqXG4gKiBAcGFyYW0ge09wZXJhdGlvbktleXNbXSB8IERCT3BlcmF0aW9uc30gb3AgT25lIG9mIHtAbGluayBEQk9wZXJhdGlvbnN9XG4gKiBAcGFyYW0ge09uT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqXG4gKiBleDogaGFuZGxlciguLi5hcmdzLCAuLi5wcm9wcy5tYXAocCA9PiB0YXJnZXRbcF0pKVxuICpcbiAqIEBmdW5jdGlvbiBvblxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbjxUPihcbiAgb3A6IE9wZXJhdGlvbktleXNbXSA9IERCT3BlcmF0aW9ucy5BTEwsXG4gIGhhbmRsZXI6IE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhPzogVFxuKSB7XG4gIHJldHVybiBvcGVyYXRpb24oT3BlcmF0aW9uS2V5cy5PTiwgb3AsIGhhbmRsZXIsIGRhdGEpO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBhZnRlciB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLkNSRUFURV9VUERBVEV9XG4gKlxuICogQHBhcmFtIHtBZnRlck9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKlxuICogQHNlZSBhZnRlclxuICpcbiAqIEBmdW5jdGlvbiBhZnRlckNyZWF0ZVVwZGF0ZVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlckNyZWF0ZVVwZGF0ZTxUPihcbiAgaGFuZGxlcjpcbiAgICB8IFN0YW5kYXJkT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD5cbiAgICB8IFVwZGF0ZU9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhOiBUXG4pIHtcbiAgcmV0dXJuIGFmdGVyKERCT3BlcmF0aW9ucy5DUkVBVEVfVVBEQVRFLCBoYW5kbGVyLCBkYXRhKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBhZnRlciB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLlVQREFURX1cbiAqXG4gKiBAcGFyYW0ge0FmdGVyT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqXG4gKiBAc2VlIGFmdGVyXG4gKlxuICogQGZ1bmN0aW9uIGFmdGVyVXBkYXRlXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyVXBkYXRlPFQ+KFxuICBoYW5kbGVyOiBVcGRhdGVPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YTogVFxuKSB7XG4gIHJldHVybiBhZnRlcihEQk9wZXJhdGlvbnMuVVBEQVRFLCBoYW5kbGVyLCBkYXRhKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBhZnRlciB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLkNSRUFURX1cbiAqXG4gKiBAcGFyYW0ge0FmdGVyT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqXG4gKiBAc2VlIGFmdGVyXG4gKlxuICogQGZ1bmN0aW9uIGFmdGVyQ3JlYXRlXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyQ3JlYXRlPFQ+KFxuICBoYW5kbGVyOiBTdGFuZGFyZE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhOiBUXG4pIHtcbiAgcmV0dXJuIGFmdGVyKERCT3BlcmF0aW9ucy5DUkVBVEUsIGhhbmRsZXIsIGRhdGEpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBiZWhhdmlvdXIgdG8gc2V0IGFmdGVyIHRoZSBkZWZpbmVkIHtAbGluayBEQk9wZXJhdGlvbnMuUkVBRH1cbiAqXG4gKiBAcGFyYW0ge0FmdGVyT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqIEBwYXJhbSB7YW55W119IFthcmdzXSBBcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBpbiBvcmRlciB0byB0aGUgaGFuZGxlciBtZXRob2RcbiAqXG4gKiBAc2VlIGFmdGVyXG4gKlxuICogQGZ1bmN0aW9uIGFmdGVyUmVhZFxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlclJlYWQ8VD4oXG4gIGhhbmRsZXI6IFN0YW5kYXJkT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD4sXG4gIGRhdGE/OiBUXG4pIHtcbiAgcmV0dXJuIGFmdGVyKERCT3BlcmF0aW9ucy5SRUFELCBoYW5kbGVyLCBkYXRhKTtcbn1cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgYWZ0ZXIgdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5ERUxFVEV9XG4gKlxuICogQHBhcmFtIHtBZnRlck9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gQXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgaW4gb3JkZXIgdG8gdGhlIGhhbmRsZXIgbWV0aG9kXG4gKlxuICogQHNlZSBhZnRlclxuICpcbiAqIEBmdW5jdGlvbiBhZnRlckRlbGV0ZVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlckRlbGV0ZTxUPihcbiAgaGFuZGxlcjogU3RhbmRhcmRPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YT86IFRcbikge1xuICByZXR1cm4gYWZ0ZXIoREJPcGVyYXRpb25zLkRFTEVURSwgaGFuZGxlciwgZGF0YSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgb24gdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9uc31cbiAqXG4gKiBAcGFyYW0ge09wZXJhdGlvbktleXNbXSB8IERCT3BlcmF0aW9uc30gb3AgT25lIG9mIHtAbGluayBEQk9wZXJhdGlvbnN9XG4gKiBAcGFyYW0ge0FmdGVyT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICpcbiAqIGV4OiBoYW5kbGVyKC4uLmFyZ3MsIC4uLnByb3BzLm1hcChwID0+IHRhcmdldFtwXSkpXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEBwYXJhbSBhcmdzXG4gKiBAZnVuY3Rpb24gYWZ0ZXJcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXI8VD4oXG4gIG9wOiBPcGVyYXRpb25LZXlzW10gPSBEQk9wZXJhdGlvbnMuQUxMLFxuICBoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YT86IFRcbikge1xuICByZXR1cm4gb3BlcmF0aW9uKE9wZXJhdGlvbktleXMuQUZURVIsIG9wLCBoYW5kbGVyLCBkYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wZXJhdGlvbjxUPihcbiAgYmFzZU9wOiBPcGVyYXRpb25LZXlzLk9OIHwgT3BlcmF0aW9uS2V5cy5BRlRFUixcbiAgb3BlcmF0aW9uOiBPcGVyYXRpb25LZXlzW10gPSBEQk9wZXJhdGlvbnMuQUxMLFxuICBoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YVRvQWRkPzogVFxuKSB7XG4gIHJldHVybiAodGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IHtcbiAgICBjb25zdCBuYW1lID0gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgY29uc3QgZGVjb3JhdG9ycyA9IG9wZXJhdGlvbi5yZWR1Y2UoKGFjY3VtOiBhbnlbXSwgb3ApID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvdW5kS2V5ID0gYmFzZU9wICsgb3A7XG4gICAgICBsZXQgZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIE9wZXJhdGlvbnMua2V5KGNvbXBvdW5kS2V5KSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBwcm9wZXJ0eUtleVxuICAgICAgKTtcbiAgICAgIGlmICghZGF0YSlcbiAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICBvcGVyYXRpb246IG9wLFxuICAgICAgICAgIGhhbmRsZXJzOiB7fSxcbiAgICAgICAgfTtcblxuICAgICAgY29uc3QgaGFuZGxlcktleSA9IE9wZXJhdGlvbnMuZ2V0SGFuZGxlck5hbWUoaGFuZGxlcik7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIWRhdGEuaGFuZGxlcnNbbmFtZV0gfHxcbiAgICAgICAgIWRhdGEuaGFuZGxlcnNbbmFtZV1bcHJvcGVydHlLZXldIHx8XG4gICAgICAgICEoaGFuZGxlcktleSBpbiBkYXRhLmhhbmRsZXJzW25hbWVdW3Byb3BlcnR5S2V5XSlcbiAgICAgICkge1xuICAgICAgICBkYXRhLmhhbmRsZXJzW25hbWVdID0gZGF0YS5oYW5kbGVyc1tuYW1lXSB8fCB7fTtcbiAgICAgICAgZGF0YS5oYW5kbGVyc1tuYW1lXVtwcm9wZXJ0eUtleV0gPVxuICAgICAgICAgIGRhdGEuaGFuZGxlcnNbbmFtZV1bcHJvcGVydHlLZXldIHx8IHt9O1xuICAgICAgICBkYXRhLmhhbmRsZXJzW25hbWVdW3Byb3BlcnR5S2V5XVtoYW5kbGVyS2V5XSA9IHtcbiAgICAgICAgICBkYXRhOiBkYXRhVG9BZGQsXG4gICAgICAgIH07XG5cbiAgICAgICAgYWNjdW0ucHVzaChcbiAgICAgICAgICBoYW5kbGUoY29tcG91bmRLZXkgYXMgT3BlcmF0aW9uS2V5cywgaGFuZGxlciksXG4gICAgICAgICAgcHJvcE1ldGFkYXRhKE9wZXJhdGlvbnMua2V5KGNvbXBvdW5kS2V5KSwgZGF0YSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIGFwcGx5KC4uLmRlY29yYXRvcnMpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICB9O1xufVxuIl19
274
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vcGVyYXRpb25zL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4QkEsd0NBT0M7QUFjRCw0QkFLQztBQWFELDRCQUtDO0FBY0Qsd0JBRUM7QUFjRCw0QkFFQztBQWNELHNCQUVDO0FBZUQsZ0JBTUM7QUFhRCw4Q0FPQztBQWNELGtDQUtDO0FBY0Qsa0NBS0M7QUFlRCw4QkFLQztBQWNELGtDQUtDO0FBZUQsNEJBS0M7QUFnQkQsc0JBTUM7QUFFRCw4QkE0Q0M7QUFsVUQsMkNBQTBEO0FBQzFELDZDQUEwQztBQUMxQyxxREFBNkM7QUFDN0MseUVBQThEO0FBRTlELFNBQVMsTUFBTSxDQUFDLEVBQWlCLEVBQUUsT0FBd0M7SUFDekUsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFFLEVBQUU7UUFDMUMsdUJBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsT0FFdUMsRUFDdkMsSUFBUTtJQUVSLE9BQU8sRUFBRSxDQUFDLHdCQUFZLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBQ0Q7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBZ0IsUUFBUSxDQUN0QixPQUE0QyxFQUM1QyxJQUFRO0lBRVIsT0FBTyxFQUFFLENBQUMsd0JBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFDRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLFFBQVEsQ0FDdEIsT0FBOEMsRUFDOUMsSUFBUTtJQUVSLE9BQU8sRUFBRSxDQUFDLHdCQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQ7Ozs7Ozs7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V0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQ2hELENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDUCxPQUFPLElBQUEsa0JBQUssRUFBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUM7QUFDSixDQUFDIiwiZmlsZSI6Im9wZXJhdGlvbnMvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIElkT3BlcmF0aW9uSGFuZGxlcixcbiAgT3BlcmF0aW9uSGFuZGxlcixcbiAgU3RhbmRhcmRPcGVyYXRpb25IYW5kbGVyLFxuICBVcGRhdGVPcGVyYXRpb25IYW5kbGVyLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgREJPcGVyYXRpb25zLCBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25zIH0gZnJvbSBcIi4vT3BlcmF0aW9uc1wiO1xuaW1wb3J0IHsgYXBwbHkgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IHByb3BNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuZnVuY3Rpb24gaGFuZGxlKG9wOiBPcGVyYXRpb25LZXlzLCBoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBhbnk+KSB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbiAgICBPcGVyYXRpb25zLnJlZ2lzdGVyKGhhbmRsZXIsIG9wLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBvbiB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLkNSRUFURV9VUERBVEV9XG4gKlxuICogQHBhcmFtIHtPbk9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gQXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgaW4gb3JkZXIgdG8gdGhlIGhhbmRsZXIgbWV0aG9kXG4gKlxuICogQHNlZSBvblxuICpcbiAqIEBmdW5jdGlvbiBvbkNyZWF0ZVVwZGF0ZVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkNyZWF0ZVVwZGF0ZTxUPihcbiAgaGFuZGxlcjpcbiAgICB8IFN0YW5kYXJkT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD5cbiAgICB8IFVwZGF0ZU9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhPzogVFxuKSB7XG4gIHJldHVybiBvbihEQk9wZXJhdGlvbnMuQ1JFQVRFX1VQREFURSwgaGFuZGxlciwgZGF0YSk7XG59XG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBiZWhhdmlvdXIgdG8gc2V0IG9uIHRoZSBkZWZpbmVkIHtAbGluayBEQk9wZXJhdGlvbnMuVVBEQVRFfVxuICpcbiAqIEBwYXJhbSB7T25PcGVyYXRpb25IYW5kbGVyPGFueT59IGhhbmRsZXIgVGhlIG1ldGhvZCBjYWxsZWQgdXBvbiB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gZGF0YVxuICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdIEFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIGluIG9yZGVyIHRvIHRoZSBoYW5kbGVyIG1ldGhvZFxuICpcbiAqIEBzZWUgb25cbiAqXG4gKiBAZnVuY3Rpb24gb25VcGRhdGVcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25VcGRhdGU8VD4oXG4gIGhhbmRsZXI6IFVwZGF0ZU9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhPzogVFxuKSB7XG4gIHJldHVybiBvbihEQk9wZXJhdGlvbnMuVVBEQVRFLCBoYW5kbGVyLCBkYXRhKTtcbn1cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgb24gdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5DUkVBVEV9XG4gKlxuICogQHBhcmFtIHtPbk9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKlxuICogQHNlZSBvblxuICpcbiAqIEBmdW5jdGlvbiBvbkNyZWF0ZVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkNyZWF0ZTxUPihcbiAgaGFuZGxlcjogU3RhbmRhcmRPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YT86IFRcbikge1xuICByZXR1cm4gb24oREJPcGVyYXRpb25zLkNSRUFURSwgaGFuZGxlciwgZGF0YSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgb24gdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5SRUFEfVxuICpcbiAqIEBwYXJhbSB7T25PcGVyYXRpb25IYW5kbGVyPGFueT59IGhhbmRsZXIgVGhlIG1ldGhvZCBjYWxsZWQgdXBvbiB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gZGF0YVxuICpcbiAqIEBzZWUgb25cbiAqXG4gKiBAZnVuY3Rpb24gb25SZWFkXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uUmVhZDxUPihoYW5kbGVyOiBJZE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LCBkYXRhOiBUKSB7XG4gIHJldHVybiBvbihEQk9wZXJhdGlvbnMuUkVBRCwgaGFuZGxlciwgZGF0YSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgb24gdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5ERUxFVEV9XG4gKlxuICogQHBhcmFtIHtPbk9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKlxuICogQHNlZSBvblxuICpcbiAqIEBmdW5jdGlvbiBvbkRlbGV0ZVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkRlbGV0ZTxUPihoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPiwgZGF0YTogVCkge1xuICByZXR1cm4gb24oREJPcGVyYXRpb25zLkRFTEVURSwgaGFuZGxlciwgZGF0YSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgb24gdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5ERUxFVEV9XG4gKlxuICogQHBhcmFtIHtPbk9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKlxuICogQHNlZSBvblxuICpcbiAqIEBmdW5jdGlvbiBvbkFueVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkFueTxUPihoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPiwgZGF0YTogVCkge1xuICByZXR1cm4gb24oREJPcGVyYXRpb25zLkFMTCwgaGFuZGxlciwgZGF0YSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgb24gdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9uc31cbiAqXG4gKiBAcGFyYW0ge09wZXJhdGlvbktleXNbXSB8IERCT3BlcmF0aW9uc30gb3AgT25lIG9mIHtAbGluayBEQk9wZXJhdGlvbnN9XG4gKiBAcGFyYW0ge09uT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqXG4gKiBleDogaGFuZGxlciguLi5hcmdzLCAuLi5wcm9wcy5tYXAocCA9PiB0YXJnZXRbcF0pKVxuICpcbiAqIEBmdW5jdGlvbiBvblxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbjxUPihcbiAgb3A6IE9wZXJhdGlvbktleXNbXSA9IERCT3BlcmF0aW9ucy5BTEwsXG4gIGhhbmRsZXI6IE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhPzogVFxuKSB7XG4gIHJldHVybiBvcGVyYXRpb24oT3BlcmF0aW9uS2V5cy5PTiwgb3AsIGhhbmRsZXIsIGRhdGEpO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBhZnRlciB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLkNSRUFURV9VUERBVEV9XG4gKlxuICogQHBhcmFtIHtBZnRlck9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKlxuICogQHNlZSBhZnRlclxuICpcbiAqIEBmdW5jdGlvbiBhZnRlckNyZWF0ZVVwZGF0ZVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlckNyZWF0ZVVwZGF0ZTxUPihcbiAgaGFuZGxlcjpcbiAgICB8IFN0YW5kYXJkT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD5cbiAgICB8IFVwZGF0ZU9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhOiBUXG4pIHtcbiAgcmV0dXJuIGFmdGVyKERCT3BlcmF0aW9ucy5DUkVBVEVfVVBEQVRFLCBoYW5kbGVyLCBkYXRhKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBhZnRlciB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLlVQREFURX1cbiAqXG4gKiBAcGFyYW0ge0FmdGVyT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqXG4gKiBAc2VlIGFmdGVyXG4gKlxuICogQGZ1bmN0aW9uIGFmdGVyVXBkYXRlXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyVXBkYXRlPFQ+KFxuICBoYW5kbGVyOiBVcGRhdGVPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YTogVFxuKSB7XG4gIHJldHVybiBhZnRlcihEQk9wZXJhdGlvbnMuVVBEQVRFLCBoYW5kbGVyLCBkYXRhKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgYmVoYXZpb3VyIHRvIHNldCBhZnRlciB0aGUgZGVmaW5lZCB7QGxpbmsgREJPcGVyYXRpb25zLkNSRUFURX1cbiAqXG4gKiBAcGFyYW0ge0FmdGVyT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqXG4gKiBAc2VlIGFmdGVyXG4gKlxuICogQGZ1bmN0aW9uIGFmdGVyQ3JlYXRlXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyQ3JlYXRlPFQ+KFxuICBoYW5kbGVyOiBTdGFuZGFyZE9wZXJhdGlvbkhhbmRsZXI8YW55LCBhbnksIFQ+LFxuICBkYXRhOiBUXG4pIHtcbiAgcmV0dXJuIGFmdGVyKERCT3BlcmF0aW9ucy5DUkVBVEUsIGhhbmRsZXIsIGRhdGEpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBiZWhhdmlvdXIgdG8gc2V0IGFmdGVyIHRoZSBkZWZpbmVkIHtAbGluayBEQk9wZXJhdGlvbnMuUkVBRH1cbiAqXG4gKiBAcGFyYW0ge0FmdGVyT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqIEBwYXJhbSB7YW55W119IFthcmdzXSBBcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBpbiBvcmRlciB0byB0aGUgaGFuZGxlciBtZXRob2RcbiAqXG4gKiBAc2VlIGFmdGVyXG4gKlxuICogQGZ1bmN0aW9uIGFmdGVyUmVhZFxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlclJlYWQ8VD4oXG4gIGhhbmRsZXI6IFN0YW5kYXJkT3BlcmF0aW9uSGFuZGxlcjxhbnksIGFueSwgVD4sXG4gIGRhdGE/OiBUXG4pIHtcbiAgcmV0dXJuIGFmdGVyKERCT3BlcmF0aW9ucy5SRUFELCBoYW5kbGVyLCBkYXRhKTtcbn1cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgYWZ0ZXIgdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5ERUxFVEV9XG4gKlxuICogQHBhcmFtIHtBZnRlck9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gQXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgaW4gb3JkZXIgdG8gdGhlIGhhbmRsZXIgbWV0aG9kXG4gKlxuICogQHNlZSBhZnRlclxuICpcbiAqIEBmdW5jdGlvbiBhZnRlckRlbGV0ZVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlckRlbGV0ZTxUPihcbiAgaGFuZGxlcjogU3RhbmRhcmRPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YT86IFRcbikge1xuICByZXR1cm4gYWZ0ZXIoREJPcGVyYXRpb25zLkRFTEVURSwgaGFuZGxlciwgZGF0YSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgYWZ0ZXIgdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9ucy5ERUxFVEV9XG4gKlxuICogQHBhcmFtIHtBZnRlck9wZXJhdGlvbkhhbmRsZXI8YW55Pn0gaGFuZGxlciBUaGUgbWV0aG9kIGNhbGxlZCB1cG9uIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gQXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgaW4gb3JkZXIgdG8gdGhlIGhhbmRsZXIgbWV0aG9kXG4gKlxuICogQHNlZSBhZnRlclxuICpcbiAqIEBmdW5jdGlvbiBhZnRlckFueVxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlckFueTxUPihcbiAgaGFuZGxlcjogU3RhbmRhcmRPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YT86IFRcbikge1xuICByZXR1cm4gYWZ0ZXIoREJPcGVyYXRpb25zLkFMTCwgaGFuZGxlciwgZGF0YSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGJlaGF2aW91ciB0byBzZXQgb24gdGhlIGRlZmluZWQge0BsaW5rIERCT3BlcmF0aW9uc31cbiAqXG4gKiBAcGFyYW0ge09wZXJhdGlvbktleXNbXSB8IERCT3BlcmF0aW9uc30gb3AgT25lIG9mIHtAbGluayBEQk9wZXJhdGlvbnN9XG4gKiBAcGFyYW0ge0FmdGVyT3BlcmF0aW9uSGFuZGxlcjxhbnk+fSBoYW5kbGVyIFRoZSBtZXRob2QgY2FsbGVkIHVwb24gdGhlIG9wZXJhdGlvblxuICpcbiAqIGV4OiBoYW5kbGVyKC4uLmFyZ3MsIC4uLnByb3BzLm1hcChwID0+IHRhcmdldFtwXSkpXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEBwYXJhbSBhcmdzXG4gKiBAZnVuY3Rpb24gYWZ0ZXJcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXI8VD4oXG4gIG9wOiBPcGVyYXRpb25LZXlzW10gPSBEQk9wZXJhdGlvbnMuQUxMLFxuICBoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YT86IFRcbikge1xuICByZXR1cm4gb3BlcmF0aW9uKE9wZXJhdGlvbktleXMuQUZURVIsIG9wLCBoYW5kbGVyLCBkYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wZXJhdGlvbjxUPihcbiAgYmFzZU9wOiBPcGVyYXRpb25LZXlzLk9OIHwgT3BlcmF0aW9uS2V5cy5BRlRFUixcbiAgb3BlcmF0aW9uOiBPcGVyYXRpb25LZXlzW10gPSBEQk9wZXJhdGlvbnMuQUxMLFxuICBoYW5kbGVyOiBPcGVyYXRpb25IYW5kbGVyPGFueSwgYW55LCBUPixcbiAgZGF0YVRvQWRkPzogVFxuKSB7XG4gIHJldHVybiAodGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IHtcbiAgICBjb25zdCBuYW1lID0gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgY29uc3QgZGVjb3JhdG9ycyA9IG9wZXJhdGlvbi5yZWR1Y2UoKGFjY3VtOiBhbnlbXSwgb3ApID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvdW5kS2V5ID0gYmFzZU9wICsgb3A7XG4gICAgICBsZXQgZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIE9wZXJhdGlvbnMua2V5KGNvbXBvdW5kS2V5KSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBwcm9wZXJ0eUtleVxuICAgICAgKTtcbiAgICAgIGlmICghZGF0YSlcbiAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICBvcGVyYXRpb246IG9wLFxuICAgICAgICAgIGhhbmRsZXJzOiB7fSxcbiAgICAgICAgfTtcblxuICAgICAgY29uc3QgaGFuZGxlcktleSA9IE9wZXJhdGlvbnMuZ2V0SGFuZGxlck5hbWUoaGFuZGxlcik7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIWRhdGEuaGFuZGxlcnNbbmFtZV0gfHxcbiAgICAgICAgIWRhdGEuaGFuZGxlcnNbbmFtZV1bcHJvcGVydHlLZXldIHx8XG4gICAgICAgICEoaGFuZGxlcktleSBpbiBkYXRhLmhhbmRsZXJzW25hbWVdW3Byb3BlcnR5S2V5XSlcbiAgICAgICkge1xuICAgICAgICBkYXRhLmhhbmRsZXJzW25hbWVdID0gZGF0YS5oYW5kbGVyc1tuYW1lXSB8fCB7fTtcbiAgICAgICAgZGF0YS5oYW5kbGVyc1tuYW1lXVtwcm9wZXJ0eUtleV0gPVxuICAgICAgICAgIGRhdGEuaGFuZGxlcnNbbmFtZV1bcHJvcGVydHlLZXldIHx8IHt9O1xuICAgICAgICBkYXRhLmhhbmRsZXJzW25hbWVdW3Byb3BlcnR5S2V5XVtoYW5kbGVyS2V5XSA9IHtcbiAgICAgICAgICBkYXRhOiBkYXRhVG9BZGQsXG4gICAgICAgIH07XG5cbiAgICAgICAgYWNjdW0ucHVzaChcbiAgICAgICAgICBoYW5kbGUoY29tcG91bmRLZXkgYXMgT3BlcmF0aW9uS2V5cywgaGFuZGxlciksXG4gICAgICAgICAgcHJvcE1ldGFkYXRhKE9wZXJhdGlvbnMua2V5KGNvbXBvdW5kS2V5KSwgZGF0YSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIGFwcGx5KC4uLmRlY29yYXRvcnMpKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICB9O1xufVxuIl19