sonamu 0.7.49 → 0.7.51

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 (189) hide show
  1. package/dist/api/code-converters.d.ts +3 -6
  2. package/dist/api/code-converters.d.ts.map +1 -1
  3. package/dist/api/code-converters.js +4 -1
  4. package/dist/api/config.d.ts +7 -9
  5. package/dist/api/config.d.ts.map +1 -1
  6. package/dist/api/config.js +1 -1
  7. package/dist/api/context.d.ts +7 -9
  8. package/dist/api/context.d.ts.map +1 -1
  9. package/dist/api/context.js +1 -1
  10. package/dist/api/sonamu.d.ts +8 -1
  11. package/dist/api/sonamu.d.ts.map +1 -1
  12. package/dist/api/sonamu.js +61 -25
  13. package/dist/auth/auth-generator.d.ts +5 -0
  14. package/dist/auth/auth-generator.d.ts.map +1 -0
  15. package/dist/auth/auth-generator.js +111 -0
  16. package/dist/auth/better-auth-entities.d.ts +17 -0
  17. package/dist/auth/better-auth-entities.d.ts.map +1 -0
  18. package/dist/auth/better-auth-entities.js +417 -0
  19. package/dist/auth/index.d.ts +3 -0
  20. package/dist/auth/index.d.ts.map +1 -0
  21. package/dist/auth/index.js +4 -0
  22. package/dist/bin/cli.js +124 -31
  23. package/dist/database/_batch_update.js +4 -4
  24. package/dist/database/base-model.d.ts.map +1 -1
  25. package/dist/database/base-model.js +3 -4
  26. package/dist/database/puri-wrapper.d.ts +4 -4
  27. package/dist/database/puri-wrapper.d.ts.map +1 -1
  28. package/dist/database/puri-wrapper.js +1 -1
  29. package/dist/database/puri.d.ts +13 -4
  30. package/dist/database/puri.d.ts.map +1 -1
  31. package/dist/database/puri.js +61 -16
  32. package/dist/database/puri.types.d.ts +6 -2
  33. package/dist/database/puri.types.d.ts.map +1 -1
  34. package/dist/database/puri.types.js +1 -1
  35. package/dist/database/upsert-builder.d.ts +4 -4
  36. package/dist/database/upsert-builder.d.ts.map +1 -1
  37. package/dist/database/upsert-builder.js +2 -2
  38. package/dist/dict/en.d.ts +2 -2
  39. package/dist/dict/en.d.ts.map +1 -1
  40. package/dist/dict/en.js +1 -1
  41. package/dist/dict/ko.d.ts +2 -2
  42. package/dist/dict/ko.d.ts.map +1 -1
  43. package/dist/dict/ko.js +1 -1
  44. package/dist/entity/entity-manager.d.ts +5 -5
  45. package/dist/entity/entity-manager.d.ts.map +1 -1
  46. package/dist/entity/entity-manager.js +1 -1
  47. package/dist/entity/entity.d.ts +20 -7
  48. package/dist/entity/entity.d.ts.map +1 -1
  49. package/dist/entity/entity.js +56 -22
  50. package/dist/filter/index.d.ts +0 -1
  51. package/dist/filter/index.d.ts.map +1 -1
  52. package/dist/filter/index.js +1 -2
  53. package/dist/filter/types.d.ts +1 -27
  54. package/dist/filter/types.d.ts.map +1 -1
  55. package/dist/filter/types.js +1 -1
  56. package/dist/filter/utils.d.ts +10 -6
  57. package/dist/filter/utils.d.ts.map +1 -1
  58. package/dist/filter/utils.js +44 -21
  59. package/dist/index.d.ts +1 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +2 -1
  62. package/dist/migration/code-generation.d.ts +3 -1
  63. package/dist/migration/code-generation.d.ts.map +1 -1
  64. package/dist/migration/code-generation.js +157 -5
  65. package/dist/migration/migration-set.d.ts.map +1 -1
  66. package/dist/migration/migration-set.js +33 -10
  67. package/dist/migration/migrator.js +2 -2
  68. package/dist/migration/postgresql-schema-reader.d.ts +26 -1
  69. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  70. package/dist/migration/postgresql-schema-reader.js +41 -1
  71. package/dist/syncer/module-loader.d.ts +1 -1
  72. package/dist/syncer/module-loader.d.ts.map +1 -1
  73. package/dist/syncer/module-loader.js +2 -3
  74. package/dist/syncer/syncer-actions.d.ts +33 -0
  75. package/dist/syncer/syncer-actions.d.ts.map +1 -0
  76. package/dist/syncer/syncer-actions.js +94 -0
  77. package/dist/syncer/syncer.d.ts +3 -29
  78. package/dist/syncer/syncer.d.ts.map +1 -1
  79. package/dist/syncer/syncer.js +28 -103
  80. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  81. package/dist/template/implementations/generated.template.js +5 -2
  82. package/dist/template/implementations/generated_http.template.d.ts +1 -1
  83. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  84. package/dist/template/implementations/generated_http.template.js +2 -3
  85. package/dist/template/implementations/generated_sso.template.d.ts +9 -0
  86. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  87. package/dist/template/implementations/generated_sso.template.js +83 -4
  88. package/dist/template/implementations/model.template.d.ts.map +1 -1
  89. package/dist/template/implementations/model.template.js +8 -5
  90. package/dist/template/implementations/services.template.d.ts.map +1 -1
  91. package/dist/template/implementations/services.template.js +42 -2
  92. package/dist/template/implementations/view_enums_select.template.d.ts +0 -1
  93. package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -1
  94. package/dist/template/implementations/view_enums_select.template.js +14 -27
  95. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  96. package/dist/template/implementations/view_form.template.js +7 -3
  97. package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -1
  98. package/dist/template/implementations/view_id_async_select.template.js +38 -85
  99. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  100. package/dist/template/implementations/view_list.template.js +8 -5
  101. package/dist/template/zod-converter.d.ts.map +1 -1
  102. package/dist/template/zod-converter.js +22 -5
  103. package/dist/testing/bootstrap.d.ts +4 -4
  104. package/dist/testing/bootstrap.d.ts.map +1 -1
  105. package/dist/testing/bootstrap.js +1 -1
  106. package/dist/testing/fixture-manager.d.ts.map +1 -1
  107. package/dist/testing/fixture-manager.js +1 -1
  108. package/dist/types/types.d.ts +11 -11
  109. package/dist/types/types.d.ts.map +1 -1
  110. package/dist/types/types.js +1 -1
  111. package/dist/ui/api.js +2 -2
  112. package/dist/ui-web/assets/{index-CWExqVO5.css → index-Bd_2AkLb.css} +1 -1
  113. package/dist/ui-web/assets/index-BpSbhQWo.js +225 -0
  114. package/dist/ui-web/index.html +2 -2
  115. package/dist/utils/utils.d.ts +3 -0
  116. package/dist/utils/utils.d.ts.map +1 -1
  117. package/dist/utils/utils.js +37 -1
  118. package/package.json +6 -7
  119. package/src/api/code-converters.ts +9 -5
  120. package/src/api/config.ts +8 -13
  121. package/src/api/context.ts +7 -10
  122. package/src/api/sonamu.ts +72 -26
  123. package/src/auth/auth-generator.ts +145 -0
  124. package/src/auth/better-auth-entities.ts +206 -0
  125. package/src/auth/index.ts +2 -0
  126. package/src/bin/cli.ts +145 -30
  127. package/src/database/_batch_update.ts +4 -4
  128. package/src/database/base-model.ts +2 -3
  129. package/src/database/puri-wrapper.ts +4 -4
  130. package/src/database/puri.ts +68 -21
  131. package/src/database/puri.types.ts +9 -2
  132. package/src/database/upsert-builder.ts +9 -9
  133. package/src/dict/en.ts +2 -2
  134. package/src/dict/ko.ts +2 -2
  135. package/src/entity/entity-manager.ts +1 -1
  136. package/src/entity/entity.ts +64 -32
  137. package/src/filter/index.ts +0 -1
  138. package/src/filter/types.ts +10 -45
  139. package/src/filter/utils.ts +47 -21
  140. package/src/index.ts +1 -0
  141. package/src/migration/code-generation.ts +238 -0
  142. package/src/migration/migration-set.ts +40 -8
  143. package/src/migration/migrator.ts +1 -1
  144. package/src/migration/postgresql-schema-reader.ts +72 -0
  145. package/src/shared/web.shared.ts.txt +38 -0
  146. package/src/skills/CLAUDE.md +5 -0
  147. package/src/skills/sonamu/SKILL.md +150 -0
  148. package/src/skills/sonamu/api.md +264 -0
  149. package/src/skills/sonamu/auth.md +199 -0
  150. package/src/skills/sonamu/config.md +676 -0
  151. package/src/skills/sonamu/create-sonamu.md +155 -0
  152. package/src/skills/sonamu/database.md +221 -0
  153. package/src/skills/sonamu/entity-basic.md +642 -0
  154. package/src/skills/sonamu/entity-relations.md +627 -0
  155. package/src/skills/sonamu/entity-validation-checklist.md +468 -0
  156. package/src/skills/sonamu/frontend.md +446 -0
  157. package/src/skills/sonamu/i18n.md +176 -0
  158. package/src/skills/sonamu/migration.md +187 -0
  159. package/src/skills/sonamu/model.md +458 -0
  160. package/src/skills/sonamu/project-init.md +257 -0
  161. package/src/skills/sonamu/puri.md +459 -0
  162. package/src/skills/sonamu/scaffolding.md +285 -0
  163. package/src/skills/sonamu/subset.md +160 -0
  164. package/src/skills/sonamu/testing.md +2326 -0
  165. package/src/skills/sonamu/upsert.md +263 -0
  166. package/src/skills/sonamu/workflow.md +567 -0
  167. package/src/syncer/module-loader.ts +3 -5
  168. package/src/syncer/syncer-actions.ts +123 -0
  169. package/src/syncer/syncer.ts +27 -130
  170. package/src/template/implementations/generated.template.ts +8 -1
  171. package/src/template/implementations/generated_http.template.ts +1 -2
  172. package/src/template/implementations/generated_sso.template.ts +91 -1
  173. package/src/template/implementations/model.template.ts +8 -4
  174. package/src/template/implementations/services.template.ts +46 -1
  175. package/src/template/implementations/view_enums_select.template.ts +13 -25
  176. package/src/template/implementations/view_form.template.ts +8 -2
  177. package/src/template/implementations/view_id_async_select.template.ts +38 -84
  178. package/src/template/implementations/view_list.template.ts +8 -4
  179. package/src/template/zod-converter.ts +22 -4
  180. package/src/testing/bootstrap.ts +4 -4
  181. package/src/testing/fixture-manager.ts +10 -6
  182. package/src/types/types.ts +3 -4
  183. package/src/ui/api.ts +1 -1
  184. package/src/utils/utils.ts +46 -0
  185. package/dist/filter/metadata.d.ts +0 -19
  186. package/dist/filter/metadata.d.ts.map +0 -1
  187. package/dist/filter/metadata.js +0 -39
  188. package/dist/ui-web/assets/index-DF2tc-SZ.js +0 -191
  189. package/src/filter/metadata.ts +0 -47
@@ -18,10 +18,8 @@
18
18
  * - EntityProp 변환: zod-converter.ts 참조
19
19
  */
20
20
  import { z } from "zod";
21
- import type { $ZodLooseShape } from "zod/v4/core";
22
21
  import { type ApiParam, ApiParamType } from "../types/types";
23
22
  import type { ExtendedApi } from "./decorators";
24
- type AnyZodObject = z.ZodObject<$ZodLooseShape>;
25
23
  /**
26
24
  * Promise 타입을 한 번 언래핑하여 내부 타입을 반환합니다.
27
25
  * Promise가 아닌 경우 원본 타입을 그대로 반환합니다.
@@ -33,14 +31,14 @@ export declare function unwrapPromiseOnce(paramType: ApiParamType): ApiParamType
33
31
  * 순환참조가 발생하는 경우 z.unknown()으로 fallback합니다.
34
32
  */
35
33
  export declare function getZodTypeFromApiParamType(paramType: ApiParamType, references: {
36
- [id: string]: AnyZodObject;
34
+ [id: string]: z.ZodType;
37
35
  }): z.ZodType<unknown>;
38
36
  /**
39
37
  * ApiParam 배열을 ZodObject로 변환합니다.
40
38
  * 각 파라미터의 optional 여부를 반영하여 Zod 스키마를 생성합니다.
41
39
  */
42
40
  export declare function getZodObjectFromApiParams(apiParams: ApiParam[], references?: {
43
- [id: string]: AnyZodObject;
41
+ [id: string]: z.ZodType;
44
42
  }): z.ZodObject;
45
43
  /**
46
44
  * ExtendedApi를 ZodObject로 변환합니다.
@@ -48,7 +46,7 @@ export declare function getZodObjectFromApiParams(apiParams: ApiParam[], referen
48
46
  * Context, RefKnex, _로 시작하는 optional 파라미터는 제외합니다.
49
47
  */
50
48
  export declare function getZodObjectFromApi(api: ExtendedApi, references?: {
51
- [id: string]: AnyZodObject;
49
+ [id: string]: z.ZodType;
52
50
  }): z.ZodObject<z.core.$ZodLooseShape, z.core.$strip>;
53
51
  /**
54
52
  * ApiParamType을 TypeScript 타입 문자열로 변환합니다.
@@ -66,5 +64,4 @@ export declare function apiParamToTsCode(params: ApiParam[], injectImportKeys: s
66
64
  * 예: "{ name: string, age?: number, active: boolean = true }"
67
65
  */
68
66
  export declare function apiParamToTsCodeAsObject(params: ApiParam[], injectImportKeys: string[]): string;
69
- export {};
70
67
  //# sourceMappingURL=code-converters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-converters.d.ts","sourceRoot":"","sources":["../../src/api/code-converters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,KAAK,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,KAAK,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AAGhD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,YAAY,4BAMxD;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC;CAC5B,GACA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CA6HpB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,QAAQ,EAAE,EACrB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC;CACvB,GACL,CAAC,CAAC,SAAS,CAYb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC;CACvB,qDAsBP;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA6DhG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAUvF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAU/F"}
1
+ {"version":3,"file":"code-converters.d.ts","sourceRoot":"","sources":["../../src/api/code-converters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,KAAK,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,YAAY,4BAMxD;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACzB,GACA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CA+HpB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,QAAQ,EAAE,EACrB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACpB,GACL,CAAC,CAAC,SAAS,CAYb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACpB,qDAwBP;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA6DhG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAUvF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAU/F"}
@@ -87,10 +87,12 @@ import { ApiParamType } from "../types/types.js";
87
87
  ]));
88
88
  if (refType.id === "Pick") {
89
89
  if (obj.pick) {
90
+ // biome-ignore lint/suspicious/noExplicitAny: Zod 4.3.6 pick 타입 호환성
90
91
  return obj.pick(keyRecord);
91
92
  }
92
93
  } else {
93
94
  if (obj.omit) {
95
+ // biome-ignore lint/suspicious/noExplicitAny: Zod 4.3.6 omit 타입 호환성
94
96
  return obj.omit(keyRecord);
95
97
  }
96
98
  }
@@ -173,6 +175,7 @@ import { ApiParamType } from "../types/types.js";
173
175
  for (const typeParam of api.typeParameters){
174
176
  if (typeParam.constraint) {
175
177
  const zodType = getZodTypeFromApiParamType(typeParam.constraint, references);
178
+ // FIXME: references는 글로벌 오브젝트로, typeParam.id("T" 등)를 key로 이렇게 덮어씌워버리면 loadedTypes가 오염됨.
176
179
  // biome-ignore lint/suspicious/noExplicitAny: 레퍼런스 타입 캐스팅
177
180
  references[typeParam.id] = zodType;
178
181
  }
@@ -257,4 +260,4 @@ import { ApiParamType } from "../types/types.js";
257
260
  return `{ ${params.map((param)=>`${param.name}${param.optional ? "?" : ""}: ${apiParamTypeToTsType(param.type, injectImportKeys)}${param.defaultDef ? `= ${param.defaultDef}` : ""}`).join(", ")} }`;
258
261
  }
259
262
 
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29kZS1jb252ZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29kZS1jb252ZXJ0ZXJz64qUIEFQSSDtg4DsnoUg7KCV7J2Y65Ok7J2EIFpvZCDqsJ3ssrTrgpggVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmY7ZWY64qUIO2VqOyImOuTpOydhCDsoJzqs7Xtlanri4jri6QuXG4gKlxuICogMS4gQVBJIOyLnOumrOymiOuTpDpcbiAqIC0gRXh0ZW5kZWRBcGksIEFwaVBhcmFtLCBBcGlQYXJhbVR5cGVcbiAqIC0gQVBJIOuplO2DgOuNsOydtO2EsOulvCDtkZztmITtlZjripQg7YOA7J6FIOygleydmOuTpFxuICpcbiAqIDIuIFpvZE9iamVjdCDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFpvZCDtg4DsnoUg7J247Iqk7YS07IqkICjrn7Dtg4DsnoQg67C466as642w7J207IWY7JqpKVxuICogLSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVxuICpcbiAqIDMuIFRzVHlwZURlZiDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFR5cGVTY3JpcHQg7YOA7J6FIOy9lOuTnCDrrLjsnpDsl7QgKOy9lOuTnCDsg53shLHsmqkpXG4gKiAtIGFwaVBhcmFtVHlwZVRvVHNUeXBlIOKGkiBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3RcbiAqXG4gKiDssLjqs6A6XG4gKiAtIFpvZFR5cGVEZWYg7IOd7ISxIChab2Qg7L2U65OcIOusuOyekOyXtCk6IHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvWm9kQ29kZSDsgqzsmqlcbiAqIC0gRW50aXR5UHJvcCDrs4DtmZg6IHpvZC1jb252ZXJ0ZXIudHMg7LC47KGwXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgY29yZSB9IGZyb20gXCJ6b2QvdjRcIjtcbmltcG9ydCB0eXBlIHsgJFpvZExvb3NlU2hhcGUgfSBmcm9tIFwiem9kL3Y0L2NvcmVcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbmRlZEFwaSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kT2JqZWN0ID0gei5ab2RPYmplY3Q8JFpvZExvb3NlU2hhcGU+O1xudHlwZSBBbnlab2RMaXRlcmFsID0gei5ab2RMaXRlcmFsPGNvcmUudXRpbC5MaXRlcmFsPjtcblxuLyoqXG4gKiBQcm9taXNlIO2DgOyeheydhCDtlZwg67KIIOyWuOuemO2Vke2VmOyXrCDrgrTrtoAg7YOA7J6F7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIFByb21pc2XqsIAg7JWE64uMIOqyveyasCDsm5Drs7gg7YOA7J6F7J2EIOq3uOuMgOuhnCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBQcm9taXNlT25jZShwYXJhbVR5cGU6IEFwaVBhcmFtVHlwZSkge1xuICBpZiAoQXBpUGFyYW1UeXBlLmlzUHJvbWlzZShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZS5hcmdzPy5bMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZTtcbiAgfVxufVxuXG4vKlxuICogQVBJ66W8IOq1rOyEse2VmOuKlCDsmpTshozrk6TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN0cmluZywgbnVtYmVyLCBhcnJheSwgdW5pb24g65OxIOuqqOuToCBBcGlQYXJhbVR5cGXsnYQg7LKY66as7ZWY66mwLFxuICog7Iic7ZmY7LC47KGw6rCAIOuwnOyDne2VmOuKlCDqsr3smrAgei51bmtub3duKCnsnLzroZwgZmFsbGJhY2vtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShcbiAgcGFyYW1UeXBlOiBBcGlQYXJhbVR5cGUsXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IEFueVpvZE9iamVjdDtcbiAgfSxcbik6IHouWm9kVHlwZTx1bmtub3duPiB7XG4gIHN3aXRjaCAocGFyYW1UeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHouc3RyaW5nKCk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB6LmJvb2xlYW4oKTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBhZHZUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB8IG51bWJlciB9O1xuICAgICAgc3dpdGNoIChhZHZUeXBlLnQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZy1saXRlcmFsXCI6XG4gICAgICAgIGNhc2UgXCJudW1lcmljLWxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gei5saXRlcmFsKGFkdlR5cGUudmFsdWUpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBjb25zdCBvYmpUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyBwcm9wczogQXBpUGFyYW1bXSB9O1xuICAgICAgICAgIHJldHVybiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKG9ialR5cGUucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOiB7XG4gICAgICAgICAgY29uc3QgYXJyVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB6LmFycmF5KGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyclR5cGUuZWxlbWVudHNUeXBlLCByZWZlcmVuY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlZlwiOiB7XG4gICAgICAgICAgY29uc3QgcmVmVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGF0ZSDtg4DsnoUg7LKY66asXG4gICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gei5kYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOqwneyytCDtgqQg6rSA66asIOycoO2LuOumrO2LsFxuICAgICAgICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiXS5pbmNsdWRlcyhyZWZUeXBlLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuYXJncz8ubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J6Y66q765CcICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtvYmosIGxpdGVyYWxPclVuaW9uXSA9IHJlZlR5cGUuYXJncy5tYXAoXG4gICAgICAgICAgICAgIChhcmcpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyZywgcmVmZXJlbmNlcyksXG4gICAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7IOd7ISx65CY64qUIFpvZFVuaW9u7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICApIGFzIFtBbnlab2RPYmplY3QsIHouWm9kVW5pb248YW55PiB8IEFueVpvZExpdGVyYWxdO1xuXG4gICAgICAgICAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsT3JVbmlvbiBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICAgICAgICAgICAga2V5cyA9IGxpdGVyYWxPclVuaW9uLmRlZi5vcHRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAob3B0aW9uOiB7IGRlZjogeyB2YWx1ZXM6IHN0cmluZ1tdIH0gfSkgPT4gb3B0aW9uLmRlZi52YWx1ZXNbMF0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBrZXlzID0gKGxpdGVyYWxPclVuaW9uIGFzIHouWm9kTGl0ZXJhbDxzdHJpbmc+KS5kZWYudmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkID0gT2JqZWN0LmZyb21FbnRyaWVzKGtleXMubWFwKChrZXkpID0+IFtrZXksIHRydWUgYXMgY29uc3RdKSk7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5pZCA9PT0gXCJQaWNrXCIpIHtcbiAgICAgICAgICAgICAgaWYgKG9iai5waWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iai5waWNrKGtleVJlY29yZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChvYmoub21pdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmoub21pdChrZXlSZWNvcmQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChbXCJQYXJ0aWFsXCJdLmluY2x1ZGVzKHJlZlR5cGUuaWQpKSB7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5hcmdzPy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnpjrqrvrkJwgJHtyZWZUeXBlLmlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2JqID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUocmVmVHlwZS5hcmdzWzBdLCByZWZlcmVuY2VzKTtcbiAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogUGFydGlhbCDsnbjsiJgg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAgICAgcmV0dXJuIChvYmogYXMgei5ab2RPYmplY3Q8YW55PikucGFydGlhbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzW3JlZlR5cGUuaWRdO1xuICAgICAgICAgIGlmIChyZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHoudW5rbm93bigpO1xuICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKGByZWYg7LC47KGwIOu2iOqwgCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInVuaW9uXCI6IHtcbiAgICAgICAgICBjb25zdCB1bmlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gbnVsbGFibGUg7Jyg64uI7JioXG4gICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlcy5sZW5ndGggPT09IDIgJiYgdW5pb25UeXBlLnR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlc1swXSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1sxXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh1bmlvblR5cGUudHlwZXNbMF0sIHJlZmVyZW5jZXMpLm51bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOydvOuwmCDsnKDri4jsmKhcbiAgICAgICAgICByZXR1cm4gei51bmlvbihcbiAgICAgICAgICAgIHVuaW9uVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvblR5cGUudHlwZXMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdCwgdHlwZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZSwgcmVmZXJlbmNlcyk7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFR5cGU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHouaW50ZXJzZWN0aW9uKHJlc3VsdCwgcmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHoudW5rbm93bigpIGFzIHouWm9kVHlwZTx1bmtub3duPixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ0dXBsZS10eXBlXCI6IHtcbiAgICAgICAgICBjb25zdCB0dXBsZVR5cGUgPSBwYXJhbVR5cGUgYXMgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZTtcbiAgICAgICAgICByZXR1cm4gei50dXBsZShcbiAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7IOd7ISx65CY64qUIFpvZFR1cGxl7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICB0dXBsZVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShlbGVtLCByZWZlcmVuY2VzKSkgYXMgYW55LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB6LnVua25vd24oKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOqwgSDtjIzrnbzrr7jthLDsnZggb3B0aW9uYWwg7Jes67aA66W8IOuwmOyYge2VmOyXrCBab2Qg7Iqk7YKk66eI66W8IOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gIGFwaVBhcmFtczogQXBpUGFyYW1bXSxcbiAgcmVmZXJlbmNlczoge1xuICAgIFtpZDogc3RyaW5nXTogQW55Wm9kT2JqZWN0O1xuICB9ID0ge30sXG4pOiB6LlpvZE9iamVjdCB7XG4gIHJldHVybiB6Lm9iamVjdChcbiAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhcGlQYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgICAgICBsZXQgem9kVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHBhcmFtLnR5cGUsIHJlZmVyZW5jZXMpO1xuICAgICAgICBpZiAocGFyYW0ub3B0aW9uYWwpIHtcbiAgICAgICAgICB6b2RUeXBlID0gem9kVHlwZS5vcHRpb25hbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcGFyYW0ubmFtZSwgem9kVHlwZV07XG4gICAgICB9KSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIEV4dGVuZGVkQXBp66W8IFpvZE9iamVjdOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBUeXBlUGFyYW1ldGVy7JmAIOydvOuwmCDtjIzrnbzrr7jthLDrpbwg7LKY66as7ZWY66mwLFxuICogQ29udGV4dCwgUmVmS25leCwgX+uhnCDsi5zsnpHtlZjripQgb3B0aW9uYWwg7YyM652866+47YSw64qUIOygnOyZuO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGkoXG4gIGFwaTogRXh0ZW5kZWRBcGksXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IEFueVpvZE9iamVjdDtcbiAgfSA9IHt9LFxuKSB7XG4gIGlmIChhcGkudHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IHR5cGVQYXJhbSBvZiBhcGkudHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIGlmICh0eXBlUGFyYW0uY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCB6b2RUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZVBhcmFtLmNvbnN0cmFpbnQsIHJlZmVyZW5jZXMpO1xuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IOugiO2NvOufsOyKpCDtg4DsnoUg7LqQ7Iqk7YyFXG4gICAgICAgIChyZWZlcmVuY2VzW3R5cGVQYXJhbS5pZF0gYXMgei5ab2RUeXBlPGFueT4pID0gem9kVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gICAgLy8gYXBpIHBhcnNpbmftlZwg6rKw6rO86rCAIGFwaSBwYXJhbXNcbiAgICBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICEocGFyYW0ub3B0aW9uYWwgPT09IHRydWUgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksIC8vIF/roZwg7Iuc7J6R7ZWY64qUIO2MjOudvOuvuO2EsOuKlCDsoJzsmbhcbiAgICApLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIHJldHVybiBSZXFUeXBlO1xufVxuXG4vKlxuICogQVBJIO2DgOyehSDsoJXsnZjrpbwgVHlwZVNjcmlwdCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhcnJheSwgcmVmIOuTsSDrqqjrk6Ag7YOA7J6F7J2EIFRTIOusuOuyleycvOuhnCDtkZztmITtlZjrqbAsXG4gKiBpbXBvcnTqsIAg7ZWE7JqU7ZWcIO2DgOyehSBJROuKlCBpbmplY3RJbXBvcnRLZXlz7JeQIOyImOynke2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChcbiAgICBbXG4gICAgICBcInN0cmluZ1wiLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgICBcIm51bGxcIixcbiAgICAgIFwidW5kZWZpbmVkXCIsXG4gICAgICBcInZvaWRcIixcbiAgICAgIFwiYW55XCIsXG4gICAgICBcInVua25vd25cIixcbiAgICBdLmluY2x1ZGVzKHBhcmFtVHlwZSBhcyBzdHJpbmcpXG4gICkge1xuICAgIHJldHVybiBwYXJhbVR5cGUgYXMgc3RyaW5nO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc09iamVjdChwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGB7ICR7YXBpUGFyYW1Ub1RzQ29kZShwYXJhbVR5cGUucHJvcHMsIGluamVjdEltcG9ydEtleXMpfSB9YDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNTdHJpbmdMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFwiJHtwYXJhbVR5cGUudmFsdWV9XCJgO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc051bWVyaWNMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtVHlwZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiB8IFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbnRlcnNlY3Rpb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiAmIFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNBcnJheShwYXJhbVR5cGUpKSB7XG4gICAgLy8gaW50ZXJzZWN0aW9u7J2064KYIHVuaW9u7J24IOqyveyasCDqtITtmLjroZwg6rCQ7Iu46riwXG4gICAgY29uc3QgZWxlbWVudHNUeXBlID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSwgaW5qZWN0SW1wb3J0S2V5cyk7XG4gICAgcmV0dXJuIEFwaVBhcmFtVHlwZS5pc0ludGVyc2VjdGlvbihwYXJhbVR5cGUuZWxlbWVudHNUeXBlKSB8fFxuICAgICAgQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSlcbiAgICAgID8gYCgke2VsZW1lbnRzVHlwZX0pW11gXG4gICAgICA6IGAke2VsZW1lbnRzVHlwZX1bXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzUmVmKHBhcmFtVHlwZSkpIHtcbiAgICBpZiAoW1wiUGlja1wiLCBcIk9taXRcIiwgXCJQcm9taXNlXCIsIFwiUGFydGlhbFwiLCBcIkRhdGVcIl0uaW5jbHVkZXMocGFyYW1UeXBlLmlkKSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIGltcG9ydEtleXMg7J247KCd7IWYXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocGFyYW1UeXBlLmlkKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtVHlwZS5hcmdzID09PSB1bmRlZmluZWQgfHwgcGFyYW1UeXBlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFyYW1UeXBlLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7cGFyYW1UeXBlLmlkfTwke3BhcmFtVHlwZS5hcmdzXG4gICAgICAgIC5tYXAoKGFyZykgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoYXJnLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCIsXCIpfT5gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbmRleGVkQWNjZXNzKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYCR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICBwYXJhbVR5cGUub2JqZWN0LFxuICAgICAgaW5qZWN0SW1wb3J0S2V5cyxcbiAgICApfVske2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5pbmRleCwgaW5qZWN0SW1wb3J0S2V5cyl9XWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHVwbGVUeXBlKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFsgJHtwYXJhbVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShlbGVtLCBpbmplY3RJbXBvcnRLZXlzKSl9IF1gO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc1R5cGVQYXJhbShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGAke3BhcmFtVHlwZS5pZH0ke1xuICAgICAgcGFyYW1UeXBlLmNvbnN0cmFpbnRcbiAgICAgICAgPyBgIGV4dGVuZHMgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwYXJhbVR5cGUuY29uc3RyYWludCwgaW5qZWN0SW1wb3J0S2V5cyl9YFxuICAgICAgICA6IFwiXCJcbiAgICB9YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlc29sdmUg67aI6rCAIEFwaVBhcmFtVHlwZSAke3BhcmFtVHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBUeXBlU2NyaXB0IO2VqOyImCDtjIzrnbzrr7jthLAg7L2U65Oc66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyYiDogXCJuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtczogQXBpUGFyYW1bXSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGFyYW1zXG4gICAgLm1hcCgocGFyYW0pID0+IHtcbiAgICAgIHJldHVybiBgJHtwYXJhbS5uYW1lfSR7XG4gICAgICAgIHBhcmFtLm9wdGlvbmFsICYmICFwYXJhbS5kZWZhdWx0RGVmID8gXCI/XCIgOiBcIlwiXG4gICAgICB9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtLnR5cGUsIGluamVjdEltcG9ydEtleXMpfSR7XG4gICAgICAgIHBhcmFtLmRlZmF1bHREZWYgPyBgPSAke3BhcmFtLmRlZmF1bHREZWZ9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCIsIFwiKTtcbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgVHlwZVNjcmlwdCDqsJ3ssrQg7YOA7J6FIOy9lOuTnOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDsmIg6IFwieyBuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZSB9XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVG9Uc0NvZGVBc09iamVjdChwYXJhbXM6IEFwaVBhcmFtW10sIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7ICR7cGFyYW1zXG4gICAgLm1hcChcbiAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgYCR7cGFyYW0ubmFtZX0ke3BhcmFtLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgICAgICBwYXJhbS50eXBlLFxuICAgICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICAgICl9JHtwYXJhbS5kZWZhdWx0RGVmID8gYD0gJHtwYXJhbS5kZWZhdWx0RGVmfWAgOiBcIlwifWAsXG4gICAgKVxuICAgIC5qb2luKFwiLCBcIil9IH1gO1xufVxuIl0sIm5hbWVzIjpbInoiLCJBcGlQYXJhbVR5cGUiLCJ1bndyYXBQcm9taXNlT25jZSIsInBhcmFtVHlwZSIsImlzUHJvbWlzZSIsImFyZ3MiLCJnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSIsInJlZmVyZW5jZXMiLCJzdHJpbmciLCJudW1iZXIiLCJib29sZWFuIiwiYWR2VHlwZSIsInQiLCJsaXRlcmFsIiwidmFsdWUiLCJvYmpUeXBlIiwiZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyIsInByb3BzIiwiYXJyVHlwZSIsImFycmF5IiwiZWxlbWVudHNUeXBlIiwicmVmVHlwZSIsImlkIiwiZGF0ZSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiRXJyb3IiLCJvYmoiLCJsaXRlcmFsT3JVbmlvbiIsIm1hcCIsImFyZyIsImtleXMiLCJab2RVbmlvbiIsImRlZiIsIm9wdGlvbnMiLCJvcHRpb24iLCJ2YWx1ZXMiLCJrZXlSZWNvcmQiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsImtleSIsInBpY2siLCJvbWl0IiwicGFydGlhbCIsInJlZmVyZW5jZSIsInVuZGVmaW5lZCIsInVua25vd24iLCJ1bmlvblR5cGUiLCJ0eXBlcyIsInNvbWUiLCJ0eXBlIiwibnVsbGFibGUiLCJ1bmlvbiIsImludGVyc2VjdGlvblR5cGUiLCJyZWR1Y2UiLCJyZXN1bHQiLCJpbmRleCIsInJlc29sdmVkVHlwZSIsImludGVyc2VjdGlvbiIsInR1cGxlVHlwZSIsInR1cGxlIiwiZWxlbWVudHMiLCJlbGVtIiwiYXBpUGFyYW1zIiwib2JqZWN0IiwicGFyYW0iLCJ6b2RUeXBlIiwib3B0aW9uYWwiLCJuYW1lIiwiZ2V0Wm9kT2JqZWN0RnJvbUFwaSIsImFwaSIsInR5cGVQYXJhbWV0ZXJzIiwidHlwZVBhcmFtIiwiY29uc3RyYWludCIsIlJlcVR5cGUiLCJwYXJhbWV0ZXJzIiwiZmlsdGVyIiwiaXNDb250ZXh0IiwiaXNSZWZLbmV4Iiwic3RhcnRzV2l0aCIsImFwaVBhcmFtVHlwZVRvVHNUeXBlIiwiaW5qZWN0SW1wb3J0S2V5cyIsImlzT2JqZWN0IiwiYXBpUGFyYW1Ub1RzQ29kZSIsImlzU3RyaW5nTGl0ZXJhbCIsImlzTnVtZXJpY0xpdGVyYWwiLCJTdHJpbmciLCJpc1VuaW9uIiwiam9pbiIsImlzSW50ZXJzZWN0aW9uIiwiaXNBcnJheSIsImlzUmVmIiwicHVzaCIsImlzSW5kZXhlZEFjY2VzcyIsImlzVHVwbGVUeXBlIiwiaXNUeXBlUGFyYW0iLCJwYXJhbXMiLCJkZWZhdWx0RGVmIiwiYXBpUGFyYW1Ub1RzQ29kZUFzT2JqZWN0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JDLEdBRUQsU0FBU0EsQ0FBQyxRQUFRLE1BQU07QUFHeEIsU0FBd0JDLFlBQVksUUFBUSxvQkFBaUI7QUFPN0Q7OztDQUdDLEdBQ0QsT0FBTyxTQUFTQyxrQkFBa0JDLFNBQXVCO0lBQ3ZELElBQUlGLGFBQWFHLFNBQVMsQ0FBQ0QsWUFBWTtRQUNyQyxPQUFPQSxVQUFVRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLE9BQU87UUFDTCxPQUFPRjtJQUNUO0FBQ0Y7QUFFQTs7Q0FFQyxHQUVEOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVNHLDJCQUNkSCxTQUF1QixFQUN2QkksVUFFQztJQUVELE9BQVFKO1FBQ04sS0FBSztZQUNILE9BQU9ILEVBQUVRLE1BQU07UUFDakIsS0FBSztZQUNILE9BQU9SLEVBQUVTLE1BQU07UUFDakIsS0FBSztZQUNILE9BQU9ULEVBQUVVLE9BQU87UUFDbEI7WUFBUztnQkFDUCxNQUFNQyxVQUFVUjtnQkFDaEIsT0FBUVEsUUFBUUMsQ0FBQztvQkFDZixLQUFLO29CQUNMLEtBQUs7d0JBQ0gsT0FBT1osRUFBRWEsT0FBTyxDQUFDRixRQUFRRyxLQUFLO29CQUNoQyxLQUFLO3dCQUFVOzRCQUNiLE1BQU1DLFVBQVVaOzRCQUNoQixPQUFPYSwwQkFBMEJELFFBQVFF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
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29kZS1jb252ZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29kZS1jb252ZXJ0ZXJz64qUIEFQSSDtg4DsnoUg7KCV7J2Y65Ok7J2EIFpvZCDqsJ3ssrTrgpggVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmY7ZWY64qUIO2VqOyImOuTpOydhCDsoJzqs7Xtlanri4jri6QuXG4gKlxuICogMS4gQVBJIOyLnOumrOymiOuTpDpcbiAqIC0gRXh0ZW5kZWRBcGksIEFwaVBhcmFtLCBBcGlQYXJhbVR5cGVcbiAqIC0gQVBJIOuplO2DgOuNsOydtO2EsOulvCDtkZztmITtlZjripQg7YOA7J6FIOygleydmOuTpFxuICpcbiAqIDIuIFpvZE9iamVjdCDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFpvZCDtg4DsnoUg7J247Iqk7YS07IqkICjrn7Dtg4DsnoQg67C466as642w7J207IWY7JqpKVxuICogLSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVxuICpcbiAqIDMuIFRzVHlwZURlZiDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFR5cGVTY3JpcHQg7YOA7J6FIOy9lOuTnCDrrLjsnpDsl7QgKOy9lOuTnCDsg53shLHsmqkpXG4gKiAtIGFwaVBhcmFtVHlwZVRvVHNUeXBlIOKGkiBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3RcbiAqXG4gKiDssLjqs6A6XG4gKiAtIFpvZFR5cGVEZWYg7IOd7ISxIChab2Qg7L2U65OcIOusuOyekOyXtCk6IHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvWm9kQ29kZSDsgqzsmqlcbiAqIC0gRW50aXR5UHJvcCDrs4DtmZg6IHpvZC1jb252ZXJ0ZXIudHMg7LC47KGwXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgY29yZSB9IGZyb20gXCJ6b2QvdjRcIjtcbmltcG9ydCB0eXBlIHsgJFpvZExvb3NlU2hhcGUgfSBmcm9tIFwiem9kL3Y0L2NvcmVcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbmRlZEFwaSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kT2JqZWN0ID0gei5ab2RPYmplY3Q8JFpvZExvb3NlU2hhcGU+O1xudHlwZSBBbnlab2RMaXRlcmFsID0gei5ab2RMaXRlcmFsPGNvcmUudXRpbC5MaXRlcmFsPjtcblxuLyoqXG4gKiBQcm9taXNlIO2DgOyeheydhCDtlZwg67KIIOyWuOuemO2Vke2VmOyXrCDrgrTrtoAg7YOA7J6F7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIFByb21pc2XqsIAg7JWE64uMIOqyveyasCDsm5Drs7gg7YOA7J6F7J2EIOq3uOuMgOuhnCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBQcm9taXNlT25jZShwYXJhbVR5cGU6IEFwaVBhcmFtVHlwZSkge1xuICBpZiAoQXBpUGFyYW1UeXBlLmlzUHJvbWlzZShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZS5hcmdzPy5bMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZTtcbiAgfVxufVxuXG4vKlxuICogQVBJ66W8IOq1rOyEse2VmOuKlCDsmpTshozrk6TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN0cmluZywgbnVtYmVyLCBhcnJheSwgdW5pb24g65OxIOuqqOuToCBBcGlQYXJhbVR5cGXsnYQg7LKY66as7ZWY66mwLFxuICog7Iic7ZmY7LC47KGw6rCAIOuwnOyDne2VmOuKlCDqsr3smrAgei51bmtub3duKCnsnLzroZwgZmFsbGJhY2vtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShcbiAgcGFyYW1UeXBlOiBBcGlQYXJhbVR5cGUsXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IHouWm9kVHlwZTtcbiAgfSxcbik6IHouWm9kVHlwZTx1bmtub3duPiB7XG4gIHN3aXRjaCAocGFyYW1UeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHouc3RyaW5nKCk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB6LmJvb2xlYW4oKTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBhZHZUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB8IG51bWJlciB9O1xuICAgICAgc3dpdGNoIChhZHZUeXBlLnQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZy1saXRlcmFsXCI6XG4gICAgICAgIGNhc2UgXCJudW1lcmljLWxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gei5saXRlcmFsKGFkdlR5cGUudmFsdWUpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBjb25zdCBvYmpUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyBwcm9wczogQXBpUGFyYW1bXSB9O1xuICAgICAgICAgIHJldHVybiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKG9ialR5cGUucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOiB7XG4gICAgICAgICAgY29uc3QgYXJyVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB6LmFycmF5KGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyclR5cGUuZWxlbWVudHNUeXBlLCByZWZlcmVuY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlZlwiOiB7XG4gICAgICAgICAgY29uc3QgcmVmVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGF0ZSDtg4DsnoUg7LKY66asXG4gICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gei5kYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOqwneyytCDtgqQg6rSA66asIOycoO2LuOumrO2LsFxuICAgICAgICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiXS5pbmNsdWRlcyhyZWZUeXBlLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuYXJncz8ubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J6Y66q765CcICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtvYmosIGxpdGVyYWxPclVuaW9uXSA9IHJlZlR5cGUuYXJncy5tYXAoXG4gICAgICAgICAgICAgIChhcmcpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyZywgcmVmZXJlbmNlcyksXG4gICAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7IOd7ISx65CY64qUIFpvZFVuaW9u7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICApIGFzIFtBbnlab2RPYmplY3QsIHouWm9kVW5pb248YW55PiB8IEFueVpvZExpdGVyYWxdO1xuXG4gICAgICAgICAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsT3JVbmlvbiBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICAgICAgICAgICAga2V5cyA9IGxpdGVyYWxPclVuaW9uLmRlZi5vcHRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAob3B0aW9uOiB7IGRlZjogeyB2YWx1ZXM6IHN0cmluZ1tdIH0gfSkgPT4gb3B0aW9uLmRlZi52YWx1ZXNbMF0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBrZXlzID0gKGxpdGVyYWxPclVuaW9uIGFzIHouWm9kTGl0ZXJhbDxzdHJpbmc+KS5kZWYudmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkID0gT2JqZWN0LmZyb21FbnRyaWVzKGtleXMubWFwKChrZXkpID0+IFtrZXksIHRydWUgYXMgY29uc3RdKSk7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5pZCA9PT0gXCJQaWNrXCIpIHtcbiAgICAgICAgICAgICAgaWYgKG9iai5waWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBab2QgNC4zLjYgcGljayDtg4DsnoUg7Zi47ZmY7ISxXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iai5waWNrKGtleVJlY29yZCBhcyBhbnkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAob2JqLm9taXQpIHtcbiAgICAgICAgICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IFpvZCA0LjMuNiBvbWl0IO2DgOyehSDtmLjtmZjshLFcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqLm9taXQoa2V5UmVjb3JkIGFzIGFueSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFtcIlBhcnRpYWxcIl0uaW5jbHVkZXMocmVmVHlwZS5pZCkpIHtcbiAgICAgICAgICAgIGlmIChyZWZUeXBlLmFyZ3M/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyemOuqu+uQnCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvYmogPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShyZWZUeXBlLmFyZ3NbMF0sIHJlZmVyZW5jZXMpO1xuICAgICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQYXJ0aWFsIOyduOyImCDtg4DsnoUg7LqQ7Iqk7YyFXG4gICAgICAgICAgICByZXR1cm4gKG9iaiBhcyB6LlpvZE9iamVjdDxhbnk+KS5wYXJ0aWFsKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHJlZmVyZW5jZXNbcmVmVHlwZS5pZF07XG4gICAgICAgICAgaWYgKHJlZmVyZW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gei51bmtub3duKCk7XG4gICAgICAgICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYHJlZiDssLjsobAg67aI6rCAICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwidW5pb25cIjoge1xuICAgICAgICAgIGNvbnN0IHVuaW9uVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlczogQXBpUGFyYW1UeXBlW107XG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBudWxsYWJsZSDsnKDri4jsmKhcbiAgICAgICAgICBpZiAodW5pb25UeXBlLnR5cGVzLmxlbmd0aCA9PT0gMiAmJiB1bmlvblR5cGUudHlwZXMuc29tZSgodHlwZSkgPT4gdHlwZSA9PT0gXCJudWxsXCIpKSB7XG4gICAgICAgICAgICBpZiAodW5pb25UeXBlLnR5cGVzWzBdID09PSBcIm51bGxcIikge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodW5pb25UeXBlLnR5cGVzWzFdLCByZWZlcmVuY2VzKS5udWxsYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1swXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8g7J2867CYIOycoOuLiOyYqFxuICAgICAgICAgIHJldHVybiB6LnVuaW9uKFxuICAgICAgICAgICAgdW5pb25UeXBlLnR5cGVzLm1hcCgodHlwZSkgPT4gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZSwgcmVmZXJlbmNlcykpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImludGVyc2VjdGlvblwiOiB7XG4gICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlczogQXBpUGFyYW1UeXBlW107XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uVHlwZS50eXBlcy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0LCB0eXBlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFR5cGUgPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh0eXBlLCByZWZlcmVuY2VzKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkVHlwZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gei5pbnRlcnNlY3Rpb24ocmVzdWx0LCByZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgei51bmtub3duKCkgYXMgei5ab2RUeXBlPHVua25vd24+LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInR1cGxlLXR5cGVcIjoge1xuICAgICAgICAgIGNvbnN0IHR1cGxlVHlwZSA9IHBhcmFtVHlwZSBhcyBBcGlQYXJhbVR5cGUuVHVwbGVUeXBlO1xuICAgICAgICAgIHJldHVybiB6LnR1cGxlKFxuICAgICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiDsg53shLHrkJjripQgWm9kVHVwbGXsnZgg7YOA7J6F7J2EIOy2lOygge2VmOq4sCDslrTroKTsm4BcbiAgICAgICAgICAgIHR1cGxlVHlwZS5lbGVtZW50cy5tYXAoKGVsZW0pID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGVsZW0sIHJlZmVyZW5jZXMpKSBhcyBhbnksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHoudW5rbm93bigpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBab2RPYmplY3TroZwg67OA7ZmY7ZWp64uI64ukLlxuICog6rCBIO2MjOudvOuvuO2EsOydmCBvcHRpb25hbCDsl6zrtoDrpbwg67CY7JiB7ZWY7JesIFpvZCDsiqTtgqTrp4jrpbwg7IOd7ISx7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyhcbiAgYXBpUGFyYW1zOiBBcGlQYXJhbVtdLFxuICByZWZlcmVuY2VzOiB7XG4gICAgW2lkOiBzdHJpbmddOiB6LlpvZFR5cGU7XG4gIH0gPSB7fSxcbik6IHouWm9kT2JqZWN0IHtcbiAgcmV0dXJuIHoub2JqZWN0KFxuICAgIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGFwaVBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICAgIGxldCB6b2RUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUocGFyYW0udHlwZSwgcmVmZXJlbmNlcyk7XG4gICAgICAgIGlmIChwYXJhbS5vcHRpb25hbCkge1xuICAgICAgICAgIHpvZFR5cGUgPSB6b2RUeXBlLm9wdGlvbmFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtwYXJhbS5uYW1lLCB6b2RUeXBlXTtcbiAgICAgIH0pLFxuICAgICksXG4gICk7XG59XG5cbi8qKlxuICogRXh0ZW5kZWRBcGnrpbwgWm9kT2JqZWN066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIFR5cGVQYXJhbWV0ZXLsmYAg7J2867CYIO2MjOudvOuvuO2EsOulvCDsspjrpqztlZjrqbAsXG4gKiBDb250ZXh0LCBSZWZLbmV4LCBf66GcIOyLnOyeke2VmOuKlCBvcHRpb25hbCDtjIzrnbzrr7jthLDripQg7KCc7Jm47ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Wm9kT2JqZWN0RnJvbUFwaShcbiAgYXBpOiBFeHRlbmRlZEFwaSxcbiAgcmVmZXJlbmNlczoge1xuICAgIFtpZDogc3RyaW5nXTogei5ab2RUeXBlO1xuICB9ID0ge30sXG4pIHtcbiAgaWYgKGFwaS50eXBlUGFyYW1ldGVycz8ubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgdHlwZVBhcmFtIG9mIGFwaS50eXBlUGFyYW1ldGVycykge1xuICAgICAgaWYgKHR5cGVQYXJhbS5jb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh0eXBlUGFyYW0uY29uc3RyYWludCwgcmVmZXJlbmNlcyk7XG5cbiAgICAgICAgLy8gRklYTUU6IHJlZmVyZW5jZXPripQg6riA66Gc67KMIOyYpOu4jOygne2KuOuhnCwgdHlwZVBhcmFtLmlkKFwiVFwiIOuTsSnrpbwga2V566GcIOydtOugh+qyjCDrja7slrTslIzsm4zrsoTrpqzrqbQgbG9hZGVkVHlwZXPqsIAg7Jik7Je865CoLlxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IOugiO2NvOufsOyKpCDtg4DsnoUg7LqQ7Iqk7YyFXG4gICAgICAgIChyZWZlcmVuY2VzW3R5cGVQYXJhbS5pZF0gYXMgei5ab2RUeXBlPGFueT4pID0gem9kVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gICAgLy8gYXBpIHBhcnNpbmftlZwg6rKw6rO86rCAIGFwaSBwYXJhbXNcbiAgICBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICEocGFyYW0ub3B0aW9uYWwgPT09IHRydWUgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksIC8vIF/roZwg7Iuc7J6R7ZWY64qUIO2MjOudvOuvuO2EsOuKlCDsoJzsmbhcbiAgICApLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIHJldHVybiBSZXFUeXBlO1xufVxuXG4vKlxuICogQVBJIO2DgOyehSDsoJXsnZjrpbwgVHlwZVNjcmlwdCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhcnJheSwgcmVmIOuTsSDrqqjrk6Ag7YOA7J6F7J2EIFRTIOusuOuyleycvOuhnCDtkZztmITtlZjrqbAsXG4gKiBpbXBvcnTqsIAg7ZWE7JqU7ZWcIO2DgOyehSBJROuKlCBpbmplY3RJbXBvcnRLZXlz7JeQIOyImOynke2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChcbiAgICBbXG4gICAgICBcInN0cmluZ1wiLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgICBcIm51bGxcIixcbiAgICAgIFwidW5kZWZpbmVkXCIsXG4gICAgICBcInZvaWRcIixcbiAgICAgIFwiYW55XCIsXG4gICAgICBcInVua25vd25cIixcbiAgICBdLmluY2x1ZGVzKHBhcmFtVHlwZSBhcyBzdHJpbmcpXG4gICkge1xuICAgIHJldHVybiBwYXJhbVR5cGUgYXMgc3RyaW5nO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc09iamVjdChwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGB7ICR7YXBpUGFyYW1Ub1RzQ29kZShwYXJhbVR5cGUucHJvcHMsIGluamVjdEltcG9ydEtleXMpfSB9YDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNTdHJpbmdMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFwiJHtwYXJhbVR5cGUudmFsdWV9XCJgO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc051bWVyaWNMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtVHlwZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiB8IFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbnRlcnNlY3Rpb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiAmIFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNBcnJheShwYXJhbVR5cGUpKSB7XG4gICAgLy8gaW50ZXJzZWN0aW9u7J2064KYIHVuaW9u7J24IOqyveyasCDqtITtmLjroZwg6rCQ7Iu46riwXG4gICAgY29uc3QgZWxlbWVudHNUeXBlID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSwgaW5qZWN0SW1wb3J0S2V5cyk7XG4gICAgcmV0dXJuIEFwaVBhcmFtVHlwZS5pc0ludGVyc2VjdGlvbihwYXJhbVR5cGUuZWxlbWVudHNUeXBlKSB8fFxuICAgICAgQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSlcbiAgICAgID8gYCgke2VsZW1lbnRzVHlwZX0pW11gXG4gICAgICA6IGAke2VsZW1lbnRzVHlwZX1bXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzUmVmKHBhcmFtVHlwZSkpIHtcbiAgICBpZiAoW1wiUGlja1wiLCBcIk9taXRcIiwgXCJQcm9taXNlXCIsIFwiUGFydGlhbFwiLCBcIkRhdGVcIl0uaW5jbHVkZXMocGFyYW1UeXBlLmlkKSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIGltcG9ydEtleXMg7J247KCd7IWYXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocGFyYW1UeXBlLmlkKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtVHlwZS5hcmdzID09PSB1bmRlZmluZWQgfHwgcGFyYW1UeXBlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFyYW1UeXBlLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7cGFyYW1UeXBlLmlkfTwke3BhcmFtVHlwZS5hcmdzXG4gICAgICAgIC5tYXAoKGFyZykgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoYXJnLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCIsXCIpfT5gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbmRleGVkQWNjZXNzKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYCR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICBwYXJhbVR5cGUub2JqZWN0LFxuICAgICAgaW5qZWN0SW1wb3J0S2V5cyxcbiAgICApfVske2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5pbmRleCwgaW5qZWN0SW1wb3J0S2V5cyl9XWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHVwbGVUeXBlKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFsgJHtwYXJhbVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShlbGVtLCBpbmplY3RJbXBvcnRLZXlzKSl9IF1gO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc1R5cGVQYXJhbShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGAke3BhcmFtVHlwZS5pZH0ke1xuICAgICAgcGFyYW1UeXBlLmNvbnN0cmFpbnRcbiAgICAgICAgPyBgIGV4dGVuZHMgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwYXJhbVR5cGUuY29uc3RyYWludCwgaW5qZWN0SW1wb3J0S2V5cyl9YFxuICAgICAgICA6IFwiXCJcbiAgICB9YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlc29sdmUg67aI6rCAIEFwaVBhcmFtVHlwZSAke3BhcmFtVHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBUeXBlU2NyaXB0IO2VqOyImCDtjIzrnbzrr7jthLAg7L2U65Oc66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyYiDogXCJuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtczogQXBpUGFyYW1bXSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGFyYW1zXG4gICAgLm1hcCgocGFyYW0pID0+IHtcbiAgICAgIHJldHVybiBgJHtwYXJhbS5uYW1lfSR7XG4gICAgICAgIHBhcmFtLm9wdGlvbmFsICYmICFwYXJhbS5kZWZhdWx0RGVmID8gXCI/XCIgOiBcIlwiXG4gICAgICB9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtLnR5cGUsIGluamVjdEltcG9ydEtleXMpfSR7XG4gICAgICAgIHBhcmFtLmRlZmF1bHREZWYgPyBgPSAke3BhcmFtLmRlZmF1bHREZWZ9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCIsIFwiKTtcbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgVHlwZVNjcmlwdCDqsJ3ssrQg7YOA7J6FIOy9lOuTnOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDsmIg6IFwieyBuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZSB9XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVG9Uc0NvZGVBc09iamVjdChwYXJhbXM6IEFwaVBhcmFtW10sIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7ICR7cGFyYW1zXG4gICAgLm1hcChcbiAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgYCR7cGFyYW0ubmFtZX0ke3BhcmFtLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgICAgICBwYXJhbS50eXBlLFxuICAgICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICAgICl9JHtwYXJhbS5kZWZhdWx0RGVmID8gYD0gJHtwYXJhbS5kZWZhdWx0RGVmfWAgOiBcIlwifWAsXG4gICAgKVxuICAgIC5qb2luKFwiLCBcIil9IH1gO1xufVxuIl0sIm5hbWVzIjpbInoiLCJBcGlQYXJhbVR5cGUiLCJ1bndyYXBQcm9taXNlT25jZSIsInBhcmFtVHlwZSIsImlzUHJvbWlzZSIsImFyZ3MiLCJnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSIsInJlZmVyZW5jZXMiLCJzdHJpbmciLCJudW1iZXIiLCJib29sZWFuIiwiYWR2VHlwZSIsInQiLCJsaXRlcmFsIiwidmFsdWUiLCJvYmpUeXBlIiwiZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyIsInByb3BzIiwiYXJyVHlwZSIsImFycmF5IiwiZWxlbWVudHNUeXBlIiwicmVmVHlwZSIsImlkIiwiZGF0ZSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiRXJyb3IiLCJvYmoiLCJsaXRlcmFsT3JVbmlvbiIsIm1hcCIsImFyZyIsImtleXMiLCJab2RVbmlvbiIsImRlZiIsIm9wdGlvbnMiLCJvcHRpb24iLCJ2YWx1ZXMiLCJrZXlSZWNvcmQiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsImtleSIsInBpY2siLCJvbWl0IiwicGFydGlhbCIsInJlZmVyZW5jZSIsInVuZGVmaW5lZCIsInVua25vd24iLCJ1bmlvblR5cGUiLCJ0eXBlcyIsInNvbWUiLCJ0eXBlIiwibnVsbGFibGUiLCJ1bmlvbiIsImludGVyc2VjdGlvblR5cGUiLCJyZWR1Y2UiLCJyZXN1bHQiLCJpbmRleCIsInJlc29sdmVkVHlwZSIsImludGVyc2VjdGlvbiIsInR1cGxlVHlwZSIsInR1cGxlIiwiZWxlbWVudHMiLCJlbGVtIiwiYXBpUGFyYW1zIiwib2JqZWN0IiwicGFyYW0iLCJ6b2RUeXBlIiwib3B0aW9uYWwiLCJuYW1lIiwiZ2V0Wm9kT2JqZWN0RnJvbUFwaSIsImFwaSIsInR5cGVQYXJhbWV0ZXJzIiwidHlwZVBhcmFtIiwiY29uc3RyYWludCIsIlJlcVR5cGUiLCJwYXJhbWV0ZXJzIiwiZmlsdGVyIiwiaXNDb250ZXh0IiwiaXNSZWZLbmV4Iiwic3RhcnRzV2l0aCIsImFwaVBhcmFtVHlwZVRvVHNUeXBlIiwiaW5qZWN0SW1wb3J0S2V5cyIsImlzT2JqZWN0IiwiYXBpUGFyYW1Ub1RzQ29kZSIsImlzU3RyaW5nTGl0ZXJhbCIsImlzTnVtZXJpY0xpdGVyYWwiLCJTdHJpbmciLCJpc1VuaW9uIiwiam9pbiIsImlzSW50ZXJzZWN0aW9uIiwiaXNBcnJheSIsImlzUmVmIiwicHVzaCIsImlzSW5kZXhlZEFjY2VzcyIsImlzVHVwbGVUeXBlIiwiaXNUeXBlUGFyYW0iLCJwYXJhbXMiLCJkZWZhdWx0RGVmIiwiYXBpUGFyYW1Ub1RzQ29kZUFzT2JqZWN0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JDLEdBRUQsU0FBU0EsQ0FBQyxRQUFRLE1BQU07QUFHeEIsU0FBd0JDLFlBQVksUUFBUSxvQkFBaUI7QUFPN0Q7OztDQUdDLEdBQ0QsT0FBTyxTQUFTQyxrQkFBa0JDLFNBQXVCO0lBQ3ZELElBQUlGLGFBQWFHLFNBQVMsQ0FBQ0QsWUFBWTtRQUNyQyxPQUFPQSxVQUFVRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLE9BQU87UUFDTCxPQUFPRjtJQUNUO0FBQ0Y7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
@@ -2,9 +2,8 @@ import type { FastifyCompressOptions } from "@fastify/compress";
2
2
  import type { FastifyCorsOptions } from "@fastify/cors";
3
3
  import type { FastifyFormbodyOptions } from "@fastify/formbody";
4
4
  import type { FastifyMultipartOptions } from "@fastify/multipart";
5
- import type { DeserializeFunction, SerializeFunction } from "@fastify/passport/dist/Authenticator";
6
- import type { SecureSessionPluginOptions } from "@fastify/secure-session";
7
5
  import type { FastifyStaticOptions } from "@fastify/static";
6
+ import type { BetterAuthOptions } from "better-auth";
8
7
  import type { FastifyInstance, FastifyReply, FastifyRequest, FastifyServerOptions } from "fastify";
9
8
  import type { QsPluginOptions } from "fastify-qs";
10
9
  import type { SsePluginOptions } from "fastify-sse-v2/lib/types";
@@ -15,7 +14,7 @@ import type { SonamuLoggingOptions } from "../logger/configure";
15
14
  import type { StorageConfig } from "../storage/types";
16
15
  import type { WorkflowOptions } from "../tasks/workflow-manager";
17
16
  import type { Executable, SonamuFastifyConfig } from "../types/types";
18
- import type { AuthContext, Context } from "./context";
17
+ import type { Context } from "./context";
19
18
  export type DatabaseConfig = Omit<Knex.Config, "connection"> & {
20
19
  connection?: Knex.PgConnectionConfig;
21
20
  };
@@ -130,13 +129,12 @@ export type SonamuServerOptions = {
130
129
  qs?: boolean | QsPluginOptions;
131
130
  sse?: boolean | SsePluginOptions;
132
131
  static?: boolean | FastifyStaticOptions;
133
- session?: boolean | SecureSessionPluginOptions;
134
132
  custom?: (server: FastifyInstance) => void;
135
133
  };
136
- auth?: boolean | {
137
- userSerializer: SerializeFunction<unknown, unknown>;
138
- userDeserializer: DeserializeFunction<unknown, unknown>;
139
- };
134
+ /**
135
+ * better-auth 인증 설정
136
+ */
137
+ auth?: BetterAuthOptions;
140
138
  apiConfig: SonamuFastifyConfig;
141
139
  /**
142
140
  * Storage 드라이버 설정.
@@ -185,7 +183,7 @@ export type SonamuServerOptions = {
185
183
  export type SonamuTaskOptions = {
186
184
  enableWorker?: boolean;
187
185
  workerOptions?: WorkflowOptions;
188
- contextProvider: (defaultContext: Pick<Context, "reply" | "request" | "headers" | "createSSE" | "naiteStore" | "locale"> & AuthContext) => Context | Promise<Context>;
186
+ contextProvider: (defaultContext: Pick<Context, "reply" | "request" | "headers" | "createSSE" | "naiteStore" | "locale" | "user" | "session">) => Context | Promise<Context>;
189
187
  };
190
188
  export type SonamuSSROptions = {
191
189
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
@@ -26,4 +26,4 @@ export function defineConfig(config) {
26
26
  return config;
27
27
  }
28
28
 
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeUNvbXByZXNzT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9jb21wcmVzc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5Q29yc09wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvY29yc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2Zvcm1ib2R5XCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHR5cGUgeyBEZXNlcmlhbGl6ZUZ1bmN0aW9uLCBTZXJpYWxpemVGdW5jdGlvbiB9IGZyb20gXCJAZmFzdGlmeS9wYXNzcG9ydC9kaXN0L0F1dGhlbnRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIHsgU2VjdXJlU2Vzc2lvblBsdWdpbk9wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvc2VjdXJlLXNlc3Npb25cIjtcbmltcG9ydCB0eXBlIHsgRmFzdGlmeVN0YXRpY09wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvc3RhdGljXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlJbnN0YW5jZSwgRmFzdGlmeVJlcGx5LCBGYXN0aWZ5UmVxdWVzdCwgRmFzdGlmeVNlcnZlck9wdGlvbnMgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHR5cGUgeyBRc1BsdWdpbk9wdGlvbnMgfSBmcm9tIFwiZmFzdGlmeS1xc1wiO1xuaW1wb3J0IHR5cGUgeyBTc2VQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktc3NlLXYyL2xpYi90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVDb25maWcgfSBmcm9tIFwiLi4vY2FjaGUvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11TG9nZ2luZ09wdGlvbnMgfSBmcm9tIFwiLi4vbG9nZ2VyL2NvbmZpZ3VyZVwiO1xuaW1wb3J0IHR5cGUgeyBTdG9yYWdlQ29uZmlnIH0gZnJvbSBcIi4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dPcHRpb25zIH0gZnJvbSBcIi4uL3Rhc2tzL3dvcmtmbG93LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgRXhlY3V0YWJsZSwgU29uYW11RmFzdGlmeUNvbmZpZyB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBdXRoQ29udGV4dCwgQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIjtcblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VDb25maWcgPSBPbWl0PEtuZXguQ29uZmlnLCBcImNvbm5lY3Rpb25cIj4gJiB7XG4gIGNvbm5lY3Rpb24/OiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbn07XG5cbi8qKlxuICogaTE4biDshKTsoJVcbiAqL1xuZXhwb3J0IHR5cGUgU29uYW11STE4bk9wdGlvbnMgPSB7XG4gIC8qKiDquLDrs7ggbG9jYWxlICjtgqQg7KCV7J2YIOq4sOykgCArIOufsO2DgOyehCDquLDrs7jqsJIpICovXG4gIGRlZmF1bHRMb2NhbGU6IHN0cmluZztcbiAgLyoqIOyngOybkO2VmOuKlCBsb2NhbGUg66qp66GdICovXG4gIHN1cHBvcnRlZExvY2FsZXM6IHN0cmluZ1tdO1xufTtcblxuLyoqXG4gKiDthYzsiqTtirgg7ISk7KCVXG4gKiB2aXRlc3Qg67OR66CsIO2FjOyKpO2MheydhCBzb25hbXUuY29uZmlnLnRzIO2VnCDqs7Psl5DshJwg6rSA66as7ZWY6riwIOychO2VnCDshKTsoJXsnoXri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIFNvbmFtdVRlc3RDb25maWcgPSB7XG4gIC8qKiDrs5HroKwg7YWM7Iqk7YyFIO2ZnOyEse2ZlCAo6riw67O4OiBmYWxzZSkgKi9cbiAgcGFyYWxsZWw/OiBib29sZWFuO1xuICAvKiog67OR66CsIOyLpO2WiSDsm4zsu6Qg7IiYICjquLDrs7g6IDQpICovXG4gIG1heFdvcmtlcnM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVDb25maWc8VFNpbmtJZCBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEZpbHRlcklkIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IHtcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgYXBpOiB7XG4gICAgZGlyOiBzdHJpbmc7XG4gICAgcm91dGU6IHtcbiAgICAgIHByZWZpeDogc3RyaW5nO1xuICAgIH07XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIGkxOG4g7ISk7KCVXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaTE4bjoge1xuICAgKiAgIGRlZmF1bHRMb2NhbGU6ICdrbycsXG4gICAqICAgc3VwcG9ydGVkTG9jYWxlczogWydrbycsICdlbicsICdqYSddLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgaTE4bjogU29uYW11STE4bk9wdGlvbnM7XG5cbiAgc3luYzoge1xuICAgIHRhcmdldHM6IHN0cmluZ1tdOyAvLyBcIndlYlwiLCBcImFwcFwiIOuTsVxuICB9O1xuXG4gIGRhdGFiYXNlOiB7XG4gICAgLy8g642w7J207YSw67Kg7J207IqkKHBn64qUIHBnIOuqqOuTiCwgcGduYXRpdmXripQgcGctbmF0aXZlIOuqqOuTiOydmCDshKTsuZjqsIAg7ZWE7JqU7ZWp64uI64ukLilcbiAgICBkYXRhYmFzZT86IFwicGdcIiB8IFwicGduYXRpdmVcIjtcbiAgICAvLyDquLDrs7gg642w7J207YSw67Kg7J207IqkIOydtOumhFxuICAgIG5hbWU6IHN0cmluZztcbiAgICAvLyDrqqjrk6Ag7ZmY6rK97JeQIOyggeyaqeuQoCDquLDrs7ggS25leCDsmLXshZhcbiAgICBkZWZhdWx0T3B0aW9uczogRGF0YWJhc2VDb25maWc7XG4gICAgLy8g7ZmY6rK967OEIOyEpOyglVxuICAgIGVudmlyb25tZW50cz86IHtcbiAgICAgIGRldmVsb3BtZW50PzogRGF0YWJhc2VDb25maWc7XG4gICAgICBkZXZlbG9wbWVudF9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbj86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbl9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgZml4dHVyZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgdGVzdD86IERhdGFiYXNlQ29uZmlnO1xuICAgIH07XG4gIH07XG5cbiAgbG9nZ2luZz86IGZhbHNlIHwgU29uYW11TG9nZ2luZ09wdGlvbnM8VFNpbmtJZCwgVEZpbHRlcklkPjtcbiAgc2VydmVyOiBTb25hbXVTZXJ2ZXJPcHRpb25zO1xuICB0YXNrcz86IFNvbmFtdVRhc2tPcHRpb25zO1xuXG4gIC8qKlxuICAgKiDthYzsiqTtirgg7ISk7KCVICjrs5HroKwg7YWM7Iqk7YyFIOuTsSlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0ZXN0OiB7XG4gICAqICAgcGFyYWxsZWw6IHRydWUsXG4gICAqICAgbWF4V29ya2VyczogNCxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHRlc3Q/OiBTb25hbXVUZXN0Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBTbGFjayDsirnsnbgg7ISk7KCVIChQcm9kdWN0aW9uIOuniOydtOq3uOugiOydtOyFmOyaqSlcbiAgICpcbiAgICogUHJvZHVjdGlvbiBEQiDrp4jsnbTqt7jroIjsnbTshZgg7IucIFNsYWNr7J2EIO2Gte2VnCDsirnsnbgg7ZSE66Gc7IS47Iqk66W8IO2ZnOyEse2ZlO2VqeuLiOuLpC5cbiAgICog7ISk7KCV7J20IOyXhuycvOuptCDquLDsobQg64+Z7J6RKOuwlOuhnCDsi6Ttlokp7Jy866GcIOuPmeyeke2VqeuLiOuLpC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBzbGFja0NvbmZpcm06IHtcbiAgICogICB0YXJnZXRzOiBbXCJwcm9kdWN0aW9uXCJdLFxuICAgKiAgIGJvdFRva2VuOiBwcm9jZXNzLmVudi5TTEFDS19CT1RfVE9LRU4gPz8gXCJcIixcbiAgICogICBjaGFubmVsSWQ6IHByb2Nlc3MuZW52LlNMQUNLX0NIQU5ORUxfSUQgPz8gXCJcIixcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHNsYWNrQ29uZmlybT86IHtcbiAgICAvKiog7Iq57J247J20IO2VhOyalO2VnCBEQiDtgqQg66qp66GdICjsmIg6IFtcInByb2R1Y3Rpb25cIl0pICovXG4gICAgdGFyZ2V0czogKGtleW9mIFNvbmFtdURCQ29uZmlnKVtdO1xuICAgIC8qKiBTbGFjayBCb3QgVG9rZW4gKHhveGItLi4uKSAqL1xuICAgIGJvdFRva2VuOiBzdHJpbmc7XG4gICAgLyoqIFNsYWNrIENoYW5uZWwgSUQgKEMuLi4pICovXG4gICAgY2hhbm5lbElkOiBzdHJpbmc7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVTZXJ2ZXJPcHRpb25zID0ge1xuICAvLyDtlITroZzsoJ3tirgg7Jm467aA7JeQ7IScIOygkeq3vO2VoCDsiJgg7J6I64qUIFVSTC4g6riw67O46rCS7J2AIHtzZXJ2ZXIubGlzdGVuLmhvc3R9OntzZXJ2ZXIubGlzdGVuLnBvcnR9IOyeheuLiOuLpC5cbiAgYmFzZVVybD86IHN0cmluZztcblxuICBmYXN0aWZ5PzogT21pdDxGYXN0aWZ5U2VydmVyT3B0aW9ucywgXCJsb2dnZXJcIj47XG5cbiAgbGlzdGVuPzoge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBob3N0Pzogc3RyaW5nO1xuICB9O1xuXG4gIHBsdWdpbnM/OiB7XG4gICAgLyoqIOydkeuLtSDslZXstpUg7ZSM65+s6re47J24IChAZmFzdGlmeS9jb21wcmVzcykgKi9cbiAgICBjb21wcmVzcz86IGJvb2xlYW4gfCBGYXN0aWZ5Q29tcHJlc3NPcHRpb25zO1xuICAgIGNvcnM/OiBib29sZWFuIHwgRmFzdGlmeUNvcnNPcHRpb25zO1xuICAgIGZvcm1ib2R5PzogYm9vbGVhbiB8IEZhc3RpZnlGb3JtYm9keU9wdGlvbnM7XG4gICAgbXVsdGlwYXJ0PzogYm9vbGVhbiB8IEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zO1xuICAgIHFzPzogYm9vbGVhbiB8IFFzUGx1Z2luT3B0aW9ucztcbiAgICBzc2U/OiBib29sZWFuIHwgU3NlUGx1Z2luT3B0aW9ucztcbiAgICBzdGF0aWM/OiBib29sZWFuIHwgRmFzdGlmeVN0YXRpY09wdGlvbnM7XG4gICAgc2Vzc2lvbj86IGJvb2xlYW4gfCBTZWN1cmVTZXNzaW9uUGx1Z2luT3B0aW9ucztcblxuICAgIGN1c3RvbT86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gdm9pZDtcbiAgfTtcblxuICBhdXRoPzpcbiAgICB8IGJvb2xlYW5cbiAgICB8IHtcbiAgICAgICAgdXNlclNlcmlhbGl6ZXI6IFNlcmlhbGl6ZUZ1bmN0aW9uPHVua25vd24sIHVua25vd24+O1xuICAgICAgICB1c2VyRGVzZXJpYWxpemVyOiBEZXNlcmlhbGl6ZUZ1bmN0aW9uPHVua25vd24sIHVua25vd24+O1xuICAgICAgfTtcblxuICBhcGlDb25maWc6IFNvbmFtdUZhc3RpZnlDb25maWc7XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2Ug65Oc65287J2067KEIOyEpOyglS5cbiAgICogRFJJVkVfRElTSyDtmZjqsr3rs4DsiJjroZwg7IKs7Jqp7ZWgIOuTnOudvOydtOuyhOulvCDshKDtg53tlanri4jri6QuICjquLDrs7jqsJI6IGRlZmF1bHQg7YKkKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGltcG9ydCB7IGRyaXZlcnMgfSBmcm9tIFwic29uYW11L3N0b3JhZ2VcIjtcbiAgICpcbiAgICogc3RvcmFnZToge1xuICAgKiAgIGRlZmF1bHQ6IHByb2Nlc3MuZW52LkRSSVZFX0RJU0sgPz8gXCJmc1wiLFxuICAgKiAgIGRyaXZlcnM6IHtcbiAgICogICAgIGZzOiBkcml2ZXJzLmZzKHsgbG9jYXRpb246IFwiLi91cGxvYWRzXCIsIHVybEJ1aWxkZXI6IHsgLi4uIH0gfSksXG4gICAqICAgICBzMzogZHJpdmVycy5zMyh7IGJ1Y2tldDogXCJteS1idWNrZXRcIiwgcmVnaW9uOiBcImFwLW5vcnRoZWFzdC0yXCIsIC4uLiB9KSxcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBzdG9yYWdlPzogU3RvcmFnZUNvbmZpZztcblxuICAvKipcbiAgICogQ2FjaGUg7ISk7KCVIChCZW50b0NhY2hlIOq4sOuwmClcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpbXBvcnQgeyBkcml2ZXJzLCBzdG9yZSB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcbiAgICpcbiAgICogY2FjaGU6IHtcbiAgICogICBkZWZhdWx0OiAnbWFpbicsXG4gICAqICAgc3RvcmVzOiB7XG4gICAqICAgICBtYWluOiBzdG9yZSgpXG4gICAqICAgICAgIC51c2VMMUxheWVyKGRyaXZlcnMubWVtb3J5KHsgbWF4U2l6ZTogJzEwMG1iJyB9KSlcbiAgICogICAgICAgLnVzZUwyTGF5ZXIoZHJpdmVycy5yZWRpcyh7IGNvbm5lY3Rpb246IHJlZGlzQ29ubmVjdGlvbiB9KSlcbiAgICogICAgICAgLnVzZUJ1cyhkcml2ZXJzLnJlZGlzQnVzKHsgY29ubmVjdGlvbjogcmVkaXNDb25uZWN0aW9uIH0pKVxuICAgKiAgIH0sXG4gICAqICAgdHRsOiAnMWgnLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgY2FjaGU/OiBDYWNoZUNvbmZpZztcblxuICBsaWZlY3ljbGU/OiB7XG4gICAgb25TdGFydD86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgb25TaHV0ZG93bj86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgb25FcnJvcj86IChlcnJvcjogRXJyb3IsIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCByZXBseTogRmFzdGlmeVJlcGx5KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVRhc2tPcHRpb25zID0ge1xuICAvLyB3b3JrZXLrpbwg7IKs7Jqp7ZWg7KeAIOyXrOu2gCwg6riw67O47KCB7Jy866GcIGRhZW1vbiDrqqjrk5zsl5DshJzrp4wg7IKs7Jqp65CoLlxuICBlbmFibGVXb3JrZXI/OiBib29sZWFuO1xuICB3b3JrZXJPcHRpb25zPzogV29ya2Zsb3dPcHRpb25zO1xuICBjb250ZXh0UHJvdmlkZXI6IChcbiAgICBkZWZhdWx0Q29udGV4dDogUGljazxcbiAgICAgIENvbnRleHQsXG4gICAgICBcInJlcGx5XCIgfCBcInJlcXVlc3RcIiB8IFwiaGVhZGVyc1wiIHwgXCJjcmVhdGVTU0VcIiB8IFwibmFpdGVTdG9yZVwiIHwgXCJsb2NhbGVcIlxuICAgID4gJlxuICAgICAgQXV0aENvbnRleHQsXG4gICkgPT4gQ29udGV4dCB8IFByb21pc2U8Q29udGV4dD47XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVTU1JPcHRpb25zID0ge1xuICAvKipcbiAgICogSHlkcmF0aW9uIOyghOuetVxuICAgKiAtICdub25lJzog7ZWt7IOBIOyDiOuhnCDroIzrjZTrp4EgKGh5ZHJhdGlvbiBtaXNtYXRjaCDqsbHsoJUg7JeG7J2MLCDqtozsnqUpXG4gICAqIC0gJ2Z1bGwnOiBSZWFjdCBoeWRyYXRpb24g7Iuc64+EICjshJzrsoQgSFRNTCDsnqzsgqzsmqksIG1pc21hdGNoIOyjvOydmClcbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBoeWRyYXRpb24/OiBcIm5vbmVcIiB8IFwiZnVsbFwiO1xufTtcblxuLy8gTk9URShIYXplLCAyNTEyMDkpOiBjb25maWfsl5DripQgVCwgUHJvbWlzZTxUPiwgKCkgPT4gVCwgKCkgPT4gUHJvbWlzZTxUPuqwgCDrqqjrkZAg7JisIOyImCDsnojslrTslbwg7ZWoLlxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbmZpZyhjb25maWc6IEV4ZWN1dGFibGU8U29uYW11Q29uZmlnPik6IFByb21pc2U8U29uYW11Q29uZmlnPiB7XG4gIGlmICh0eXBlb2YgY29uZmlnID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZygpKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbn1cblxuLyoqXG4gKiBzb25hbXUuY29uZmlnLnRzIO2MjOydvOydhCDroZzrk5ztlanri4jri6QuXG4gKiDsnbQg7ISk7KCVIO2MjOydvOydgCDtmZjqsr3sl5Ag65Sw6528IOuLpOuluCDqsr3roZzsl5Ag7J6I7J2EIOyImCDsnojsirXri4jri6QuXG4gKiBkaXN066W8IOu5jOuTnO2VmOuKlCDtmZjqsr3snbTrnbzrqbQgZGlzdCDrsJTroZwg7JWE656Y7JeQIOyeiOydhCDqsoPsnbTqs6AoY2xpLXdyYXBwZXIudHPsl5DshJwg67mM65OcKSxcbiAqIOq3uOugh+yngCDslYrsnYAg7ZmY6rK97J20652866m0IO2UhOuhnOygne2KuCDro6jtirjsl5Ag7J6I7J2EIOqyg+yeheuLiOuLpC5cbiAqXG4gKiDsnbQg7ZWo7IiY64qUIOydmOuPhOyggeycvOuhnCDri6Trpbgg7J2Y7KG07ISx7J2YIOyCrOyaqeydhCDstZzrjIDtlZwg67Cw7KCc7ZWY7JiA7Iq164uI64ukLlxuICog7J2064qUIOyLpO2WiSDstIjquLDsl5Ag7LWc64yA7ZWcIOu5oOultOqyjCDshKTsoJXsnYQg7J297Ja07JisIOyImCDsnojrj4TroZ0g7ZWY6riwIOychO2VqOyeheuLiOuLpC5cbiAqIOuUsOudvOyEnCDqsr3roZwgY29uY2F06rO8IFVSTCBzY2hlbWUg7LaU6rCA64+EIOuLqOyInO2VnCDrrLjsnpDsl7Qg7KGw7J6R7Jy866GcIOyymOumrO2VmOyYgOyKteuLiOuLpC5cbiAqXG4gKiBAcGFyYW0gcm9vdFBhdGhcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQ29uZmlnKHJvb3RQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFNvbmFtdUNvbmZpZz4ge1xuICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCBjb25maWdQYXRoID1cbiAgICBwcm9jZXNzLmVudi5IT1QgPT09IFwieWVzXCIgfHwgcHJvY2Vzcy5lbnYuVklURVNUID09PSBcInRydWVcIlxuICAgICAgPyBgJHtyb290UGF0aH0vc3JjL3NvbmFtdS5jb25maWcudHNgXG4gICAgICA6IGAke3Jvb3RQYXRofS9kaXN0L3NvbmFtdS5jb25maWcuanNgO1xuICBjb25zdCB7IGRlZmF1bHQ6IGNvbmZpZyB9ID0gYXdhaXQgaW1wb3J0KGBmaWxlOi8vJHtjb25maWdQYXRofWApO1xuICBjb25zdCBpbXBvcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydDtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwidGVzdFwiICYmXG4gICAgY29uc29sZS5sb2coYFtUSU1JTkddIGxvYWRDb25maWcgdG9vayAke2ltcG9ydFRpbWUudG9GaXhlZCgyKX1tc2ApO1xuICByZXR1cm4gY29uZmlnO1xufVxuIl0sIm5hbWVzIjpbImRlZmluZUNvbmZpZyIsImNvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwibG9hZENvbmZpZyIsInJvb3RQYXRoIiwic3RhcnQiLCJwZXJmb3JtYW5jZSIsIm5vdyIsImNvbmZpZ1BhdGgiLCJwcm9jZXNzIiwiZW52IiwiSE9UIiwiVklURVNUIiwiZGVmYXVsdCIsImltcG9ydFRpbWUiLCJOT0RFX0VOViIsImNvbnNvbGUiLCJsb2ciLCJ0b0ZpeGVkIl0sIm1hcHBpbmdzIjoiQUE0T0EsdUZBQXVGO0FBQ3ZGLE9BQU8sU0FBU0EsYUFBYUMsTUFBZ0M7SUFDM0QsSUFBSSxPQUFPQSxXQUFXLFlBQVk7UUFDaEMsT0FBT0MsUUFBUUMsT0FBTyxDQUFDRjtJQUN6QjtJQUVBLE9BQU9DLFFBQVFDLE9BQU8sQ0FBQ0Y7QUFDekI7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLGVBQWVHLFdBQVdDLFFBQWdCO0lBQy9DLE1BQU1DLFFBQVFDLFlBQVlDLEdBQUc7SUFDN0IsTUFBTUMsYUFDSkMsUUFBUUMsR0FBRyxDQUFDQyxHQUFHLEtBQUssU0FBU0YsUUFBUUMsR0FBRyxDQUFDRSxNQUFNLEtBQUssU0FDaEQsR0FBR1IsU0FBUyxxQkFBcUIsQ0FBQyxHQUNsQyxHQUFHQSxTQUFTLHNCQUFzQixDQUFDO0lBQ3pDLE1BQU0sRUFBRVMsU0FBU2IsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUVRLFlBQVk7SUFDL0QsTUFBTU0sYUFBYVIsWUFBWUMsR0FBRyxLQUFLRjtJQUN2Q0ksUUFBUUMsR0FBRyxDQUFDSyxRQUFRLEtBQUssVUFDdkJDLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QixFQUFFSCxXQUFXSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbkUsT0FBT2xCO0FBQ1QifQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeUNvbXByZXNzT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9jb21wcmVzc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5Q29yc09wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvY29yc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2Zvcm1ib2R5XCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5U3RhdGljT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9zdGF0aWNcIjtcbmltcG9ydCB0eXBlIHsgQmV0dGVyQXV0aE9wdGlvbnMgfSBmcm9tIFwiYmV0dGVyLWF1dGhcIjtcbmltcG9ydCB0eXBlIHsgRmFzdGlmeUluc3RhbmNlLCBGYXN0aWZ5UmVwbHksIEZhc3RpZnlSZXF1ZXN0LCBGYXN0aWZ5U2VydmVyT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IFFzUGx1Z2luT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5LXFzXCI7XG5pbXBvcnQgdHlwZSB7IFNzZVBsdWdpbk9wdGlvbnMgfSBmcm9tIFwiZmFzdGlmeS1zc2UtdjIvbGliL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHR5cGUgeyBDYWNoZUNvbmZpZyB9IGZyb20gXCIuLi9jYWNoZS90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTb25hbXVEQkNvbmZpZyB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHR5cGUgeyBTb25hbXVMb2dnaW5nT3B0aW9ucyB9IGZyb20gXCIuLi9sb2dnZXIvY29uZmlndXJlXCI7XG5pbXBvcnQgdHlwZSB7IFN0b3JhZ2VDb25maWcgfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZmxvd09wdGlvbnMgfSBmcm9tIFwiLi4vdGFza3Mvd29ya2Zsb3ctbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRhYmxlLCBTb25hbXVGYXN0aWZ5Q29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmV4cG9ydCB0eXBlIERhdGFiYXNlQ29uZmlnID0gT21pdDxLbmV4LkNvbmZpZywgXCJjb25uZWN0aW9uXCI+ICYge1xuICBjb25uZWN0aW9uPzogS25leC5QZ0Nvbm5lY3Rpb25Db25maWc7XG59O1xuXG4vKipcbiAqIGkxOG4g7ISk7KCVXG4gKi9cbmV4cG9ydCB0eXBlIFNvbmFtdUkxOG5PcHRpb25zID0ge1xuICAvKiog6riw67O4IGxvY2FsZSAo7YKkIOygleydmCDquLDspIAgKyDrn7Dtg4DsnoQg6riw67O46rCSKSAqL1xuICBkZWZhdWx0TG9jYWxlOiBzdHJpbmc7XG4gIC8qKiDsp4Dsm5DtlZjripQgbG9jYWxlIOuqqeuhnSAqL1xuICBzdXBwb3J0ZWRMb2NhbGVzOiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICog7YWM7Iqk7Yq4IOyEpOyglVxuICogdml0ZXN0IOuzkeugrCDthYzsiqTtjIXsnYQgc29uYW11LmNvbmZpZy50cyDtlZwg6rOz7JeQ7IScIOq0gOumrO2VmOq4sCDsnITtlZwg7ISk7KCV7J6F64uI64ukLlxuICovXG5leHBvcnQgdHlwZSBTb25hbXVUZXN0Q29uZmlnID0ge1xuICAvKiog67OR66CsIO2FjOyKpO2MhSDtmZzshLHtmZQgKOq4sOuzuDogZmFsc2UpICovXG4gIHBhcmFsbGVsPzogYm9vbGVhbjtcbiAgLyoqIOuzkeugrCDsi6Ttlokg7JuM7LukIOyImCAo6riw67O4OiA0KSAqL1xuICBtYXhXb3JrZXJzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgU29uYW11Q29uZmlnPFRTaW5rSWQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRGaWx0ZXJJZCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSB7XG4gIHByb2plY3ROYW1lPzogc3RyaW5nO1xuXG4gIGFwaToge1xuICAgIGRpcjogc3RyaW5nO1xuICAgIHJvdXRlOiB7XG4gICAgICBwcmVmaXg6IHN0cmluZztcbiAgICB9O1xuICAgIHRpbWV6b25lPzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBpMThuIOyEpOyglVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGkxOG46IHtcbiAgICogICBkZWZhdWx0TG9jYWxlOiAna28nLFxuICAgKiAgIHN1cHBvcnRlZExvY2FsZXM6IFsna28nLCAnZW4nLCAnamEnXSxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGkxOG46IFNvbmFtdUkxOG5PcHRpb25zO1xuXG4gIHN5bmM6IHtcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTsgLy8gXCJ3ZWJcIiwgXCJhcHBcIiDrk7FcbiAgfTtcblxuICBkYXRhYmFzZToge1xuICAgIC8vIOuNsOydtO2EsOuyoOydtOyKpChwZ+uKlCBwZyDrqqjrk4gsIHBnbmF0aXZl64qUIHBnLW5hdGl2ZSDrqqjrk4jsnZgg7ISk7LmY6rCAIO2VhOyalO2VqeuLiOuLpC4pXG4gICAgZGF0YWJhc2U/OiBcInBnXCIgfCBcInBnbmF0aXZlXCI7XG4gICAgLy8g6riw67O4IOuNsOydtO2EsOuyoOydtOyKpCDsnbTrpoRcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLy8g66qo65OgIO2ZmOqyveyXkCDsoIHsmqnrkKAg6riw67O4IEtuZXgg7Ji17IWYXG4gICAgZGVmYXVsdE9wdGlvbnM6IERhdGFiYXNlQ29uZmlnO1xuICAgIC8vIO2ZmOqyveuzhCDshKTsoJVcbiAgICBlbnZpcm9ubWVudHM/OiB7XG4gICAgICBkZXZlbG9wbWVudD86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgZGV2ZWxvcG1lbnRfc2xhdmU/OiBEYXRhYmFzZUNvbmZpZztcbiAgICAgIHByb2R1Y3Rpb24/OiBEYXRhYmFzZUNvbmZpZztcbiAgICAgIHByb2R1Y3Rpb25fc2xhdmU/OiBEYXRhYmFzZUNvbmZpZztcbiAgICAgIGZpeHR1cmU/OiBEYXRhYmFzZUNvbmZpZztcbiAgICAgIHRlc3Q/OiBEYXRhYmFzZUNvbmZpZztcbiAgICB9O1xuICB9O1xuXG4gIGxvZ2dpbmc/OiBmYWxzZSB8IFNvbmFtdUxvZ2dpbmdPcHRpb25zPFRTaW5rSWQsIFRGaWx0ZXJJZD47XG4gIHNlcnZlcjogU29uYW11U2VydmVyT3B0aW9ucztcbiAgdGFza3M/OiBTb25hbXVUYXNrT3B0aW9ucztcblxuICAvKipcbiAgICog7YWM7Iqk7Yq4IOyEpOyglSAo67OR66CsIO2FjOyKpO2MhSDrk7EpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdGVzdDoge1xuICAgKiAgIHBhcmFsbGVsOiB0cnVlLFxuICAgKiAgIG1heFdvcmtlcnM6IDQsXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICB0ZXN0PzogU29uYW11VGVzdENvbmZpZztcblxuICAvKipcbiAgICogU2xhY2sg7Iq57J24IOyEpOyglSAoUHJvZHVjdGlvbiDrp4jsnbTqt7jroIjsnbTshZjsmqkpXG4gICAqXG4gICAqIFByb2R1Y3Rpb24gREIg66eI7J206re466CI7J207IWYIOyLnCBTbGFja+ydhCDthrXtlZwg7Iq57J24IO2UhOuhnOyEuOyKpOulvCDtmZzshLHtmZTtlanri4jri6QuXG4gICAqIOyEpOygleydtCDsl4bsnLzrqbQg6riw7KG0IOuPmeyekSjrsJTroZwg7Iuk7ZaJKeycvOuhnCDrj5nsnpHtlanri4jri6QuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogc2xhY2tDb25maXJtOiB7XG4gICAqICAgdGFyZ2V0czogW1wicHJvZHVjdGlvblwiXSxcbiAgICogICBib3RUb2tlbjogcHJvY2Vzcy5lbnYuU0xBQ0tfQk9UX1RPS0VOID8/IFwiXCIsXG4gICAqICAgY2hhbm5lbElkOiBwcm9jZXNzLmVudi5TTEFDS19DSEFOTkVMX0lEID8/IFwiXCIsXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBzbGFja0NvbmZpcm0/OiB7XG4gICAgLyoqIOyKueyduOydtCDtlYTsmpTtlZwgREIg7YKkIOuqqeuhnSAo7JiIOiBbXCJwcm9kdWN0aW9uXCJdKSAqL1xuICAgIHRhcmdldHM6IChrZXlvZiBTb25hbXVEQkNvbmZpZylbXTtcbiAgICAvKiogU2xhY2sgQm90IFRva2VuICh4b3hiLS4uLikgKi9cbiAgICBib3RUb2tlbjogc3RyaW5nO1xuICAgIC8qKiBTbGFjayBDaGFubmVsIElEIChDLi4uKSAqL1xuICAgIGNoYW5uZWxJZDogc3RyaW5nO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgU29uYW11U2VydmVyT3B0aW9ucyA9IHtcbiAgLy8g7ZSE66Gc7KCd7Yq4IOyZuOu2gOyXkOyEnCDsoJHqt7ztlaAg7IiYIOyeiOuKlCBVUkwuIOq4sOuzuOqwkuydgCB7c2VydmVyLmxpc3Rlbi5ob3N0fTp7c2VydmVyLmxpc3Rlbi5wb3J0fSDsnoXri4jri6QuXG4gIGJhc2VVcmw/OiBzdHJpbmc7XG5cbiAgZmFzdGlmeT86IE9taXQ8RmFzdGlmeVNlcnZlck9wdGlvbnMsIFwibG9nZ2VyXCI+O1xuXG4gIGxpc3Rlbj86IHtcbiAgICBwb3J0OiBudW1iZXI7XG4gICAgaG9zdD86IHN0cmluZztcbiAgfTtcblxuICBwbHVnaW5zPzoge1xuICAgIC8qKiDsnZHri7Ug7JWV7LaVIO2UjOufrOq3uOyduCAoQGZhc3RpZnkvY29tcHJlc3MpICovXG4gICAgY29tcHJlc3M/OiBib29sZWFuIHwgRmFzdGlmeUNvbXByZXNzT3B0aW9ucztcbiAgICBjb3JzPzogYm9vbGVhbiB8IEZhc3RpZnlDb3JzT3B0aW9ucztcbiAgICBmb3JtYm9keT86IGJvb2xlYW4gfCBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zO1xuICAgIG11bHRpcGFydD86IGJvb2xlYW4gfCBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucztcbiAgICBxcz86IGJvb2xlYW4gfCBRc1BsdWdpbk9wdGlvbnM7XG4gICAgc3NlPzogYm9vbGVhbiB8IFNzZVBsdWdpbk9wdGlvbnM7XG4gICAgc3RhdGljPzogYm9vbGVhbiB8IEZhc3RpZnlTdGF0aWNPcHRpb25zO1xuXG4gICAgY3VzdG9tPzogKHNlcnZlcjogRmFzdGlmeUluc3RhbmNlKSA9PiB2b2lkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBiZXR0ZXItYXV0aCDsnbjspp0g7ISk7KCVXG4gICAqL1xuICBhdXRoPzogQmV0dGVyQXV0aE9wdGlvbnM7XG5cbiAgYXBpQ29uZmlnOiBTb25hbXVGYXN0aWZ5Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBTdG9yYWdlIOuTnOudvOydtOuyhCDshKTsoJUuXG4gICAqIERSSVZFX0RJU0sg7ZmY6rK967OA7IiY66GcIOyCrOyaqe2VoCDrk5zrnbzsnbTrsoTrpbwg7ISg7YOd7ZWp64uI64ukLiAo6riw67O46rCSOiBkZWZhdWx0IO2CpClcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpbXBvcnQgeyBkcml2ZXJzIH0gZnJvbSBcInNvbmFtdS9zdG9yYWdlXCI7XG4gICAqXG4gICAqIHN0b3JhZ2U6IHtcbiAgICogICBkZWZhdWx0OiBwcm9jZXNzLmVudi5EUklWRV9ESVNLID8/IFwiZnNcIixcbiAgICogICBkcml2ZXJzOiB7XG4gICAqICAgICBmczogZHJpdmVycy5mcyh7IGxvY2F0aW9uOiBcIi4vdXBsb2Fkc1wiLCB1cmxCdWlsZGVyOiB7IC4uLiB9IH0pLFxuICAgKiAgICAgczM6IGRyaXZlcnMuczMoeyBidWNrZXQ6IFwibXktYnVja2V0XCIsIHJlZ2lvbjogXCJhcC1ub3J0aGVhc3QtMlwiLCAuLi4gfSksXG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgc3RvcmFnZT86IFN0b3JhZ2VDb25maWc7XG5cbiAgLyoqXG4gICAqIENhY2hlIOyEpOyglSAoQmVudG9DYWNoZSDquLDrsJgpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW1wb3J0IHsgZHJpdmVycywgc3RvcmUgfSBmcm9tIFwic29uYW11L2NhY2hlXCI7XG4gICAqXG4gICAqIGNhY2hlOiB7XG4gICAqICAgZGVmYXVsdDogJ21haW4nLFxuICAgKiAgIHN0b3Jlczoge1xuICAgKiAgICAgbWFpbjogc3RvcmUoKVxuICAgKiAgICAgICAudXNlTDFMYXllcihkcml2ZXJzLm1lbW9yeSh7IG1heFNpemU6ICcxMDBtYicgfSkpXG4gICAqICAgICAgIC51c2VMMkxheWVyKGRyaXZlcnMucmVkaXMoeyBjb25uZWN0aW9uOiByZWRpc0Nvbm5lY3Rpb24gfSkpXG4gICAqICAgICAgIC51c2VCdXMoZHJpdmVycy5yZWRpc0J1cyh7IGNvbm5lY3Rpb246IHJlZGlzQ29ubmVjdGlvbiB9KSlcbiAgICogICB9LFxuICAgKiAgIHR0bDogJzFoJyxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGNhY2hlPzogQ2FjaGVDb25maWc7XG5cbiAgbGlmZWN5Y2xlPzoge1xuICAgIG9uU3RhcnQ/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uU2h1dGRvd24/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCwgcmVwbHk6IEZhc3RpZnlSZXBseSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVUYXNrT3B0aW9ucyA9IHtcbiAgLy8gd29ya2Vy66W8IOyCrOyaqe2VoOyngCDsl6zrtoAsIOq4sOuzuOyggeycvOuhnCBkYWVtb24g66qo65Oc7JeQ7ISc66eMIOyCrOyaqeuQqC5cbiAgZW5hYmxlV29ya2VyPzogYm9vbGVhbjtcbiAgd29ya2VyT3B0aW9ucz86IFdvcmtmbG93T3B0aW9ucztcbiAgY29udGV4dFByb3ZpZGVyOiAoXG4gICAgZGVmYXVsdENvbnRleHQ6IFBpY2s8XG4gICAgICBDb250ZXh0LFxuICAgICAgXCJyZXBseVwiIHwgXCJyZXF1ZXN0XCIgfCBcImhlYWRlcnNcIiB8IFwiY3JlYXRlU1NFXCIgfCBcIm5haXRlU3RvcmVcIiB8IFwibG9jYWxlXCIgfCBcInVzZXJcIiB8IFwic2Vzc2lvblwiXG4gICAgPixcbiAgKSA9PiBDb250ZXh0IHwgUHJvbWlzZTxDb250ZXh0Pjtcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVNTUk9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBIeWRyYXRpb24g7KCE6561XG4gICAqIC0gJ25vbmUnOiDtla3sg4Eg7IOI66GcIOugjOuNlOungSAoaHlkcmF0aW9uIG1pc21hdGNoIOqxseyglSDsl4bsnYwsIOq2jOyepSlcbiAgICogLSAnZnVsbCc6IFJlYWN0IGh5ZHJhdGlvbiDsi5zrj4QgKOyEnOuyhCBIVE1MIOyerOyCrOyaqSwgbWlzbWF0Y2gg7KO87J2YKVxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIGh5ZHJhdGlvbj86IFwibm9uZVwiIHwgXCJmdWxsXCI7XG59O1xuXG4vLyBOT1RFKEhhemUsIDI1MTIwOSk6IGNvbmZpZ+yXkOuKlCBULCBQcm9taXNlPFQ+LCAoKSA9PiBULCAoKSA9PiBQcm9taXNlPFQ+6rCAIOuqqOuRkCDsmKwg7IiYIOyeiOyWtOyVvCDtlaguXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnKGNvbmZpZzogRXhlY3V0YWJsZTxTb25hbXVDb25maWc+KTogUHJvbWlzZTxTb25hbXVDb25maWc+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29uZmlnKCkpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maWcpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5jb25maWcudHMg7YyM7J287J2EIOuhnOuTnO2VqeuLiOuLpC5cbiAqIOydtCDshKTsoJUg7YyM7J287J2AIO2ZmOqyveyXkCDrlLDrnbwg64uk66W4IOqyveuhnOyXkCDsnojsnYQg7IiYIOyeiOyKteuLiOuLpC5cbiAqIGRpc3Trpbwg67mM65Oc7ZWY64qUIO2ZmOqyveydtOudvOuptCBkaXN0IOuwlOuhnCDslYTrnpjsl5Ag7J6I7J2EIOqyg+ydtOqzoChjbGktd3JhcHBlci50c+yXkOyEnCDruYzrk5wpLFxuICog6re466CH7KeAIOyViuydgCDtmZjqsr3snbTrnbzrqbQg7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkCDsnojsnYQg6rKD7J6F64uI64ukLlxuICpcbiAqIOydtCDtlajsiJjripQg7J2Y64+E7KCB7Jy866GcIOuLpOuluCDsnZjsobTshLHsnZgg7IKs7Jqp7J2EIOy1nOuMgO2VnCDrsLDsoJztlZjsmIDsirXri4jri6QuXG4gKiDsnbTripQg7Iuk7ZaJIOy0iOq4sOyXkCDstZzrjIDtlZwg67mg66W06rKMIOyEpOygleydhCDsnb3slrTsmKwg7IiYIOyeiOuPhOuhnSDtlZjquLAg7JyE7ZWo7J6F64uI64ukLlxuICog65Sw65287IScIOqyveuhnCBjb25jYXTqs7wgVVJMIHNjaGVtZSDstpTqsIDrj4Qg64uo7Iic7ZWcIOusuOyekOyXtCDsobDsnpHsnLzroZwg7LKY66as7ZWY7JiA7Iq164uI64ukLlxuICpcbiAqIEBwYXJhbSByb290UGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDb25maWcocm9vdFBhdGg6IHN0cmluZyk6IFByb21pc2U8U29uYW11Q29uZmlnPiB7XG4gIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPVxuICAgIHByb2Nlc3MuZW52LkhPVCA9PT0gXCJ5ZXNcIiB8fCBwcm9jZXNzLmVudi5WSVRFU1QgPT09IFwidHJ1ZVwiXG4gICAgICA/IGAke3Jvb3RQYXRofS9zcmMvc29uYW11LmNvbmZpZy50c2BcbiAgICAgIDogYCR7cm9vdFBhdGh9L2Rpc3Qvc29uYW11LmNvbmZpZy5qc2A7XG4gIGNvbnN0IHsgZGVmYXVsdDogY29uZmlnIH0gPSBhd2FpdCBpbXBvcnQoYGZpbGU6Ly8ke2NvbmZpZ1BhdGh9YCk7XG4gIGNvbnN0IGltcG9ydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0O1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJ0ZXN0XCIgJiZcbiAgICBjb25zb2xlLmxvZyhgW1RJTUlOR10gbG9hZENvbmZpZyB0b29rICR7aW1wb3J0VGltZS50b0ZpeGVkKDIpfW1zYCk7XG4gIHJldHVybiBjb25maWc7XG59XG4iXSwibmFtZXMiOlsiZGVmaW5lQ29uZmlnIiwiY29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJsb2FkQ29uZmlnIiwicm9vdFBhdGgiLCJzdGFydCIsInBlcmZvcm1hbmNlIiwibm93IiwiY29uZmlnUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJIT1QiLCJWSVRFU1QiLCJkZWZhdWx0IiwiaW1wb3J0VGltZSIsIk5PREVfRU5WIiwiY29uc29sZSIsImxvZyIsInRvRml4ZWQiXSwibWFwcGluZ3MiOiJBQXVPQSx1RkFBdUY7QUFDdkYsT0FBTyxTQUFTQSxhQUFhQyxNQUFnQztJQUMzRCxJQUFJLE9BQU9BLFdBQVcsWUFBWTtRQUNoQyxPQUFPQyxRQUFRQyxPQUFPLENBQUNGO0lBQ3pCO0lBRUEsT0FBT0MsUUFBUUMsT0FBTyxDQUFDRjtBQUN6QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sZUFBZUcsV0FBV0MsUUFBZ0I7SUFDL0MsTUFBTUMsUUFBUUMsWUFBWUMsR0FBRztJQUM3QixNQUFNQyxhQUNKQyxRQUFRQyxHQUFHLENBQUNDLEdBQUcsS0FBSyxTQUFTRixRQUFRQyxHQUFHLENBQUNFLE1BQU0sS0FBSyxTQUNoRCxHQUFHUixTQUFTLHFCQUFxQixDQUFDLEdBQ2xDLEdBQUdBLFNBQVMsc0JBQXNCLENBQUM7SUFDekMsTUFBTSxFQUFFUyxTQUFTYixNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRVEsWUFBWTtJQUMvRCxNQUFNTSxhQUFhUixZQUFZQyxHQUFHLEtBQUtGO0lBQ3ZDSSxRQUFRQyxHQUFHLENBQUNLLFFBQVEsS0FBSyxVQUN2QkMsUUFBUUMsR0FBRyxDQUFDLENBQUMseUJBQXlCLEVBQUVILFdBQVdJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNuRSxPQUFPbEI7QUFDVCJ9
@@ -1,4 +1,5 @@
1
- import type { FastifyReply, FastifyRequest, PassportUser } from "fastify";
1
+ import type { Session, User } from "better-auth";
2
+ import type { FastifyReply, FastifyRequest } from "fastify";
2
3
  import type { RouteGenericInterface } from "fastify/types/route";
3
4
  import type { IncomingHttpHeaders, IncomingMessage, Server, ServerResponse } from "http";
4
5
  import type { ZodObject } from "zod";
@@ -20,12 +21,9 @@ export type Context = {
20
21
  bufferedFiles?: BufferedFile[];
21
22
  /** stream 모드에서 업로드된 파일 */
22
23
  uploadedFiles?: UploadedFile[];
23
- } & AuthContext & ContextExtend;
24
- export type AuthContext = {
25
- user: PassportUser | null;
26
- passport: {
27
- login: (user: PassportUser) => Promise<void>;
28
- logout: () => void;
29
- };
30
- };
24
+ /** 현재 로그인한 사용자 (null이면 미인증) */
25
+ user: User | null;
26
+ /** 현재 세션 정보 (null이면 미인증) */
27
+ session: Session | null;
28
+ } & ContextExtend;
31
29
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,MAAM,WAAW,aAAa;CAAG;AACjC,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC7F,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,UAAU,EAAE,UAAU,CAAC;IACvB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,0BAA0B;IAC1B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;CAChC,GAAG,WAAW,GACb,aAAa,CAAC;AAEhB,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE;QACR,KAAK,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,EAAE,MAAM,IAAI,CAAC;KACpB,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,MAAM,WAAW,aAAa;CAAG;AACjC,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC7F,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,UAAU,EAAE,UAAU,CAAC;IACvB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,0BAA0B;IAC1B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAE/B,+BAA+B;IAC/B,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,4BAA4B;IAC5B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB,GAAG,aAAa,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export { };
2
2
 
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29udGV4dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QsIFBhc3Nwb3J0VXNlciB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlR2VuZXJpY0ludGVyZmFjZSB9IGZyb20gXCJmYXN0aWZ5L3R5cGVzL3JvdXRlXCI7XG5pbXBvcnQgdHlwZSB7IEluY29taW5nSHR0cEhlYWRlcnMsIEluY29taW5nTWVzc2FnZSwgU2VydmVyLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgdHlwZSB7IFpvZE9iamVjdCB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgTmFpdGVTdG9yZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHR5cGUgeyBCdWZmZXJlZEZpbGUgfSBmcm9tIFwiLi4vc3RvcmFnZS9idWZmZXJlZC1maWxlXCI7XG5pbXBvcnQgdHlwZSB7IFVwbG9hZGVkRmlsZSB9IGZyb20gXCIuLi9zdG9yYWdlL3VwbG9hZGVkLWZpbGVcIjtcbmltcG9ydCB0eXBlIHsgY3JlYXRlU1NFRmFjdG9yeSB9IGZyb20gXCIuLi9zdHJlYW0vc3NlXCI7XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FbXB0eUludGVyZmFjZTogQ29udGV4dCDtmZXsnqUg7YOA7J6FXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHRFeHRlbmQge31cbmV4cG9ydCB0eXBlIENvbnRleHQgPSB7XG4gIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0O1xuICByZXBseTogRmFzdGlmeVJlcGx5PFNlcnZlciwgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZSwgUm91dGVHZW5lcmljSW50ZXJmYWNlLCB1bmtub3duPjtcbiAgaGVhZGVyczogSW5jb21pbmdIdHRwSGVhZGVycztcbiAgY3JlYXRlU1NFOiA8VCBleHRlbmRzIFpvZE9iamVjdD4oZXZlbnRzOiBUKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVTU0VGYWN0b3J5PFQ+PjtcbiAgbmFpdGVTdG9yZTogTmFpdGVTdG9yZTtcbiAgLyoqIO2YhOyerCDsmpTssq3snZggbG9jYWxlICovXG4gIGxvY2FsZTogc3RyaW5nO1xuICAvKiogYnVmZmVyIOuqqOuTnOyXkOyEnCDsl4XroZzrk5zrkJwg7YyM7J28ICovXG4gIGJ1ZmZlcmVkRmlsZXM/OiBCdWZmZXJlZEZpbGVbXTtcbiAgLyoqIHN0cmVhbSDrqqjrk5zsl5DshJwg7JeF66Gc65Oc65CcIO2MjOydvCAqL1xuICB1cGxvYWRlZEZpbGVzPzogVXBsb2FkZWRGaWxlW107XG59ICYgQXV0aENvbnRleHQgJlxuICBDb250ZXh0RXh0ZW5kO1xuXG5leHBvcnQgdHlwZSBBdXRoQ29udGV4dCA9IHtcbiAgdXNlcjogUGFzc3BvcnRVc2VyIHwgbnVsbDtcbiAgcGFzc3BvcnQ6IHtcbiAgICBsb2dpbjogKHVzZXI6IFBhc3Nwb3J0VXNlcikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBsb2dvdXQ6ICgpID0+IHZvaWQ7XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTBCQSxXQU1FIn0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29udGV4dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlc3Npb24sIFVzZXIgfSBmcm9tIFwiYmV0dGVyLWF1dGhcIjtcbmltcG9ydCB0eXBlIHsgRmFzdGlmeVJlcGx5LCBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlR2VuZXJpY0ludGVyZmFjZSB9IGZyb20gXCJmYXN0aWZ5L3R5cGVzL3JvdXRlXCI7XG5pbXBvcnQgdHlwZSB7IEluY29taW5nSHR0cEhlYWRlcnMsIEluY29taW5nTWVzc2FnZSwgU2VydmVyLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgdHlwZSB7IFpvZE9iamVjdCB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgTmFpdGVTdG9yZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHR5cGUgeyBCdWZmZXJlZEZpbGUgfSBmcm9tIFwiLi4vc3RvcmFnZS9idWZmZXJlZC1maWxlXCI7XG5pbXBvcnQgdHlwZSB7IFVwbG9hZGVkRmlsZSB9IGZyb20gXCIuLi9zdG9yYWdlL3VwbG9hZGVkLWZpbGVcIjtcbmltcG9ydCB0eXBlIHsgY3JlYXRlU1NFRmFjdG9yeSB9IGZyb20gXCIuLi9zdHJlYW0vc3NlXCI7XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FbXB0eUludGVyZmFjZTogQ29udGV4dCDtmZXsnqUg7YOA7J6FXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHRFeHRlbmQge31cbmV4cG9ydCB0eXBlIENvbnRleHQgPSB7XG4gIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0O1xuICByZXBseTogRmFzdGlmeVJlcGx5PFNlcnZlciwgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZSwgUm91dGVHZW5lcmljSW50ZXJmYWNlLCB1bmtub3duPjtcbiAgaGVhZGVyczogSW5jb21pbmdIdHRwSGVhZGVycztcbiAgY3JlYXRlU1NFOiA8VCBleHRlbmRzIFpvZE9iamVjdD4oZXZlbnRzOiBUKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVTU0VGYWN0b3J5PFQ+PjtcbiAgbmFpdGVTdG9yZTogTmFpdGVTdG9yZTtcbiAgLyoqIO2YhOyerCDsmpTssq3snZggbG9jYWxlICovXG4gIGxvY2FsZTogc3RyaW5nO1xuICAvKiogYnVmZmVyIOuqqOuTnOyXkOyEnCDsl4XroZzrk5zrkJwg7YyM7J28ICovXG4gIGJ1ZmZlcmVkRmlsZXM/OiBCdWZmZXJlZEZpbGVbXTtcbiAgLyoqIHN0cmVhbSDrqqjrk5zsl5DshJwg7JeF66Gc65Oc65CcIO2MjOydvCAqL1xuICB1cGxvYWRlZEZpbGVzPzogVXBsb2FkZWRGaWxlW107XG5cbiAgLyoqIO2YhOyerCDroZzqt7jsnbjtlZwg7IKs7Jqp7J6QIChudWxs7J2066m0IOuvuOyduOymnSkgKi9cbiAgdXNlcjogVXNlciB8IG51bGw7XG4gIC8qKiDtmITsnqwg7IS47IWYIOygleuztCAobnVsbOydtOuptCDrr7jsnbjspp0pICovXG4gIHNlc3Npb246IFNlc3Npb24gfCBudWxsO1xufSAmIENvbnRleHRFeHRlbmQ7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsV0FpQmtCIn0=
@@ -1,4 +1,5 @@
1
1
  import { AsyncLocalStorage } from "async_hooks";
2
+ import type { Auth } from "better-auth";
2
3
  import type { FSWatcher } from "chokidar";
3
4
  import type { FastifyInstance, FastifyReply, FastifyRequest } from "fastify";
4
5
  import type { IncomingMessage, Server, ServerResponse } from "http";
@@ -46,6 +47,8 @@ declare class SonamuClass {
46
47
  get cache(): CacheManager;
47
48
  private _workflows;
48
49
  get workflows(): WorkflowManager;
50
+ private _auth;
51
+ get auth(): Auth;
49
52
  watcher: FSWatcher | null;
50
53
  private pendingFiles;
51
54
  private hmrStartTime;
@@ -89,7 +92,11 @@ declare class SonamuClass {
89
92
  startWatcher(): Promise<void>;
90
93
  runScript(fn: () => Promise<void>): Promise<void>;
91
94
  private registerPlugins;
92
- private registerAuth;
95
+ /**
96
+ * better-auth 라우트를 등록합니다.
97
+ * /api/auth/* 경로로 인증 API가 자동 등록됩니다.
98
+ */
99
+ private registerBetterAuth;
93
100
  private initializeCache;
94
101
  private initializeWorkflows;
95
102
  private boot;
@@ -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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"}