studiokit-scaffolding-js 7.0.12-next.2.9 → 7.0.13-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +137 -137
  3. package/lib/components/ActionList.d.ts +2 -2
  4. package/lib/components/ActionList.js +87 -166
  5. package/lib/components/AlertDialog.d.ts +3 -3
  6. package/lib/components/AlertDialog.js +18 -133
  7. package/lib/components/AlertWithIcon.js +52 -93
  8. package/lib/components/ConnectedModal.d.ts +2 -1
  9. package/lib/components/ConnectedModal.js +37 -43
  10. package/lib/components/Dropdowns/GroupsDropdown.d.ts +4 -4
  11. package/lib/components/Dropdowns/GroupsDropdown.js +82 -69
  12. package/lib/components/Dropdowns/ManagedNavDropdown.d.ts +2 -2
  13. package/lib/components/Dropdowns/ManagedNavDropdown.js +111 -99
  14. package/lib/components/Dropdowns/UserDropdown.js +70 -109
  15. package/lib/components/Dropdowns/index.js +11 -27
  16. package/lib/components/EntityOwnerList.d.ts +3 -3
  17. package/lib/components/EntityOwnerList.js +60 -52
  18. package/lib/components/Error.js +27 -107
  19. package/lib/components/ErrorBoundary.js +94 -133
  20. package/lib/components/ErrorMessage.d.ts +2 -2
  21. package/lib/components/ErrorMessage.js +14 -44
  22. package/lib/components/Forms/DateField.d.ts +2 -2
  23. package/lib/components/Forms/DateField.js +95 -63
  24. package/lib/components/Forms/TimeField.d.ts +2 -2
  25. package/lib/components/Forms/TimeField.js +108 -84
  26. package/lib/components/Forms/index.js +13 -27
  27. package/lib/components/Groups/CreateEditCopySaveButtons.d.ts +2 -2
  28. package/lib/components/Groups/CreateEditCopySaveButtons.js +14 -102
  29. package/lib/components/Groups/ExternalGroups/Attach.d.ts +7 -6
  30. package/lib/components/Groups/ExternalGroups/Attach.js +188 -213
  31. package/lib/components/Groups/ExternalGroups/Table.js +76 -183
  32. package/lib/components/Groups/GroupCreateOrEditCommonProps.js +1 -5
  33. package/lib/components/Groups/RosterSyncInfo.js +49 -140
  34. package/lib/components/HOC/AccessibleAppComponent.d.ts +2 -2
  35. package/lib/components/HOC/AccessibleAppComponent.js +124 -101
  36. package/lib/components/HOC/ActivityRequiredComponent.d.ts +14 -14
  37. package/lib/components/HOC/ActivityRequiredComponent.js +107 -93
  38. package/lib/components/HOC/AsyncComponent.d.ts +9 -9
  39. package/lib/components/HOC/AsyncComponent.js +129 -53
  40. package/lib/components/HOC/AuthenticatedComponent.d.ts +4 -4
  41. package/lib/components/HOC/AuthenticatedComponent.js +96 -59
  42. package/lib/components/HOC/CollectionComponent.d.ts +12 -12
  43. package/lib/components/HOC/CollectionComponent.js +171 -171
  44. package/lib/components/HOC/CollectionFirstItemComponent.d.ts +13 -13
  45. package/lib/components/HOC/CollectionFirstItemComponent.js +94 -52
  46. package/lib/components/HOC/CollectionItemComponent.d.ts +9 -9
  47. package/lib/components/HOC/CollectionItemComponent.js +168 -169
  48. package/lib/components/HOC/ConnectedModalComponent.d.ts +9 -9
  49. package/lib/components/HOC/ConnectedModalComponent.js +140 -110
  50. package/lib/components/HOC/DataDependentComponent.d.ts +55 -3
  51. package/lib/components/HOC/DataDependentComponent.js +79 -30
  52. package/lib/components/HOC/EntityComponent.d.ts +13 -13
  53. package/lib/components/HOC/EntityComponent.js +112 -74
  54. package/lib/components/HOC/FullscreenModalComponent.d.ts +9 -9
  55. package/lib/components/HOC/FullscreenModalComponent.js +185 -165
  56. package/lib/components/HOC/GroupActivityRequiredComponent.d.ts +2 -2
  57. package/lib/components/HOC/GroupActivityRequiredComponent.js +47 -48
  58. package/lib/components/HOC/GuidComponent.d.ts +1 -1
  59. package/lib/components/HOC/GuidComponent.js +68 -29
  60. package/lib/components/HOC/ModelContextDependencyVerifyComponent.d.ts +29 -28
  61. package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +65 -42
  62. package/lib/components/HOC/ModelErrorRedirectComponent.d.ts +10 -10
  63. package/lib/components/HOC/ModelErrorRedirectComponent.js +94 -51
  64. package/lib/components/HOC/SearchPersistorComponent.d.ts +4 -4
  65. package/lib/components/HOC/SearchPersistorComponent.js +216 -243
  66. package/lib/components/HOC/UnauthenticatedComponent.d.ts +12 -12
  67. package/lib/components/HOC/UnauthenticatedComponent.js +82 -37
  68. package/lib/components/HOC/UserComponent.d.ts +1 -1
  69. package/lib/components/HOC/UserComponent.js +11 -12
  70. package/lib/components/Icons/IconAlphaList.js +20 -34
  71. package/lib/components/Icons/IconExternalUser.js +20 -34
  72. package/lib/components/Icons/IconImpersonation.js +20 -34
  73. package/lib/components/Icons/IconStopImpersonating.js +20 -34
  74. package/lib/components/Icons/IconTable.js +21 -35
  75. package/lib/components/Icons/IconTableDeleteCol.js +20 -34
  76. package/lib/components/Icons/IconTableDeleteRow.js +20 -34
  77. package/lib/components/Icons/IconTableInsertCol.js +20 -34
  78. package/lib/components/Icons/IconTableInsertRow.js +20 -34
  79. package/lib/components/Impersonation/Button.d.ts +2 -2
  80. package/lib/components/Impersonation/Button.js +56 -76
  81. package/lib/components/Impersonation/Link.d.ts +2 -2
  82. package/lib/components/Impersonation/Link.js +53 -76
  83. package/lib/components/Impersonation/UserDetail.css +22 -22
  84. package/lib/components/Impersonation/UserDetail.d.ts +2 -2
  85. package/lib/components/Impersonation/UserDetail.js +17 -66
  86. package/lib/components/Loading.js +21 -27
  87. package/lib/components/LockDownBrowser/Check.js +107 -194
  88. package/lib/components/LockDownBrowser/ExitButton.js +14 -27
  89. package/lib/components/LockDownBrowser/Launch.js +85 -70
  90. package/lib/components/Lti/Confirm.js +33 -152
  91. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.d.ts +2 -4
  92. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +78 -170
  93. package/lib/components/Lti/Launch.js +49 -105
  94. package/lib/components/Lti/LaunchGroup.js +39 -85
  95. package/lib/components/ManageTable.d.ts +2 -1
  96. package/lib/components/ManageTable.js +104 -309
  97. package/lib/components/ManageTableNoDataComponent.js +22 -42
  98. package/lib/components/NewVersionAlert.d.ts +2 -2
  99. package/lib/components/NewVersionAlert.js +91 -82
  100. package/lib/components/NotFound.js +28 -87
  101. package/lib/components/Notifications.d.ts +4 -4
  102. package/lib/components/Notifications.js +169 -187
  103. package/lib/components/PaginationNextButton.js +21 -33
  104. package/lib/components/PaginationPreviousButton.js +21 -33
  105. package/lib/components/Quill/CustomToolbar.d.ts +2 -2
  106. package/lib/components/Quill/CustomToolbar.js +257 -432
  107. package/lib/components/Quill/Formats/Image.d.ts +25 -10
  108. package/lib/components/Quill/Formats/Image.js +86 -80
  109. package/lib/components/Quill/Formats/List.d.ts +3 -6
  110. package/lib/components/Quill/Formats/List.js +74 -52
  111. package/lib/components/Quill/Formats/Video.d.ts +1 -2
  112. package/lib/components/Quill/Formats/Video.js +45 -31
  113. package/lib/components/Quill/ImageDropModule.d.ts +1 -1
  114. package/lib/components/Quill/ImageDropModule.js +122 -149
  115. package/lib/components/Quill/ImageWarning.d.ts +2 -2
  116. package/lib/components/Quill/ImageWarning.js +32 -45
  117. package/lib/components/Quill/ImageWithAltTextModal.d.ts +1 -0
  118. package/lib/components/Quill/ImageWithAltTextModal.js +141 -425
  119. package/lib/components/Quill/Specs/CustomImageSpec.d.ts +1 -1
  120. package/lib/components/Quill/Specs/CustomImageSpec.js +51 -43
  121. package/lib/components/Quill/Specs/CustomVideoSpec.d.ts +1 -1
  122. package/lib/components/Quill/Specs/CustomVideoSpec.js +44 -35
  123. package/lib/components/Quill/TableModule/Blots/BaseTableBlot.d.ts +1 -2
  124. package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +121 -105
  125. package/lib/components/Quill/TableModule/Blots/TableBlot.js +66 -53
  126. package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +67 -54
  127. package/lib/components/Quill/TableModule/Blots/TableCellBlot.d.ts +1 -1
  128. package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +241 -225
  129. package/lib/components/Quill/TableModule/Blots/TableContainer.js +99 -82
  130. package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +87 -76
  131. package/lib/components/Quill/TableModule/constants.js +41 -45
  132. package/lib/components/Quill/TableModule/index.css +171 -171
  133. package/lib/components/Quill/TableModule/index.d.ts +5 -14
  134. package/lib/components/Quill/TableModule/index.js +313 -373
  135. package/lib/components/Quill/TableModule/utils.js +45 -45
  136. package/lib/components/Quill/accessibilityFix.d.ts +1 -0
  137. package/lib/components/Quill/accessibilityFix.js +251 -235
  138. package/lib/components/Quill/index.js +32 -36
  139. package/lib/components/RefreshIndicator/Bordered.js +32 -48
  140. package/lib/components/RefreshIndicator/Inline.js +33 -48
  141. package/lib/components/RefreshIndicator/index.d.ts +2 -2
  142. package/lib/components/RefreshIndicator/index.js +113 -263
  143. package/lib/components/SearchControls.js +31 -216
  144. package/lib/components/SentryRoute.js +23 -10
  145. package/lib/components/Tables/RoleFilter.d.ts +4 -3
  146. package/lib/components/Tables/RoleFilter.js +46 -71
  147. package/lib/components/Tables/TextFilter.d.ts +3 -2
  148. package/lib/components/Tables/TextFilter.js +20 -62
  149. package/lib/components/UserRoles/Add.d.ts +3 -3
  150. package/lib/components/UserRoles/Add.js +161 -199
  151. package/lib/components/UserRoles/Context.js +9 -11
  152. package/lib/components/UserRoles/RoleCell.js +100 -180
  153. package/lib/components/UserRoles/Select.js +54 -157
  154. package/lib/components/UserRoles/Table.js +102 -221
  155. package/lib/components/UserRoles/index.d.ts +6 -6
  156. package/lib/components/UserRoles/index.js +466 -537
  157. package/lib/config/eslint/index.cjs +21 -0
  158. package/lib/config/eslint/lib/order.cjs +22 -0
  159. package/lib/config/eslint/lib/prettier.cjs +18 -0
  160. package/lib/config/eslint/lib/typescript.cjs +86 -0
  161. package/lib/config/eslint/react.cjs +9 -0
  162. package/lib/constants/baseActivity.js +26 -30
  163. package/lib/constants/baseRole.js +10 -14
  164. package/lib/constants/configuration.d.ts +1 -1
  165. package/lib/constants/configuration.js +39 -43
  166. package/lib/constants/externalProviderType.js +6 -10
  167. package/lib/constants/fetchErrorData.js +11 -15
  168. package/lib/constants/index.js +23 -137
  169. package/lib/constants/lockDownBrowser.js +24 -28
  170. package/lib/constants/mockData.d.ts +6 -4
  171. package/lib/constants/mockData.js +326 -385
  172. package/lib/constants/modelStatus.js +11 -15
  173. package/lib/constants/notificationType.js +8 -12
  174. package/lib/constants/operatingSystem.js +8 -12
  175. package/lib/constants/shard.js +7 -11
  176. package/lib/constants/table.js +21 -21
  177. package/lib/constants/tier.js +8 -12
  178. package/lib/constants/userRole.d.ts +2 -1
  179. package/lib/constants/userRole.js +17 -15
  180. package/lib/css/base/_base.css +98 -98
  181. package/lib/css/base/_typography.css +130 -130
  182. package/lib/css/components/_alert.css +86 -86
  183. package/lib/css/components/_bootstrap-grid.css +28 -28
  184. package/lib/css/components/_buttons.css +397 -397
  185. package/lib/css/components/_forms.css +101 -101
  186. package/lib/css/components/_menu.css +56 -56
  187. package/lib/css/components/_modals.css +46 -46
  188. package/lib/css/components/_quill.css +315 -315
  189. package/lib/css/components/_tables.css +497 -497
  190. package/lib/css/components/_tags.css +12 -12
  191. package/lib/css/index-with-variables.css +15 -15
  192. package/lib/css/index.css +14 -14
  193. package/lib/css/utils/_border.css +463 -463
  194. package/lib/css/utils/_color.css +317 -317
  195. package/lib/css/utils/_display.css +312 -305
  196. package/lib/css/utils/_general.css +48 -48
  197. package/lib/css/utils/_icon.css +16 -16
  198. package/lib/css/utils/_text.css +24 -25
  199. package/lib/css/utils/_width.css +60 -60
  200. package/lib/css/variables.css +84 -84
  201. package/lib/endpointMappings.js +193 -197
  202. package/lib/hooks/useCollection.js +65 -83
  203. package/lib/hooks/useCollectionConfiguration.d.ts +1 -0
  204. package/lib/hooks/useCollectionConfiguration.js +88 -185
  205. package/lib/hooks/useCollectionItem.js +58 -155
  206. package/lib/hooks/useGuid.js +10 -21
  207. package/lib/hooks/usePrevious.d.ts +1 -24
  208. package/lib/hooks/usePrevious.js +14 -84
  209. package/lib/index.js +36 -156
  210. package/lib/redux/actionCreator.d.ts +6 -6
  211. package/lib/redux/actionCreator.js +40 -51
  212. package/lib/redux/actions/AuthAction.js +31 -44
  213. package/lib/redux/actions/ModalAction.d.ts +1 -1
  214. package/lib/redux/actions/ModalAction.js +6 -10
  215. package/lib/redux/actions/ModelAction.d.ts +1 -1
  216. package/lib/redux/actions/ModelAction.js +49 -77
  217. package/lib/redux/actions/NotificationAction.js +6 -10
  218. package/lib/redux/actions/SearchAction.js +5 -9
  219. package/lib/redux/actions/index.js +16 -60
  220. package/lib/redux/configureReducers.d.ts +5 -2
  221. package/lib/redux/configureReducers.js +78 -67
  222. package/lib/redux/configureStore.d.ts +2 -2
  223. package/lib/redux/configureStore.js +115 -83
  224. package/lib/redux/helpers.js +2 -7
  225. package/lib/redux/reducers/authReducer.js +46 -52
  226. package/lib/redux/reducers/index.js +15 -41
  227. package/lib/redux/reducers/modalsReducer.js +52 -49
  228. package/lib/redux/reducers/modelsReducer.d.ts +2 -2
  229. package/lib/redux/reducers/modelsReducer.js +182 -183
  230. package/lib/redux/reducers/notificationsReducer.js +21 -26
  231. package/lib/redux/reducers/searchReducer.js +20 -26
  232. package/lib/redux/sagas/appInsightsSaga.js +62 -24
  233. package/lib/redux/sagas/authSaga.js +414 -287
  234. package/lib/redux/sagas/caliperSaga.js +263 -169
  235. package/lib/redux/sagas/clockOffsetSaga.js +77 -36
  236. package/lib/redux/sagas/configurationSaga.js +46 -13
  237. package/lib/redux/sagas/downtimeApiErrorSaga.d.ts +1 -0
  238. package/lib/redux/sagas/downtimeApiErrorSaga.js +64 -23
  239. package/lib/redux/sagas/errorSaga.d.ts +1 -0
  240. package/lib/redux/sagas/errorSaga.js +63 -29
  241. package/lib/redux/sagas/googleAnalyticsSaga.js +69 -29
  242. package/lib/redux/sagas/identityProviderSaga.js +69 -24
  243. package/lib/redux/sagas/initialDataLoadSaga.js +29 -38
  244. package/lib/redux/sagas/lockDownBrowserErrorSaga.d.ts +1 -0
  245. package/lib/redux/sagas/lockDownBrowserErrorSaga.js +81 -32
  246. package/lib/redux/sagas/modelFetchSaga.js +459 -379
  247. package/lib/redux/sagas/noStoreSaga.d.ts +1 -1
  248. package/lib/redux/sagas/noStoreSaga.js +101 -68
  249. package/lib/redux/sagas/postLoginDataSaga.js +79 -47
  250. package/lib/redux/sagas/postLoginRedirectSaga.js +71 -30
  251. package/lib/redux/sagas/rootSaga.js +137 -85
  252. package/lib/redux/sagas/sentrySaga.js +85 -29
  253. package/lib/redux/sagas/userIdSaga.js +54 -18
  254. package/lib/services/codeProviderService.js +29 -25
  255. package/lib/services/dateService.js +12 -14
  256. package/lib/services/documentService.js +13 -18
  257. package/lib/services/fetchService.js +168 -134
  258. package/lib/services/persistenceService.d.ts +4 -4
  259. package/lib/services/persistenceService.js +43 -45
  260. package/lib/services/ticketProviderService.js +33 -29
  261. package/lib/services/tokenPersistenceService.js +9 -13
  262. package/lib/services/windowService.js +17 -21
  263. package/lib/startup.d.ts +1 -1
  264. package/lib/startup.js +135 -132
  265. package/lib/types/AppConfiguration.js +1 -5
  266. package/lib/types/Artifact.js +7 -11
  267. package/lib/types/BaseReduxState.js +1 -5
  268. package/lib/types/Client.js +1 -5
  269. package/lib/types/Collection.d.ts +3 -3
  270. package/lib/types/Collection.js +1 -5
  271. package/lib/types/Configuration.js +1 -5
  272. package/lib/types/DeepLinkingResponseRequest.js +1 -5
  273. package/lib/types/DeletableModel.js +1 -5
  274. package/lib/types/Event.js +1 -5
  275. package/lib/types/ExternalGroup.js +1 -5
  276. package/lib/types/ExternalProvider.js +1 -5
  277. package/lib/types/ExternalTerm.js +1 -5
  278. package/lib/types/Group.js +1 -5
  279. package/lib/types/IdentityProvider.js +1 -5
  280. package/lib/types/LtiLaunch.js +1 -5
  281. package/lib/types/NameOnlyEntity.js +1 -5
  282. package/lib/types/Notification.d.ts +2 -2
  283. package/lib/types/Notification.js +1 -5
  284. package/lib/types/OptionalRecord.d.ts +1 -1
  285. package/lib/types/OptionalRecord.js +1 -5
  286. package/lib/types/OwnerSchedule.d.ts +1 -3
  287. package/lib/types/OwnerSchedule.js +1 -5
  288. package/lib/types/PropertyOfType.d.ts +3 -3
  289. package/lib/types/PropertyOfType.js +1 -5
  290. package/lib/types/Quill.js +1 -5
  291. package/lib/types/RoleDescription.d.ts +1 -0
  292. package/lib/types/RoleDescription.js +1 -5
  293. package/lib/types/Search.js +1 -5
  294. package/lib/types/SimpleLocation.js +1 -5
  295. package/lib/types/UniTime.js +1 -5
  296. package/lib/types/User.js +1 -5
  297. package/lib/types/UserRole.js +1 -5
  298. package/lib/types/auth/AuthState.js +1 -5
  299. package/lib/types/auth/CasV1LoginRequestBody.js +1 -5
  300. package/lib/types/auth/ClientCredentials.js +1 -5
  301. package/lib/types/auth/CodeProviderService.js +1 -5
  302. package/lib/types/auth/LocalLoginRequestBody.js +1 -5
  303. package/lib/types/auth/TicketProviderService.js +1 -5
  304. package/lib/types/auth/TokenPersistenceService.js +1 -5
  305. package/lib/types/auth/index.js +18 -82
  306. package/lib/types/index.js +39 -313
  307. package/lib/types/net/EndpointConfig.js +1 -5
  308. package/lib/types/net/EndpointMapping.js +1 -5
  309. package/lib/types/net/EndpointMappings.js +1 -5
  310. package/lib/types/net/ErrorHandler.d.ts +1 -1
  311. package/lib/types/net/ErrorHandler.js +1 -5
  312. package/lib/types/net/FetchConfig.d.ts +1 -1
  313. package/lib/types/net/FetchConfig.js +1 -5
  314. package/lib/types/net/FetchErrorData.js +6 -10
  315. package/lib/types/net/FetchResult.d.ts +2 -2
  316. package/lib/types/net/FetchResult.js +1 -5
  317. package/lib/types/net/HTTPMethod.d.ts +1 -1
  318. package/lib/types/net/HTTPMethod.js +1 -5
  319. package/lib/types/net/HTTPStatusCode.js +12 -16
  320. package/lib/types/net/Metadata.js +1 -5
  321. package/lib/types/net/Model.js +1 -5
  322. package/lib/types/net/ModelCollection.js +1 -5
  323. package/lib/types/net/ModelsState.js +1 -5
  324. package/lib/types/net/OAuthToken.js +1 -5
  325. package/lib/types/net/OAuthTokenOrNull.d.ts +1 -1
  326. package/lib/types/net/OAuthTokenOrNull.js +1 -5
  327. package/lib/types/net/TokenAccessFunction.d.ts +1 -1
  328. package/lib/types/net/TokenAccessFunction.js +1 -5
  329. package/lib/types/net/index.js +27 -181
  330. package/lib/utils/baseActivity.d.ts +2 -2
  331. package/lib/utils/baseActivity.js +136 -138
  332. package/lib/utils/baseRole.js +33 -37
  333. package/lib/utils/collection.js +310 -432
  334. package/lib/utils/cookies.js +37 -22
  335. package/lib/utils/date.js +320 -320
  336. package/lib/utils/dom.js +174 -186
  337. package/lib/utils/domainIdentifier.js +9 -9
  338. package/lib/utils/entityUserRole.js +2 -6
  339. package/lib/utils/error.d.ts +1 -1
  340. package/lib/utils/error.js +16 -18
  341. package/lib/utils/events.js +33 -40
  342. package/lib/utils/externalGroup.js +21 -25
  343. package/lib/utils/externalProviders.js +4 -8
  344. package/lib/utils/externalTerms.js +6 -9
  345. package/lib/utils/fetch.d.ts +1 -1
  346. package/lib/utils/fetch.js +185 -188
  347. package/lib/utils/group.js +9 -17
  348. package/lib/utils/groupDates.d.ts +1 -1
  349. package/lib/utils/groupDates.js +39 -43
  350. package/lib/utils/groupRoles.js +28 -28
  351. package/lib/utils/lockDownBrowser.js +12 -16
  352. package/lib/utils/logger.js +25 -30
  353. package/lib/utils/lti.js +5 -10
  354. package/lib/utils/model.d.ts +2 -2
  355. package/lib/utils/model.js +48 -39
  356. package/lib/utils/number.js +26 -23
  357. package/lib/utils/promise.d.ts +1 -6
  358. package/lib/utils/promise.js +15 -34
  359. package/lib/utils/quill.js +77 -66
  360. package/lib/utils/route.d.ts +2 -2
  361. package/lib/utils/route.js +60 -61
  362. package/lib/utils/search.d.ts +1 -1
  363. package/lib/utils/search.js +85 -78
  364. package/lib/utils/shard.js +41 -38
  365. package/lib/utils/sort.d.ts +3 -3
  366. package/lib/utils/sort.js +58 -62
  367. package/lib/utils/string.js +10 -14
  368. package/lib/utils/table.d.ts +3 -3
  369. package/lib/utils/table.js +36 -39
  370. package/lib/utils/timezone.js +26 -12
  371. package/lib/utils/url.d.ts +1 -2
  372. package/lib/utils/url.js +201 -146
  373. package/lib/utils/user.js +61 -59
  374. package/lib/utils/userAgent.js +11 -11
  375. package/lib/utils/userRole.d.ts +3 -3
  376. package/lib/utils/userRole.js +56 -58
  377. package/package.json +207 -226
  378. package/lib/config/eslint/index.d.ts +0 -2
  379. package/lib/config/eslint/index.js +0 -36
  380. package/lib/config/eslint/lib/order.d.ts +0 -3
  381. package/lib/config/eslint/lib/order.js +0 -30
  382. package/lib/config/eslint/lib/prettier.d.ts +0 -3
  383. package/lib/config/eslint/lib/prettier.js +0 -23
  384. package/lib/config/eslint/lib/typescript.d.ts +0 -2
  385. package/lib/config/eslint/lib/typescript.js +0 -98
  386. package/lib/config/eslint/react.d.ts +0 -2
  387. package/lib/config/eslint/react.js +0 -30
  388. package/lib/hooks/useEventCalback.d.ts +0 -14
  389. package/lib/hooks/useEventCalback.js +0 -51
  390. package/lib/types/externals.d.js +0 -2
@@ -1,436 +1,377 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.internalServerErrorData = exports.forbiddenErrorData = exports.defaultUser = exports.defaultNamelessUserInfo = exports.defaultNamelessGroupLearner = exports.defaultNamedUserInfo = exports.defaultNamedGroupLearner = exports.defaultLocation = exports.defaultGroupUserRoles = exports.defaultGroupOwnerUserInfo = exports.defaultGroupOwner = exports.defaultGroupLearner = exports.defaultGroupGrader = exports.defaultGroup = exports.defaultExternalTerms = exports.defaultExternalProviders = exports.defaultExternalGroupLearner = exports.defaultDate = exports.defaultAppConfiguration = exports.defaultAdminUserRoles = exports.currentDates = exports.badRequestFullErrorData = exports.badRequestErrorData = void 0;
7
- exports.mockGroups = mockGroups;
8
- exports.mockHistory = mockHistory;
9
- exports.mockLtiGroups = mockLtiGroups;
10
- exports.mockPastAndCurrentGroups = mockPastAndCurrentGroups;
11
- exports.mockPastGroups = mockPastGroups;
12
- exports.mockSyncedGroups = mockSyncedGroups;
13
- exports.mockTermAndUniTimeGroups = mockTermAndUniTimeGroups;
14
- exports.mockTermGroups = mockTermGroups;
15
- exports.mockUser = mockUser;
16
- exports.unauthorizedErrorData = exports.requestTimedOutErrorData = exports.pastDates = void 0;
17
- var _lodash = require("lodash");
18
- var _externalProviderType = require("../constants/externalProviderType");
19
- var _types = require("../types");
20
- var _baseRole = require("./baseRole");
21
- var _tier = require("./tier");
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.badRequestFullErrorData = exports.badRequestErrorData = exports.unauthorizedErrorData = exports.forbiddenErrorData = exports.requestTimedOutErrorData = exports.internalServerErrorData = exports.defaultExternalTerms = exports.defaultExternalProviders = exports.mockPastAndCurrentGroups = exports.mockPastGroups = exports.mockTermAndUniTimeGroups = exports.mockTermGroups = exports.mockLtiGroups = exports.mockSyncedGroups = exports.mockGroups = exports.defaultGroup = exports.defaultAdminUserRoles = exports.defaultGroupUserRoles = exports.defaultGroupGrader = exports.defaultExternalGroupLearner = exports.defaultGroupLearner = exports.defaultNamedGroupLearner = exports.defaultNamelessGroupLearner = exports.defaultGroupOwner = exports.defaultGroupOwnerUserInfo = exports.mockUser = exports.defaultNamedUserInfo = exports.defaultNamelessUserInfo = exports.defaultUser = exports.defaultDate = exports.currentDates = exports.pastDates = exports.mockHistory = exports.defaultLocation = exports.defaultAppConfiguration = void 0;
15
+ var lodash_1 = require("lodash");
16
+ var externalProviderType_1 = require("../constants/externalProviderType");
17
+ var types_1 = require("../types");
18
+ var baseRole_1 = require("./baseRole");
19
+ var tier_1 = require("./tier");
22
20
  //#region General
23
-
24
- const defaultAppConfiguration = exports.defaultAppConfiguration = {
25
- NODE_ENV: 'test',
26
- APP_NAME: 'StudioKit',
27
- TIER: _tier.TIER.LOCAL,
28
- API_BASE_URL: '',
29
- ROOT_DOMAIN: 'studiokit.org',
30
- CLIENT_ID: 'web',
31
- CLIENT_SECRET: '****',
32
- IS_DOWNTIME: false,
33
- LMS_NAME: 'Brightspace',
34
- GRADABLE_DESCRIPTOR: 'assessment'
21
+ exports.defaultAppConfiguration = {
22
+ NODE_ENV: 'test',
23
+ APP_NAME: 'StudioKit',
24
+ TIER: tier_1.TIER.LOCAL,
25
+ API_BASE_URL: '',
26
+ ROOT_DOMAIN: 'studiokit.org',
27
+ CLIENT_ID: 'web',
28
+ CLIENT_SECRET: '****',
29
+ IS_DOWNTIME: false,
30
+ LMS_NAME: 'Brightspace',
31
+ GRADABLE_DESCRIPTOR: 'assessment'
35
32
  };
36
- const defaultLocation = exports.defaultLocation = {
37
- hash: '',
38
- host: 'purdue.dev.studiokit.org',
39
- hostname: 'purdue.dev.studiokit.org',
40
- href: 'https://purdue.dev.studiokit.org/',
41
- pathname: '/',
42
- port: '',
43
- protocol: 'https:',
44
- search: ''
33
+ exports.defaultLocation = {
34
+ hash: '',
35
+ host: 'purdue.dev.studiokit.org',
36
+ hostname: 'purdue.dev.studiokit.org',
37
+ href: 'https://purdue.dev.studiokit.org/',
38
+ pathname: '/',
39
+ port: '',
40
+ protocol: 'https:',
41
+ search: ''
45
42
  };
46
43
  function mockHistory() {
47
- return {
48
- length: 0,
49
- scrollRestoration: 'auto',
50
- state: {},
51
- back: jest.fn(),
52
- forward: jest.fn(),
53
- go: jest.fn(),
54
- pushState: jest.fn(),
55
- replaceState: jest.fn()
56
- };
44
+ return {
45
+ length: 0,
46
+ scrollRestoration: 'auto',
47
+ state: {},
48
+ back: jest.fn(),
49
+ forward: jest.fn(),
50
+ go: jest.fn(),
51
+ pushState: jest.fn(),
52
+ replaceState: jest.fn()
53
+ };
57
54
  }
58
-
55
+ exports.mockHistory = mockHistory;
59
56
  //#endregion General
60
-
61
57
  //#region Dates
62
-
63
58
  /** 5/15/18 - 8/14/18 */
64
- const pastDates = exports.pastDates = {
65
- startDate: '2018-05-15T04:00:00.000Z',
66
- endDate: '2018-08-15T03:59:59.999Z'
59
+ exports.pastDates = {
60
+ startDate: '2018-05-15T04:00:00.000Z',
61
+ endDate: '2018-08-15T03:59:59.999Z'
67
62
  };
68
-
69
63
  /** 8/15/18 - 12/31/18: */
70
- const currentDates = exports.currentDates = {
71
- startDate: '2018-08-15T04:00:00.000Z',
72
- endDate: '2019-01-01T04:59:59.999Z'
64
+ exports.currentDates = {
65
+ startDate: '2018-08-15T04:00:00.000Z',
66
+ endDate: '2019-01-01T04:59:59.999Z'
73
67
  };
74
-
75
- /**
76
- * The default date and time for all tests. Used by the 'mockdate' package. One month into `currentDates`.
68
+ /**
69
+ * The default date and time for all tests. Used by the 'mockdate' package. One month into `currentDates`.
77
70
  */
78
- const defaultDate = exports.defaultDate = '2018-09-15T04:00:00.000Z';
79
-
71
+ exports.defaultDate = '2018-09-15T04:00:00.000Z';
80
72
  //#endregion Dates
81
-
82
73
  //#region Users
83
-
84
- const defaultUser = exports.defaultUser = {
85
- userInfo: {
86
- id: '1',
87
- firstName: null,
88
- lastName: null,
89
- email: null,
90
- uid: null,
91
- activities: [],
92
- roles: [],
93
- dateDemoGenerationSucceeded: null,
94
- dateStored: defaultDate,
95
- dateLastUpdated: defaultDate,
96
- isImpersonated: false,
97
- careerAccountAlias: null,
98
- employeeNumber: null,
99
- userName: 'test',
100
- puid: null,
101
- lockDownBrowserTestLaunchUrl: null
102
- }
74
+ exports.defaultUser = {
75
+ userInfo: {
76
+ id: '1',
77
+ firstName: null,
78
+ lastName: null,
79
+ email: null,
80
+ uid: null,
81
+ activities: [],
82
+ roles: [],
83
+ dateDemoGenerationSucceeded: null,
84
+ dateStored: exports.defaultDate,
85
+ dateLastUpdated: exports.defaultDate,
86
+ isImpersonated: false,
87
+ careerAccountAlias: null,
88
+ employeeNumber: null,
89
+ userName: 'test',
90
+ puid: null,
91
+ lockDownBrowserTestLaunchUrl: null
92
+ }
103
93
  };
104
- const defaultNamelessUserInfo = exports.defaultNamelessUserInfo = {
105
- ...defaultUser.userInfo,
106
- ...{
94
+ exports.defaultNamelessUserInfo = __assign(__assign({}, exports.defaultUser.userInfo), {
107
95
  email: 'nicki@minaj.superbass',
108
96
  uid: 'nm-nameless'
109
- }
110
- };
111
- const defaultNamedUserInfo = exports.defaultNamedUserInfo = {
112
- ...defaultUser.userInfo,
113
- ...{
97
+ });
98
+ exports.defaultNamedUserInfo = __assign(__assign({}, exports.defaultUser.userInfo), {
114
99
  firstName: 'Nicki',
115
100
  lastName: 'Minaj',
116
101
  uid: 'nm-named'
117
- }
118
- };
119
- function mockUser() {
120
- let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
121
- return (0, _lodash.merge)({
122
- userInfo: {
123
- activities
124
- }
125
- }, defaultUser);
102
+ });
103
+ function mockUser(activities) {
104
+ if (activities === void 0) { activities = []; }
105
+ return lodash_1.merge({ userInfo: { activities: activities } }, exports.defaultUser);
126
106
  }
127
- const defaultGroupOwnerUserInfo = exports.defaultGroupOwnerUserInfo = {
128
- ...defaultUser.userInfo,
129
- id: '2',
130
- firstName: 'Jane',
131
- lastName: 'Doe',
132
- email: 'jane@gmail.com'
133
- };
134
- const defaultGroupOwner = exports.defaultGroupOwner = {
135
- id: '1',
136
- userId: '2',
137
- firstName: 'Jane',
138
- lastName: 'Doe',
139
- email: 'jane@gmail.com',
140
- uid: 'jane',
141
- entityId: 1,
142
- role: _baseRole.BASE_ROLE.GROUP_OWNER,
143
- isExternal: false
107
+ exports.mockUser = mockUser;
108
+ exports.defaultGroupOwnerUserInfo = __assign(__assign({}, exports.defaultUser.userInfo), { id: '2', firstName: 'Jane', lastName: 'Doe', email: 'jane@gmail.com' });
109
+ exports.defaultGroupOwner = {
110
+ id: '1',
111
+ userId: '2',
112
+ firstName: 'Jane',
113
+ lastName: 'Doe',
114
+ email: 'jane@gmail.com',
115
+ uid: 'jane',
116
+ entityId: 1,
117
+ role: baseRole_1.BASE_ROLE.GROUP_OWNER,
118
+ isExternal: false
144
119
  };
145
- const defaultNamelessGroupLearner = exports.defaultNamelessGroupLearner = {
146
- id: '2',
147
- userId: '3',
148
- firstName: null,
149
- lastName: null,
150
- email: 'nicki@minaj.superbass',
151
- uid: 'nm-nameless',
152
- entityId: 1,
153
- role: _baseRole.BASE_ROLE.GROUP_LEARNER,
154
- isExternal: false
120
+ exports.defaultNamelessGroupLearner = {
121
+ id: '2',
122
+ userId: '3',
123
+ firstName: null,
124
+ lastName: null,
125
+ email: 'nicki@minaj.superbass',
126
+ uid: 'nm-nameless',
127
+ entityId: 1,
128
+ role: baseRole_1.BASE_ROLE.GROUP_LEARNER,
129
+ isExternal: false
155
130
  };
156
- const defaultNamedGroupLearner = exports.defaultNamedGroupLearner = {
157
- id: '3',
158
- userId: '4',
159
- firstName: 'Nicki',
160
- lastName: 'Minaj',
161
- email: null,
162
- uid: 'nm-named',
163
- entityId: 1,
164
- role: _baseRole.BASE_ROLE.GROUP_LEARNER,
165
- isExternal: false
131
+ exports.defaultNamedGroupLearner = {
132
+ id: '3',
133
+ userId: '4',
134
+ firstName: 'Nicki',
135
+ lastName: 'Minaj',
136
+ email: null,
137
+ uid: 'nm-named',
138
+ entityId: 1,
139
+ role: baseRole_1.BASE_ROLE.GROUP_LEARNER,
140
+ isExternal: false
166
141
  };
167
- const defaultGroupLearner = exports.defaultGroupLearner = {
168
- id: '4',
169
- userId: '5',
170
- firstName: 'Joe',
171
- lastName: 'Schmoe',
172
- email: 'nope@gmail.com',
173
- uid: 'nope',
174
- entityId: 1,
175
- role: _baseRole.BASE_ROLE.GROUP_LEARNER,
176
- isExternal: false
142
+ exports.defaultGroupLearner = {
143
+ id: '4',
144
+ userId: '5',
145
+ firstName: 'Joe',
146
+ lastName: 'Schmoe',
147
+ email: 'nope@gmail.com',
148
+ uid: 'nope',
149
+ entityId: 1,
150
+ role: baseRole_1.BASE_ROLE.GROUP_LEARNER,
151
+ isExternal: false
177
152
  };
178
- const defaultExternalGroupLearner = exports.defaultExternalGroupLearner = {
179
- id: '5',
180
- userId: '6',
181
- firstName: 'Bob',
182
- lastName: 'Loblaw',
183
- email: 'bobloblaw@lawblog.com',
184
- uid: 'bobloblaw',
185
- entityId: 1,
186
- role: _baseRole.BASE_ROLE.GROUP_LEARNER,
187
- isExternal: true
153
+ exports.defaultExternalGroupLearner = {
154
+ id: '5',
155
+ userId: '6',
156
+ firstName: 'Bob',
157
+ lastName: 'Loblaw',
158
+ email: 'bobloblaw@lawblog.com',
159
+ uid: 'bobloblaw',
160
+ entityId: 1,
161
+ role: baseRole_1.BASE_ROLE.GROUP_LEARNER,
162
+ isExternal: true
188
163
  };
189
- const defaultGroupGrader = exports.defaultGroupGrader = {
190
- id: '6',
191
- userId: '7',
192
- firstName: 'Grader',
193
- lastName: 'McGradeface',
194
- email: 'grader@gmail.com',
195
- uid: 'grader',
196
- entityId: 1,
197
- role: _baseRole.BASE_ROLE.GROUP_GRADER,
198
- isExternal: false
164
+ exports.defaultGroupGrader = {
165
+ id: '6',
166
+ userId: '7',
167
+ firstName: 'Grader',
168
+ lastName: 'McGradeface',
169
+ email: 'grader@gmail.com',
170
+ uid: 'grader',
171
+ entityId: 1,
172
+ role: baseRole_1.BASE_ROLE.GROUP_GRADER,
173
+ isExternal: false
199
174
  };
200
- const defaultGroupUserRoles = exports.defaultGroupUserRoles = [defaultGroupOwner, defaultGroupLearner, defaultExternalGroupLearner];
201
- const defaultAdminUserRoles = exports.defaultAdminUserRoles = [{
202
- id: '1',
203
- firstName: 'Joe',
204
- lastName: 'Schmo',
205
- email: null,
206
- uid: null,
207
- role: _baseRole.BASE_ROLE.ADMIN
208
- }, {
209
- id: '2',
210
- firstName: null,
211
- lastName: null,
212
- email: 'carlysimon@clouds.in.coffee',
213
- uid: 'carlysimon',
214
- role: _baseRole.BASE_ROLE.ADMIN
215
- }];
216
-
175
+ exports.defaultGroupUserRoles = [exports.defaultGroupOwner, exports.defaultGroupLearner, exports.defaultExternalGroupLearner];
176
+ exports.defaultAdminUserRoles = [
177
+ {
178
+ id: '1',
179
+ firstName: 'Joe',
180
+ lastName: 'Schmo',
181
+ email: null,
182
+ uid: null,
183
+ role: baseRole_1.BASE_ROLE.ADMIN
184
+ },
185
+ {
186
+ id: '2',
187
+ firstName: null,
188
+ lastName: null,
189
+ email: 'carlysimon@clouds.in.coffee',
190
+ uid: 'carlysimon',
191
+ role: baseRole_1.BASE_ROLE.ADMIN
192
+ }
193
+ ];
217
194
  //#endregion Users
218
-
219
195
  //#region Groups
220
-
221
- const defaultGroup = exports.defaultGroup = {
222
- roles: [],
223
- activities: [],
224
- owners: [{
225
- id: '1',
226
- entityId: 1,
227
- firstName: 'Instructor',
228
- lastName: 'McInstructor',
229
- email: null,
230
- uid: null
231
- }],
232
- graders: [],
233
- id: 1,
234
- name: 'McGroup',
235
- externalTermId: null,
236
- startDate: currentDates.startDate,
237
- endDate: currentDates.endDate,
238
- isDeleted: false,
239
- isRosterSyncEnabled: false,
240
- externalGroups: []
196
+ exports.defaultGroup = {
197
+ roles: [],
198
+ activities: [],
199
+ owners: [
200
+ {
201
+ id: '1',
202
+ entityId: 1,
203
+ firstName: 'Instructor',
204
+ lastName: 'McInstructor',
205
+ email: null,
206
+ uid: null
207
+ }
208
+ ],
209
+ graders: [],
210
+ id: 1,
211
+ name: 'McGroup',
212
+ externalTermId: null,
213
+ startDate: exports.currentDates.startDate,
214
+ endDate: exports.currentDates.endDate,
215
+ isDeleted: false,
216
+ isRosterSyncEnabled: false,
217
+ externalGroups: []
241
218
  };
242
- function mockGroups() {
243
- let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
244
- let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
245
- return {
246
- '1': (0, _lodash.merge)({
247
- activities,
248
- roles
249
- }, defaultGroup)
250
- };
219
+ function mockGroups(activities, roles) {
220
+ if (activities === void 0) { activities = []; }
221
+ if (roles === void 0) { roles = []; }
222
+ return { '1': lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup) };
251
223
  }
252
- function mockSyncedGroups() {
253
- let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
254
- let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
255
- const rosterSyncEnabledGroup = (0, _lodash.merge)({
256
- activities,
257
- roles
258
- }, defaultGroup);
259
- rosterSyncEnabledGroup.isRosterSyncEnabled = true;
260
- return {
261
- '1': rosterSyncEnabledGroup
262
- };
224
+ exports.mockGroups = mockGroups;
225
+ function mockSyncedGroups(activities, roles) {
226
+ if (activities === void 0) { activities = []; }
227
+ if (roles === void 0) { roles = []; }
228
+ var rosterSyncEnabledGroup = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup);
229
+ rosterSyncEnabledGroup.isRosterSyncEnabled = true;
230
+ return { '1': rosterSyncEnabledGroup };
263
231
  }
264
- function mockLtiGroups() {
265
- let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
266
- let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
267
- const ltiGroup = (0, _lodash.merge)({
268
- activities,
269
- roles
270
- }, defaultGroup);
271
- ltiGroup.isRosterSyncEnabled = true;
272
- ltiGroup.externalGroups = [{
273
- id: 1,
274
- externalProviderId: 2,
275
- groupId: 1,
276
- userId: '1',
277
- name: 'LTI ExternalGroup',
278
- description: 'LTI 101',
279
- gradesUrl: 'www.lti.org',
280
- rosterUrl: null,
281
- isAutoGradePushEnabled: false,
282
- externalId: '1',
283
- typename: 'ExternalGroup'
284
- }];
285
- return {
286
- '1': ltiGroup
287
- };
232
+ exports.mockSyncedGroups = mockSyncedGroups;
233
+ function mockLtiGroups(activities, roles) {
234
+ if (activities === void 0) { activities = []; }
235
+ if (roles === void 0) { roles = []; }
236
+ var ltiGroup = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup);
237
+ ltiGroup.isRosterSyncEnabled = true;
238
+ ltiGroup.externalGroups = [
239
+ {
240
+ id: 1,
241
+ externalProviderId: 2,
242
+ groupId: 1,
243
+ userId: '1',
244
+ name: 'LTI ExternalGroup',
245
+ description: 'LTI 101',
246
+ gradesUrl: 'www.lti.org',
247
+ rosterUrl: null,
248
+ isAutoGradePushEnabled: false,
249
+ externalId: '1',
250
+ typename: 'ExternalGroup'
251
+ }
252
+ ];
253
+ return { '1': ltiGroup };
288
254
  }
289
- function mockTermGroups() {
290
- let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
291
- let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
292
- const group = (0, _lodash.merge)({
293
- activities,
294
- roles
295
- }, defaultGroup);
296
- group.startDate = null;
297
- group.endDate = null;
298
- group.externalTermId = 1;
299
- return {
300
- '1': group
301
- };
255
+ exports.mockLtiGroups = mockLtiGroups;
256
+ function mockTermGroups(activities, roles) {
257
+ if (activities === void 0) { activities = []; }
258
+ if (roles === void 0) { roles = []; }
259
+ var group = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup);
260
+ group.startDate = null;
261
+ group.endDate = null;
262
+ group.externalTermId = 1;
263
+ return { '1': group };
302
264
  }
303
- function mockTermAndUniTimeGroups() {
304
- let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
305
- let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
306
- const group = (0, _lodash.merge)({
307
- activities,
308
- roles
309
- }, defaultGroup);
310
- group.startDate = null;
311
- group.endDate = null;
312
- group.externalTermId = 1;
313
- group.externalGroups = [{
314
- id: 1,
315
- externalProviderId: 1,
316
- groupId: 1,
317
- userId: '1',
318
- name: 'UniTime ExternalGroup',
319
- description: 'UniTime 101',
320
- gradesUrl: null,
321
- rosterUrl: null,
322
- isAutoGradePushEnabled: false,
323
- externalId: '1',
324
- typename: 'ExternalGroup'
325
- }];
326
- return {
327
- '1': group
328
- };
265
+ exports.mockTermGroups = mockTermGroups;
266
+ function mockTermAndUniTimeGroups(activities, roles) {
267
+ if (activities === void 0) { activities = []; }
268
+ if (roles === void 0) { roles = []; }
269
+ var group = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup);
270
+ group.startDate = null;
271
+ group.endDate = null;
272
+ group.externalTermId = 1;
273
+ group.externalGroups = [
274
+ {
275
+ id: 1,
276
+ externalProviderId: 1,
277
+ groupId: 1,
278
+ userId: '1',
279
+ name: 'UniTime ExternalGroup',
280
+ description: 'UniTime 101',
281
+ gradesUrl: null,
282
+ rosterUrl: null,
283
+ isAutoGradePushEnabled: false,
284
+ externalId: '1',
285
+ typename: 'ExternalGroup'
286
+ }
287
+ ];
288
+ return { '1': group };
329
289
  }
330
- function mockPastGroups() {
331
- let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
332
- let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
333
- const pastGroup = (0, _lodash.merge)({
334
- activities,
335
- roles
336
- }, defaultGroup, pastDates);
337
- return {
338
- '1': pastGroup
339
- };
290
+ exports.mockTermAndUniTimeGroups = mockTermAndUniTimeGroups;
291
+ function mockPastGroups(activities, roles) {
292
+ if (activities === void 0) { activities = []; }
293
+ if (roles === void 0) { roles = []; }
294
+ var pastGroup = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup, exports.pastDates);
295
+ return { '1': pastGroup };
340
296
  }
341
- function mockPastAndCurrentGroups() {
342
- let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
343
- let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
344
- const pastGroup = (0, _lodash.merge)({
345
- activities,
346
- roles
347
- }, defaultGroup, pastDates);
348
- const currentGroup = (0, _lodash.merge)({
349
- activities,
350
- roles
351
- }, defaultGroup, {
352
- id: '2'
353
- }, currentDates);
354
- return {
355
- '1': pastGroup,
356
- '2': currentGroup
357
- };
297
+ exports.mockPastGroups = mockPastGroups;
298
+ function mockPastAndCurrentGroups(activities, roles) {
299
+ if (activities === void 0) { activities = []; }
300
+ if (roles === void 0) { roles = []; }
301
+ var pastGroup = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup, exports.pastDates);
302
+ var currentGroup = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup, {
303
+ id: '2'
304
+ }, exports.currentDates);
305
+ return { '1': pastGroup, '2': currentGroup };
358
306
  }
359
-
307
+ exports.mockPastAndCurrentGroups = mockPastAndCurrentGroups;
360
308
  //#endregion Groups
361
-
362
309
  //#region ExternalTerms + ExternalProviders
363
-
364
- const defaultExternalProviders = exports.defaultExternalProviders = {
365
- '1': {
366
- id: 1,
367
- typename: _externalProviderType.EXTERNAL_PROVIDER_TYPE.UNITIME,
368
- termSyncEnabled: true,
369
- rosterSyncEnabled: true,
370
- gradePushEnabled: false,
371
- shouldDisplayCreateNonLtiGroupAlert: false
372
- },
373
- '2': {
374
- id: 2,
375
- typename: _externalProviderType.EXTERNAL_PROVIDER_TYPE.LTI,
376
- termSyncEnabled: false,
377
- rosterSyncEnabled: false,
378
- gradePushEnabled: true,
379
- shouldDisplayCreateNonLtiGroupAlert: true
380
- }
310
+ exports.defaultExternalProviders = {
311
+ '1': {
312
+ id: 1,
313
+ typename: externalProviderType_1.EXTERNAL_PROVIDER_TYPE.UNITIME,
314
+ termSyncEnabled: true,
315
+ rosterSyncEnabled: true,
316
+ gradePushEnabled: false,
317
+ shouldDisplayCreateNonLtiGroupAlert: false
318
+ },
319
+ '2': {
320
+ id: 2,
321
+ typename: externalProviderType_1.EXTERNAL_PROVIDER_TYPE.LTI,
322
+ termSyncEnabled: false,
323
+ rosterSyncEnabled: false,
324
+ gradePushEnabled: true,
325
+ shouldDisplayCreateNonLtiGroupAlert: true
326
+ }
381
327
  };
382
- const defaultExternalTerms = exports.defaultExternalTerms = {
383
- '1': {
384
- id: 1,
385
- externalProviderId: 1,
386
- externalId: 'foo',
387
- name: 'UniTime Fall Term',
388
- startDate: currentDates.startDate,
389
- endDate: currentDates.endDate
390
- }
328
+ exports.defaultExternalTerms = {
329
+ '1': {
330
+ id: 1,
331
+ externalProviderId: 1,
332
+ externalId: 'foo',
333
+ name: 'UniTime Fall Term',
334
+ startDate: exports.currentDates.startDate,
335
+ endDate: exports.currentDates.endDate
336
+ }
391
337
  };
392
-
393
338
  //#endregion ExternalTerms + ExternalProviders
394
-
395
339
  //#region FetchErrorData
396
-
397
- const internalServerErrorData = exports.internalServerErrorData = {
398
- status: _types.HTTP_STATUS_CODE.INTERNAL_SERVER_ERROR,
399
- title: 'Error',
400
- detail: 'An error has occurred.'
340
+ exports.internalServerErrorData = {
341
+ status: types_1.HTTP_STATUS_CODE.INTERNAL_SERVER_ERROR,
342
+ title: 'Error',
343
+ detail: 'An error has occurred.'
401
344
  };
402
- const requestTimedOutErrorData = exports.requestTimedOutErrorData = {
403
- status: _types.HTTP_STATUS_CODE.REQUEST_TIMEOUT,
404
- title: 'Request Timeout',
405
- detail: null
345
+ exports.requestTimedOutErrorData = {
346
+ status: types_1.HTTP_STATUS_CODE.REQUEST_TIMEOUT,
347
+ title: 'Request Timeout',
348
+ detail: null
406
349
  };
407
- const forbiddenErrorData = exports.forbiddenErrorData = {
408
- status: _types.HTTP_STATUS_CODE.FORBIDDEN,
409
- title: 'Forbidden',
410
- detail: 'Your request has been denied. You do not have access.'
350
+ exports.forbiddenErrorData = {
351
+ status: types_1.HTTP_STATUS_CODE.FORBIDDEN,
352
+ title: 'Forbidden',
353
+ detail: 'Your request has been denied. You do not have access.'
411
354
  };
412
- const unauthorizedErrorData = exports.unauthorizedErrorData = {
413
- status: _types.HTTP_STATUS_CODE.UNAUTHORIZED,
414
- title: 'Unauthorized',
415
- detail: 'Your request is unauthorized. You must authenticate.'
355
+ exports.unauthorizedErrorData = {
356
+ status: types_1.HTTP_STATUS_CODE.UNAUTHORIZED,
357
+ title: 'Unauthorized',
358
+ detail: 'Your request is unauthorized. You must authenticate.'
416
359
  };
417
- const badRequestErrorData = exports.badRequestErrorData = {
418
- status: _types.HTTP_STATUS_CODE.BAD_REQUEST,
419
- title: 'Bad Request',
420
- detail: 'Reasons'
360
+ exports.badRequestErrorData = {
361
+ status: types_1.HTTP_STATUS_CODE.BAD_REQUEST,
362
+ title: 'Bad Request',
363
+ detail: 'Reasons'
421
364
  };
422
- const badRequestFullErrorData = exports.badRequestFullErrorData = {
423
- status: _types.HTTP_STATUS_CODE.BAD_REQUEST,
424
- title: 'Bad Request',
425
- detail: 'Reasons',
426
- // include all optional properties
427
- type: 'https://tools.ietf.org/html/rfc7231#section-6.5.1',
428
- instance: 'instance',
429
- traceId: '00-3914b43b452b94e3ff4c327922880a03-4cfed6fe42afdd8f-00',
430
- errors: {
431
- password: ['The Password must be at least 6 characters long.']
432
- }
365
+ exports.badRequestFullErrorData = {
366
+ status: types_1.HTTP_STATUS_CODE.BAD_REQUEST,
367
+ title: 'Bad Request',
368
+ detail: 'Reasons',
369
+ // include all optional properties
370
+ type: 'https://tools.ietf.org/html/rfc7231#section-6.5.1',
371
+ instance: 'instance',
372
+ traceId: '00-3914b43b452b94e3ff4c327922880a03-4cfed6fe42afdd8f-00',
373
+ errors: {
374
+ password: ['The Password must be at least 6 characters long.']
375
+ }
433
376
  };
434
-
435
377
  //#endregion FetchErrorData
436
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9leHRlcm5hbFByb3ZpZGVyVHlwZSIsIl90eXBlcyIsIl9iYXNlUm9sZSIsIl90aWVyIiwiZGVmYXVsdEFwcENvbmZpZ3VyYXRpb24iLCJleHBvcnRzIiwiTk9ERV9FTlYiLCJBUFBfTkFNRSIsIlRJRVIiLCJMT0NBTCIsIkFQSV9CQVNFX1VSTCIsIlJPT1RfRE9NQUlOIiwiQ0xJRU5UX0lEIiwiQ0xJRU5UX1NFQ1JFVCIsIklTX0RPV05USU1FIiwiTE1TX05BTUUiLCJHUkFEQUJMRV9ERVNDUklQVE9SIiwiZGVmYXVsdExvY2F0aW9uIiwiaGFzaCIsImhvc3QiLCJob3N0bmFtZSIsImhyZWYiLCJwYXRobmFtZSIsInBvcnQiLCJwcm90b2NvbCIsInNlYXJjaCIsIm1vY2tIaXN0b3J5IiwibGVuZ3RoIiwic2Nyb2xsUmVzdG9yYXRpb24iLCJzdGF0ZSIsImJhY2siLCJqZXN0IiwiZm4iLCJmb3J3YXJkIiwiZ28iLCJwdXNoU3RhdGUiLCJyZXBsYWNlU3RhdGUiLCJwYXN0RGF0ZXMiLCJzdGFydERhdGUiLCJlbmREYXRlIiwiY3VycmVudERhdGVzIiwiZGVmYXVsdERhdGUiLCJkZWZhdWx0VXNlciIsInVzZXJJbmZvIiwiaWQiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImVtYWlsIiwidWlkIiwiYWN0aXZpdGllcyIsInJvbGVzIiwiZGF0ZURlbW9HZW5lcmF0aW9uU3VjY2VlZGVkIiwiZGF0ZVN0b3JlZCIsImRhdGVMYXN0VXBkYXRlZCIsImlzSW1wZXJzb25hdGVkIiwiY2FyZWVyQWNjb3VudEFsaWFzIiwiZW1wbG95ZWVOdW1iZXIiLCJ1c2VyTmFtZSIsInB1aWQiLCJsb2NrRG93bkJyb3dzZXJUZXN0TGF1bmNoVXJsIiwiZGVmYXVsdE5hbWVsZXNzVXNlckluZm8iLCJkZWZhdWx0TmFtZWRVc2VySW5mbyIsIm1vY2tVc2VyIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwibWVyZ2UiLCJkZWZhdWx0R3JvdXBPd25lclVzZXJJbmZvIiwiZGVmYXVsdEdyb3VwT3duZXIiLCJ1c2VySWQiLCJlbnRpdHlJZCIsInJvbGUiLCJCQVNFX1JPTEUiLCJHUk9VUF9PV05FUiIsImlzRXh0ZXJuYWwiLCJkZWZhdWx0TmFtZWxlc3NHcm91cExlYXJuZXIiLCJHUk9VUF9MRUFSTkVSIiwiZGVmYXVsdE5hbWVkR3JvdXBMZWFybmVyIiwiZGVmYXVsdEdyb3VwTGVhcm5lciIsImRlZmF1bHRFeHRlcm5hbEdyb3VwTGVhcm5lciIsImRlZmF1bHRHcm91cEdyYWRlciIsIkdST1VQX0dSQURFUiIsImRlZmF1bHRHcm91cFVzZXJSb2xlcyIsImRlZmF1bHRBZG1pblVzZXJSb2xlcyIsIkFETUlOIiwiZGVmYXVsdEdyb3VwIiwib3duZXJzIiwiZ3JhZGVycyIsIm5hbWUiLCJleHRlcm5hbFRlcm1JZCIsImlzRGVsZXRlZCIsImlzUm9zdGVyU3luY0VuYWJsZWQiLCJleHRlcm5hbEdyb3VwcyIsIm1vY2tHcm91cHMiLCJtb2NrU3luY2VkR3JvdXBzIiwicm9zdGVyU3luY0VuYWJsZWRHcm91cCIsIm1vY2tMdGlHcm91cHMiLCJsdGlHcm91cCIsImV4dGVybmFsUHJvdmlkZXJJZCIsImdyb3VwSWQiLCJkZXNjcmlwdGlvbiIsImdyYWRlc1VybCIsInJvc3RlclVybCIsImlzQXV0b0dyYWRlUHVzaEVuYWJsZWQiLCJleHRlcm5hbElkIiwidHlwZW5hbWUiLCJtb2NrVGVybUdyb3VwcyIsImdyb3VwIiwibW9ja1Rlcm1BbmRVbmlUaW1lR3JvdXBzIiwibW9ja1Bhc3RHcm91cHMiLCJwYXN0R3JvdXAiLCJtb2NrUGFzdEFuZEN1cnJlbnRHcm91cHMiLCJjdXJyZW50R3JvdXAiLCJkZWZhdWx0RXh0ZXJuYWxQcm92aWRlcnMiLCJFWFRFUk5BTF9QUk9WSURFUl9UWVBFIiwiVU5JVElNRSIsInRlcm1TeW5jRW5hYmxlZCIsInJvc3RlclN5bmNFbmFibGVkIiwiZ3JhZGVQdXNoRW5hYmxlZCIsInNob3VsZERpc3BsYXlDcmVhdGVOb25MdGlHcm91cEFsZXJ0IiwiTFRJIiwiZGVmYXVsdEV4dGVybmFsVGVybXMiLCJpbnRlcm5hbFNlcnZlckVycm9yRGF0YSIsInN0YXR1cyIsIkhUVFBfU1RBVFVTX0NPREUiLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJ0aXRsZSIsImRldGFpbCIsInJlcXVlc3RUaW1lZE91dEVycm9yRGF0YSIsIlJFUVVFU1RfVElNRU9VVCIsImZvcmJpZGRlbkVycm9yRGF0YSIsIkZPUkJJRERFTiIsInVuYXV0aG9yaXplZEVycm9yRGF0YSIsIlVOQVVUSE9SSVpFRCIsImJhZFJlcXVlc3RFcnJvckRhdGEiLCJCQURfUkVRVUVTVCIsImJhZFJlcXVlc3RGdWxsRXJyb3JEYXRhIiwidHlwZSIsImluc3RhbmNlIiwidHJhY2VJZCIsImVycm9ycyIsInBhc3N3b3JkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0YW50cy9tb2NrRGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgRVhURVJOQUxfUFJPVklERVJfVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cy9leHRlcm5hbFByb3ZpZGVyVHlwZSdcclxuaW1wb3J0IHtcclxuXHRBcHBDb25maWd1cmF0aW9uLFxyXG5cdEV4dGVybmFsUHJvdmlkZXIsXHJcblx0RXh0ZXJuYWxUZXJtLFxyXG5cdEZldGNoRXJyb3JEYXRhLFxyXG5cdEdyb3VwLFxyXG5cdEdyb3VwVXNlclJvbGUsXHJcblx0SFRUUF9TVEFUVVNfQ09ERSxcclxuXHRNb2RlbENvbGxlY3Rpb24sXHJcblx0U2ltcGxlTG9jYXRpb24sXHJcblx0VXNlckluZm8sXHJcblx0VXNlclJvbGVcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgQkFTRV9ST0xFIH0gZnJvbSAnLi9iYXNlUm9sZSdcclxuaW1wb3J0IHsgVElFUiB9IGZyb20gJy4vdGllcidcclxuXHJcbi8vI3JlZ2lvbiBHZW5lcmFsXHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEFwcENvbmZpZ3VyYXRpb246IEFwcENvbmZpZ3VyYXRpb24gPSB7XHJcblx0Tk9ERV9FTlY6ICd0ZXN0JyxcclxuXHRBUFBfTkFNRTogJ1N0dWRpb0tpdCcsXHJcblx0VElFUjogVElFUi5MT0NBTCxcclxuXHRBUElfQkFTRV9VUkw6ICcnLFxyXG5cdFJPT1RfRE9NQUlOOiAnc3R1ZGlva2l0Lm9yZycsXHJcblx0Q0xJRU5UX0lEOiAnd2ViJyxcclxuXHRDTElFTlRfU0VDUkVUOiAnKioqKicsXHJcblx0SVNfRE9XTlRJTUU6IGZhbHNlLFxyXG5cdExNU19OQU1FOiAnQnJpZ2h0c3BhY2UnLFxyXG5cdEdSQURBQkxFX0RFU0NSSVBUT1I6ICdhc3Nlc3NtZW50J1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdExvY2F0aW9uOiBTaW1wbGVMb2NhdGlvbiA9IHtcclxuXHRoYXNoOiAnJyxcclxuXHRob3N0OiAncHVyZHVlLmRldi5zdHVkaW9raXQub3JnJyxcclxuXHRob3N0bmFtZTogJ3B1cmR1ZS5kZXYuc3R1ZGlva2l0Lm9yZycsXHJcblx0aHJlZjogJ2h0dHBzOi8vcHVyZHVlLmRldi5zdHVkaW9raXQub3JnLycsXHJcblx0cGF0aG5hbWU6ICcvJyxcclxuXHRwb3J0OiAnJyxcclxuXHRwcm90b2NvbDogJ2h0dHBzOicsXHJcblx0c2VhcmNoOiAnJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9ja0hpc3RvcnkoKTogSGlzdG9yeSB7XHJcblx0cmV0dXJuIHtcclxuXHRcdGxlbmd0aDogMCxcclxuXHRcdHNjcm9sbFJlc3RvcmF0aW9uOiAnYXV0bycsXHJcblx0XHRzdGF0ZToge30sXHJcblx0XHRiYWNrOiBqZXN0LmZuKCksXHJcblx0XHRmb3J3YXJkOiBqZXN0LmZuKCksXHJcblx0XHRnbzogamVzdC5mbigpLFxyXG5cdFx0cHVzaFN0YXRlOiBqZXN0LmZuKCksXHJcblx0XHRyZXBsYWNlU3RhdGU6IGplc3QuZm4oKVxyXG5cdH1cclxufVxyXG5cclxuLy8jZW5kcmVnaW9uIEdlbmVyYWxcclxuXHJcbi8vI3JlZ2lvbiBEYXRlc1xyXG5cclxuLyoqIDUvMTUvMTggLSA4LzE0LzE4ICovXHJcbmV4cG9ydCBjb25zdCBwYXN0RGF0ZXMgPSB7XHJcblx0c3RhcnREYXRlOiAnMjAxOC0wNS0xNVQwNDowMDowMC4wMDBaJyxcclxuXHRlbmREYXRlOiAnMjAxOC0wOC0xNVQwMzo1OTo1OS45OTlaJ1xyXG59XHJcblxyXG4vKiogOC8xNS8xOCAtIDEyLzMxLzE4OiAqL1xyXG5leHBvcnQgY29uc3QgY3VycmVudERhdGVzID0ge1xyXG5cdHN0YXJ0RGF0ZTogJzIwMTgtMDgtMTVUMDQ6MDA6MDAuMDAwWicsXHJcblx0ZW5kRGF0ZTogJzIwMTktMDEtMDFUMDQ6NTk6NTkuOTk5WidcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBkZWZhdWx0IGRhdGUgYW5kIHRpbWUgZm9yIGFsbCB0ZXN0cy4gVXNlZCBieSB0aGUgJ21vY2tkYXRlJyBwYWNrYWdlLiBPbmUgbW9udGggaW50byBgY3VycmVudERhdGVzYC5cclxuICovXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0RGF0ZSA9ICcyMDE4LTA5LTE1VDA0OjAwOjAwLjAwMFonXHJcblxyXG4vLyNlbmRyZWdpb24gRGF0ZXNcclxuXHJcbi8vI3JlZ2lvbiBVc2Vyc1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRVc2VyID0ge1xyXG5cdHVzZXJJbmZvOiB7XHJcblx0XHRpZDogJzEnLFxyXG5cdFx0Zmlyc3ROYW1lOiBudWxsLFxyXG5cdFx0bGFzdE5hbWU6IG51bGwsXHJcblx0XHRlbWFpbDogbnVsbCxcclxuXHRcdHVpZDogbnVsbCxcclxuXHRcdGFjdGl2aXRpZXM6IFtdLFxyXG5cdFx0cm9sZXM6IFtdLFxyXG5cdFx0ZGF0ZURlbW9HZW5lcmF0aW9uU3VjY2VlZGVkOiBudWxsLFxyXG5cdFx0ZGF0ZVN0b3JlZDogZGVmYXVsdERhdGUsXHJcblx0XHRkYXRlTGFzdFVwZGF0ZWQ6IGRlZmF1bHREYXRlLFxyXG5cdFx0aXNJbXBlcnNvbmF0ZWQ6IGZhbHNlLFxyXG5cdFx0Y2FyZWVyQWNjb3VudEFsaWFzOiBudWxsLFxyXG5cdFx0ZW1wbG95ZWVOdW1iZXI6IG51bGwsXHJcblx0XHR1c2VyTmFtZTogJ3Rlc3QnLFxyXG5cdFx0cHVpZDogbnVsbCxcclxuXHRcdGxvY2tEb3duQnJvd3NlclRlc3RMYXVuY2hVcmw6IG51bGxcclxuXHR9IGFzIFVzZXJJbmZvXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0TmFtZWxlc3NVc2VySW5mbyA9IHtcclxuXHQuLi5kZWZhdWx0VXNlci51c2VySW5mbyxcclxuXHQuLi57XHJcblx0XHRlbWFpbDogJ25pY2tpQG1pbmFqLnN1cGVyYmFzcycsXHJcblx0XHR1aWQ6ICdubS1uYW1lbGVzcydcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0TmFtZWRVc2VySW5mbyA9IHtcclxuXHQuLi5kZWZhdWx0VXNlci51c2VySW5mbyxcclxuXHQuLi57XHJcblx0XHRmaXJzdE5hbWU6ICdOaWNraScsXHJcblx0XHRsYXN0TmFtZTogJ01pbmFqJyxcclxuXHRcdHVpZDogJ25tLW5hbWVkJ1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tVc2VyKGFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW10pOiB7IHVzZXJJbmZvOiBVc2VySW5mbyB9IHtcclxuXHRyZXR1cm4gbWVyZ2UoeyB1c2VySW5mbzogeyBhY3Rpdml0aWVzIH0gfSwgZGVmYXVsdFVzZXIpXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0R3JvdXBPd25lclVzZXJJbmZvOiBVc2VySW5mbyA9IHtcclxuXHQuLi5kZWZhdWx0VXNlci51c2VySW5mbyxcclxuXHRpZDogJzInLFxyXG5cdGZpcnN0TmFtZTogJ0phbmUnLFxyXG5cdGxhc3ROYW1lOiAnRG9lJyxcclxuXHRlbWFpbDogJ2phbmVAZ21haWwuY29tJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEdyb3VwT3duZXI6IEdyb3VwVXNlclJvbGUgPSB7XHJcblx0aWQ6ICcxJyxcclxuXHR1c2VySWQ6ICcyJyxcclxuXHRmaXJzdE5hbWU6ICdKYW5lJyxcclxuXHRsYXN0TmFtZTogJ0RvZScsXHJcblx0ZW1haWw6ICdqYW5lQGdtYWlsLmNvbScsXHJcblx0dWlkOiAnamFuZScsXHJcblx0ZW50aXR5SWQ6IDEsXHJcblx0cm9sZTogQkFTRV9ST0xFLkdST1VQX09XTkVSLFxyXG5cdGlzRXh0ZXJuYWw6IGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0TmFtZWxlc3NHcm91cExlYXJuZXI6IEdyb3VwVXNlclJvbGUgPSB7XHJcblx0aWQ6ICcyJyxcclxuXHR1c2VySWQ6ICczJyxcclxuXHRmaXJzdE5hbWU6IG51bGwsXHJcblx0bGFzdE5hbWU6IG51bGwsXHJcblx0ZW1haWw6ICduaWNraUBtaW5hai5zdXBlcmJhc3MnLFxyXG5cdHVpZDogJ25tLW5hbWVsZXNzJyxcclxuXHRlbnRpdHlJZDogMSxcclxuXHRyb2xlOiBCQVNFX1JPTEUuR1JPVVBfTEVBUk5FUixcclxuXHRpc0V4dGVybmFsOiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdE5hbWVkR3JvdXBMZWFybmVyOiBHcm91cFVzZXJSb2xlID0ge1xyXG5cdGlkOiAnMycsXHJcblx0dXNlcklkOiAnNCcsXHJcblx0Zmlyc3ROYW1lOiAnTmlja2knLFxyXG5cdGxhc3ROYW1lOiAnTWluYWonLFxyXG5cdGVtYWlsOiBudWxsLFxyXG5cdHVpZDogJ25tLW5hbWVkJyxcclxuXHRlbnRpdHlJZDogMSxcclxuXHRyb2xlOiBCQVNFX1JPTEUuR1JPVVBfTEVBUk5FUixcclxuXHRpc0V4dGVybmFsOiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEdyb3VwTGVhcm5lcjogR3JvdXBVc2VyUm9sZSA9IHtcclxuXHRpZDogJzQnLFxyXG5cdHVzZXJJZDogJzUnLFxyXG5cdGZpcnN0TmFtZTogJ0pvZScsXHJcblx0bGFzdE5hbWU6ICdTY2htb2UnLFxyXG5cdGVtYWlsOiAnbm9wZUBnbWFpbC5jb20nLFxyXG5cdHVpZDogJ25vcGUnLFxyXG5cdGVudGl0eUlkOiAxLFxyXG5cdHJvbGU6IEJBU0VfUk9MRS5HUk9VUF9MRUFSTkVSLFxyXG5cdGlzRXh0ZXJuYWw6IGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0RXh0ZXJuYWxHcm91cExlYXJuZXI6IEdyb3VwVXNlclJvbGUgPSB7XHJcblx0aWQ6ICc1JyxcclxuXHR1c2VySWQ6ICc2JyxcclxuXHRmaXJzdE5hbWU6ICdCb2InLFxyXG5cdGxhc3ROYW1lOiAnTG9ibGF3JyxcclxuXHRlbWFpbDogJ2JvYmxvYmxhd0BsYXdibG9nLmNvbScsXHJcblx0dWlkOiAnYm9ibG9ibGF3JyxcclxuXHRlbnRpdHlJZDogMSxcclxuXHRyb2xlOiBCQVNFX1JPTEUuR1JPVVBfTEVBUk5FUixcclxuXHRpc0V4dGVybmFsOiB0cnVlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0R3JvdXBHcmFkZXI6IEdyb3VwVXNlclJvbGUgPSB7XHJcblx0aWQ6ICc2JyxcclxuXHR1c2VySWQ6ICc3JyxcclxuXHRmaXJzdE5hbWU6ICdHcmFkZXInLFxyXG5cdGxhc3ROYW1lOiAnTWNHcmFkZWZhY2UnLFxyXG5cdGVtYWlsOiAnZ3JhZGVyQGdtYWlsLmNvbScsXHJcblx0dWlkOiAnZ3JhZGVyJyxcclxuXHRlbnRpdHlJZDogMSxcclxuXHRyb2xlOiBCQVNFX1JPTEUuR1JPVVBfR1JBREVSLFxyXG5cdGlzRXh0ZXJuYWw6IGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0R3JvdXBVc2VyUm9sZXMgPSBbZGVmYXVsdEdyb3VwT3duZXIsIGRlZmF1bHRHcm91cExlYXJuZXIsIGRlZmF1bHRFeHRlcm5hbEdyb3VwTGVhcm5lcl1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0QWRtaW5Vc2VyUm9sZXM6IFVzZXJSb2xlW10gPSBbXHJcblx0e1xyXG5cdFx0aWQ6ICcxJyxcclxuXHRcdGZpcnN0TmFtZTogJ0pvZScsXHJcblx0XHRsYXN0TmFtZTogJ1NjaG1vJyxcclxuXHRcdGVtYWlsOiBudWxsLFxyXG5cdFx0dWlkOiBudWxsLFxyXG5cdFx0cm9sZTogQkFTRV9ST0xFLkFETUlOXHJcblx0fSxcclxuXHR7XHJcblx0XHRpZDogJzInLFxyXG5cdFx0Zmlyc3ROYW1lOiBudWxsLFxyXG5cdFx0bGFzdE5hbWU6IG51bGwsXHJcblx0XHRlbWFpbDogJ2Nhcmx5c2ltb25AY2xvdWRzLmluLmNvZmZlZScsXHJcblx0XHR1aWQ6ICdjYXJseXNpbW9uJyxcclxuXHRcdHJvbGU6IEJBU0VfUk9MRS5BRE1JTlxyXG5cdH1cclxuXVxyXG5cclxuLy8jZW5kcmVnaW9uIFVzZXJzXHJcblxyXG4vLyNyZWdpb24gR3JvdXBzXHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEdyb3VwOiBHcm91cCA9IHtcclxuXHRyb2xlczogW10sXHJcblx0YWN0aXZpdGllczogW10sXHJcblx0b3duZXJzOiBbXHJcblx0XHR7XHJcblx0XHRcdGlkOiAnMScsXHJcblx0XHRcdGVudGl0eUlkOiAxLFxyXG5cdFx0XHRmaXJzdE5hbWU6ICdJbnN0cnVjdG9yJyxcclxuXHRcdFx0bGFzdE5hbWU6ICdNY0luc3RydWN0b3InLFxyXG5cdFx0XHRlbWFpbDogbnVsbCxcclxuXHRcdFx0dWlkOiBudWxsXHJcblx0XHR9XHJcblx0XSxcclxuXHRncmFkZXJzOiBbXSxcclxuXHRpZDogMSxcclxuXHRuYW1lOiAnTWNHcm91cCcsXHJcblx0ZXh0ZXJuYWxUZXJtSWQ6IG51bGwsXHJcblx0c3RhcnREYXRlOiBjdXJyZW50RGF0ZXMuc3RhcnREYXRlLFxyXG5cdGVuZERhdGU6IGN1cnJlbnREYXRlcy5lbmREYXRlLFxyXG5cdGlzRGVsZXRlZDogZmFsc2UsXHJcblx0aXNSb3N0ZXJTeW5jRW5hYmxlZDogZmFsc2UsXHJcblx0ZXh0ZXJuYWxHcm91cHM6IFtdXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtb2NrR3JvdXBzKGFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW10sIHJvbGVzOiBzdHJpbmdbXSA9IFtdKTogTW9kZWxDb2xsZWN0aW9uPEdyb3VwPiB7XHJcblx0cmV0dXJuIHsgJzEnOiBtZXJnZSh7IGFjdGl2aXRpZXMsIHJvbGVzIH0sIGRlZmF1bHRHcm91cCkgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9ja1N5bmNlZEdyb3VwcyhhY3Rpdml0aWVzOiBzdHJpbmdbXSA9IFtdLCByb2xlczogc3RyaW5nW10gPSBbXSk6IE1vZGVsQ29sbGVjdGlvbjxHcm91cD4ge1xyXG5cdGNvbnN0IHJvc3RlclN5bmNFbmFibGVkR3JvdXA6IEdyb3VwID0gbWVyZ2UoeyBhY3Rpdml0aWVzLCByb2xlcyB9LCBkZWZhdWx0R3JvdXApXHJcblx0cm9zdGVyU3luY0VuYWJsZWRHcm91cC5pc1Jvc3RlclN5bmNFbmFibGVkID0gdHJ1ZVxyXG5cdHJldHVybiB7ICcxJzogcm9zdGVyU3luY0VuYWJsZWRHcm91cCB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtb2NrTHRpR3JvdXBzKGFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW10sIHJvbGVzOiBzdHJpbmdbXSA9IFtdKTogTW9kZWxDb2xsZWN0aW9uPEdyb3VwPiB7XHJcblx0Y29uc3QgbHRpR3JvdXA6IEdyb3VwID0gbWVyZ2UoeyBhY3Rpdml0aWVzLCByb2xlcyB9LCBkZWZhdWx0R3JvdXApXHJcblx0bHRpR3JvdXAuaXNSb3N0ZXJTeW5jRW5hYmxlZCA9IHRydWVcclxuXHRsdGlHcm91cC5leHRlcm5hbEdyb3VwcyA9IFtcclxuXHRcdHtcclxuXHRcdFx0aWQ6IDEsXHJcblx0XHRcdGV4dGVybmFsUHJvdmlkZXJJZDogMixcclxuXHRcdFx0Z3JvdXBJZDogMSxcclxuXHRcdFx0dXNlcklkOiAnMScsXHJcblx0XHRcdG5hbWU6ICdMVEkgRXh0ZXJuYWxHcm91cCcsXHJcblx0XHRcdGRlc2NyaXB0aW9uOiAnTFRJIDEwMScsXHJcblx0XHRcdGdyYWRlc1VybDogJ3d3dy5sdGkub3JnJyxcclxuXHRcdFx0cm9zdGVyVXJsOiBudWxsLFxyXG5cdFx0XHRpc0F1dG9HcmFkZVB1c2hFbmFibGVkOiBmYWxzZSxcclxuXHRcdFx0ZXh0ZXJuYWxJZDogJzEnLFxyXG5cdFx0XHR0eXBlbmFtZTogJ0V4dGVybmFsR3JvdXAnXHJcblx0XHR9XHJcblx0XVxyXG5cdHJldHVybiB7ICcxJzogbHRpR3JvdXAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9ja1Rlcm1Hcm91cHMoYWN0aXZpdGllczogc3RyaW5nW10gPSBbXSwgcm9sZXM6IHN0cmluZ1tdID0gW10pOiBNb2RlbENvbGxlY3Rpb248R3JvdXA+IHtcclxuXHRjb25zdCBncm91cDogR3JvdXAgPSBtZXJnZSh7IGFjdGl2aXRpZXMsIHJvbGVzIH0sIGRlZmF1bHRHcm91cClcclxuXHRncm91cC5zdGFydERhdGUgPSBudWxsXHJcblx0Z3JvdXAuZW5kRGF0ZSA9IG51bGxcclxuXHRncm91cC5leHRlcm5hbFRlcm1JZCA9IDFcclxuXHRyZXR1cm4geyAnMSc6IGdyb3VwIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUZXJtQW5kVW5pVGltZUdyb3VwcyhhY3Rpdml0aWVzOiBzdHJpbmdbXSA9IFtdLCByb2xlczogc3RyaW5nW10gPSBbXSk6IE1vZGVsQ29sbGVjdGlvbjxHcm91cD4ge1xyXG5cdGNvbnN0IGdyb3VwOiBHcm91cCA9IG1lcmdlKHsgYWN0aXZpdGllcywgcm9sZXMgfSwgZGVmYXVsdEdyb3VwKVxyXG5cdGdyb3VwLnN0YXJ0RGF0ZSA9IG51bGxcclxuXHRncm91cC5lbmREYXRlID0gbnVsbFxyXG5cdGdyb3VwLmV4dGVybmFsVGVybUlkID0gMVxyXG5cdGdyb3VwLmV4dGVybmFsR3JvdXBzID0gW1xyXG5cdFx0e1xyXG5cdFx0XHRpZDogMSxcclxuXHRcdFx0ZXh0ZXJuYWxQcm92aWRlcklkOiAxLFxyXG5cdFx0XHRncm91cElkOiAxLFxyXG5cdFx0XHR1c2VySWQ6ICcxJyxcclxuXHRcdFx0bmFtZTogJ1VuaVRpbWUgRXh0ZXJuYWxHcm91cCcsXHJcblx0XHRcdGRlc2NyaXB0aW9uOiAnVW5pVGltZSAxMDEnLFxyXG5cdFx0XHRncmFkZXNVcmw6IG51bGwsXHJcblx0XHRcdHJvc3RlclVybDogbnVsbCxcclxuXHRcdFx0aXNBdXRvR3JhZGVQdXNoRW5hYmxlZDogZmFsc2UsXHJcblx0XHRcdGV4dGVybmFsSWQ6ICcxJyxcclxuXHRcdFx0dHlwZW5hbWU6ICdFeHRlcm5hbEdyb3VwJ1xyXG5cdFx0fVxyXG5cdF1cclxuXHRyZXR1cm4geyAnMSc6IGdyb3VwIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tQYXN0R3JvdXBzKGFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW10sIHJvbGVzOiBzdHJpbmdbXSA9IFtdKTogTW9kZWxDb2xsZWN0aW9uPEdyb3VwPiB7XHJcblx0Y29uc3QgcGFzdEdyb3VwOiBHcm91cCA9IG1lcmdlKHsgYWN0aXZpdGllcywgcm9sZXMgfSwgZGVmYXVsdEdyb3VwLCBwYXN0RGF0ZXMpXHJcblx0cmV0dXJuIHsgJzEnOiBwYXN0R3JvdXAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9ja1Bhc3RBbmRDdXJyZW50R3JvdXBzKGFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW10sIHJvbGVzOiBzdHJpbmdbXSA9IFtdKTogTW9kZWxDb2xsZWN0aW9uPEdyb3VwPiB7XHJcblx0Y29uc3QgcGFzdEdyb3VwOiBHcm91cCA9IG1lcmdlKHsgYWN0aXZpdGllcywgcm9sZXMgfSwgZGVmYXVsdEdyb3VwLCBwYXN0RGF0ZXMpXHJcblx0Y29uc3QgY3VycmVudEdyb3VwOiBHcm91cCA9IG1lcmdlKFxyXG5cdFx0eyBhY3Rpdml0aWVzLCByb2xlcyB9LFxyXG5cdFx0ZGVmYXVsdEdyb3VwLFxyXG5cdFx0e1xyXG5cdFx0XHRpZDogJzInXHJcblx0XHR9LFxyXG5cdFx0Y3VycmVudERhdGVzXHJcblx0KVxyXG5cdHJldHVybiB7ICcxJzogcGFzdEdyb3VwLCAnMic6IGN1cnJlbnRHcm91cCB9XHJcbn1cclxuXHJcbi8vI2VuZHJlZ2lvbiBHcm91cHNcclxuXHJcbi8vI3JlZ2lvbiBFeHRlcm5hbFRlcm1zICsgRXh0ZXJuYWxQcm92aWRlcnNcclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0RXh0ZXJuYWxQcm92aWRlcnM6IE1vZGVsQ29sbGVjdGlvbjxFeHRlcm5hbFByb3ZpZGVyPiA9IHtcclxuXHQnMSc6IHtcclxuXHRcdGlkOiAxLFxyXG5cdFx0dHlwZW5hbWU6IEVYVEVSTkFMX1BST1ZJREVSX1RZUEUuVU5JVElNRSxcclxuXHRcdHRlcm1TeW5jRW5hYmxlZDogdHJ1ZSxcclxuXHRcdHJvc3RlclN5bmNFbmFibGVkOiB0cnVlLFxyXG5cdFx0Z3JhZGVQdXNoRW5hYmxlZDogZmFsc2UsXHJcblx0XHRzaG91bGREaXNwbGF5Q3JlYXRlTm9uTHRpR3JvdXBBbGVydDogZmFsc2VcclxuXHR9LFxyXG5cdCcyJzoge1xyXG5cdFx0aWQ6IDIsXHJcblx0XHR0eXBlbmFtZTogRVhURVJOQUxfUFJPVklERVJfVFlQRS5MVEksXHJcblx0XHR0ZXJtU3luY0VuYWJsZWQ6IGZhbHNlLFxyXG5cdFx0cm9zdGVyU3luY0VuYWJsZWQ6IGZhbHNlLFxyXG5cdFx0Z3JhZGVQdXNoRW5hYmxlZDogdHJ1ZSxcclxuXHRcdHNob3VsZERpc3BsYXlDcmVhdGVOb25MdGlHcm91cEFsZXJ0OiB0cnVlXHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEV4dGVybmFsVGVybXM6IE1vZGVsQ29sbGVjdGlvbjxFeHRlcm5hbFRlcm0+ID0ge1xyXG5cdCcxJzoge1xyXG5cdFx0aWQ6IDEsXHJcblx0XHRleHRlcm5hbFByb3ZpZGVySWQ6IDEsXHJcblx0XHRleHRlcm5hbElkOiAnZm9vJyxcclxuXHRcdG5hbWU6ICdVbmlUaW1lIEZhbGwgVGVybScsXHJcblx0XHRzdGFydERhdGU6IGN1cnJlbnREYXRlcy5zdGFydERhdGUsXHJcblx0XHRlbmREYXRlOiBjdXJyZW50RGF0ZXMuZW5kRGF0ZVxyXG5cdH1cclxufVxyXG5cclxuLy8jZW5kcmVnaW9uIEV4dGVybmFsVGVybXMgKyBFeHRlcm5hbFByb3ZpZGVyc1xyXG5cclxuLy8jcmVnaW9uIEZldGNoRXJyb3JEYXRhXHJcblxyXG5leHBvcnQgY29uc3QgaW50ZXJuYWxTZXJ2ZXJFcnJvckRhdGE6IEZldGNoRXJyb3JEYXRhID0ge1xyXG5cdHN0YXR1czogSFRUUF9TVEFUVVNfQ09ERS5JTlRFUk5BTF9TRVJWRVJfRVJST1IsXHJcblx0dGl0bGU6ICdFcnJvcicsXHJcblx0ZGV0YWlsOiAnQW4gZXJyb3IgaGFzIG9jY3VycmVkLidcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHJlcXVlc3RUaW1lZE91dEVycm9yRGF0YTogRmV0Y2hFcnJvckRhdGEgPSB7XHJcblx0c3RhdHVzOiBIVFRQX1NUQVRVU19DT0RFLlJFUVVFU1RfVElNRU9VVCxcclxuXHR0aXRsZTogJ1JlcXVlc3QgVGltZW91dCcsXHJcblx0ZGV0YWlsOiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBmb3JiaWRkZW5FcnJvckRhdGE6IEZldGNoRXJyb3JEYXRhID0ge1xyXG5cdHN0YXR1czogSFRUUF9TVEFUVVNfQ09ERS5GT1JCSURERU4sXHJcblx0dGl0bGU6ICdGb3JiaWRkZW4nLFxyXG5cdGRldGFpbDogJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBkZW5pZWQuIFlvdSBkbyBub3QgaGF2ZSBhY2Nlc3MuJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdW5hdXRob3JpemVkRXJyb3JEYXRhOiBGZXRjaEVycm9yRGF0YSA9IHtcclxuXHRzdGF0dXM6IEhUVFBfU1RBVFVTX0NPREUuVU5BVVRIT1JJWkVELFxyXG5cdHRpdGxlOiAnVW5hdXRob3JpemVkJyxcclxuXHRkZXRhaWw6ICdZb3VyIHJlcXVlc3QgaXMgdW5hdXRob3JpemVkLiBZb3UgbXVzdCBhdXRoZW50aWNhdGUuJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYmFkUmVxdWVzdEVycm9yRGF0YTogRmV0Y2hFcnJvckRhdGEgPSB7XHJcblx0c3RhdHVzOiBIVFRQX1NUQVRVU19DT0RFLkJBRF9SRVFVRVNULFxyXG5cdHRpdGxlOiAnQmFkIFJlcXVlc3QnLFxyXG5cdGRldGFpbDogJ1JlYXNvbnMnXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBiYWRSZXF1ZXN0RnVsbEVycm9yRGF0YTogRmV0Y2hFcnJvckRhdGEgPSB7XHJcblx0c3RhdHVzOiBIVFRQX1NUQVRVU19DT0RFLkJBRF9SRVFVRVNULFxyXG5cdHRpdGxlOiAnQmFkIFJlcXVlc3QnLFxyXG5cdGRldGFpbDogJ1JlYXNvbnMnLFxyXG5cdC8vIGluY2x1ZGUgYWxsIG9wdGlvbmFsIHByb3BlcnRpZXNcclxuXHR0eXBlOiAnaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjUuMScsXHJcblx0aW5zdGFuY2U6ICdpbnN0YW5jZScsXHJcblx0dHJhY2VJZDogJzAwLTM5MTRiNDNiNDUyYjk0ZTNmZjRjMzI3OTIyODgwYTAzLTRjZmVkNmZlNDJhZmRkOGYtMDAnLFxyXG5cdGVycm9yczoge1xyXG5cdFx0cGFzc3dvcmQ6IFsnVGhlIFBhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgNiBjaGFyYWN0ZXJzIGxvbmcuJ11cclxuXHR9XHJcbn1cclxuXHJcbi8vI2VuZHJlZ2lvbiBGZXRjaEVycm9yRGF0YVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxxQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBYUEsSUFBQUcsU0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBSixPQUFBO0FBRUE7O0FBRU8sTUFBTUssdUJBQXlDLEdBQUFDLE9BQUEsQ0FBQUQsdUJBQUEsR0FBRztFQUN4REUsUUFBUSxFQUFFLE1BQU07RUFDaEJDLFFBQVEsRUFBRSxXQUFXO0VBQ3JCQyxJQUFJLEVBQUVB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