sonamu 0.7.2 → 0.7.3

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/api/code-converters.js +2 -2
  2. package/dist/api/config.js +2 -2
  3. package/dist/api/decorators.d.ts.map +1 -1
  4. package/dist/api/decorators.js +2 -2
  5. package/dist/api/sonamu.d.ts.map +1 -1
  6. package/dist/api/sonamu.js +3 -4
  7. package/dist/bin/cli.js +1 -17
  8. package/dist/database/base-model.types.d.ts +1 -0
  9. package/dist/database/base-model.types.d.ts.map +1 -1
  10. package/dist/database/base-model.types.js +2 -2
  11. package/dist/database/puri-wrapper.js +7 -3
  12. package/dist/database/upsert-builder.d.ts +7 -3
  13. package/dist/database/upsert-builder.d.ts.map +1 -1
  14. package/dist/database/upsert-builder.js +63 -25
  15. package/dist/entity/entity-manager.d.ts +1 -1
  16. package/dist/entity/entity.js +3 -3
  17. package/dist/migration/code-generation.d.ts.map +1 -1
  18. package/dist/migration/code-generation.js +8 -7
  19. package/dist/migration/migration-set.d.ts.map +1 -1
  20. package/dist/migration/migration-set.js +2 -25
  21. package/dist/migration/migrator.js +2 -2
  22. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  23. package/dist/migration/postgresql-schema-reader.js +2 -1
  24. package/dist/syncer/file-patterns.js +2 -2
  25. package/dist/template/implementations/service.template.d.ts.map +1 -1
  26. package/dist/template/implementations/service.template.js +3 -2
  27. package/dist/types/types.d.ts +4 -3
  28. package/dist/types/types.d.ts.map +1 -1
  29. package/dist/types/types.js +2 -2
  30. package/dist/utils/model.d.ts +9 -2
  31. package/dist/utils/model.d.ts.map +1 -1
  32. package/dist/utils/model.js +1 -1
  33. package/dist/utils/path-utils.d.ts +1 -1
  34. package/dist/utils/path-utils.d.ts.map +1 -1
  35. package/dist/utils/path-utils.js +1 -1
  36. package/package.json +7 -7
  37. package/src/api/code-converters.ts +2 -2
  38. package/src/api/config.ts +1 -1
  39. package/src/api/decorators.ts +1 -1
  40. package/src/api/sonamu.ts +2 -5
  41. package/src/bin/cli.ts +0 -17
  42. package/src/database/base-model.types.ts +2 -0
  43. package/src/database/puri-wrapper.ts +2 -2
  44. package/src/database/upsert-builder.ts +88 -29
  45. package/src/entity/entity.ts +2 -2
  46. package/src/migration/code-generation.ts +8 -6
  47. package/src/migration/migration-set.ts +0 -20
  48. package/src/migration/migrator.ts +1 -1
  49. package/src/migration/postgresql-schema-reader.ts +1 -0
  50. package/src/shared/web.shared.ts.txt +6 -4
  51. package/src/syncer/file-patterns.ts +1 -1
  52. package/src/template/implementations/service.template.ts +2 -1
  53. package/src/types/types.ts +3 -2
  54. package/src/utils/model.ts +10 -4
  55. package/src/utils/path-utils.ts +5 -2
@@ -235,7 +235,7 @@ import { ApiParamType } from "../types/types.js";
235
235
  } else if (ApiParamType.isTupleType(paramType)) {
236
236
  return `[ ${paramType.elements.map((elem)=>apiParamTypeToTsType(elem, injectImportKeys))} ]`;
237
237
  } else if (ApiParamType.isTypeParam(paramType)) {
238
- return `<${paramType.id}${paramType.constraint ? ` extends ${apiParamTypeToTsType(paramType.constraint, injectImportKeys)}` : ""}>`;
238
+ return `${paramType.id}${paramType.constraint ? ` extends ${apiParamTypeToTsType(paramType.constraint, injectImportKeys)}` : ""}`;
239
239
  } else {
240
240
  throw new Error(`resolve 불가 ApiParamType ${paramType}`);
241
241
  }
@@ -255,4 +255,4 @@ import { ApiParamType } from "../types/types.js";
255
255
  return `{ ${params.map((param)=>`${param.name}${param.optional ? "?" : ""}: ${apiParamTypeToTsType(param.type, injectImportKeys)}${param.defaultDef ? `= ${param.defaultDef}` : ""}`).join(", ")} }`;
256
256
  }
257
257
 
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29kZS1jb252ZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29kZS1jb252ZXJ0ZXJz64qUIEFQSSDtg4DsnoUg7KCV7J2Y65Ok7J2EIFpvZCDqsJ3ssrTrgpggVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmY7ZWY64qUIO2VqOyImOuTpOydhCDsoJzqs7Xtlanri4jri6QuXG4gKlxuICogMS4gQVBJIOyLnOumrOymiOuTpDpcbiAqIC0gRXh0ZW5kZWRBcGksIEFwaVBhcmFtLCBBcGlQYXJhbVR5cGVcbiAqIC0gQVBJIOuplO2DgOuNsOydtO2EsOulvCDtkZztmITtlZjripQg7YOA7J6FIOygleydmOuTpFxuICpcbiAqIDIuIFpvZE9iamVjdCDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFpvZCDtg4DsnoUg7J247Iqk7YS07IqkICjrn7Dtg4DsnoQg67C466as642w7J207IWY7JqpKVxuICogLSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVxuICpcbiAqIDMuIFRzVHlwZURlZiDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFR5cGVTY3JpcHQg7YOA7J6FIOy9lOuTnCDrrLjsnpDsl7QgKOy9lOuTnCDsg53shLHsmqkpXG4gKiAtIGFwaVBhcmFtVHlwZVRvVHNUeXBlIOKGkiBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3RcbiAqXG4gKiDssLjqs6A6XG4gKiAtIFpvZFR5cGVEZWYg7IOd7ISxIChab2Qg7L2U65OcIOusuOyekOyXtCk6IHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvWm9kQ29kZSDsgqzsmqlcbiAqIC0gRW50aXR5UHJvcCDrs4DtmZg6IHpvZC1jb252ZXJ0ZXIudHMg7LC47KGwXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgY29yZSB9IGZyb20gXCJ6b2QvdjRcIjtcbmltcG9ydCB0eXBlIHsgJFpvZExvb3NlU2hhcGUgfSBmcm9tIFwiem9kL3Y0L2NvcmVcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbmRlZEFwaSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kT2JqZWN0ID0gei5ab2RPYmplY3Q8JFpvZExvb3NlU2hhcGU+O1xudHlwZSBBbnlab2RMaXRlcmFsID0gei5ab2RMaXRlcmFsPGNvcmUudXRpbC5MaXRlcmFsPjtcblxuLyoqXG4gKiBQcm9taXNlIO2DgOyeheydhCDtlZwg67KIIOyWuOuemO2Vke2VmOyXrCDrgrTrtoAg7YOA7J6F7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIFByb21pc2XqsIAg7JWE64uMIOqyveyasCDsm5Drs7gg7YOA7J6F7J2EIOq3uOuMgOuhnCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBQcm9taXNlT25jZShwYXJhbVR5cGU6IEFwaVBhcmFtVHlwZSkge1xuICBpZiAoQXBpUGFyYW1UeXBlLmlzUHJvbWlzZShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZS5hcmdzPy5bMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZTtcbiAgfVxufVxuXG4vKlxuICogQVBJ66W8IOq1rOyEse2VmOuKlCDsmpTshozrk6TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN0cmluZywgbnVtYmVyLCBhcnJheSwgdW5pb24g65OxIOuqqOuToCBBcGlQYXJhbVR5cGXsnYQg7LKY66as7ZWY66mwLFxuICog7Iic7ZmY7LC47KGw6rCAIOuwnOyDne2VmOuKlCDqsr3smrAgei51bmtub3duKCnsnLzroZwgZmFsbGJhY2vtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShcbiAgcGFyYW1UeXBlOiBBcGlQYXJhbVR5cGUsXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IEFueVpvZE9iamVjdDtcbiAgfSxcbik6IHouWm9kVHlwZTx1bmtub3duPiB7XG4gIHN3aXRjaCAocGFyYW1UeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHouc3RyaW5nKCk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB6LmJvb2xlYW4oKTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBhZHZUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB8IG51bWJlciB9O1xuICAgICAgc3dpdGNoIChhZHZUeXBlLnQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZy1saXRlcmFsXCI6XG4gICAgICAgIGNhc2UgXCJudW1lcmljLWxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gei5saXRlcmFsKGFkdlR5cGUudmFsdWUpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBjb25zdCBvYmpUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyBwcm9wczogQXBpUGFyYW1bXSB9O1xuICAgICAgICAgIHJldHVybiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKG9ialR5cGUucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOiB7XG4gICAgICAgICAgY29uc3QgYXJyVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB6LmFycmF5KGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyclR5cGUuZWxlbWVudHNUeXBlLCByZWZlcmVuY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlZlwiOiB7XG4gICAgICAgICAgY29uc3QgcmVmVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGF0ZSDtg4DsnoUg7LKY66asXG4gICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gei5kYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOqwneyytCDtgqQg6rSA66asIOycoO2LuOumrO2LsFxuICAgICAgICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiXS5pbmNsdWRlcyhyZWZUeXBlLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuYXJncz8ubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J6Y66q765CcICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtvYmosIGxpdGVyYWxPclVuaW9uXSA9IHJlZlR5cGUuYXJncy5tYXAoXG4gICAgICAgICAgICAgIChhcmcpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyZywgcmVmZXJlbmNlcyksXG4gICAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7IOd7ISx65CY64qUIFpvZFVuaW9u7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICApIGFzIFtBbnlab2RPYmplY3QsIHouWm9kVW5pb248YW55PiB8IEFueVpvZExpdGVyYWxdO1xuXG4gICAgICAgICAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsT3JVbmlvbiBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICAgICAgICAgICAga2V5cyA9IGxpdGVyYWxPclVuaW9uLmRlZi5vcHRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAob3B0aW9uOiB7IGRlZjogeyB2YWx1ZXM6IHN0cmluZ1tdIH0gfSkgPT4gb3B0aW9uLmRlZi52YWx1ZXNbMF0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBrZXlzID0gKGxpdGVyYWxPclVuaW9uIGFzIHouWm9kTGl0ZXJhbDxzdHJpbmc+KS5kZWYudmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkID0gT2JqZWN0LmZyb21FbnRyaWVzKGtleXMubWFwKChrZXkpID0+IFtrZXksIHRydWUgYXMgY29uc3RdKSk7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5pZCA9PT0gXCJQaWNrXCIpIHtcbiAgICAgICAgICAgICAgaWYgKG9iai5waWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iai5waWNrKGtleVJlY29yZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChvYmoub21pdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmoub21pdChrZXlSZWNvcmQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChbXCJQYXJ0aWFsXCJdLmluY2x1ZGVzKHJlZlR5cGUuaWQpKSB7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5hcmdzPy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnpjrqrvrkJwgJHtyZWZUeXBlLmlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2JqID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUocmVmVHlwZS5hcmdzWzBdLCByZWZlcmVuY2VzKTtcbiAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogUGFydGlhbCDsnbjsiJgg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAgICAgcmV0dXJuIChvYmogYXMgei5ab2RPYmplY3Q8YW55PikucGFydGlhbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzW3JlZlR5cGUuaWRdO1xuICAgICAgICAgIGlmIChyZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHoudW5rbm93bigpO1xuICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKGByZWYg7LC47KGwIOu2iOqwgCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInVuaW9uXCI6IHtcbiAgICAgICAgICBjb25zdCB1bmlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gbnVsbGFibGUg7Jyg64uI7JioXG4gICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlcy5sZW5ndGggPT09IDIgJiYgdW5pb25UeXBlLnR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlc1swXSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1sxXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh1bmlvblR5cGUudHlwZXNbMF0sIHJlZmVyZW5jZXMpLm51bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOydvOuwmCDsnKDri4jsmKhcbiAgICAgICAgICByZXR1cm4gei51bmlvbihcbiAgICAgICAgICAgIHVuaW9uVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvblR5cGUudHlwZXMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdCwgdHlwZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZSwgcmVmZXJlbmNlcyk7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFR5cGU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHouaW50ZXJzZWN0aW9uKHJlc3VsdCwgcmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHoudW5rbm93bigpIGFzIHouWm9kVHlwZTx1bmtub3duPixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ0dXBsZS10eXBlXCI6IHtcbiAgICAgICAgICBjb25zdCB0dXBsZVR5cGUgPSBwYXJhbVR5cGUgYXMgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZTtcbiAgICAgICAgICByZXR1cm4gei50dXBsZShcbiAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7IOd7ISx65CY64qUIFpvZFR1cGxl7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICB0dXBsZVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShlbGVtLCByZWZlcmVuY2VzKSkgYXMgYW55LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB6LnVua25vd24oKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOqwgSDtjIzrnbzrr7jthLDsnZggb3B0aW9uYWwg7Jes67aA66W8IOuwmOyYge2VmOyXrCBab2Qg7Iqk7YKk66eI66W8IOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gIGFwaVBhcmFtczogQXBpUGFyYW1bXSxcbiAgcmVmZXJlbmNlczoge1xuICAgIFtpZDogc3RyaW5nXTogQW55Wm9kT2JqZWN0O1xuICB9ID0ge30sXG4pOiB6LlpvZE9iamVjdCB7XG4gIHJldHVybiB6Lm9iamVjdChcbiAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhcGlQYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgICAgICBsZXQgem9kVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHBhcmFtLnR5cGUsIHJlZmVyZW5jZXMpO1xuICAgICAgICBpZiAocGFyYW0ub3B0aW9uYWwpIHtcbiAgICAgICAgICB6b2RUeXBlID0gem9kVHlwZS5vcHRpb25hbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcGFyYW0ubmFtZSwgem9kVHlwZV07XG4gICAgICB9KSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIEV4dGVuZGVkQXBp66W8IFpvZE9iamVjdOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBUeXBlUGFyYW1ldGVy7JmAIOydvOuwmCDtjIzrnbzrr7jthLDrpbwg7LKY66as7ZWY66mwLFxuICogQ29udGV4dCwgUmVmS25leCwgX+uhnCDsi5zsnpHtlZjripQgb3B0aW9uYWwg7YyM652866+47YSw64qUIOygnOyZuO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGkoXG4gIGFwaTogRXh0ZW5kZWRBcGksXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IEFueVpvZE9iamVjdDtcbiAgfSA9IHt9LFxuKSB7XG4gIGlmIChhcGkudHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IHR5cGVQYXJhbSBvZiBhcGkudHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIGlmICh0eXBlUGFyYW0uY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCB6b2RUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZVBhcmFtLmNvbnN0cmFpbnQsIHJlZmVyZW5jZXMpO1xuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IOugiO2NvOufsOyKpCDtg4DsnoUg7LqQ7Iqk7YyFXG4gICAgICAgIChyZWZlcmVuY2VzW3R5cGVQYXJhbS5pZF0gYXMgei5ab2RUeXBlPGFueT4pID0gem9kVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gICAgLy8gYXBpIHBhcnNpbmftlZwg6rKw6rO86rCAIGFwaSBwYXJhbXNcbiAgICBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICEocGFyYW0ub3B0aW9uYWwgPT09IHRydWUgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksIC8vIF/roZwg7Iuc7J6R7ZWY64qUIO2MjOudvOuvuO2EsOuKlCDsoJzsmbhcbiAgICApLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIHJldHVybiBSZXFUeXBlO1xufVxuXG4vKlxuICogQVBJIO2DgOyehSDsoJXsnZjrpbwgVHlwZVNjcmlwdCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhcnJheSwgcmVmIOuTsSDrqqjrk6Ag7YOA7J6F7J2EIFRTIOusuOuyleycvOuhnCDtkZztmITtlZjrqbAsXG4gKiBpbXBvcnTqsIAg7ZWE7JqU7ZWcIO2DgOyehSBJROuKlCBpbmplY3RJbXBvcnRLZXlz7JeQIOyImOynke2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChcbiAgICBbXG4gICAgICBcInN0cmluZ1wiLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgICBcIm51bGxcIixcbiAgICAgIFwidW5kZWZpbmVkXCIsXG4gICAgICBcInZvaWRcIixcbiAgICAgIFwiYW55XCIsXG4gICAgICBcInVua25vd25cIixcbiAgICBdLmluY2x1ZGVzKHBhcmFtVHlwZSBhcyBzdHJpbmcpXG4gICkge1xuICAgIHJldHVybiBwYXJhbVR5cGUgYXMgc3RyaW5nO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc09iamVjdChwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGB7ICR7YXBpUGFyYW1Ub1RzQ29kZShwYXJhbVR5cGUucHJvcHMsIGluamVjdEltcG9ydEtleXMpfSB9YDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNTdHJpbmdMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFwiJHtwYXJhbVR5cGUudmFsdWV9XCJgO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc051bWVyaWNMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtVHlwZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiB8IFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbnRlcnNlY3Rpb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiAmIFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNBcnJheShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5lbGVtZW50c1R5cGUsIGluamVjdEltcG9ydEtleXMpfVtdYDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNSZWYocGFyYW1UeXBlKSkge1xuICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiLCBcIlByb21pc2VcIiwgXCJQYXJ0aWFsXCIsIFwiRGF0ZVwiXS5pbmNsdWRlcyhwYXJhbVR5cGUuaWQpID09PSBmYWxzZSkge1xuICAgICAgLy8gaW1wb3J0S2V5cyDsnbjsoJ3shZhcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChwYXJhbVR5cGUuaWQpO1xuICAgIH1cbiAgICBpZiAocGFyYW1UeXBlLmFyZ3MgPT09IHVuZGVmaW5lZCB8fCBwYXJhbVR5cGUuYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBwYXJhbVR5cGUuaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtwYXJhbVR5cGUuaWR9PCR7cGFyYW1UeXBlLmFyZ3NcbiAgICAgICAgLm1hcCgoYXJnKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShhcmcsIGluamVjdEltcG9ydEtleXMpKVxuICAgICAgICAuam9pbihcIixcIil9PmA7XG4gICAgfVxuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc0luZGV4ZWRBY2Nlc3MocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgIHBhcmFtVHlwZS5vYmplY3QsXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLFxuICAgICl9WyR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmluZGV4LCBpbmplY3RJbXBvcnRLZXlzKX1dYDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNUdXBsZVR5cGUocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBgWyAke3BhcmFtVHlwZS5lbGVtZW50cy5tYXAoKGVsZW0pID0+IGFwaVBhcmFtVHlwZVRvVHNUeXBlKGVsZW0sIGluamVjdEltcG9ydEtleXMpKX0gXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHlwZVBhcmFtKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYDwke3BhcmFtVHlwZS5pZH0ke1xuICAgICAgcGFyYW1UeXBlLmNvbnN0cmFpbnRcbiAgICAgICAgPyBgIGV4dGVuZHMgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwYXJhbVR5cGUuY29uc3RyYWludCwgaW5qZWN0SW1wb3J0S2V5cyl9YFxuICAgICAgICA6IFwiXCJcbiAgICB9PmA7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGByZXNvbHZlIOu2iOqwgCBBcGlQYXJhbVR5cGUgJHtwYXJhbVR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgVHlwZVNjcmlwdCDtlajsiJgg7YyM652866+47YSwIOy9lOuTnOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDsmIg6IFwibmFtZTogc3RyaW5nLCBhZ2U/OiBudW1iZXIsIGFjdGl2ZTogYm9vbGVhbiA9IHRydWVcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBpUGFyYW1Ub1RzQ29kZShwYXJhbXM6IEFwaVBhcmFtW10sIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhcmFtc1xuICAgIC5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICByZXR1cm4gYCR7cGFyYW0ubmFtZX0ke1xuICAgICAgICBwYXJhbS5vcHRpb25hbCAmJiAhcGFyYW0uZGVmYXVsdERlZiA/IFwiP1wiIDogXCJcIlxuICAgICAgfTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwYXJhbS50eXBlLCBpbmplY3RJbXBvcnRLZXlzKX0ke1xuICAgICAgICBwYXJhbS5kZWZhdWx0RGVmID8gYD0gJHtwYXJhbS5kZWZhdWx0RGVmfWAgOiBcIlwiXG4gICAgICB9YDtcbiAgICB9KVxuICAgIC5qb2luKFwiLCBcIik7XG59XG5cbi8qKlxuICogQXBpUGFyYW0g67Cw7Je07J2EIFR5cGVTY3JpcHQg6rCd7LK0IO2DgOyehSDsvZTrk5zroZwg67OA7ZmY7ZWp64uI64ukLlxuICog7JiIOiBcInsgbmFtZTogc3RyaW5nLCBhZ2U/OiBudW1iZXIsIGFjdGl2ZTogYm9vbGVhbiA9IHRydWUgfVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3QocGFyYW1zOiBBcGlQYXJhbVtdLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgeyAke3BhcmFtc1xuICAgIC5tYXAoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgIGAke3BhcmFtLm5hbWV9JHtwYXJhbS5vcHRpb25hbCA/IFwiP1wiIDogXCJcIn06ICR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICAgICAgcGFyYW0udHlwZSxcbiAgICAgICAgICBpbmplY3RJbXBvcnRLZXlzLFxuICAgICAgICApfSR7cGFyYW0uZGVmYXVsdERlZiA/IGA9ICR7cGFyYW0uZGVmYXVsdERlZn1gIDogXCJcIn1gLFxuICAgIClcbiAgICAuam9pbihcIiwgXCIpfSB9YDtcbn1cbiJdLCJuYW1lcyI6WyJ6IiwiQXBpUGFyYW1UeXBlIiwidW53cmFwUHJvbWlzZU9uY2UiLCJwYXJhbVR5cGUiLCJpc1Byb21pc2UiLCJhcmdzIiwiZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUiLCJyZWZlcmVuY2VzIiwic3RyaW5nIiwibnVtYmVyIiwiYm9vbGVhbiIsImFkdlR5cGUiLCJ0IiwibGl0ZXJhbCIsInZhbHVlIiwib2JqVHlwZSIsImdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMiLCJwcm9wcyIsImFyclR5cGUiLCJhcnJheSIsImVsZW1lbnRzVHlwZSIsInJlZlR5cGUiLCJpZCIsImRhdGUiLCJpbmNsdWRlcyIsImxlbmd0aCIsIkVycm9yIiwib2JqIiwibGl0ZXJhbE9yVW5pb24iLCJtYXAiLCJhcmciLCJrZXlzIiwiWm9kVW5pb24iLCJkZWYiLCJvcHRpb25zIiwib3B0aW9uIiwidmFsdWVzIiwia2V5UmVjb3JkIiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJrZXkiLCJwaWNrIiwib21pdCIsInBhcnRpYWwiLCJyZWZlcmVuY2UiLCJ1bmRlZmluZWQiLCJ1bmtub3duIiwidW5pb25UeXBlIiwidHlwZXMiLCJzb21lIiwidHlwZSIsIm51bGxhYmxlIiwidW5pb24iLCJpbnRlcnNlY3Rpb25UeXBlIiwicmVkdWNlIiwicmVzdWx0IiwiaW5kZXgiLCJyZXNvbHZlZFR5cGUiLCJpbnRlcnNlY3Rpb24iLCJ0dXBsZVR5cGUiLCJ0dXBsZSIsImVsZW1lbnRzIiwiZWxlbSIsImFwaVBhcmFtcyIsIm9iamVjdCIsInBhcmFtIiwiem9kVHlwZSIsIm9wdGlvbmFsIiwibmFtZSIsImdldFpvZE9iamVjdEZyb21BcGkiLCJhcGkiLCJ0eXBlUGFyYW1ldGVycyIsInR5cGVQYXJhbSIsImNvbnN0cmFpbnQiLCJSZXFUeXBlIiwicGFyYW1ldGVycyIsImZpbHRlciIsImlzQ29udGV4dCIsImlzUmVmS25leCIsInN0YXJ0c1dpdGgiLCJhcGlQYXJhbVR5cGVUb1RzVHlwZSIsImluamVjdEltcG9ydEtleXMiLCJpc09iamVjdCIsImFwaVBhcmFtVG9Uc0NvZGUiLCJpc1N0cmluZ0xpdGVyYWwiLCJpc051bWVyaWNMaXRlcmFsIiwiU3RyaW5nIiwiaXNVbmlvbiIsImpvaW4iLCJpc0ludGVyc2VjdGlvbiIsImlzQXJyYXkiLCJpc1JlZiIsInB1c2giLCJpc0luZGV4ZWRBY2Nlc3MiLCJpc1R1cGxlVHlwZSIsImlzVHlw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
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29kZS1jb252ZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29kZS1jb252ZXJ0ZXJz64qUIEFQSSDtg4DsnoUg7KCV7J2Y65Ok7J2EIFpvZCDqsJ3ssrTrgpggVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmY7ZWY64qUIO2VqOyImOuTpOydhCDsoJzqs7Xtlanri4jri6QuXG4gKlxuICogMS4gQVBJIOyLnOumrOymiOuTpDpcbiAqIC0gRXh0ZW5kZWRBcGksIEFwaVBhcmFtLCBBcGlQYXJhbVR5cGVcbiAqIC0gQVBJIOuplO2DgOuNsOydtO2EsOulvCDtkZztmITtlZjripQg7YOA7J6FIOygleydmOuTpFxuICpcbiAqIDIuIFpvZE9iamVjdCDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFpvZCDtg4DsnoUg7J247Iqk7YS07IqkICjrn7Dtg4DsnoQg67C466as642w7J207IWY7JqpKVxuICogLSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVxuICpcbiAqIDMuIFRzVHlwZURlZiDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFR5cGVTY3JpcHQg7YOA7J6FIOy9lOuTnCDrrLjsnpDsl7QgKOy9lOuTnCDsg53shLHsmqkpXG4gKiAtIGFwaVBhcmFtVHlwZVRvVHNUeXBlIOKGkiBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3RcbiAqXG4gKiDssLjqs6A6XG4gKiAtIFpvZFR5cGVEZWYg7IOd7ISxIChab2Qg7L2U65OcIOusuOyekOyXtCk6IHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvWm9kQ29kZSDsgqzsmqlcbiAqIC0gRW50aXR5UHJvcCDrs4DtmZg6IHpvZC1jb252ZXJ0ZXIudHMg7LC47KGwXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgY29yZSB9IGZyb20gXCJ6b2QvdjRcIjtcbmltcG9ydCB0eXBlIHsgJFpvZExvb3NlU2hhcGUgfSBmcm9tIFwiem9kL3Y0L2NvcmVcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbmRlZEFwaSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kT2JqZWN0ID0gei5ab2RPYmplY3Q8JFpvZExvb3NlU2hhcGU+O1xudHlwZSBBbnlab2RMaXRlcmFsID0gei5ab2RMaXRlcmFsPGNvcmUudXRpbC5MaXRlcmFsPjtcblxuLyoqXG4gKiBQcm9taXNlIO2DgOyeheydhCDtlZwg67KIIOyWuOuemO2Vke2VmOyXrCDrgrTrtoAg7YOA7J6F7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIFByb21pc2XqsIAg7JWE64uMIOqyveyasCDsm5Drs7gg7YOA7J6F7J2EIOq3uOuMgOuhnCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBQcm9taXNlT25jZShwYXJhbVR5cGU6IEFwaVBhcmFtVHlwZSkge1xuICBpZiAoQXBpUGFyYW1UeXBlLmlzUHJvbWlzZShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZS5hcmdzPy5bMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZTtcbiAgfVxufVxuXG4vKlxuICogQVBJ66W8IOq1rOyEse2VmOuKlCDsmpTshozrk6TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN0cmluZywgbnVtYmVyLCBhcnJheSwgdW5pb24g65OxIOuqqOuToCBBcGlQYXJhbVR5cGXsnYQg7LKY66as7ZWY66mwLFxuICog7Iic7ZmY7LC47KGw6rCAIOuwnOyDne2VmOuKlCDqsr3smrAgei51bmtub3duKCnsnLzroZwgZmFsbGJhY2vtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShcbiAgcGFyYW1UeXBlOiBBcGlQYXJhbVR5cGUsXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IEFueVpvZE9iamVjdDtcbiAgfSxcbik6IHouWm9kVHlwZTx1bmtub3duPiB7XG4gIHN3aXRjaCAocGFyYW1UeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHouc3RyaW5nKCk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB6LmJvb2xlYW4oKTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBhZHZUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB8IG51bWJlciB9O1xuICAgICAgc3dpdGNoIChhZHZUeXBlLnQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZy1saXRlcmFsXCI6XG4gICAgICAgIGNhc2UgXCJudW1lcmljLWxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gei5saXRlcmFsKGFkdlR5cGUudmFsdWUpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBjb25zdCBvYmpUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyBwcm9wczogQXBpUGFyYW1bXSB9O1xuICAgICAgICAgIHJldHVybiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKG9ialR5cGUucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOiB7XG4gICAgICAgICAgY29uc3QgYXJyVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB6LmFycmF5KGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyclR5cGUuZWxlbWVudHNUeXBlLCByZWZlcmVuY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlZlwiOiB7XG4gICAgICAgICAgY29uc3QgcmVmVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGF0ZSDtg4DsnoUg7LKY66asXG4gICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gei5kYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOqwneyytCDtgqQg6rSA66asIOycoO2LuOumrO2LsFxuICAgICAgICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiXS5pbmNsdWRlcyhyZWZUeXBlLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuYXJncz8ubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J6Y66q765CcICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtvYmosIGxpdGVyYWxPclVuaW9uXSA9IHJlZlR5cGUuYXJncy5tYXAoXG4gICAgICAgICAgICAgIChhcmcpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyZywgcmVmZXJlbmNlcyksXG4gICAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7IOd7ISx65CY64qUIFpvZFVuaW9u7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICApIGFzIFtBbnlab2RPYmplY3QsIHouWm9kVW5pb248YW55PiB8IEFueVpvZExpdGVyYWxdO1xuXG4gICAgICAgICAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsT3JVbmlvbiBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICAgICAgICAgICAga2V5cyA9IGxpdGVyYWxPclVuaW9uLmRlZi5vcHRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAob3B0aW9uOiB7IGRlZjogeyB2YWx1ZXM6IHN0cmluZ1tdIH0gfSkgPT4gb3B0aW9uLmRlZi52YWx1ZXNbMF0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBrZXlzID0gKGxpdGVyYWxPclVuaW9uIGFzIHouWm9kTGl0ZXJhbDxzdHJpbmc+KS5kZWYudmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkID0gT2JqZWN0LmZyb21FbnRyaWVzKGtleXMubWFwKChrZXkpID0+IFtrZXksIHRydWUgYXMgY29uc3RdKSk7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5pZCA9PT0gXCJQaWNrXCIpIHtcbiAgICAgICAgICAgICAgaWYgKG9iai5waWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iai5waWNrKGtleVJlY29yZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChvYmoub21pdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmoub21pdChrZXlSZWNvcmQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChbXCJQYXJ0aWFsXCJdLmluY2x1ZGVzKHJlZlR5cGUuaWQpKSB7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5hcmdzPy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnpjrqrvrkJwgJHtyZWZUeXBlLmlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2JqID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUocmVmVHlwZS5hcmdzWzBdLCByZWZlcmVuY2VzKTtcbiAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogUGFydGlhbCDsnbjsiJgg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAgICAgcmV0dXJuIChvYmogYXMgei5ab2RPYmplY3Q8YW55PikucGFydGlhbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzW3JlZlR5cGUuaWRdO1xuICAgICAgICAgIGlmIChyZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHoudW5rbm93bigpO1xuICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKGByZWYg7LC47KGwIOu2iOqwgCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInVuaW9uXCI6IHtcbiAgICAgICAgICBjb25zdCB1bmlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gbnVsbGFibGUg7Jyg64uI7JioXG4gICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlcy5sZW5ndGggPT09IDIgJiYgdW5pb25UeXBlLnR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlc1swXSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1sxXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh1bmlvblR5cGUudHlwZXNbMF0sIHJlZmVyZW5jZXMpLm51bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOydvOuwmCDsnKDri4jsmKhcbiAgICAgICAgICByZXR1cm4gei51bmlvbihcbiAgICAgICAgICAgIHVuaW9uVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvblR5cGUudHlwZXMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdCwgdHlwZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZSwgcmVmZXJlbmNlcyk7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFR5cGU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHouaW50ZXJzZWN0aW9uKHJlc3VsdCwgcmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHoudW5rbm93bigpIGFzIHouWm9kVHlwZTx1bmtub3duPixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ0dXBsZS10eXBlXCI6IHtcbiAgICAgICAgICBjb25zdCB0dXBsZVR5cGUgPSBwYXJhbVR5cGUgYXMgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZTtcbiAgICAgICAgICByZXR1cm4gei50dXBsZShcbiAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7IOd7ISx65CY64qUIFpvZFR1cGxl7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICB0dXBsZVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShlbGVtLCByZWZlcmVuY2VzKSkgYXMgYW55LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB6LnVua25vd24oKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOqwgSDtjIzrnbzrr7jthLDsnZggb3B0aW9uYWwg7Jes67aA66W8IOuwmOyYge2VmOyXrCBab2Qg7Iqk7YKk66eI66W8IOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gIGFwaVBhcmFtczogQXBpUGFyYW1bXSxcbiAgcmVmZXJlbmNlczoge1xuICAgIFtpZDogc3RyaW5nXTogQW55Wm9kT2JqZWN0O1xuICB9ID0ge30sXG4pOiB6LlpvZE9iamVjdCB7XG4gIHJldHVybiB6Lm9iamVjdChcbiAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhcGlQYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgICAgICBsZXQgem9kVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHBhcmFtLnR5cGUsIHJlZmVyZW5jZXMpO1xuICAgICAgICBpZiAocGFyYW0ub3B0aW9uYWwpIHtcbiAgICAgICAgICB6b2RUeXBlID0gem9kVHlwZS5vcHRpb25hbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcGFyYW0ubmFtZSwgem9kVHlwZV07XG4gICAgICB9KSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIEV4dGVuZGVkQXBp66W8IFpvZE9iamVjdOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBUeXBlUGFyYW1ldGVy7JmAIOydvOuwmCDtjIzrnbzrr7jthLDrpbwg7LKY66as7ZWY66mwLFxuICogQ29udGV4dCwgUmVmS25leCwgX+uhnCDsi5zsnpHtlZjripQgb3B0aW9uYWwg7YyM652866+47YSw64qUIOygnOyZuO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGkoXG4gIGFwaTogRXh0ZW5kZWRBcGksXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IEFueVpvZE9iamVjdDtcbiAgfSA9IHt9LFxuKSB7XG4gIGlmIChhcGkudHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IHR5cGVQYXJhbSBvZiBhcGkudHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIGlmICh0eXBlUGFyYW0uY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCB6b2RUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZVBhcmFtLmNvbnN0cmFpbnQsIHJlZmVyZW5jZXMpO1xuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IOugiO2NvOufsOyKpCDtg4DsnoUg7LqQ7Iqk7YyFXG4gICAgICAgIChyZWZlcmVuY2VzW3R5cGVQYXJhbS5pZF0gYXMgei5ab2RUeXBlPGFueT4pID0gem9kVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gICAgLy8gYXBpIHBhcnNpbmftlZwg6rKw6rO86rCAIGFwaSBwYXJhbXNcbiAgICBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICEocGFyYW0ub3B0aW9uYWwgPT09IHRydWUgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksIC8vIF/roZwg7Iuc7J6R7ZWY64qUIO2MjOudvOuvuO2EsOuKlCDsoJzsmbhcbiAgICApLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIHJldHVybiBSZXFUeXBlO1xufVxuXG4vKlxuICogQVBJIO2DgOyehSDsoJXsnZjrpbwgVHlwZVNjcmlwdCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhcnJheSwgcmVmIOuTsSDrqqjrk6Ag7YOA7J6F7J2EIFRTIOusuOuyleycvOuhnCDtkZztmITtlZjrqbAsXG4gKiBpbXBvcnTqsIAg7ZWE7JqU7ZWcIO2DgOyehSBJROuKlCBpbmplY3RJbXBvcnRLZXlz7JeQIOyImOynke2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChcbiAgICBbXG4gICAgICBcInN0cmluZ1wiLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgICBcIm51bGxcIixcbiAgICAgIFwidW5kZWZpbmVkXCIsXG4gICAgICBcInZvaWRcIixcbiAgICAgIFwiYW55XCIsXG4gICAgICBcInVua25vd25cIixcbiAgICBdLmluY2x1ZGVzKHBhcmFtVHlwZSBhcyBzdHJpbmcpXG4gICkge1xuICAgIHJldHVybiBwYXJhbVR5cGUgYXMgc3RyaW5nO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc09iamVjdChwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGB7ICR7YXBpUGFyYW1Ub1RzQ29kZShwYXJhbVR5cGUucHJvcHMsIGluamVjdEltcG9ydEtleXMpfSB9YDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNTdHJpbmdMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFwiJHtwYXJhbVR5cGUudmFsdWV9XCJgO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc051bWVyaWNMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtVHlwZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiB8IFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbnRlcnNlY3Rpb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiAmIFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNBcnJheShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5lbGVtZW50c1R5cGUsIGluamVjdEltcG9ydEtleXMpfVtdYDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNSZWYocGFyYW1UeXBlKSkge1xuICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiLCBcIlByb21pc2VcIiwgXCJQYXJ0aWFsXCIsIFwiRGF0ZVwiXS5pbmNsdWRlcyhwYXJhbVR5cGUuaWQpID09PSBmYWxzZSkge1xuICAgICAgLy8gaW1wb3J0S2V5cyDsnbjsoJ3shZhcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChwYXJhbVR5cGUuaWQpO1xuICAgIH1cbiAgICBpZiAocGFyYW1UeXBlLmFyZ3MgPT09IHVuZGVmaW5lZCB8fCBwYXJhbVR5cGUuYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBwYXJhbVR5cGUuaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtwYXJhbVR5cGUuaWR9PCR7cGFyYW1UeXBlLmFyZ3NcbiAgICAgICAgLm1hcCgoYXJnKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShhcmcsIGluamVjdEltcG9ydEtleXMpKVxuICAgICAgICAuam9pbihcIixcIil9PmA7XG4gICAgfVxuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc0luZGV4ZWRBY2Nlc3MocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgIHBhcmFtVHlwZS5vYmplY3QsXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLFxuICAgICl9WyR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmluZGV4LCBpbmplY3RJbXBvcnRLZXlzKX1dYDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNUdXBsZVR5cGUocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBgWyAke3BhcmFtVHlwZS5lbGVtZW50cy5tYXAoKGVsZW0pID0+IGFwaVBhcmFtVHlwZVRvVHNUeXBlKGVsZW0sIGluamVjdEltcG9ydEtleXMpKX0gXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHlwZVBhcmFtKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYCR7cGFyYW1UeXBlLmlkfSR7XG4gICAgICBwYXJhbVR5cGUuY29uc3RyYWludFxuICAgICAgICA/IGAgZXh0ZW5kcyAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5jb25zdHJhaW50LCBpbmplY3RJbXBvcnRLZXlzKX1gXG4gICAgICAgIDogXCJcIlxuICAgIH1gO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgcmVzb2x2ZSDrtojqsIAgQXBpUGFyYW1UeXBlICR7cGFyYW1UeXBlfWApO1xuICB9XG59XG5cbi8qKlxuICogQXBpUGFyYW0g67Cw7Je07J2EIFR5cGVTY3JpcHQg7ZWo7IiYIO2MjOudvOuvuO2EsCDsvZTrk5zroZwg67OA7ZmY7ZWp64uI64ukLlxuICog7JiIOiBcIm5hbWU6IHN0cmluZywgYWdlPzogbnVtYmVyLCBhY3RpdmU6IGJvb2xlYW4gPSB0cnVlXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVG9Uc0NvZGUocGFyYW1zOiBBcGlQYXJhbVtdLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBwYXJhbXNcbiAgICAubWFwKChwYXJhbSkgPT4ge1xuICAgICAgcmV0dXJuIGAke3BhcmFtLm5hbWV9JHtcbiAgICAgICAgcGFyYW0ub3B0aW9uYWwgJiYgIXBhcmFtLmRlZmF1bHREZWYgPyBcIj9cIiA6IFwiXCJcbiAgICAgIH06ICR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW0udHlwZSwgaW5qZWN0SW1wb3J0S2V5cyl9JHtcbiAgICAgICAgcGFyYW0uZGVmYXVsdERlZiA/IGA9ICR7cGFyYW0uZGVmYXVsdERlZn1gIDogXCJcIlxuICAgICAgfWA7XG4gICAgfSlcbiAgICAuam9pbihcIiwgXCIpO1xufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBUeXBlU2NyaXB0IOqwneyytCDtg4DsnoUg7L2U65Oc66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyYiDogXCJ7IG5hbWU6IHN0cmluZywgYWdlPzogbnVtYmVyLCBhY3RpdmU6IGJvb2xlYW4gPSB0cnVlIH1cIlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBpUGFyYW1Ub1RzQ29kZUFzT2JqZWN0KHBhcmFtczogQXBpUGFyYW1bXSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYHsgJHtwYXJhbXNcbiAgICAubWFwKFxuICAgICAgKHBhcmFtKSA9PlxuICAgICAgICBgJHtwYXJhbS5uYW1lfSR7cGFyYW0ub3B0aW9uYWwgPyBcIj9cIiA6IFwiXCJ9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKFxuICAgICAgICAgIHBhcmFtLnR5cGUsXG4gICAgICAgICAgaW5qZWN0SW1wb3J0S2V5cyxcbiAgICAgICAgKX0ke3BhcmFtLmRlZmF1bHREZWYgPyBgPSAke3BhcmFtLmRlZmF1bHREZWZ9YCA6IFwiXCJ9YCxcbiAgICApXG4gICAgLmpvaW4oXCIsIFwiKX0gfWA7XG59XG4iXSwibmFtZXMiOlsieiIsIkFwaVBhcmFtVHlwZSIsInVud3JhcFByb21pc2VPbmNlIiwicGFyYW1UeXBlIiwiaXNQcm9taXNlIiwiYXJncyIsImdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlIiwicmVmZXJlbmNlcyIsInN0cmluZyIsIm51bWJlciIsImJvb2xlYW4iLCJhZHZUeXBlIiwidCIsImxpdGVyYWwiLCJ2YWx1ZSIsIm9ialR5cGUiLCJnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zIiwicHJvcHMiLCJhcnJUeXBlIiwiYXJyYXkiLCJlbGVtZW50c1R5cGUiLCJyZWZUeXBlIiwiaWQiLCJkYXRlIiwiaW5jbHVkZXMiLCJsZW5ndGgiLCJFcnJvciIsIm9iaiIsImxpdGVyYWxPclVuaW9uIiwibWFwIiwiYXJnIiwia2V5cyIsIlpvZFVuaW9uIiwiZGVmIiwib3B0aW9ucyIsIm9wdGlvbiIsInZhbHVlcyIsImtleVJlY29yZCIsIk9iamVjdCIsImZyb21FbnRyaWVzIiwia2V5IiwicGljayIsIm9taXQiLCJwYXJ0aWFsIiwicmVmZXJlbmNlIiwidW5kZWZpbmVkIiwidW5rbm93biIsInVuaW9uVHlwZSIsInR5cGVzIiwic29tZSIsInR5cGUiLCJudWxsYWJsZSIsInVuaW9uIiwiaW50ZXJzZWN0aW9uVHlwZSIsInJlZHVjZSIsInJlc3VsdCIsImluZGV4IiwicmVzb2x2ZWRUeXBlIiwiaW50ZXJzZWN0aW9uIiwidHVwbGVUeXBlIiwidHVwbGUiLCJlbGVtZW50cyIsImVsZW0iLCJhcGlQYXJhbXMiLCJvYmplY3QiLCJwYXJhbSIsInpvZFR5cGUiLCJvcHRpb25hbCIsIm5hbWUiLCJnZXRab2RPYmplY3RGcm9tQXBpIiwiYXBpIiwidHlwZVBhcmFtZXRlcnMiLCJ0eXBlUGFyYW0iLCJjb25zdHJhaW50IiwiUmVxVHlwZSIsInBhcmFtZXRlcnMiLCJmaWx0ZXIiLCJpc0NvbnRleHQiLCJpc1JlZktuZXgiLCJzdGFydHNXaXRoIiwiYXBpUGFyYW1UeXBlVG9Uc1R5cGUiLCJpbmplY3RJbXBvcnRLZXlzIiwiaXNPYmplY3QiLCJhcGlQYXJhbVRvVHNDb2RlIiwiaXNTdHJpbmdMaXRlcmFsIiwiaXNOdW1lcmljTGl0ZXJhbCIsIlN0cmluZyIsImlzVW5pb24iLCJqb2luIiwiaXNJbnRlcnNlY3Rpb24iLCJpc0FycmF5IiwiaXNSZWYiLCJwdXNoIiwiaXNJbmRleGVkQWNjZXNzIiwiaXNUdXBsZVR5cGUiLCJpc1R5cGVQYXJhbSIsInBhcmFtcyIsImRlZmF1bHREZWYiLCJhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3QiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrQkMsR0FFRCxTQUFTQSxDQUFDLFFBQVEsTUFBTTtBQUd4QixTQUF3QkMsWUFBWSxRQUFRLG9CQUFpQjtBQU83RDs7O0NBR0MsR0FDRCxPQUFPLFNBQVNDLGtCQUFrQkMsU0FBdUI7SUFDdkQsSUFBSUYsYUFBYUcsU0FBUyxDQUFDRCxZQUFZO1FBQ3JDLE9BQU9BLFVBQVVFLElBQUksRUFBRSxDQUFDLEVBQUU7SUFDNUIsT0FBTztRQUNMLE9BQU9GO0lBQ1Q7QUFDRjtBQUVBOztDQUVDLEdBRUQ7Ozs7Q0FJQyxHQUNELE9BQU8sU0FBU0csMkJBQ2RILFNBQXVCLEVBQ3ZCSSxVQUVDO0lBRUQsT0FBUUo7UUFDTixLQUFLO1lBQ0gsT0FBT0gsRUFBRVEsTUFBTTtRQUNqQixLQUFLO1lBQ0gsT0FBT1IsRUFBRVMsTUFBTTtRQUNqQixLQUFLO1lBQ0gsT0FBT1QsRUFBRVUsT0FBTztRQUNsQjtZQUFTO2dCQUNQLE1BQU1DLFVBQVVSO2dCQUNoQixPQUFRUSxRQUFRQyxDQUFDO29CQUNmLEtBQUs7b0JBQ0wsS0FBSzt3QkFDSCxPQUFPWixFQUFFYSxPQUFPLENBQUNGLFFBQVFHLEtBQUs7b0JBQ2hDLEtBQUs7d0JBQVU7NEJBQ2IsTUFBTUMsVUFBVVo7NEJBQ2hCLE9BQU9hLDBCQUEwQkQsUUFBUUUsS0FBSzt3QkFDaEQ7b0JBQ0EsS0FBSzt3QkFBUzs0QkFDWixNQUFNQyxVQUFVZjs0QkFJaEIsT0FBT0gsRUFBRW1CLEtBQUssQ0FBQ2IsMkJBQTJCWSxRQUFRRSxZQUFZLEVBQUViO3dCQUNsRTtvQkFDQSxLQUFLO3dCQUFPOzRCQUNWLE1BQU1jLFVBQVVsQjs0QkFLaEIsYUFBYTs0QkFDYixJQUFJa0IsUUFBUUMsRUFBRSxLQUFLLFFBQVE7Z0NBQ3pCLE9BQU90QixFQUFFdUIsSUFBSTs0QkFDZjs0QkFDQSxlQUFlOzRCQUNmLElBQUk7Z0NBQUM7Z0NBQVE7NkJBQU8sQ0FBQ0MsUUFBUSxDQUFDSCxRQUFRQyxFQUFFLEdBQUc7Z0NBQ3pDLElBQUlELFFBQVFoQixJQUFJLEVBQUVvQixXQUFXLEdBQUc7b0NBQzlCLE1BQU0sSUFBSUMsTUFBTSxDQUFDLElBQUksRUFBRUwsUUFBUUMsRUFBRSxFQUFFO2dDQUNyQztnQ0FDQSxNQUFNLENBQUNLLEtBQUtDLGVBQWUsR0FBR1AsUUFBUWhCLElBQUksQ0FBQ3dCLEdBQUcsQ0FDNUMsQ0FBQ0MsTUFBUXhCLDJCQUEyQndCLEtBQUt2QjtnQ0FJM0MsSUFBSXdCLE9BQWlCLEVBQUU7Z0NBQ3ZCLElBQUlILDBCQUEwQjVCLEVBQUVnQyxRQUFRLEVBQUU7b0NBQ3hDRCxPQUFPSCxlQUFlSyxHQUFHLENBQUNDLE9BQU8sQ0FBQ0wsR0FBRyxDQUNuQyxDQUFDTSxTQUEwQ0EsT0FBT0YsR0FBRyxDQUFDRyxNQUFNLENBQUMsRUFBRTtnQ0FFbkUsT0FBTztvQ0FDTEwsT0FBTyxBQUFDSCxlQUF3Q0ssR0FBRyxDQUFDRyxNQUFNO2dDQUM1RDtnQ0FDQSxNQUFNQyxZQUFZQyxPQUFPQyxXQUFXLENBQUNSLEtBQUtGLEdBQUcsQ0FBQyxDQUFDVyxNQUFRO3dDQUFDQTt3Q0FBSztxQ0FBYztnQ0FDM0UsSUFBSW5CLFFBQVFDLEVBQUUsS0FBSyxRQUFRO29DQUN6QixJQUFJSyxJQUFJYyxJQUFJLEVBQUU7d0NBQ1osT0FBT2QsSUFBSWMsSUFBSSxDQUFDSjtvQ0FDbEI7Z0NBQ0YsT0FBTztvQ0FDTCxJQUFJVixJQUFJZSxJQUFJLEVBQUU7d0NBQ1osT0FBT2YsSUFBSWUsSUFBSSxDQUFDTDtvQ0FDbEI7Z0NBQ0Y7NEJBQ0Y7NEJBQ0EsSUFBSTtnQ0FBQzs2QkFBVSxDQUFDYixRQUFRLENBQUNILFFBQVFDLEVBQUUsR0FBRztnQ0FDcEMsSUFBSUQsUUFBUWhCLElBQUksRUFBRW9CLFdBQVcsR0FBRztvQ0FDOUIsTUFBTSxJQUFJQyxNQUFNLENBQUMsSUFBSSxFQUFFTCxRQUFRQyxFQUFFLEVBQUU7Z0NBQ3JDO2dDQUNBLE1BQU1LLE1BQU1yQiwyQkFBMkJlLFFBQVFoQixJQUFJLENBQUMsRUFBRSxFQUFFRTtnQ0FDeEQsZ0VBQWdFO2dDQUNoRSxPQUFPLEFBQUNvQixJQUF5QmdCLE9BQU87NEJBQzFDOzRCQUNBLE1BQU1DLFlBQVlyQyxVQUFVLENBQUNjLFFBQVFDLEVBQUUsQ0FBQzs0QkFDeEMsSUFBSXNCLGNBQWNDLFdBQVc7Z0NBQzNCLE9BQU83QyxFQUFFOEMsT0FBTzs0QkFDaEIsOENBQThDOzRCQUNoRDs0QkFDQSxPQUFPRjt3QkFDVDtvQkFDQSxLQUFLO3dCQUFTOzRCQUNaLE1BQU1HLFlBQVk1Qzs0QkFJbEIsZUFBZTs0QkFDZixJQUFJNEMsVUFBVUMsS0FBSyxDQUFDdkIsTUFBTSxLQUFLLEtBQUtzQixVQUFVQyxLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDQyxPQUFTQSxTQUFTLFNBQVM7Z0NBQ25GLElBQUlILFVBQVVDLEtBQUssQ0FBQyxFQUFFLEtBQUssUUFBUTtvQ0FDakMsT0FBTzFDLDJCQUEyQnlDLFVBQVVDLEtBQUssQ0FBQyxFQUFFLEVBQUV6QyxZQUFZNEMsUUFBUTtnQ0FDNUUsT0FBTztvQ0FDTCxPQUFPN0MsMkJBQTJCeUMsVUFBVUMsS0FBSyxDQUFDLEVBQUUsRUFBRXpDLFlBQVk0QyxRQUFRO2dDQUM1RTs0QkFDRjs0QkFDQSxTQUFTOzRCQUNULE9BQU9uRCxFQUFFb0QsS0FBSyxDQUNaTCxVQUFVQyxLQUFLLENBQUNuQixHQUFHLENBQUMsQ0FBQ3FCLE9BQVM1QywyQkFBMkI0QyxNQUFNM0M7d0JBRW5FO29CQUNBLEtBQUs7d0JBQWdCOzRCQUNuQixNQUFNOEMsbUJBQW1CbEQ7NEJBSXpCLE9BQU9rRCxpQkFBaUJMLEtBQUssQ0FBQ00sTUFBTSxDQUNsQyxDQUFDQyxRQUFRTCxNQUFNTTtnQ0FDYixNQUFNQyxlQUFlbkQsMkJBQTJCNEMsTUFBTTNDO2dDQUN0RCxJQUFJaUQsVUFBVSxHQUFHO29DQUNmLE9BQU9DO2dDQUNULE9BQU87b0NBQ0wsT0FBT3pELEVBQUUwRCxZQUFZLENBQUNILFFBQVFFO2dDQUNoQzs0QkFDRixHQUNBekQsRUFBRThDLE9BQU87d0JBRWI7b0JBQ0EsS0FBSzt3QkFBYzs0QkFDakIsTUFBTWEsWUFBWXhEOzRCQUNsQixPQUFPSCxFQUFFNEQsS0FBSyxDQUNaLDBFQUEwRTs0QkFDMUVELFVBQVVFLFFBQVEsQ0FBQ2hDLEdBQUcsQ0FBQyxDQUFDaUMsT0FBU3hELDJCQUEyQndELE1BQU12RDt3QkFFdEU7Z0JBQ0Y7Z0JBQ0EsT0FBT1AsRUFBRThDLE9BQU87WUFDbEI7SUFDRjtBQUNGO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTOUIsMEJBQ2QrQyxTQUFxQixFQUNyQnhELGFBRUksQ0FBQyxDQUFDO0lBRU4sT0FBT1AsRUFBRWdFLE1BQU0sQ0FDYjFCLE9BQU9DLFdBQVcsQ0FDaEJ3QixVQUFVbEMsR0FBRyxDQUFDLENBQUNvQztRQUNiLElBQUlDLFVBQVU1RCwyQkFBMkIyRCxNQUFNZixJQUFJLEVBQUUzQztRQUNyRCxJQUFJMEQsTUFBTUUsUUFBUSxFQUFFO1lBQ2xCRCxVQUFVQSxRQUFRQyxRQUFRO1FBQzVCO1FBQ0EsT0FBTztZQUFDRixNQUFNRyxJQUFJO1lBQUVGO1NBQVE7SUFDOUI7QUFHTjtBQUVBOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVNHLG9CQUNkQyxHQUFnQixFQUNoQi9ELGFBRUksQ0FBQyxDQUFDO0lBRU4sSUFBSStELElBQUlDLGNBQWMsRUFBRTlDLFNBQVMsR0FBRztRQUNsQyxLQUFLLE1BQU0rQyxhQUFhRixJQUFJQyxjQUFjLENBQUU7WUFDMUMsSUFBSUMsVUFBVUMsVUFBVSxFQUFFO2dCQUN4QixNQUFNUCxVQUFVNUQsMkJBQTJCa0UsVUFBVUMsVUFBVSxFQUFFbEU7Z0JBQ2pFLDBEQUEwRDtnQkFDekRBLFVBQVUsQ0FBQ2lFLFVBQVVsRCxFQUFFLENBQUMsR0FBc0I0QztZQUNqRDtRQUNGO0lBQ0Y7SUFDQSxNQUFNUSxVQUFVMUQsMEJBQ2QsOEJBQThCO0lBQzlCc0QsSUFBSUssVUFBVSxDQUFDQyxNQUFNLENBQ25CLENBQUNYLFFBQ0MsQ0FBQ2hFLGFBQWE0RSxTQUFTLENBQUNaLE1BQU1mLElBQUksS0FDbEMsQ0FBQ2pELGFBQWE2RSxTQUFTLENBQUNiLE1BQU1mLElBQUksS0FDbEMsQ0FBRWUsQ0FBQUEsTUFBTUUsUUFBUSxLQUFLLFFBQVFGLE1BQU1HLElBQUksQ0FBQ1csVUFBVSxDQUFDLElBQUcsSUFFMUR4RTtJQUVGLE9BQU9tRTtBQUNUO0FBRUE7O0NBRUMsR0FFRDs7OztDQUlDLEdBQ0QsT0FBTyxTQUFTTSxxQkFBcUI3RSxTQUF1QixFQUFFOEUsZ0JBQTBCO0lBQ3RGLElBQ0U7UUFDRTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNELENBQUN6RCxRQUFRLENBQUNyQixZQUNYO1FBQ0EsT0FBT0E7SUFDVCxPQUFPLElBQUlGLGFBQWFpRixRQUFRLENBQUMvRSxZQUFZO1FBQzNDLE9BQU8sQ0FBQyxFQUFFLEVBQUVnRixpQkFBaUJoRixVQUFVYyxLQUFLLEVBQUVnRSxrQkFBa0IsRUFBRSxDQUFDO0lBQ3JFLE9BQU8sSUFBSWhGLGFBQWFtRixlQUFlLENBQUNqRixZQUFZO1FBQ2xELE9BQU8sQ0FBQyxDQUFDLEVBQUVBLFVBQVVXLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDL0IsT0FBTyxJQUFJYixhQUFhb0YsZ0JBQWdCLENBQUNsRixZQUFZO1FBQ25ELE9BQU9tRixPQUFPbkYsVUFBVVcsS0FBSztJQUMvQixPQUFPLElBQUliLGFBQWFzRixPQUFPLENBQUNwRixZQUFZO1FBQzFDLE9BQU9BLFVBQVU2QyxLQUFLLENBQUNuQixHQUFHLENBQUMsQ0FBQ3FCLE9BQVM4QixxQkFBcUI5QixNQUFNK0IsbUJBQW1CTyxJQUFJLENBQUM7SUFDMUYsT0FBTyxJQUFJdkYsYUFBYXdGLGNBQWMsQ0FBQ3RGLFlBQVk7UUFDakQsT0FBT0EsVUFBVTZDLEtBQUssQ0FBQ25CLEdBQUcsQ0FBQyxDQUFDcUIsT0FBUzhCLHFCQUFxQjlCLE1BQU0rQixtQkFBbUJPLElBQUksQ0FBQztJQUMxRixPQUFPLElBQUl2RixhQUFheUYsT0FBTyxDQUFDdkYsWUFBWTtRQUMxQyxPQUFPLEdBQUc2RSxxQkFBcUI3RSxVQUFVaUIsWUFBWSxFQUFFNkQsa0JBQWtCLEVBQUUsQ0FBQztJQUM5RSxPQUFPLElBQUloRixhQUFhMEYsS0FBSyxDQUFDeEYsWUFBWTtRQUN4QyxJQUFJO1lBQUM7WUFBUTtZQUFRO1lBQVc7WUFBVztTQUFPLENBQUNxQixRQUFRLENBQUNyQixVQUFVbUIsRUFBRSxNQUFNLE9BQU87WUFDbkYsaUJBQWlCO1lBQ2pCMkQsaUJBQWlCVyxJQUFJLENBQUN6RixVQUFVbUIsRUFBRTtRQUNwQztRQUNBLElBQUluQixVQUFVRSxJQUFJLEtBQUt3QyxhQUFhMUMsVUFBVUUsSUFBSSxDQUFDb0IsTUFBTSxLQUFLLEdBQUc7WUFDL0QsT0FBT3RCLFVBQVVtQixFQUFFO1FBQ3JCLE9BQU87WUFDTCxPQUFPLEdBQUduQixVQUFVbUIsRUFBRSxDQUFDLENBQUMsRUFBRW5CLFVBQVVFLElBQUksQ0FDckN3QixHQUFHLENBQUMsQ0FBQ0MsTUFBUWtELHFCQUFxQmxELEtBQUttRCxtQkFDdkNPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQjtJQUNGLE9BQU8sSUFBSXZGLGFBQWE0RixlQUFlLENBQUMxRixZQUFZO1FBQ2xELE9BQU8sR0FBRzZFLHFCQUNSN0UsVUFBVTZELE1BQU0sRUFDaEJpQixrQkFDQSxDQUFDLEVBQUVELHFCQUFxQjdFLFVBQVVxRCxLQUFLLEVBQUV5QixrQkFBa0IsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sSUFBSWhGLGFBQWE2RixXQUFXLENBQUMzRixZQUFZO1FBQzlDLE9BQU8sQ0FBQyxFQUFFLEVBQUVBLFVBQVUwRCxRQUFRLENBQUNoQyxHQUFHLENBQUMsQ0FBQ2lDLE9BQVNrQixxQkFBcUJsQixNQUFNbUIsbUJBQW1CLEVBQUUsQ0FBQztJQUNoRyxPQUFPLElBQUloRixhQUFhOEYsV0FBVyxDQUFDNUYsWUFBWTtRQUM5QyxPQUFPLEdBQUdBLFVBQVVtQixFQUFFLEdBQ3BCbkIsVUFBVXNFLFVBQVUsR0FDaEIsQ0FBQyxTQUFTLEVBQUVPLHFCQUFxQjdFLFVBQVVzRSxVQUFVLEVBQUVRLG1CQUFtQixHQUMxRSxJQUNKO0lBQ0osT0FBTztRQUNMLE1BQU0sSUFBSXZELE1BQU0sQ0FBQyx3QkFBd0IsRUFBRXZCLFdBQVc7SUFDeEQ7QUFDRjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBU2dGLGlCQUFpQmEsTUFBa0IsRUFBRWYsZ0JBQTBCO0lBQzdFLE9BQU9lLE9BQ0puRSxHQUFHLENBQUMsQ0FBQ29DO1FBQ0osT0FBTyxHQUFHQSxNQUFNRyxJQUFJLEdBQ2xCSCxNQUFNRSxRQUFRLElBQUksQ0FBQ0YsTUFBTWdDLFVBQVUsR0FBRyxNQUFNLEdBQzdDLEVBQUUsRUFBRWpCLHFCQUFxQmYsTUFBTWYsSUFBSSxFQUFFK0Isb0JBQ3BDaEIsTUFBTWdDLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRWhDLE1BQU1nQyxVQUFVLEVBQUUsR0FBRyxJQUM3QztJQUNKLEdBQ0NULElBQUksQ0FBQztBQUNWO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTVSx5QkFBeUJGLE1BQWtCLEVBQUVmLGdCQUEwQjtJQUNyRixPQUFPLENBQUMsRUFBRSxFQUFFZSxPQUNUbkUsR0FBRyxDQUNGLENBQUNvQyxRQUNDLEdBQUdBLE1BQU1HLElBQUksR0FBR0gsTUFBTUUsUUFBUSxHQUFHLE1BQU0sR0FBRyxFQUFFLEVBQUVhLHFCQUM1Q2YsTUFBTWYsSUFBSSxFQUNWK0Isb0JBQ0VoQixNQUFNZ0MsVUFBVSxHQUFHLENBQUMsRUFBRSxFQUFFaEMsTUFBTWdDLFVBQVUsRUFBRSxHQUFHLElBQUksRUFFeERULElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNuQiJ9
@@ -18,11 +18,11 @@ export function defineConfig(config) {
18
18
  * @returns
19
19
  */ export async function loadConfig(rootPath) {
20
20
  const start = performance.now();
21
- const configPath = process.env.HOT === "yes" || process.env.VITEST === "true" ? `${rootPath}/sonamu.config.ts` : `${rootPath}/dist/sonamu.config.js`;
21
+ const configPath = process.env.HOT === "yes" || process.env.VITEST === "true" ? `${rootPath}/src/sonamu.config.ts` : `${rootPath}/dist/sonamu.config.js`;
22
22
  const { default: config } = await import(`file://${configPath}`);
23
23
  const importTime = performance.now() - start;
24
24
  process.env.NODE_ENV !== "test" && console.log(`[TIMING] loadConfig took ${importTime.toFixed(2)}ms`);
25
25
  return config;
26
26
  }
27
27
 
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeUNvcnNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2NvcnNcIjtcbmltcG9ydCB0eXBlIHsgRmFzdGlmeUZvcm1ib2R5T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9mb3JtYm9keVwiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcbmltcG9ydCB0eXBlIHsgRGVzZXJpYWxpemVGdW5jdGlvbiwgU2VyaWFsaXplRnVuY3Rpb24gfSBmcm9tIFwiQGZhc3RpZnkvcGFzc3BvcnQvZGlzdC9BdXRoZW50aWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3VyZVNlc3Npb25QbHVnaW5PcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3NlY3VyZS1zZXNzaW9uXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlTdGF0aWNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3N0YXRpY1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UsIEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QsIEZhc3RpZnlTZXJ2ZXJPcHRpb25zIH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB0eXBlIHsgUXNQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktcXNcIjtcbmltcG9ydCB0eXBlIHsgU3NlUGx1Z2luT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5LXNzZS12Mi9saWIvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgdHlwZSB7IERyaXZlciB9IGZyb20gXCIuLi9maWxlLXN0b3JhZ2UvZHJpdmVyXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdUZhc3RpZnlDb25maWcgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VDb25maWcgPSBPbWl0PEtuZXguQ29uZmlnLCBcImNvbm5lY3Rpb25cIj4gJiB7XG4gIGNvbm5lY3Rpb24/OiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdUNvbmZpZyA9IHtcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgYXBpOiB7XG4gICAgZGlyOiBzdHJpbmc7XG4gICAgcm91dGU6IHtcbiAgICAgIHByZWZpeDogc3RyaW5nO1xuICAgIH07XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIH07XG4gIHN5bmM6IHtcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTsgLy8gXCJ3ZWJcIiwgXCJhcHBcIiDrk7FcbiAgfTtcbiAgdWk/OiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICB9O1xuXG4gIGRhdGFiYXNlOiB7XG4gICAgLy8g642w7J207YSw67Kg7J207IqkXG4gICAgZGF0YWJhc2U/OiBcInBvc3RncmVzcWxcIjtcbiAgICAvLyDquLDrs7gg642w7J207YSw67Kg7J207IqkIOydtOumhFxuICAgIG5hbWU6IHN0cmluZztcbiAgICAvLyDrqqjrk6Ag7ZmY6rK97JeQIOyggeyaqeuQoCDquLDrs7ggS25leCDsmLXshZhcbiAgICBkZWZhdWx0T3B0aW9uczogRGF0YWJhc2VDb25maWc7XG4gICAgLy8g7ZmY6rK967OEIOyEpOyglVxuICAgIGVudmlyb25tZW50cz86IHtcbiAgICAgIGRldmVsb3BtZW50PzogRGF0YWJhc2VDb25maWc7XG4gICAgICBkZXZlbG9wbWVudF9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbj86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbl9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcmVtb3RlX2ZpeHR1cmU/OiBEYXRhYmFzZUNvbmZpZztcbiAgICB9O1xuICB9O1xuXG4gIHNlcnZlcjogU29uYW11U2VydmVyT3B0aW9ucztcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVNlcnZlck9wdGlvbnMgPSB7XG4gIGZhc3RpZnk/OiBGYXN0aWZ5U2VydmVyT3B0aW9ucztcblxuICBsaXN0ZW4/OiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIGhvc3Q/OiBzdHJpbmc7XG4gIH07XG5cbiAgcGx1Z2lucz86IHtcbiAgICBjb3JzPzogYm9vbGVhbiB8IEZhc3RpZnlDb3JzT3B0aW9ucztcbiAgICBmb3JtYm9keT86IGJvb2xlYW4gfCBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zO1xuICAgIG11bHRpcGFydD86IGJvb2xlYW4gfCBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucztcbiAgICBxcz86IGJvb2xlYW4gfCBRc1BsdWdpbk9wdGlvbnM7XG4gICAgc3NlPzogYm9vbGVhbiB8IFNzZVBsdWdpbk9wdGlvbnM7XG4gICAgc3RhdGljPzogYm9vbGVhbiB8IEZhc3RpZnlTdGF0aWNPcHRpb25zO1xuICAgIHNlc3Npb24/OiBib29sZWFuIHwgU2VjdXJlU2Vzc2lvblBsdWdpbk9wdGlvbnM7XG5cbiAgICBjdXN0b20/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IHZvaWQ7XG4gIH07XG5cbiAgYXV0aD86XG4gICAgfCBib29sZWFuXG4gICAgfCB7XG4gICAgICAgIHVzZXJTZXJpYWxpemVyOiBTZXJpYWxpemVGdW5jdGlvbjx1bmtub3duLCB1bmtub3duPjtcbiAgICAgICAgdXNlckRlc2VyaWFsaXplcjogRGVzZXJpYWxpemVGdW5jdGlvbjx1bmtub3duLCB1bmtub3duPjtcbiAgICAgIH07XG5cbiAgYXBpQ29uZmlnOiBTb25hbXVGYXN0aWZ5Q29uZmlnO1xuXG4gIHN0b3JhZ2U/OiBEcml2ZXI7XG5cbiAgbGlmZWN5Y2xlPzoge1xuICAgIG9uU3RhcnQ/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uU2h1dGRvd24/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCwgcmVwbHk6IEZhc3RpZnlSZXBseSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIH07XG59O1xuXG4vLyBOT1RFKEhhemUsIDI1MTIwOSk6IGNvbmZpZ+yXkOuKlCBULCBQcm9taXNlPFQ+LCAoKSA9PiBULCAoKSA9PiBQcm9taXNlPFQ+6rCAIOuqqOuRkCDsmKwg7IiYIOyeiOyWtOyVvCDtlaguXG5leHBvcnQgdHlwZSBTb25hbXVDb25maWdFeHBvcnQgPVxuICB8IFNvbmFtdUNvbmZpZ1xuICB8IFByb21pc2U8U29uYW11Q29uZmlnPlxuICB8ICgoKSA9PiBTb25hbXVDb25maWcpXG4gIHwgKCgpID0+IFByb21pc2U8U29uYW11Q29uZmlnPik7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWcoY29uZmlnOiBTb25hbXVDb25maWcpOiBQcm9taXNlPFNvbmFtdUNvbmZpZz47XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnKGNvbmZpZzogUHJvbWlzZTxTb25hbXVDb25maWc+KTogUHJvbWlzZTxTb25hbXVDb25maWc+O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbmZpZyhjb25maWc6ICgpID0+IFNvbmFtdUNvbmZpZyk6IFByb21pc2U8U29uYW11Q29uZmlnPjtcbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWcoY29uZmlnOiAoKSA9PiBQcm9taXNlPFNvbmFtdUNvbmZpZz4pOiBQcm9taXNlPFNvbmFtdUNvbmZpZz47XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnKGNvbmZpZzogU29uYW11Q29uZmlnRXhwb3J0KTogUHJvbWlzZTxTb25hbXVDb25maWc+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29uZmlnKCkpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maWcpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5jb25maWcudHMg7YyM7J287J2EIOuhnOuTnO2VqeuLiOuLpC5cbiAqIOydtCDshKTsoJUg7YyM7J287J2AIO2ZmOqyveyXkCDrlLDrnbwg64uk66W4IOqyveuhnOyXkCDsnojsnYQg7IiYIOyeiOyKteuLiOuLpC5cbiAqIGRpc3Trpbwg67mM65Oc7ZWY64qUIO2ZmOqyveydtOudvOuptCBkaXN0IOuwlOuhnCDslYTrnpjsl5Ag7J6I7J2EIOqyg+ydtOqzoChjbGktd3JhcHBlci50c+yXkOyEnCDruYzrk5wpLFxuICog6re466CH7KeAIOyViuydgCDtmZjqsr3snbTrnbzrqbQg7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkCDsnojsnYQg6rKD7J6F64uI64ukLlxuICpcbiAqIOydtCDtlajsiJjripQg7J2Y64+E7KCB7Jy866GcIOuLpOuluCDsnZjsobTshLHsnZgg7IKs7Jqp7J2EIOy1nOuMgO2VnCDrsLDsoJztlZjsmIDsirXri4jri6QuXG4gKiDsnbTripQg7Iuk7ZaJIOy0iOq4sOyXkCDstZzrjIDtlZwg67mg66W06rKMIOyEpOygleydhCDsnb3slrTsmKwg7IiYIOyeiOuPhOuhnSDtlZjquLAg7JyE7ZWo7J6F64uI64ukLlxuICog65Sw65287IScIOqyveuhnCBjb25jYXTqs7wgVVJMIHNjaGVtZSDstpTqsIDrj4Qg64uo7Iic7ZWcIOusuOyekOyXtCDsobDsnpHsnLzroZwg7LKY66as7ZWY7JiA7Iq164uI64ukLlxuICpcbiAqIEBwYXJhbSByb290UGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDb25maWcocm9vdFBhdGg6IHN0cmluZyk6IFByb21pc2U8U29uYW11Q29uZmlnPiB7XG4gIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPVxuICAgIHByb2Nlc3MuZW52LkhPVCA9PT0gXCJ5ZXNcIiB8fCBwcm9jZXNzLmVudi5WSVRFU1QgPT09IFwidHJ1ZVwiXG4gICAgICA/IGAke3Jvb3RQYXRofS9zb25hbXUuY29uZmlnLnRzYFxuICAgICAgOiBgJHtyb290UGF0aH0vZGlzdC9zb25hbXUuY29uZmlnLmpzYDtcbiAgY29uc3QgeyBkZWZhdWx0OiBjb25maWcgfSA9IGF3YWl0IGltcG9ydChgZmlsZTovLyR7Y29uZmlnUGF0aH1gKTtcbiAgY29uc3QgaW1wb3J0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnQ7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInRlc3RcIiAmJlxuICAgIGNvbnNvbGUubG9nKGBbVElNSU5HXSBsb2FkQ29uZmlnIHRvb2sgJHtpbXBvcnRUaW1lLnRvRml4ZWQoMil9bXNgKTtcbiAgcmV0dXJuIGNvbmZpZztcbn1cbiJdLCJuYW1lcyI6WyJkZWZpbmVDb25maWciLCJjb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsImxvYWRDb25maWciLCJyb290UGF0aCIsInN0YXJ0IiwicGVyZm9ybWFuY2UiLCJub3ciLCJjb25maWdQYXRoIiwicHJvY2VzcyIsImVudiIsIkhPVCIsIlZJVEVTVCIsImRlZmF1bHQiLCJpbXBvcnRUaW1lIiwiTk9ERV9FTlYiLCJjb25zb2xlIiwibG9nIiwidG9GaXhlZCJdLCJtYXBwaW5ncyI6IkFBdUdBLE9BQU8sU0FBU0EsYUFBYUMsTUFBMEI7SUFDckQsSUFBSSxPQUFPQSxXQUFXLFlBQVk7UUFDaEMsT0FBT0MsUUFBUUMsT0FBTyxDQUFDRjtJQUN6QjtJQUVBLE9BQU9DLFFBQVFDLE9BQU8sQ0FBQ0Y7QUFDekI7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLGVBQWVHLFdBQVdDLFFBQWdCO0lBQy9DLE1BQU1DLFFBQVFDLFlBQVlDLEdBQUc7SUFDN0IsTUFBTUMsYUFDSkMsUUFBUUMsR0FBRyxDQUFDQyxHQUFHLEtBQUssU0FBU0YsUUFBUUMsR0FBRyxDQUFDRSxNQUFNLEtBQUssU0FDaEQsR0FBR1IsU0FBUyxpQkFBaUIsQ0FBQyxHQUM5QixHQUFHQSxTQUFTLHNCQUFzQixDQUFDO0lBQ3pDLE1BQU0sRUFBRVMsU0FBU2IsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUVRLFlBQVk7SUFDL0QsTUFBTU0sYUFBYVIsWUFBWUMsR0FBRyxLQUFLRjtJQUN2Q0ksUUFBUUMsR0FBRyxDQUFDSyxRQUFRLEtBQUssVUFDdkJDLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QixFQUFFSCxXQUFXSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbkUsT0FBT2xCO0FBQ1QifQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeUNvcnNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2NvcnNcIjtcbmltcG9ydCB0eXBlIHsgRmFzdGlmeUZvcm1ib2R5T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9mb3JtYm9keVwiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcbmltcG9ydCB0eXBlIHsgRGVzZXJpYWxpemVGdW5jdGlvbiwgU2VyaWFsaXplRnVuY3Rpb24gfSBmcm9tIFwiQGZhc3RpZnkvcGFzc3BvcnQvZGlzdC9BdXRoZW50aWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3VyZVNlc3Npb25QbHVnaW5PcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3NlY3VyZS1zZXNzaW9uXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlTdGF0aWNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3N0YXRpY1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UsIEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QsIEZhc3RpZnlTZXJ2ZXJPcHRpb25zIH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB0eXBlIHsgUXNQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktcXNcIjtcbmltcG9ydCB0eXBlIHsgU3NlUGx1Z2luT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5LXNzZS12Mi9saWIvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgdHlwZSB7IERyaXZlciB9IGZyb20gXCIuLi9maWxlLXN0b3JhZ2UvZHJpdmVyXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdUZhc3RpZnlDb25maWcgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VDb25maWcgPSBPbWl0PEtuZXguQ29uZmlnLCBcImNvbm5lY3Rpb25cIj4gJiB7XG4gIGNvbm5lY3Rpb24/OiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdUNvbmZpZyA9IHtcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgYXBpOiB7XG4gICAgZGlyOiBzdHJpbmc7XG4gICAgcm91dGU6IHtcbiAgICAgIHByZWZpeDogc3RyaW5nO1xuICAgIH07XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIH07XG4gIHN5bmM6IHtcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTsgLy8gXCJ3ZWJcIiwgXCJhcHBcIiDrk7FcbiAgfTtcbiAgdWk/OiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICB9O1xuXG4gIGRhdGFiYXNlOiB7XG4gICAgLy8g642w7J207YSw67Kg7J207IqkXG4gICAgZGF0YWJhc2U/OiBcInBvc3RncmVzcWxcIjtcbiAgICAvLyDquLDrs7gg642w7J207YSw67Kg7J207IqkIOydtOumhFxuICAgIG5hbWU6IHN0cmluZztcbiAgICAvLyDrqqjrk6Ag7ZmY6rK97JeQIOyggeyaqeuQoCDquLDrs7ggS25leCDsmLXshZhcbiAgICBkZWZhdWx0T3B0aW9uczogRGF0YWJhc2VDb25maWc7XG4gICAgLy8g7ZmY6rK967OEIOyEpOyglVxuICAgIGVudmlyb25tZW50cz86IHtcbiAgICAgIGRldmVsb3BtZW50PzogRGF0YWJhc2VDb25maWc7XG4gICAgICBkZXZlbG9wbWVudF9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbj86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbl9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcmVtb3RlX2ZpeHR1cmU/OiBEYXRhYmFzZUNvbmZpZztcbiAgICB9O1xuICB9O1xuXG4gIHNlcnZlcjogU29uYW11U2VydmVyT3B0aW9ucztcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVNlcnZlck9wdGlvbnMgPSB7XG4gIGZhc3RpZnk/OiBGYXN0aWZ5U2VydmVyT3B0aW9ucztcblxuICBsaXN0ZW4/OiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIGhvc3Q/OiBzdHJpbmc7XG4gIH07XG5cbiAgcGx1Z2lucz86IHtcbiAgICBjb3JzPzogYm9vbGVhbiB8IEZhc3RpZnlDb3JzT3B0aW9ucztcbiAgICBmb3JtYm9keT86IGJvb2xlYW4gfCBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zO1xuICAgIG11bHRpcGFydD86IGJvb2xlYW4gfCBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucztcbiAgICBxcz86IGJvb2xlYW4gfCBRc1BsdWdpbk9wdGlvbnM7XG4gICAgc3NlPzogYm9vbGVhbiB8IFNzZVBsdWdpbk9wdGlvbnM7XG4gICAgc3RhdGljPzogYm9vbGVhbiB8IEZhc3RpZnlTdGF0aWNPcHRpb25zO1xuICAgIHNlc3Npb24/OiBib29sZWFuIHwgU2VjdXJlU2Vzc2lvblBsdWdpbk9wdGlvbnM7XG5cbiAgICBjdXN0b20/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IHZvaWQ7XG4gIH07XG5cbiAgYXV0aD86XG4gICAgfCBib29sZWFuXG4gICAgfCB7XG4gICAgICAgIHVzZXJTZXJpYWxpemVyOiBTZXJpYWxpemVGdW5jdGlvbjx1bmtub3duLCB1bmtub3duPjtcbiAgICAgICAgdXNlckRlc2VyaWFsaXplcjogRGVzZXJpYWxpemVGdW5jdGlvbjx1bmtub3duLCB1bmtub3duPjtcbiAgICAgIH07XG5cbiAgYXBpQ29uZmlnOiBTb25hbXVGYXN0aWZ5Q29uZmlnO1xuXG4gIHN0b3JhZ2U/OiBEcml2ZXI7XG5cbiAgbGlmZWN5Y2xlPzoge1xuICAgIG9uU3RhcnQ/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uU2h1dGRvd24/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCwgcmVwbHk6IEZhc3RpZnlSZXBseSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIH07XG59O1xuXG4vLyBOT1RFKEhhemUsIDI1MTIwOSk6IGNvbmZpZ+yXkOuKlCBULCBQcm9taXNlPFQ+LCAoKSA9PiBULCAoKSA9PiBQcm9taXNlPFQ+6rCAIOuqqOuRkCDsmKwg7IiYIOyeiOyWtOyVvCDtlaguXG5leHBvcnQgdHlwZSBTb25hbXVDb25maWdFeHBvcnQgPVxuICB8IFNvbmFtdUNvbmZpZ1xuICB8IFByb21pc2U8U29uYW11Q29uZmlnPlxuICB8ICgoKSA9PiBTb25hbXVDb25maWcpXG4gIHwgKCgpID0+IFByb21pc2U8U29uYW11Q29uZmlnPik7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWcoY29uZmlnOiBTb25hbXVDb25maWcpOiBQcm9taXNlPFNvbmFtdUNvbmZpZz47XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnKGNvbmZpZzogUHJvbWlzZTxTb25hbXVDb25maWc+KTogUHJvbWlzZTxTb25hbXVDb25maWc+O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbmZpZyhjb25maWc6ICgpID0+IFNvbmFtdUNvbmZpZyk6IFByb21pc2U8U29uYW11Q29uZmlnPjtcbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWcoY29uZmlnOiAoKSA9PiBQcm9taXNlPFNvbmFtdUNvbmZpZz4pOiBQcm9taXNlPFNvbmFtdUNvbmZpZz47XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnKGNvbmZpZzogU29uYW11Q29uZmlnRXhwb3J0KTogUHJvbWlzZTxTb25hbXVDb25maWc+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29uZmlnKCkpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maWcpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5jb25maWcudHMg7YyM7J287J2EIOuhnOuTnO2VqeuLiOuLpC5cbiAqIOydtCDshKTsoJUg7YyM7J287J2AIO2ZmOqyveyXkCDrlLDrnbwg64uk66W4IOqyveuhnOyXkCDsnojsnYQg7IiYIOyeiOyKteuLiOuLpC5cbiAqIGRpc3Trpbwg67mM65Oc7ZWY64qUIO2ZmOqyveydtOudvOuptCBkaXN0IOuwlOuhnCDslYTrnpjsl5Ag7J6I7J2EIOqyg+ydtOqzoChjbGktd3JhcHBlci50c+yXkOyEnCDruYzrk5wpLFxuICog6re466CH7KeAIOyViuydgCDtmZjqsr3snbTrnbzrqbQg7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkCDsnojsnYQg6rKD7J6F64uI64ukLlxuICpcbiAqIOydtCDtlajsiJjripQg7J2Y64+E7KCB7Jy866GcIOuLpOuluCDsnZjsobTshLHsnZgg7IKs7Jqp7J2EIOy1nOuMgO2VnCDrsLDsoJztlZjsmIDsirXri4jri6QuXG4gKiDsnbTripQg7Iuk7ZaJIOy0iOq4sOyXkCDstZzrjIDtlZwg67mg66W06rKMIOyEpOygleydhCDsnb3slrTsmKwg7IiYIOyeiOuPhOuhnSDtlZjquLAg7JyE7ZWo7J6F64uI64ukLlxuICog65Sw65287IScIOqyveuhnCBjb25jYXTqs7wgVVJMIHNjaGVtZSDstpTqsIDrj4Qg64uo7Iic7ZWcIOusuOyekOyXtCDsobDsnpHsnLzroZwg7LKY66as7ZWY7JiA7Iq164uI64ukLlxuICpcbiAqIEBwYXJhbSByb290UGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDb25maWcocm9vdFBhdGg6IHN0cmluZyk6IFByb21pc2U8U29uYW11Q29uZmlnPiB7XG4gIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPVxuICAgIHByb2Nlc3MuZW52LkhPVCA9PT0gXCJ5ZXNcIiB8fCBwcm9jZXNzLmVudi5WSVRFU1QgPT09IFwidHJ1ZVwiXG4gICAgICA/IGAke3Jvb3RQYXRofS9zcmMvc29uYW11LmNvbmZpZy50c2BcbiAgICAgIDogYCR7cm9vdFBhdGh9L2Rpc3Qvc29uYW11LmNvbmZpZy5qc2A7XG4gIGNvbnN0IHsgZGVmYXVsdDogY29uZmlnIH0gPSBhd2FpdCBpbXBvcnQoYGZpbGU6Ly8ke2NvbmZpZ1BhdGh9YCk7XG4gIGNvbnN0IGltcG9ydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0O1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJ0ZXN0XCIgJiZcbiAgICBjb25zb2xlLmxvZyhgW1RJTUlOR10gbG9hZENvbmZpZyB0b29rICR7aW1wb3J0VGltZS50b0ZpeGVkKDIpfW1zYCk7XG4gIHJldHVybiBjb25maWc7XG59XG4iXSwibmFtZXMiOlsiZGVmaW5lQ29uZmlnIiwiY29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJsb2FkQ29uZmlnIiwicm9vdFBhdGgiLCJzdGFydCIsInBlcmZvcm1hbmNlIiwibm93IiwiY29uZmlnUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJIT1QiLCJWSVRFU1QiLCJkZWZhdWx0IiwiaW1wb3J0VGltZSIsIk5PREVfRU5WIiwiY29uc29sZSIsImxvZyIsInRvRml4ZWQiXSwibWFwcGluZ3MiOiJBQXVHQSxPQUFPLFNBQVNBLGFBQWFDLE1BQTBCO0lBQ3JELElBQUksT0FBT0EsV0FBVyxZQUFZO1FBQ2hDLE9BQU9DLFFBQVFDLE9BQU8sQ0FBQ0Y7SUFDekI7SUFFQSxPQUFPQyxRQUFRQyxPQUFPLENBQUNGO0FBQ3pCO0FBRUE7Ozs7Ozs7Ozs7OztDQVlDLEdBQ0QsT0FBTyxlQUFlRyxXQUFXQyxRQUFnQjtJQUMvQyxNQUFNQyxRQUFRQyxZQUFZQyxHQUFHO0lBQzdCLE1BQU1DLGFBQ0pDLFFBQVFDLEdBQUcsQ0FBQ0MsR0FBRyxLQUFLLFNBQVNGLFFBQVFDLEdBQUcsQ0FBQ0UsTUFBTSxLQUFLLFNBQ2hELEdBQUdSLFNBQVMscUJBQXFCLENBQUMsR0FDbEMsR0FBR0EsU0FBUyxzQkFBc0IsQ0FBQztJQUN6QyxNQUFNLEVBQUVTLFNBQVNiLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFUSxZQUFZO0lBQy9ELE1BQU1NLGFBQWFSLFlBQVlDLEdBQUcsS0FBS0Y7SUFDdkNJLFFBQVFDLEdBQUcsQ0FBQ0ssUUFBUSxLQUFLLFVBQ3ZCQyxRQUFRQyxHQUFHLENBQUMsQ0FBQyx5QkFBeUIsRUFBRUgsV0FBV0ksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ25FLE9BQU9sQjtBQUNUIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/api/decorators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/api/decorators.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@ import inflection from "inflection";
3
3
  import { isEqual } from "radashi";
4
4
  import { DB } from "../database/db.js";
5
5
  import { PuriTransactionWrapper } from "../database/puri-wrapper.js";
6
- import { Sonamu } from "./sonamu.js";
7
6
  import { UpsertBuilder } from "../database/upsert-builder.js";
7
+ import { Sonamu } from "./sonamu.js";
8
8
  export const registeredApis = [];
9
9
  const DECORATOR_TYPES = {
10
10
  API: Symbol("api"),
@@ -233,4 +233,4 @@ newOptions) {
233
233
  });
234
234
  }
235
235
 
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvZGVjb3JhdG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB0eXBlIHsgSFRUUE1ldGhvZHMgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTW9kZWxDbGFzcyB9IGZyb20gXCIuLi9kYXRhYmFzZS9iYXNlLW1vZGVsXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHtcbiAgUHVyaVRyYW5zYWN0aW9uV3JhcHBlcixcbiAgdHlwZSBQdXJpV3JhcHBlcixcbiAgdHlwZSBUcmFuc2FjdGlvbmFsT3B0aW9ucyxcbn0gZnJvbSBcIi4uL2RhdGFiYXNlL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgeyBBcGlQYXJhbSwgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFVwbG9hZENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi9zb25hbXVcIjtcbmltcG9ydCB7IFVwc2VydEJ1aWxkZXIgfSBmcm9tIFwiLi4vZGF0YWJhc2UvdXBzZXJ0LWJ1aWxkZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHdWFyZEtleXMge1xuICBxdWVyeTogdHJ1ZTtcbiAgYWRtaW46IHRydWU7XG4gIHVzZXI6IHRydWU7XG59XG5leHBvcnQgdHlwZSBHdWFyZEtleSA9IGtleW9mIEd1YXJkS2V5cztcbmV4cG9ydCB0eXBlIFNlcnZpY2VDbGllbnQgPSBcImF4aW9zXCIgfCBcImF4aW9zLW11bHRpcGFydFwiIHwgXCJzd3JcIiB8IFwid2luZG93LWZldGNoXCI7XG5leHBvcnQgdHlwZSBBcGlEZWNvcmF0b3JPcHRpb25zID0ge1xuICBodHRwTWV0aG9kPzogSFRUUE1ldGhvZHM7XG4gIGNvbnRlbnRUeXBlPzpcbiAgICB8IFwidGV4dC9wbGFpblwiXG4gICAgfCBcInRleHQvaHRtbFwiXG4gICAgfCBcInRleHQveG1sXCJcbiAgICB8IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuICBjbGllbnRzPzogU2VydmljZUNsaWVudFtdO1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIFN0cmVhbURlY29yYXRvck9wdGlvbnMgPSB7XG4gIHR5cGU6IFwic3NlXCI7IC8vIHwgJ3dzXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7J2067Kk7Yq4IO2CpOuzhOuhnCDrhJjqsqjso7zripQg6rCS7J2066+A66GcIOyWtOuWpCDtg4DsnoXsnbTrk6Ag7IOB6rSA7JeG7J2MXG4gIGV2ZW50czogei5ab2RPYmplY3Q8YW55PjtcbiAgcGF0aD86IHN0cmluZztcbiAgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBVcGxvYWREZWNvcmF0b3JPcHRpb25zID0ge1xuICBtb2RlPzogXCJzaW5nbGVcIiB8IFwibXVsdGlwbGVcIjtcbn07XG5leHBvcnQgY29uc3QgcmVnaXN0ZXJlZEFwaXM6IHtcbiAgLyoqXG4gICAqIG1vZGVsTmFtZeydgCDrqqjrjbgg7YG0656Y7IqkIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJNb2RlbFwiKVxuICAgKi9cbiAgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zO1xuICBzdHJlYW1PcHRpb25zPzogU3RyZWFtRGVjb3JhdG9yT3B0aW9ucztcbiAgdXBsb2FkT3B0aW9ucz86IFVwbG9hZERlY29yYXRvck9wdGlvbnM7XG59W10gPSBbXTtcbmV4cG9ydCB0eXBlIEV4dGVuZGVkQXBpID0ge1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbiAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xufTtcbnR5cGUgRGVjb3JhdG9yVGFyZ2V0ID0geyBjb25zdHJ1Y3RvcjogeyBuYW1lOiBzdHJpbmcgfSB9O1xuXG5jb25zdCBERUNPUkFUT1JfVFlQRVMgPSB7XG4gIEFQSTogU3ltYm9sKFwiYXBpXCIpLFxuICBTVFJFQU06IFN5bWJvbChcInN0cmVhbVwiKSxcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZWNvcmF0b3JUeXBlOiBzeW1ib2wpIHtcbiAgY29uc3QgbWV0aG9kID0gdGFyZ2V0W3Byb3BlcnR5S2V5IGFzIGtleW9mIHR5cGVvZiB0YXJnZXRdIGFzIHsgX19kZWNvcmF0b3JUeXBlPzogc3ltYm9sIH07XG4gIGlmIChtZXRob2Q/Ll9fZGVjb3JhdG9yVHlwZSAmJiBtZXRob2Q/Ll9fZGVjb3JhdG9yVHlwZSAhPT0gZGVjb3JhdG9yVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBAJHtTdHJpbmcoZGVjb3JhdG9yVHlwZSl9IGRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIG9uY2Ugb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX0uIFlvdSBjYW4gdXNlIG9ubHkgb25lIG9mIEBhcGkgb3IgQHN0cmVhbSBkZWNvcmF0b3Igb24gdGhlIHNhbWUgbWV0aG9kLmAsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBtZXRob2QuX19kZWNvcmF0b3JUeXBlID0gZGVjb3JhdG9yVHlwZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBpKG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnMgPSB7fSkge1xuICBvcHRpb25zID0ge1xuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIGNsaWVudHM6IFtcImF4aW9zXCJdLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG5cbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBhcGkgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuQVBJKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuXG4gICAgLy8g6riw7KG0IOuPmeydvO2VnCDrqZTshJzrk5zqsIAg7J6I64qU7KeAIO2ZleyduCDtm4Qg7J6I64qUIOqyveyasCBvdmVycmlkZVxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcImFwaVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXCJhcGlcIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnMsIC8vIEBhcGkg642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtKG9wdGlvbnM6IFN0cmVhbURlY29yYXRvck9wdGlvbnMpIHtcbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBzdHJlYW0gZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuU1RSRUFNKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaHR0cE1ldGhvZDogXCJHRVRcIiBhcyBIVFRQTWV0aG9kcyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICAvLyDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeu5iCDsiqTtirjrp4HsnbQg7JWE64uI7JeI64qU642wIOuLpOuluCDsiqTtirjrp4HsnLzroZwg67CU64CM6rKMIOuQnOuLpOuptCkg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFwic3RyZWFtXCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkucGF0aCwgcGF0aCk7XG4gICAgICBleGlzdGluZ0FwaS5wYXRoID0gcGF0aDtcblxuICAgICAgLy8g6riw7KG07J2YIOyYteyFmOqzvCDsg4jroZzsmrQg7Ji17IWY7J20IOqyuey5mOuKlCDrtoDrtoTsnbQg7J6I64uk66m0IOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nT3B0aW9ucyhcbiAgICAgICAgXCJzdHJlYW1cIixcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBleGlzdGluZ0FwaS5vcHRpb25zLFxuICAgICAgICBvcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnNXaXRoRGVmYXVsdHMsIC8vIEBzdHJlYW0g642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuXG4gICAgICBleGlzdGluZ0FwaS5zdHJlYW1PcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVnaXN0ZXJlZEFwaXMucHVzaCh7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICAgc3RyZWFtT3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWwob3B0aW9uczogVHJhbnNhY3Rpb25hbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IGlzb2xhdGlvbiwgcmVhZE9ubHksIGRiUHJlc2V0ID0gXCJ3XCIgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIChfdGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIF9wcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ29udGV4dCA9IERCLnRyYW5zYWN0aW9uU3RvcmFnZS5nZXRTdG9yZSgpO1xuXG4gICAgICAvLyDsnbTrr7ggQXN5bmNMb2NhbFN0b3JhZ2Ug7Luo7YWN7Iqk7Yq4IOyViOyXkCDsnojripTsp4Ag7ZmV7J24XG4gICAgICBpZiAoZXhpc3RpbmdDb250ZXh0KSB7XG4gICAgICAgIC8vIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOydtOuvuCDsnojsnLzrqbQg7J6s7IKs7JqpXG4gICAgICAgIGlmIChleGlzdGluZ0NvbnRleHQuZ2V0VHJhbnNhY3Rpb24oZGJQcmVzZXQpKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuCDsl4bqsbDrgpgg7ZW064u5IHByZXNldOydmCDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnCDsi5zsnpFcbiAgICAgIGNvbnN0IHN0YXJ0VHJhbnNhY3Rpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHB1cmkgPSB0aGlzLmdldFB1cmkoZGJQcmVzZXQpIGFzIFB1cmlXcmFwcGVyO1xuXG4gICAgICAgIHJldHVybiBwdXJpLmtuZXgudHJhbnNhY3Rpb24oXG4gICAgICAgICAgYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJ4V3JhcHBlciA9IG5ldyBQdXJpVHJhbnNhY3Rpb25XcmFwcGVyKHRyeCwgbmV3IFVwc2VydEJ1aWxkZXIoKSk7XG4gICAgICAgICAgICAvLyBUcmFuc2FjdGlvbkNvbnRleHTsl5Ag7Yq4656c7J6t7IWYIOyggOyepVxuICAgICAgICAgICAgREIuZ2V0VHJhbnNhY3Rpb25Db250ZXh0KCkuc2V0VHJhbnNhY3Rpb24oZGJQcmVzZXQsIHRyeFdyYXBwZXIpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAvLyDtirjrnpzsnq3shZgg7KCc6rGwXG4gICAgICAgICAgICAgIERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLmRlbGV0ZVRyYW5zYWN0aW9uKGRiUHJlc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaXNvbGF0aW9uTGV2ZWw6IGlzb2xhdGlvbiwgcmVhZE9ubHkgfSxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuOqwgCDsl4bsnLzrqbQg7IOI66GcIOyDneyEsVxuICAgICAgaWYgKCFleGlzdGluZ0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIERCLnJ1bldpdGhUcmFuc2FjdGlvbihzdGFydFRyYW5zYWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOy7qO2FjeyKpO2KuOuKlCDsnojsp4Drp4wg7J20IHByZXNldOydmCDtirjrnpzsnq3shZjsnYAg7JeG64qUIOqyveyasCAo6rCZ7J2AIOy7qO2FjeyKpO2KuCDrgrTsl5DshJwg7Iuk7ZaJKVxuICAgICAgICByZXR1cm4gc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBhcGkg642w7L2U66CI7J207YSw7JmAIO2VqOq7mCDsgqzsmqntlaAg7IiYIOyeiOyKteuLiOuLpC5cbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkKG9wdGlvbnM6IFVwbG9hZERlY29yYXRvck9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gKF90YXJnZXQ6IERlY29yYXRvclRhcmdldCwgX3Byb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBfdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUubWF0Y2goLyguKylDbGFzcyQvKT8uWzFdO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHVwbG9hZCBkZWNvcmF0b3Igb24gJHtfdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7X3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gX3Byb3BlcnR5S2V5O1xuXG4gICAgLy8gcmVnaXN0ZXJlZEFwaXPsl5DshJwg7ZW064u5IEFQSSDssL7slYTshJwgdXBsb2FkT3B0aW9ucyDstpTqsIBcbiAgICBjb25zdCBleGlzdGluZ0FwaSA9IHJlZ2lzdGVyZWRBcGlzLmZpbmQoXG4gICAgICAoYXBpKSA9PiBhcGkubW9kZWxOYW1lID09PSBtb2RlbE5hbWUgJiYgYXBpLm1ldGhvZE5hbWUgPT09IG1ldGhvZE5hbWUsXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIGV4aXN0aW5nQXBpLnVwbG9hZE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDsnbQg66mU7IaM65Oc7JeQIOu2meydgCBAYXBpIOuNsOy9lOugiOydtO2EsOqwgCDslYTsp4EgZXZhbOuQmOyngCDslYrsnYAg7IOB7Zmp7J6F64uI64ukLiAo66eM7JW9IEBhcGnqsIAg7JWIIOu2meyWtCDsnojsl4jri6TrqbQg7Ius6rCB7ZWcIOyDge2ZqeyeheuLiOuLpC4uISlcbiAgICAgIC8vIOyXrOq4sOyXkOyEnCDstZzstIjroZwgbW9kZWxOYW1l6rO8IG1ldGhvZE5hbWXsl5Ag64yA7ZW0IHJlZ2lzdGVyZWRBcGlz7JeQIO2VmOuCmOulvCDstpTqsIDtlbTso7zslrTslbwg7ZWp64uI64ukLlxuICAgICAgLy8gdXBsb2FkT3B0aW9uc+uKlCDqt7jrjIDroZwg7LaU6rCA7ZWY6rOgLCBwYXRo64qUIOu5iCDsiqTtirjrp4HsnLzroZwg7LaU6rCA7ZW07KSN64uI64ukLlxuICAgICAgLy8g7J207ZuEIEBhcGkg642w7L2U66CI7J207YSw6rCAIGV2YWzrkJjrqbQg7Iuk7KCcIHBhdGjroZwg642u7Ja07JSM7JuM7KeA6rOgLCBvcHRpb25z6rCAIOy2lOqwgOuQqeuLiOuLpC5cbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGg6IFwiXCIsXG4gICAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgICB1cGxvYWRPcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBjb25zdCB7IHJlcXVlc3QgfSA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgICBjb25zdCB1cGxvYWRDb250ZXh0OiBVcGxvYWRDb250ZXh0ID0ge1xuICAgICAgICBmaWxlOiB1bmRlZmluZWQsXG4gICAgICAgIGZpbGVzOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBTb25hbXUuc3RvcmFnZTtcbiAgICAgIGlmICghc3RvcmFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdG9yYWdl6rCAIOyEpOygleuQmOyngCDslYrslZjsirXri4jri6QuXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IEZpbGVTdG9yYWdlIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9maWxlLXN0b3JhZ2UvZmlsZS1zdG9yYWdlXCIpO1xuICAgICAgaWYgKG9wdGlvbnMubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgIGNvbnN0IHJhd0ZpbGVzSXRlcmF0b3IgPSByZXF1ZXN0LmZpbGVzKCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcmF3RmlsZSBvZiByYXdGaWxlc0l0ZXJhdG9yKSB7XG4gICAgICAgICAgaWYgKHJhd0ZpbGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHJhd0ZpbGUudG9CdWZmZXIoKTtcbiAgICAgICAgICAgIHVwbG9hZENvbnRleHQuZmlsZXMucHVzaChuZXcgRmlsZVN0b3JhZ2UocmF3RmlsZSwgc3RvcmFnZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmF3RmlsZSA9IGF3YWl0IHJlcXVlc3QuZmlsZSgpO1xuICAgICAgICBpZiAocmF3RmlsZSkge1xuICAgICAgICAgIHVwbG9hZENvbnRleHQuZmlsZSA9IG5ldyBGaWxlU3RvcmFnZShyYXdGaWxlLCBzdG9yYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gU29uYW11LnVwbG9hZFN0b3JhZ2UucnVuKHsgdXBsb2FkQ29udGV4dCB9LCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeqwkuydtCDsnojrjZgg7Iqk7Yq466eB7J20IOuLpOuluCDqsJLsnbQg7J6I64qUIOyKpO2KuOungeycvOuhnCDrsJTrgIzqsowg65Cc64uk66m0KSDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICogQHBhcmFtIGRlY29yYXRvck5hbWUg642w7L2U66CI7J207YSwIOydtOumhFxuICogQHBhcmFtIG1vZGVsTmFtZSDrqqjrjbgg7J2066aEXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSDrqZTshJzrk5wg7J2066aEXG4gKiBAcGFyYW0gZXhpc3RpbmdQYXRoIOq4sOyhtOydmCBwYXRoXG4gKiBAcGFyYW0gbmV3UGF0aCDsg4jroZzsmrQgcGF0aFxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcbiAgZGVjb3JhdG9yTmFtZTogc3RyaW5nLFxuICBtb2RlbE5hbWU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBleGlzdGluZ1BhdGg6IHN0cmluZyxcbiAgbmV3UGF0aDogc3RyaW5nLFxuKSB7XG4gIGlmIChleGlzdGluZ1BhdGggIT09IFwiXCIgJiYgbmV3UGF0aCAhPT0gXCJcIiAmJiBleGlzdGluZ1BhdGggIT09IG5ld1BhdGgpIHtcbiAgICAvLyDsnbTqsoPsnbQg66y07IqoIOyDge2ZqeydtOuDkOuptOyalCwgYXBpLnBhdGjqsIAg642u7Ja07JSM7JuM7KeA64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAvLyDqsIDroLkgQGFwaSh7IHBhdGg6IFwiL2FwaS92MS91c2Vyc1wiIH0pIOuNsOy9lOugiOydtO2EsOqwgCDrtpnslrTsnojripQg66mU7ISc65Oc7JeQXG4gICAgLy8gQHN0cmVhbSh7IHBhdGg6IFwiL2FwaS92MS91c2Vycy9zdHJlYW1cIiB9KSDqsJnsnYAg6rKD7J20IOu2meyWtCDsnojripQg7IOB7Zmp7J6F64uI64ukLlxuICAgIC8vIOydtOugh+qyjCDrkJjrqbQg65GQIOuNsOy9lOugiOydtO2EsOqwgCDqsJnsnYAgYXBp7J2YIHBhdGgg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEAke2RlY29yYXRvck5hbWV9IGRlY29yYXRvciBvbiAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfSBoYXMgY29uZmxpY3RpbmcgcGF0aDogJHtuZXdQYXRofS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHBhdGgoJHtleGlzdGluZ1BhdGh9KSB3aXRoIHRoZSBuZXcgcGF0aCgke25ld1BhdGh9KS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiDquLDsobTsnZgg7Ji17IWY6rO8IOyDiOuhnOyatCDsmLXshZjsnbQg6rK57LmY64qUIOu2gOu2hOydtCDsnojri6TrqbQg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAqIEBwYXJhbSBkZWNvcmF0b3JOYW1lIOuNsOy9lOugiOydtO2EsCDsnbTrpoRcbiAqIEBwYXJhbSBtb2RlbE5hbWUg66qo6424IOydtOumhFxuICogQHBhcmFtIG1ldGhvZE5hbWUg66mU7ISc65OcIOydtOumhFxuICogQHBhcmFtIGV4aXN0aW5nT3B0aW9ucyDquLDsobTsnZgg7Ji17IWYXG4gKiBAcGFyYW0gbmV3T3B0aW9ucyDsg4jroZzsmrQg7Ji17IWYXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zKFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogPOyVhCDsib3qsozsib3qsowg7KKAIOqwkeyLnOuLpD5cbiAgZXhpc3RpbmdPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IDzsnbTrn7Qg65WMIOyVhOuLiOuptCBhbnkg7Ja47KCcIOyUgeuLiOq5jD5cbiAgbmV3T3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55Pixcbikge1xuICBPYmplY3Qua2V5cyhuZXdPcHRpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoZXhpc3RpbmdPcHRpb25zW2tleV0gJiYgIWlzRXF1YWwoZXhpc3RpbmdPcHRpb25zW2tleV0sIG5ld09wdGlvbnNba2V5XSkpIHtcbiAgICAgIC8vIOydtOqyg+ydtCDrrLTsiqgg7IOB7Zmp7J2064OQ66m07JqULCBhcGkub3B0aW9uc+qwgCDrja7slrTslIzsm4zsp4DripQg7IOB7Zmp7J6F64uI64ukLlxuICAgICAgLy8g6rCA66C5IEBhcGkoeyByZXNvdXJjZU5hbWU6IFwiVXNlcnNcIiB9KSDrjbDsvZTroIjsnbTthLDqsIAg67aZ7Ja07J6I64qUIOuplOyEnOuTnOyXkFxuICAgICAgLy8gQHN0cmVhbSh7IHJlc291cmNlTmFtZTogXCJQb3N0c1wiIH0pIOqwmeydgCDqsoPsnbQg67aZ7Ja0IOyeiOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgICAvLyDsnbTroIfqsowg65CY66m0IOuRkCDrjbDsvZTroIjsnbTthLDqsIAg6rCZ7J2AIGFwaeydmCBvcHRpb25zIOyGjSDqsJnsnYAg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBAJHtkZWNvcmF0b3JOYW1lfSBkZWNvcmF0b3Igb24gJHttb2RlbE5hbWV9LiR7bWV0aG9kTmFtZX0gaGFzIGNvbmZsaWN0aW5nIG9wdGlvbnM6ICR7a2V5fS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIG9wdGlvbigke0pTT04uc3RyaW5naWZ5KGV4aXN0aW5nT3B0aW9uc1trZXldKX0pIHdpdGggdGhlIG5ldyBvcHRpb24oJHtKU09OLnN0cmluZ2lmeShuZXdPcHRpb25zW2tleV0pfSkuYCxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJpbmZsZWN0aW9uIiwiaXNFcXVhbCIsIkRCIiwiUHVyaVRyYW5zYWN0aW9uV3JhcHBlciIsIlNvbmFtdSIsIlVwc2VydEJ1aWxkZXIiLCJyZWdpc3RlcmVkQXBpcyIsIkRFQ09SQVRPUl9UWVBFUyIsIkFQSSIsIlN5bWJvbCIsIlNUUkVBTSIsImNoZWNrU2luZ2xlRGVjb3JhdG9yIiwidGFyZ2V0IiwicHJvcGVydHlLZXkiLCJkZWNvcmF0b3JUeXBlIiwibWV0aG9kIiwiX19kZWNvcmF0b3JUeXBlIiwiRXJyb3IiLCJTdHJpbmciLCJuYW1lIiwiYXBpIiwib3B0aW9ucyIsImh0dHBNZXRob2QiLCJjb250ZW50VHlwZSIsImNsaWVudHMiLCJtb2RlbE5hbWUiLCJtYXRjaCIsIm1ldGhvZE5hbWUiLCJkZWZhdWx0UGF0aCIsImNhbWVsaXplIiwicmVwbGFjZSIsInBhdGgiLCJleGlzdGluZ0FwaSIsImZpbmQiLCJhc3NlcnROb0NvbmZsaWN0aW5nUGF0aCIsImFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zIiwicHVzaCIsInN0cmVhbSIsIm9wdGlvbnNXaXRoRGVmYXVsdHMiLCJzdHJlYW1PcHRpb25zIiwidHJhbnNhY3Rpb25hbCIsImlzb2xhdGlvbiIsInJlYWRPbmx5IiwiZGJQcmVzZXQiLCJfdGFyZ2V0IiwiX3Byb3BlcnR5S2V5IiwiZGVzY3JpcHRvciIsIm9yaWdpbmFsTWV0aG9kIiwidmFsdWUiLCJhcmdzIiwiZXhpc3RpbmdDb250ZXh0IiwidHJhbnNhY3Rpb25TdG9yYWdlIiwiZ2V0U3RvcmUiLCJnZXRUcmFuc2FjdGlvbiIsImFwcGx5Iiwic3RhcnRUcmFuc2FjdGlvbiIsInB1cmkiLCJnZXRQdXJpIiwia25leCIsInRyYW5zYWN0aW9uIiwidHJ4IiwidHJ4V3JhcHBlciIsImdldFRyYW5zYWN0aW9uQ29udGV4dCIsInNldFRyYW5zYWN0aW9uIiwiZGVsZXRlVHJhbnNhY3Rpb24iLCJpc29sYXRpb25MZXZlbCIsInJ1bldpdGhUcmFuc2FjdGlvbiIsInVwbG9hZCIsInVwbG9hZE9wdGlvbnMiLCJyZXF1ZXN0IiwiZ2V0Q29udGV4dCIsInVwbG9hZENvbnRleHQiLCJmaWxlIiwidW5kZWZpbmVkIiwiZmlsZXMiLCJzdG9yYWdlIiwiRmlsZVN0b3JhZ2UiLCJtb2RlIiwicmF3RmlsZXNJdGVyYXRvciIsInJhd0ZpbGUiLCJ0b0J1ZmZlciIsInVwbG9hZFN0b3JhZ2UiLCJydW4iLCJkZWNvcmF0b3JOYW1lIiwiZXhpc3RpbmdQYXRoIiwibmV3UGF0aCIsImV4aXN0aW5nT3B0aW9ucyIsIm5ld09wdGlvbnMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUU1QixPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxTQUFTQyxPQUFPLFFBQVEsVUFBVTtBQUdsQyxTQUFTQyxFQUFFLFFBQVEsb0JBQWlCO0FBQ3BDLFNBQ0VDLHNCQUFzQixRQUdqQiw4QkFBMkI7QUFHbEMsU0FBU0MsTUFBTSxRQUFRLGNBQVc7QUFDbEMsU0FBU0MsYUFBYSxRQUFRLGdDQUE2QjtBQW9DM0QsT0FBTyxNQUFNQyxpQkFVUCxFQUFFLENBQUM7QUFjVCxNQUFNQyxrQkFBa0I7SUFDdEJDLEtBQUtDLE9BQU87SUFDWkMsUUFBUUQsT0FBTztBQUNqQjtBQUVBLFNBQVNFLHFCQUFxQkMsTUFBdUIsRUFBRUMsV0FBbUIsRUFBRUMsYUFBcUI7SUFDL0YsTUFBTUMsU0FBU0gsTUFBTSxDQUFDQyxZQUFtQztJQUN6RCxJQUFJRSxRQUFRQyxtQkFBbUJELFFBQVFDLG9CQUFvQkYsZUFBZTtRQUN4RSxNQUFNLElBQUlHLE1BQ1IsQ0FBQyxDQUFDLEVBQUVDLE9BQU9KLGVBQWUsb0NBQW9DLEVBQUVGLE9BQU8sV0FBVyxDQUFDTyxJQUFJLENBQUMsQ0FBQyxFQUFFTixZQUFZLHVFQUF1RSxDQUFDO0lBRW5MLE9BQU87UUFDTEUsT0FBT0MsZUFBZSxHQUFHRjtJQUMzQjtBQUNGO0FBRUEsT0FBTyxTQUFTTSxJQUFJQyxVQUErQixDQUFD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
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvZGVjb3JhdG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB0eXBlIHsgSFRUUE1ldGhvZHMgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTW9kZWxDbGFzcyB9IGZyb20gXCIuLi9kYXRhYmFzZS9iYXNlLW1vZGVsXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHtcbiAgUHVyaVRyYW5zYWN0aW9uV3JhcHBlcixcbiAgdHlwZSBQdXJpV3JhcHBlcixcbiAgdHlwZSBUcmFuc2FjdGlvbmFsT3B0aW9ucyxcbn0gZnJvbSBcIi4uL2RhdGFiYXNlL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHsgVXBzZXJ0QnVpbGRlciB9IGZyb20gXCIuLi9kYXRhYmFzZS91cHNlcnQtYnVpbGRlclwiO1xuaW1wb3J0IHR5cGUgeyBBcGlQYXJhbSwgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFVwbG9hZENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi9zb25hbXVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHdWFyZEtleXMge1xuICBxdWVyeTogdHJ1ZTtcbiAgYWRtaW46IHRydWU7XG4gIHVzZXI6IHRydWU7XG59XG5leHBvcnQgdHlwZSBHdWFyZEtleSA9IGtleW9mIEd1YXJkS2V5cztcbmV4cG9ydCB0eXBlIFNlcnZpY2VDbGllbnQgPSBcImF4aW9zXCIgfCBcImF4aW9zLW11bHRpcGFydFwiIHwgXCJzd3JcIiB8IFwid2luZG93LWZldGNoXCI7XG5leHBvcnQgdHlwZSBBcGlEZWNvcmF0b3JPcHRpb25zID0ge1xuICBodHRwTWV0aG9kPzogSFRUUE1ldGhvZHM7XG4gIGNvbnRlbnRUeXBlPzpcbiAgICB8IFwidGV4dC9wbGFpblwiXG4gICAgfCBcInRleHQvaHRtbFwiXG4gICAgfCBcInRleHQveG1sXCJcbiAgICB8IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuICBjbGllbnRzPzogU2VydmljZUNsaWVudFtdO1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIFN0cmVhbURlY29yYXRvck9wdGlvbnMgPSB7XG4gIHR5cGU6IFwic3NlXCI7IC8vIHwgJ3dzXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7J2067Kk7Yq4IO2CpOuzhOuhnCDrhJjqsqjso7zripQg6rCS7J2066+A66GcIOyWtOuWpCDtg4DsnoXsnbTrk6Ag7IOB6rSA7JeG7J2MXG4gIGV2ZW50czogei5ab2RPYmplY3Q8YW55PjtcbiAgcGF0aD86IHN0cmluZztcbiAgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBVcGxvYWREZWNvcmF0b3JPcHRpb25zID0ge1xuICBtb2RlPzogXCJzaW5nbGVcIiB8IFwibXVsdGlwbGVcIjtcbn07XG5leHBvcnQgY29uc3QgcmVnaXN0ZXJlZEFwaXM6IHtcbiAgLyoqXG4gICAqIG1vZGVsTmFtZeydgCDrqqjrjbgg7YG0656Y7IqkIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJNb2RlbFwiKVxuICAgKi9cbiAgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zO1xuICBzdHJlYW1PcHRpb25zPzogU3RyZWFtRGVjb3JhdG9yT3B0aW9ucztcbiAgdXBsb2FkT3B0aW9ucz86IFVwbG9hZERlY29yYXRvck9wdGlvbnM7XG59W10gPSBbXTtcbmV4cG9ydCB0eXBlIEV4dGVuZGVkQXBpID0ge1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbiAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xufTtcbnR5cGUgRGVjb3JhdG9yVGFyZ2V0ID0geyBjb25zdHJ1Y3RvcjogeyBuYW1lOiBzdHJpbmcgfSB9O1xuXG5jb25zdCBERUNPUkFUT1JfVFlQRVMgPSB7XG4gIEFQSTogU3ltYm9sKFwiYXBpXCIpLFxuICBTVFJFQU06IFN5bWJvbChcInN0cmVhbVwiKSxcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZWNvcmF0b3JUeXBlOiBzeW1ib2wpIHtcbiAgY29uc3QgbWV0aG9kID0gdGFyZ2V0W3Byb3BlcnR5S2V5IGFzIGtleW9mIHR5cGVvZiB0YXJnZXRdIGFzIHsgX19kZWNvcmF0b3JUeXBlPzogc3ltYm9sIH07XG4gIGlmIChtZXRob2Q/Ll9fZGVjb3JhdG9yVHlwZSAmJiBtZXRob2Q/Ll9fZGVjb3JhdG9yVHlwZSAhPT0gZGVjb3JhdG9yVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBAJHtTdHJpbmcoZGVjb3JhdG9yVHlwZSl9IGRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIG9uY2Ugb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX0uIFlvdSBjYW4gdXNlIG9ubHkgb25lIG9mIEBhcGkgb3IgQHN0cmVhbSBkZWNvcmF0b3Igb24gdGhlIHNhbWUgbWV0aG9kLmAsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBtZXRob2QuX19kZWNvcmF0b3JUeXBlID0gZGVjb3JhdG9yVHlwZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBpKG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnMgPSB7fSkge1xuICBvcHRpb25zID0ge1xuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIGNsaWVudHM6IFtcImF4aW9zXCJdLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG5cbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBhcGkgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuQVBJKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuXG4gICAgLy8g6riw7KG0IOuPmeydvO2VnCDrqZTshJzrk5zqsIAg7J6I64qU7KeAIO2ZleyduCDtm4Qg7J6I64qUIOqyveyasCBvdmVycmlkZVxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcImFwaVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXCJhcGlcIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnMsIC8vIEBhcGkg642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtKG9wdGlvbnM6IFN0cmVhbURlY29yYXRvck9wdGlvbnMpIHtcbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBzdHJlYW0gZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuU1RSRUFNKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaHR0cE1ldGhvZDogXCJHRVRcIiBhcyBIVFRQTWV0aG9kcyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICAvLyDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeu5iCDsiqTtirjrp4HsnbQg7JWE64uI7JeI64qU642wIOuLpOuluCDsiqTtirjrp4HsnLzroZwg67CU64CM6rKMIOuQnOuLpOuptCkg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFwic3RyZWFtXCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkucGF0aCwgcGF0aCk7XG4gICAgICBleGlzdGluZ0FwaS5wYXRoID0gcGF0aDtcblxuICAgICAgLy8g6riw7KG07J2YIOyYteyFmOqzvCDsg4jroZzsmrQg7Ji17IWY7J20IOqyuey5mOuKlCDrtoDrtoTsnbQg7J6I64uk66m0IOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nT3B0aW9ucyhcbiAgICAgICAgXCJzdHJlYW1cIixcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBleGlzdGluZ0FwaS5vcHRpb25zLFxuICAgICAgICBvcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnNXaXRoRGVmYXVsdHMsIC8vIEBzdHJlYW0g642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuXG4gICAgICBleGlzdGluZ0FwaS5zdHJlYW1PcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVnaXN0ZXJlZEFwaXMucHVzaCh7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICAgc3RyZWFtT3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWwob3B0aW9uczogVHJhbnNhY3Rpb25hbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IGlzb2xhdGlvbiwgcmVhZE9ubHksIGRiUHJlc2V0ID0gXCJ3XCIgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIChfdGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIF9wcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ29udGV4dCA9IERCLnRyYW5zYWN0aW9uU3RvcmFnZS5nZXRTdG9yZSgpO1xuXG4gICAgICAvLyDsnbTrr7ggQXN5bmNMb2NhbFN0b3JhZ2Ug7Luo7YWN7Iqk7Yq4IOyViOyXkCDsnojripTsp4Ag7ZmV7J24XG4gICAgICBpZiAoZXhpc3RpbmdDb250ZXh0KSB7XG4gICAgICAgIC8vIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOydtOuvuCDsnojsnLzrqbQg7J6s7IKs7JqpXG4gICAgICAgIGlmIChleGlzdGluZ0NvbnRleHQuZ2V0VHJhbnNhY3Rpb24oZGJQcmVzZXQpKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuCDsl4bqsbDrgpgg7ZW064u5IHByZXNldOydmCDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnCDsi5zsnpFcbiAgICAgIGNvbnN0IHN0YXJ0VHJhbnNhY3Rpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHB1cmkgPSB0aGlzLmdldFB1cmkoZGJQcmVzZXQpIGFzIFB1cmlXcmFwcGVyO1xuXG4gICAgICAgIHJldHVybiBwdXJpLmtuZXgudHJhbnNhY3Rpb24oXG4gICAgICAgICAgYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJ4V3JhcHBlciA9IG5ldyBQdXJpVHJhbnNhY3Rpb25XcmFwcGVyKHRyeCwgbmV3IFVwc2VydEJ1aWxkZXIoKSk7XG4gICAgICAgICAgICAvLyBUcmFuc2FjdGlvbkNvbnRleHTsl5Ag7Yq4656c7J6t7IWYIOyggOyepVxuICAgICAgICAgICAgREIuZ2V0VHJhbnNhY3Rpb25Db250ZXh0KCkuc2V0VHJhbnNhY3Rpb24oZGJQcmVzZXQsIHRyeFdyYXBwZXIpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAvLyDtirjrnpzsnq3shZgg7KCc6rGwXG4gICAgICAgICAgICAgIERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLmRlbGV0ZVRyYW5zYWN0aW9uKGRiUHJlc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaXNvbGF0aW9uTGV2ZWw6IGlzb2xhdGlvbiwgcmVhZE9ubHkgfSxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuOqwgCDsl4bsnLzrqbQg7IOI66GcIOyDneyEsVxuICAgICAgaWYgKCFleGlzdGluZ0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIERCLnJ1bldpdGhUcmFuc2FjdGlvbihzdGFydFRyYW5zYWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOy7qO2FjeyKpO2KuOuKlCDsnojsp4Drp4wg7J20IHByZXNldOydmCDtirjrnpzsnq3shZjsnYAg7JeG64qUIOqyveyasCAo6rCZ7J2AIOy7qO2FjeyKpO2KuCDrgrTsl5DshJwg7Iuk7ZaJKVxuICAgICAgICByZXR1cm4gc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBhcGkg642w7L2U66CI7J207YSw7JmAIO2VqOq7mCDsgqzsmqntlaAg7IiYIOyeiOyKteuLiOuLpC5cbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkKG9wdGlvbnM6IFVwbG9hZERlY29yYXRvck9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gKF90YXJnZXQ6IERlY29yYXRvclRhcmdldCwgX3Byb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBfdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUubWF0Y2goLyguKylDbGFzcyQvKT8uWzFdO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHVwbG9hZCBkZWNvcmF0b3Igb24gJHtfdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7X3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gX3Byb3BlcnR5S2V5O1xuXG4gICAgLy8gcmVnaXN0ZXJlZEFwaXPsl5DshJwg7ZW064u5IEFQSSDssL7slYTshJwgdXBsb2FkT3B0aW9ucyDstpTqsIBcbiAgICBjb25zdCBleGlzdGluZ0FwaSA9IHJlZ2lzdGVyZWRBcGlzLmZpbmQoXG4gICAgICAoYXBpKSA9PiBhcGkubW9kZWxOYW1lID09PSBtb2RlbE5hbWUgJiYgYXBpLm1ldGhvZE5hbWUgPT09IG1ldGhvZE5hbWUsXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIGV4aXN0aW5nQXBpLnVwbG9hZE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDsnbQg66mU7IaM65Oc7JeQIOu2meydgCBAYXBpIOuNsOy9lOugiOydtO2EsOqwgCDslYTsp4EgZXZhbOuQmOyngCDslYrsnYAg7IOB7Zmp7J6F64uI64ukLiAo66eM7JW9IEBhcGnqsIAg7JWIIOu2meyWtCDsnojsl4jri6TrqbQg7Ius6rCB7ZWcIOyDge2ZqeyeheuLiOuLpC4uISlcbiAgICAgIC8vIOyXrOq4sOyXkOyEnCDstZzstIjroZwgbW9kZWxOYW1l6rO8IG1ldGhvZE5hbWXsl5Ag64yA7ZW0IHJlZ2lzdGVyZWRBcGlz7JeQIO2VmOuCmOulvCDstpTqsIDtlbTso7zslrTslbwg7ZWp64uI64ukLlxuICAgICAgLy8gdXBsb2FkT3B0aW9uc+uKlCDqt7jrjIDroZwg7LaU6rCA7ZWY6rOgLCBwYXRo64qUIOu5iCDsiqTtirjrp4HsnLzroZwg7LaU6rCA7ZW07KSN64uI64ukLlxuICAgICAgLy8g7J207ZuEIEBhcGkg642w7L2U66CI7J207YSw6rCAIGV2YWzrkJjrqbQg7Iuk7KCcIHBhdGjroZwg642u7Ja07JSM7JuM7KeA6rOgLCBvcHRpb25z6rCAIOy2lOqwgOuQqeuLiOuLpC5cbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGg6IFwiXCIsXG4gICAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgICB1cGxvYWRPcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBjb25zdCB7IHJlcXVlc3QgfSA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgICBjb25zdCB1cGxvYWRDb250ZXh0OiBVcGxvYWRDb250ZXh0ID0ge1xuICAgICAgICBmaWxlOiB1bmRlZmluZWQsXG4gICAgICAgIGZpbGVzOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBTb25hbXUuc3RvcmFnZTtcbiAgICAgIGlmICghc3RvcmFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdG9yYWdl6rCAIOyEpOygleuQmOyngCDslYrslZjsirXri4jri6QuXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IEZpbGVTdG9yYWdlIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9maWxlLXN0b3JhZ2UvZmlsZS1zdG9yYWdlXCIpO1xuICAgICAgaWYgKG9wdGlvbnMubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgIGNvbnN0IHJhd0ZpbGVzSXRlcmF0b3IgPSByZXF1ZXN0LmZpbGVzKCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcmF3RmlsZSBvZiByYXdGaWxlc0l0ZXJhdG9yKSB7XG4gICAgICAgICAgaWYgKHJhd0ZpbGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHJhd0ZpbGUudG9CdWZmZXIoKTtcbiAgICAgICAgICAgIHVwbG9hZENvbnRleHQuZmlsZXMucHVzaChuZXcgRmlsZVN0b3JhZ2UocmF3RmlsZSwgc3RvcmFnZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmF3RmlsZSA9IGF3YWl0IHJlcXVlc3QuZmlsZSgpO1xuICAgICAgICBpZiAocmF3RmlsZSkge1xuICAgICAgICAgIHVwbG9hZENvbnRleHQuZmlsZSA9IG5ldyBGaWxlU3RvcmFnZShyYXdGaWxlLCBzdG9yYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gU29uYW11LnVwbG9hZFN0b3JhZ2UucnVuKHsgdXBsb2FkQ29udGV4dCB9LCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeqwkuydtCDsnojrjZgg7Iqk7Yq466eB7J20IOuLpOuluCDqsJLsnbQg7J6I64qUIOyKpO2KuOungeycvOuhnCDrsJTrgIzqsowg65Cc64uk66m0KSDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICogQHBhcmFtIGRlY29yYXRvck5hbWUg642w7L2U66CI7J207YSwIOydtOumhFxuICogQHBhcmFtIG1vZGVsTmFtZSDrqqjrjbgg7J2066aEXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSDrqZTshJzrk5wg7J2066aEXG4gKiBAcGFyYW0gZXhpc3RpbmdQYXRoIOq4sOyhtOydmCBwYXRoXG4gKiBAcGFyYW0gbmV3UGF0aCDsg4jroZzsmrQgcGF0aFxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcbiAgZGVjb3JhdG9yTmFtZTogc3RyaW5nLFxuICBtb2RlbE5hbWU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBleGlzdGluZ1BhdGg6IHN0cmluZyxcbiAgbmV3UGF0aDogc3RyaW5nLFxuKSB7XG4gIGlmIChleGlzdGluZ1BhdGggIT09IFwiXCIgJiYgbmV3UGF0aCAhPT0gXCJcIiAmJiBleGlzdGluZ1BhdGggIT09IG5ld1BhdGgpIHtcbiAgICAvLyDsnbTqsoPsnbQg66y07IqoIOyDge2ZqeydtOuDkOuptOyalCwgYXBpLnBhdGjqsIAg642u7Ja07JSM7JuM7KeA64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAvLyDqsIDroLkgQGFwaSh7IHBhdGg6IFwiL2FwaS92MS91c2Vyc1wiIH0pIOuNsOy9lOugiOydtO2EsOqwgCDrtpnslrTsnojripQg66mU7ISc65Oc7JeQXG4gICAgLy8gQHN0cmVhbSh7IHBhdGg6IFwiL2FwaS92MS91c2Vycy9zdHJlYW1cIiB9KSDqsJnsnYAg6rKD7J20IOu2meyWtCDsnojripQg7IOB7Zmp7J6F64uI64ukLlxuICAgIC8vIOydtOugh+qyjCDrkJjrqbQg65GQIOuNsOy9lOugiOydtO2EsOqwgCDqsJnsnYAgYXBp7J2YIHBhdGgg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEAke2RlY29yYXRvck5hbWV9IGRlY29yYXRvciBvbiAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfSBoYXMgY29uZmxpY3RpbmcgcGF0aDogJHtuZXdQYXRofS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHBhdGgoJHtleGlzdGluZ1BhdGh9KSB3aXRoIHRoZSBuZXcgcGF0aCgke25ld1BhdGh9KS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiDquLDsobTsnZgg7Ji17IWY6rO8IOyDiOuhnOyatCDsmLXshZjsnbQg6rK57LmY64qUIOu2gOu2hOydtCDsnojri6TrqbQg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAqIEBwYXJhbSBkZWNvcmF0b3JOYW1lIOuNsOy9lOugiOydtO2EsCDsnbTrpoRcbiAqIEBwYXJhbSBtb2RlbE5hbWUg66qo6424IOydtOumhFxuICogQHBhcmFtIG1ldGhvZE5hbWUg66mU7ISc65OcIOydtOumhFxuICogQHBhcmFtIGV4aXN0aW5nT3B0aW9ucyDquLDsobTsnZgg7Ji17IWYXG4gKiBAcGFyYW0gbmV3T3B0aW9ucyDsg4jroZzsmrQg7Ji17IWYXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zKFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogPOyVhCDsib3qsozsib3qsowg7KKAIOqwkeyLnOuLpD5cbiAgZXhpc3RpbmdPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IDzsnbTrn7Qg65WMIOyVhOuLiOuptCBhbnkg7Ja47KCcIOyUgeuLiOq5jD5cbiAgbmV3T3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55Pixcbikge1xuICBPYmplY3Qua2V5cyhuZXdPcHRpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoZXhpc3RpbmdPcHRpb25zW2tleV0gJiYgIWlzRXF1YWwoZXhpc3RpbmdPcHRpb25zW2tleV0sIG5ld09wdGlvbnNba2V5XSkpIHtcbiAgICAgIC8vIOydtOqyg+ydtCDrrLTsiqgg7IOB7Zmp7J2064OQ66m07JqULCBhcGkub3B0aW9uc+qwgCDrja7slrTslIzsm4zsp4DripQg7IOB7Zmp7J6F64uI64ukLlxuICAgICAgLy8g6rCA66C5IEBhcGkoeyByZXNvdXJjZU5hbWU6IFwiVXNlcnNcIiB9KSDrjbDsvZTroIjsnbTthLDqsIAg67aZ7Ja07J6I64qUIOuplOyEnOuTnOyXkFxuICAgICAgLy8gQHN0cmVhbSh7IHJlc291cmNlTmFtZTogXCJQb3N0c1wiIH0pIOqwmeydgCDqsoPsnbQg67aZ7Ja0IOyeiOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgICAvLyDsnbTroIfqsowg65CY66m0IOuRkCDrjbDsvZTroIjsnbTthLDqsIAg6rCZ7J2AIGFwaeydmCBvcHRpb25zIOyGjSDqsJnsnYAg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBAJHtkZWNvcmF0b3JOYW1lfSBkZWNvcmF0b3Igb24gJHttb2RlbE5hbWV9LiR7bWV0aG9kTmFtZX0gaGFzIGNvbmZsaWN0aW5nIG9wdGlvbnM6ICR7a2V5fS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIG9wdGlvbigke0pTT04uc3RyaW5naWZ5KGV4aXN0aW5nT3B0aW9uc1trZXldKX0pIHdpdGggdGhlIG5ldyBvcHRpb24oJHtKU09OLnN0cmluZ2lmeShuZXdPcHRpb25zW2tleV0pfSkuYCxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJpbmZsZWN0aW9uIiwiaXNFcXVhbCIsIkRCIiwiUHVyaVRyYW5zYWN0aW9uV3JhcHBlciIsIlVwc2VydEJ1aWxkZXIiLCJTb25hbXUiLCJyZWdpc3RlcmVkQXBpcyIsIkRFQ09SQVRPUl9UWVBFUyIsIkFQSSIsIlN5bWJvbCIsIlNUUkVBTSIsImNoZWNrU2luZ2xlRGVjb3JhdG9yIiwidGFyZ2V0IiwicHJvcGVydHlLZXkiLCJkZWNvcmF0b3JUeXBlIiwibWV0aG9kIiwiX19kZWNvcmF0b3JUeXBlIiwiRXJyb3IiLCJTdHJpbmciLCJuYW1lIiwiYXBpIiwib3B0aW9ucyIsImh0dHBNZXRob2QiLCJjb250ZW50VHlwZSIsImNsaWVudHMiLCJtb2RlbE5hbWUiLCJtYXRjaCIsIm1ldGhvZE5hbWUiLCJkZWZhdWx0UGF0aCIsImNhbWVsaXplIiwicmVwbGFjZSIsInBhdGgiLCJleGlzdGluZ0FwaSIsImZpbmQiLCJhc3NlcnROb0NvbmZsaWN0aW5nUGF0aCIsImFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zIiwicHVzaCIsInN0cmVhbSIsIm9wdGlvbnNXaXRoRGVmYXVsdHMiLCJzdHJlYW1PcHRpb25zIiwidHJhbnNhY3Rpb25hbCIsImlzb2xhdGlvbiIsInJlYWRPbmx5IiwiZGJQcmVzZXQiLCJfdGFyZ2V0IiwiX3Byb3BlcnR5S2V5IiwiZGVzY3JpcHRvciIsIm9yaWdpbmFsTWV0aG9kIiwidmFsdWUiLCJhcmdzIiwiZXhpc3RpbmdDb250ZXh0IiwidHJhbnNhY3Rpb25TdG9yYWdlIiwiZ2V0U3RvcmUiLCJnZXRUcmFuc2FjdGlvbiIsImFwcGx5Iiwic3RhcnRUcmFuc2FjdGlvbiIsInB1cmkiLCJnZXRQdXJpIiwia25leCIsInRyYW5zYWN0aW9uIiwidHJ4IiwidHJ4V3JhcHBlciIsImdldFRyYW5zYWN0aW9uQ29udGV4dCIsInNldFRyYW5zYWN0aW9uIiwiZGVsZXRlVHJhbnNhY3Rpb24iLCJpc29sYXRpb25MZXZlbCIsInJ1bldpdGhUcmFuc2FjdGlvbiIsInVwbG9hZCIsInVwbG9hZE9wdGlvbnMiLCJyZXF1ZXN0IiwiZ2V0Q29udGV4dCIsInVwbG9hZENvbnRleHQiLCJmaWxlIiwidW5kZWZpbmVkIiwiZmlsZXMiLCJzdG9yYWdlIiwiRmlsZVN0b3JhZ2UiLCJtb2RlIiwicmF3RmlsZXNJdGVyYXRvciIsInJhd0ZpbGUiLCJ0b0J1ZmZlciIsInVwbG9hZFN0b3JhZ2UiLCJydW4iLCJkZWNvcmF0b3JOYW1lIiwiZXhpc3RpbmdQYXRoIiwibmV3UGF0aCIsImV4aXN0aW5nT3B0aW9ucyIsIm5ld09wdGlvbnMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUU1QixPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxTQUFTQyxPQUFPLFFBQVEsVUFBVTtBQUdsQyxTQUFTQyxFQUFFLFFBQVEsb0JBQWlCO0FBQ3BDLFNBQ0VDLHNCQUFzQixRQUdqQiw4QkFBMkI7QUFDbEMsU0FBU0MsYUFBYSxRQUFRLGdDQUE2QjtBQUczRCxTQUFTQyxNQUFNLFFBQVEsY0FBVztBQW9DbEMsT0FBTyxNQUFNQyxpQkFVUCxFQUFFLENBQUM7QUFjVCxNQUFNQyxrQkFBa0I7SUFDdEJDLEtBQUtDLE9BQU87SUFDWkMsUUFBUUQsT0FBTztBQUNqQjtBQUVBLFNBQVNFLHFCQUFxQkMsTUFBdUIsRUFBRUMsV0FBbUIsRUFBRUMsYUFBcUI7SUFDL0YsTUFBTUMsU0FBU0gsTUFBTSxDQUFDQyxZQUFtQztJQUN6RCxJQUFJRSxRQUFRQyxtQkFBbUJELFFBQVFDLG9CQUFvQkYsZUFBZTtRQUN4RSxNQUFNLElBQUlHLE1BQ1IsQ0FBQyxDQUFDLEVBQUVDLE9BQU9KLGVBQWUsb0NBQW9DLEVBQUVGLE9BQU8sV0FBVyxDQUFDTyxJQUFJLENBQUMsQ0FBQyxFQUFFTixZQUFZLHVFQUF1RSxDQUFDO0lBRW5MLE9BQU87UUFDTEUsT0FBT0MsZUFBZSxHQUFHRjtJQUMzQjtBQUNGO0FBRUEsT0FBTyxTQUFTTSxJQUFJQyxVQUErQixDQUFD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
@@ -1 +1 @@
1
- {"version":3,"file":"sonamu.d.ts","sourceRoot":"","sources":["../../src/api/sonamu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sonamu.d.ts","sourceRoot":"","sources":["../../src/api/sonamu.ts"],"names":[],"mappings":"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"}