velocious 1.0.485 → 1.0.487

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 (44) hide show
  1. package/README.md +2 -0
  2. package/build/configuration-types.js +19 -1
  3. package/build/configuration.js +25 -2
  4. package/build/database/query/create-index-base.js +1 -1
  5. package/build/database/query/create-table-base.js +2 -2
  6. package/build/database/record/auditing.js +407 -0
  7. package/build/database/record/index.js +101 -0
  8. package/build/environment-handlers/base.js +9 -0
  9. package/build/environment-handlers/node.js +105 -19
  10. package/build/packages/velocious-package.js +115 -0
  11. package/build/src/configuration-types.d.ts +57 -2
  12. package/build/src/configuration-types.d.ts.map +1 -1
  13. package/build/src/configuration-types.js +18 -2
  14. package/build/src/configuration.d.ts +9 -1
  15. package/build/src/configuration.d.ts.map +1 -1
  16. package/build/src/configuration.js +21 -3
  17. package/build/src/database/query/create-index-base.js +2 -2
  18. package/build/src/database/query/create-table-base.js +4 -4
  19. package/build/src/database/record/auditing.d.ts +156 -0
  20. package/build/src/database/record/auditing.d.ts.map +1 -0
  21. package/build/src/database/record/auditing.js +349 -0
  22. package/build/src/database/record/index.d.ts +69 -0
  23. package/build/src/database/record/index.d.ts.map +1 -1
  24. package/build/src/database/record/index.js +89 -1
  25. package/build/src/environment-handlers/base.d.ts +6 -0
  26. package/build/src/environment-handlers/base.d.ts.map +1 -1
  27. package/build/src/environment-handlers/base.js +9 -1
  28. package/build/src/environment-handlers/node.d.ts +18 -0
  29. package/build/src/environment-handlers/node.d.ts.map +1 -1
  30. package/build/src/environment-handlers/node.js +94 -19
  31. package/build/src/packages/velocious-package.d.ts +69 -0
  32. package/build/src/packages/velocious-package.d.ts.map +1 -0
  33. package/build/src/packages/velocious-package.js +101 -0
  34. package/build/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +1 -1
  36. package/src/configuration-types.js +19 -1
  37. package/src/configuration.js +25 -2
  38. package/src/database/query/create-index-base.js +1 -1
  39. package/src/database/query/create-table-base.js +2 -2
  40. package/src/database/record/auditing.js +407 -0
  41. package/src/database/record/index.js +101 -0
  42. package/src/environment-handlers/base.js +9 -0
  43. package/src/environment-handlers/node.js +105 -19
  44. package/src/packages/velocious-package.js +115 -0
@@ -27,7 +27,7 @@ export default class VelociousDatabaseQueryCreateIndexBase extends QueryBase {
27
27
  const databaseType = this.getDriver().getType();
28
28
  let indexName = `index_on_`;
29
29
  let columnCount = 0;
30
- if (databaseType == "sqlite")
30
+ if (databaseType == "sqlite" || databaseType == "pgsql")
31
31
  indexName += `${this.tableName}_`;
32
32
  for (const column of this.columns) {
33
33
  columnCount++;
@@ -95,4 +95,4 @@ export default class VelociousDatabaseQueryCreateIndexBase extends QueryBase {
95
95
  return [sql];
96
96
  }
97
97
  }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWluZGV4LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvY3JlYXRlLWluZGV4LWJhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQTtBQUVqQzs7Ozs7Ozs7O0dBU0c7QUFFSCxNQUFNLENBQUMsT0FBTyxPQUFPLHFDQUFzQyxTQUFRLFNBQVM7SUFDMUU7OztPQUdHO0lBQ0gsWUFBWSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDO1FBQ2pFLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUN0QixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQy9DLElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQTtRQUMzQixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUE7UUFFbkIsSUFBSSxZQUFZLElBQUksUUFBUTtZQUFFLFNBQVMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQTtRQUUvRCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxXQUFXLEVBQUUsQ0FBQTtZQUViLElBQUksV0FBVyxHQUFHLENBQUM7Z0JBQUUsU0FBUyxJQUFJLE9BQU8sQ0FBQTtZQUV6QyxJQUFJLFVBQVUsQ0FBQTtZQUVkLElBQUksT0FBTyxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzlCLFVBQVUsR0FBRyxNQUFNLENBQUE7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDL0IsQ0FBQztZQUVELFNBQVMsSUFBSSxVQUFVLENBQUE7UUFDekIsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsTUFBTTtRQUNWLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNqQyxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsSUFBSSxDQUFBO1FBQ3hCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQTtRQUVaLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxZQUFZLElBQUksT0FBTyxFQUFFLENBQUM7WUFDaEQsR0FBRyxJQUFJOzs7OztxQkFLUSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztvQ0FDVCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sU0FBUyxFQUFFLENBQUM7OztPQUc5RCxDQUFBO1FBQ0gsQ0FBQztRQUVELEdBQUcsSUFBSSxRQUFRLENBQUE7UUFFZixJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQTtRQUVqQyxHQUFHLElBQUksUUFBUSxDQUFBO1FBRWYsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFlBQVksSUFBSSxPQUFPO1lBQUUsR0FBRyxJQUFJLGdCQUFnQixDQUFBO1FBRXhFLEdBQUcsSUFBSSxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQTtRQUM5QyxHQUFHLElBQUksT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUE7UUFFbkQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFBO1FBRW5CLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLFdBQVcsRUFBRSxDQUFBO1lBRWIsSUFBSSxXQUFXLEdBQUcsQ0FBQztnQkFBRSxHQUFHLElBQUksSUFBSSxDQUFBO1lBRWhDLElBQUksVUFBVSxDQUFBO1lBRWQsSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsVUFBVSxHQUFHLE1BQU0sQ0FBQTtZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUMvQixDQUFDO1lBRUQsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFBO1FBQ2pELENBQUM7UUFFRCxHQUFHLElBQUksR0FBRyxDQUFBO1FBRVYsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNoRCxHQUFHLElBQUksTUFBTSxDQUFBO1FBQ2YsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgUXVlcnlCYXNlIGZyb20gXCIuL2Jhc2UuanNcIlxuXG4vKipcbiAqIENyZWF0ZUluZGV4QmFzZUFyZ3NUeXBlIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDcmVhdGVJbmRleEJhc2VBcmdzVHlwZVxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmcgfCBpbXBvcnQoXCIuLy4uL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzXCIpLmRlZmF1bHQ+fSBjb2x1bW5zIC0gQ29sdW1ucyB0byBpbmNsdWRlIGluIHRoZSBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRyaXZlciAtIERhdGFiYXNlIGRyaXZlciB1c2VkIHRvIGdlbmVyYXRlIFNRTC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lmTm90RXhpc3RzXSAtIFNraXAgY3JlYXRpb24gaWYgdGhlIGluZGV4IGFscmVhZHkgZXhpc3RzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEV4cGxpY2l0IGluZGV4IG5hbWUgdG8gdXNlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdW5pcXVlXSAtIFdoZXRoZXIgdGhlIGluZGV4IHNob3VsZCBlbmZvcmNlIHVuaXF1ZW5lc3MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGFibGVOYW1lIC0gTmFtZSBvZiB0aGUgdGFibGUgdG8gYWRkIHRoZSBpbmRleCB0by5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5Q3JlYXRlSW5kZXhCYXNlIGV4dGVuZHMgUXVlcnlCYXNlIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7Q3JlYXRlSW5kZXhCYXNlQXJnc1R5cGV9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb2x1bW5zLCBkcml2ZXIsIGlmTm90RXhpc3RzLCBuYW1lLCB1bmlxdWUsIHRhYmxlTmFtZX0pIHtcbiAgICBzdXBlcih7ZHJpdmVyfSlcbiAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMudGFibGVOYW1lID0gdGFibGVOYW1lXG4gICAgdGhpcy5pZk5vdEV4aXN0cyA9IGlmTm90RXhpc3RzXG4gICAgdGhpcy51bmlxdWUgPSB1bmlxdWVcbiAgfVxuXG4gIGdlbmVyYXRlSW5kZXhOYW1lKCkge1xuICAgIGNvbnN0IGRhdGFiYXNlVHlwZSA9IHRoaXMuZ2V0RHJpdmVyKCkuZ2V0VHlwZSgpXG4gICAgbGV0IGluZGV4TmFtZSA9IGBpbmRleF9vbl9gXG4gICAgbGV0IGNvbHVtbkNvdW50ID0gMFxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInNxbGl0ZVwiKSBpbmRleE5hbWUgKz0gYCR7dGhpcy50YWJsZU5hbWV9X2BcblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgY29sdW1uQ291bnQrK1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPiAxKSBpbmRleE5hbWUgKz0gXCJfYW5kX1wiXG5cbiAgICAgIGxldCBjb2x1bW5OYW1lXG5cbiAgICAgIGlmICh0eXBlb2YgY29sdW1uID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29sdW1uTmFtZSA9IGNvbHVtblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1uTmFtZSA9IGNvbHVtbi5nZXROYW1lKClcbiAgICAgIH1cblxuICAgICAgaW5kZXhOYW1lICs9IGNvbHVtbk5hbWVcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXhOYW1lXG4gIH1cblxuICAvKipcbiAgICogUnVucyB0byBzcWxzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IC0gUmVzb2x2ZXMgd2l0aCBTUUwgc3RhdGVtZW50cy5cbiAgICovXG4gIGFzeW5jIHRvU1FMcygpIHtcbiAgICBjb25zdCBkYXRhYmFzZVR5cGUgPSB0aGlzLmdldERyaXZlcigpLmdldFR5cGUoKVxuICAgIGNvbnN0IGluZGV4TmFtZSA9IHRoaXMubmFtZSB8fCB0aGlzLmdlbmVyYXRlSW5kZXhOYW1lKClcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKClcbiAgICBjb25zdCB7dGFibGVOYW1lfSA9IHRoaXNcbiAgICBsZXQgc3FsID0gXCJcIlxuXG4gICAgaWYgKHRoaXMuaWZOb3RFeGlzdHMgJiYgZGF0YWJhc2VUeXBlID09IFwibXNzcWxcIikge1xuICAgICAgc3FsICs9IGBcbiAgICAgICAgSUYgTk9UIEVYSVNUUyAoXG4gICAgICAgICAgU0VMRUNUIDFcbiAgICAgICAgICBGUk9NIHN5cy5pbmRleGVzXG4gICAgICAgICAgV0hFUkVcbiAgICAgICAgICAgIG5hbWUgPSAke29wdGlvbnMucXVvdGUoaW5kZXhOYW1lKX0gQU5EXG4gICAgICAgICAgICBvYmplY3RfaWQgPSBPQkpFQ1RfSUQoJHtvcHRpb25zLnF1b3RlKGBkYm8uJHt0YWJsZU5hbWV9YCl9KVxuICAgICAgICApXG4gICAgICAgIEJFR0lOXG4gICAgICBgXG4gICAgfVxuXG4gICAgc3FsICs9IFwiQ1JFQVRFXCJcblxuICAgIGlmICh0aGlzLnVuaXF1ZSkgc3FsICs9IFwiIFVOSVFVRVwiXG5cbiAgICBzcWwgKz0gXCIgSU5ERVhcIlxuXG4gICAgaWYgKHRoaXMuaWZOb3RFeGlzdHMgJiYgZGF0YWJhc2VUeXBlICE9IFwibXNzcWxcIikgc3FsICs9IFwiIElGIE5PVCBFWElTVFNcIlxuXG4gICAgc3FsICs9IGAgJHtvcHRpb25zLnF1b3RlSW5kZXhOYW1lKGluZGV4TmFtZSl9YFxuICAgIHNxbCArPSBgIE9OICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfSAoYFxuXG4gICAgbGV0IGNvbHVtbkNvdW50ID0gMFxuXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICBjb2x1bW5Db3VudCsrXG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDEpIHNxbCArPSBcIiwgXCJcblxuICAgICAgbGV0IGNvbHVtbk5hbWVcblxuICAgICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb2x1bW5OYW1lID0gY29sdW1uXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW5OYW1lID0gY29sdW1uLmdldE5hbWUoKVxuICAgICAgfVxuXG4gICAgICBzcWwgKz0gYCR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoY29sdW1uTmFtZSl9YFxuICAgIH1cblxuICAgIHNxbCArPSBcIilcIlxuXG4gICAgaWYgKHRoaXMuaWZOb3RFeGlzdHMgJiYgZGF0YWJhc2VUeXBlID09IFwibXNzcWxcIikge1xuICAgICAgc3FsICs9IFwiIEVORFwiXG4gICAgfVxuXG4gICAgcmV0dXJuIFtzcWxdXG4gIH1cbn1cbiJdfQ==
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWluZGV4LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvY3JlYXRlLWluZGV4LWJhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQTtBQUVqQzs7Ozs7Ozs7O0dBU0c7QUFFSCxNQUFNLENBQUMsT0FBTyxPQUFPLHFDQUFzQyxTQUFRLFNBQVM7SUFDMUU7OztPQUdHO0lBQ0gsWUFBWSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDO1FBQ2pFLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUN0QixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQy9DLElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQTtRQUMzQixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUE7UUFFbkIsSUFBSSxZQUFZLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxPQUFPO1lBQUUsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFBO1FBRTFGLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLFdBQVcsRUFBRSxDQUFBO1lBRWIsSUFBSSxXQUFXLEdBQUcsQ0FBQztnQkFBRSxTQUFTLElBQUksT0FBTyxDQUFBO1lBRXpDLElBQUksVUFBVSxDQUFBO1lBRWQsSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsVUFBVSxHQUFHLE1BQU0sQ0FBQTtZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUMvQixDQUFDO1lBRUQsU0FBUyxJQUFJLFVBQVUsQ0FBQTtRQUN6QixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQy9DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pDLE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxJQUFJLENBQUE7UUFDeEIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFBO1FBRVosSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNoRCxHQUFHLElBQUk7Ozs7O3FCQUtRLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO29DQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxTQUFTLEVBQUUsQ0FBQzs7O09BRzlELENBQUE7UUFDSCxDQUFDO1FBRUQsR0FBRyxJQUFJLFFBQVEsQ0FBQTtRQUVmLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxHQUFHLElBQUksU0FBUyxDQUFBO1FBRWpDLEdBQUcsSUFBSSxRQUFRLENBQUE7UUFFZixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksWUFBWSxJQUFJLE9BQU87WUFBRSxHQUFHLElBQUksZ0JBQWdCLENBQUE7UUFFeEUsR0FBRyxJQUFJLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFBO1FBQzlDLEdBQUcsSUFBSSxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQTtRQUVuRCxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUE7UUFFbkIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsV0FBVyxFQUFFLENBQUE7WUFFYixJQUFJLFdBQVcsR0FBRyxDQUFDO2dCQUFFLEdBQUcsSUFBSSxJQUFJLENBQUE7WUFFaEMsSUFBSSxVQUFVLENBQUE7WUFFZCxJQUFJLE9BQU8sTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM5QixVQUFVLEdBQUcsTUFBTSxDQUFBO1lBQ3JCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBQy9CLENBQUM7WUFFRCxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUE7UUFDakQsQ0FBQztRQUVELEdBQUcsSUFBSSxHQUFHLENBQUE7UUFFVixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksWUFBWSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2hELEdBQUcsSUFBSSxNQUFNLENBQUE7UUFDZixDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBRdWVyeUJhc2UgZnJvbSBcIi4vYmFzZS5qc1wiXG5cbi8qKlxuICogQ3JlYXRlSW5kZXhCYXNlQXJnc1R5cGUgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IENyZWF0ZUluZGV4QmFzZUFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZyB8IGltcG9ydChcIi4vLi4vdGFibGUtZGF0YS90YWJsZS1jb2x1bW4uanNcIikuZGVmYXVsdD59IGNvbHVtbnMgLSBDb2x1bW5zIHRvIGluY2x1ZGUgaW4gdGhlIGluZGV4LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gZHJpdmVyIC0gRGF0YWJhc2UgZHJpdmVyIHVzZWQgdG8gZ2VuZXJhdGUgU1FMLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbaWZOb3RFeGlzdHNdIC0gU2tpcCBjcmVhdGlvbiBpZiB0aGUgaW5kZXggYWxyZWFkeSBleGlzdHMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gRXhwbGljaXQgaW5kZXggbmFtZSB0byB1c2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1bmlxdWVdIC0gV2hldGhlciB0aGUgaW5kZXggc2hvdWxkIGVuZm9yY2UgdW5pcXVlbmVzcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBOYW1lIG9mIHRoZSB0YWJsZSB0byBhZGQgdGhlIGluZGV4IHRvLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnlDcmVhdGVJbmRleEJhc2UgZXh0ZW5kcyBRdWVyeUJhc2Uge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtDcmVhdGVJbmRleEJhc2VBcmdzVHlwZX0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbHVtbnMsIGRyaXZlciwgaWZOb3RFeGlzdHMsIG5hbWUsIHVuaXF1ZSwgdGFibGVOYW1lfSkge1xuICAgIHN1cGVyKHtkcml2ZXJ9KVxuICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnNcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdGhpcy50YWJsZU5hbWUgPSB0YWJsZU5hbWVcbiAgICB0aGlzLmlmTm90RXhpc3RzID0gaWZOb3RFeGlzdHNcbiAgICB0aGlzLnVuaXF1ZSA9IHVuaXF1ZVxuICB9XG5cbiAgZ2VuZXJhdGVJbmRleE5hbWUoKSB7XG4gICAgY29uc3QgZGF0YWJhc2VUeXBlID0gdGhpcy5nZXREcml2ZXIoKS5nZXRUeXBlKClcbiAgICBsZXQgaW5kZXhOYW1lID0gYGluZGV4X29uX2BcbiAgICBsZXQgY29sdW1uQ291bnQgPSAwXG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwic3FsaXRlXCIgfHwgZGF0YWJhc2VUeXBlID09IFwicGdzcWxcIikgaW5kZXhOYW1lICs9IGAke3RoaXMudGFibGVOYW1lfV9gXG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGNvbHVtbkNvdW50KytcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMSkgaW5kZXhOYW1lICs9IFwiX2FuZF9cIlxuXG4gICAgICBsZXQgY29sdW1uTmFtZVxuXG4gICAgICBpZiAodHlwZW9mIGNvbHVtbiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbHVtbk5hbWUgPSBjb2x1bW5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbHVtbk5hbWUgPSBjb2x1bW4uZ2V0TmFtZSgpXG4gICAgICB9XG5cbiAgICAgIGluZGV4TmFtZSArPSBjb2x1bW5OYW1lXG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4TmFtZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdG8gc3Fscy5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAtIFJlc29sdmVzIHdpdGggU1FMIHN0YXRlbWVudHMuXG4gICAqL1xuICBhc3luYyB0b1NRTHMoKSB7XG4gICAgY29uc3QgZGF0YWJhc2VUeXBlID0gdGhpcy5nZXREcml2ZXIoKS5nZXRUeXBlKClcbiAgICBjb25zdCBpbmRleE5hbWUgPSB0aGlzLm5hbWUgfHwgdGhpcy5nZW5lcmF0ZUluZGV4TmFtZSgpXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgY29uc3Qge3RhYmxlTmFtZX0gPSB0aGlzXG4gICAgbGV0IHNxbCA9IFwiXCJcblxuICAgIGlmICh0aGlzLmlmTm90RXhpc3RzICYmIGRhdGFiYXNlVHlwZSA9PSBcIm1zc3FsXCIpIHtcbiAgICAgIHNxbCArPSBgXG4gICAgICAgIElGIE5PVCBFWElTVFMgKFxuICAgICAgICAgIFNFTEVDVCAxXG4gICAgICAgICAgRlJPTSBzeXMuaW5kZXhlc1xuICAgICAgICAgIFdIRVJFXG4gICAgICAgICAgICBuYW1lID0gJHtvcHRpb25zLnF1b3RlKGluZGV4TmFtZSl9IEFORFxuICAgICAgICAgICAgb2JqZWN0X2lkID0gT0JKRUNUX0lEKCR7b3B0aW9ucy5xdW90ZShgZGJvLiR7dGFibGVOYW1lfWApfSlcbiAgICAgICAgKVxuICAgICAgICBCRUdJTlxuICAgICAgYFxuICAgIH1cblxuICAgIHNxbCArPSBcIkNSRUFURVwiXG5cbiAgICBpZiAodGhpcy51bmlxdWUpIHNxbCArPSBcIiBVTklRVUVcIlxuXG4gICAgc3FsICs9IFwiIElOREVYXCJcblxuICAgIGlmICh0aGlzLmlmTm90RXhpc3RzICYmIGRhdGFiYXNlVHlwZSAhPSBcIm1zc3FsXCIpIHNxbCArPSBcIiBJRiBOT1QgRVhJU1RTXCJcblxuICAgIHNxbCArPSBgICR7b3B0aW9ucy5xdW90ZUluZGV4TmFtZShpbmRleE5hbWUpfWBcbiAgICBzcWwgKz0gYCBPTiAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVOYW1lKX0gKGBcblxuICAgIGxldCBjb2x1bW5Db3VudCA9IDBcblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgY29sdW1uQ291bnQrK1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPiAxKSBzcWwgKz0gXCIsIFwiXG5cbiAgICAgIGxldCBjb2x1bW5OYW1lXG5cbiAgICAgIGlmICh0eXBlb2YgY29sdW1uID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29sdW1uTmFtZSA9IGNvbHVtblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1uTmFtZSA9IGNvbHVtbi5nZXROYW1lKClcbiAgICAgIH1cblxuICAgICAgc3FsICs9IGAke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGNvbHVtbk5hbWUpfWBcbiAgICB9XG5cbiAgICBzcWwgKz0gXCIpXCJcblxuICAgIGlmICh0aGlzLmlmTm90RXhpc3RzICYmIGRhdGFiYXNlVHlwZSA9PSBcIm1zc3FsXCIpIHtcbiAgICAgIHNxbCArPSBcIiBFTkRcIlxuICAgIH1cblxuICAgIHJldHVybiBbc3FsXVxuICB9XG59XG4iXX0=
@@ -90,8 +90,8 @@ export default class VelociousDatabaseQueryCreateTableBase extends QueryBase {
90
90
  if (!column.getIndex())
91
91
  continue;
92
92
  let indexName = `index_on_`;
93
- if (databaseType == "sqlite")
94
- sql += `${tableData.getName()}_`;
93
+ if (databaseType == "sqlite" || databaseType == "pgsql")
94
+ indexName += `${tableData.getName()}_`;
95
95
  indexName += column.getName();
96
96
  sql += ",";
97
97
  const { unique, ...restIndexArgs } = column.getIndexArgs();
@@ -141,7 +141,7 @@ export default class VelociousDatabaseQueryCreateTableBase extends QueryBase {
141
141
  const { unique, ...restIndexArgs } = column.getIndexArgs();
142
142
  restArgsError(restIndexArgs);
143
143
  let indexName = `index_on_`;
144
- if (databaseType == "sqlite")
144
+ if (databaseType == "sqlite" || databaseType == "pgsql")
145
145
  indexName += `${tableData.getName()}_`;
146
146
  indexName += column.getName();
147
147
  const createIndexArgs = {
@@ -160,4 +160,4 @@ export default class VelociousDatabaseQueryCreateTableBase extends QueryBase {
160
160
  return sqls;
161
161
  }
162
162
  }
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRhYmxlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvY3JlYXRlLXRhYmxlLWJhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLGFBQWEsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUMxRCxPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM5QyxPQUFPLFdBQVcsTUFBTSwrQkFBK0IsQ0FBQTtBQUV2RCxNQUFNLENBQUMsT0FBTyxPQUFPLHFDQUFzQyxTQUFRLFNBQVM7SUFDMUU7Ozs7Ozs7T0FPRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixHQUFHLElBQUksRUFBRSxTQUFTLEVBQUM7UUFDckUsSUFBSSxDQUFDLENBQUMsU0FBUyxZQUFZLFNBQVMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQTtRQUV0RixLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO1FBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pDLE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxJQUFJLENBQUE7UUFDeEIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ2YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDbEUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFBO1FBRVosSUFBSSxZQUFZLElBQUksT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzNDLEdBQUcsSUFBSSwyREFBMkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsNEJBQTRCLENBQUE7UUFDbEksQ0FBQztRQUVELEdBQUcsSUFBSSxjQUFjLENBQUE7UUFFckIsSUFBSSxZQUFZLElBQUksT0FBTyxJQUFJLFdBQVc7WUFBRSxHQUFHLElBQUksZ0JBQWdCLENBQUE7UUFFbkUsR0FBRyxJQUFJLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFBO1FBRTFELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUVuSCxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUE7UUFFbkIsS0FBSyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUM1QyxXQUFXLEVBQUUsQ0FBQTtZQUViLElBQUksV0FBVyxHQUFHLENBQUM7Z0JBQUUsR0FBRyxJQUFJLElBQUksQ0FBQTtZQUVoQyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBQzNILENBQUM7UUFFRCxLQUFLLE1BQU0sVUFBVSxJQUFJLFNBQVMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQ3BELEdBQUcsSUFBSSxJQUFJLENBQUE7WUFFWCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixHQUFHLElBQUksY0FBYyxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUE7WUFDdEUsQ0FBQztZQUVELEdBQUcsSUFBSSxnQkFBZ0IsT0FBTyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFBO1lBQzdFLEdBQUcsSUFBSSxlQUFlLE9BQU8sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLEdBQUcsQ0FBQTtRQUN4SixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUMzQyxHQUFHLElBQUksR0FBRyxDQUFBO2dCQUVWLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7b0JBQ3RCLEdBQUcsSUFBSSxTQUFTLENBQUE7Z0JBQ2xCLENBQUM7Z0JBRUQsR0FBRyxJQUFJLFFBQVEsQ0FBQTtnQkFFZixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO29CQUNwQixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUE7b0JBRWpDLElBQUksQ0FBQyxTQUFTO3dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQTtvQkFFdEQsR0FBRyxJQUFJLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFBO2dCQUNoRCxDQUFDO2dCQUVELEdBQUcsSUFBSSxJQUFJLENBQUE7Z0JBRVgsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRTtvQkFDakQsSUFBSSxXQUFXLEdBQUcsQ0FBQzt3QkFBRSxHQUFHLElBQUksSUFBSSxDQUFBO29CQUVoQyxJQUFJLE1BQU0sWUFBWSxXQUFXLEVBQUUsQ0FBQzt3QkFDbEMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7b0JBQzdDLENBQUM7eUJBQU0sSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQzt3QkFDckMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7b0JBQ25DLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixPQUFPLE1BQU0sRUFBRSxDQUFDLENBQUE7b0JBQzFELENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7Z0JBRUYsR0FBRyxJQUFJLEdBQUcsQ0FBQTtZQUNaLENBQUM7WUFFRCx5REFBeUQ7WUFDekQsS0FBSyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7b0JBQUUsU0FBUTtnQkFFaEMsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFBO2dCQUUzQixJQUFJLFlBQVksSUFBSSxRQUFRO29CQUFFLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFBO2dCQUU5RCxTQUFTLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO2dCQUU3QixHQUFHLElBQUksR0FBRyxDQUFBO2dCQUVWLE1BQU0sRUFBQyxNQUFNLEVBQUUsR0FBRyxhQUFhLEVBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUE7Z0JBRXhELGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQkFFNUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxHQUFHLElBQUksU0FBUyxDQUFBO2dCQUNsQixDQUFDO2dCQUVELEdBQUcsSUFBSSxVQUFVLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFBO1lBQ3JHLENBQUM7UUFDSCxDQUFDO1FBRUQsR0FBRyxJQUFJLEdBQUcsQ0FBQTtRQUVWLElBQUksWUFBWSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLEdBQUcsSUFBSSxxREFBcUQsQ0FBQTtRQUM5RCxDQUFDO1FBRUQsSUFBSSxZQUFZLElBQUksT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzNDLEdBQUcsSUFBSSxNQUFNLENBQUE7UUFDZixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVkLElBQUksWUFBWSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLEtBQUssTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQzVDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFDdEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFBO2dCQUV6QyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVTtvQkFBRSxTQUFRO2dCQUVuQyxJQUFJLENBQUMsSUFBSSxDQUNQLHFCQUFxQixPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNySSxDQUFBO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxlQUFlLEdBQUc7b0JBQ3RCLE9BQU8sRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFO29CQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDeEIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO29CQUNyQixTQUFTLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRTtvQkFDOUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUU7aUJBQzFCLENBQUE7Z0JBQ0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtnQkFFM0UsS0FBSyxNQUFNLGNBQWMsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtnQkFDM0IsQ0FBQztZQUNILENBQUM7WUFFRCx5REFBeUQ7WUFDekQsS0FBSyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7b0JBQUUsU0FBUTtnQkFFaEMsTUFBTSxFQUFDLE1BQU0sRUFBRSxHQUFHLGFBQWEsRUFBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQTtnQkFFeEQsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFBO2dCQUU1QixJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUE7Z0JBRTNCLElBQUksWUFBWSxJQUFJLFFBQVE7b0JBQUUsU0FBUyxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUE7Z0JBRXBFLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBRTdCLE1BQU0sZUFBZSxHQUFHO29CQUN0QixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUN4QixJQUFJLEVBQUUsU0FBUztvQkFDZixTQUFTLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRTtvQkFDOUIsTUFBTTtpQkFDUCxDQUFBO2dCQUNELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Z0JBRTNFLEtBQUssTUFBTSxjQUFjLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7Z0JBQzNCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBDcmVhdGVJbmRleEJhc2UgZnJvbSBcIi4vY3JlYXRlLWluZGV4LWJhc2UuanNcIlxuaW1wb3J0IFF1ZXJ5QmFzZSBmcm9tIFwiLi9iYXNlLmpzXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiXG5pbXBvcnQgVGFibGVDb2x1bW4gZnJvbSBcIi4uL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeUNyZWF0ZVRhYmxlQmFzZSBleHRlbmRzIFF1ZXJ5QmFzZSB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBhcmdzLmRyaXZlciAtIERhdGFiYXNlIGRyaXZlciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5pZk5vdEV4aXN0c10gLSBXaGV0aGVyIGlmIG5vdCBleGlzdHMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaW5kZXhJbkNyZWF0ZVRhYmxlXSAtIFdoZXRoZXIgaW5kZXggaW4gY3JlYXRlIHRhYmxlLlxuICAgKiBAcGFyYW0ge1RhYmxlRGF0YX0gYXJncy50YWJsZURhdGEgLSBUYWJsZSBkYXRhLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RyaXZlciwgaWZOb3RFeGlzdHMsIGluZGV4SW5DcmVhdGVUYWJsZSA9IHRydWUsIHRhYmxlRGF0YX0pIHtcbiAgICBpZiAoISh0YWJsZURhdGEgaW5zdGFuY2VvZiBUYWJsZURhdGEpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIGRhdGEgd2FzIGdpdmVuXCIpXG5cbiAgICBzdXBlcih7ZHJpdmVyfSlcbiAgICB0aGlzLmlmTm90RXhpc3RzID0gaWZOb3RFeGlzdHNcbiAgICB0aGlzLmluZGV4SW5DcmVhdGVUYWJsZSA9IGluZGV4SW5DcmVhdGVUYWJsZVxuICAgIHRoaXMudGFibGVEYXRhID0gdGFibGVEYXRhXG4gIH1cblxuICAvKipcbiAgICogUnVucyB0byBzcWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gLSBSZXNvbHZlcyB3aXRoIFNRTCBzdGF0ZW1lbnRzLlxuICAgKi9cbiAgYXN5bmMgdG9TcWwoKSB7XG4gICAgY29uc3QgZGF0YWJhc2VUeXBlID0gdGhpcy5nZXREYXRhYmFzZVR5cGUoKVxuICAgIGNvbnN0IGRyaXZlciA9IHRoaXMuZ2V0RHJpdmVyKClcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKClcbiAgICBjb25zdCB7dGFibGVEYXRhfSA9IHRoaXNcbiAgICBjb25zdCBzcWxzID0gW11cbiAgICBjb25zdCBpZk5vdEV4aXN0cyA9IHRoaXMuaWZOb3RFeGlzdHMgfHwgdGFibGVEYXRhLmdldElmTm90RXhpc3RzKClcbiAgICBsZXQgc3FsID0gXCJcIlxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcIm1zc3FsXCIgJiYgaWZOb3RFeGlzdHMpIHtcbiAgICAgIHNxbCArPSBgSUYgTk9UIEVYSVNUUyhTRUxFQ1QgKiBGUk9NIFtzeXNvYmplY3RzXSBXSEVSRSBbbmFtZV0gPSAke29wdGlvbnMucXVvdGUodGFibGVEYXRhLmdldE5hbWUoKSl9IEFORCBbeHR5cGVdID0gJ1UnKSBCRUdJTiBgXG4gICAgfVxuXG4gICAgc3FsICs9IFwiQ1JFQVRFIFRBQkxFXCJcblxuICAgIGlmIChkYXRhYmFzZVR5cGUgIT0gXCJtc3NxbFwiICYmIGlmTm90RXhpc3RzKSBzcWwgKz0gXCIgSUYgTk9UIEVYSVNUU1wiXG5cbiAgICBzcWwgKz0gYCAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVEYXRhLmdldE5hbWUoKSl9IChgXG5cbiAgICBjb25zdCB0YWJsZUxldmVsRktDb2x1bW5OYW1lcyA9IG5ldyBTZXQodGFibGVEYXRhLmdldEZvcmVpZ25LZXlzKCkubWFwKChmb3JlaWduS2V5KSA9PiBmb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSkpXG5cbiAgICBsZXQgY29sdW1uQ291bnQgPSAwXG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICBjb2x1bW5Db3VudCsrXG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDEpIHNxbCArPSBcIiwgXCJcblxuICAgICAgc3FsICs9IGNvbHVtbi5nZXRTUUwoe2RyaXZlciwgZm9yQWx0ZXJUYWJsZTogZmFsc2UsIHNraXBGb3JlaWduS2V5OiB0YWJsZUxldmVsRktDb2x1bW5OYW1lcy5oYXMoY29sdW1uLmdldEFjdHVhbE5hbWUoKSl9KVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZm9yZWlnbktleSBvZiB0YWJsZURhdGEuZ2V0Rm9yZWlnbktleXMoKSkge1xuICAgICAgc3FsICs9IFwiLCBcIlxuXG4gICAgICBpZiAoZm9yZWlnbktleS5nZXROYW1lKCkpIHtcbiAgICAgICAgc3FsICs9IGBDT05TVFJBSU5UICR7b3B0aW9ucy5xdW90ZUluZGV4TmFtZShmb3JlaWduS2V5LmdldE5hbWUoKSl9IGBcbiAgICAgIH1cblxuICAgICAgc3FsICs9IGBGT1JFSUdOIEtFWSAoJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShmb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSl9KWBcbiAgICAgIHNxbCArPSBgIFJFRkVSRU5DRVMgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKGZvcmVpZ25LZXkuZ2V0UmVmZXJlbmNlZFRhYmxlTmFtZSgpKX0gKCR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoZm9yZWlnbktleS5nZXRSZWZlcmVuY2VkQ29sdW1uTmFtZSgpKX0pYFxuICAgIH1cblxuICAgIGlmICh0aGlzLmluZGV4SW5DcmVhdGVUYWJsZSkge1xuICAgICAgZm9yIChjb25zdCBpbmRleCBvZiB0YWJsZURhdGEuZ2V0SW5kZXhlcygpKSB7XG4gICAgICAgIHNxbCArPSBcIixcIlxuXG4gICAgICAgIGlmIChpbmRleC5nZXRVbmlxdWUoKSkge1xuICAgICAgICAgIHNxbCArPSBcIiBVTklRVUVcIlxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IFwiIElOREVYXCJcblxuICAgICAgICBpZiAoaW5kZXguZ2V0TmFtZSgpKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXhOYW1lID0gaW5kZXguZ2V0TmFtZSgpXG5cbiAgICAgICAgICBpZiAoIWluZGV4TmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgaW5kZXggbmFtZVwiKVxuXG4gICAgICAgICAgc3FsICs9IGAgJHtvcHRpb25zLnF1b3RlSW5kZXhOYW1lKGluZGV4TmFtZSl9YFxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IFwiIChcIlxuXG4gICAgICAgIGluZGV4LmdldENvbHVtbnMoKS5mb3JFYWNoKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbkluZGV4ID4gMCkgc3FsICs9IFwiLCBcIlxuXG4gICAgICAgICAgaWYgKGNvbHVtbiBpbnN0YW5jZW9mIFRhYmxlQ29sdW1uKSB7XG4gICAgICAgICAgICBzcWwgKz0gZHJpdmVyLnF1b3RlQ29sdW1uKGNvbHVtbi5nZXROYW1lKCkpXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29sdW1uID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHNxbCArPSBkcml2ZXIucXVvdGVDb2x1bW4oY29sdW1uKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29sdW1uIHR5cGU6ICR7dHlwZW9mIGNvbHVtbn1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBzcWwgKz0gXCIpXCJcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGluZGV4ZXMgZm9yIGFsbCBjb2x1bW5zIHdpdGggdGhlIGluZGV4IGFyZ3VtZW50XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICAgIGlmICghY29sdW1uLmdldEluZGV4KCkpIGNvbnRpbnVlXG5cbiAgICAgICAgbGV0IGluZGV4TmFtZSA9IGBpbmRleF9vbl9gXG5cbiAgICAgICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInNxbGl0ZVwiKSBzcWwgKz0gYCR7dGFibGVEYXRhLmdldE5hbWUoKX1fYFxuXG4gICAgICAgIGluZGV4TmFtZSArPSBjb2x1bW4uZ2V0TmFtZSgpXG5cbiAgICAgICAgc3FsICs9IFwiLFwiXG5cbiAgICAgICAgY29uc3Qge3VuaXF1ZSwgLi4ucmVzdEluZGV4QXJnc30gPSBjb2x1bW4uZ2V0SW5kZXhBcmdzKClcblxuICAgICAgICByZXN0QXJnc0Vycm9yKHJlc3RJbmRleEFyZ3MpXG5cbiAgICAgICAgaWYgKHVuaXF1ZSkge1xuICAgICAgICAgIHNxbCArPSBcIiBVTklRVUVcIlxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IGAgSU5ERVggJHtvcHRpb25zLnF1b3RlSW5kZXhOYW1lKGluZGV4TmFtZSl9ICgke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGNvbHVtbi5nZXROYW1lKCkpfSlgXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3FsICs9IFwiKVwiXG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwibXlzcWxcIikge1xuICAgICAgc3FsICs9IFwiIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0IENPTExBVEU9dXRmOG1iNF91bmljb2RlX2NpXCJcbiAgICB9XG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwibXNzcWxcIiAmJiBpZk5vdEV4aXN0cykge1xuICAgICAgc3FsICs9IFwiIEVORFwiXG4gICAgfVxuXG4gICAgc3Fscy5wdXNoKHNxbClcblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICAgIGNvbnN0IG5vdGVzID0gY29sdW1uLmdldE5vdGVzRm9yRGF0YWJhc2UoZGF0YWJhc2VUeXBlKVxuICAgICAgICBjb25zdCBhY3R1YWxOYW1lID0gY29sdW1uLmdldEFjdHVhbE5hbWUoKVxuXG4gICAgICAgIGlmICghbm90ZXMgfHwgIWFjdHVhbE5hbWUpIGNvbnRpbnVlXG5cbiAgICAgICAgc3Fscy5wdXNoKFxuICAgICAgICAgIGBDT01NRU5UIE9OIENPTFVNTiAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVEYXRhLmdldE5hbWUoKSl9LiR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoYWN0dWFsTmFtZSl9IElTICR7b3B0aW9ucy5xdW90ZShub3Rlcyl9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmluZGV4SW5DcmVhdGVUYWJsZSkge1xuICAgICAgZm9yIChjb25zdCBpbmRleCBvZiB0YWJsZURhdGEuZ2V0SW5kZXhlcygpKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUluZGV4QXJncyA9IHtcbiAgICAgICAgICBjb2x1bW5zOiBpbmRleC5nZXRDb2x1bW5zKCksXG4gICAgICAgICAgZHJpdmVyOiB0aGlzLmdldERyaXZlcigpLFxuICAgICAgICAgIGlmTm90RXhpc3RzOiB0cnVlLFxuICAgICAgICAgIG5hbWU6IGluZGV4LmdldE5hbWUoKSxcbiAgICAgICAgICB0YWJsZU5hbWU6IHRhYmxlRGF0YS5nZXROYW1lKCksXG4gICAgICAgICAgdW5pcXVlOiBpbmRleC5nZXRVbmlxdWUoKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNyZWF0ZUluZGV4U1FMcyA9IGF3YWl0IG5ldyBDcmVhdGVJbmRleEJhc2UoY3JlYXRlSW5kZXhBcmdzKS50b1NRTHMoKVxuXG4gICAgICAgIGZvciAoY29uc3QgY3JlYXRlSW5kZXhTUUwgb2YgY3JlYXRlSW5kZXhTUUxzKSB7XG4gICAgICAgICAgc3Fscy5wdXNoKGNyZWF0ZUluZGV4U1FMKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBpbmRleGVzIGZvciBhbGwgY29sdW1ucyB3aXRoIHRoZSBpbmRleCBhcmd1bWVudFxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVEYXRhLmdldENvbHVtbnMoKSkge1xuICAgICAgICBpZiAoIWNvbHVtbi5nZXRJbmRleCgpKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IHt1bmlxdWUsIC4uLnJlc3RJbmRleEFyZ3N9ID0gY29sdW1uLmdldEluZGV4QXJncygpXG5cbiAgICAgICAgcmVzdEFyZ3NFcnJvcihyZXN0SW5kZXhBcmdzKVxuXG4gICAgICAgIGxldCBpbmRleE5hbWUgPSBgaW5kZXhfb25fYFxuXG4gICAgICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJzcWxpdGVcIikgaW5kZXhOYW1lICs9IGAke3RhYmxlRGF0YS5nZXROYW1lKCl9X2BcblxuICAgICAgICBpbmRleE5hbWUgKz0gY29sdW1uLmdldE5hbWUoKVxuXG4gICAgICAgIGNvbnN0IGNyZWF0ZUluZGV4QXJncyA9IHtcbiAgICAgICAgICBjb2x1bW5zOiBbY29sdW1uLmdldE5hbWUoKV0sXG4gICAgICAgICAgZHJpdmVyOiB0aGlzLmdldERyaXZlcigpLFxuICAgICAgICAgIG5hbWU6IGluZGV4TmFtZSxcbiAgICAgICAgICB0YWJsZU5hbWU6IHRhYmxlRGF0YS5nZXROYW1lKCksXG4gICAgICAgICAgdW5pcXVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlYXRlSW5kZXhTUUxzID0gYXdhaXQgbmV3IENyZWF0ZUluZGV4QmFzZShjcmVhdGVJbmRleEFyZ3MpLnRvU1FMcygpXG5cbiAgICAgICAgZm9yIChjb25zdCBjcmVhdGVJbmRleFNRTCBvZiBjcmVhdGVJbmRleFNRTHMpIHtcbiAgICAgICAgICBzcWxzLnB1c2goY3JlYXRlSW5kZXhTUUwpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Fsc1xuICB9XG59XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRhYmxlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvY3JlYXRlLXRhYmxlLWJhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLGFBQWEsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUMxRCxPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM5QyxPQUFPLFdBQVcsTUFBTSwrQkFBK0IsQ0FBQTtBQUV2RCxNQUFNLENBQUMsT0FBTyxPQUFPLHFDQUFzQyxTQUFRLFNBQVM7SUFDMUU7Ozs7Ozs7T0FPRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixHQUFHLElBQUksRUFBRSxTQUFTLEVBQUM7UUFDckUsSUFBSSxDQUFDLENBQUMsU0FBUyxZQUFZLFNBQVMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQTtRQUV0RixLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO1FBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pDLE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxJQUFJLENBQUE7UUFDeEIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ2YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDbEUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFBO1FBRVosSUFBSSxZQUFZLElBQUksT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzNDLEdBQUcsSUFBSSwyREFBMkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsNEJBQTRCLENBQUE7UUFDbEksQ0FBQztRQUVELEdBQUcsSUFBSSxjQUFjLENBQUE7UUFFckIsSUFBSSxZQUFZLElBQUksT0FBTyxJQUFJLFdBQVc7WUFBRSxHQUFHLElBQUksZ0JBQWdCLENBQUE7UUFFbkUsR0FBRyxJQUFJLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFBO1FBRTFELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUVuSCxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUE7UUFFbkIsS0FBSyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUM1QyxXQUFXLEVBQUUsQ0FBQTtZQUViLElBQUksV0FBVyxHQUFHLENBQUM7Z0JBQUUsR0FBRyxJQUFJLElBQUksQ0FBQTtZQUVoQyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBQzNILENBQUM7UUFFRCxLQUFLLE1BQU0sVUFBVSxJQUFJLFNBQVMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQ3BELEdBQUcsSUFBSSxJQUFJLENBQUE7WUFFWCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixHQUFHLElBQUksY0FBYyxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUE7WUFDdEUsQ0FBQztZQUVELEdBQUcsSUFBSSxnQkFBZ0IsT0FBTyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFBO1lBQzdFLEdBQUcsSUFBSSxlQUFlLE9BQU8sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLEdBQUcsQ0FBQTtRQUN4SixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUMzQyxHQUFHLElBQUksR0FBRyxDQUFBO2dCQUVWLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7b0JBQ3RCLEdBQUcsSUFBSSxTQUFTLENBQUE7Z0JBQ2xCLENBQUM7Z0JBRUQsR0FBRyxJQUFJLFFBQVEsQ0FBQTtnQkFFZixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO29CQUNwQixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUE7b0JBRWpDLElBQUksQ0FBQyxTQUFTO3dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQTtvQkFFdEQsR0FBRyxJQUFJLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFBO2dCQUNoRCxDQUFDO2dCQUVELEdBQUcsSUFBSSxJQUFJLENBQUE7Z0JBRVgsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRTtvQkFDakQsSUFBSSxXQUFXLEdBQUcsQ0FBQzt3QkFBRSxHQUFHLElBQUksSUFBSSxDQUFBO29CQUVoQyxJQUFJLE1BQU0sWUFBWSxXQUFXLEVBQUUsQ0FBQzt3QkFDbEMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7b0JBQzdDLENBQUM7eUJBQU0sSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQzt3QkFDckMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7b0JBQ25DLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixPQUFPLE1BQU0sRUFBRSxDQUFDLENBQUE7b0JBQzFELENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7Z0JBRUYsR0FBRyxJQUFJLEdBQUcsQ0FBQTtZQUNaLENBQUM7WUFFRCx5REFBeUQ7WUFDekQsS0FBSyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7b0JBQUUsU0FBUTtnQkFFaEMsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFBO2dCQUUzQixJQUFJLFlBQVksSUFBSSxRQUFRLElBQUksWUFBWSxJQUFJLE9BQU87b0JBQUUsU0FBUyxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUE7Z0JBRS9GLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBRTdCLEdBQUcsSUFBSSxHQUFHLENBQUE7Z0JBRVYsTUFBTSxFQUFDLE1BQU0sRUFBRSxHQUFHLGFBQWEsRUFBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQTtnQkFFeEQsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFBO2dCQUU1QixJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNYLEdBQUcsSUFBSSxTQUFTLENBQUE7Z0JBQ2xCLENBQUM7Z0JBRUQsR0FBRyxJQUFJLFVBQVUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUE7WUFDckcsQ0FBQztRQUNILENBQUM7UUFFRCxHQUFHLElBQUksR0FBRyxDQUFBO1FBRVYsSUFBSSxZQUFZLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsR0FBRyxJQUFJLHFEQUFxRCxDQUFBO1FBQzlELENBQUM7UUFFRCxJQUFJLFlBQVksSUFBSSxPQUFPLElBQUksV0FBVyxFQUFFLENBQUM7WUFDM0MsR0FBRyxJQUFJLE1BQU0sQ0FBQTtRQUNmLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRWQsSUFBSSxZQUFZLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFBO2dCQUN0RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUE7Z0JBRXpDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVO29CQUFFLFNBQVE7Z0JBRW5DLElBQUksQ0FBQyxJQUFJLENBQ1AscUJBQXFCLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ3JJLENBQUE7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3QixLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUMzQyxNQUFNLGVBQWUsR0FBRztvQkFDdEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUU7b0JBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUN4QixXQUFXLEVBQUUsSUFBSTtvQkFDakIsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUU7b0JBQ3JCLFNBQVMsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFO29CQUM5QixNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRTtpQkFDMUIsQ0FBQTtnQkFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO2dCQUUzRSxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztZQUVELHlEQUF5RDtZQUN6RCxLQUFLLE1BQU0sTUFBTSxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtvQkFBRSxTQUFRO2dCQUVoQyxNQUFNLEVBQUMsTUFBTSxFQUFFLEdBQUcsYUFBYSxFQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFBO2dCQUV4RCxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUE7Z0JBRTVCLElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQTtnQkFFM0IsSUFBSSxZQUFZLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxPQUFPO29CQUFFLFNBQVMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFBO2dCQUUvRixTQUFTLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO2dCQUU3QixNQUFNLGVBQWUsR0FBRztvQkFDdEIsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDeEIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsU0FBUyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLE1BQU07aUJBQ1AsQ0FBQTtnQkFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO2dCQUUzRSxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQ3JlYXRlSW5kZXhCYXNlIGZyb20gXCIuL2NyZWF0ZS1pbmRleC1iYXNlLmpzXCJcbmltcG9ydCBRdWVyeUJhc2UgZnJvbSBcIi4vYmFzZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBUYWJsZURhdGEgZnJvbSBcIi4uL3RhYmxlLWRhdGEvaW5kZXguanNcIlxuaW1wb3J0IFRhYmxlQ29sdW1uIGZyb20gXCIuLi90YWJsZS1kYXRhL3RhYmxlLWNvbHVtbi5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnlDcmVhdGVUYWJsZUJhc2UgZXh0ZW5kcyBRdWVyeUJhc2Uge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5kcml2ZXIgLSBEYXRhYmFzZSBkcml2ZXIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaWZOb3RFeGlzdHNdIC0gV2hldGhlciBpZiBub3QgZXhpc3RzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluZGV4SW5DcmVhdGVUYWJsZV0gLSBXaGV0aGVyIGluZGV4IGluIGNyZWF0ZSB0YWJsZS5cbiAgICogQHBhcmFtIHtUYWJsZURhdGF9IGFyZ3MudGFibGVEYXRhIC0gVGFibGUgZGF0YS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtkcml2ZXIsIGlmTm90RXhpc3RzLCBpbmRleEluQ3JlYXRlVGFibGUgPSB0cnVlLCB0YWJsZURhdGF9KSB7XG4gICAgaWYgKCEodGFibGVEYXRhIGluc3RhbmNlb2YgVGFibGVEYXRhKSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YWJsZSBkYXRhIHdhcyBnaXZlblwiKVxuXG4gICAgc3VwZXIoe2RyaXZlcn0pXG4gICAgdGhpcy5pZk5vdEV4aXN0cyA9IGlmTm90RXhpc3RzXG4gICAgdGhpcy5pbmRleEluQ3JlYXRlVGFibGUgPSBpbmRleEluQ3JlYXRlVGFibGVcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdG8gc3FsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IC0gUmVzb2x2ZXMgd2l0aCBTUUwgc3RhdGVtZW50cy5cbiAgICovXG4gIGFzeW5jIHRvU3FsKCkge1xuICAgIGNvbnN0IGRhdGFiYXNlVHlwZSA9IHRoaXMuZ2V0RGF0YWJhc2VUeXBlKClcbiAgICBjb25zdCBkcml2ZXIgPSB0aGlzLmdldERyaXZlcigpXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgY29uc3Qge3RhYmxlRGF0YX0gPSB0aGlzXG4gICAgY29uc3Qgc3FscyA9IFtdXG4gICAgY29uc3QgaWZOb3RFeGlzdHMgPSB0aGlzLmlmTm90RXhpc3RzIHx8IHRhYmxlRGF0YS5nZXRJZk5vdEV4aXN0cygpXG4gICAgbGV0IHNxbCA9IFwiXCJcblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJtc3NxbFwiICYmIGlmTm90RXhpc3RzKSB7XG4gICAgICBzcWwgKz0gYElGIE5PVCBFWElTVFMoU0VMRUNUICogRlJPTSBbc3lzb2JqZWN0c10gV0hFUkUgW25hbWVdID0gJHtvcHRpb25zLnF1b3RlKHRhYmxlRGF0YS5nZXROYW1lKCkpfSBBTkQgW3h0eXBlXSA9ICdVJykgQkVHSU4gYFxuICAgIH1cblxuICAgIHNxbCArPSBcIkNSRUFURSBUQUJMRVwiXG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlICE9IFwibXNzcWxcIiAmJiBpZk5vdEV4aXN0cykgc3FsICs9IFwiIElGIE5PVCBFWElTVFNcIlxuXG4gICAgc3FsICs9IGAgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKHRhYmxlRGF0YS5nZXROYW1lKCkpfSAoYFxuXG4gICAgY29uc3QgdGFibGVMZXZlbEZLQ29sdW1uTmFtZXMgPSBuZXcgU2V0KHRhYmxlRGF0YS5nZXRGb3JlaWduS2V5cygpLm1hcCgoZm9yZWlnbktleSkgPT4gZm9yZWlnbktleS5nZXRDb2x1bW5OYW1lKCkpKVxuXG4gICAgbGV0IGNvbHVtbkNvdW50ID0gMFxuXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVEYXRhLmdldENvbHVtbnMoKSkge1xuICAgICAgY29sdW1uQ291bnQrK1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPiAxKSBzcWwgKz0gXCIsIFwiXG5cbiAgICAgIHNxbCArPSBjb2x1bW4uZ2V0U1FMKHtkcml2ZXIsIGZvckFsdGVyVGFibGU6IGZhbHNlLCBza2lwRm9yZWlnbktleTogdGFibGVMZXZlbEZLQ29sdW1uTmFtZXMuaGFzKGNvbHVtbi5nZXRBY3R1YWxOYW1lKCkpfSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZvcmVpZ25LZXkgb2YgdGFibGVEYXRhLmdldEZvcmVpZ25LZXlzKCkpIHtcbiAgICAgIHNxbCArPSBcIiwgXCJcblxuICAgICAgaWYgKGZvcmVpZ25LZXkuZ2V0TmFtZSgpKSB7XG4gICAgICAgIHNxbCArPSBgQ09OU1RSQUlOVCAke29wdGlvbnMucXVvdGVJbmRleE5hbWUoZm9yZWlnbktleS5nZXROYW1lKCkpfSBgXG4gICAgICB9XG5cbiAgICAgIHNxbCArPSBgRk9SRUlHTiBLRVkgKCR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoZm9yZWlnbktleS5nZXRDb2x1bW5OYW1lKCkpfSlgXG4gICAgICBzcWwgKz0gYCBSRUZFUkVOQ0VTICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZShmb3JlaWduS2V5LmdldFJlZmVyZW5jZWRUYWJsZU5hbWUoKSl9ICgke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGZvcmVpZ25LZXkuZ2V0UmVmZXJlbmNlZENvbHVtbk5hbWUoKSl9KWBcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbmRleEluQ3JlYXRlVGFibGUpIHtcbiAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgdGFibGVEYXRhLmdldEluZGV4ZXMoKSkge1xuICAgICAgICBzcWwgKz0gXCIsXCJcblxuICAgICAgICBpZiAoaW5kZXguZ2V0VW5pcXVlKCkpIHtcbiAgICAgICAgICBzcWwgKz0gXCIgVU5JUVVFXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHNxbCArPSBcIiBJTkRFWFwiXG5cbiAgICAgICAgaWYgKGluZGV4LmdldE5hbWUoKSkge1xuICAgICAgICAgIGNvbnN0IGluZGV4TmFtZSA9IGluZGV4LmdldE5hbWUoKVxuXG4gICAgICAgICAgaWYgKCFpbmRleE5hbWUpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGluZGV4IG5hbWVcIilcblxuICAgICAgICAgIHNxbCArPSBgICR7b3B0aW9ucy5xdW90ZUluZGV4TmFtZShpbmRleE5hbWUpfWBcbiAgICAgICAgfVxuXG4gICAgICAgIHNxbCArPSBcIiAoXCJcblxuICAgICAgICBpbmRleC5nZXRDb2x1bW5zKCkuZm9yRWFjaCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW5JbmRleCA+IDApIHNxbCArPSBcIiwgXCJcblxuICAgICAgICAgIGlmIChjb2x1bW4gaW5zdGFuY2VvZiBUYWJsZUNvbHVtbikge1xuICAgICAgICAgICAgc3FsICs9IGRyaXZlci5xdW90ZUNvbHVtbihjb2x1bW4uZ2V0TmFtZSgpKVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbHVtbiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzcWwgKz0gZHJpdmVyLnF1b3RlQ29sdW1uKGNvbHVtbilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbHVtbiB0eXBlOiAke3R5cGVvZiBjb2x1bW59YClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgc3FsICs9IFwiKVwiXG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBpbmRleGVzIGZvciBhbGwgY29sdW1ucyB3aXRoIHRoZSBpbmRleCBhcmd1bWVudFxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVEYXRhLmdldENvbHVtbnMoKSkge1xuICAgICAgICBpZiAoIWNvbHVtbi5nZXRJbmRleCgpKSBjb250aW51ZVxuXG4gICAgICAgIGxldCBpbmRleE5hbWUgPSBgaW5kZXhfb25fYFxuXG4gICAgICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJzcWxpdGVcIiB8fCBkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiKSBpbmRleE5hbWUgKz0gYCR7dGFibGVEYXRhLmdldE5hbWUoKX1fYFxuXG4gICAgICAgIGluZGV4TmFtZSArPSBjb2x1bW4uZ2V0TmFtZSgpXG5cbiAgICAgICAgc3FsICs9IFwiLFwiXG5cbiAgICAgICAgY29uc3Qge3VuaXF1ZSwgLi4ucmVzdEluZGV4QXJnc30gPSBjb2x1bW4uZ2V0SW5kZXhBcmdzKClcblxuICAgICAgICByZXN0QXJnc0Vycm9yKHJlc3RJbmRleEFyZ3MpXG5cbiAgICAgICAgaWYgKHVuaXF1ZSkge1xuICAgICAgICAgIHNxbCArPSBcIiBVTklRVUVcIlxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IGAgSU5ERVggJHtvcHRpb25zLnF1b3RlSW5kZXhOYW1lKGluZGV4TmFtZSl9ICgke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGNvbHVtbi5nZXROYW1lKCkpfSlgXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3FsICs9IFwiKVwiXG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwibXlzcWxcIikge1xuICAgICAgc3FsICs9IFwiIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0IENPTExBVEU9dXRmOG1iNF91bmljb2RlX2NpXCJcbiAgICB9XG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwibXNzcWxcIiAmJiBpZk5vdEV4aXN0cykge1xuICAgICAgc3FsICs9IFwiIEVORFwiXG4gICAgfVxuXG4gICAgc3Fscy5wdXNoKHNxbClcblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICAgIGNvbnN0IG5vdGVzID0gY29sdW1uLmdldE5vdGVzRm9yRGF0YWJhc2UoZGF0YWJhc2VUeXBlKVxuICAgICAgICBjb25zdCBhY3R1YWxOYW1lID0gY29sdW1uLmdldEFjdHVhbE5hbWUoKVxuXG4gICAgICAgIGlmICghbm90ZXMgfHwgIWFjdHVhbE5hbWUpIGNvbnRpbnVlXG5cbiAgICAgICAgc3Fscy5wdXNoKFxuICAgICAgICAgIGBDT01NRU5UIE9OIENPTFVNTiAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVEYXRhLmdldE5hbWUoKSl9LiR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoYWN0dWFsTmFtZSl9IElTICR7b3B0aW9ucy5xdW90ZShub3Rlcyl9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmluZGV4SW5DcmVhdGVUYWJsZSkge1xuICAgICAgZm9yIChjb25zdCBpbmRleCBvZiB0YWJsZURhdGEuZ2V0SW5kZXhlcygpKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUluZGV4QXJncyA9IHtcbiAgICAgICAgICBjb2x1bW5zOiBpbmRleC5nZXRDb2x1bW5zKCksXG4gICAgICAgICAgZHJpdmVyOiB0aGlzLmdldERyaXZlcigpLFxuICAgICAgICAgIGlmTm90RXhpc3RzOiB0cnVlLFxuICAgICAgICAgIG5hbWU6IGluZGV4LmdldE5hbWUoKSxcbiAgICAgICAgICB0YWJsZU5hbWU6IHRhYmxlRGF0YS5nZXROYW1lKCksXG4gICAgICAgICAgdW5pcXVlOiBpbmRleC5nZXRVbmlxdWUoKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNyZWF0ZUluZGV4U1FMcyA9IGF3YWl0IG5ldyBDcmVhdGVJbmRleEJhc2UoY3JlYXRlSW5kZXhBcmdzKS50b1NRTHMoKVxuXG4gICAgICAgIGZvciAoY29uc3QgY3JlYXRlSW5kZXhTUUwgb2YgY3JlYXRlSW5kZXhTUUxzKSB7XG4gICAgICAgICAgc3Fscy5wdXNoKGNyZWF0ZUluZGV4U1FMKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBpbmRleGVzIGZvciBhbGwgY29sdW1ucyB3aXRoIHRoZSBpbmRleCBhcmd1bWVudFxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVEYXRhLmdldENvbHVtbnMoKSkge1xuICAgICAgICBpZiAoIWNvbHVtbi5nZXRJbmRleCgpKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IHt1bmlxdWUsIC4uLnJlc3RJbmRleEFyZ3N9ID0gY29sdW1uLmdldEluZGV4QXJncygpXG5cbiAgICAgICAgcmVzdEFyZ3NFcnJvcihyZXN0SW5kZXhBcmdzKVxuXG4gICAgICAgIGxldCBpbmRleE5hbWUgPSBgaW5kZXhfb25fYFxuXG4gICAgICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJzcWxpdGVcIiB8fCBkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiKSBpbmRleE5hbWUgKz0gYCR7dGFibGVEYXRhLmdldE5hbWUoKX1fYFxuXG4gICAgICAgIGluZGV4TmFtZSArPSBjb2x1bW4uZ2V0TmFtZSgpXG5cbiAgICAgICAgY29uc3QgY3JlYXRlSW5kZXhBcmdzID0ge1xuICAgICAgICAgIGNvbHVtbnM6IFtjb2x1bW4uZ2V0TmFtZSgpXSxcbiAgICAgICAgICBkcml2ZXI6IHRoaXMuZ2V0RHJpdmVyKCksXG4gICAgICAgICAgbmFtZTogaW5kZXhOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZTogdGFibGVEYXRhLmdldE5hbWUoKSxcbiAgICAgICAgICB1bmlxdWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVhdGVJbmRleFNRTHMgPSBhd2FpdCBuZXcgQ3JlYXRlSW5kZXhCYXNlKGNyZWF0ZUluZGV4QXJncykudG9TUUxzKClcblxuICAgICAgICBmb3IgKGNvbnN0IGNyZWF0ZUluZGV4U1FMIG9mIGNyZWF0ZUluZGV4U1FMcykge1xuICAgICAgICAgIHNxbHMucHVzaChjcmVhdGVJbmRleFNRTClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzcWxzXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,156 @@
1
+ /**
2
+ * AuditChanges type.
3
+ */
4
+ export type AuditChanges = Record<string, unknown>;
5
+ /**
6
+ * AuditEventPayload type.
7
+ */
8
+ export type AuditEventPayload = {
9
+ /**
10
+ * - Audit action name.
11
+ */
12
+ action: string;
13
+ /**
14
+ * - Created audit row id.
15
+ */
16
+ auditId: number | string;
17
+ /**
18
+ * - Changes captured for the audit.
19
+ */
20
+ auditedChanges: AuditChanges | null;
21
+ /**
22
+ * - Optional caller-supplied audit params.
23
+ */
24
+ params: Record<string, unknown> | null;
25
+ /**
26
+ * - Audited record.
27
+ */
28
+ record: import("./index.js").default;
29
+ };
30
+ /**
31
+ * AuditCallback type.
32
+ */
33
+ export type AuditCallback = (payload: AuditEventPayload) => void | Promise<void>;
34
+ /**
35
+ * CreateAuditArgs type.
36
+ */
37
+ export type CreateAuditArgs = {
38
+ /**
39
+ * - Audit action name.
40
+ */
41
+ action: string;
42
+ /**
43
+ * - Explicit changes to persist.
44
+ */
45
+ auditedChanges?: Record<string, any> | null | undefined;
46
+ /**
47
+ * - Optional metadata to store with the audit.
48
+ */
49
+ params?: Record<string, any> | null | undefined;
50
+ };
51
+ /**
52
+ * AuditedModelClass type.
53
+ */
54
+ export type AuditedModelClass = typeof import("./index.js").default & {
55
+ _auditCallbacks?: Record<string, AuditCallback[]>;
56
+ _auditLifecycleCallbacksRegistered?: boolean;
57
+ };
58
+ /**
59
+ * Captures create changes on a model instance.
60
+ * @param {import("./index.js").default & {_pendingCreateAuditChanges?: AuditChanges}} record - Record to capture.
61
+ * @returns {void}
62
+ */
63
+ export function captureCreateAuditChanges(record: import("./index.js").default & {
64
+ _pendingCreateAuditChanges?: AuditChanges;
65
+ }): void;
66
+ /**
67
+ * Captures update changes on a model instance.
68
+ * @param {import("./index.js").default & {_pendingUpdateAuditChanges?: AuditChanges}} record - Record to capture.
69
+ * @returns {void}
70
+ */
71
+ export function captureUpdateAuditChanges(record: import("./index.js").default & {
72
+ _pendingUpdateAuditChanges?: AuditChanges;
73
+ }): void;
74
+ /**
75
+ * Creates an audit row for a record.
76
+ * @param {import("./index.js").default} record - Record to audit.
77
+ * @param {CreateAuditArgs} args - Audit row options.
78
+ * @returns {Promise<number | string>} Created audit row id.
79
+ */
80
+ export function createAudit(record: import("./index.js").default, args: CreateAuditArgs): Promise<number | string>;
81
+ /**
82
+ * Creates the create audit row for a model instance.
83
+ * @param {import("./index.js").default & {_pendingCreateAuditChanges?: AuditChanges}} record - Record to audit.
84
+ * @returns {Promise<void>}
85
+ */
86
+ export function createCreateAudit(record: import("./index.js").default & {
87
+ _pendingCreateAuditChanges?: AuditChanges;
88
+ }): Promise<void>;
89
+ /**
90
+ * Creates the destroy audit row for a model instance.
91
+ * @param {import("./index.js").default} record - Record to audit.
92
+ * @returns {Promise<void>}
93
+ */
94
+ export function createDestroyAudit(record: import("./index.js").default): Promise<void>;
95
+ /**
96
+ * Creates the update audit row for a model instance.
97
+ * @param {import("./index.js").default & {_pendingUpdateAuditChanges?: AuditChanges}} record - Record to audit.
98
+ * @returns {Promise<void>}
99
+ */
100
+ export function createUpdateAudit(record: import("./index.js").default & {
101
+ _pendingUpdateAuditChanges?: AuditChanges;
102
+ }): Promise<void>;
103
+ /**
104
+ * Registers an audit event callback for a model/action pair.
105
+ * @param {AuditedModelClass} modelClass - Model class to observe.
106
+ * @param {string} action - Audit action name.
107
+ * @param {AuditCallback} callback - Callback invoked after matching audit rows are created.
108
+ * @returns {() => void} Unsubscribe function.
109
+ */
110
+ export function registerAuditCallback(modelClass: AuditedModelClass, action: string, callback: AuditCallback): () => void;
111
+ /**
112
+ * AuditChanges type.
113
+ * @typedef {Record<string, ?>} AuditChanges
114
+ */
115
+ /**
116
+ * AuditEventPayload type.
117
+ * @typedef {object} AuditEventPayload
118
+ * @property {string} action - Audit action name.
119
+ * @property {number | string} auditId - Created audit row id.
120
+ * @property {AuditChanges | null} auditedChanges - Changes captured for the audit.
121
+ * @property {Record<string, ?> | null} params - Optional caller-supplied audit params.
122
+ * @property {import("./index.js").default} record - Audited record.
123
+ */
124
+ /**
125
+ * AuditCallback type.
126
+ * @typedef {(payload: AuditEventPayload) => void | Promise<void>} AuditCallback
127
+ */
128
+ /**
129
+ * CreateAuditArgs type.
130
+ * @typedef {object} CreateAuditArgs
131
+ * @property {string} action - Audit action name.
132
+ * @property {AuditChanges | null} [auditedChanges] - Explicit changes to persist.
133
+ * @property {Record<string, ?> | null} [params] - Optional metadata to store with the audit.
134
+ */
135
+ /**
136
+ * AuditedModelClass type.
137
+ * @typedef {typeof import("./index.js").default & {
138
+ * _auditCallbacks?: Record<string, AuditCallback[]>,
139
+ * _auditLifecycleCallbacksRegistered?: boolean
140
+ * }} AuditedModelClass
141
+ */
142
+ /**
143
+ * Adds automatic create/update/destroy auditing callbacks to a model class.
144
+ * @param {AuditedModelClass} modelClass - Model class to audit.
145
+ * @returns {void}
146
+ */
147
+ export function registerAuditing(modelClass: AuditedModelClass): void;
148
+ /**
149
+ * Returns records without an audit row for the given action.
150
+ * @template {AuditedModelClass} MC
151
+ * @param {MC} modelClass - Model class to scope.
152
+ * @param {string} action - Audit action to exclude.
153
+ * @returns {import("../query/model-class-query.js").default<MC>} Query scoped to records without that audit action.
154
+ */
155
+ export function withoutAudit<MC extends AuditedModelClass>(modelClass: MC, action: string): import("../query/model-class-query.js").default<MC>;
156
+ //# sourceMappingURL=auditing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auditing.d.ts","sourceRoot":"","sources":["../../../../src/database/record/auditing.js"],"names":[],"mappings":";;;2BAMa,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC;;;;;;;;YAMhB,MAAM;;;;aACN,MAAM,GAAG,MAAM;;;;oBACf,YAAY,GAAG,IAAI;;;;YACnB,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GAAG,IAAI;;;;YACxB,OAAO,YAAY,EAAE,OAAO;;;;;4BAK7B,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;;;;;;;;YAMnD,MAAM;;;;;;;;;;;;;gCAOP,cAAc,YAAY,EAAE,OAAO,GAAG;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAClD,kCAAkC,CAAC,EAAE,OAAO,CAAA;CAC7C;AAuKJ;;;;GAIG;AACH,kDAHW,OAAO,YAAY,EAAE,OAAO,GAAG;IAAC,0BAA0B,CAAC,EAAE,YAAY,CAAA;CAAC,GACxE,IAAI,CAIhB;AAgBD;;;;GAIG;AACH,kDAHW,OAAO,YAAY,EAAE,OAAO,GAAG;IAAC,0BAA0B,CAAC,EAAE,YAAY,CAAA;CAAC,GACxE,IAAI,CAIhB;AA1HD;;;;;GAKG;AACH,oCAJW,OAAO,YAAY,EAAE,OAAO,QAC5B,eAAe,GACb,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAQpC;AAyFD;;;;GAIG;AACH,0CAHW,OAAO,YAAY,EAAE,OAAO,GAAG;IAAC,0BAA0B,CAAC,EAAE,YAAY,CAAA;CAAC,GACxE,OAAO,CAAC,IAAI,CAAC,CASzB;AA6BD;;;;GAIG;AACH,2CAHW,OAAO,YAAY,EAAE,OAAO,GAC1B,OAAO,CAAC,IAAI,CAAC,CAOzB;AA5BD;;;;GAIG;AACH,0CAHW,OAAO,YAAY,EAAE,OAAO,GAAG;IAAC,0BAA0B,CAAC,EAAE,YAAY,CAAA;CAAC,GACxE,OAAO,CAAC,IAAI,CAAC,CAazB;AAlMD;;;;;;GAMG;AACH,kDALW,iBAAiB,UACjB,MAAM,YACN,aAAa,GACX,MAAM,IAAI,CAoBtB;AA/ED;;;GAGG;AAEH;;;;;;;;GAQG;AAEH;;;GAGG;AAEH;;;;;;GAMG;AAEH;;;;;;GAMG;AAEH;;;;GAIG;AACH,6CAHW,iBAAiB,GACf,IAAI,CAahB;AAkND;;;;;;GAMG;AACH,6BALiC,EAAE,SAArB,iBAAkB,cACrB,EAAE,UACF,MAAM,GACJ,OAAO,+BAA+B,EAAE,OAAO,CAAC,EAAE,CAAC,CA2B/D"}