@gloww/gloww 0.9.0-beta.10

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 (308) hide show
  1. package/README.md +24 -0
  2. package/compute-version.js +117 -0
  3. package/esm2020/gloww-gloww.mjs +5 -0
  4. package/esm2020/lib/Components/code-editor/code-editor.component.mjs +59 -0
  5. package/esm2020/lib/Components/confirmation/confirmation.component.mjs +43 -0
  6. package/esm2020/lib/Components/display-objects/display-objects.component.mjs +499 -0
  7. package/esm2020/lib/Components/display-objects-configuration.mjs +2 -0
  8. package/esm2020/lib/Components/download-progress/download-progress.component.mjs +119 -0
  9. package/esm2020/lib/Components/folders/file-edit/file-edit.component.mjs +71 -0
  10. package/esm2020/lib/Components/folders/folders/folders.component.mjs +180 -0
  11. package/esm2020/lib/Components/header/header.component.mjs +14 -0
  12. package/esm2020/lib/Components/html-editor/html-editor.component.mjs +175 -0
  13. package/esm2020/lib/Components/menu-list-item/menu-list-item.component.mjs +101 -0
  14. package/esm2020/lib/Components/prompt/prompt.component.mjs +52 -0
  15. package/esm2020/lib/Components/result-table/result-table.component.mjs +21 -0
  16. package/esm2020/lib/Components/search-form/search-form.component.mjs +14 -0
  17. package/esm2020/lib/Components/secure-a/secure-a.component.mjs +31 -0
  18. package/esm2020/lib/Components/secure-img/secure-img.component.mjs +45 -0
  19. package/esm2020/lib/Components/upload-doc/upload-doc.component.mjs +95 -0
  20. package/esm2020/lib/Components/upload-file/upload-file.component.mjs +138 -0
  21. package/esm2020/lib/Directives/file-sink.directive.mjs +52 -0
  22. package/esm2020/lib/Models/nav-item.mjs +2 -0
  23. package/esm2020/lib/Pipes/html-format.pipe.mjs +23 -0
  24. package/esm2020/lib/Pipes/retry-with-delay.mjs +12 -0
  25. package/esm2020/lib/Pipes/safe-html.pipe.mjs +22 -0
  26. package/esm2020/lib/Pipes/secure.pipe.mjs +34 -0
  27. package/esm2020/lib/Services/dialog.service.mjs +29 -0
  28. package/esm2020/lib/Services/folder-service-config.mjs +21 -0
  29. package/esm2020/lib/Services/folder.service.mjs +50 -0
  30. package/esm2020/lib/Services/gloww.service.mjs +66 -0
  31. package/esm2020/lib/Services/nav.service.mjs +28 -0
  32. package/esm2020/lib/Services/version-check.service.mjs +81 -0
  33. package/esm2020/lib/Services/voice-recognition.service.mjs +55 -0
  34. package/esm2020/lib/gloww-security/Components/change-password-dlg/change-password-dlg.component.mjs +67 -0
  35. package/esm2020/lib/gloww-security/Components/login/login.component.mjs +173 -0
  36. package/esm2020/lib/gloww-security/Components/social-network/social-network.component.mjs +46 -0
  37. package/esm2020/lib/gloww-security/Components/social-network-dlg/social-network-dlg.component.mjs +52 -0
  38. package/esm2020/lib/gloww-security/Components/user-menu/user-menu.component.mjs +73 -0
  39. package/esm2020/lib/gloww-security/Helpers/administrator.guard.mjs +27 -0
  40. package/esm2020/lib/gloww-security/Helpers/auth.guard.mjs +57 -0
  41. package/esm2020/lib/gloww-security/Helpers/error.interceptor.mjs +29 -0
  42. package/esm2020/lib/gloww-security/Helpers/index.mjs +5 -0
  43. package/esm2020/lib/gloww-security/Helpers/jwt.interceptor.mjs +31 -0
  44. package/esm2020/lib/gloww-security/Helpers/staging.interceptor.mjs +24 -0
  45. package/esm2020/lib/gloww-security/Models/oauthassociation.mjs +6 -0
  46. package/esm2020/lib/gloww-security/Models/user.mjs +3 -0
  47. package/esm2020/lib/gloww-security/Services/authentication-service-config.mjs +25 -0
  48. package/esm2020/lib/gloww-security/Services/authentication.service.mjs +205 -0
  49. package/esm2020/lib/gloww-security/Services/gloww-security.service.mjs +14 -0
  50. package/esm2020/lib/gloww-security/gloww-security.module.mjs +171 -0
  51. package/esm2020/lib/gloww.module.mjs +220 -0
  52. package/esm2020/lib/injection-token.mjs +3 -0
  53. package/esm2020/public-api.mjs +32 -0
  54. package/fesm2015/gloww-gloww.mjs +3104 -0
  55. package/fesm2015/gloww-gloww.mjs.map +1 -0
  56. package/fesm2020/gloww-gloww.mjs +3065 -0
  57. package/fesm2020/gloww-gloww.mjs.map +1 -0
  58. package/gloww-assets/.gitkeep +0 -0
  59. package/gloww-assets/7SS_logo.svg +1 -0
  60. package/gloww-assets/7SS_wobl.svg +1 -0
  61. package/gloww-assets/7stars.png +0 -0
  62. package/gloww-assets/gloww.svg +316 -0
  63. package/gloww-assets/images/google_signin_buttons/Google_signin_button.sketch +0 -0
  64. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_dark_disabled_hdpi.9.png +0 -0
  65. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_dark_focus_hdpi.9.png +0 -0
  66. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_dark_normal_hdpi.9.png +0 -0
  67. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_dark_pressed_hdpi.9.png +0 -0
  68. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_light_disabled_hdpi.9.png +0 -0
  69. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_light_focus_hdpi.9.png +0 -0
  70. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_light_normal_hdpi.9.png +0 -0
  71. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_light_pressed_hdpi.9.png +0 -0
  72. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_signin_dark_disabled_hdpi.9.png +0 -0
  73. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_signin_dark_focus_hdpi.9.png +0 -0
  74. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_signin_dark_normal_hdpi.9.png +0 -0
  75. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_signin_dark_pressed_hdpi.9.png +0 -0
  76. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_signin_light_disabled_hdpi.9.png +0 -0
  77. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_signin_light_focus_hdpi.9.png +0 -0
  78. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_signin_light_normal_hdpi.9.png +0 -0
  79. package/gloww-assets/images/google_signin_buttons/android/hdpi/btn_google_signin_light_pressed_hdpi.9.png +0 -0
  80. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_dark_disabled_ldpi.9.png +0 -0
  81. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_dark_focus_ldpi.9.png +0 -0
  82. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_dark_normal_ldpi.9.png +0 -0
  83. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_dark_pressed_ldpi.9.png +0 -0
  84. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_light_disabled_ldpi.9.png +0 -0
  85. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_light_focus_ldpi.9.png +0 -0
  86. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_light_normal_ldpi.9.png +0 -0
  87. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_light_pressed_ldpi.9.png +0 -0
  88. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_signin_dark_disabled_ldpi.9.png +0 -0
  89. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_signin_dark_focus_ldpi.9.png +0 -0
  90. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_signin_dark_normal_ldpi.9.png +0 -0
  91. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_signin_dark_pressed_ldpi.9.png +0 -0
  92. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_signin_light_disabled_ldpi.9.png +0 -0
  93. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_signin_light_focus_ldpi.9.png +0 -0
  94. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_signin_light_normal_ldpi.9.png +0 -0
  95. package/gloww-assets/images/google_signin_buttons/android/ldpi/btn_google_signin_light_pressed_ldpi.9.png +0 -0
  96. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_dark_disabled_mdpi.9.png +0 -0
  97. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_dark_focus_mdpi.9.png +0 -0
  98. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_dark_normal_mdpi.9.png +0 -0
  99. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_dark_pressed_mdpi.9.png +0 -0
  100. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_light_disabled_mdpi.9.png +0 -0
  101. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_light_focus_mdpi.9.png +0 -0
  102. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_light_normal_mdpi.9.png +0 -0
  103. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_light_pressed_mdpi.9.png +0 -0
  104. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_signin_dark_disabled_mdpi.9.png +0 -0
  105. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_signin_dark_focus_mdpi.9.png +0 -0
  106. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_signin_dark_normal_mdpi.9.png +0 -0
  107. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_signin_dark_pressed_mdpi.9.png +0 -0
  108. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_signin_light_disabled_mdpi.9.png +0 -0
  109. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_signin_light_focus_mdpi.9.png +0 -0
  110. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_signin_light_normal_mdpi.9.png +0 -0
  111. package/gloww-assets/images/google_signin_buttons/android/mdpi/btn_google_signin_light_pressed_mdpi.9.png +0 -0
  112. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_dark_disabled_tvdpi.9.png +0 -0
  113. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_dark_focus_tvdpi.9.png +0 -0
  114. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_dark_normal_tvdpi.9.png +0 -0
  115. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_dark_pressed_tvdpi.9.png +0 -0
  116. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_light_disabled_tvdpi.9.png +0 -0
  117. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_light_focus_tvdpi.9.png +0 -0
  118. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_light_normal_tvdpi.9.png +0 -0
  119. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_light_pressed_tvdpi.9.png +0 -0
  120. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_signin_dark_disabled_tvdpi.9.png +0 -0
  121. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_signin_dark_focus_tvdpi.9.png +0 -0
  122. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_signin_dark_normal_tvdpi.9.png +0 -0
  123. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_signin_dark_pressed_tvdpi.9.png +0 -0
  124. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_signin_light_disabled_tvdpi.9.png +0 -0
  125. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_signin_light_focus_tvdpi.9.png +0 -0
  126. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_signin_light_normal_tvdpi.9.png +0 -0
  127. package/gloww-assets/images/google_signin_buttons/android/tvdpi/btn_google_signin_light_pressed_tvdpi.9.png +0 -0
  128. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_dark_disabled_xhdpi.9.png +0 -0
  129. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_dark_focus_xhdpi.9.png +0 -0
  130. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_dark_normal_xhdpi.9.png +0 -0
  131. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_dark_pressed_xhdpi.9.png +0 -0
  132. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_light_disabled_xhdpi.9.png +0 -0
  133. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_light_focus_xhdpi.9.png +0 -0
  134. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_light_normal_xhdpi.9.png +0 -0
  135. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_light_pressed_xhdpi.9.png +0 -0
  136. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_signin_dark_disabled_xhdpi.9.png +0 -0
  137. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_signin_dark_focus_xhdpi.9.png +0 -0
  138. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_signin_dark_normal_xhdpi.9.png +0 -0
  139. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_signin_dark_pressed_xhdpi.9.png +0 -0
  140. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_signin_light_disabled_xhdpi.9.png +0 -0
  141. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_signin_light_focus_xhdpi.9.png +0 -0
  142. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_signin_light_normal_xhdpi.9.png +0 -0
  143. package/gloww-assets/images/google_signin_buttons/android/xhdpi/btn_google_signin_light_pressed_xhdpi.9.png +0 -0
  144. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_dark_disabled_xxhdpi.9.png +0 -0
  145. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_dark_focus_xxhdpi.9.png +0 -0
  146. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_dark_normal_xxhdpi.9.png +0 -0
  147. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_dark_pressed_xxhdpi.9.png +0 -0
  148. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_light_disabled_xxhdpi.9.png +0 -0
  149. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_light_focus_xxhdpi.9.png +0 -0
  150. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_light_normal_xxhdpi.9.png +0 -0
  151. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_light_pressed_xxhdpi.9.png +0 -0
  152. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_signin_dark_disabled_xxhdpi.9.png +0 -0
  153. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_signin_dark_focus_xxhdpi.9.png +0 -0
  154. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_signin_dark_normal_xxhdpi.9.png +0 -0
  155. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_signin_dark_pressed_xxhdpi.9.png +0 -0
  156. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_signin_light_disabled_xxhdpi.9.png +0 -0
  157. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_signin_light_focus_xxhdpi.9.png +0 -0
  158. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_signin_light_normal_xxhdpi.9.png +0 -0
  159. package/gloww-assets/images/google_signin_buttons/android/xxhdpi/btn_google_signin_light_pressed_xxhdpi.9.png +0 -0
  160. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_dark_disabled_xxxhdpi.9.png +0 -0
  161. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_dark_focus_xxxhdpi.9.png +0 -0
  162. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_dark_normal_xxxhdpi.9.png +0 -0
  163. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_dark_pressed_xxxhdpi.9.png +0 -0
  164. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_light_disabled_xxxhdpi.9.png +0 -0
  165. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_light_focus_xxxhdpi.9.png +0 -0
  166. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_light_normal_xxxhdpi.9.png +0 -0
  167. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_light_pressed_xxxhdpi.9.png +0 -0
  168. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_signin_dark_disabled_xxxhdpi.9.png +0 -0
  169. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_signin_dark_focus_xxxhdpi.9.png +0 -0
  170. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_signin_dark_normal_xxxhdpi.9.png +0 -0
  171. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_signin_dark_pressed_xxxhdpi.9.png +0 -0
  172. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_signin_light_disabled_xxxhdpi.9.png +0 -0
  173. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_signin_light_focus_xxxhdpi.9.png +0 -0
  174. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_signin_light_normal_xxxhdpi.9.png +0 -0
  175. package/gloww-assets/images/google_signin_buttons/android/xxxhdpi/btn_google_signin_light_pressed_xxxhdpi.9.png +0 -0
  176. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_dark_disabled_ios.png +0 -0
  177. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_dark_focus_ios.png +0 -0
  178. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_dark_normal_ios.png +0 -0
  179. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_dark_pressed_ios.png +0 -0
  180. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_light_disabled_ios.png +0 -0
  181. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_light_focus_ios.png +0 -0
  182. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_light_normal_ios.png +0 -0
  183. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_light_pressed_ios.png +0 -0
  184. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_signin_dark_disabled_ios.png +0 -0
  185. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_signin_dark_focus_ios.png +0 -0
  186. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_signin_dark_normal_ios.png +0 -0
  187. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_signin_dark_pressed_ios.png +0 -0
  188. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_signin_light_disabled_ios.png +0 -0
  189. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_signin_light_focus_ios.png +0 -0
  190. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_signin_light_normal_ios.png +0 -0
  191. package/gloww-assets/images/google_signin_buttons/ios/1x/btn_google_signin_light_pressed_ios.png +0 -0
  192. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_dark_disabled_ios@2x.png +0 -0
  193. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_dark_focus_ios@2x.png +0 -0
  194. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_dark_normal_ios@2x.png +0 -0
  195. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_dark_pressed_ios@2x.png +0 -0
  196. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_light_disabled_ios@2x.png +0 -0
  197. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_light_focus_ios@2x.png +0 -0
  198. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_light_normal_ios@2x.png +0 -0
  199. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_light_pressed_ios@2x.png +0 -0
  200. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_signin_dark_disabled_ios@2x.png +0 -0
  201. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_signin_dark_focus_ios@2x.png +0 -0
  202. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_signin_dark_normal_ios@2x.png +0 -0
  203. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_signin_dark_pressed_ios@2x.png +0 -0
  204. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_signin_light_disabled_ios@2x.png +0 -0
  205. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_signin_light_focus_ios@2x.png +0 -0
  206. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_signin_light_normal_ios@2x.png +0 -0
  207. package/gloww-assets/images/google_signin_buttons/ios/2x/btn_google_signin_light_pressed_ios@2x.png +0 -0
  208. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_dark_disabled_ios@3x.png +0 -0
  209. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_dark_focus_ios@3x.png +0 -0
  210. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_dark_normal_ios@3x.png +0 -0
  211. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_dark_pressed_ios@3x.png +0 -0
  212. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_light_disabled_ios@3x.png +0 -0
  213. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_light_focus_ios@3x.png +0 -0
  214. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_light_normal_ios@3x.png +0 -0
  215. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_light_pressed_ios@3x.png +0 -0
  216. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_signin_dark_disabled_ios@3x.png +0 -0
  217. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_signin_dark_focus_ios@3x.png +0 -0
  218. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_signin_dark_normal_ios@3x.png +0 -0
  219. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_signin_dark_pressed_ios@3x.png +0 -0
  220. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_signin_light_disabled_ios@3x.png +0 -0
  221. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_signin_light_focus_ios@3x.png +0 -0
  222. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_signin_light_normal_ios@3x.png +0 -0
  223. package/gloww-assets/images/google_signin_buttons/ios/3x/btn_google_signin_light_pressed_ios@3x.png +0 -0
  224. package/gloww-assets/images/google_signin_buttons/web/1x/btn_google_signin_dark_disabled_web.png +0 -0
  225. package/gloww-assets/images/google_signin_buttons/web/1x/btn_google_signin_dark_focus_web.png +0 -0
  226. package/gloww-assets/images/google_signin_buttons/web/1x/btn_google_signin_dark_normal_web.png +0 -0
  227. package/gloww-assets/images/google_signin_buttons/web/1x/btn_google_signin_dark_pressed_web.png +0 -0
  228. package/gloww-assets/images/google_signin_buttons/web/1x/btn_google_signin_light_disabled_web.png +0 -0
  229. package/gloww-assets/images/google_signin_buttons/web/1x/btn_google_signin_light_focus_web.png +0 -0
  230. package/gloww-assets/images/google_signin_buttons/web/1x/btn_google_signin_light_normal_web.png +0 -0
  231. package/gloww-assets/images/google_signin_buttons/web/1x/btn_google_signin_light_pressed_web.png +0 -0
  232. package/gloww-assets/images/google_signin_buttons/web/2x/btn_google_signin_dark_disabled_web@2x.png +0 -0
  233. package/gloww-assets/images/google_signin_buttons/web/2x/btn_google_signin_dark_focus_web@2x.png +0 -0
  234. package/gloww-assets/images/google_signin_buttons/web/2x/btn_google_signin_dark_normal_web@2x.png +0 -0
  235. package/gloww-assets/images/google_signin_buttons/web/2x/btn_google_signin_dark_pressed_web@2x.png +0 -0
  236. package/gloww-assets/images/google_signin_buttons/web/2x/btn_google_signin_light_disabled_web@2x.png +0 -0
  237. package/gloww-assets/images/google_signin_buttons/web/2x/btn_google_signin_light_focus_web@2x.png +0 -0
  238. package/gloww-assets/images/google_signin_buttons/web/2x/btn_google_signin_light_normal_web@2x.png +0 -0
  239. package/gloww-assets/images/google_signin_buttons/web/2x/btn_google_signin_light_pressed_web@2x.png +0 -0
  240. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_dark_disabled_ios.eps +814 -0
  241. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_dark_disabled_ios.svg +24 -0
  242. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_dark_focus_ios.eps +1866 -0
  243. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_dark_focus_ios.svg +51 -0
  244. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_dark_normal_ios.eps +1031 -0
  245. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_dark_normal_ios.svg +50 -0
  246. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_dark_pressed_ios.eps +1031 -0
  247. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_dark_pressed_ios.svg +50 -0
  248. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_light_disabled_ios.eps +814 -0
  249. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_light_disabled_ios.svg +24 -0
  250. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_light_focus_ios.eps +1837 -0
  251. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_light_focus_ios.svg +44 -0
  252. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_light_normal_ios.eps +1002 -0
  253. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_light_normal_ios.svg +43 -0
  254. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_light_pressed_ios.eps +1002 -0
  255. package/gloww-assets/images/google_signin_buttons/web/vector/btn_google_light_pressed_ios.svg +43 -0
  256. package/gloww-assets/swagger.svg +1 -0
  257. package/gloww-gloww.d.ts +5 -0
  258. package/lib/Components/code-editor/code-editor.component.d.ts +16 -0
  259. package/lib/Components/confirmation/confirmation.component.d.ts +20 -0
  260. package/lib/Components/display-objects/display-objects.component.d.ts +93 -0
  261. package/lib/Components/display-objects-configuration.d.ts +5 -0
  262. package/lib/Components/download-progress/download-progress.component.d.ts +30 -0
  263. package/lib/Components/folders/file-edit/file-edit.component.d.ts +31 -0
  264. package/lib/Components/folders/folders/folders.component.d.ts +33 -0
  265. package/lib/Components/header/header.component.d.ts +8 -0
  266. package/lib/Components/html-editor/html-editor.component.d.ts +36 -0
  267. package/lib/Components/menu-list-item/menu-list-item.component.d.ts +22 -0
  268. package/lib/Components/prompt/prompt.component.d.ts +25 -0
  269. package/lib/Components/result-table/result-table.component.d.ts +11 -0
  270. package/lib/Components/search-form/search-form.component.d.ts +8 -0
  271. package/lib/Components/secure-a/secure-a.component.d.ts +13 -0
  272. package/lib/Components/secure-img/secure-img.component.d.ts +17 -0
  273. package/lib/Components/upload-doc/upload-doc.component.d.ts +19 -0
  274. package/lib/Components/upload-file/upload-file.component.d.ts +34 -0
  275. package/lib/Directives/file-sink.directive.d.ts +11 -0
  276. package/lib/Models/nav-item.d.ts +8 -0
  277. package/lib/Pipes/html-format.pipe.d.ts +10 -0
  278. package/lib/Pipes/retry-with-delay.d.ts +2 -0
  279. package/lib/Pipes/safe-html.pipe.d.ts +10 -0
  280. package/lib/Pipes/secure.pipe.d.ts +13 -0
  281. package/lib/Services/dialog.service.d.ts +11 -0
  282. package/lib/Services/folder-service-config.d.ts +7 -0
  283. package/lib/Services/folder.service.d.ts +19 -0
  284. package/lib/Services/gloww.service.d.ts +23 -0
  285. package/lib/Services/nav.service.d.ts +13 -0
  286. package/lib/Services/version-check.service.d.ts +30 -0
  287. package/lib/Services/voice-recognition.service.d.ts +14 -0
  288. package/lib/gloww-security/Components/change-password-dlg/change-password-dlg.component.d.ts +19 -0
  289. package/lib/gloww-security/Components/login/login.component.d.ts +43 -0
  290. package/lib/gloww-security/Components/social-network/social-network.component.d.ts +25 -0
  291. package/lib/gloww-security/Components/social-network-dlg/social-network-dlg.component.d.ts +21 -0
  292. package/lib/gloww-security/Components/user-menu/user-menu.component.d.ts +24 -0
  293. package/lib/gloww-security/Helpers/administrator.guard.d.ts +14 -0
  294. package/lib/gloww-security/Helpers/auth.guard.d.ts +14 -0
  295. package/lib/gloww-security/Helpers/error.interceptor.d.ts +11 -0
  296. package/lib/gloww-security/Helpers/index.d.ts +4 -0
  297. package/lib/gloww-security/Helpers/jwt.interceptor.d.ts +11 -0
  298. package/lib/gloww-security/Helpers/staging.interceptor.d.ts +9 -0
  299. package/lib/gloww-security/Models/oauthassociation.d.ts +7 -0
  300. package/lib/gloww-security/Models/user.d.ts +9 -0
  301. package/lib/gloww-security/Services/authentication-service-config.d.ts +17 -0
  302. package/lib/gloww-security/Services/authentication.service.d.ts +40 -0
  303. package/lib/gloww-security/Services/gloww-security.service.d.ts +6 -0
  304. package/lib/gloww-security/gloww-security.module.d.ts +35 -0
  305. package/lib/gloww.module.d.ts +59 -0
  306. package/lib/injection-token.d.ts +2 -0
  307. package/package.json +40 -0
  308. package/public-api.d.ts +28 -0
@@ -0,0 +1,499 @@
1
+ import { SearchFormComponent } from '../search-form/search-form.component';
2
+ import { Component, ContentChild, ViewChild, Input } from '@angular/core';
3
+ import { FormControl } from '@angular/forms';
4
+ import { MatPaginator } from '@angular/material/paginator';
5
+ import { MatSort } from '@angular/material/sort';
6
+ import { MatTable, MatTableDataSource } from '@angular/material/table';
7
+ import { combineLatest, forkJoin, of, Subject } from 'rxjs';
8
+ import { HeaderComponent } from '../header/header.component';
9
+ import { ResultTableComponent } from '../result-table/result-table.component';
10
+ import { HttpEventType, HttpParams } from '@angular/common/http';
11
+ import { MatDialogConfig } from '@angular/material/dialog';
12
+ import { map, catchError, mergeMap, tap, filter, switchMap, take } from 'rxjs/operators';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/material/dialog";
15
+ import * as i2 from "@angular/router";
16
+ import * as i3 from "@angular/common";
17
+ import * as i4 from "../../gloww-security/Services/authentication.service";
18
+ import * as i5 from "@angular/forms";
19
+ import * as i6 from "@angular/material/card";
20
+ import * as i7 from "@angular/material/form-field";
21
+ import * as i8 from "@angular/material/select";
22
+ import * as i9 from "@angular/material/core";
23
+ import * as i10 from "@angular/material/button";
24
+ import * as i11 from "@angular/material/icon";
25
+ import * as i12 from "@angular/material/table";
26
+ import * as i13 from "@angular/material/paginator";
27
+ import * as i14 from "@angular/material/progress-spinner";
28
+ import * as i15 from "@angular/material/sort";
29
+ ;
30
+ export class DisplayObjectsComponent {
31
+ constructor(changeDetectorRef, dialog, router, location, authenticationService, formBuilder, route) {
32
+ this.changeDetectorRef = changeDetectorRef;
33
+ this.dialog = dialog;
34
+ this.router = router;
35
+ this.location = location;
36
+ this.authenticationService = authenticationService;
37
+ this.formBuilder = formBuilder;
38
+ this.route = route;
39
+ this.canDisplayObj = false;
40
+ this.canEdit = true;
41
+ this.canDelete = true;
42
+ this.canAdd = true;
43
+ this.mandatoryParams = {};
44
+ this.actions = [];
45
+ this.dialogConfig = {};
46
+ this.columnsToDisplay = [];
47
+ this.displayform = true;
48
+ this.displayresult = false;
49
+ this.queryParams = {};
50
+ const component = this;
51
+ this.currentUser = this.authenticationService.currentUserValue.UserInfo;
52
+ this.form2 = this.formBuilder.group({
53
+ _MaxRow_: [null]
54
+ });
55
+ }
56
+ ngOnChanges(changes) {
57
+ }
58
+ ngAfterViewInit() {
59
+ if (!this.searchRequest) {
60
+ this.searchRequest = this.glowwService[`search${this.objectName}`];
61
+ }
62
+ if (!this.postRequest) {
63
+ this.postRequest = this.glowwService[`post${this.objectName}`];
64
+ }
65
+ if (!this.deleteRequest) {
66
+ this.deleteRequest = this.glowwService[`delete${this.objectName}`];
67
+ }
68
+ if (!this.putRequest) {
69
+ this.putRequest = this.glowwService[`put${this.objectName}`];
70
+ }
71
+ if (this.maxrows?.length > 0) {
72
+ this.form.addControl("_MaxRow_", new FormControl(null));
73
+ }
74
+ }
75
+ ngAfterContentInit() {
76
+ console.log(`INIT : fromLayout:${this.formLayout}-displayform:${this.displayform}`);
77
+ if (!this.formLayout && this.resultLayout) {
78
+ this.displayform = false;
79
+ this.displayresult = true;
80
+ }
81
+ this.glowwService.basePathChange.subscribe(newUrl => {
82
+ console.log(`basePathChange : fromLayout:${this.formLayout}-displayform:${this.displayform}`);
83
+ if (!this.formLayout && this.resultLayout) {
84
+ this.displayform = false;
85
+ this.displayresult = true;
86
+ }
87
+ if (!this.displayform) {
88
+ this.Search();
89
+ }
90
+ });
91
+ }
92
+ ngOnInit() {
93
+ }
94
+ Init(data) {
95
+ if ((data && Object.keys(data).length > 0) || this.displayresult) {
96
+ this.Search(data);
97
+ }
98
+ }
99
+ Search(data) {
100
+ this.data = data;
101
+ this.displayresult = true;
102
+ this.displayform = false;
103
+ this.resultException = null;
104
+ if (data) {
105
+ Object.keys(data).forEach(name => {
106
+ this.queryParams[name] = data[name];
107
+ });
108
+ }
109
+ Object.keys(this.route.snapshot.params).forEach(name => {
110
+ this.queryParams[name] = this.route.snapshot.params[name];
111
+ });
112
+ if (this.mandatoryParams) {
113
+ Object.keys(this.mandatoryParams).forEach(name => {
114
+ this.queryParams[name] = this.queryParams[name];
115
+ });
116
+ }
117
+ this.searchRequest.call(this.glowwService, this.queryParams).subscribe(r => {
118
+ this.dataSource = new MatTableDataSource(r);
119
+ this.changeDetectorRef.detectChanges();
120
+ this.UpdateTable();
121
+ }, error => {
122
+ this.displayresult = false;
123
+ this.displayform = true;
124
+ this.resultException = error;
125
+ });
126
+ }
127
+ clean(obj) {
128
+ for (const propName in obj) {
129
+ if (obj[propName] === null || obj[propName] === undefined) {
130
+ delete obj[propName];
131
+ }
132
+ }
133
+ }
134
+ onSearch() {
135
+ this.queryParams = {};
136
+ Object.keys(this.form.value).forEach(name => {
137
+ const val = this.form.value[name];
138
+ if (val) {
139
+ if (val.constructor.name === 'Moment') {
140
+ this.queryParams[name] = val.toISOString();
141
+ }
142
+ else {
143
+ this.queryParams[name] = val;
144
+ }
145
+ }
146
+ });
147
+ if (this.form2.value._MaxRow_) {
148
+ this.queryParams._MaxRow_ = this.form2.value._MaxRow_;
149
+ }
150
+ this.clean(this.queryParams);
151
+ const params = new HttpParams({ fromObject: this.queryParams });
152
+ const currentstate = this.location.getState();
153
+ this.location.replaceState(this.router.url, params.toString());
154
+ this.Search();
155
+ }
156
+ UpdateDataSource(r) {
157
+ this.dataSource = new MatTableDataSource(r);
158
+ this.changeDetectorRef.detectChanges();
159
+ this.UpdateTable();
160
+ }
161
+ UpdateTable() {
162
+ if (this.dataSource) {
163
+ if (!this.table) {
164
+ console.log('!this.table');
165
+ return;
166
+ }
167
+ this.resultLayout.columnDefs.forEach(columnDef => this.table.addColumnDef(columnDef));
168
+ this.dataSource.paginator = this.paginator;
169
+ this.dataSource.sort = this.sort;
170
+ this.columnsToDisplay = this.columns();
171
+ }
172
+ }
173
+ canDisplayObjThis(obj, action) {
174
+ try {
175
+ if (!this.displayObjLink) {
176
+ return false;
177
+ }
178
+ if (typeof this.canDisplayObj === 'boolean') {
179
+ return this.canDisplayObj;
180
+ }
181
+ return this.canDisplayObj(this.currentUser, obj, action);
182
+ }
183
+ catch (ex) {
184
+ console.log(ex);
185
+ return true;
186
+ }
187
+ }
188
+ canAddThis() {
189
+ try {
190
+ if (!this.canAdd) {
191
+ return false;
192
+ }
193
+ if (typeof this.canAdd === 'boolean') {
194
+ return this.canAdd;
195
+ }
196
+ return this.canAdd(this.currentUser);
197
+ }
198
+ catch (ex) {
199
+ console.log(ex);
200
+ return true;
201
+ }
202
+ }
203
+ canEditThis(obj) {
204
+ try {
205
+ if (!this.canEdit) {
206
+ return false;
207
+ }
208
+ if (typeof this.canEdit === 'boolean') {
209
+ return this.canEdit;
210
+ }
211
+ return this.canEdit(this.currentUser, obj);
212
+ }
213
+ catch (ex) {
214
+ console.log(ex);
215
+ return true;
216
+ }
217
+ }
218
+ canDeleteThis(obj) {
219
+ try {
220
+ if (!this.canDelete) {
221
+ return false;
222
+ }
223
+ if (typeof this.canDelete === 'boolean') {
224
+ return this.canDelete;
225
+ }
226
+ return this.canDelete(this.currentUser, obj);
227
+ }
228
+ catch (ex) {
229
+ console.log(ex);
230
+ return false;
231
+ }
232
+ }
233
+ displayObjLinkThis(obj, action) {
234
+ if (!this.displayObjLink) {
235
+ return null;
236
+ }
237
+ return this.displayObjLink(obj, action);
238
+ }
239
+ isString(value) {
240
+ return typeof value === 'string' || value instanceof String;
241
+ }
242
+ getPrimaryKey(obj) {
243
+ let res = [];
244
+ if (this.isString(this.primaryKey)) {
245
+ console.log("string");
246
+ res.push(obj[this.primaryKey]);
247
+ }
248
+ else {
249
+ console.log("string[]");
250
+ this.primaryKey.forEach(key => res.push(obj[key]));
251
+ }
252
+ return res;
253
+ }
254
+ _saveObj(obj) {
255
+ var subject = new Subject();
256
+ this.postRequest.call(this.glowwService, obj).subscribe(data => {
257
+ const tmp = this.dataSource.data;
258
+ tmp.push(data);
259
+ this.dataSource.data = tmp;
260
+ subject.next(data);
261
+ }, error => {
262
+ alert(`Unable to add Object ${error.status} ${error.statusText}\n${error.Message}\n${error.error}`);
263
+ subject.error(error);
264
+ });
265
+ return subject;
266
+ }
267
+ _saveFile(fileField, obj, file) {
268
+ const formData = new FormData();
269
+ formData.append('file', file.data);
270
+ return this.glowwService[`post${this.objectName}${fileField}`].call(this.glowwService, this.getPrimaryKey(obj), formData).pipe(tap((event) => {
271
+ switch (event.type) {
272
+ case HttpEventType.UploadProgress:
273
+ file.progress = Math.round(event.loaded * 100 / (event.total ?? 1));
274
+ file.inProgress = file.progress !== 100;
275
+ break;
276
+ case HttpEventType.Response:
277
+ file.progress = 100;
278
+ file.status = "Done";
279
+ file.inProgress = false;
280
+ break;
281
+ }
282
+ }), filter((event) => {
283
+ console.log(`filter ${event.type}`);
284
+ return event.type === HttpEventType.Response;
285
+ }), map((event) => {
286
+ console.log(`map ${event.type}`);
287
+ return event.body;
288
+ }), catchError((error) => {
289
+ file.inProgress = false;
290
+ file.status = "Error";
291
+ console.log(`${file.data.name} upload failed.`);
292
+ //subject.error(error);
293
+ return of(`${file.data.name} upload failed.`);
294
+ }));
295
+ }
296
+ AddObj() {
297
+ const dialogConfig = new MatDialogConfig();
298
+ dialogConfig.disableClose = true;
299
+ dialogConfig.autoFocus = true;
300
+ dialogConfig.closeOnNavigation = false;
301
+ if (this.dialogConfig) {
302
+ Object.keys(this.dialogConfig).forEach(name => {
303
+ dialogConfig[name] = this.dialogConfig[name];
304
+ });
305
+ }
306
+ let args = {};
307
+ Object.keys(this.route.snapshot?.params).forEach(key => {
308
+ args[key] = this.route.snapshot?.params[key];
309
+ dialogConfig.data = args;
310
+ });
311
+ const dlg = this.dialog.open(this.Editor, dialogConfig);
312
+ dlg.componentInstance.callback = (data => {
313
+ let datacopy = { ...data };
314
+ const fileFields = this.Editor.fileFields;
315
+ if (fileFields?.length == 1) {
316
+ // Un seul champ, il peut être multiple
317
+ const fileField = fileFields[0];
318
+ const files = datacopy[fileField];
319
+ delete datacopy[fileField];
320
+ const allobs = {};
321
+ files.forEach(file => {
322
+ if (file.statut !== 'Done' && file.statut !== 'Error') {
323
+ const obs = this._saveObj(datacopy).pipe(switchMap(newdata => this._saveFile(fileField, newdata, file)));
324
+ allobs[file.name] = obs;
325
+ }
326
+ });
327
+ return combineLatest(allobs).pipe(take(1));
328
+ }
329
+ else if (fileFields?.length > 1) {
330
+ // Plusieurs champs file, il ne peut y avoir qu'une seul fichier par champ.
331
+ const fields = {};
332
+ fileFields.forEach(ff => {
333
+ fields[ff] = datacopy[ff];
334
+ delete datacopy[ff];
335
+ return this._saveObj(datacopy).pipe(mergeMap(newdata => {
336
+ var allobs = [];
337
+ Object.entries(fields).forEach(([fileField, files]) => {
338
+ if (files.length > 0) {
339
+ allobs.push(this._saveFile(fileField, newdata, files[0]));
340
+ }
341
+ });
342
+ return forkJoin(allobs); // TODO : PAS TERMINE... JAMAIS UTILISE...
343
+ }));
344
+ });
345
+ }
346
+ else {
347
+ // Form sans fichier
348
+ return this._saveObj(data);
349
+ }
350
+ });
351
+ }
352
+ DeleteObj(obj) {
353
+ if (confirm('Are you sure you want to delete this objet ? ')) {
354
+ this.deleteRequest.apply(this.glowwService, this.getPrimaryKey(obj)).subscribe(p => {
355
+ const i = this.dataSource.data.indexOf(obj);
356
+ const tmp = this.dataSource.data;
357
+ tmp.splice(i, 1);
358
+ this.dataSource.data = tmp;
359
+ }, error => {
360
+ alert(`Unable to delete Object ${error.status} ${error.statusText}\n${error.Message}\n${error.error}`);
361
+ });
362
+ }
363
+ }
364
+ _updateObj(current, newData) {
365
+ let args = this.getPrimaryKey(current);
366
+ args.push(newData);
367
+ var subject = new Subject();
368
+ this.putRequest.apply(this.glowwService, args).subscribe(data => {
369
+ const i = this.dataSource.data.indexOf(current);
370
+ const tmp = this.dataSource.data;
371
+ tmp[i] = data;
372
+ this.dataSource.data = tmp;
373
+ subject.next(data);
374
+ }, error => {
375
+ alert(`Unable to update Object ${error.status} ${error.statusText}\n${error.Message}\n${error.error}`);
376
+ subject.error(error);
377
+ });
378
+ return subject;
379
+ }
380
+ EditObj(obj) {
381
+ const dialogConfig = new MatDialogConfig();
382
+ dialogConfig.disableClose = true;
383
+ dialogConfig.autoFocus = true;
384
+ dialogConfig.closeOnNavigation = false;
385
+ if (this.dialogConfig) {
386
+ Object.keys(this.dialogConfig).forEach(name => {
387
+ dialogConfig[name] = this.dialogConfig[name];
388
+ });
389
+ }
390
+ dialogConfig.data = obj;
391
+ const dlg = this.dialog.open(this.Editor, dialogConfig);
392
+ dlg.componentInstance.callback = (data => {
393
+ let datacopy = { ...data };
394
+ const fileFields = this.Editor.fileFields;
395
+ if (fileFields?.length == 1) {
396
+ // Un seul champ, il peut être multiple
397
+ const fileField = fileFields[0];
398
+ const files = datacopy[fileField];
399
+ delete datacopy[fileField];
400
+ const allobs = {};
401
+ files.forEach(file => {
402
+ if (file.statut !== 'Done' && file.statut !== 'Error') {
403
+ const obs = this._updateObj(obj, datacopy).pipe(switchMap(newdata => this._saveFile(fileField, newdata, file)));
404
+ allobs[file.name] = obs;
405
+ }
406
+ });
407
+ return combineLatest(allobs).pipe(take(1));
408
+ }
409
+ else if (fileFields?.length > 1) {
410
+ // Plusieurs champs file, il ne peut y avoir qu'une seul fichier par champ.
411
+ const fields = {};
412
+ fileFields.forEach(ff => {
413
+ fields[ff] = datacopy[ff];
414
+ delete datacopy[ff];
415
+ return this._updateObj(obj, datacopy).pipe(mergeMap(newdata => {
416
+ var allobs = [];
417
+ Object.entries(fields).forEach(([fileField, files]) => {
418
+ if (files.length > 0) {
419
+ allobs.push(this._saveFile(fileField, newdata, files[0]));
420
+ }
421
+ });
422
+ return forkJoin(allobs); // TODO : PAS TERMINE... JAMAIS UTILISE...
423
+ }));
424
+ });
425
+ }
426
+ else {
427
+ // Form sans fichier
428
+ return this._updateObj(obj, data);
429
+ }
430
+ });
431
+ }
432
+ }
433
+ DisplayObjectsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DisplayObjectsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MatDialog }, { token: i2.Router }, { token: i3.Location }, { token: i4.AuthenticationService }, { token: i5.FormBuilder }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
434
+ DisplayObjectsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DisplayObjectsComponent, selector: "glw-display-objects", inputs: { configuration: "configuration", displayObjLink: "displayObjLink", canDisplayObj: "canDisplayObj", canEdit: "canEdit", canDelete: "canDelete", canAdd: "canAdd", form: "form", Editor: "Editor", searchRequest: "searchRequest", postRequest: "postRequest", deleteRequest: "deleteRequest", putRequest: "putRequest", columns: "columns", glowwService: "glowwService", objectName: "objectName", primaryKey: "primaryKey", maxrows: "maxrows", mandatoryParams: "mandatoryParams", actions: "actions", dialogConfig: "dialogConfig", fileFields: "fileFields" }, queries: [{ propertyName: "header", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "formLayout", first: true, predicate: SearchFormComponent, descendants: true }, { propertyName: "resultLayout", first: true, predicate: ResultTableComponent, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>\r\n", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"], components: [{ type: i6.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i13.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i14.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i15.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i12.MatCellDef, selector: "[matCellDef]" }, { type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i2.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
435
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DisplayObjectsComponent, decorators: [{
436
+ type: Component,
437
+ args: [{ selector: 'glw-display-objects', template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>\r\n", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"] }]
438
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.MatDialog }, { type: i2.Router }, { type: i3.Location }, { type: i4.AuthenticationService }, { type: i5.FormBuilder }, { type: i2.ActivatedRoute }]; }, propDecorators: { header: [{
439
+ type: ContentChild,
440
+ args: [HeaderComponent]
441
+ }], formLayout: [{
442
+ type: ContentChild,
443
+ args: [SearchFormComponent]
444
+ }], resultLayout: [{
445
+ type: ContentChild,
446
+ args: [ResultTableComponent]
447
+ }], table: [{
448
+ type: ViewChild,
449
+ args: [MatTable, { static: false }]
450
+ }], paginator: [{
451
+ type: ViewChild,
452
+ args: [MatPaginator, { static: false }]
453
+ }], sort: [{
454
+ type: ViewChild,
455
+ args: [MatSort, { static: false }]
456
+ }], configuration: [{
457
+ type: Input
458
+ }], displayObjLink: [{
459
+ type: Input
460
+ }], canDisplayObj: [{
461
+ type: Input
462
+ }], canEdit: [{
463
+ type: Input
464
+ }], canDelete: [{
465
+ type: Input
466
+ }], canAdd: [{
467
+ type: Input
468
+ }], form: [{
469
+ type: Input
470
+ }], Editor: [{
471
+ type: Input
472
+ }], searchRequest: [{
473
+ type: Input
474
+ }], postRequest: [{
475
+ type: Input
476
+ }], deleteRequest: [{
477
+ type: Input
478
+ }], putRequest: [{
479
+ type: Input
480
+ }], columns: [{
481
+ type: Input
482
+ }], glowwService: [{
483
+ type: Input
484
+ }], objectName: [{
485
+ type: Input
486
+ }], primaryKey: [{
487
+ type: Input
488
+ }], maxrows: [{
489
+ type: Input
490
+ }], mandatoryParams: [{
491
+ type: Input
492
+ }], actions: [{
493
+ type: Input
494
+ }], dialogConfig: [{
495
+ type: Input
496
+ }], fileFields: [{
497
+ type: Input
498
+ }] } });
499
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kaXNwbGF5LW9iamVjdHMvZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kaXNwbGF5LW9iamVjdHMvZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLFNBQVMsRUFBc0ssS0FBSyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ25RLE9BQU8sRUFBRSxXQUFXLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFtRCxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQWdDLGFBQWEsRUFBRSxVQUFVLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFHN0csT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSXRFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFB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QUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ00sU0FBUztzQkFBcEQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNILElBQUk7c0JBQTFDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJNUIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpc3BsYXlPYmplY3RzQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vLi4vZGlzcGxheS1vYmplY3RzLWNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBTZWFyY2hGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZvcm0vc2VhcmNoLWZvcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVmZXJlbmNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXIvc3JjL3JlbmRlcjMvcjNfYXN0JztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIE9uSW5pdCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBFbGVtZW50UmVmLCBEaXJlY3RpdmUsIENoYW5nZURldGVjdG9yUmVmLCBJbmplY3RvciwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIEFmdGVyQ29udGVudEluaXQsIFF1ZXJ5TGlzdCwgQ29udGVudENoaWxkcmVuLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIElucHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRDb2x1bW5EZWYsIE1hdFRhYmxlLCBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBPYmplY3RVbnN1YnNjcmliZWRFcnJvciwgb2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vaGVhZGVyL2hlYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZXN1bHRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL3Jlc3VsdC10YWJsZS9yZXN1bHQtdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cFBhcmFtcywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBEYXRhLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEdsb3d3U2VydmljZSB9IGZyb20gJy4uLy4uL1NlcnZpY2VzL2dsb3d3LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9nbG93dy1zZWN1cml0eS9TZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yLCBtZXJnZU1hcCwgdGFwLCBmaWx0ZXIsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uIHtcclxuXHRpY29uOiBhbnk7XHJcblx0bmFtZT86IHN0cmluZztcclxuXHRyb3V0ZXJMaW5rRmN0PzogKG9iaikgPT4gc3RyaW5nW107XHJcblx0ZGlzcGxheT86IChvYmopID0+IGJvb2xlYW47XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2dsdy1kaXNwbGF5LW9iamVjdHMnLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9kaXNwbGF5LW9iamVjdHMuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2Rpc3BsYXktb2JqZWN0cy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaXNwbGF5T2JqZWN0c0NvbXBvbmVudDxUT2JqPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcblx0QENvbnRlbnRDaGlsZChIZWFkZXJDb21wb25lbnQpIGhlYWRlcjogSGVhZGVyQ29tcG9uZW50O1xyXG5cdEBDb250ZW50Q2hpbGQoU2VhcmNoRm9ybUNvbXBvbmVudCkgZm9ybUxheW91dDogU2VhcmNoRm9ybUNvbXBvbmVudDtcclxuXHRAQ29udGVudENoaWxkKFJlc3VsdFRhYmxlQ29tcG9uZW50KSByZXN1bHRMYXlvdXQ6IFJlc3VsdFRhYmxlQ29tcG9uZW50O1xyXG5cdEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZTogTWF0VGFibGU8YW55PjtcclxuXHRAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG5cdEBWaWV3Q2hpbGQoTWF0U29ydCwgeyBzdGF0aWM6IGZhbHNlIH0pIHNvcnQ6IE1hdFNvcnQ7XHJcblxyXG5cdC8vIGFmdGVyIHRoZSA8bmctY29udGVudD4gaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIGF2YWlsYWJsZS5cclxuXHQvLyBBbGwgdGhhdCdzIGxlZnQgaXMgdG8gYWRkIHRoZW0gdG8gdGhlIHRhYmxlIG91cnNlbHZlczpcclxuXHRASW5wdXQoKSBjb25maWd1cmF0aW9uOiBEaXNwbGF5T2JqZWN0c0NvbmZpZ3VyYXRpb248VE9iaj47XHJcblx0QElucHV0KCkgZGlzcGxheU9iakxpbms6IChvYmo6IFRPYmosIGFjdGlvbj86IHN0cmluZykgPT4gKHN0cmluZyB8IHN0cmluZ1tdKTtcclxuXHRASW5wdXQoKSBjYW5EaXNwbGF5T2JqOiAoKHVzZXI6IGFueSwgb2JqOiBUT2JqLCBhY3Rpb24/OiBzdHJpbmcpID0+IGJvb2xlYW4pIHwgYm9vbGVhbiA9IGZhbHNlO1xyXG5cdEBJbnB1dCgpIGNhbkVkaXQ6ICgodXNlcjogYW55LCBvYmo6IFRPYmopID0+IGJvb2xlYW4pIHwgYm9vbGVhbiA9IHRydWU7XHJcblx0QElucHV0KCkgY2FuRGVsZXRlOiAoKHVzZXI6IGFueSwgb2JqOiBUT2JqKSA9PiBib29sZWFuKSB8IGJvb2xlYW4gPSB0cnVlO1xyXG5cdEBJbnB1dCgpIGNhbkFkZDogKCh1c2VyOiBhbnkpID0+IGJvb2xlYW4pIHwgYm9vbGVhbiA9IHRydWU7XHJcblx0QElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xyXG5cdEBJbnB1dCgpIEVkaXRvcjogVGVtcGxhdGVSZWY8YW55PjtcclxuXHRASW5wdXQoKSBzZWFyY2hSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqW10+O1xyXG5cdEBJbnB1dCgpIHBvc3RSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqPjtcclxuXHRASW5wdXQoKSBkZWxldGVSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqW10+O1xyXG5cdEBJbnB1dCgpIHB1dFJlcXVlc3Q6IChvYmo/OiBUT2JqIHwgYW55KSA9PiBPYnNlcnZhYmxlPFRPYmpbXT47XHJcblx0QElucHV0KCkgY29sdW1uczogKCkgPT4gc3RyaW5nW107XHJcblx0QElucHV0KCkgZ2xvd3dTZXJ2aWNlOiBHbG93d1NlcnZpY2U7XHJcblx0QElucHV0KCkgb2JqZWN0TmFtZTogc3RyaW5nO1xyXG5cdEBJbnB1dCgpIHByaW1hcnlLZXk6IHN0cmluZyB8IHN0cmluZ1tdO1xyXG5cdEBJbnB1dCgpIG1heHJvd3M6IHN0cmluZ1tdO1xyXG5cdEBJbnB1dCgpIG1hbmRhdG9yeVBhcmFtczogb2JqZWN0ID0ge307XHJcblx0QElucHV0KCkgYWN0aW9ucyA9IFtdO1xyXG5cdEBJbnB1dCgpIGRpYWxvZ0NvbmZpZzogb2JqZWN0ID0ge307XHJcblx0QElucHV0KCkgZmlsZUZpZWxkczogc3RyaW5nW107XHJcblxyXG5cdGNvbHVtbnNUb0Rpc3BsYXkgPSBbXTtcclxuXHRkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8VE9iaj47XHJcblx0ZGlzcGxheWZvcm0gPSB0cnVlO1xyXG5cdGRpc3BsYXlyZXN1bHQgPSBmYWxzZTtcclxuXHRxdWVyeVBhcmFtczogYW55ID0ge307XHJcblx0cmVzdWx0RXhjZXB0aW9uOiBzdHJpbmc7XHJcblx0Y3VycmVudFVzZXI6IGFueTtcclxuXHRmb3JtMjogRm9ybUdyb3VwO1xyXG5cdGRhdGE6IG9iamVjdDtcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLCBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLCBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcclxuXHRcdGNvbnN0IGNvbXBvbmVudCA9IHRoaXM7XHJcblx0XHR0aGlzLmN1cnJlbnRVc2VyID0gKHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmN1cnJlbnRVc2VyVmFsdWUgYXMgYW55KS5Vc2VySW5mbztcclxuXHRcdHRoaXMuZm9ybTIgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuXHRcdFx0X01heFJvd186IFtudWxsXVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcblx0fVxyXG5cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuc2VhcmNoUmVxdWVzdCkge1xyXG5cdFx0XHR0aGlzLnNlYXJjaFJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgc2VhcmNoJHt0aGlzLm9iamVjdE5hbWV9YF07XHJcblx0XHR9XHJcblx0XHRpZiAoIXRoaXMucG9zdFJlcXVlc3QpIHtcclxuXHRcdFx0dGhpcy5wb3N0UmVxdWVzdCA9IHRoaXMuZ2xvd3dTZXJ2aWNlW2Bwb3N0JHt0aGlzLm9iamVjdE5hbWV9YF07XHJcblx0XHR9XHJcblx0XHRpZiAoIXRoaXMuZGVsZXRlUmVxdWVzdCkge1xyXG5cdFx0XHR0aGlzLmRlbGV0ZVJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgZGVsZXRlJHt0aGlzLm9iamVjdE5hbWV9YF07XHJcblx0XHR9XHJcblx0XHRpZiAoIXRoaXMucHV0UmVxdWVzdCkge1xyXG5cdFx0XHR0aGlzLnB1dFJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgcHV0JHt0aGlzLm9iamVjdE5hbWV9YF07XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5tYXhyb3dzPy5sZW5ndGggPiAwKSB7IHRoaXMuZm9ybS5hZGRDb250cm9sKFwiX01heFJvd19cIiwgbmV3IEZvcm1Db250cm9sKG51bGwpKTsgfVxyXG5cdH1cclxuXHRuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcblx0XHRjb25zb2xlLmxvZyhgSU5JVCA6IGZyb21MYXlvdXQ6JHt0aGlzLmZvcm1MYXlvdXR9LWRpc3BsYXlmb3JtOiR7dGhpcy5kaXNwbGF5Zm9ybX1gKVxyXG5cdFx0aWYgKCF0aGlzLmZvcm1MYXlvdXQgJiYgdGhpcy5yZXN1bHRMYXlvdXQpIHtcclxuXHRcdFx0dGhpcy5kaXNwbGF5Zm9ybSA9IGZhbHNlOyB0aGlzLmRpc3BsYXlyZXN1bHQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5nbG93d1NlcnZpY2UuYmFzZVBhdGhDaGFuZ2Uuc3Vic2NyaWJlKG5ld1VybCA9PiB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBiYXNlUGF0aENoYW5nZSA6IGZyb21MYXlvdXQ6JHt0aGlzLmZvcm1MYXlvdXR9LWRpc3BsYXlmb3JtOiR7dGhpcy5kaXNwbGF5Zm9ybX1gKVxyXG5cdFx0XHRpZiAoIXRoaXMuZm9ybUxheW91dCAmJiB0aGlzLnJlc3VsdExheW91dCkge1xyXG5cdFx0XHRcdHRoaXMuZGlzcGxheWZvcm0gPSBmYWxzZTsgdGhpcy5kaXNwbGF5cmVzdWx0ID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIXRoaXMuZGlzcGxheWZvcm0pIHsgdGhpcy5TZWFyY2goKTsgfVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHR9XHJcblxyXG5cdEluaXQoZGF0YT86IERhdGEpIHtcclxuXHRcdGlmICgoZGF0YSAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKSB8fCB0aGlzLmRpc3BsYXlyZXN1bHQpIHtcclxuXHRcdFx0dGhpcy5TZWFyY2goZGF0YSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRTZWFyY2goZGF0YT86IERhdGEpIHtcclxuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XHJcblx0XHR0aGlzLmRpc3BsYXlyZXN1bHQgPSB0cnVlO1xyXG5cdFx0dGhpcy5kaXNwbGF5Zm9ybSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5yZXN1bHRFeGNlcHRpb24gPSBudWxsO1xyXG5cclxuXHRcdGlmIChkYXRhKSB7XHJcblx0XHRcdE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2gobmFtZSA9PiB7XHJcblx0XHRcdFx0dGhpcy5xdWVyeVBhcmFtc1tuYW1lXSA9IGRhdGFbbmFtZV07XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdE9iamVjdC5rZXlzKHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG5cdFx0XHR0aGlzLnF1ZXJ5UGFyYW1zW25hbWVdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbbmFtZV07XHJcblx0XHR9KTtcclxuXHJcblx0XHRpZiAodGhpcy5tYW5kYXRvcnlQYXJhbXMpIHtcclxuXHRcdFx0T2JqZWN0LmtleXModGhpcy5tYW5kYXRvcnlQYXJhbXMpLmZvckVhY2gobmFtZSA9PiB7XHJcblx0XHRcdFx0dGhpcy5xdWVyeVBhcmFtc1tuYW1lXSA9IHRoaXMucXVlcnlQYXJhbXNbbmFtZV07XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2VhcmNoUmVxdWVzdC5jYWxsKHRoaXMuZ2xvd3dTZXJ2aWNlLCB0aGlzLnF1ZXJ5UGFyYW1zKS5zdWJzY3JpYmUociA9PiB7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8VE9iaj4ocik7XHJcblx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHR0aGlzLlVwZGF0ZVRhYmxlKCk7XHJcblx0XHR9LFxyXG5cdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0dGhpcy5kaXNwbGF5cmVzdWx0ID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5kaXNwbGF5Zm9ybSA9IHRydWU7XHJcblx0XHRcdFx0dGhpcy5yZXN1bHRFeGNlcHRpb24gPSBlcnJvcjtcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRjbGVhbihvYmopIHtcclxuXHRcdGZvciAoY29uc3QgcHJvcE5hbWUgaW4gb2JqKSB7XHJcblx0XHRcdGlmIChvYmpbcHJvcE5hbWVdID09PSBudWxsIHx8IG9ialtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGRlbGV0ZSBvYmpbcHJvcE5hbWVdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRvblNlYXJjaCgpIHtcclxuXHRcdHRoaXMucXVlcnlQYXJhbXMgPSB7fTtcclxuXHRcdE9iamVjdC5rZXlzKHRoaXMuZm9ybS52YWx1ZSkuZm9yRWFjaChuYW1lID0+IHtcclxuXHRcdFx0Y29uc3QgdmFsID0gdGhpcy5mb3JtLnZhbHVlW25hbWVdO1xyXG5cdFx0XHRpZiAodmFsKSB7XHJcblx0XHRcdFx0aWYgKHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnTW9tZW50Jykge1xyXG5cdFx0XHRcdFx0dGhpcy5xdWVyeVBhcmFtc1tuYW1lXSA9ICh2YWwgYXMgTW9tZW50KS50b0lTT1N0cmluZygpXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMucXVlcnlQYXJhbXNbbmFtZV0gPSB2YWw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdGlmICh0aGlzLmZvcm0yLnZhbHVlLl9NYXhSb3dfKSB7IHRoaXMucXVlcnlQYXJhbXMuX01heFJvd18gPSB0aGlzLmZvcm0yLnZhbHVlLl9NYXhSb3dfOyB9XHJcblx0XHR0aGlzLmNsZWFuKHRoaXMucXVlcnlQYXJhbXMpO1xyXG5cdFx0Y29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoeyBmcm9tT2JqZWN0OiB0aGlzLnF1ZXJ5UGFyYW1zIH0pO1xyXG5cdFx0Y29uc3QgY3VycmVudHN0YXRlID0gdGhpcy5sb2NhdGlvbi5nZXRTdGF0ZSgpO1xyXG5cdFx0dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5yb3V0ZXIudXJsLCBwYXJhbXMudG9TdHJpbmcoKSk7XHJcblx0XHR0aGlzLlNlYXJjaCgpO1xyXG5cclxuXHR9XHJcblxyXG5cdFVwZGF0ZURhdGFTb3VyY2UocjogVE9ialtdKSB7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFRPYmo+KHIpO1xyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG5cdFx0dGhpcy5VcGRhdGVUYWJsZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdFVwZGF0ZVRhYmxlKCkge1xyXG5cdFx0aWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG5cdFx0XHRpZiAoIXRoaXMudGFibGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnIXRoaXMudGFibGUnKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5yZXN1bHRMYXlvdXQuY29sdW1uRGVmcy5mb3JFYWNoKGNvbHVtbkRlZiA9PiB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZihjb2x1bW5EZWYpKTtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuXHRcdFx0dGhpcy5jb2x1bW5zVG9EaXNwbGF5ID0gdGhpcy5jb2x1bW5zKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjYW5EaXNwbGF5T2JqVGhpcyhvYmosIGFjdGlvbj8pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICghdGhpcy5kaXNwbGF5T2JqTGluaykgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLmNhbkRpc3BsYXlPYmogPT09ICdib29sZWFuJykgeyByZXR1cm4gdGhpcy5jYW5EaXNwbGF5T2JqOyB9XHJcblx0XHRcdHJldHVybiB0aGlzLmNhbkRpc3BsYXlPYmoodGhpcy5jdXJyZW50VXNlciwgb2JqLCBhY3Rpb24pO1xyXG5cdFx0fSBjYXRjaCAoZXgpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblx0Y2FuQWRkVGhpcygpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICghdGhpcy5jYW5BZGQpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdGlmICh0eXBlb2YgdGhpcy5jYW5BZGQgPT09ICdib29sZWFuJykgeyByZXR1cm4gdGhpcy5jYW5BZGQ7IH1cclxuXHRcdFx0cmV0dXJuIHRoaXMuY2FuQWRkKHRoaXMuY3VycmVudFVzZXIpO1xyXG5cdFx0fSBjYXRjaCAoZXgpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNhbkVkaXRUaGlzKG9iaikge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKCF0aGlzLmNhbkVkaXQpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdGlmICh0eXBlb2YgdGhpcy5jYW5FZGl0ID09PSAnYm9vbGVhbicpIHsgcmV0dXJuIHRoaXMuY2FuRWRpdDsgfVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5jYW5FZGl0KHRoaXMuY3VycmVudFVzZXIsIG9iaik7XHJcblx0XHR9IGNhdGNoIChleCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y2FuRGVsZXRlVGhpcyhvYmopIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICghdGhpcy5jYW5EZWxldGUpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdGlmICh0eXBlb2YgdGhpcy5jYW5EZWxldGUgPT09ICdib29sZWFuJykgeyByZXR1cm4gdGhpcy5jYW5EZWxldGU7IH1cclxuXHRcdFx0cmV0dXJuIHRoaXMuY2FuRGVsZXRlKHRoaXMuY3VycmVudFVzZXIsIG9iaik7XHJcblx0XHR9IGNhdGNoIChleCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGRpc3BsYXlPYmpMaW5rVGhpcyhvYmosIGFjdGlvbj8pIHtcclxuXHRcdGlmICghdGhpcy5kaXNwbGF5T2JqTGluaykgeyByZXR1cm4gbnVsbDsgfVxyXG5cdFx0cmV0dXJuIHRoaXMuZGlzcGxheU9iakxpbmsob2JqLCBhY3Rpb24pO1xyXG5cdH1cclxuXHJcblxyXG5cdGlzU3RyaW5nKHZhbHVlKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcclxuXHR9XHJcblx0Z2V0UHJpbWFyeUtleShvYmo6IG9iamVjdCB8IFRPYmopOiBvYmplY3RbXSB7XHJcblx0XHRsZXQgcmVzID0gW107XHJcblx0XHRpZiAodGhpcy5pc1N0cmluZyh0aGlzLnByaW1hcnlLZXkpKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwic3RyaW5nXCIpO1xyXG5cdFx0XHRyZXMucHVzaChvYmpbdGhpcy5wcmltYXJ5S2V5IGFzIHN0cmluZ10pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCJzdHJpbmdbXVwiKTtcclxuXHRcdFx0KHRoaXMucHJpbWFyeUtleSBhcyBzdHJpbmdbXSkuZm9yRWFjaChrZXkgPT4gcmVzLnB1c2gob2JqW2tleV0pKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXM7XHJcblx0fVxyXG5cclxuXHRfc2F2ZU9iaihvYmo6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHR2YXIgc3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHRcdHRoaXMucG9zdFJlcXVlc3QuY2FsbCh0aGlzLmdsb3d3U2VydmljZSwgb2JqKS5zdWJzY3JpYmUoXHJcblx0XHRcdGRhdGEgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHRtcCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG5cdFx0XHRcdHRtcC5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdG1wO1xyXG5cdFx0XHRcdHN1YmplY3QubmV4dChkYXRhKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdGFsZXJ0KGBVbmFibGUgdG8gYWRkIE9iamVjdCAke2Vycm9yLnN0YXR1c30gJHtlcnJvci5zdGF0dXNUZXh0fVxcbiR7ZXJyb3IuTWVzc2FnZX1cXG4ke2Vycm9yLmVycm9yfWApO1xyXG5cdFx0XHRcdHN1YmplY3QuZXJyb3IoZXJyb3IpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdFx0cmV0dXJuIHN1YmplY3Q7XHJcblx0fVxyXG5cdF9zYXZlRmlsZShmaWxlRmllbGQ6IHN0cmluZywgb2JqOiBhbnksIGZpbGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG5cdFx0Zm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZS5kYXRhKTtcclxuXHRcdHJldHVybiB0aGlzLmdsb3d3U2VydmljZVtgcG9zdCR7dGhpcy5vYmplY3ROYW1lfSR7ZmlsZUZpZWxkfWBdLmNhbGwodGhpcy5nbG93d1NlcnZpY2UsIHRoaXMuZ2V0UHJpbWFyeUtleShvYmopLCBmb3JtRGF0YSkucGlwZShcclxuXHRcdFx0dGFwKChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuXHRcdFx0XHRzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcclxuXHRcdFx0XHRcdGNhc2UgSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzczpcclxuXHRcdFx0XHRcdFx0ZmlsZS5wcm9ncmVzcyA9IE1hdGgucm91bmQoZXZlbnQubG9hZGVkICogMTAwIC8gKGV2ZW50LnRvdGFsID8/IDEpKTtcclxuXHRcdFx0XHRcdFx0ZmlsZS5pblByb2dyZXNzID0gZmlsZS5wcm9ncmVzcyAhPT0gMTAwO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcclxuXHRcdFx0XHRcdFx0ZmlsZS5wcm9ncmVzcyA9IDEwMDtcclxuXHRcdFx0XHRcdFx0ZmlsZS5zdGF0dXMgPSBcIkRvbmVcIjtcclxuXHRcdFx0XHRcdFx0ZmlsZS5pblByb2dyZXNzID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSksXHJcblx0XHRcdGZpbHRlcigoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGZpbHRlciAke2V2ZW50LnR5cGV9YCk7XHJcblx0XHRcdFx0cmV0dXJuIGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2VcclxuXHRcdFx0fSksXHJcblx0XHRcdG1hcCgoZXZlbnQ6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYG1hcCAke2V2ZW50LnR5cGV9YCk7XHJcblx0XHRcdFx0cmV0dXJuIGV2ZW50LmJvZHk7XHJcblx0XHRcdH0pLFxyXG5cdFx0XHRjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRmaWxlLmluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuXHRcdFx0XHRmaWxlLnN0YXR1cyA9IFwiRXJyb3JcIjtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtmaWxlLmRhdGEubmFtZX0gdXBsb2FkIGZhaWxlZC5gKTtcclxuXHRcdFx0XHQvL3N1YmplY3QuZXJyb3IoZXJyb3IpO1xyXG5cdFx0XHRcdHJldHVybiBvZihgJHtmaWxlLmRhdGEubmFtZX0gdXBsb2FkIGZhaWxlZC5gKTtcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRBZGRPYmooKSB7XHJcblx0XHRjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcblx0XHRkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuXHRcdGRpYWxvZ0NvbmZpZy5hdXRvRm9jdXMgPSB0cnVlO1xyXG5cdFx0ZGlhbG9nQ29uZmlnLmNsb3NlT25OYXZpZ2F0aW9uID0gZmFsc2U7XHJcblx0XHRpZiAodGhpcy5kaWFsb2dDb25maWcpIHtcclxuXHRcdFx0T2JqZWN0LmtleXModGhpcy5kaWFsb2dDb25maWcpLmZvckVhY2goXHJcblx0XHRcdFx0bmFtZSA9PiB7XHJcblx0XHRcdFx0XHRkaWFsb2dDb25maWdbbmFtZV0gPSB0aGlzLmRpYWxvZ0NvbmZpZ1tuYW1lXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRsZXQgYXJncyA9IHt9O1xyXG5cdFx0T2JqZWN0LmtleXModGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdGFyZ3Nba2V5XSA9IHRoaXMucm91dGUuc25hcHNob3Q/LnBhcmFtc1trZXldO1xyXG5cdFx0XHRkaWFsb2dDb25maWcuZGF0YSA9IGFyZ3M7XHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0Y29uc3QgZGxnID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLkVkaXRvciwgZGlhbG9nQ29uZmlnKTtcclxuXHRcdGRsZy5jb21wb25lbnRJbnN0YW5jZS5jYWxsYmFjayA9IChcclxuXHRcdFx0ZGF0YSA9PiB7XHJcblx0XHRcdFx0bGV0IGRhdGFjb3B5ID0geyAuLi5kYXRhIH07XHJcblx0XHRcdFx0Y29uc3QgZmlsZUZpZWxkcyA9ICh0aGlzLkVkaXRvciBhcyBhbnkpLmZpbGVGaWVsZHM7XHJcblx0XHRcdFx0aWYgKGZpbGVGaWVsZHM/Lmxlbmd0aCA9PSAxKSB7XHJcblx0XHRcdFx0XHQvLyBVbiBzZXVsIGNoYW1wLCBpbCBwZXV0IMOqdHJlIG11bHRpcGxlXHJcblx0XHRcdFx0XHRjb25zdCBmaWxlRmllbGQgPSBmaWxlRmllbGRzWzBdO1xyXG5cdFx0XHRcdFx0Y29uc3QgZmlsZXMgPSBkYXRhY29weVtmaWxlRmllbGRdO1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGRhdGFjb3B5W2ZpbGVGaWVsZF07XHJcblx0XHRcdFx0XHRjb25zdCBhbGxvYnM6IHsgW2tleTogc3RyaW5nXTogT2JzZXJ2YWJsZTxhbnk+OyB9ID0ge31cclxuXHRcdFx0XHRcdGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChmaWxlLnN0YXR1dCAhPT0gJ0RvbmUnICYmIGZpbGUuc3RhdHV0ICE9PSAnRXJyb3InKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb2JzID0gdGhpcy5fc2F2ZU9iaihkYXRhY29weSkucGlwZShcclxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaE1hcChuZXdkYXRhID0+IHRoaXMuX3NhdmVGaWxlKGZpbGVGaWVsZCwgbmV3ZGF0YSwgZmlsZSlcclxuXHRcdFx0XHRcdFx0XHRcdCkpO1xyXG5cdFx0XHRcdFx0XHRcdGFsbG9ic1tmaWxlLm5hbWVdID0gb2JzO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHJldHVybiBjb21iaW5lTGF0ZXN0KGFsbG9icykucGlwZSh0YWtlKDEpKTtcclxuXHJcblx0XHRcdFx0fSBlbHNlIGlmIChmaWxlRmllbGRzPy5sZW5ndGggPiAxKSB7XHJcblx0XHRcdFx0XHQvLyBQbHVzaWV1cnMgY2hhbXBzIGZpbGUsIGlsIG5lIHBldXQgeSBhdm9pciBxdSd1bmUgc2V1bCBmaWNoaWVyIHBhciBjaGFtcC5cclxuXHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHt9O1xyXG5cdFx0XHRcdFx0ZmlsZUZpZWxkcy5mb3JFYWNoKGZmID0+IHtcclxuXHRcdFx0XHRcdFx0ZmllbGRzW2ZmXSA9IGRhdGFjb3B5W2ZmXTtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIGRhdGFjb3B5W2ZmXTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuX3NhdmVPYmooZGF0YWNvcHkpLnBpcGUoXHJcblx0XHRcdFx0XHRcdFx0bWVyZ2VNYXAobmV3ZGF0YSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgYWxsb2JzOiBPYnNlcnZhYmxlPGFueT5bXSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmVudHJpZXMoZmllbGRzKS5mb3JFYWNoKChbZmlsZUZpZWxkLCBmaWxlc106IFtzdHJpbmcsIGFueVtdXSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFsbG9icy5wdXNoKHRoaXMuX3NhdmVGaWxlKGZpbGVGaWVsZCwgbmV3ZGF0YSwgZmlsZXNbMF0pKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmb3JrSm9pbihhbGxvYnMpOyAvLyBUT0RPIDogUEFTIFRFUk1JTkUuLi4gSkFNQUlTIFVUSUxJU0UuLi5cclxuXHRcdFx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyBGb3JtIHNhbnMgZmljaGllclxyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuX3NhdmVPYmooZGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0RGVsZXRlT2JqKG9iaikge1xyXG5cdFx0aWYgKGNvbmZpcm0oJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBvYmpldCA/ICcpKSB7XHJcblx0XHRcdHRoaXMuZGVsZXRlUmVxdWVzdC5hcHBseSh0aGlzLmdsb3d3U2VydmljZSwgdGhpcy5nZXRQcmltYXJ5S2V5KG9iaikpLnN1YnNjcmliZShcclxuXHRcdFx0XHRwID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IGkgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5pbmRleE9mKG9iaik7XHJcblx0XHRcdFx0XHRjb25zdCB0bXAgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YTtcclxuXHRcdFx0XHRcdHRtcC5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0XHR0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRtcDtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHRcdGFsZXJ0KGBVbmFibGUgdG8gZGVsZXRlIE9iamVjdCAke2Vycm9yLnN0YXR1c30gJHtlcnJvci5zdGF0dXNUZXh0fVxcbiR7ZXJyb3IuTWVzc2FnZX1cXG4ke2Vycm9yLmVycm9yfWApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdF91cGRhdGVPYmooY3VycmVudDogYW55LCBuZXdEYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0bGV0IGFyZ3M6IG9iamVjdFtdID0gdGhpcy5nZXRQcmltYXJ5S2V5KGN1cnJlbnQpOyBhcmdzLnB1c2gobmV3RGF0YSlcclxuXHRcdHZhciBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cdFx0dGhpcy5wdXRSZXF1ZXN0LmFwcGx5KHRoaXMuZ2xvd3dTZXJ2aWNlLCBhcmdzKS5zdWJzY3JpYmUoXHJcblx0XHRcdGRhdGEgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGkgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5pbmRleE9mKGN1cnJlbnQpO1xyXG5cdFx0XHRcdGNvbnN0IHRtcCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG5cdFx0XHRcdHRtcFtpXSA9IGRhdGE7XHJcblx0XHRcdFx0dGhpcy5kYXRhU291cmNlLmRhdGEgPSB0bXA7XHJcblx0XHRcdFx0c3ViamVjdC5uZXh0KGRhdGEpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0YWxlcnQoYFVuYWJsZSB0byB1cGRhdGUgT2JqZWN0ICR7ZXJyb3Iuc3RhdHVzfSAke2Vycm9yLnN0YXR1c1RleHR9XFxuJHtlcnJvci5NZXNzYWdlfVxcbiR7ZXJyb3IuZXJyb3J9YCk7XHJcblx0XHRcdFx0c3ViamVjdC5lcnJvcihlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0XHRyZXR1cm4gc3ViamVjdDtcclxuXHR9XHJcblxyXG5cclxuXHRFZGl0T2JqKG9iajogVE9iaikge1xyXG5cdFx0Y29uc3QgZGlhbG9nQ29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZygpO1xyXG5cdFx0ZGlhbG9nQ29uZmlnLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcblx0XHRkaWFsb2dDb25maWcuYXV0b0ZvY3VzID0gdHJ1ZTtcclxuXHRcdGRpYWxvZ0NvbmZpZy5jbG9zZU9uTmF2aWdhdGlvbiA9IGZhbHNlO1xyXG5cdFx0aWYgKHRoaXMuZGlhbG9nQ29uZmlnKSB7XHJcblx0XHRcdE9iamVjdC5rZXlzKHRoaXMuZGlhbG9nQ29uZmlnKS5mb3JFYWNoKFxyXG5cdFx0XHRcdG5hbWUgPT4ge1xyXG5cdFx0XHRcdFx0ZGlhbG9nQ29uZmlnW25hbWVdID0gdGhpcy5kaWFsb2dDb25maWdbbmFtZV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0ZGlhbG9nQ29uZmlnLmRhdGEgPSBvYmo7XHJcblx0XHRjb25zdCBkbGcgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuRWRpdG9yLCBkaWFsb2dDb25maWcpO1xyXG5cdFx0ZGxnLmNvbXBvbmVudEluc3RhbmNlLmNhbGxiYWNrID0gKFxyXG5cdFx0XHRkYXRhID0+IHtcclxuXHRcdFx0XHRsZXQgZGF0YWNvcHkgPSB7IC4uLmRhdGEgfTtcclxuXHRcdFx0XHRjb25zdCBmaWxlRmllbGRzID0gKHRoaXMuRWRpdG9yIGFzIGFueSkuZmlsZUZpZWxkcztcclxuXHRcdFx0XHRpZiAoZmlsZUZpZWxkcz8ubGVuZ3RoID09IDEpIHtcclxuXHRcdFx0XHRcdC8vIFVuIHNldWwgY2hhbXAsIGlsIHBldXQgw6p0cmUgbXVsdGlwbGVcclxuXHRcdFx0XHRcdGNvbnN0IGZpbGVGaWVsZCA9IGZpbGVGaWVsZHNbMF07XHJcblx0XHRcdFx0XHRjb25zdCBmaWxlcyA9IGRhdGFjb3B5W2ZpbGVGaWVsZF07XHJcblx0XHRcdFx0XHRkZWxldGUgZGF0YWNvcHlbZmlsZUZpZWxkXTtcclxuXHRcdFx0XHRcdGNvbnN0IGFsbG9iczogeyBba2V5OiBzdHJpbmddOiBPYnNlcnZhYmxlPGFueT47IH0gPSB7fVxyXG5cdFx0XHRcdFx0ZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGZpbGUuc3RhdHV0ICE9PSAnRG9uZScgJiYgZmlsZS5zdGF0dXQgIT09ICdFcnJvcicpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBvYnMgPSB0aGlzLl91cGRhdGVPYmoob2JqLCBkYXRhY29weSkucGlwZShcclxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaE1hcChuZXdkYXRhID0+IHRoaXMuX3NhdmVGaWxlKGZpbGVGaWVsZCwgbmV3ZGF0YSwgZmlsZSlcclxuXHRcdFx0XHRcdFx0XHRcdCkpO1xyXG5cdFx0XHRcdFx0XHRcdGFsbG9ic1tmaWxlLm5hbWVdID0gb2JzO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHJldHVybiBjb21iaW5lTGF0ZXN0KGFsbG9icykucGlwZSh0YWtlKDEpKTtcclxuXHJcblx0XHRcdFx0fSBlbHNlIGlmIChmaWxlRmllbGRzPy5sZW5ndGggPiAxKSB7XHJcblx0XHRcdFx0XHQvLyBQbHVzaWV1cnMgY2hhbXBzIGZpbGUsIGlsIG5lIHBldXQgeSBhdm9pciBxdSd1bmUgc2V1bCBmaWNoaWVyIHBhciBjaGFtcC5cclxuXHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHt9O1xyXG5cdFx0XHRcdFx0ZmlsZUZpZWxkcy5mb3JFYWNoKGZmID0+IHtcclxuXHRcdFx0XHRcdFx0ZmllbGRzW2ZmXSA9IGRhdGFjb3B5W2ZmXTtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIGRhdGFjb3B5W2ZmXTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuX3VwZGF0ZU9iaihvYmosIGRhdGFjb3B5KS5waXBlKFxyXG5cdFx0XHRcdFx0XHRcdG1lcmdlTWFwKG5ld2RhdGEgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFsbG9iczogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXTtcclxuXHRcdFx0XHRcdFx0XHRcdE9iamVjdC5lbnRyaWVzKGZpZWxkcykuZm9yRWFjaCgoW2ZpbGVGaWVsZCwgZmlsZXNdOiBbc3RyaW5nLCBhbnlbXV0pID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbGxvYnMucHVzaCh0aGlzLl9zYXZlRmlsZShmaWxlRmllbGQsIG5ld2RhdGEsIGZpbGVzWzBdKSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZm9ya0pvaW4oYWxsb2JzKTsgLy8gVE9ETyA6IFBBUyBURVJNSU5FLi4uIEpBTUFJUyBVVElMSVNFLi4uXHJcblx0XHRcdFx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Ly8gRm9ybSBzYW5zIGZpY2hpZXJcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLl91cGRhdGVPYmoob2JqLCBkYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxufVxyXG4iLCI8ZGl2PlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZ2x3LWhlYWRlclwiPjwvbmctY29udGVudD5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiZGlzcGxheWZvcm1cIj5cclxuICAgIDxtYXQtY2FyZD5cclxuICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInJlc3VsdEV4Y2VwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgVW5hYmxlIHRvIHF1ZXJ5IDoge3tyZXN1bHRFeGNlcHRpb259fVxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZ2x3LXNlYXJjaC1mb3JtXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWF4cm93c1wiIFtmb3JtR3JvdXBdPVwiZm9ybTJcIj5cclxuICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiTWF4Um93XCIgZm9ybUNvbnRyb2xOYW1lPVwiX01heFJvd19cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1heHJvdyBvZiBtYXhyb3dzXCIgW3ZhbHVlXT1cIm1heHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtYXhyb3dcIj57e21heHJvd319IG9iamVjdHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFtYXhyb3dcIj4gRGVmYXVsdDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucz5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwib25TZWFyY2goKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgIFNlYXJjaFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICA8L21hdC1jYXJkPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJkaXNwbGF5cmVzdWx0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OFwiICpuZ0lmPVwiZGF0YVNvdXJjZTsgZWxzZSBTcGlubmVyXCI+XHJcbiAgICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgbWF0U29ydD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtcGx1c1wiIChjbGljayk9XCJBZGRPYmooKVwiICpuZ0lmPVwiY2FuQWRkVGhpcygpXCI+XHJcbiAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IG9ialwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLWV5ZVwiIFtyb3V0ZXJMaW5rXT1cImRpc3BsYXlPYmpMaW5rVGhpcyhvYmopXCIgKm5nSWY9XCJjYW5EaXNwbGF5T2JqVGhpcyhvYmopXCI+XHJcbiAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwiYWN0aW9uLmljb25cIiBbcm91dGVyTGlua109XCJhY3Rpb24ucm91dGVyTGlua0ZjdChvYmopXCIgKm5nSWY9XCJhY3Rpb24uaWNvbi5pY29uICYmICghYWN0aW9uLmRpc3BsYXkgfHwgYWN0aW9uLmRpc3BsYXkob2JqLCBhY3Rpb24ubmFtZSkpXCI+XHJcbiAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwiYWN0aW9uLmljb25cIiBbcm91dGVyTGlua109XCJhY3Rpb24ucm91dGVyTGlua0ZjdChvYmopXCIgKm5nSWY9XCIhYWN0aW9uLmljb24uaWNvbiAmJiAoIWFjdGlvbi5kaXNwbGF5IHx8IGFjdGlvbi5kaXNwbGF5KG9iaiwgYWN0aW9uLm5hbWUpKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS10cmFzaC1hbHRcIiAoY2xpY2spPVwiRGVsZXRlT2JqKG9iailcIiAqbmdJZj1cImNhbkRlbGV0ZVRoaXMob2JqKVwiPlxyXG4gICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLXBlbmNpbFwiIChjbGljayk9XCJFZGl0T2JqKG9iailcIiAqbmdJZj1cImNhbkVkaXRUaGlzKG9iailcIj5cclxuICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJnbHctcmVzdWx0LXRhYmxlXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtbnNUb0Rpc3BsYXlcIj48L3RyPlxyXG4gICAgICAgICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IG15Um93RGF0YTsgY29sdW1uczogY29sdW1uc1RvRGlzcGxheVwiPjwvdHI+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8bWF0LXBhZ2luYXRvciBwYWdlU2l6ZT1cIjEwXCI+PC9tYXQtcGFnaW5hdG9yPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI1NwaW5uZXI+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1vYmplY3RzLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nbG93dy9zcmMvbGliL0NvbXBvbmVudHMvZGlzcGxheS1vYmplY3RzLWNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlzcGxheU9iamVjdHNDb25maWd1cmF0aW9uPFRPYmo+IHtcclxuXHRzZWFyY2hSZXF1ZXN0KG9iaj86IFRPYmogfCBhbnkpOiBPYnNlcnZhYmxlPFRPYmpbXT47XHJcblx0Y29sdW1uc1RvRGlzcGxheSgpOiBzdHJpbmdbXTtcclxuXHQvLyBkaXNwbGF5T2JqTGluayhvYmo6IFRPYmopOiBzdHJpbmc7XHJcblx0Ly8gY2FuRGlzcGxheU9iaihvYmo6IFRPYmopOiBib29sZWFuO1xyXG5cdC8vIGNhbkVkaXQob2JqOiBUT2JqKTogYm9vbGVhbjtcclxuXHQvLyBjYW5EZWxldGUob2JqOiBUT2JqKTogYm9vbGVhbjtcclxuXHQvLyBjYW5BZGQob2JqOiBUT2JqKTogYm9vbGVhbjtcclxufVxyXG4iXX0=