payload 2.0.11 → 2.0.13

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 (220) hide show
  1. package/.eslintrc.js +58 -0
  2. package/dist/admin/components/elements/ArrayAction/index.scss +0 -2
  3. package/dist/admin/components/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  4. package/dist/admin/components/elements/DocumentDrawer/DrawerContent.js +3 -1
  5. package/dist/admin/components/elements/DocumentFields/index.d.ts +16 -0
  6. package/dist/admin/components/elements/DocumentFields/index.d.ts.map +1 -0
  7. package/dist/admin/components/elements/DocumentFields/index.js +69 -0
  8. package/dist/admin/components/{views/Global/Default → elements/DocumentFields}/index.scss +10 -13
  9. package/dist/admin/components/elements/DuplicateDocument/index.d.ts.map +1 -1
  10. package/dist/admin/components/elements/DuplicateDocument/index.js +3 -1
  11. package/dist/admin/components/elements/ListControls/index.d.ts +1 -2
  12. package/dist/admin/components/elements/ListControls/index.d.ts.map +1 -1
  13. package/dist/admin/components/elements/ListControls/index.js +14 -25
  14. package/dist/admin/components/elements/ListControls/types.d.ts +3 -0
  15. package/dist/admin/components/elements/ListControls/types.d.ts.map +1 -1
  16. package/dist/admin/components/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  17. package/dist/admin/components/elements/ListDrawer/DrawerContent.js +60 -15
  18. package/dist/admin/components/elements/Localizer/index.d.ts.map +1 -1
  19. package/dist/admin/components/elements/Localizer/index.js +21 -13
  20. package/dist/admin/components/elements/Popup/PopupButtonList/index.d.ts +1 -0
  21. package/dist/admin/components/elements/Popup/PopupButtonList/index.d.ts.map +1 -1
  22. package/dist/admin/components/elements/Popup/PopupButtonList/index.js +3 -2
  23. package/dist/admin/components/elements/Popup/PopupButtonList/index.scss +6 -1
  24. package/dist/admin/components/elements/ReactSelect/MultiValue/index.d.ts.map +1 -1
  25. package/dist/admin/components/elements/ReactSelect/MultiValue/index.js +4 -3
  26. package/dist/admin/components/elements/ReactSelect/index.js +3 -3
  27. package/dist/admin/components/elements/ReactSelect/types.d.ts +0 -4
  28. package/dist/admin/components/elements/ReactSelect/types.d.ts.map +1 -1
  29. package/dist/admin/components/elements/SaveDraft/index.d.ts.map +1 -1
  30. package/dist/admin/components/elements/SaveDraft/index.js +4 -3
  31. package/dist/admin/components/elements/SearchFilter/index.d.ts.map +1 -1
  32. package/dist/admin/components/elements/SearchFilter/index.js +4 -32
  33. package/dist/admin/components/elements/SearchFilter/types.d.ts +1 -2
  34. package/dist/admin/components/elements/SearchFilter/types.d.ts.map +1 -1
  35. package/dist/admin/components/elements/Status/index.d.ts.map +1 -1
  36. package/dist/admin/components/elements/Status/index.js +3 -1
  37. package/dist/admin/components/elements/TableColumns/index.d.ts.map +1 -1
  38. package/dist/admin/components/elements/TableColumns/index.js +8 -13
  39. package/dist/admin/components/elements/WhereBuilder/Condition/index.js +2 -2
  40. package/dist/admin/components/forms/RenderFields/index.d.ts.map +1 -1
  41. package/dist/admin/components/forms/RenderFields/index.js +1 -1
  42. package/dist/admin/components/forms/field-types/RichText/types.d.ts +6 -1
  43. package/dist/admin/components/forms/field-types/RichText/types.d.ts.map +1 -1
  44. package/dist/admin/components/forms/field-types/Row/index.d.ts.map +1 -1
  45. package/dist/admin/components/forms/field-types/Row/index.js +9 -5
  46. package/dist/admin/components/forms/field-types/Row/index.scss +22 -18
  47. package/dist/admin/components/utilities/DocumentInfo/index.d.ts.map +1 -1
  48. package/dist/admin/components/utilities/DocumentInfo/index.js +19 -11
  49. package/dist/admin/components/utilities/Preferences/index.d.ts +6 -1
  50. package/dist/admin/components/utilities/Preferences/index.d.ts.map +1 -1
  51. package/dist/admin/components/utilities/Preferences/index.js +55 -5
  52. package/dist/admin/components/views/Account/Default.d.ts +5 -1
  53. package/dist/admin/components/views/Account/Default.d.ts.map +1 -1
  54. package/dist/admin/components/views/Account/Default.js +29 -72
  55. package/dist/admin/components/views/Account/Settings/index.d.ts +6 -0
  56. package/dist/admin/components/views/Account/Settings/index.d.ts.map +1 -0
  57. package/dist/admin/components/views/Account/Settings/index.js +48 -0
  58. package/dist/admin/components/views/Account/Settings/index.scss +45 -0
  59. package/dist/admin/components/views/Account/index.d.ts.map +1 -1
  60. package/dist/admin/components/views/Account/index.js +18 -12
  61. package/dist/admin/components/views/Account/index.scss +7 -35
  62. package/dist/admin/components/views/Global/Default/index.d.ts +4 -2
  63. package/dist/admin/components/views/Global/Default/index.d.ts.map +1 -1
  64. package/dist/admin/components/views/Global/Default/index.js +16 -58
  65. package/dist/admin/components/views/Global/Default.d.ts +5 -2
  66. package/dist/admin/components/views/Global/Default.d.ts.map +1 -1
  67. package/dist/admin/components/views/Global/Default.js +6 -3
  68. package/dist/admin/components/views/Global/Routes/CustomComponent.d.ts.map +1 -1
  69. package/dist/admin/components/views/Global/Routes/CustomComponent.js +3 -2
  70. package/dist/admin/components/views/Global/Routes/index.d.ts +4 -1
  71. package/dist/admin/components/views/Global/Routes/index.d.ts.map +1 -1
  72. package/dist/admin/components/views/Global/Routes/index.js +1 -1
  73. package/dist/admin/components/views/Global/index.d.ts.map +1 -1
  74. package/dist/admin/components/views/Global/index.js +3 -1
  75. package/dist/admin/components/views/LivePreview/Context/index.d.ts.map +1 -1
  76. package/dist/admin/components/views/LivePreview/Context/index.js +6 -4
  77. package/dist/admin/components/views/LivePreview/index.d.ts +4 -1
  78. package/dist/admin/components/views/LivePreview/index.d.ts.map +1 -1
  79. package/dist/admin/components/views/LivePreview/index.js +20 -13
  80. package/dist/admin/components/views/Version/SelectLocales/index.js +3 -9
  81. package/dist/admin/components/views/Version/SelectLocales/types.d.ts +4 -4
  82. package/dist/admin/components/views/Version/SelectLocales/types.d.ts.map +1 -1
  83. package/dist/admin/components/views/Version/Version.d.ts.map +1 -1
  84. package/dist/admin/components/views/Version/Version.js +11 -3
  85. package/dist/admin/components/views/Version/types.d.ts +0 -4
  86. package/dist/admin/components/views/Version/types.d.ts.map +1 -1
  87. package/dist/admin/components/views/collections/Edit/Default/index.d.ts +4 -1
  88. package/dist/admin/components/views/collections/Edit/Default/index.d.ts.map +1 -1
  89. package/dist/admin/components/views/collections/Edit/Default/index.js +27 -61
  90. package/dist/admin/components/views/collections/Edit/Default/index.scss +5 -158
  91. package/dist/admin/components/views/collections/Edit/Default.d.ts +5 -2
  92. package/dist/admin/components/views/collections/Edit/Default.d.ts.map +1 -1
  93. package/dist/admin/components/views/collections/Edit/Default.js +6 -3
  94. package/dist/admin/components/views/collections/Edit/Routes/index.d.ts +4 -1
  95. package/dist/admin/components/views/collections/Edit/Routes/index.d.ts.map +1 -1
  96. package/dist/admin/components/views/collections/Edit/Routes/index.js +1 -1
  97. package/dist/admin/components/views/collections/Edit/index.d.ts.map +1 -1
  98. package/dist/admin/components/views/collections/Edit/index.js +3 -1
  99. package/dist/admin/components/views/collections/List/Default.d.ts.map +1 -1
  100. package/dist/admin/components/views/collections/List/Default.js +7 -5
  101. package/dist/admin/components/views/collections/List/index.d.ts.map +1 -1
  102. package/dist/admin/components/views/collections/List/index.js +68 -17
  103. package/dist/admin/components/views/collections/List/types.d.ts +4 -0
  104. package/dist/admin/components/views/collections/List/types.d.ts.map +1 -1
  105. package/dist/admin/hooks/useUseAsTitle.d.ts +3 -0
  106. package/dist/admin/hooks/useUseAsTitle.d.ts.map +1 -0
  107. package/dist/admin/hooks/useUseAsTitle.js +24 -0
  108. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  109. package/dist/auth/operations/forgotPassword.js +4 -1
  110. package/dist/auth/operations/local/forgotPassword.js +2 -2
  111. package/dist/auth/operations/local/login.js +2 -2
  112. package/dist/auth/operations/local/resetPassword.d.ts.map +1 -1
  113. package/dist/auth/operations/local/resetPassword.js +2 -2
  114. package/dist/auth/operations/local/unlock.js +2 -2
  115. package/dist/auth/operations/local/verifyEmail.js +2 -2
  116. package/dist/auth/operations/login.d.ts.map +1 -1
  117. package/dist/auth/operations/login.js +9 -2
  118. package/dist/auth/operations/logout.d.ts.map +1 -1
  119. package/dist/auth/operations/logout.js +2 -1
  120. package/dist/auth/operations/me.d.ts.map +1 -1
  121. package/dist/auth/operations/me.js +2 -1
  122. package/dist/auth/operations/refresh.d.ts.map +1 -1
  123. package/dist/auth/operations/refresh.js +4 -1
  124. package/dist/collections/config/types.d.ts +33 -1
  125. package/dist/collections/config/types.d.ts.map +1 -1
  126. package/dist/collections/config/types.js +1 -1
  127. package/dist/collections/operations/create.d.ts.map +1 -1
  128. package/dist/collections/operations/create.js +21 -32
  129. package/dist/collections/operations/delete.d.ts.map +1 -1
  130. package/dist/collections/operations/delete.js +8 -2
  131. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  132. package/dist/collections/operations/deleteByID.js +8 -2
  133. package/dist/collections/operations/find.d.ts.map +1 -1
  134. package/dist/collections/operations/find.js +7 -2
  135. package/dist/collections/operations/findByID.d.ts.map +1 -1
  136. package/dist/collections/operations/findByID.js +7 -2
  137. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  138. package/dist/collections/operations/findVersionByID.js +5 -2
  139. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  140. package/dist/collections/operations/findVersions.js +5 -2
  141. package/dist/collections/operations/local/find.js +2 -2
  142. package/dist/collections/operations/local/findByID.js +2 -2
  143. package/dist/collections/operations/local/findVersionByID.js +2 -2
  144. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  145. package/dist/collections/operations/restoreVersion.js +7 -3
  146. package/dist/collections/operations/update.d.ts.map +1 -1
  147. package/dist/collections/operations/update.js +17 -6
  148. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  149. package/dist/collections/operations/updateByID.js +17 -6
  150. package/dist/collections/operations/utils.d.ts +21 -1
  151. package/dist/collections/operations/utils.d.ts.map +1 -1
  152. package/dist/collections/operations/utils.js +3 -2
  153. package/dist/config/schema.d.ts.map +1 -1
  154. package/dist/config/schema.js +4 -3
  155. package/dist/exports/types.d.ts +1 -0
  156. package/dist/exports/types.d.ts.map +1 -1
  157. package/dist/exports/types.js +19 -15
  158. package/dist/express/middleware/errorHandler.d.ts.map +1 -1
  159. package/dist/express/middleware/errorHandler.js +3 -3
  160. package/dist/fields/config/schema.d.ts.map +1 -1
  161. package/dist/fields/config/schema.js +5 -4
  162. package/dist/fields/config/types.d.ts +8 -1
  163. package/dist/fields/config/types.d.ts.map +1 -1
  164. package/dist/fields/config/types.js +1 -1
  165. package/dist/fields/hooks/afterChange/index.d.ts +3 -2
  166. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  167. package/dist/fields/hooks/afterChange/index.js +5 -3
  168. package/dist/fields/hooks/afterChange/promise.d.ts +5 -1
  169. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  170. package/dist/fields/hooks/afterChange/promise.js +17 -2
  171. package/dist/fields/hooks/afterChange/traverseFields.d.ts +5 -1
  172. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  173. package/dist/fields/hooks/afterChange/traverseFields.js +4 -2
  174. package/dist/fields/hooks/afterRead/index.d.ts +2 -1
  175. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  176. package/dist/fields/hooks/afterRead/index.js +5 -3
  177. package/dist/fields/hooks/afterRead/promise.d.ts +5 -1
  178. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  179. package/dist/fields/hooks/afterRead/promise.js +38 -4
  180. package/dist/fields/hooks/afterRead/traverseFields.d.ts +5 -1
  181. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  182. package/dist/fields/hooks/afterRead/traverseFields.js +4 -2
  183. package/dist/fields/hooks/beforeChange/index.d.ts +3 -2
  184. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  185. package/dist/fields/hooks/beforeChange/index.js +5 -3
  186. package/dist/fields/hooks/beforeChange/promise.d.ts +5 -1
  187. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  188. package/dist/fields/hooks/beforeChange/promise.js +17 -2
  189. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +5 -1
  190. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  191. package/dist/fields/hooks/beforeChange/traverseFields.js +4 -2
  192. package/dist/fields/hooks/beforeValidate/index.d.ts +3 -2
  193. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  194. package/dist/fields/hooks/beforeValidate/index.js +5 -3
  195. package/dist/fields/hooks/beforeValidate/promise.d.ts +5 -1
  196. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  197. package/dist/fields/hooks/beforeValidate/promise.js +19 -4
  198. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +5 -1
  199. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  200. package/dist/fields/hooks/beforeValidate/traverseFields.js +4 -2
  201. package/dist/globals/config/types.d.ts +16 -0
  202. package/dist/globals/config/types.d.ts.map +1 -1
  203. package/dist/globals/operations/findOne.d.ts.map +1 -1
  204. package/dist/globals/operations/findOne.js +7 -2
  205. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  206. package/dist/globals/operations/findVersionByID.js +7 -2
  207. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  208. package/dist/globals/operations/findVersions.js +5 -2
  209. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  210. package/dist/globals/operations/restoreVersion.js +9 -3
  211. package/dist/globals/operations/update.d.ts.map +1 -1
  212. package/dist/globals/operations/update.js +19 -6
  213. package/dist/graphql/errorHandler.js +2 -2
  214. package/dist/graphql/schema/buildMutationInputType.js +2 -2
  215. package/dist/graphql/schema/buildObjectType.d.ts.map +1 -1
  216. package/dist/graphql/schema/buildObjectType.js +8 -3
  217. package/dist/preferences/operations/update.js +7 -7
  218. package/package.json +2 -2
  219. package/types.d.ts +1 -0
  220. package/types.js +19 -15
@@ -315,8 +315,13 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
315
315
  let depth = payload.config.defaultDepth;
316
316
  if (typeof args.depth !== 'undefined') depth = args.depth;
317
317
  const editor = field?.editor;
318
- if (editor?.afterReadPromise) {
319
- await editor?.afterReadPromise({
318
+ // RichText fields have their own depth argument in GraphQL.
319
+ // This is why the populationPromise (which populates richtext fields like uploads and relationships)
320
+ // is run here again, with the provided depth.
321
+ // In the graphql find.ts resolver, the depth is then hard-coded to 0.
322
+ // Effectively, this means that the populationPromise for GraphQL is only run here, and not in the find.ts resolver / normal population promise.
323
+ if (editor?.populationPromise) {
324
+ await editor?.populationPromise({
320
325
  depth,
321
326
  field,
322
327
  req: context.req,
@@ -469,4 +474,4 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
469
474
  }
470
475
  const _default = buildObjectType;
471
476
 
472
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ncmFwaHFsL3NjaGVtYS9idWlsZE9iamVjdFR5cGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuaW1wb3J0IHR5cGUgeyBHcmFwaFFMRmllbGRDb25maWcsIEdyYXBoUUxUeXBlIH0gZnJvbSAnZ3JhcGhxbCdcblxuaW1wb3J0IHtcbiAgR3JhcGhRTEJvb2xlYW4sXG4gIEdyYXBoUUxFbnVtVHlwZSxcbiAgR3JhcGhRTEZsb2F0LFxuICBHcmFwaFFMSW50LFxuICBHcmFwaFFMTGlzdCxcbiAgR3JhcGhRTE5vbk51bGwsXG4gIEdyYXBoUUxPYmplY3RUeXBlLFxuICBHcmFwaFFMU3RyaW5nLFxuICBHcmFwaFFMVW5pb25UeXBlLFxufSBmcm9tICdncmFwaHFsJ1xuaW1wb3J0IHsgRGF0ZVRpbWVSZXNvbHZlciwgRW1haWxBZGRyZXNzUmVzb2x2ZXIgfSBmcm9tICdncmFwaHFsLXNjYWxhcnMnXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuaW1wb3J0IHsgR3JhcGhRTEpTT04gfSBmcm9tICdncmFwaHFsLXR5cGUtanNvbidcblxuaW1wb3J0IHR5cGUgeyBSaWNoVGV4dEFkYXB0ZXIgfSBmcm9tICcuLi8uLi9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL2ZpZWxkLXR5cGVzL1JpY2hUZXh0L3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuICBBcnJheUZpZWxkLFxuICBCbG9ja0ZpZWxkLFxuICBDaGVja2JveEZpZWxkLFxuICBDb2RlRmllbGQsXG4gIENvbGxhcHNpYmxlRmllbGQsXG4gIERhdGVGaWVsZCxcbiAgRW1haWxGaWVsZCxcbiAgRmllbGQsXG4gIEdyb3VwRmllbGQsXG4gIEpTT05GaWVsZCxcbiAgTnVtYmVyRmllbGQsXG4gIFBvaW50RmllbGQsXG4gIFJhZGlvRmllbGQsXG4gIFJlbGF0aW9uc2hpcEZpZWxkLFxuICBSaWNoVGV4dEZpZWxkLFxuICBSb3dGaWVsZCxcbiAgU2VsZWN0RmllbGQsXG4gIFRhYnNGaWVsZCxcbiAgVGV4dEZpZWxkLFxuICBUZXh0YXJlYUZpZWxkLFxuICBVcGxvYWRGaWVsZCxcbn0gZnJvbSAnLi4vLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgUGF5bG9hZCB9IGZyb20gJy4uLy4uL3BheWxvYWQnXG5cbmltcG9ydCB7IHRhYkhhc05hbWUgfSBmcm9tICcuLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHsgdG9Xb3JkcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9mb3JtYXRMYWJlbHMnXG5pbXBvcnQgY29tYmluZVBhcmVudE5hbWUgZnJvbSAnLi4vdXRpbGl0aWVzL2NvbWJpbmVQYXJlbnROYW1lJ1xuaW1wb3J0IGZvcm1hdE5hbWUgZnJvbSAnLi4vdXRpbGl0aWVzL2Zvcm1hdE5hbWUnXG5pbXBvcnQgZm9ybWF0T3B0aW9ucyBmcm9tICcuLi91dGlsaXRpZXMvZm9ybWF0T3B0aW9ucydcbmltcG9ydCBidWlsZFdoZXJlSW5wdXRUeXBlIGZyb20gJy4vYnVpbGRXaGVyZUlucHV0VHlwZSdcbmltcG9ydCBpc0ZpZWxkTnVsbGFibGUgZnJvbSAnLi9pc0ZpZWxkTnVsbGFibGUnXG5pbXBvcnQgd2l0aE51bGxhYmxlVHlwZSBmcm9tICcuL3dpdGhOdWxsYWJsZVR5cGUnXG5cbnR5cGUgTG9jYWxlSW5wdXRUeXBlID0ge1xuICBmYWxsYmFja0xvY2FsZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbiAgbG9jYWxlOiB7XG4gICAgdHlwZTogR3JhcGhRTFR5cGVcbiAgfVxuICB3aGVyZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0VHlwZUNvbmZpZyA9IHtcbiAgW3BhdGg6IHN0cmluZ106IEdyYXBoUUxGaWVsZENvbmZpZzxhbnksIGFueT5cbn1cblxudHlwZSBBcmdzID0ge1xuICBiYXNlRmllbGRzPzogT2JqZWN0VHlwZUNvbmZpZ1xuICBmaWVsZHM6IEZpZWxkW11cbiAgZm9yY2VOdWxsYWJsZT86IGJvb2xlYW5cbiAgbmFtZTogc3RyaW5nXG4gIHBhcmVudE5hbWU6IHN0cmluZ1xuICBwYXlsb2FkOiBQYXlsb2FkXG59XG5cbmZ1bmN0aW9uIGJ1aWxkT2JqZWN0VHlwZSh7XG4gIG5hbWUsXG4gIGJhc2VGaWVsZHMgPSB7fSxcbiAgZmllbGRzLFxuICBmb3JjZU51bGxhYmxlLFxuICBwYXJlbnROYW1lLFxuICBwYXlsb2FkLFxufTogQXJncyk6IEdyYXBoUUxPYmplY3RUeXBlIHtcbiAgY29uc3QgZmllbGRUb1NjaGVtYU1hcCA9IHtcbiAgICBhcnJheTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBBcnJheUZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgZmllbGQ/LmludGVyZmFjZU5hbWUgfHwgY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgaWYgKCFwYXlsb2FkLnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHBheWxvYWQudHlwZXMuYXJyYXlUeXBlc1tpbnRlcmZhY2VOYW1lXSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlOiBpc0ZpZWxkTnVsbGFibGUoZmllbGQsIGZvcmNlTnVsbGFibGUpLFxuICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJyYXlUeXBlID0gbmV3IEdyYXBoUUxMaXN0KG5ldyBHcmFwaFFMTm9uTnVsbChwYXlsb2FkLnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgYXJyYXlUeXBlKSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgYmxvY2tzOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IEJsb2NrRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrVHlwZXMgPSBmaWVsZC5ibG9ja3MubWFwKChibG9jaykgPT4ge1xuICAgICAgICBpZiAoIXBheWxvYWQudHlwZXMuYmxvY2tUeXBlc1tibG9jay5zbHVnXSkge1xuICAgICAgICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPVxuICAgICAgICAgICAgYmxvY2s/LmludGVyZmFjZU5hbWUgfHwgYmxvY2s/LmdyYXBoUUw/LnNpbmd1bGFyTmFtZSB8fCB0b1dvcmRzKGJsb2NrLnNsdWcsIHRydWUpXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgcGF5bG9hZC50eXBlcy5ibG9ja1R5cGVzW2Jsb2NrLnNsdWddID0gYnVpbGRPYmplY3RUeXBlKHtcbiAgICAgICAgICAgIG5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgLi4uYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jsb2NrVHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICAgICBwYXJlbnROYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBheWxvYWQudHlwZXMuYmxvY2tUeXBlc1tibG9jay5zbHVnXVxuICAgICAgfSlcblxuICAgICAgY29uc3QgZnVsbE5hbWUgPSBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCB0b1dvcmRzKGZpZWxkLm5hbWUsIHRydWUpKVxuXG4gICAgICBjb25zdCB0eXBlID0gbmV3IEdyYXBoUUxMaXN0KFxuICAgICAgICBuZXcgR3JhcGhRTE5vbk51bGwoXG4gICAgICAgICAgbmV3IEdyYXBoUUxVbmlvblR5cGUoe1xuICAgICAgICAgICAgbmFtZTogZnVsbE5hbWUsXG4gICAgICAgICAgICByZXNvbHZlVHlwZTogKGRhdGEpID0+IHBheWxvYWQudHlwZXMuYmxvY2tUeXBlc1tkYXRhLmJsb2NrVHlwZV0ubmFtZSxcbiAgICAgICAgICAgIHR5cGVzOiBibG9ja1R5cGVzLFxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgdHlwZSkgfSxcbiAgICAgIH1cbiAgICB9LFxuICAgIGNoZWNrYm94OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IENoZWNrYm94RmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxCb29sZWFuLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIGNvZGU6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogQ29kZUZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMU3RyaW5nLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIGNvbGxhcHNpYmxlOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IENvbGxhcHNpYmxlRmllbGQpID0+XG4gICAgICBmaWVsZC5maWVsZHMucmVkdWNlKChvYmplY3RUeXBlQ29uZmlnV2l0aENvbGxhcHNpYmxlRmllbGRzLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCBhZGRTdWJGaWVsZCA9IGZpZWxkVG9TY2hlbWFNYXBbc3ViRmllbGQudHlwZV1cbiAgICAgICAgaWYgKGFkZFN1YkZpZWxkKSByZXR1cm4gYWRkU3ViRmllbGQob2JqZWN0VHlwZUNvbmZpZ1dpdGhDb2xsYXBzaWJsZUZpZWxkcywgc3ViRmllbGQpXG4gICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnV2l0aENvbGxhcHNpYmxlRmllbGRzXG4gICAgICB9LCBvYmplY3RUeXBlQ29uZmlnKSxcbiAgICBkYXRlOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IERhdGVGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgRGF0ZVRpbWVSZXNvbHZlciwgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBlbWFpbDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBFbWFpbEZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBFbWFpbEFkZHJlc3NSZXNvbHZlciwgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBncm91cDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBHcm91cEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgZmllbGQ/LmludGVyZmFjZU5hbWUgfHwgY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgaWYgKCFwYXlsb2FkLnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHBheWxvYWQudHlwZXMuZ3JvdXBUeXBlc1tpbnRlcmZhY2VOYW1lXSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlOiBpc0ZpZWxkTnVsbGFibGUoZmllbGQsIGZvcmNlTnVsbGFibGUpLFxuICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHBheWxvYWQudHlwZXMuZ3JvdXBUeXBlc1tpbnRlcmZhY2VOYW1lXSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAganNvbjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBKU09ORmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxKU09OLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIG51bWJlcjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBOdW1iZXJGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGZpZWxkPy5uYW1lID09PSAnaWQnID8gR3JhcGhRTEludCA6IEdyYXBoUUxGbG9hdFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgZmllbGQ/Lmhhc01hbnkgPT09IHRydWUgPyBuZXcgR3JhcGhRTExpc3QodHlwZSkgOiB0eXBlLFxuICAgICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgcG9pbnQ6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogUG9pbnRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKEdyYXBoUUxGbG9hdCkpLFxuICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHJhZGlvOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJhZGlvRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCBmaWVsZC5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlczogZm9ybWF0T3B0aW9ucyhmaWVsZCksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVsYXRpb25zaGlwOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJlbGF0aW9uc2hpcEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbGF0aW9uVG8gfSA9IGZpZWxkXG4gICAgICBjb25zdCBpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbylcbiAgICAgIGNvbnN0IGhhc01hbnlWYWx1ZXMgPSBmaWVsZC5oYXNNYW55XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgbGV0IHR5cGVcbiAgICAgIGxldCByZWxhdGlvblRvVHlwZSA9IG51bGxcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykpIHtcbiAgICAgICAgcmVsYXRpb25Ub1R5cGUgPSBuZXcgR3JhcGhRTEVudW1UeXBlKHtcbiAgICAgICAgICBuYW1lOiBgJHtyZWxhdGlvbnNoaXBOYW1lfV9SZWxhdGlvblRvYCxcbiAgICAgICAgICB2YWx1ZXM6IHJlbGF0aW9uVG8ucmVkdWNlKFxuICAgICAgICAgICAgKHJlbGF0aW9ucywgcmVsYXRpb24pID0+ICh7XG4gICAgICAgICAgICAgIC4uLnJlbGF0aW9ucyxcbiAgICAgICAgICAgICAgW2Zvcm1hdE5hbWUocmVsYXRpb24pXToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiByZWxhdGlvbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCB0eXBlcyA9IHJlbGF0aW9uVG8ubWFwKChyZWxhdGlvbikgPT4gcGF5bG9hZC5jb2xsZWN0aW9uc1tyZWxhdGlvbl0uZ3JhcGhRTC50eXBlKVxuXG4gICAgICAgIHR5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICAgIG5hbWU6IGAke3JlbGF0aW9uc2hpcE5hbWV9X1JlbGF0aW9uc2hpcGAsXG4gICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICByZWxhdGlvblRvOiB7XG4gICAgICAgICAgICAgIHR5cGU6IHJlbGF0aW9uVG9UeXBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMVW5pb25UeXBlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgICAgICAgIGFzeW5jIHJlc29sdmVUeXBlKGRhdGEsIHsgcmVxIH0pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLmNvbGxlY3Rpb25zW2RhdGEuY29sbGVjdGlvbl0uZ3JhcGhRTC50eXBlLm5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIDsoeyB0eXBlIH0gPSBwYXlsb2FkLmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmdyYXBoUUwpXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSByZWxhdGlvbnNoaXBUeXBlIGlzIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50LFxuICAgICAgLy8gaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCB0aGlzIGJsb2NrVHlwZSBjYW4gaGF2ZSBhIHJlbGF0aW9uc2hpcFxuICAgICAgLy8gdG8gaXRzZWxmLiBUaGVyZWZvcmUsIHdlIHNldCB0aGUgcmVsYXRpb25zaGlwVHlwZSBlcXVhbCB0byB0aGUgYmxvY2tUeXBlXG4gICAgICAvLyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBjcmVhdGVkLlxuXG4gICAgICB0eXBlID0gdHlwZSB8fCBuZXdseUNyZWF0ZWRCbG9ja1R5cGVcblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwQXJnczoge1xuICAgICAgICBmYWxsYmFja0xvY2FsZT86IHVua25vd25cbiAgICAgICAgbGltaXQ/OiB1bmtub3duXG4gICAgICAgIGxvY2FsZT86IHVua25vd25cbiAgICAgICAgcGFnZT86IHVua25vd25cbiAgICAgICAgd2hlcmU/OiB1bmtub3duXG4gICAgICB9ID0ge31cblxuICAgICAgaWYgKHBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICByZWxhdGlvbnNoaXBBcmdzLmxvY2FsZSA9IHtcbiAgICAgICAgICB0eXBlOiBwYXlsb2FkLnR5cGVzLmxvY2FsZUlucHV0VHlwZSxcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbGF0aW9uc2hpcEFyZ3MuZmFsbGJhY2tMb2NhbGUgPSB7XG4gICAgICAgICAgdHlwZTogcGF5bG9hZC50eXBlcy5mYWxsYmFja0xvY2FsZUlucHV0VHlwZSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSB7XG4gICAgICAgIGFyZ3M6IHJlbGF0aW9uc2hpcEFyZ3MsXG4gICAgICAgIGV4dGVuc2lvbnM6IHsgY29tcGxleGl0eTogMTAgfSxcbiAgICAgICAgYXN5bmMgcmVzb2x2ZShwYXJlbnQsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmVudFtmaWVsZC5uYW1lXVxuICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IGFyZ3MubG9jYWxlIHx8IGNvbnRleHQucmVxLmxvY2FsZVxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrTG9jYWxlID0gYXJncy5mYWxsYmFja0xvY2FsZSB8fCBjb250ZXh0LnJlcS5mYWxsYmFja0xvY2FsZVxuICAgICAgICAgIGxldCByZWxhdGVkQ29sbGVjdGlvblNsdWcgPSBmaWVsZC5yZWxhdGlvblRvXG5cbiAgICAgICAgICBpZiAoaGFzTWFueVZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdXG4gICAgICAgICAgICBjb25zdCByZXN1bHRQcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVBvcHVsYXRpb25Qcm9taXNlID0gYXN5bmMgKHJlbGF0ZWREb2MsIGkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGlkID0gcmVsYXRlZERvY1xuICAgICAgICAgICAgICBsZXQgY29sbGVjdGlvblNsdWcgPSBmaWVsZC5yZWxhdGlvblRvXG5cbiAgICAgICAgICAgICAgaWYgKGlzUmVsYXRlZFRvTWFueUNvbGxlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcgPSByZWxhdGVkRG9jLnJlbGF0aW9uVG9cbiAgICAgICAgICAgICAgICBpZCA9IHJlbGF0ZWREb2MudmFsdWVcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnRleHQucmVxLnBheWxvYWREYXRhTG9hZGVyLmxvYWQoXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXEudHJhbnNhY3Rpb25JRCxcbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0c1tpXSA9IHJlc3VsdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgocmVsYXRlZERvYywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdFByb21pc2VzLnB1c2goY3JlYXRlUG9wdWxhdGlvblByb21pc2UocmVsYXRlZERvYywgaSkpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJlc3VsdFByb21pc2VzKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZVxuICAgICAgICAgIGlmIChpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgaWQgPSB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgcmVsYXRlZENvbGxlY3Rpb25TbHVnID0gdmFsdWUucmVsYXRpb25Ub1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZERvY3VtZW50ID0gYXdhaXQgY29udGV4dC5yZXEucGF5bG9hZERhdGFMb2FkZXIubG9hZChcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVxLnRyYW5zYWN0aW9uSUQsXG4gICAgICAgICAgICAgICAgcmVsYXRlZENvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAocmVsYXRlZERvY3VtZW50KSB7XG4gICAgICAgICAgICAgIGlmIChpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiByZWxhdGVkQ29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAuLi5yZWxhdGVkRG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlbGF0ZWREb2N1bWVudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgaGFzTWFueVZhbHVlcyA/IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwodHlwZSkpIDogdHlwZSxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgICApLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHJlbGF0aW9uc2hpcCxcbiAgICAgIH1cbiAgICB9LFxuICAgIHJpY2hUZXh0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJpY2hUZXh0RmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICBkZXB0aDoge1xuICAgICAgICAgICAgdHlwZTogR3JhcGhRTEludCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhc3luYyByZXNvbHZlKHBhcmVudCwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIGxldCBkZXB0aCA9IHBheWxvYWQuY29uZmlnLmRlZmF1bHREZXB0aFxuICAgICAgICAgIGlmICh0eXBlb2YgYXJncy5kZXB0aCAhPT0gJ3VuZGVmaW5lZCcpIGRlcHRoID0gYXJncy5kZXB0aFxuICAgICAgICAgIGNvbnN0IGVkaXRvcjogUmljaFRleHRBZGFwdGVyID0gZmllbGQ/LmVkaXRvclxuXG4gICAgICAgICAgaWYgKGVkaXRvcj8uYWZ0ZXJSZWFkUHJvbWlzZSkge1xuICAgICAgICAgICAgYXdhaXQgZWRpdG9yPy5hZnRlclJlYWRQcm9taXNlKHtcbiAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICByZXE6IGNvbnRleHQucmVxLFxuICAgICAgICAgICAgICBzaG93SGlkZGVuRmllbGRzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2libGluZ0RvYzogcGFyZW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFyZW50W2ZpZWxkLm5hbWVdXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxKU09OLCBmb3JjZU51bGxhYmxlKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcm93OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJvd0ZpZWxkKSA9PlxuICAgICAgZmllbGQuZmllbGRzLnJlZHVjZSgob2JqZWN0VHlwZUNvbmZpZ1dpdGhSb3dGaWVsZHMsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZFN1YkZpZWxkID0gZmllbGRUb1NjaGVtYU1hcFtzdWJGaWVsZC50eXBlXVxuICAgICAgICBpZiAoYWRkU3ViRmllbGQpIHJldHVybiBhZGRTdWJGaWVsZChvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkcywgc3ViRmllbGQpXG4gICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkc1xuICAgICAgfSwgb2JqZWN0VHlwZUNvbmZpZyksXG4gICAgc2VsZWN0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFNlbGVjdEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBmdWxsTmFtZSA9IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIGZpZWxkLm5hbWUpXG5cbiAgICAgIGxldCB0eXBlOiBHcmFwaFFMVHlwZSA9IG5ldyBHcmFwaFFMRW51bVR5cGUoe1xuICAgICAgICBuYW1lOiBmdWxsTmFtZSxcbiAgICAgICAgdmFsdWVzOiBmb3JtYXRPcHRpb25zKGZpZWxkKSxcbiAgICAgIH0pXG5cbiAgICAgIHR5cGUgPSBmaWVsZC5oYXNNYW55ID8gbmV3IEdyYXBoUUxMaXN0KG5ldyBHcmFwaFFMTm9uTnVsbCh0eXBlKSkgOiB0eXBlXG4gICAgICB0eXBlID0gd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgdHlwZSwgZm9yY2VOdWxsYWJsZSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGUgfSxcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYnM6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogVGFic0ZpZWxkKSA9PlxuICAgICAgZmllbGQudGFicy5yZWR1Y2UoKHRhYlNjaGVtYSwgdGFiKSA9PiB7XG4gICAgICAgIGlmICh0YWJIYXNOYW1lKHRhYikpIHtcbiAgICAgICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgICAgIHRhYj8uaW50ZXJmYWNlTmFtZSB8fCBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCB0b1dvcmRzKHRhYi5uYW1lLCB0cnVlKSlcblxuICAgICAgICAgIGlmICghcGF5bG9hZC50eXBlcy50YWJUeXBlc1tpbnRlcmZhY2VOYW1lXSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBwYXlsb2FkLnR5cGVzLnRhYlR5cGVzW2ludGVyZmFjZU5hbWVdID0gYnVpbGRPYmplY3RUeXBlKHtcbiAgICAgICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICAgICAgZmllbGRzOiB0YWIuZmllbGRzLFxuICAgICAgICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgICAgICAgICBwYXJlbnROYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udGFiU2NoZW1hLFxuICAgICAgICAgICAgW3RhYi5uYW1lXTogeyB0eXBlOiBwYXlsb2FkLnR5cGVzLnRhYlR5cGVzW2ludGVyZmFjZU5hbWVdIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50YWJTY2hlbWEsXG4gICAgICAgICAgLi4udGFiLmZpZWxkcy5yZWR1Y2UoKHN1YkZpZWxkU2NoZW1hLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRkU3ViRmllbGQgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG4gICAgICAgICAgICBpZiAoYWRkU3ViRmllbGQpIHJldHVybiBhZGRTdWJGaWVsZChzdWJGaWVsZFNjaGVtYSwgc3ViRmllbGQpXG4gICAgICAgICAgICByZXR1cm4gc3ViRmllbGRTY2hlbWFcbiAgICAgICAgICB9LCB0YWJTY2hlbWEpLFxuICAgICAgICB9XG4gICAgICB9LCBvYmplY3RUeXBlQ29uZmlnKSxcbiAgICB0ZXh0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFRleHRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgR3JhcGhRTFN0cmluZywgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICB0ZXh0YXJlYTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBUZXh0YXJlYUZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMU3RyaW5nLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIHVwbG9hZDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBVcGxvYWRGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgeyByZWxhdGlvblRvIH0gPSBmaWVsZFxuXG4gICAgICBjb25zdCB1cGxvYWROYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgLy8gSWYgdGhlIHJlbGF0aW9uc2hpcFR5cGUgaXMgdW5kZWZpbmVkIGF0IHRoaXMgcG9pbnQsXG4gICAgICAvLyBpdCBjYW4gYmUgYXNzdW1lZCB0aGF0IHRoaXMgYmxvY2tUeXBlIGNhbiBoYXZlIGEgcmVsYXRpb25zaGlwXG4gICAgICAvLyB0byBpdHNlbGYuIFRoZXJlZm9yZSwgd2Ugc2V0IHRoZSByZWxhdGlvbnNoaXBUeXBlIGVxdWFsIHRvIHRoZSBibG9ja1R5cGVcbiAgICAgIC8vIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGNyZWF0ZWQuXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB3aXRoTnVsbGFibGVUeXBlKFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgcGF5bG9hZC5jb2xsZWN0aW9uc1tyZWxhdGlvblRvXS5ncmFwaFFMLnR5cGUgfHwgbmV3bHlDcmVhdGVkQmxvY2tUeXBlLFxuICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgKVxuXG4gICAgICBjb25zdCB1cGxvYWRBcmdzID0ge30gYXMgTG9jYWxlSW5wdXRUeXBlXG5cbiAgICAgIGlmIChwYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgdXBsb2FkQXJncy5sb2NhbGUgPSB7XG4gICAgICAgICAgdHlwZTogcGF5bG9hZC50eXBlcy5sb2NhbGVJbnB1dFR5cGUsXG4gICAgICAgIH1cblxuICAgICAgICB1cGxvYWRBcmdzLmZhbGxiYWNrTG9jYWxlID0ge1xuICAgICAgICAgIHR5cGU6IHBheWxvYWQudHlwZXMuZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25TbHVnID0gZmllbGQucmVsYXRpb25Ub1xuXG4gICAgICBjb25zdCB1cGxvYWQgPSB7XG4gICAgICAgIGFyZ3M6IHVwbG9hZEFyZ3MsXG4gICAgICAgIGV4dGVuc2lvbnM6IHsgY29tcGxleGl0eTogMjAgfSxcbiAgICAgICAgYXN5bmMgcmVzb2x2ZShwYXJlbnQsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmVudFtmaWVsZC5uYW1lXVxuICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IGFyZ3MubG9jYWxlIHx8IGNvbnRleHQucmVxLmxvY2FsZVxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrTG9jYWxlID0gYXJncy5mYWxsYmFja0xvY2FsZSB8fCBjb250ZXh0LnJlcS5mYWxsYmFja0xvY2FsZVxuICAgICAgICAgIGNvbnN0IGlkID0gdmFsdWVcblxuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZERvY3VtZW50ID0gYXdhaXQgY29udGV4dC5yZXEucGF5bG9hZERhdGFMb2FkZXIubG9hZChcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVxLnRyYW5zYWN0aW9uSUQsXG4gICAgICAgICAgICAgICAgcmVsYXRlZENvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICByZXR1cm4gcmVsYXRlZERvY3VtZW50IHx8IG51bGxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0eXBlLFxuICAgICAgfVxuXG4gICAgICBjb25zdCB3aGVyZUZpZWxkcyA9IHBheWxvYWQuY29sbGVjdGlvbnNbcmVsYXRpb25Ub10uY29uZmlnLmZpZWxkc1xuXG4gICAgICB1cGxvYWQuYXJncy53aGVyZSA9IHtcbiAgICAgICAgdHlwZTogYnVpbGRXaGVyZUlucHV0VHlwZSh7XG4gICAgICAgICAgbmFtZTogdXBsb2FkTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IHdoZXJlRmllbGRzLFxuICAgICAgICAgIHBhcmVudE5hbWU6IHVwbG9hZE5hbWUsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfSksXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICAgIFtmaWVsZC5uYW1lXTogdXBsb2FkLFxuICAgICAgfVxuICAgIH0sXG4gIH1cblxuICBjb25zdCBvYmplY3RTY2hlbWEgPSB7XG4gICAgbmFtZSxcbiAgICBmaWVsZHM6ICgpID0+XG4gICAgICBmaWVsZHMucmVkdWNlKChvYmplY3RUeXBlQ29uZmlnLCBmaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZFNjaGVtYSA9IGZpZWxkVG9TY2hlbWFNYXBbZmllbGQudHlwZV1cblxuICAgICAgICBpZiAodHlwZW9mIGZpZWxkU2NoZW1hICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdFR5cGVDb25maWdcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgICAuLi5maWVsZFNjaGVtYShvYmplY3RUeXBlQ29uZmlnLCBmaWVsZCksXG4gICAgICAgIH1cbiAgICAgIH0sIGJhc2VGaWVsZHMpLFxuICB9XG5cbiAgY29uc3QgbmV3bHlDcmVhdGVkQmxvY2tUeXBlID0gbmV3IEdyYXBoUUxPYmplY3RUeXBlKG9iamVjdFNjaGVtYSlcblxuICByZXR1cm4gbmV3bHlDcmVhdGVkQmxvY2tUeXBlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkT2JqZWN0VHlwZVxuIl0sIm5hbWVzIjpbImJ1aWxkT2JqZWN0VHlwZSIsIm5hbWUiLCJiYXNlRmllbGRzIiwiZmllbGRzIiwiZm9yY2VOdWxsYWJsZSIsInBhcmVudE5hbWUiLCJwYXlsb2FkIiwiZmllbGRUb1NjaGVtYU1hcCIsImFycmF5Iiwib2JqZWN0VHlwZUNvbmZpZyIsImZpZWxkIiwiaW50ZXJmYWNlTmFtZSIsImNvbWJpbmVQYXJlbnROYW1lIiwidG9Xb3JkcyIsInR5cGVzIiwiYXJyYXlUeXBlcyIsImlzRmllbGROdWxsYWJsZSIsImFycmF5VHlwZSIsIkdyYXBoUUxMaXN0IiwiR3JhcGhRTE5vbk51bGwiLCJ0eXBlIiwid2l0aE51bGxhYmxlVHlwZSIsImJsb2NrcyIsImJsb2NrVHlwZXMiLCJtYXAiLCJibG9jayIsInNsdWciLCJncmFwaFFMIiwic2luZ3VsYXJOYW1lIiwiZnVsbE5hbWUiLCJHcmFwaFFMVW5pb25UeXBlIiwicmVzb2x2ZVR5cGUiLCJkYXRhIiwiYmxvY2tUeXBlIiwiY2hlY2tib3giLCJHcmFwaFFMQm9vbGVhbiIsImNvZGUiLCJHcmFwaFFMU3RyaW5nIiwiY29sbGFwc2libGUiLCJyZWR1Y2UiLCJvYmplY3RUeXBlQ29uZmlnV2l0aENvbGxhcHNpYmxlRmllbGRzIiwic3ViRmllbGQiLCJhZGRTdWJGaWVsZCIsImRhdGUiLCJEYXRlVGltZVJlc29sdmVyIiwiZW1haWwiLCJFbWFpbEFkZHJlc3NSZXNvbHZlciIsImdyb3VwIiwiZ3JvdXBUeXBlcyIsImpzb24iLCJHcmFwaFFMSlNPTiIsIm51bWJlciIsIkdyYXBoUUxJbnQiLCJHcmFwaFFMRmxvYXQiLCJoYXNNYW55IiwicG9pbnQiLCJyYWRpbyIsIkdyYXBoUUxFbnVtVHlwZSIsInZhbHVlcyIsImZvcm1hdE9wdGlvbnMiLCJyZWxhdGlvbnNoaXAiLCJyZWxhdGlvblRvIiwiaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMiLCJBcnJheSIsImlzQXJyYXkiLCJoYXNNYW55VmFsdWVzIiwicmVsYXRpb25zaGlwTmFtZSIsInJlbGF0aW9uVG9UeXBlIiwicmVsYXRpb25zIiwicmVsYXRpb24iLCJmb3JtYXROYW1lIiwidmFsdWUiLCJjb2xsZWN0aW9ucyIsIkdyYXBoUUxPYmplY3RUeXBlIiwicmVxIiwiY29sbGVjdGlvbiIsIm5ld2x5Q3JlYXRlZEJsb2NrVHlwZSIsInJlbGF0aW9uc2hpcEFyZ3MiLCJjb25maWciLCJsb2NhbGl6YXRpb24iLCJsb2NhbGUiLCJsb2NhbGVJbnB1dFR5cGUiLCJmYWxsYmFja0xvY2FsZSIsImZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlIiwiYXJncyIsImV4dGVuc2lvbnMiLCJjb21wbGV4aXR5IiwicmVzb2x2ZSIsInBhcmVudCIsImNvbnRleHQiLCJyZWxhdGVkQ29sbGVjdGlvblNsdWciLCJyZXN1bHRzIiwicmVzdWx0UHJvbWlzZXMiLCJjcmVhdGVQb3B1bGF0aW9uUHJvbWlzZSIsInJlbGF0ZWREb2MiLCJpIiwiaWQiLCJjb2xsZWN0aW9uU2x1ZyIsInJlc3VsdCIsInBheWxvYWREYXRhTG9hZGVyIiwibG9hZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0cmFuc2FjdGlvbklEIiwiZm9yRWFjaCIsInB1c2giLCJQcm9taXNlIiwiYWxsIiwicmVsYXRlZERvY3VtZW50IiwicmljaFRleHQiLCJkZXB0aCIsImRlZmF1bHREZXB0aCIsImVkaXRvciIsImFmdGVyUmVhZFByb21pc2UiLCJzaG93SGlkZGVuRmllbGRzIiwic2libGluZ0RvYyIsInJvdyIsIm9iamVjdFR5cGVDb25maWdXaXRoUm93RmllbGRzIiwic2VsZWN0IiwidGFicyIsInRhYlNjaGVtYSIsInRhYiIsInRhYkhhc05hbWUiLCJ0YWJUeXBlcyIsInN1YkZpZWxkU2NoZW1hIiwidGV4dCIsInRleHRhcmVhIiwidXBsb2FkIiwidXBsb2FkTmFtZSIsInVwbG9hZEFyZ3MiLCJ3aGVyZUZpZWxkcyIsIndoZXJlIiwiYnVpbGRXaGVyZUlucHV0VHlwZSIsIm9iamVjdFNjaGVtYSIsImZpZWxkU2NoZW1hIl0sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQsR0FDMUQsbUNBQW1DLEdBQ25DLHVDQUF1Qzs7OzsrQkFnbUJ2Qzs7O2VBQUE7Ozt5QkFubEJPO2dDQUNnRDtpQ0FFM0I7dUJBNEJEOzhCQUNIOzBFQUNNO21FQUNQO3NFQUNHOzRFQUNNO3dFQUNKO3lFQUNDOzs7Ozs7QUEyQjdCLFNBQVNBLGdCQUFnQixFQUN2QkMsSUFBSSxFQUNKQyxhQUFhLENBQUMsQ0FBQyxFQUNmQyxNQUFNLEVBQ05DLGFBQWEsRUFDYkMsVUFBVSxFQUNWQyxPQUFPLEVBQ0Y7SUFDTCxNQUFNQyxtQkFBbUI7UUFDdkJDLE9BQU8sQ0FBQ0Msa0JBQW9DQztZQUMxQyxNQUFNQyxnQkFDSkQsT0FBT0MsaUJBQWlCQyxJQUFBQSwwQkFBaUIsRUFBQ1AsWUFBWVEsSUFBQUEscUJBQU8sRUFBQ0gsTUFBTVQsSUFBSSxFQUFFO1lBRTVFLElBQUksQ0FBQ0ssUUFBUVEsS0FBSyxDQUFDQyxVQUFVLENBQUNKLGNBQWMsRUFBRTtnQkFDNUMsNkNBQTZDO2dCQUM3Q0wsUUFBUVEsS0FBSyxDQUFDQyxVQUFVLENBQUNKLGNBQWMsR0FBR1gsZ0JBQWdCO29CQUN4REMsTUFBTVU7b0JBQ05SLFFBQVFPLE1BQU1QLE1BQU07b0JBQ3BCQyxlQUFlWSxJQUFBQSx3QkFBZSxFQUFDTixPQUFPTjtvQkFDdENDLFlBQVlNO29CQUNa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
477
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ncmFwaHFsL3NjaGVtYS9idWlsZE9iamVjdFR5cGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuaW1wb3J0IHR5cGUgeyBHcmFwaFFMRmllbGRDb25maWcsIEdyYXBoUUxUeXBlIH0gZnJvbSAnZ3JhcGhxbCdcblxuaW1wb3J0IHtcbiAgR3JhcGhRTEJvb2xlYW4sXG4gIEdyYXBoUUxFbnVtVHlwZSxcbiAgR3JhcGhRTEZsb2F0LFxuICBHcmFwaFFMSW50LFxuICBHcmFwaFFMTGlzdCxcbiAgR3JhcGhRTE5vbk51bGwsXG4gIEdyYXBoUUxPYmplY3RUeXBlLFxuICBHcmFwaFFMU3RyaW5nLFxuICBHcmFwaFFMVW5pb25UeXBlLFxufSBmcm9tICdncmFwaHFsJ1xuaW1wb3J0IHsgRGF0ZVRpbWVSZXNvbHZlciwgRW1haWxBZGRyZXNzUmVzb2x2ZXIgfSBmcm9tICdncmFwaHFsLXNjYWxhcnMnXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuaW1wb3J0IHsgR3JhcGhRTEpTT04gfSBmcm9tICdncmFwaHFsLXR5cGUtanNvbidcblxuaW1wb3J0IHR5cGUgeyBSaWNoVGV4dEFkYXB0ZXIgfSBmcm9tICcuLi8uLi9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL2ZpZWxkLXR5cGVzL1JpY2hUZXh0L3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuICBBcnJheUZpZWxkLFxuICBCbG9ja0ZpZWxkLFxuICBDaGVja2JveEZpZWxkLFxuICBDb2RlRmllbGQsXG4gIENvbGxhcHNpYmxlRmllbGQsXG4gIERhdGVGaWVsZCxcbiAgRW1haWxGaWVsZCxcbiAgRmllbGQsXG4gIEdyb3VwRmllbGQsXG4gIEpTT05GaWVsZCxcbiAgTnVtYmVyRmllbGQsXG4gIFBvaW50RmllbGQsXG4gIFJhZGlvRmllbGQsXG4gIFJlbGF0aW9uc2hpcEZpZWxkLFxuICBSaWNoVGV4dEZpZWxkLFxuICBSb3dGaWVsZCxcbiAgU2VsZWN0RmllbGQsXG4gIFRhYnNGaWVsZCxcbiAgVGV4dEZpZWxkLFxuICBUZXh0YXJlYUZpZWxkLFxuICBVcGxvYWRGaWVsZCxcbn0gZnJvbSAnLi4vLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgUGF5bG9hZCB9IGZyb20gJy4uLy4uL3BheWxvYWQnXG5cbmltcG9ydCB7IHRhYkhhc05hbWUgfSBmcm9tICcuLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHsgdG9Xb3JkcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9mb3JtYXRMYWJlbHMnXG5pbXBvcnQgY29tYmluZVBhcmVudE5hbWUgZnJvbSAnLi4vdXRpbGl0aWVzL2NvbWJpbmVQYXJlbnROYW1lJ1xuaW1wb3J0IGZvcm1hdE5hbWUgZnJvbSAnLi4vdXRpbGl0aWVzL2Zvcm1hdE5hbWUnXG5pbXBvcnQgZm9ybWF0T3B0aW9ucyBmcm9tICcuLi91dGlsaXRpZXMvZm9ybWF0T3B0aW9ucydcbmltcG9ydCBidWlsZFdoZXJlSW5wdXRUeXBlIGZyb20gJy4vYnVpbGRXaGVyZUlucHV0VHlwZSdcbmltcG9ydCBpc0ZpZWxkTnVsbGFibGUgZnJvbSAnLi9pc0ZpZWxkTnVsbGFibGUnXG5pbXBvcnQgd2l0aE51bGxhYmxlVHlwZSBmcm9tICcuL3dpdGhOdWxsYWJsZVR5cGUnXG5cbnR5cGUgTG9jYWxlSW5wdXRUeXBlID0ge1xuICBmYWxsYmFja0xvY2FsZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbiAgbG9jYWxlOiB7XG4gICAgdHlwZTogR3JhcGhRTFR5cGVcbiAgfVxuICB3aGVyZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0VHlwZUNvbmZpZyA9IHtcbiAgW3BhdGg6IHN0cmluZ106IEdyYXBoUUxGaWVsZENvbmZpZzxhbnksIGFueT5cbn1cblxudHlwZSBBcmdzID0ge1xuICBiYXNlRmllbGRzPzogT2JqZWN0VHlwZUNvbmZpZ1xuICBmaWVsZHM6IEZpZWxkW11cbiAgZm9yY2VOdWxsYWJsZT86IGJvb2xlYW5cbiAgbmFtZTogc3RyaW5nXG4gIHBhcmVudE5hbWU6IHN0cmluZ1xuICBwYXlsb2FkOiBQYXlsb2FkXG59XG5cbmZ1bmN0aW9uIGJ1aWxkT2JqZWN0VHlwZSh7XG4gIG5hbWUsXG4gIGJhc2VGaWVsZHMgPSB7fSxcbiAgZmllbGRzLFxuICBmb3JjZU51bGxhYmxlLFxuICBwYXJlbnROYW1lLFxuICBwYXlsb2FkLFxufTogQXJncyk6IEdyYXBoUUxPYmplY3RUeXBlIHtcbiAgY29uc3QgZmllbGRUb1NjaGVtYU1hcCA9IHtcbiAgICBhcnJheTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBBcnJheUZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgZmllbGQ/LmludGVyZmFjZU5hbWUgfHwgY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgaWYgKCFwYXlsb2FkLnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHBheWxvYWQudHlwZXMuYXJyYXlUeXBlc1tpbnRlcmZhY2VOYW1lXSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlOiBpc0ZpZWxkTnVsbGFibGUoZmllbGQsIGZvcmNlTnVsbGFibGUpLFxuICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJyYXlUeXBlID0gbmV3IEdyYXBoUUxMaXN0KG5ldyBHcmFwaFFMTm9uTnVsbChwYXlsb2FkLnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgYXJyYXlUeXBlKSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgYmxvY2tzOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IEJsb2NrRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrVHlwZXMgPSBmaWVsZC5ibG9ja3MubWFwKChibG9jaykgPT4ge1xuICAgICAgICBpZiAoIXBheWxvYWQudHlwZXMuYmxvY2tUeXBlc1tibG9jay5zbHVnXSkge1xuICAgICAgICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPVxuICAgICAgICAgICAgYmxvY2s/LmludGVyZmFjZU5hbWUgfHwgYmxvY2s/LmdyYXBoUUw/LnNpbmd1bGFyTmFtZSB8fCB0b1dvcmRzKGJsb2NrLnNsdWcsIHRydWUpXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgcGF5bG9hZC50eXBlcy5ibG9ja1R5cGVzW2Jsb2NrLnNsdWddID0gYnVpbGRPYmplY3RUeXBlKHtcbiAgICAgICAgICAgIG5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgLi4uYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jsb2NrVHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICAgICBwYXJlbnROYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBheWxvYWQudHlwZXMuYmxvY2tUeXBlc1tibG9jay5zbHVnXVxuICAgICAgfSlcblxuICAgICAgY29uc3QgZnVsbE5hbWUgPSBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCB0b1dvcmRzKGZpZWxkLm5hbWUsIHRydWUpKVxuXG4gICAgICBjb25zdCB0eXBlID0gbmV3IEdyYXBoUUxMaXN0KFxuICAgICAgICBuZXcgR3JhcGhRTE5vbk51bGwoXG4gICAgICAgICAgbmV3IEdyYXBoUUxVbmlvblR5cGUoe1xuICAgICAgICAgICAgbmFtZTogZnVsbE5hbWUsXG4gICAgICAgICAgICByZXNvbHZlVHlwZTogKGRhdGEpID0+IHBheWxvYWQudHlwZXMuYmxvY2tUeXBlc1tkYXRhLmJsb2NrVHlwZV0ubmFtZSxcbiAgICAgICAgICAgIHR5cGVzOiBibG9ja1R5cGVzLFxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgdHlwZSkgfSxcbiAgICAgIH1cbiAgICB9LFxuICAgIGNoZWNrYm94OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IENoZWNrYm94RmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxCb29sZWFuLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIGNvZGU6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogQ29kZUZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMU3RyaW5nLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIGNvbGxhcHNpYmxlOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IENvbGxhcHNpYmxlRmllbGQpID0+XG4gICAgICBmaWVsZC5maWVsZHMucmVkdWNlKChvYmplY3RUeXBlQ29uZmlnV2l0aENvbGxhcHNpYmxlRmllbGRzLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCBhZGRTdWJGaWVsZCA9IGZpZWxkVG9TY2hlbWFNYXBbc3ViRmllbGQudHlwZV1cbiAgICAgICAgaWYgKGFkZFN1YkZpZWxkKSByZXR1cm4gYWRkU3ViRmllbGQob2JqZWN0VHlwZUNvbmZpZ1dpdGhDb2xsYXBzaWJsZUZpZWxkcywgc3ViRmllbGQpXG4gICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnV2l0aENvbGxhcHNpYmxlRmllbGRzXG4gICAgICB9LCBvYmplY3RUeXBlQ29uZmlnKSxcbiAgICBkYXRlOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IERhdGVGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgRGF0ZVRpbWVSZXNvbHZlciwgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBlbWFpbDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBFbWFpbEZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBFbWFpbEFkZHJlc3NSZXNvbHZlciwgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBncm91cDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBHcm91cEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgZmllbGQ/LmludGVyZmFjZU5hbWUgfHwgY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgaWYgKCFwYXlsb2FkLnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHBheWxvYWQudHlwZXMuZ3JvdXBUeXBlc1tpbnRlcmZhY2VOYW1lXSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlOiBpc0ZpZWxkTnVsbGFibGUoZmllbGQsIGZvcmNlTnVsbGFibGUpLFxuICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHBheWxvYWQudHlwZXMuZ3JvdXBUeXBlc1tpbnRlcmZhY2VOYW1lXSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAganNvbjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBKU09ORmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxKU09OLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIG51bWJlcjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBOdW1iZXJGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGZpZWxkPy5uYW1lID09PSAnaWQnID8gR3JhcGhRTEludCA6IEdyYXBoUUxGbG9hdFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgZmllbGQ/Lmhhc01hbnkgPT09IHRydWUgPyBuZXcgR3JhcGhRTExpc3QodHlwZSkgOiB0eXBlLFxuICAgICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgcG9pbnQ6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogUG9pbnRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKEdyYXBoUUxGbG9hdCkpLFxuICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHJhZGlvOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJhZGlvRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCBmaWVsZC5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlczogZm9ybWF0T3B0aW9ucyhmaWVsZCksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVsYXRpb25zaGlwOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJlbGF0aW9uc2hpcEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbGF0aW9uVG8gfSA9IGZpZWxkXG4gICAgICBjb25zdCBpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbylcbiAgICAgIGNvbnN0IGhhc01hbnlWYWx1ZXMgPSBmaWVsZC5oYXNNYW55XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgbGV0IHR5cGVcbiAgICAgIGxldCByZWxhdGlvblRvVHlwZSA9IG51bGxcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykpIHtcbiAgICAgICAgcmVsYXRpb25Ub1R5cGUgPSBuZXcgR3JhcGhRTEVudW1UeXBlKHtcbiAgICAgICAgICBuYW1lOiBgJHtyZWxhdGlvbnNoaXBOYW1lfV9SZWxhdGlvblRvYCxcbiAgICAgICAgICB2YWx1ZXM6IHJlbGF0aW9uVG8ucmVkdWNlKFxuICAgICAgICAgICAgKHJlbGF0aW9ucywgcmVsYXRpb24pID0+ICh7XG4gICAgICAgICAgICAgIC4uLnJlbGF0aW9ucyxcbiAgICAgICAgICAgICAgW2Zvcm1hdE5hbWUocmVsYXRpb24pXToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiByZWxhdGlvbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCB0eXBlcyA9IHJlbGF0aW9uVG8ubWFwKChyZWxhdGlvbikgPT4gcGF5bG9hZC5jb2xsZWN0aW9uc1tyZWxhdGlvbl0uZ3JhcGhRTC50eXBlKVxuXG4gICAgICAgIHR5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICAgIG5hbWU6IGAke3JlbGF0aW9uc2hpcE5hbWV9X1JlbGF0aW9uc2hpcGAsXG4gICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICByZWxhdGlvblRvOiB7XG4gICAgICAgICAgICAgIHR5cGU6IHJlbGF0aW9uVG9UeXBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMVW5pb25UeXBlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgICAgICAgIGFzeW5jIHJlc29sdmVUeXBlKGRhdGEsIHsgcmVxIH0pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLmNvbGxlY3Rpb25zW2RhdGEuY29sbGVjdGlvbl0uZ3JhcGhRTC50eXBlLm5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIDsoeyB0eXBlIH0gPSBwYXlsb2FkLmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmdyYXBoUUwpXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSByZWxhdGlvbnNoaXBUeXBlIGlzIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50LFxuICAgICAgLy8gaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCB0aGlzIGJsb2NrVHlwZSBjYW4gaGF2ZSBhIHJlbGF0aW9uc2hpcFxuICAgICAgLy8gdG8gaXRzZWxmLiBUaGVyZWZvcmUsIHdlIHNldCB0aGUgcmVsYXRpb25zaGlwVHlwZSBlcXVhbCB0byB0aGUgYmxvY2tUeXBlXG4gICAgICAvLyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBjcmVhdGVkLlxuXG4gICAgICB0eXBlID0gdHlwZSB8fCBuZXdseUNyZWF0ZWRCbG9ja1R5cGVcblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwQXJnczoge1xuICAgICAgICBmYWxsYmFja0xvY2FsZT86IHVua25vd25cbiAgICAgICAgbGltaXQ/OiB1bmtub3duXG4gICAgICAgIGxvY2FsZT86IHVua25vd25cbiAgICAgICAgcGFnZT86IHVua25vd25cbiAgICAgICAgd2hlcmU/OiB1bmtub3duXG4gICAgICB9ID0ge31cblxuICAgICAgaWYgKHBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICByZWxhdGlvbnNoaXBBcmdzLmxvY2FsZSA9IHtcbiAgICAgICAgICB0eXBlOiBwYXlsb2FkLnR5cGVzLmxvY2FsZUlucHV0VHlwZSxcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbGF0aW9uc2hpcEFyZ3MuZmFsbGJhY2tMb2NhbGUgPSB7XG4gICAgICAgICAgdHlwZTogcGF5bG9hZC50eXBlcy5mYWxsYmFja0xvY2FsZUlucHV0VHlwZSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSB7XG4gICAgICAgIGFyZ3M6IHJlbGF0aW9uc2hpcEFyZ3MsXG4gICAgICAgIGV4dGVuc2lvbnM6IHsgY29tcGxleGl0eTogMTAgfSxcbiAgICAgICAgYXN5bmMgcmVzb2x2ZShwYXJlbnQsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmVudFtmaWVsZC5uYW1lXVxuICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IGFyZ3MubG9jYWxlIHx8IGNvbnRleHQucmVxLmxvY2FsZVxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrTG9jYWxlID0gYXJncy5mYWxsYmFja0xvY2FsZSB8fCBjb250ZXh0LnJlcS5mYWxsYmFja0xvY2FsZVxuICAgICAgICAgIGxldCByZWxhdGVkQ29sbGVjdGlvblNsdWcgPSBmaWVsZC5yZWxhdGlvblRvXG5cbiAgICAgICAgICBpZiAoaGFzTWFueVZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdXG4gICAgICAgICAgICBjb25zdCByZXN1bHRQcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVBvcHVsYXRpb25Qcm9taXNlID0gYXN5bmMgKHJlbGF0ZWREb2MsIGkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGlkID0gcmVsYXRlZERvY1xuICAgICAgICAgICAgICBsZXQgY29sbGVjdGlvblNsdWcgPSBmaWVsZC5yZWxhdGlvblRvXG5cbiAgICAgICAgICAgICAgaWYgKGlzUmVsYXRlZFRvTWFueUNvbGxlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcgPSByZWxhdGVkRG9jLnJlbGF0aW9uVG9cbiAgICAgICAgICAgICAgICBpZCA9IHJlbGF0ZWREb2MudmFsdWVcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnRleHQucmVxLnBheWxvYWREYXRhTG9hZGVyLmxvYWQoXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXEudHJhbnNhY3Rpb25JRCxcbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0c1tpXSA9IHJlc3VsdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgocmVsYXRlZERvYywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdFByb21pc2VzLnB1c2goY3JlYXRlUG9wdWxhdGlvblByb21pc2UocmVsYXRlZERvYywgaSkpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJlc3VsdFByb21pc2VzKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZVxuICAgICAgICAgIGlmIChpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgaWQgPSB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgcmVsYXRlZENvbGxlY3Rpb25TbHVnID0gdmFsdWUucmVsYXRpb25Ub1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZERvY3VtZW50ID0gYXdhaXQgY29udGV4dC5yZXEucGF5bG9hZERhdGFMb2FkZXIubG9hZChcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVxLnRyYW5zYWN0aW9uSUQsXG4gICAgICAgICAgICAgICAgcmVsYXRlZENvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAocmVsYXRlZERvY3VtZW50KSB7XG4gICAgICAgICAgICAgIGlmIChpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiByZWxhdGVkQ29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAuLi5yZWxhdGVkRG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlbGF0ZWREb2N1bWVudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgaGFzTWFueVZhbHVlcyA/IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwodHlwZSkpIDogdHlwZSxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgICApLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHJlbGF0aW9uc2hpcCxcbiAgICAgIH1cbiAgICB9LFxuICAgIHJpY2hUZXh0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJpY2hUZXh0RmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICBkZXB0aDoge1xuICAgICAgICAgICAgdHlwZTogR3JhcGhRTEludCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhc3luYyByZXNvbHZlKHBhcmVudCwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIGxldCBkZXB0aCA9IHBheWxvYWQuY29uZmlnLmRlZmF1bHREZXB0aFxuICAgICAgICAgIGlmICh0eXBlb2YgYXJncy5kZXB0aCAhPT0gJ3VuZGVmaW5lZCcpIGRlcHRoID0gYXJncy5kZXB0aFxuICAgICAgICAgIGNvbnN0IGVkaXRvcjogUmljaFRleHRBZGFwdGVyID0gZmllbGQ/LmVkaXRvclxuXG4gICAgICAgICAgLy8gUmljaFRleHQgZmllbGRzIGhhdmUgdGhlaXIgb3duIGRlcHRoIGFyZ3VtZW50IGluIEdyYXBoUUwuXG4gICAgICAgICAgLy8gVGhpcyBpcyB3aHkgdGhlIHBvcHVsYXRpb25Qcm9taXNlICh3aGljaCBwb3B1bGF0ZXMgcmljaHRleHQgZmllbGRzIGxpa2UgdXBsb2FkcyBhbmQgcmVsYXRpb25zaGlwcylcbiAgICAgICAgICAvLyBpcyBydW4gaGVyZSBhZ2Fpbiwgd2l0aCB0aGUgcHJvdmlkZWQgZGVwdGguXG4gICAgICAgICAgLy8gSW4gdGhlIGdyYXBocWwgZmluZC50cyByZXNvbHZlciwgdGhlIGRlcHRoIGlzIHRoZW4gaGFyZC1jb2RlZCB0byAwLlxuICAgICAgICAgIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIG1lYW5zIHRoYXQgdGhlIHBvcHVsYXRpb25Qcm9taXNlIGZvciBHcmFwaFFMIGlzIG9ubHkgcnVuIGhlcmUsIGFuZCBub3QgaW4gdGhlIGZpbmQudHMgcmVzb2x2ZXIgLyBub3JtYWwgcG9wdWxhdGlvbiBwcm9taXNlLlxuICAgICAgICAgIGlmIChlZGl0b3I/LnBvcHVsYXRpb25Qcm9taXNlKSB7XG4gICAgICAgICAgICBhd2FpdCBlZGl0b3I/LnBvcHVsYXRpb25Qcm9taXNlKHtcbiAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICByZXE6IGNvbnRleHQucmVxLFxuICAgICAgICAgICAgICBzaG93SGlkZGVuRmllbGRzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2libGluZ0RvYzogcGFyZW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFyZW50W2ZpZWxkLm5hbWVdXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxKU09OLCBmb3JjZU51bGxhYmxlKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcm93OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJvd0ZpZWxkKSA9PlxuICAgICAgZmllbGQuZmllbGRzLnJlZHVjZSgob2JqZWN0VHlwZUNvbmZpZ1dpdGhSb3dGaWVsZHMsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZFN1YkZpZWxkID0gZmllbGRUb1NjaGVtYU1hcFtzdWJGaWVsZC50eXBlXVxuICAgICAgICBpZiAoYWRkU3ViRmllbGQpIHJldHVybiBhZGRTdWJGaWVsZChvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkcywgc3ViRmllbGQpXG4gICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkc1xuICAgICAgfSwgb2JqZWN0VHlwZUNvbmZpZyksXG4gICAgc2VsZWN0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFNlbGVjdEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBmdWxsTmFtZSA9IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIGZpZWxkLm5hbWUpXG5cbiAgICAgIGxldCB0eXBlOiBHcmFwaFFMVHlwZSA9IG5ldyBHcmFwaFFMRW51bVR5cGUoe1xuICAgICAgICBuYW1lOiBmdWxsTmFtZSxcbiAgICAgICAgdmFsdWVzOiBmb3JtYXRPcHRpb25zKGZpZWxkKSxcbiAgICAgIH0pXG5cbiAgICAgIHR5cGUgPSBmaWVsZC5oYXNNYW55ID8gbmV3IEdyYXBoUUxMaXN0KG5ldyBHcmFwaFFMTm9uTnVsbCh0eXBlKSkgOiB0eXBlXG4gICAgICB0eXBlID0gd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgdHlwZSwgZm9yY2VOdWxsYWJsZSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGUgfSxcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYnM6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogVGFic0ZpZWxkKSA9PlxuICAgICAgZmllbGQudGFicy5yZWR1Y2UoKHRhYlNjaGVtYSwgdGFiKSA9PiB7XG4gICAgICAgIGlmICh0YWJIYXNOYW1lKHRhYikpIHtcbiAgICAgICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgICAgIHRhYj8uaW50ZXJmYWNlTmFtZSB8fCBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCB0b1dvcmRzKHRhYi5uYW1lLCB0cnVlKSlcblxuICAgICAgICAgIGlmICghcGF5bG9hZC50eXBlcy50YWJUeXBlc1tpbnRlcmZhY2VOYW1lXSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBwYXlsb2FkLnR5cGVzLnRhYlR5cGVzW2ludGVyZmFjZU5hbWVdID0gYnVpbGRPYmplY3RUeXBlKHtcbiAgICAgICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICAgICAgZmllbGRzOiB0YWIuZmllbGRzLFxuICAgICAgICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgICAgICAgICBwYXJlbnROYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udGFiU2NoZW1hLFxuICAgICAgICAgICAgW3RhYi5uYW1lXTogeyB0eXBlOiBwYXlsb2FkLnR5cGVzLnRhYlR5cGVzW2ludGVyZmFjZU5hbWVdIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50YWJTY2hlbWEsXG4gICAgICAgICAgLi4udGFiLmZpZWxkcy5yZWR1Y2UoKHN1YkZpZWxkU2NoZW1hLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRkU3ViRmllbGQgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG4gICAgICAgICAgICBpZiAoYWRkU3ViRmllbGQpIHJldHVybiBhZGRTdWJGaWVsZChzdWJGaWVsZFNjaGVtYSwgc3ViRmllbGQpXG4gICAgICAgICAgICByZXR1cm4gc3ViRmllbGRTY2hlbWFcbiAgICAgICAgICB9LCB0YWJTY2hlbWEpLFxuICAgICAgICB9XG4gICAgICB9LCBvYmplY3RUeXBlQ29uZmlnKSxcbiAgICB0ZXh0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFRleHRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgR3JhcGhRTFN0cmluZywgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICB0ZXh0YXJlYTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBUZXh0YXJlYUZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMU3RyaW5nLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIHVwbG9hZDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBVcGxvYWRGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgeyByZWxhdGlvblRvIH0gPSBmaWVsZFxuXG4gICAgICBjb25zdCB1cGxvYWROYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgLy8gSWYgdGhlIHJlbGF0aW9uc2hpcFR5cGUgaXMgdW5kZWZpbmVkIGF0IHRoaXMgcG9pbnQsXG4gICAgICAvLyBpdCBjYW4gYmUgYXNzdW1lZCB0aGF0IHRoaXMgYmxvY2tUeXBlIGNhbiBoYXZlIGEgcmVsYXRpb25zaGlwXG4gICAgICAvLyB0byBpdHNlbGYuIFRoZXJlZm9yZSwgd2Ugc2V0IHRoZSByZWxhdGlvbnNoaXBUeXBlIGVxdWFsIHRvIHRoZSBibG9ja1R5cGVcbiAgICAgIC8vIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGNyZWF0ZWQuXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB3aXRoTnVsbGFibGVUeXBlKFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgcGF5bG9hZC5jb2xsZWN0aW9uc1tyZWxhdGlvblRvXS5ncmFwaFFMLnR5cGUgfHwgbmV3bHlDcmVhdGVkQmxvY2tUeXBlLFxuICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgKVxuXG4gICAgICBjb25zdCB1cGxvYWRBcmdzID0ge30gYXMgTG9jYWxlSW5wdXRUeXBlXG5cbiAgICAgIGlmIChwYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgdXBsb2FkQXJncy5sb2NhbGUgPSB7XG4gICAgICAgICAgdHlwZTogcGF5bG9hZC50eXBlcy5sb2NhbGVJbnB1dFR5cGUsXG4gICAgICAgIH1cblxuICAgICAgICB1cGxvYWRBcmdzLmZhbGxiYWNrTG9jYWxlID0ge1xuICAgICAgICAgIHR5cGU6IHBheWxvYWQudHlwZXMuZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25TbHVnID0gZmllbGQucmVsYXRpb25Ub1xuXG4gICAgICBjb25zdCB1cGxvYWQgPSB7XG4gICAgICAgIGFyZ3M6IHVwbG9hZEFyZ3MsXG4gICAgICAgIGV4dGVuc2lvbnM6IHsgY29tcGxleGl0eTogMjAgfSxcbiAgICAgICAgYXN5bmMgcmVzb2x2ZShwYXJlbnQsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmVudFtmaWVsZC5uYW1lXVxuICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IGFyZ3MubG9jYWxlIHx8IGNvbnRleHQucmVxLmxvY2FsZVxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrTG9jYWxlID0gYXJncy5mYWxsYmFja0xvY2FsZSB8fCBjb250ZXh0LnJlcS5mYWxsYmFja0xvY2FsZVxuICAgICAgICAgIGNvbnN0IGlkID0gdmFsdWVcblxuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZERvY3VtZW50ID0gYXdhaXQgY29udGV4dC5yZXEucGF5bG9hZERhdGFMb2FkZXIubG9hZChcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVxLnRyYW5zYWN0aW9uSUQsXG4gICAgICAgICAgICAgICAgcmVsYXRlZENvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICByZXR1cm4gcmVsYXRlZERvY3VtZW50IHx8IG51bGxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0eXBlLFxuICAgICAgfVxuXG4gICAgICBjb25zdCB3aGVyZUZpZWxkcyA9IHBheWxvYWQuY29sbGVjdGlvbnNbcmVsYXRpb25Ub10uY29uZmlnLmZpZWxkc1xuXG4gICAgICB1cGxvYWQuYXJncy53aGVyZSA9IHtcbiAgICAgICAgdHlwZTogYnVpbGRXaGVyZUlucHV0VHlwZSh7XG4gICAgICAgICAgbmFtZTogdXBsb2FkTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IHdoZXJlRmllbGRzLFxuICAgICAgICAgIHBhcmVudE5hbWU6IHVwbG9hZE5hbWUsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfSksXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICAgIFtmaWVsZC5uYW1lXTogdXBsb2FkLFxuICAgICAgfVxuICAgIH0sXG4gIH1cblxuICBjb25zdCBvYmplY3RTY2hlbWEgPSB7XG4gICAgbmFtZSxcbiAgICBmaWVsZHM6ICgpID0+XG4gICAgICBmaWVsZHMucmVkdWNlKChvYmplY3RUeXBlQ29uZmlnLCBmaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZFNjaGVtYSA9IGZpZWxkVG9TY2hlbWFNYXBbZmllbGQudHlwZV1cblxuICAgICAgICBpZiAodHlwZW9mIGZpZWxkU2NoZW1hICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdFR5cGVDb25maWdcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgICAuLi5maWVsZFNjaGVtYShvYmplY3RUeXBlQ29uZmlnLCBmaWVsZCksXG4gICAgICAgIH1cbiAgICAgIH0sIGJhc2VGaWVsZHMpLFxuICB9XG5cbiAgY29uc3QgbmV3bHlDcmVhdGVkQmxvY2tUeXBlID0gbmV3IEdyYXBoUUxPYmplY3RUeXBlKG9iamVjdFNjaGVtYSlcblxuICByZXR1cm4gbmV3bHlDcmVhdGVkQmxvY2tUeXBlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkT2JqZWN0VHlwZVxuIl0sIm5hbWVzIjpbImJ1aWxkT2JqZWN0VHlwZSIsIm5hbWUiLCJiYXNlRmllbGRzIiwiZmllbGRzIiwiZm9yY2VOdWxsYWJsZSIsInBhcmVudE5hbWUiLCJwYXlsb2FkIiwiZmllbGRUb1NjaGVtYU1hcCIsImFycmF5Iiwib2JqZWN0VHlwZUNvbmZpZyIsImZpZWxkIiwiaW50ZXJmYWNlTmFtZSIsImNvbWJpbmVQYXJlbnROYW1lIiwidG9Xb3JkcyIsInR5cGVzIiwiYXJyYXlUeXBlcyIsImlzRmllbGROdWxsYWJsZSIsImFycmF5VHlwZSIsIkdyYXBoUUxMaXN0IiwiR3JhcGhRTE5vbk51bGwiLCJ0eXBlIiwid2l0aE51bGxhYmxlVHlwZSIsImJsb2NrcyIsImJsb2NrVHlwZXMiLCJtYXAiLCJibG9jayIsInNsdWciLCJncmFwaFFMIiwic2luZ3VsYXJOYW1lIiwiZnVsbE5hbWUiLCJHcmFwaFFMVW5pb25UeXBlIiwicmVzb2x2ZVR5cGUiLCJkYXRhIiwiYmxvY2tUeXBlIiwiY2hlY2tib3giLCJHcmFwaFFMQm9vbGVhbiIsImNvZGUiLCJHcmFwaFFMU3RyaW5nIiwiY29sbGFwc2libGUiLCJyZWR1Y2UiLCJvYmplY3RUeXBlQ29uZmlnV2l0aENvbGxhcHNpYmxlRmllbGRzIiwic3ViRmllbGQiLCJhZGRTdWJGaWVsZCIsImRhdGUiLCJEYXRlVGltZVJlc29sdmVyIiwiZW1haWwiLCJFbWFpbEFkZHJlc3NSZXNvbHZlciIsImdyb3VwIiwiZ3JvdXBUeXBlcyIsImpzb24iLCJHcmFwaFFMSlNPTiIsIm51bWJlciIsIkdyYXBoUUxJbnQiLCJHcmFwaFFMRmxvYXQiLCJoYXNNYW55IiwicG9pbnQiLCJyYWRpbyIsIkdyYXBoUUxFbnVtVHlwZSIsInZhbHVlcyIsImZvcm1hdE9wdGlvbnMiLCJyZWxhdGlvbnNoaXAiLCJyZWxhdGlvblRvIiwiaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMiLCJBcnJheSIsImlzQXJyYXkiLCJoYXNNYW55VmFsdWVzIiwicmVsYXRpb25zaGlwTmFtZSIsInJlbGF0aW9uVG9UeXBlIiwicmVsYXRpb25zIiwicmVsYXRpb24iLCJmb3JtYXROYW1lIiwidmFsdWUiLCJjb2xsZWN0aW9ucyIsIkdyYXBoUUxPYmplY3RUeXBlIiwicmVxIiwiY29sbGVjdGlvbiIsIm5ld2x5Q3JlYXRlZEJsb2NrVHlwZSIsInJlbGF0aW9uc2hpcEFyZ3MiLCJjb25maWciLCJsb2NhbGl6YXRpb24iLCJsb2NhbGUiLCJsb2NhbGVJbnB1dFR5cGUiLCJmYWxsYmFja0xvY2FsZSIsImZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlIiwiYXJncyIsImV4dGVuc2lvbnMiLCJjb21wbGV4aXR5IiwicmVzb2x2ZSIsInBhcmVudCIsImNvbnRleHQiLCJyZWxhdGVkQ29sbGVjdGlvblNsdWciLCJyZXN1bHRzIiwicmVzdWx0UHJvbWlzZXMiLCJjcmVhdGVQb3B1bGF0aW9uUHJvbWlzZSIsInJlbGF0ZWREb2MiLCJpIiwiaWQiLCJjb2xsZWN0aW9uU2x1ZyIsInJlc3VsdCIsInBheWxvYWREYXRhTG9hZGVyIiwibG9hZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0cmFuc2FjdGlvbklEIiwiZm9yRWFjaCIsInB1c2giLCJQcm9taXNlIiwiYWxsIiwicmVsYXRlZERvY3VtZW50IiwicmljaFRleHQiLCJkZXB0aCIsImRlZmF1bHREZXB0aCIsImVkaXRvciIsInBvcHVsYXRpb25Qcm9taXNlIiwic2hvd0hpZGRlbkZpZWxkcyIsInNpYmxpbmdEb2MiLCJyb3ciLCJvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkcyIsInNlbGVjdCIsInRhYnMiLCJ0YWJTY2hlbWEiLCJ0YWIiLCJ0YWJIYXNOYW1lIiwidGFiVHlwZXMiLCJzdWJGaWVsZFNjaGVtYSIsInRleHQiLCJ0ZXh0YXJlYSIsInVwbG9hZCIsInVwbG9hZE5hbWUiLCJ1cGxvYWRBcmdzIiwid2hlcmVGaWVsZHMiLCJ3aGVyZSIsImJ1aWxkV2hlcmVJbnB1dFR5cGUiLCJvYmplY3RTY2hlbWEiLCJmaWVsZFNjaGVtYSJdLCJtYXBwaW5ncyI6IkFBQUEsMERBQTBELEdBQzFELG1DQUFtQyxHQUNuQyx1Q0FBdUM7Ozs7K0JBcW1CdkM7OztlQUFBOzs7eUJBeGxCTztnQ0FDZ0Q7aUNBRTNCO3VCQTRCRDs4QkFDSDswRUFDTTttRUFDUDtz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
@@ -46,23 +46,23 @@ async function update(args) {
46
46
  req
47
47
  }, _defaultAccess.default);
48
48
  }
49
- // TODO: workaround to prevent race-conditions 500 errors from violating unique constraints
50
49
  try {
51
- await payload.db.create({
50
+ // try/catch because we attempt to update without first reading to check if it exists first to save on db calls
51
+ await payload.db.updateOne({
52
52
  collection,
53
53
  data: preference,
54
- req
54
+ req,
55
+ where: filter
55
56
  });
56
57
  } catch (err) {
57
- await payload.db.updateOne({
58
+ await payload.db.create({
58
59
  collection,
59
60
  data: preference,
60
- req,
61
- where: filter
61
+ req
62
62
  });
63
63
  }
64
64
  return preference;
65
65
  }
66
66
  const _default = update;
67
67
 
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcmVmZXJlbmNlcy9vcGVyYXRpb25zL3VwZGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByZWZlcmVuY2VVcGRhdGVSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCBkZWZhdWx0QWNjZXNzIGZyb20gJy4uLy4uL2F1dGgvZGVmYXVsdEFjY2VzcydcbmltcG9ydCBleGVjdXRlQWNjZXNzIGZyb20gJy4uLy4uL2F1dGgvZXhlY3V0ZUFjY2VzcydcbmltcG9ydCBVbmF1dGhvcml6ZWRFcnJvciBmcm9tICcuLi8uLi9lcnJvcnMvVW5hdGhvcml6ZWRFcnJvcidcblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlKGFyZ3M6IFByZWZlcmVuY2VVcGRhdGVSZXF1ZXN0KSB7XG4gIGNvbnN0IHtcbiAgICBrZXksXG4gICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgcmVxOiB7IHBheWxvYWQgfSxcbiAgICByZXEsXG4gICAgdXNlcixcbiAgICB2YWx1ZSxcbiAgfSA9IGFyZ3NcblxuICBjb25zdCBjb2xsZWN0aW9uID0gJ3BheWxvYWQtcHJlZmVyZW5jZXMnXG5cbiAgY29uc3QgZmlsdGVyID0ge1xuICAgIGtleTogeyBlcXVhbHM6IGtleSB9LFxuICAgICd1c2VyLnJlbGF0aW9uVG8nOiB7IGVxdWFsczogdXNlci5jb2xsZWN0aW9uIH0sXG4gICAgJ3VzZXIudmFsdWUnOiB7IGVxdWFsczogdXNlci5pZCB9LFxuICB9XG5cbiAgY29uc3QgcHJlZmVyZW5jZSA9IHtcbiAgICBrZXksXG4gICAgdXNlcjoge1xuICAgICAgcmVsYXRpb25UbzogdXNlci5jb2xsZWN0aW9uLFxuICAgICAgdmFsdWU6IHVzZXIuaWQsXG4gICAgfSxcbiAgICB2YWx1ZSxcbiAgfVxuXG4gIGlmICghdXNlcikge1xuICAgIHRocm93IG5ldyBVbmF1dGhvcml6ZWRFcnJvcihyZXEudClcbiAgfVxuXG4gIGlmICghb3ZlcnJpZGVBY2Nlc3MpIHtcbiAgICBhd2FpdCBleGVjdXRlQWNjZXNzKHsgcmVxIH0sIGRlZmF1bHRBY2Nlc3MpXG4gIH1cblxuICAvLyBUT0RPOiB3b3JrYXJvdW5kIHRvIHByZXZlbnQgcmFjZS1jb25kaXRpb25zIDUwMCBlcnJvcnMgZnJvbSB2aW9sYXRpbmcgdW5pcXVlIGNvbnN0cmFpbnRzXG4gIHRyeSB7XG4gICAgYXdhaXQgcGF5bG9hZC5kYi5jcmVhdGUoe1xuICAgICAgY29sbGVjdGlvbixcbiAgICAgIGRhdGE6IHByZWZlcmVuY2UsXG4gICAgICByZXEsXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgYXdhaXQgcGF5bG9hZC5kYi51cGRhdGVPbmUoe1xuICAgICAgY29sbGVjdGlvbixcbiAgICAgIGRhdGE6IHByZWZlcmVuY2UsXG4gICAgICByZXEsXG4gICAgICB3aGVyZTogZmlsdGVyLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gcHJlZmVyZW5jZVxufVxuXG5leHBvcnQgZGVmYXVsdCB1cGRhdGVcbiJdLCJuYW1lcyI6WyJ1cGRhdGUiLCJhcmdzIiwia2V5Iiwib3ZlcnJpZGVBY2Nlc3MiLCJyZXEiLCJwYXlsb2FkIiwidXNlciIsInZhbHVlIiwiY29sbGVjdGlvbiIsImZpbHRlciIsImVxdWFscyIsImlkIiwicHJlZmVyZW5jZSIsInJlbGF0aW9uVG8iLCJVbmF1dGhvcml6ZWRFcnJvciIsInQiLCJleGVjdXRlQWNjZXNzIiwiZGVmYXVsdEFjY2VzcyIsImRiIiwiY3JlYXRlIiwiZGF0YSIsImVyciIsInVwZGF0ZU9uZSIsIndoZXJlIl0sIm1hcHBpbmdzIjoiOzs7OytCQTREQTs7O2VBQUE7OztzRUExRDBCO3NFQUNBO3lFQUNJOzs7Ozs7QUFFOUIsZUFBZUEsT0FBT0MsSUFBNkI7SUFDakQsTUFBTSxFQUNKQyxHQUFHLEVBQ0hDLGNBQWMsRUFDZEMsS0FBSyxFQUFFQyxPQUFPLEVBQUUsRUFDaEJELEdBQUcsRUFDSEUsSUFBSSxFQUNKQyxLQUFLLEVBQ04sR0FBR047SUFFSixNQUFNTyxhQUFhO0lBRW5CLE1BQU1DLFNBQVM7UUFDYlAsS0FBSztZQUFFUSxRQUFRUjtRQUFJO1FBQ25CLG1CQUFtQjtZQUFFUSxRQUFRSixLQUFLRSxVQUFVO1FBQUM7UUFDN0MsY0FBYztZQUFFRSxRQUFRSixLQUFLSyxFQUFFO1FBQUM7SUFDbEM7SUFFQSxNQUFNQyxhQUFhO1FBQ2pCVjtRQUNBSSxNQUFNO1lBQ0pPLFlBQVlQLEtBQUtFLFVBQVU7WUFDM0JELE9BQU9ELEtBQUtLLEVBQUU7UUFDaEI7UUFDQUo7SUFDRjtJQUVBLElBQUksQ0FBQ0QsTUFBTTtRQUNULE1BQU0sSUFBSVEseUJBQWlCLENBQUNWLElBQUlXLENBQUM7SUFDbkM7SUFFQSxJQUFJLENBQUNaLGdCQUFnQjtRQUNuQixNQUFNYSxJQUFBQSxzQkFBYSxFQUFDO1lBQUVaO1FBQUksR0FBR2Esc0JBQWE7SUFDNUM7SUFFQSwyRkFBMkY7SUFDM0YsSUFBSTtRQUNGLE1BQU1aLFFBQVFhLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDO1lBQ3RCWDtZQUNBWSxNQUFNUjtZQUNOUjtRQUNGO0lBQ0YsRUFBRSxPQUFPaUIsS0FBYztRQUNyQixNQUFNaEIsUUFBUWEsRUFBRSxDQUFDSSxTQUFTLENBQUM7WUFDekJkO1lBQ0FZLE1BQU1SO1lBQ05SO1lBQ0FtQixPQUFPZDtRQUNUO0lBQ0Y7SUFFQSxPQUFPRztBQUNUO01BRUEsV0FBZVoifQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcmVmZXJlbmNlcy9vcGVyYXRpb25zL3VwZGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByZWZlcmVuY2VVcGRhdGVSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCBkZWZhdWx0QWNjZXNzIGZyb20gJy4uLy4uL2F1dGgvZGVmYXVsdEFjY2VzcydcbmltcG9ydCBleGVjdXRlQWNjZXNzIGZyb20gJy4uLy4uL2F1dGgvZXhlY3V0ZUFjY2VzcydcbmltcG9ydCBVbmF1dGhvcml6ZWRFcnJvciBmcm9tICcuLi8uLi9lcnJvcnMvVW5hdGhvcml6ZWRFcnJvcidcblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlKGFyZ3M6IFByZWZlcmVuY2VVcGRhdGVSZXF1ZXN0KSB7XG4gIGNvbnN0IHtcbiAgICBrZXksXG4gICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgcmVxOiB7IHBheWxvYWQgfSxcbiAgICByZXEsXG4gICAgdXNlcixcbiAgICB2YWx1ZSxcbiAgfSA9IGFyZ3NcblxuICBjb25zdCBjb2xsZWN0aW9uID0gJ3BheWxvYWQtcHJlZmVyZW5jZXMnXG5cbiAgY29uc3QgZmlsdGVyID0ge1xuICAgIGtleTogeyBlcXVhbHM6IGtleSB9LFxuICAgICd1c2VyLnJlbGF0aW9uVG8nOiB7IGVxdWFsczogdXNlci5jb2xsZWN0aW9uIH0sXG4gICAgJ3VzZXIudmFsdWUnOiB7IGVxdWFsczogdXNlci5pZCB9LFxuICB9XG5cbiAgY29uc3QgcHJlZmVyZW5jZSA9IHtcbiAgICBrZXksXG4gICAgdXNlcjoge1xuICAgICAgcmVsYXRpb25UbzogdXNlci5jb2xsZWN0aW9uLFxuICAgICAgdmFsdWU6IHVzZXIuaWQsXG4gICAgfSxcbiAgICB2YWx1ZSxcbiAgfVxuXG4gIGlmICghdXNlcikge1xuICAgIHRocm93IG5ldyBVbmF1dGhvcml6ZWRFcnJvcihyZXEudClcbiAgfVxuXG4gIGlmICghb3ZlcnJpZGVBY2Nlc3MpIHtcbiAgICBhd2FpdCBleGVjdXRlQWNjZXNzKHsgcmVxIH0sIGRlZmF1bHRBY2Nlc3MpXG4gIH1cblxuICB0cnkge1xuICAgIC8vIHRyeS9jYXRjaCBiZWNhdXNlIHdlIGF0dGVtcHQgdG8gdXBkYXRlIHdpdGhvdXQgZmlyc3QgcmVhZGluZyB0byBjaGVjayBpZiBpdCBleGlzdHMgZmlyc3QgdG8gc2F2ZSBvbiBkYiBjYWxsc1xuICAgIGF3YWl0IHBheWxvYWQuZGIudXBkYXRlT25lKHtcbiAgICAgIGNvbGxlY3Rpb24sXG4gICAgICBkYXRhOiBwcmVmZXJlbmNlLFxuICAgICAgcmVxLFxuICAgICAgd2hlcmU6IGZpbHRlcixcbiAgICB9KVxuICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICBhd2FpdCBwYXlsb2FkLmRiLmNyZWF0ZSh7XG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgZGF0YTogcHJlZmVyZW5jZSxcbiAgICAgIHJlcSxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHByZWZlcmVuY2Vcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXBkYXRlXG4iXSwibmFtZXMiOlsidXBkYXRlIiwiYXJncyIsImtleSIsIm92ZXJyaWRlQWNjZXNzIiwicmVxIiwicGF5bG9hZCIsInVzZXIiLCJ2YWx1ZSIsImNvbGxlY3Rpb24iLCJmaWx0ZXIiLCJlcXVhbHMiLCJpZCIsInByZWZlcmVuY2UiLCJyZWxhdGlvblRvIiwiVW5hdXRob3JpemVkRXJyb3IiLCJ0IiwiZXhlY3V0ZUFjY2VzcyIsImRlZmF1bHRBY2Nlc3MiLCJkYiIsInVwZGF0ZU9uZSIsImRhdGEiLCJ3aGVyZSIsImVyciIsImNyZWF0ZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkE0REE7OztlQUFBOzs7c0VBMUQwQjtzRUFDQTt5RUFDSTs7Ozs7O0FBRTlCLGVBQWVBLE9BQU9DLElBQTZCO0lBQ2pELE1BQU0sRUFDSkMsR0FBRyxFQUNIQyxjQUFjLEVBQ2RDLEtBQUssRUFBRUMsT0FBTyxFQUFFLEVBQ2hCRCxHQUFHLEVBQ0hFLElBQUksRUFDSkMsS0FBSyxFQUNOLEdBQUdOO0lBRUosTUFBTU8sYUFBYTtJQUVuQixNQUFNQyxTQUFTO1FBQ2JQLEtBQUs7WUFBRVEsUUFBUVI7UUFBSTtRQUNuQixtQkFBbUI7WUFBRVEsUUFBUUosS0FBS0UsVUFBVTtRQUFDO1FBQzdDLGNBQWM7WUFBRUUsUUFBUUosS0FBS0ssRUFBRTtRQUFDO0lBQ2xDO0lBRUEsTUFBTUMsYUFBYTtRQUNqQlY7UUFDQUksTUFBTTtZQUNKTyxZQUFZUCxLQUFLRSxVQUFVO1lBQzNCRCxPQUFPRCxLQUFLSyxFQUFFO1FBQ2hCO1FBQ0FKO0lBQ0Y7SUFFQSxJQUFJLENBQUNELE1BQU07UUFDVCxNQUFNLElBQUlRLHlCQUFpQixDQUFDVixJQUFJVyxDQUFDO0lBQ25DO0lBRUEsSUFBSSxDQUFDWixnQkFBZ0I7UUFDbkIsTUFBTWEsSUFBQUEsc0JBQWEsRUFBQztZQUFFWjtRQUFJLEdBQUdhLHNCQUFhO0lBQzVDO0lBRUEsSUFBSTtRQUNGLCtHQUErRztRQUMvRyxNQUFNWixRQUFRYSxFQUFFLENBQUNDLFNBQVMsQ0FBQztZQUN6Qlg7WUFDQVksTUFBTVI7WUFDTlI7WUFDQWlCLE9BQU9aO1FBQ1Q7SUFDRixFQUFFLE9BQU9hLEtBQWM7UUFDckIsTUFBTWpCLFFBQVFhLEVBQUUsQ0FBQ0ssTUFBTSxDQUFDO1lBQ3RCZjtZQUNBWSxNQUFNUjtZQUNOUjtRQUNGO0lBQ0Y7SUFFQSxPQUFPUTtBQUNUO01BRUEsV0FBZVoifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "2.0.11",
3
+ "version": "2.0.13",
4
4
  "description": "Node, React and MongoDB Headless CMS and Application Framework",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
@@ -93,7 +93,7 @@
93
93
  "sass": "1.69.4",
94
94
  "scheduler": "0.23.0",
95
95
  "scmp": "2.1.0",
96
- "sharp": "0.31.3",
96
+ "sharp": "0.32.6",
97
97
  "swc-loader": "0.2.3",
98
98
  "terser-webpack-plugin": "5.3.9",
99
99
  "ts-essentials": "7.0.3",
package/types.d.ts CHANGED
@@ -2,6 +2,7 @@ export * from './dist/types';
2
2
  export type { CreateFormData, Data, Fields, FormField, FormFieldsContext, } from './dist/admin/components/forms/Form/types';
3
3
  export type { RichTextAdapter, RichTextFieldProps, } from './dist/admin/components/forms/field-types/RichText/types';
4
4
  export type { CellComponentProps } from './dist/admin/components/views/collections/List/Cell/types';
5
+ export { FileData } from './dist/uploads/types';
5
6
  export type { CustomPublishButtonProps, CustomSaveButtonProps, CustomSaveDraftButtonProps, } from './dist/admin/components/elements/types';
6
7
  export type { RowLabel } from './dist/admin/components/forms/RowLabel/types';
7
8
  export type { AfterChangeHook as CollectionAfterChangeHook, AfterDeleteHook as CollectionAfterDeleteHook, AfterForgotPasswordHook as CollectionAfterForgotPasswordHook, AfterLoginHook as CollectionAfterLoginHook, AfterOperationHook as CollectionAfterOperationHook, AfterReadHook as CollectionAfterReadHook, BeforeChangeHook as CollectionBeforeChangeHook, BeforeDeleteHook as CollectionBeforeDeleteHook, BeforeDuplicate, BeforeLoginHook as CollectionBeforeLoginHook, BeforeOperationHook as CollectionBeforeOperationHook, BeforeReadHook as CollectionBeforeReadHook, BeforeValidateHook as CollectionBeforeValidateHook, Collection, CollectionConfig, SanitizedCollectionConfig, TypeWithID, } from './dist/collections/config/types';
package/types.js CHANGED
@@ -9,51 +9,55 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ FileData: function() {
13
+ return _types.FileData;
14
+ },
12
15
  fieldAffectsData: function() {
13
- return _types.fieldAffectsData;
16
+ return _types1.fieldAffectsData;
14
17
  },
15
18
  fieldHasMaxDepth: function() {
16
- return _types.fieldHasMaxDepth;
19
+ return _types1.fieldHasMaxDepth;
17
20
  },
18
21
  fieldHasSubFields: function() {
19
- return _types.fieldHasSubFields;
22
+ return _types1.fieldHasSubFields;
20
23
  },
21
24
  fieldIsArrayType: function() {
22
- return _types.fieldIsArrayType;
25
+ return _types1.fieldIsArrayType;
23
26
  },
24
27
  fieldIsBlockType: function() {
25
- return _types.fieldIsBlockType;
28
+ return _types1.fieldIsBlockType;
26
29
  },
27
30
  fieldIsLocalized: function() {
28
- return _types.fieldIsLocalized;
31
+ return _types1.fieldIsLocalized;
29
32
  },
30
33
  fieldIsPresentationalOnly: function() {
31
- return _types.fieldIsPresentationalOnly;
34
+ return _types1.fieldIsPresentationalOnly;
32
35
  },
33
36
  fieldSupportsMany: function() {
34
- return _types.fieldSupportsMany;
37
+ return _types1.fieldSupportsMany;
35
38
  },
36
39
  optionIsObject: function() {
37
- return _types.optionIsObject;
40
+ return _types1.optionIsObject;
38
41
  },
39
42
  optionIsValue: function() {
40
- return _types.optionIsValue;
43
+ return _types1.optionIsValue;
41
44
  },
42
45
  optionsAreObjects: function() {
43
- return _types.optionsAreObjects;
46
+ return _types1.optionsAreObjects;
44
47
  },
45
48
  tabHasName: function() {
46
- return _types.tabHasName;
49
+ return _types1.tabHasName;
47
50
  },
48
51
  valueIsValueWithRelation: function() {
49
- return _types.valueIsValueWithRelation;
52
+ return _types1.valueIsValueWithRelation;
50
53
  },
51
54
  validOperators: function() {
52
55
  return _constants.validOperators;
53
56
  }
54
57
  });
55
58
  _export_star(require("./dist/types"), exports);
56
- const _types = require("./dist/fields/config/types");
59
+ const _types = require("./dist/uploads/types");
60
+ const _types1 = require("./dist/fields/config/types");
57
61
  const _constants = require("./dist/types/constants");
58
62
  function _export_star(from, to) {
59
63
  Object.keys(from).forEach(function(k) {
@@ -69,4 +73,4 @@ function _export_star(from, to) {
69
73
  return from;
70
74
  }
71
75
 
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRzL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vLi4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIHtcbiAgQ3JlYXRlRm9ybURhdGEsXG4gIERhdGEsXG4gIEZpZWxkcyxcbiAgRm9ybUZpZWxkLFxuICBGb3JtRmllbGRzQ29udGV4dCxcbn0gZnJvbSAnLi4vYWRtaW4vY29tcG9uZW50cy9mb3Jtcy9Gb3JtL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSB7XG4gIFJpY2hUZXh0QWRhcHRlcixcbiAgUmljaFRleHRGaWVsZFByb3BzLFxufSBmcm9tICcuLi9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL2ZpZWxkLXR5cGVzL1JpY2hUZXh0L3R5cGVzJ1xuXG5leHBvcnQgdHlwZSB7IENlbGxDb21wb25lbnRQcm9wcyB9IGZyb20gJy4uL2FkbWluL2NvbXBvbmVudHMvdmlld3MvY29sbGVjdGlvbnMvTGlzdC9DZWxsL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSB7XG4gIEN1c3RvbVB1Ymxpc2hCdXR0b25Qcm9wcyxcbiAgQ3VzdG9tU2F2ZUJ1dHRvblByb3BzLFxuICBDdXN0b21TYXZlRHJhZnRCdXR0b25Qcm9wcyxcbn0gZnJvbSAnLi8uLi9hZG1pbi9jb21wb25lbnRzL2VsZW1lbnRzL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSB7IFJvd0xhYmVsIH0gZnJvbSAnLi8uLi9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL1Jvd0xhYmVsL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSB7XG4gIEFmdGVyQ2hhbmdlSG9vayBhcyBDb2xsZWN0aW9uQWZ0ZXJDaGFuZ2VIb29rLFxuICBBZnRlckRlbGV0ZUhvb2sgYXMgQ29sbGVjdGlvbkFmdGVyRGVsZXRlSG9vayxcbiAgQWZ0ZXJGb3Jnb3RQYXNzd29yZEhvb2sgYXMgQ29sbGVjdGlvbkFmdGVyRm9yZ290UGFzc3dvcmRIb29rLFxuICBBZnRlckxvZ2luSG9vayBhcyBDb2xsZWN0aW9uQWZ0ZXJMb2dpbkhvb2ssXG4gIEFmdGVyT3BlcmF0aW9uSG9vayBhcyBDb2xsZWN0aW9uQWZ0ZXJPcGVyYXRpb25Ib29rLFxuICBBZnRlclJlYWRIb29rIGFzIENvbGxlY3Rpb25BZnRlclJlYWRIb29rLFxuICBCZWZvcmVDaGFuZ2VIb29rIGFzIENvbGxlY3Rpb25CZWZvcmVDaGFuZ2VIb29rLFxuICBCZWZvcmVEZWxldGVIb29rIGFzIENvbGxlY3Rpb25CZWZvcmVEZWxldGVIb29rLFxuICBCZWZvcmVEdXBsaWNhdGUsXG4gIEJlZm9yZUxvZ2luSG9vayBhcyBDb2xsZWN0aW9uQmVmb3JlTG9naW5Ib29rLFxuICBCZWZvcmVPcGVyYXRpb25Ib29rIGFzIENvbGxlY3Rpb25CZWZvcmVPcGVyYXRpb25Ib29rLFxuICBCZWZvcmVSZWFkSG9vayBhcyBDb2xsZWN0aW9uQmVmb3JlUmVhZEhvb2ssXG4gIEJlZm9yZVZhbGlkYXRlSG9vayBhcyBDb2xsZWN0aW9uQmVmb3JlVmFsaWRhdGVIb29rLFxuICBDb2xsZWN0aW9uLFxuICBDb2xsZWN0aW9uQ29uZmlnLFxuICBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnLFxuICBUeXBlV2l0aElELFxufSBmcm9tICcuLy4uL2NvbGxlY3Rpb25zL2NvbmZpZy90eXBlcydcblxuZXhwb3J0IHR5cGUgeyBBY2Nlc3MsIEFjY2Vzc0FyZ3MgfSBmcm9tICcuLy4uL2NvbmZpZy90eXBlcydcblxuZXhwb3J0IHR5cGUge1xuICBBcnJheUZpZWxkLFxuICBCbG9jayxcbiAgQmxvY2tGaWVsZCxcbiAgQ2hlY2tib3hGaWVsZCxcbiAgQ29kZUZpZWxkLFxuICBDb2xsYXBzaWJsZUZpZWxkLFxuICBDb25kaXRpb24sXG4gIERhdGVGaWVsZCxcbiAgRW1haWxGaWVsZCxcbiAgRmllbGQsXG4gIEZpZWxkQWNjZXNzLFxuICBGaWVsZEFmZmVjdGluZ0RhdGEsXG4gIEZpZWxkQmFzZSxcbiAgRmllbGRIb29rLFxuICBGaWVsZEhvb2tBcmdzLFxuICBGaWVsZFByZXNlbnRhdGlvbmFsT25seSxcbiAgRmllbGRXaXRoTWFueSxcbiAgRmllbGRXaXRoTWF4RGVwdGgsXG4gIEZpZWxkV2l0aFBhdGgsXG4gIEZpZWxkV2l0aFN1YkZpZWxkcyxcbiAgRmlsdGVyT3B0aW9ucyxcbiAgRmlsdGVyT3B0aW9uc1Byb3BzLFxuICBHcm91cEZpZWxkLFxuICBIb29rTmFtZSxcbiAgSlNPTkZpZWxkLFxuICBMYWJlbHMsXG4gIE5hbWVkVGFiLFxuICBOb25QcmVzZW50YXRpb25hbEZpZWxkLFxuICBOdW1iZXJGaWVsZCxcbiAgT3B0aW9uLFxuICBPcHRpb25PYmplY3QsXG4gIFBvaW50RmllbGQsXG4gIFJhZGlvRmllbGQsXG4gIFJlbGF0aW9uc2hpcEZpZWxkLFxuICBSZWxhdGlvbnNoaXBWYWx1ZSxcbiAgUmljaFRleHRGaWVsZCxcbiAgUm93QWRtaW4sXG4gIFJvd0ZpZWxkLFxuICBTZWxlY3RGaWVsZCxcbiAgVGFiLFxuICBUYWJBc0ZpZWxkLFxuICBUYWJzQWRtaW4sXG4gIFRhYnNGaWVsZCxcbiAgVGV4dEZpZWxkLFxuICBUZXh0YXJlYUZpZWxkLFxuICBVSUZpZWxkLFxuICBVbm5hbWVkVGFiLFxuICBVcGxvYWRGaWVsZCxcbiAgVmFsaWRhdGUsXG4gIFZhbGlkYXRlT3B0aW9ucyxcbiAgVmFsdWVXaXRoUmVsYXRpb24sXG59IGZyb20gJy4vLi4vZmllbGRzL2NvbmZpZy90eXBlcydcblxuZXhwb3J0IHtcbiAgZmllbGRBZmZlY3RzRGF0YSxcbiAgZmllbGRIYXNNYXhEZXB0aCxcbiAgZmllbGRIYXNTdWJGaWVsZHMsXG4gIGZpZWxkSXNBcnJheVR5cGUsXG4gIGZpZWxkSXNCbG9ja1R5cGUsXG4gIGZpZWxkSXNMb2NhbGl6ZWQsXG4gIGZpZWxkSXNQcmVzZW50YXRpb25hbE9ubHksXG4gIGZpZWxkU3VwcG9ydHNNYW55LFxuICBvcHRpb25Jc09iamVjdCxcbiAgb3B0aW9uSXNWYWx1ZSxcbiAgb3B0aW9uc0FyZU9iamVjdHMsXG4gIHRhYkhhc05hbWUsXG4gIHZhbHVlSXNWYWx1ZVdpdGhSZWxhdGlvbixcbn0gZnJvbSAnLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSB7XG4gIEFmdGVyQ2hhbmdlSG9vayBhcyBHbG9iYWxBZnRlckNoYW5nZUhvb2ssXG4gIEFmdGVyUmVhZEhvb2sgYXMgR2xvYmFsQWZ0ZXJSZWFkSG9vayxcbiAgQmVmb3JlQ2hhbmdlSG9vayBhcyBHbG9iYWxCZWZvcmVDaGFuZ2VIb29rLFxuICBCZWZvcmVSZWFkSG9vayBhcyBHbG9iYWxCZWZvcmVSZWFkSG9vayxcbiAgQmVmb3JlVmFsaWRhdGVIb29rIGFzIEdsb2JhbEJlZm9yZVZhbGlkYXRlSG9vayxcbiAgR2xvYmFsQ29uZmlnLFxuICBTYW5pdGl6ZWRHbG9iYWxDb25maWcsXG59IGZyb20gJy4vLi4vZ2xvYmFscy9jb25maWcvdHlwZXMnXG5cbmV4cG9ydCB7IHZhbGlkT3BlcmF0b3JzIH0gZnJvbSAnLi8uLi90eXBlcy9jb25zdGFudHMnXG4iXSwibmFtZXMiOlsiZmllbGRBZmZlY3RzRGF0YSIsImZpZWxkSGFzTWF4RGVwdGgiLCJmaWVsZEhhc1N1YkZpZWxkcyIsImZpZWxkSXNBcnJheVR5cGUiLCJmaWVsZElzQmxvY2tUeXBlIiwiZmllbGRJc0xvY2FsaXplZCIsImZpZWxkSXNQcmVzZW50YXRpb25hbE9ubHkiLCJmaWVsZFN1cHBvcnRzTWFueSIsIm9wdGlvbklzT2JqZWN0Iiwib3B0aW9uSXNWYWx1ZSIsIm9wdGlvbnNBcmVPYmplY3RzIiwidGFiSGFzTmFtZSIsInZhbHVlSXNWYWx1ZVdpdGhSZWxhdGlvbiIsInZhbGlkT3BlcmF0b3JzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXNHRUEsZ0JBQWdCO2VBQWhCQSx1QkFBZ0I7O0lBQ2hCQyxnQkFBZ0I7ZUFBaEJBLHVCQUFnQjs7SUFDaEJDLGlCQUFpQjtlQUFqQkEsd0JBQWlCOztJQUNqQkMsZ0JBQWdCO2VBQWhCQSx1QkFBZ0I7O0lBQ2hCQyxnQkFBZ0I7ZUFBaEJBLHVCQUFnQjs7SUFDaEJDLGdCQUFnQjtlQUFoQkEsdUJBQWdCOztJQUNoQkMseUJBQXlCO2VBQXpCQSxnQ0FBeUI7O0lBQ3pCQyxpQkFBaUI7ZUFBakJBLHdCQUFpQjs7SUFDakJDLGNBQWM7ZUFBZEEscUJBQWM7O0lBQ2RDLGFBQWE7ZUFBYkEsb0JBQWE7O0lBQ2JDLGlCQUFpQjtlQUFqQkEsd0JBQWlCOztJQUNqQkMsVUFBVTtlQUFWQSxpQkFBVTs7SUFDVkMsd0JBQXdCO2VBQXhCQSwrQkFBd0I7O0lBYWpCQyxjQUFjO2VBQWRBLHlCQUFjOzs7cUJBL0hUO3VCQW1IUDsyQkFZd0IifQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRzL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vLi4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIHtcbiAgQ3JlYXRlRm9ybURhdGEsXG4gIERhdGEsXG4gIEZpZWxkcyxcbiAgRm9ybUZpZWxkLFxuICBGb3JtRmllbGRzQ29udGV4dCxcbn0gZnJvbSAnLi4vYWRtaW4vY29tcG9uZW50cy9mb3Jtcy9Gb3JtL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSB7XG4gIFJpY2hUZXh0QWRhcHRlcixcbiAgUmljaFRleHRGaWVsZFByb3BzLFxufSBmcm9tICcuLi9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL2ZpZWxkLXR5cGVzL1JpY2hUZXh0L3R5cGVzJ1xuXG5leHBvcnQgdHlwZSB7IENlbGxDb21wb25lbnRQcm9wcyB9IGZyb20gJy4uL2FkbWluL2NvbXBvbmVudHMvdmlld3MvY29sbGVjdGlvbnMvTGlzdC9DZWxsL3R5cGVzJ1xuXG5leHBvcnQgeyBGaWxlRGF0YSB9IGZyb20gJy4uL3VwbG9hZHMvdHlwZXMnXG5cbmV4cG9ydCB0eXBlIHtcbiAgQ3VzdG9tUHVibGlzaEJ1dHRvblByb3BzLFxuICBDdXN0b21TYXZlQnV0dG9uUHJvcHMsXG4gIEN1c3RvbVNhdmVEcmFmdEJ1dHRvblByb3BzLFxufSBmcm9tICcuLy4uL2FkbWluL2NvbXBvbmVudHMvZWxlbWVudHMvdHlwZXMnXG5cbmV4cG9ydCB0eXBlIHsgUm93TGFiZWwgfSBmcm9tICcuLy4uL2FkbWluL2NvbXBvbmVudHMvZm9ybXMvUm93TGFiZWwvdHlwZXMnXG5cbmV4cG9ydCB0eXBlIHtcbiAgQWZ0ZXJDaGFuZ2VIb29rIGFzIENvbGxlY3Rpb25BZnRlckNoYW5nZUhvb2ssXG4gIEFmdGVyRGVsZXRlSG9vayBhcyBDb2xsZWN0aW9uQWZ0ZXJEZWxldGVIb29rLFxuICBBZnRlckZvcmdvdFBhc3N3b3JkSG9vayBhcyBDb2xsZWN0aW9uQWZ0ZXJGb3Jnb3RQYXNzd29yZEhvb2ssXG4gIEFmdGVyTG9naW5Ib29rIGFzIENvbGxlY3Rpb25BZnRlckxvZ2luSG9vayxcbiAgQWZ0ZXJPcGVyYXRpb25Ib29rIGFzIENvbGxlY3Rpb25BZnRlck9wZXJhdGlvbkhvb2ssXG4gIEFmdGVyUmVhZEhvb2sgYXMgQ29sbGVjdGlvbkFmdGVyUmVhZEhvb2ssXG4gIEJlZm9yZUNoYW5nZUhvb2sgYXMgQ29sbGVjdGlvbkJlZm9yZUNoYW5nZUhvb2ssXG4gIEJlZm9yZURlbGV0ZUhvb2sgYXMgQ29sbGVjdGlvbkJlZm9yZURlbGV0ZUhvb2ssXG4gIEJlZm9yZUR1cGxpY2F0ZSxcbiAgQmVmb3JlTG9naW5Ib29rIGFzIENvbGxlY3Rpb25CZWZvcmVMb2dpbkhvb2ssXG4gIEJlZm9yZU9wZXJhdGlvbkhvb2sgYXMgQ29sbGVjdGlvbkJlZm9yZU9wZXJhdGlvbkhvb2ssXG4gIEJlZm9yZVJlYWRIb29rIGFzIENvbGxlY3Rpb25CZWZvcmVSZWFkSG9vayxcbiAgQmVmb3JlVmFsaWRhdGVIb29rIGFzIENvbGxlY3Rpb25CZWZvcmVWYWxpZGF0ZUhvb2ssXG4gIENvbGxlY3Rpb24sXG4gIENvbGxlY3Rpb25Db25maWcsXG4gIFNhbml0aXplZENvbGxlY3Rpb25Db25maWcsXG4gIFR5cGVXaXRoSUQsXG59IGZyb20gJy4vLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSB7IEFjY2VzcywgQWNjZXNzQXJncyB9IGZyb20gJy4vLi4vY29uZmlnL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSB7XG4gIEFycmF5RmllbGQsXG4gIEJsb2NrLFxuICBCbG9ja0ZpZWxkLFxuICBDaGVja2JveEZpZWxkLFxuICBDb2RlRmllbGQsXG4gIENvbGxhcHNpYmxlRmllbGQsXG4gIENvbmRpdGlvbixcbiAgRGF0ZUZpZWxkLFxuICBFbWFpbEZpZWxkLFxuICBGaWVsZCxcbiAgRmllbGRBY2Nlc3MsXG4gIEZpZWxkQWZmZWN0aW5nRGF0YSxcbiAgRmllbGRCYXNlLFxuICBGaWVsZEhvb2ssXG4gIEZpZWxkSG9va0FyZ3MsXG4gIEZpZWxkUHJlc2VudGF0aW9uYWxPbmx5LFxuICBGaWVsZFdpdGhNYW55LFxuICBGaWVsZFdpdGhNYXhEZXB0aCxcbiAgRmllbGRXaXRoUGF0aCxcbiAgRmllbGRXaXRoU3ViRmllbGRzLFxuICBGaWx0ZXJPcHRpb25zLFxuICBGaWx0ZXJPcHRpb25zUHJvcHMsXG4gIEdyb3VwRmllbGQsXG4gIEhvb2tOYW1lLFxuICBKU09ORmllbGQsXG4gIExhYmVscyxcbiAgTmFtZWRUYWIsXG4gIE5vblByZXNlbnRhdGlvbmFsRmllbGQsXG4gIE51bWJlckZpZWxkLFxuICBPcHRpb24sXG4gIE9wdGlvbk9iamVjdCxcbiAgUG9pbnRGaWVsZCxcbiAgUmFkaW9GaWVsZCxcbiAgUmVsYXRpb25zaGlwRmllbGQsXG4gIFJlbGF0aW9uc2hpcFZhbHVlLFxuICBSaWNoVGV4dEZpZWxkLFxuICBSb3dBZG1pbixcbiAgUm93RmllbGQsXG4gIFNlbGVjdEZpZWxkLFxuICBUYWIsXG4gIFRhYkFzRmllbGQsXG4gIFRhYnNBZG1pbixcbiAgVGFic0ZpZWxkLFxuICBUZXh0RmllbGQsXG4gIFRleHRhcmVhRmllbGQsXG4gIFVJRmllbGQsXG4gIFVubmFtZWRUYWIsXG4gIFVwbG9hZEZpZWxkLFxuICBWYWxpZGF0ZSxcbiAgVmFsaWRhdGVPcHRpb25zLFxuICBWYWx1ZVdpdGhSZWxhdGlvbixcbn0gZnJvbSAnLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuXG5leHBvcnQge1xuICBmaWVsZEFmZmVjdHNEYXRhLFxuICBmaWVsZEhhc01heERlcHRoLFxuICBmaWVsZEhhc1N1YkZpZWxkcyxcbiAgZmllbGRJc0FycmF5VHlwZSxcbiAgZmllbGRJc0Jsb2NrVHlwZSxcbiAgZmllbGRJc0xvY2FsaXplZCxcbiAgZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seSxcbiAgZmllbGRTdXBwb3J0c01hbnksXG4gIG9wdGlvbklzT2JqZWN0LFxuICBvcHRpb25Jc1ZhbHVlLFxuICBvcHRpb25zQXJlT2JqZWN0cyxcbiAgdGFiSGFzTmFtZSxcbiAgdmFsdWVJc1ZhbHVlV2l0aFJlbGF0aW9uLFxufSBmcm9tICcuLy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5cbmV4cG9ydCB0eXBlIHtcbiAgQWZ0ZXJDaGFuZ2VIb29rIGFzIEdsb2JhbEFmdGVyQ2hhbmdlSG9vayxcbiAgQWZ0ZXJSZWFkSG9vayBhcyBHbG9iYWxBZnRlclJlYWRIb29rLFxuICBCZWZvcmVDaGFuZ2VIb29rIGFzIEdsb2JhbEJlZm9yZUNoYW5nZUhvb2ssXG4gIEJlZm9yZVJlYWRIb29rIGFzIEdsb2JhbEJlZm9yZVJlYWRIb29rLFxuICBCZWZvcmVWYWxpZGF0ZUhvb2sgYXMgR2xvYmFsQmVmb3JlVmFsaWRhdGVIb29rLFxuICBHbG9iYWxDb25maWcsXG4gIFNhbml0aXplZEdsb2JhbENvbmZpZyxcbn0gZnJvbSAnLi8uLi9nbG9iYWxzL2NvbmZpZy90eXBlcydcblxuZXhwb3J0IHsgdmFsaWRPcGVyYXRvcnMgfSBmcm9tICcuLy4uL3R5cGVzL2NvbnN0YW50cydcbiJdLCJuYW1lcyI6WyJGaWxlRGF0YSIsImZpZWxkQWZmZWN0c0RhdGEiLCJmaWVsZEhhc01heERlcHRoIiwiZmllbGRIYXNTdWJGaWVsZHMiLCJmaWVsZElzQXJyYXlUeXBlIiwiZmllbGRJc0Jsb2NrVHlwZSIsImZpZWxkSXNMb2NhbGl6ZWQiLCJmaWVsZElzUHJlc2VudGF0aW9uYWxPbmx5IiwiZmllbGRTdXBwb3J0c01hbnkiLCJvcHRpb25Jc09iamVjdCIsIm9wdGlvbklzVmFsdWUiLCJvcHRpb25zQXJlT2JqZWN0cyIsInRhYkhhc05hbWUiLCJ2YWx1ZUlzVmFsdWVXaXRoUmVsYXRpb24iLCJ2YWxpZE9wZXJhdG9ycyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFpQlNBLFFBQVE7ZUFBUkEsZUFBUTs7SUF1RmZDLGdCQUFnQjtlQUFoQkEsd0JBQWdCOztJQUNoQkMsZ0JBQWdCO2VBQWhCQSx3QkFBZ0I7O0lBQ2hCQyxpQkFBaUI7ZUFBakJBLHlCQUFpQjs7SUFDakJDLGdCQUFnQjtlQUFoQkEsd0JBQWdCOztJQUNoQkMsZ0JBQWdCO2VBQWhCQSx3QkFBZ0I7O0lBQ2hCQyxnQkFBZ0I7ZUFBaEJBLHdCQUFnQjs7SUFDaEJDLHlCQUF5QjtlQUF6QkEsaUNBQXlCOztJQUN6QkMsaUJBQWlCO2VBQWpCQSx5QkFBaUI7O0lBQ2pCQyxjQUFjO2VBQWRBLHNCQUFjOztJQUNkQyxhQUFhO2VBQWJBLHFCQUFhOztJQUNiQyxpQkFBaUI7ZUFBakJBLHlCQUFpQjs7SUFDakJDLFVBQVU7ZUFBVkEsa0JBQVU7O0lBQ1ZDLHdCQUF3QjtlQUF4QkEsZ0NBQXdCOztJQWFqQkMsY0FBYztlQUFkQSx5QkFBYzs7O3FCQWpJVDt1QkFpQlc7d0JBb0dsQjsyQkFZd0IifQ==