nuxeo-development-framework 6.1.6 → 6.1.7

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 (877) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +919 -1076
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/activities-log/activities-log/activities-log.component.js +1 -1
  4. package/esm2015/lib/components/activities-log/activities-log/activities-log.service.js +1 -1
  5. package/esm2015/lib/components/activities-log/activities-log.module.js +1 -1
  6. package/esm2015/lib/components/activity/activity/activity.component.js +1 -1
  7. package/esm2015/lib/components/activity/activity.module.js +1 -1
  8. package/esm2015/lib/components/attachment-item/attachment-item/attachment-item.component.js +2 -2
  9. package/esm2015/lib/components/attachment-item/attachment-item.module.js +1 -1
  10. package/esm2015/lib/components/attachment-modal/attachment-modal.module.js +1 -1
  11. package/esm2015/lib/components/attachment-modal/attachments/attachments.component.js +1 -1
  12. package/esm2015/lib/components/avatar/avatar/avatar.component.js +1 -1
  13. package/esm2015/lib/components/avatar/avatar.module.js +1 -1
  14. package/esm2015/lib/components/card/card.component.js +1 -1
  15. package/esm2015/lib/components/card/card.module.js +1 -1
  16. package/esm2015/lib/components/comments/comments.module.js +1 -1
  17. package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +2 -2
  18. package/esm2015/lib/components/comments/components/comments-dashlet/comments-dashlet.component.js +1 -1
  19. package/esm2015/lib/components/comments/components/comments-list/comments-list.component.js +1 -1
  20. package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +1 -1
  21. package/esm2015/lib/components/comments/constants/comment.js +1 -1
  22. package/esm2015/lib/components/comments/services/comment-api.service.js +1 -1
  23. package/esm2015/lib/components/confirm-caller/confirm-caller.dialog.js +1 -1
  24. package/esm2015/lib/components/confirm-caller/confirm-caller.module.js +1 -1
  25. package/esm2015/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.js +1 -1
  26. package/esm2015/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.js +1 -1
  27. package/esm2015/lib/components/confirmation-dialog/confirmation-dialog.module.js +1 -1
  28. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +1 -1
  29. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +1 -1
  30. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +2 -2
  31. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.js +1 -1
  32. package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +1 -1
  33. package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +1 -1
  34. package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +1 -1
  35. package/esm2015/lib/components/correspondence-relation/services/viewer-files.service.js +1 -1
  36. package/esm2015/lib/components/create-entity/create-entity/create-entity.component.js +1 -1
  37. package/esm2015/lib/components/create-entity/create-entity.module.js +1 -1
  38. package/esm2015/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.js +2 -2
  39. package/esm2015/lib/components/cts-tags/cts-tags.module.js +1 -1
  40. package/esm2015/lib/components/cts-tags/services/tags-api.service.js +1 -1
  41. package/esm2015/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.js +1 -1
  42. package/esm2015/lib/components/custom-toastr/custom-toastr.module.js +1 -1
  43. package/esm2015/lib/components/custom-toastr/interfaces/toast-type.interface.js +1 -1
  44. package/esm2015/lib/components/custom-toastr/services/custom-toastr.service.js +1 -1
  45. package/esm2015/lib/components/diagrams/components/base-node.component.js +1 -1
  46. package/esm2015/lib/components/diagrams/components/circle-node/circle-node.component.js +1 -1
  47. package/esm2015/lib/components/diagrams/components/connection-label.component.js +1 -1
  48. package/esm2015/lib/components/diagrams/components/content-node/content-node.component.js +1 -1
  49. package/esm2015/lib/components/diagrams/components/custom-connection.component.js +1 -1
  50. package/esm2015/lib/components/diagrams/components/custom-socket.component.js +1 -1
  51. package/esm2015/lib/components/diagrams/components/gateway-node/gateway-node.component.js +1 -1
  52. package/esm2015/lib/components/diagrams/components/gateway-ports.component.js +1 -1
  53. package/esm2015/lib/components/diagrams/components/index.js +1 -1
  54. package/esm2015/lib/components/diagrams/components/node-icon.component.js +1 -1
  55. package/esm2015/lib/components/diagrams/components/node-inputs.component.js +1 -1
  56. package/esm2015/lib/components/diagrams/components/node-outputs.component.js +1 -1
  57. package/esm2015/lib/components/diagrams/components/node-ports.component.js +1 -1
  58. package/esm2015/lib/components/diagrams/components/remove-button.component.js +1 -1
  59. package/esm2015/lib/components/diagrams/components/status-icon.component.js +1 -1
  60. package/esm2015/lib/components/diagrams/components/template-node/template-node.component.js +1 -1
  61. package/esm2015/lib/components/diagrams/components/zoom-control.component.js +1 -1
  62. package/esm2015/lib/components/diagrams/constants/defaults.js +1 -1
  63. package/esm2015/lib/components/diagrams/constants/direction.js +1 -1
  64. package/esm2015/lib/components/diagrams/constants/index.js +1 -1
  65. package/esm2015/lib/components/diagrams/constants/message-type.js +1 -1
  66. package/esm2015/lib/components/diagrams/constants/node-type.js +1 -1
  67. package/esm2015/lib/components/diagrams/constants/notify-events.js +1 -1
  68. package/esm2015/lib/components/diagrams/constants/sizes.js +1 -1
  69. package/esm2015/lib/components/diagrams/constants/status.js +1 -1
  70. package/esm2015/lib/components/diagrams/diagrams.module.js +1 -1
  71. package/esm2015/lib/components/diagrams/directive/diagram.directive.js +1 -1
  72. package/esm2015/lib/components/diagrams/directive/index.js +1 -1
  73. package/esm2015/lib/components/diagrams/editor/customize.js +1 -1
  74. package/esm2015/lib/components/diagrams/editor/editor.js +1 -1
  75. package/esm2015/lib/components/diagrams/editor/index.js +1 -1
  76. package/esm2015/lib/components/diagrams/editor/overrides/connection-path.transformers.js +1 -1
  77. package/esm2015/lib/components/diagrams/editor/overrides/index.js +1 -1
  78. package/esm2015/lib/components/diagrams/editor/path-plugin.js +1 -1
  79. package/esm2015/lib/components/diagrams/editor/socket-position-watcher.js +1 -1
  80. package/esm2015/lib/components/diagrams/index.js +1 -1
  81. package/esm2015/lib/components/diagrams/models/base-node.model.js +1 -1
  82. package/esm2015/lib/components/diagrams/models/circle-node.model.js +1 -1
  83. package/esm2015/lib/components/diagrams/models/connection.model.js +1 -1
  84. package/esm2015/lib/components/diagrams/models/content-node.model.js +1 -1
  85. package/esm2015/lib/components/diagrams/models/gate-way.model.js +1 -1
  86. package/esm2015/lib/components/diagrams/models/index.js +1 -1
  87. package/esm2015/lib/components/diagrams/models/ports.model.js +1 -1
  88. package/esm2015/lib/components/diagrams/models/socket.model.js +1 -1
  89. package/esm2015/lib/components/diagrams/models/template-node.model.js +1 -1
  90. package/esm2015/lib/components/diagrams/public-api.js +1 -1
  91. package/esm2015/lib/components/diagrams/services/diagram-plugins.service.js +1 -1
  92. package/esm2015/lib/components/diagrams/services/diagram.service.js +1 -1
  93. package/esm2015/lib/components/diagrams/services/index.js +1 -1
  94. package/esm2015/lib/components/diagrams/services/message.service.js +1 -1
  95. package/esm2015/lib/components/diagrams/services/workflow.service.js +1 -1
  96. package/esm2015/lib/components/diagrams/types/common.type.js +1 -1
  97. package/esm2015/lib/components/diagrams/types/connection-config.type.js +1 -1
  98. package/esm2015/lib/components/diagrams/types/connection-label.type.js +1 -1
  99. package/esm2015/lib/components/diagrams/types/customization.type.js +1 -1
  100. package/esm2015/lib/components/diagrams/types/diagram-config.type.js +1 -1
  101. package/esm2015/lib/components/diagrams/types/diagram-editor.type.js +1 -1
  102. package/esm2015/lib/components/diagrams/types/emitter-type.js +1 -1
  103. package/esm2015/lib/components/diagrams/types/index.js +1 -1
  104. package/esm2015/lib/components/diagrams/types/layout.type.js +1 -1
  105. package/esm2015/lib/components/diagrams/types/node-content.js +1 -1
  106. package/esm2015/lib/components/diagrams/types/node-definition.js +1 -1
  107. package/esm2015/lib/components/diagrams/types/node-status.type.js +1 -1
  108. package/esm2015/lib/components/diagrams/types/node.type.js +1 -1
  109. package/esm2015/lib/components/diagrams/types/notify-event.type.js +1 -1
  110. package/esm2015/lib/components/diagrams/types/path.type.js +1 -1
  111. package/esm2015/lib/components/diagrams/types/ports-config.type.js +1 -1
  112. package/esm2015/lib/components/diagrams/types/schemes.type.js +1 -1
  113. package/esm2015/lib/components/diagrams/types/socket.type.js +1 -1
  114. package/esm2015/lib/components/diagrams/utilities/common.js +1 -1
  115. package/esm2015/lib/components/diagrams/utilities/index.js +1 -1
  116. package/esm2015/lib/components/diagrams/utilities/random.js +1 -1
  117. package/esm2015/lib/components/diagrams/utilities/remove.util.js +1 -1
  118. package/esm2015/lib/components/diagrams/utilities/serialize.js +1 -1
  119. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.js +2 -2
  120. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/icon.service.js +1 -1
  121. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon.module.js +1 -1
  122. package/esm2015/lib/components/documents/components/attachments-list/attachments-list.component.js +1 -1
  123. package/esm2015/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.js +1 -1
  124. package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +1 -1
  125. package/esm2015/lib/components/documents/components/document-scan/document-scan.component.js +1 -1
  126. package/esm2015/lib/components/documents/components/document-scan/document-scan.service.js +1 -1
  127. package/esm2015/lib/components/documents/components/document-upload/document-upload.component.js +1 -1
  128. package/esm2015/lib/components/documents/components/documents/documents.component.js +1 -1
  129. package/esm2015/lib/components/documents/constants/document-templates.js +1 -1
  130. package/esm2015/lib/components/documents/constants/documents.js +1 -1
  131. package/esm2015/lib/components/documents/documents.module.js +1 -1
  132. package/esm2015/lib/components/documents/services/document-templates.service.js +1 -1
  133. package/esm2015/lib/components/documents/services/documents.service.js +1 -1
  134. package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +1 -1
  135. package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +1 -1
  136. package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +1 -1
  137. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +1 -1
  138. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +1 -1
  139. package/esm2015/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.js +2 -2
  140. package/esm2015/lib/components/dynamic-filter/dynamic-filter.module.js +1 -1
  141. package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +1 -1
  142. package/esm2015/lib/components/dynamic-form/components/dynamic-form/dynamic-form.component.js +1 -1
  143. package/esm2015/lib/components/dynamic-form/components/dynamic-form/fields.adapter.js +1 -1
  144. package/esm2015/lib/components/dynamic-form/components/dynamic-form/form-builder.service.js +1 -1
  145. package/esm2015/lib/components/dynamic-form/components/dynamic-form-boolitem/dynamic-form-boolitem.component.js +1 -1
  146. package/esm2015/lib/components/dynamic-form/components/dynamic-form-builder/dynamic-form-builder.component.js +1 -1
  147. package/esm2015/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.js +1 -1
  148. package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.js +1 -1
  149. package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/owlDateTimeIntl.js +1 -1
  150. package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/constants/department.js +1 -1
  151. package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.js +1 -1
  152. package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-api.service.js +1 -1
  153. package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.js +1 -1
  154. package/esm2015/lib/components/dynamic-form/components/dynamic-form-field/dynamic-form-field.component.js +1 -1
  155. package/esm2015/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.js +1 -1
  156. package/esm2015/lib/components/dynamic-form/components/dynamic-form-item-dispatcher/dynamic-form-item-dispatcher.component.js +1 -1
  157. package/esm2015/lib/components/dynamic-form/components/dynamic-form-mapitem/dynamic-form-mapitem.component.js +1 -1
  158. package/esm2015/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.js +1 -1
  159. package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.js +1 -1
  160. package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.js +1 -1
  161. package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.js +1 -1
  162. package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/services/user-api.service.js +1 -1
  163. package/esm2015/lib/components/dynamic-form/components/dynamic-form-selectitem/dynamic-form-selectitem.component.js +1 -1
  164. package/esm2015/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.js +2 -2
  165. package/esm2015/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.js +1 -1
  166. package/esm2015/lib/components/dynamic-form/components/dynamic-form-textitem/dynamic-form-textitem.component.js +1 -1
  167. package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select-i18n.js +1 -1
  168. package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.js +2 -2
  169. package/esm2015/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.js +1 -1
  170. package/esm2015/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.js +1 -1
  171. package/esm2015/lib/components/dynamic-form/components/form-wrappers/base-edit-form/base-edit-form.js +1 -1
  172. package/esm2015/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.component.js +1 -1
  173. package/esm2015/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.formio.js +1 -1
  174. package/esm2015/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.component.js +1 -1
  175. package/esm2015/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.formio.js +1 -1
  176. package/esm2015/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.component.js +1 -1
  177. package/esm2015/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.formio.js +1 -1
  178. package/esm2015/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.component.js +1 -1
  179. package/esm2015/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.formio.js +1 -1
  180. package/esm2015/lib/components/dynamic-form/directives/dynamic-form-content-proxy.directive.js +1 -1
  181. package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +1 -1
  182. package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-boolitem-properties.interface.js +1 -1
  183. package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-dateitem-properties.interface.js +1 -1
  184. package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item-properties.interface.js +1 -1
  185. package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item-validator.interface.js +1 -1
  186. package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item.interface.js +1 -1
  187. package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-keyvaluepairsitem-properties.interface.js +1 -1
  188. package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-selectitem-properties.interface.js +1 -1
  189. package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-textitem-pipe-property.interface.js +1 -1
  190. package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-textitem-properties.interface.js +1 -1
  191. package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form.interfaces.js +1 -1
  192. package/esm2015/lib/components/dynamic-form/models/dynamic-form-baseitem.model.js +1 -1
  193. package/esm2015/lib/components/dynamic-form/models/dynamic-form-boolitem.model.js +1 -1
  194. package/esm2015/lib/components/dynamic-form/models/dynamic-form-dateitem.model.js +1 -1
  195. package/esm2015/lib/components/dynamic-form/models/dynamic-form-datetimeitem.model.js +1 -1
  196. package/esm2015/lib/components/dynamic-form/models/dynamic-form-mapitem.model.js +1 -1
  197. package/esm2015/lib/components/dynamic-form/models/dynamic-form-selectitem.model.js +1 -1
  198. package/esm2015/lib/components/dynamic-form/models/dynamic-form-textitem.model.js +1 -1
  199. package/esm2015/lib/components/dynamic-form/models/dynamic-form.models.js +1 -1
  200. package/esm2015/lib/components/dynamic-form/services/card-item-types.service.js +1 -1
  201. package/esm2015/lib/components/dynamic-form/services/dynamic-component-mapper.service.js +1 -1
  202. package/esm2015/lib/components/dynamic-form/services/dynamic-form-update.service.js +1 -1
  203. package/esm2015/lib/components/dynamic-form/services/vocabulary-api.service.js +1 -1
  204. package/esm2015/lib/components/dynamic-form/validators/length-validator.js +1 -1
  205. package/esm2015/lib/components/dynamic-form/validators/regex-validator.js +1 -1
  206. package/esm2015/lib/components/dynamic-form/validators/required-validator.js +1 -1
  207. package/esm2015/lib/components/dynamic-form/validators/value-validator.js +1 -1
  208. package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +1 -1
  209. package/esm2015/lib/components/dynamic-search/dynamic-search.module.js +1 -1
  210. package/esm2015/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.js +1 -1
  211. package/esm2015/lib/components/dynamic-tabs/dynamic-tabs.module.js +1 -1
  212. package/esm2015/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.js +2 -2
  213. package/esm2015/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.js +1 -1
  214. package/esm2015/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.js +1 -1
  215. package/esm2015/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.js +1 -1
  216. package/esm2015/lib/components/dynamic-view/data-viewer/data-viewer.component.js +2 -2
  217. package/esm2015/lib/components/dynamic-view/date-viewer/date-viewer.component.js +2 -2
  218. package/esm2015/lib/components/dynamic-view/department-viewer/department-viewer.component.js +2 -2
  219. package/esm2015/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.js +2 -2
  220. package/esm2015/lib/components/dynamic-view/dynamic-view.module.js +1 -1
  221. package/esm2015/lib/components/dynamic-view/dynamic-viewe.service.js +1 -1
  222. package/esm2015/lib/components/dynamic-view/list-viewer/list-viewer.component.js +1 -1
  223. package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +2 -2
  224. package/esm2015/lib/components/file-manger/components/clipboard/clipboard.component.js +2 -2
  225. package/esm2015/lib/components/file-manger/components/copy/copy.component.js +1 -1
  226. package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +2 -2
  227. package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +1 -1
  228. package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +1 -1
  229. package/esm2015/lib/components/file-manger/components/delete/delete.component.js +1 -1
  230. package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +1 -1
  231. package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +2 -2
  232. package/esm2015/lib/components/file-manger/components/move/move.component.js +1 -1
  233. package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +1 -1
  234. package/esm2015/lib/components/file-manger/components/rename/rename.component.js +2 -2
  235. package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +1 -1
  236. package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +2 -2
  237. package/esm2015/lib/components/file-manger/components/sidepanel/sidepanel.component.js +2 -2
  238. package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +1 -1
  239. package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +1 -1
  240. package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +1 -1
  241. package/esm2015/lib/components/file-manger/directives/file-grid-infinite-scroll.directive.js +1 -1
  242. package/esm2015/lib/components/file-manger/file-manager.abstract.js +1 -1
  243. package/esm2015/lib/components/file-manger/file-manger.module.js +1 -1
  244. package/esm2015/lib/components/file-manger/models/file-manager-config.model.js +1 -1
  245. package/esm2015/lib/components/file-manger/models/index.js +1 -1
  246. package/esm2015/lib/components/file-manger/models/pagination-payload.mode.js +1 -1
  247. package/esm2015/lib/components/file-manger/models/pagination-response.model.js +1 -1
  248. package/esm2015/lib/components/filter/filter/filter.component.js +1 -1
  249. package/esm2015/lib/components/filter/filter.module.js +1 -1
  250. package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/gregorian-datepicker/gregorian-datepicker.component.js +1 -1
  251. package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-datepicker/hijri-datepicker.component.js +1 -1
  252. package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-gregorian-datepicker.component.js +1 -1
  253. package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/provide-parent-form.directive.js +1 -1
  254. package/esm2015/lib/components/hijri-gregorian-datepicker/ngx-hijri-gregorian-datepicker.module.js +1 -1
  255. package/esm2015/lib/components/hijri-gregorian-datepicker/services/date-formatter.service.js +1 -1
  256. package/esm2015/lib/components/hijri-gregorian-datepicker/services/date-helper.service.js +1 -1
  257. package/esm2015/lib/components/hijri-gregorian-datepicker/utils/CustomNgbDateParserFormatter.js +1 -1
  258. package/esm2015/lib/components/hijri-gregorian-datepicker/utils/IslamicI18n.js +1 -1
  259. package/esm2015/lib/components/hijri-gregorian-datepicker/utils/consts.js +1 -1
  260. package/esm2015/lib/components/latest-activity/components/activity-line/activity-line.component.js +1 -1
  261. package/esm2015/lib/components/latest-activity/components/latest-activity/latest-activity.component.js +1 -1
  262. package/esm2015/lib/components/latest-activity/components/single-activity/single-activity.component.js +1 -1
  263. package/esm2015/lib/components/latest-activity/constants/activitylog.js +1 -1
  264. package/esm2015/lib/components/latest-activity/latest-activity.module.js +1 -1
  265. package/esm2015/lib/components/latest-activity/services/activity-log.service.js +1 -1
  266. package/esm2015/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.js +1 -1
  267. package/esm2015/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.js +1 -1
  268. package/esm2015/lib/components/ndf-config-editor/components/config-editor-actions/config-editor-actions.component.js +1 -1
  269. package/esm2015/lib/components/ndf-config-editor/components/editor-mode-switch.component.js +1 -1
  270. package/esm2015/lib/components/ndf-config-editor/components/index.js +1 -1
  271. package/esm2015/lib/components/ndf-config-editor/components/info-dialog/info-dialog.component.js +2 -2
  272. package/esm2015/lib/components/ndf-config-editor/config.token.js +1 -1
  273. package/esm2015/lib/components/ndf-config-editor/constants/index.js +1 -1
  274. package/esm2015/lib/components/ndf-config-editor/constants/mode.js +1 -1
  275. package/esm2015/lib/components/ndf-config-editor/constants/query.js +1 -1
  276. package/esm2015/lib/components/ndf-config-editor/containers/config-preview/config-preview.component.js +1 -1
  277. package/esm2015/lib/components/ndf-config-editor/containers/editor-settings/editor-settings.component.js +2 -2
  278. package/esm2015/lib/components/ndf-config-editor/containers/index.js +1 -1
  279. package/esm2015/lib/components/ndf-config-editor/containers/monaco-editor.component.js +1 -1
  280. package/esm2015/lib/components/ndf-config-editor/containers/ndf-config-editor/ndf-config-editor.component.js +1 -1
  281. package/esm2015/lib/components/ndf-config-editor/index.js +1 -1
  282. package/esm2015/lib/components/ndf-config-editor/metadata-token.js +1 -1
  283. package/esm2015/lib/components/ndf-config-editor/models/config.js +1 -1
  284. package/esm2015/lib/components/ndf-config-editor/models/dialog-data.js +1 -1
  285. package/esm2015/lib/components/ndf-config-editor/models/editor-model.js +1 -1
  286. package/esm2015/lib/components/ndf-config-editor/models/index.js +1 -1
  287. package/esm2015/lib/components/ndf-config-editor/models/payload-data.js +1 -1
  288. package/esm2015/lib/components/ndf-config-editor/models/type-helper.js +1 -1
  289. package/esm2015/lib/components/ndf-config-editor/ndf-config-editor.module.js +1 -1
  290. package/esm2015/lib/components/ndf-config-editor/pipes/index.js +1 -1
  291. package/esm2015/lib/components/ndf-config-editor/pipes/is-valid-json.pipe.js +1 -1
  292. package/esm2015/lib/components/ndf-config-editor/pipes/validate-object.pipe.js +1 -1
  293. package/esm2015/lib/components/ndf-config-editor/public/editor-navigate-button.js +2 -2
  294. package/esm2015/lib/components/ndf-config-editor/public/index.js +1 -1
  295. package/esm2015/lib/components/ndf-config-editor/public-api.js +1 -1
  296. package/esm2015/lib/components/ndf-config-editor/services/data-access.service.js +1 -1
  297. package/esm2015/lib/components/ndf-config-editor/services/data-store.service.js +1 -1
  298. package/esm2015/lib/components/ndf-config-editor/services/index.js +1 -1
  299. package/esm2015/lib/components/ndf-config-editor/services/monaco.loader.service.js +1 -1
  300. package/esm2015/lib/components/ndf-config-editor/utility/index.js +1 -1
  301. package/esm2015/lib/components/ndf-config-editor/utility/json.js +1 -1
  302. package/esm2015/lib/components/ndf-datepicker/adapters/hijri-adapter.js +1 -1
  303. package/esm2015/lib/components/ndf-datepicker/adapters/index.js +1 -1
  304. package/esm2015/lib/components/ndf-datepicker/adapters/moment-adapter.js +1 -1
  305. package/esm2015/lib/components/ndf-datepicker/base/base-value-accessor.js +1 -1
  306. package/esm2015/lib/components/ndf-datepicker/base/index.js +1 -1
  307. package/esm2015/lib/components/ndf-datepicker/components/base-datepicker.js +1 -1
  308. package/esm2015/lib/components/ndf-datepicker/components/index.js +1 -1
  309. package/esm2015/lib/components/ndf-datepicker/components/input-date.component.js +1 -1
  310. package/esm2015/lib/components/ndf-datepicker/components/input-range-date.component.js +1 -1
  311. package/esm2015/lib/components/ndf-datepicker/constants/date-locale-keys.js +1 -1
  312. package/esm2015/lib/components/ndf-datepicker/constants/date-picker.js +1 -1
  313. package/esm2015/lib/components/ndf-datepicker/constants/date-type.js +1 -1
  314. package/esm2015/lib/components/ndf-datepicker/constants/formats.js +1 -1
  315. package/esm2015/lib/components/ndf-datepicker/constants/hijri-dates-names.js +1 -1
  316. package/esm2015/lib/components/ndf-datepicker/constants/index.js +1 -1
  317. package/esm2015/lib/components/ndf-datepicker/containers/datepicker-container.js +1 -1
  318. package/esm2015/lib/components/ndf-datepicker/containers/index.js +1 -1
  319. package/esm2015/lib/components/ndf-datepicker/containers/ndf-gregorian-datepicker.component.js +1 -1
  320. package/esm2015/lib/components/ndf-datepicker/containers/ndf-hijri-datepicker.component.js +1 -1
  321. package/esm2015/lib/components/ndf-datepicker/index.js +1 -1
  322. package/esm2015/lib/components/ndf-datepicker/models/data-types.js +1 -1
  323. package/esm2015/lib/components/ndf-datepicker/models/index.js +1 -1
  324. package/esm2015/lib/components/ndf-datepicker/models/value-object.js +1 -1
  325. package/esm2015/lib/components/ndf-datepicker/ndf-datepicker.component.js +2 -2
  326. package/esm2015/lib/components/ndf-datepicker/ndf-datepicker.module.js +1 -1
  327. package/esm2015/lib/components/ndf-datepicker/services/calendar.service.js +1 -1
  328. package/esm2015/lib/components/ndf-datepicker/services/index.js +1 -1
  329. package/esm2015/lib/components/ndf-datepicker/services/localize-state.service.js +1 -1
  330. package/esm2015/lib/components/ndf-filters/base/base-aggregation-field.component.js +1 -1
  331. package/esm2015/lib/components/ndf-filters/base/base-checkbox-radio.component.js +1 -1
  332. package/esm2015/lib/components/ndf-filters/base/base-custom-field.component.js +1 -1
  333. package/esm2015/lib/components/ndf-filters/base/base-predicate-field.component.js +1 -1
  334. package/esm2015/lib/components/ndf-filters/base/base-value-accessor.component.js +1 -1
  335. package/esm2015/lib/components/ndf-filters/base/index.js +1 -1
  336. package/esm2015/lib/components/ndf-filters/components/__parts/field-header.component.js +1 -1
  337. package/esm2015/lib/components/ndf-filters/components/__parts/filter-autocomplete-input/filter-autocomplete-input.component.js +1 -1
  338. package/esm2015/lib/components/ndf-filters/components/__parts/filter-autocomplete-input/filter-autocomplete.service.js +7 -5
  339. package/esm2015/lib/components/ndf-filters/components/__parts/filter-collapse-control/filter-collapse-control.component.js +1 -1
  340. package/esm2015/lib/components/ndf-filters/components/__parts/filter-date-range/filter-date-range.component.js +1 -1
  341. package/esm2015/lib/components/ndf-filters/components/__parts/filter-empty-message.component.js +1 -1
  342. package/esm2015/lib/components/ndf-filters/components/__parts/filter-option-text/filter-option-text.component.js +2 -2
  343. package/esm2015/lib/components/ndf-filters/components/__parts/filter-options-sort/filter-options-sort.component.js +2 -2
  344. package/esm2015/lib/components/ndf-filters/components/__parts/filter-search-input/filter-search-input.component.js +1 -1
  345. package/esm2015/lib/components/ndf-filters/components/__parts/html-dialog/html-dialog.component.js +1 -1
  346. package/esm2015/lib/components/ndf-filters/components/__parts/index.js +1 -1
  347. package/esm2015/lib/components/ndf-filters/components/aggregation-autocomplete/aggregation-autocomplete.component.js +1 -1
  348. package/esm2015/lib/components/ndf-filters/components/aggregation-checkbox/aggregation-checkbox.component.js +1 -1
  349. package/esm2015/lib/components/ndf-filters/components/aggregation-custom/aggregation-custom.component.js +1 -1
  350. package/esm2015/lib/components/ndf-filters/components/aggregation-date-list/aggregation-date-list.component.js +1 -1
  351. package/esm2015/lib/components/ndf-filters/components/aggregation-radio/aggregation-radio.component.js +1 -1
  352. package/esm2015/lib/components/ndf-filters/components/aggregation-select/aggregation-select.component.js +1 -1
  353. package/esm2015/lib/components/ndf-filters/components/aggregation-switch/aggregation-switch.component.js +2 -2
  354. package/esm2015/lib/components/ndf-filters/components/index.js +1 -1
  355. package/esm2015/lib/components/ndf-filters/components/predicate-date-input/predicate-date-input.component.js +1 -1
  356. package/esm2015/lib/components/ndf-filters/components/predicate-text-input/predicate-text-input.component.js +2 -2
  357. package/esm2015/lib/components/ndf-filters/constants/common.js +1 -1
  358. package/esm2015/lib/components/ndf-filters/constants/field.js +1 -1
  359. package/esm2015/lib/components/ndf-filters/constants/index.js +1 -1
  360. package/esm2015/lib/components/ndf-filters/constants/operators.js +1 -1
  361. package/esm2015/lib/components/ndf-filters/constants/sort.js +1 -1
  362. package/esm2015/lib/components/ndf-filters/constants/type.js +1 -1
  363. package/esm2015/lib/components/ndf-filters/containers/aggregation-field/aggregation-field.component.js +1 -1
  364. package/esm2015/lib/components/ndf-filters/containers/base-field.js +1 -1
  365. package/esm2015/lib/components/ndf-filters/containers/custom-field/custom-field.component.js +1 -1
  366. package/esm2015/lib/components/ndf-filters/containers/filters-panel/base-filters-panel.js +1 -1
  367. package/esm2015/lib/components/ndf-filters/containers/filters-panel/filters-panel.component.js +9 -9
  368. package/esm2015/lib/components/ndf-filters/containers/index.js +1 -1
  369. package/esm2015/lib/components/ndf-filters/containers/predicate-field/predicate-field.component.js +1 -1
  370. package/esm2015/lib/components/ndf-filters/custom-components/active-user-switch/active-user-switch.component.js +2 -2
  371. package/esm2015/lib/components/ndf-filters/custom-components/active-user-switch/active-user.service.js +1 -1
  372. package/esm2015/lib/components/ndf-filters/custom-components/active-user-switch/user-types.js +1 -1
  373. package/esm2015/lib/components/ndf-filters/custom-components/aggregation-group/aggregation-group.component.js +1 -1
  374. package/esm2015/lib/components/ndf-filters/custom-components/aggregation-group/map-aggregation-config.js +1 -1
  375. package/esm2015/lib/components/ndf-filters/custom-components/index.js +1 -1
  376. package/esm2015/lib/components/ndf-filters/directives/autocomplete-template.directive.js +1 -1
  377. package/esm2015/lib/components/ndf-filters/directives/checkbox-template.directive.js +1 -1
  378. package/esm2015/lib/components/ndf-filters/directives/custom-template.directive.js +1 -1
  379. package/esm2015/lib/components/ndf-filters/directives/date-template.directive.js +1 -1
  380. package/esm2015/lib/components/ndf-filters/directives/dropdown-label-template.directive.js +1 -1
  381. package/esm2015/lib/components/ndf-filters/directives/dropdown-template.directive.js +1 -1
  382. package/esm2015/lib/components/ndf-filters/directives/index.js +1 -1
  383. package/esm2015/lib/components/ndf-filters/directives/radio-template.directive.js +1 -1
  384. package/esm2015/lib/components/ndf-filters/directives/switch-template.directive.js +1 -1
  385. package/esm2015/lib/components/ndf-filters/index.js +1 -1
  386. package/esm2015/lib/components/ndf-filters/models/aggregation-field-config.js +1 -1
  387. package/esm2015/lib/components/ndf-filters/models/aggregation-response.model.js +1 -1
  388. package/esm2015/lib/components/ndf-filters/models/base-field-config.js +1 -1
  389. package/esm2015/lib/components/ndf-filters/models/common.js +1 -1
  390. package/esm2015/lib/components/ndf-filters/models/custom-field-config.js +1 -1
  391. package/esm2015/lib/components/ndf-filters/models/field-config.model.js +1 -1
  392. package/esm2015/lib/components/ndf-filters/models/field-options/autocomplete-options.js +1 -1
  393. package/esm2015/lib/components/ndf-filters/models/field-options/checkbox-options.js +1 -1
  394. package/esm2015/lib/components/ndf-filters/models/field-options/common-utils.js +1 -1
  395. package/esm2015/lib/components/ndf-filters/models/field-options/custom-fields-options.js +1 -1
  396. package/esm2015/lib/components/ndf-filters/models/field-options/custom-options.js +1 -1
  397. package/esm2015/lib/components/ndf-filters/models/field-options/date-list-options.js +1 -1
  398. package/esm2015/lib/components/ndf-filters/models/field-options/date-options.js +1 -1
  399. package/esm2015/lib/components/ndf-filters/models/field-options/dropdown-options.js +1 -1
  400. package/esm2015/lib/components/ndf-filters/models/field-options/index.js +1 -1
  401. package/esm2015/lib/components/ndf-filters/models/field-options/input-options.js +1 -1
  402. package/esm2015/lib/components/ndf-filters/models/field-options/radio-options.js +1 -1
  403. package/esm2015/lib/components/ndf-filters/models/field-options/switch-options.js +1 -1
  404. package/esm2015/lib/components/ndf-filters/models/filter-option.model.js +1 -1
  405. package/esm2015/lib/components/ndf-filters/models/form-query-request.js +1 -1
  406. package/esm2015/lib/components/ndf-filters/models/index.js +1 -1
  407. package/esm2015/lib/components/ndf-filters/models/operator-value-object.js +1 -1
  408. package/esm2015/lib/components/ndf-filters/models/predicate-field-config.js +1 -1
  409. package/esm2015/lib/components/ndf-filters/models/types-helper.js +1 -1
  410. package/esm2015/lib/components/ndf-filters/models/value-object.model.js +1 -1
  411. package/esm2015/lib/components/ndf-filters/ndf-filters-panel.module.js +1 -1
  412. package/esm2015/lib/components/ndf-filters/pipes/autocomplete-filter.pipe.js +1 -1
  413. package/esm2015/lib/components/ndf-filters/pipes/check-condition.pipe.js +9 -4
  414. package/esm2015/lib/components/ndf-filters/pipes/evaluate-label.pipe.js +3 -3
  415. package/esm2015/lib/components/ndf-filters/pipes/filter.pipe.js +1 -1
  416. package/esm2015/lib/components/ndf-filters/pipes/hash-translate.pipe.js +1 -1
  417. package/esm2015/lib/components/ndf-filters/pipes/index.js +1 -1
  418. package/esm2015/lib/components/ndf-filters/pipes/localized-label.pipe.js +1 -1
  419. package/esm2015/lib/components/ndf-filters/pipes/roles-filters.pipe.js +1 -1
  420. package/esm2015/lib/components/ndf-filters/pipes/sanitizer.pipe.js +1 -1
  421. package/esm2015/lib/components/ndf-filters/pipes/sort.pipe.js +1 -1
  422. package/esm2015/lib/components/ndf-filters/pipes/tooltip.pipe.js +1 -1
  423. package/esm2015/lib/components/ndf-filters/public-api.js +1 -1
  424. package/esm2015/lib/components/ndf-filters/services/aggregation-field.service.js +1 -1
  425. package/esm2015/lib/components/ndf-filters/services/dynamic-component-loader.service.js +1 -1
  426. package/esm2015/lib/components/ndf-filters/services/filters-mapper.service.js +1 -1
  427. package/esm2015/lib/components/ndf-filters/services/filters-query.service.js +1 -1
  428. package/esm2015/lib/components/ndf-filters/services/index.js +1 -1
  429. package/esm2015/lib/components/ndf-filters/utility/index.js +1 -1
  430. package/esm2015/lib/components/ndf-filters/utility/nxql-query.js +1 -1
  431. package/esm2015/lib/components/ndf-filters/utility/nxql.js +1 -1
  432. package/esm2015/lib/components/ndf-filters/utility/object.js +1 -1
  433. package/esm2015/lib/components/ndf-panel/component/ndf-panel.component.js +1 -1
  434. package/esm2015/lib/components/ndf-panel/index.js +1 -1
  435. package/esm2015/lib/components/ndf-panel/ndf-panel.module.js +1 -1
  436. package/esm2015/lib/components/ndf-scanner/index.js +1 -1
  437. package/esm2015/lib/components/ndf-scanner/ndf-scanner.component.js +2 -2
  438. package/esm2015/lib/components/ndf-scanner/ndf-scanner.module.js +1 -1
  439. package/esm2015/lib/components/ndf-signatures/emdha/dialogs/auth/emdha-auth.dialog.js +1 -1
  440. package/esm2015/lib/components/ndf-signatures/emdha/dialogs/index.js +1 -1
  441. package/esm2015/lib/components/ndf-signatures/emdha/index.js +1 -1
  442. package/esm2015/lib/components/ndf-signatures/emdha/services/emdha.service.js +1 -1
  443. package/esm2015/lib/components/ndf-signatures/emdha/services/index.js +1 -1
  444. package/esm2015/lib/components/ndf-signatures/index.js +1 -1
  445. package/esm2015/lib/components/ndf-signatures/ndf-signature-panel/ndf-signature-panel.component.js +1 -1
  446. package/esm2015/lib/components/ndf-signatures/ndf-signatures.module.js +1 -1
  447. package/esm2015/lib/components/ndf-signatures/services/index.js +1 -1
  448. package/esm2015/lib/components/ndf-signatures/services/signatures.service.js +1 -1
  449. package/esm2015/lib/components/ndf-tabs/component/ndf-tabs.component.js +1 -1
  450. package/esm2015/lib/components/ndf-tabs/index.js +1 -1
  451. package/esm2015/lib/components/ndf-tabs/ndf-tabs.module.js +1 -1
  452. package/esm2015/lib/components/ndf-tabs/tab.type.js +1 -1
  453. package/esm2015/lib/components/ndf-uploader/components/bottom-sheet/ndf-uploader-bottom-sheet.component.js +2 -2
  454. package/esm2015/lib/components/ndf-uploader/components/index.js +1 -1
  455. package/esm2015/lib/components/ndf-uploader/config/index.js +1 -1
  456. package/esm2015/lib/components/ndf-uploader/config/uploader.config.js +1 -1
  457. package/esm2015/lib/components/ndf-uploader/constant/file-content.js +1 -1
  458. package/esm2015/lib/components/ndf-uploader/constant/index.js +1 -1
  459. package/esm2015/lib/components/ndf-uploader/helpers/index.js +1 -1
  460. package/esm2015/lib/components/ndf-uploader/helpers/uploader.helper.js +1 -1
  461. package/esm2015/lib/components/ndf-uploader/index.js +1 -1
  462. package/esm2015/lib/components/ndf-uploader/models/batch.model.js +1 -1
  463. package/esm2015/lib/components/ndf-uploader/models/index.js +1 -1
  464. package/esm2015/lib/components/ndf-uploader/models/ndf-file.model.js +1 -1
  465. package/esm2015/lib/components/ndf-uploader/models/provider.model.js +1 -1
  466. package/esm2015/lib/components/ndf-uploader/ndf-uploader-bottom-sheet.service.js +1 -1
  467. package/esm2015/lib/components/ndf-uploader/ndf-uploader.module.js +1 -1
  468. package/esm2015/lib/components/ndf-uploader/ndf-uploader.service.js +1 -1
  469. package/esm2015/lib/components/ndf-uploader/nuxeo-base-url.js +1 -1
  470. package/esm2015/lib/components/ndf-uploader/providers/index.js +1 -1
  471. package/esm2015/lib/components/ndf-uploader/providers/nuxeo-provider.service.js +1 -1
  472. package/esm2015/lib/components/ndf-uploader/providers/s3-provider.service.js +1 -1
  473. package/esm2015/lib/components/no-data-found/index.js +1 -1
  474. package/esm2015/lib/components/no-data-found/no-data-found.component.js +1 -1
  475. package/esm2015/lib/components/no-data-found/no-data.module.js +1 -1
  476. package/esm2015/lib/components/notifications/components/base-list-notfications.component.js +1 -1
  477. package/esm2015/lib/components/notifications/components/base-notifications.component.js +1 -1
  478. package/esm2015/lib/components/notifications/components/index.js +1 -1
  479. package/esm2015/lib/components/notifications/components/notification-item/get-icon.pipe.js +1 -1
  480. package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +2 -2
  481. package/esm2015/lib/components/notifications/components/notification-sortby-toggle/notification-sortby-toggle.component.js +2 -2
  482. package/esm2015/lib/components/notifications/components/notification-source-select/notification-source-select.component.js +2 -2
  483. package/esm2015/lib/components/notifications/components/notification-status-toggle/notification-status-toggle.component.js +2 -2
  484. package/esm2015/lib/components/notifications/components/notifications-button/notifications-button.component.js +2 -2
  485. package/esm2015/lib/components/notifications/components/notifications-date-select/notifications-date-select.component.js +2 -2
  486. package/esm2015/lib/components/notifications/components/notifications-list/notifications-list.component.js +2 -2
  487. package/esm2015/lib/components/notifications/components/notifications-list/options.js +1 -1
  488. package/esm2015/lib/components/notifications/components/notifications-list-actions/notifications-list-actions.component.js +2 -2
  489. package/esm2015/lib/components/notifications/components/notifications-settings/check-if-subscribed.pipe.js +1 -1
  490. package/esm2015/lib/components/notifications/components/notifications-settings/notifications-settings.adapter.js +1 -1
  491. package/esm2015/lib/components/notifications/components/notifications-settings/notifications-settings.component.js +2 -2
  492. package/esm2015/lib/components/notifications/components/notifications-sidebar/notifications-sidebar-content.js +1 -1
  493. package/esm2015/lib/components/notifications/components/notifications-sidebar/notifications-sidebar.component.js +1 -1
  494. package/esm2015/lib/components/notifications/constants/date.js +1 -1
  495. package/esm2015/lib/components/notifications/constants/index.js +1 -1
  496. package/esm2015/lib/components/notifications/constants/pagination.js +1 -1
  497. package/esm2015/lib/components/notifications/constants/panel.js +1 -1
  498. package/esm2015/lib/components/notifications/constants/status.js +1 -1
  499. package/esm2015/lib/components/notifications/containers/index.js +1 -1
  500. package/esm2015/lib/components/notifications/containers/notifications-list-container/notifications-list-container.component.js +2 -2
  501. package/esm2015/lib/components/notifications/containers/notifications-list-container/options.js +1 -1
  502. package/esm2015/lib/components/notifications/containers/notifications-settings-container/notifications-settings-container.component.js +1 -1
  503. package/esm2015/lib/components/notifications/directives/button.directive.js +1 -1
  504. package/esm2015/lib/components/notifications/directives/index.js +1 -1
  505. package/esm2015/lib/components/notifications/directives/notification.directive.js +1 -1
  506. package/esm2015/lib/components/notifications/index.js +1 -1
  507. package/esm2015/lib/components/notifications/models/common.js +1 -1
  508. package/esm2015/lib/components/notifications/models/index.js +1 -1
  509. package/esm2015/lib/components/notifications/models/notification-definition.model.js +1 -1
  510. package/esm2015/lib/components/notifications/models/notification-message.mode.js +1 -1
  511. package/esm2015/lib/components/notifications/models/notification-options.js +1 -1
  512. package/esm2015/lib/components/notifications/models/notification-setting.presenter.js +1 -1
  513. package/esm2015/lib/components/notifications/models/notification-subscription.model.js +1 -1
  514. package/esm2015/lib/components/notifications/models/notification.model.js +1 -1
  515. package/esm2015/lib/components/notifications/models/notifications-list-options.js +1 -1
  516. package/esm2015/lib/components/notifications/models/paging-response.model.js +1 -1
  517. package/esm2015/lib/components/notifications/models/params.model.js +1 -1
  518. package/esm2015/lib/components/notifications/models/vocabularies.js +1 -1
  519. package/esm2015/lib/components/notifications/notifications.module.js +1 -1
  520. package/esm2015/lib/components/notifications/public-api.js +1 -1
  521. package/esm2015/lib/components/notifications/services/index.js +1 -1
  522. package/esm2015/lib/components/notifications/services/listener.service.js +1 -1
  523. package/esm2015/lib/components/notifications/services/notifications.service.js +1 -1
  524. package/esm2015/lib/components/notifications/services/params.service.js +1 -1
  525. package/esm2015/lib/components/notifications/services/response.service.js +1 -1
  526. package/esm2015/lib/components/notifications/services/socket.service.js +1 -1
  527. package/esm2015/lib/components/notifications/utilities/index.js +1 -1
  528. package/esm2015/lib/components/notifications/utilities/response.adapter.js +1 -1
  529. package/esm2015/lib/components/pagination/pagination/pagination.component.js +1 -1
  530. package/esm2015/lib/components/pagination/pagination.module.js +1 -1
  531. package/esm2015/lib/components/pdf-tron/directives/index.js +1 -1
  532. package/esm2015/lib/components/pdf-tron/directives/ndf-tron-extract-text.directive.js +1 -1
  533. package/esm2015/lib/components/pdf-tron/models/index.js +1 -1
  534. package/esm2015/lib/components/pdf-tron/models/tron.model.js +1 -1
  535. package/esm2015/lib/components/pdf-tron/pdf-tron.module.js +1 -1
  536. package/esm2015/lib/components/pdf-tron/pdftron/pdftron.component.js +1 -1
  537. package/esm2015/lib/components/pdf-tron/pdftron/pdftron.service.js +1 -1
  538. package/esm2015/lib/components/pdf-tron/pdftron/silent-pdftron.service.js +1 -1
  539. package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +2 -2
  540. package/esm2015/lib/components/permissions/permission.service.js +1 -1
  541. package/esm2015/lib/components/permissions/permissions/permissions.component.js +1 -1
  542. package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +1 -1
  543. package/esm2015/lib/components/permissions/permissions.module.js +1 -1
  544. package/esm2015/lib/components/reports/chart-panel.js +1 -1
  545. package/esm2015/lib/components/reports/charts/chart.const.js +1 -1
  546. package/esm2015/lib/components/reports/charts/chart.token.js +1 -1
  547. package/esm2015/lib/components/reports/charts/charts.module.js +1 -1
  548. package/esm2015/lib/components/reports/charts/components/base-chart.component.js +1 -1
  549. package/esm2015/lib/components/reports/charts/components/chart.component.js +1 -1
  550. package/esm2015/lib/components/reports/charts/components/data-chart.component.js +1 -1
  551. package/esm2015/lib/components/reports/charts/components/index.js +1 -1
  552. package/esm2015/lib/components/reports/charts/defaults/bar.js +1 -1
  553. package/esm2015/lib/components/reports/charts/defaults/doughnut.js +1 -1
  554. package/esm2015/lib/components/reports/charts/defaults/index.js +1 -1
  555. package/esm2015/lib/components/reports/charts/defaults/line.js +1 -1
  556. package/esm2015/lib/components/reports/charts/defaults/pie.js +1 -1
  557. package/esm2015/lib/components/reports/charts/index.js +1 -1
  558. package/esm2015/lib/components/reports/charts/models/index.js +1 -1
  559. package/esm2015/lib/components/reports/charts/models/options.js +1 -1
  560. package/esm2015/lib/components/reports/charts/models/plugins-options.js +1 -1
  561. package/esm2015/lib/components/reports/charts/models/response.js +1 -1
  562. package/esm2015/lib/components/reports/charts/models/statistic-request-config.js +1 -1
  563. package/esm2015/lib/components/reports/charts/plugins/data-labels.js +1 -1
  564. package/esm2015/lib/components/reports/charts/plugins/doughnut-center-text.js +1 -1
  565. package/esm2015/lib/components/reports/charts/plugins/doughnut-empty-state.js +1 -1
  566. package/esm2015/lib/components/reports/charts/plugins/index.js +1 -1
  567. package/esm2015/lib/components/reports/charts/plugins/legend-margin.js +1 -1
  568. package/esm2015/lib/components/reports/charts/plugins/scrollable-legends.js +1 -1
  569. package/esm2015/lib/components/reports/charts/public-api.js +1 -1
  570. package/esm2015/lib/components/reports/charts/services/index.js +1 -1
  571. package/esm2015/lib/components/reports/charts/services/statistic.service.js +1 -1
  572. package/esm2015/lib/components/reports/charts/utility/colors.js +1 -1
  573. package/esm2015/lib/components/reports/charts/utility/common.js +1 -1
  574. package/esm2015/lib/components/reports/charts/utility/css.js +1 -1
  575. package/esm2015/lib/components/reports/charts/utility/index.js +1 -1
  576. package/esm2015/lib/components/reports/index.js +1 -1
  577. package/esm2015/lib/components/reports/ndf-reports/base/base-chart.js +1 -1
  578. package/esm2015/lib/components/reports/ndf-reports/base/base-custom-report.js +1 -1
  579. package/esm2015/lib/components/reports/ndf-reports/base/base-graph.report.js +1 -1
  580. package/esm2015/lib/components/reports/ndf-reports/base/base-report.js +1 -1
  581. package/esm2015/lib/components/reports/ndf-reports/base/index.js +1 -1
  582. package/esm2015/lib/components/reports/ndf-reports/charts-components/custom-chart/custom-chart.component.js +1 -1
  583. package/esm2015/lib/components/reports/ndf-reports/charts-components/digit-chart/digit-chart.component.js +1 -1
  584. package/esm2015/lib/components/reports/ndf-reports/charts-components/graph-chart/graph-chart.component.js +1 -1
  585. package/esm2015/lib/components/reports/ndf-reports/charts-components/graph-chart/graph-chart.service.js +1 -1
  586. package/esm2015/lib/components/reports/ndf-reports/charts-components/index.js +1 -1
  587. package/esm2015/lib/components/reports/ndf-reports/components/_parts/chart-type-selector/chart-type-selector.component.js +2 -2
  588. package/esm2015/lib/components/reports/ndf-reports/components/_parts/custom-chart-dialog/custom-chart-dialog.component.js +2 -2
  589. package/esm2015/lib/components/reports/ndf-reports/components/_parts/graph-dialog/graph-dialog.component.js +2 -2
  590. package/esm2015/lib/components/reports/ndf-reports/components/_parts/index.js +1 -1
  591. package/esm2015/lib/components/reports/ndf-reports/components/_parts/report-actions/report-actions.component.js +2 -2
  592. package/esm2015/lib/components/reports/ndf-reports/components/_parts/time-group-selector/time-group-selector.component.js +1 -1
  593. package/esm2015/lib/components/reports/ndf-reports/components/_parts/timeline-dialog/timeline-dialog.component.js +2 -2
  594. package/esm2015/lib/components/reports/ndf-reports/components/custom-report/custom-report.component.js +2 -2
  595. package/esm2015/lib/components/reports/ndf-reports/components/digit-report/digit-report.component.js +1 -1
  596. package/esm2015/lib/components/reports/ndf-reports/components/dynamic-timeline-report/dynamic-timeline-report.component.js +2 -2
  597. package/esm2015/lib/components/reports/ndf-reports/components/graph-report/graph-report.component.js +2 -2
  598. package/esm2015/lib/components/reports/ndf-reports/components/index.js +1 -1
  599. package/esm2015/lib/components/reports/ndf-reports/constants/charts-types.js +1 -1
  600. package/esm2015/lib/components/reports/ndf-reports/constants/index.js +1 -1
  601. package/esm2015/lib/components/reports/ndf-reports/constants/time-group.js +1 -1
  602. package/esm2015/lib/components/reports/ndf-reports/containers/index.js +1 -1
  603. package/esm2015/lib/components/reports/ndf-reports/containers/ndf-report/ndf-report.component.js +1 -1
  604. package/esm2015/lib/components/reports/ndf-reports/containers/ndf-reports/ndf-reports.component.js +1 -1
  605. package/esm2015/lib/components/reports/ndf-reports/directives/empty-content-template.directive.js +1 -1
  606. package/esm2015/lib/components/reports/ndf-reports/directives/header-panel-template.directive.js +1 -1
  607. package/esm2015/lib/components/reports/ndf-reports/directives/index.js +1 -1
  608. package/esm2015/lib/components/reports/ndf-reports/directives/scrollable-div.directive.js +1 -1
  609. package/esm2015/lib/components/reports/ndf-reports/index.js +1 -1
  610. package/esm2015/lib/components/reports/ndf-reports/models/base.js +1 -1
  611. package/esm2015/lib/components/reports/ndf-reports/models/common.js +1 -1
  612. package/esm2015/lib/components/reports/ndf-reports/models/custom-definition.js +1 -1
  613. package/esm2015/lib/components/reports/ndf-reports/models/details.js +1 -1
  614. package/esm2015/lib/components/reports/ndf-reports/models/dialog-data.js +1 -1
  615. package/esm2015/lib/components/reports/ndf-reports/models/digit.js +1 -1
  616. package/esm2015/lib/components/reports/ndf-reports/models/dynamic-line.js +1 -1
  617. package/esm2015/lib/components/reports/ndf-reports/models/graph-definition.js +1 -1
  618. package/esm2015/lib/components/reports/ndf-reports/models/index.js +1 -1
  619. package/esm2015/lib/components/reports/ndf-reports/models/ndf-reports.config.js +1 -1
  620. package/esm2015/lib/components/reports/ndf-reports/models/report-config.js +1 -1
  621. package/esm2015/lib/components/reports/ndf-reports/models/report-data-source.js +1 -1
  622. package/esm2015/lib/components/reports/ndf-reports/models/report-response.model.js +1 -1
  623. package/esm2015/lib/components/reports/ndf-reports/models/request.js +1 -1
  624. package/esm2015/lib/components/reports/ndf-reports/ndf-reports.module.js +1 -1
  625. package/esm2015/lib/components/reports/ndf-reports/options/doughnut.js +1 -1
  626. package/esm2015/lib/components/reports/ndf-reports/options/horizontal-bar.js +1 -1
  627. package/esm2015/lib/components/reports/ndf-reports/options/index.js +1 -1
  628. package/esm2015/lib/components/reports/ndf-reports/options/line.js +1 -1
  629. package/esm2015/lib/components/reports/ndf-reports/options/pie.js +1 -1
  630. package/esm2015/lib/components/reports/ndf-reports/options/vertical-bar.js +1 -1
  631. package/esm2015/lib/components/reports/ndf-reports/pipes/check-condition.pipe.js +3 -3
  632. package/esm2015/lib/components/reports/ndf-reports/public-api.js +1 -1
  633. package/esm2015/lib/components/reports/ndf-reports/services/base-chart-builder.service.js +1 -1
  634. package/esm2015/lib/components/reports/ndf-reports/services/chart-callbacks-register.services.js +1 -1
  635. package/esm2015/lib/components/reports/ndf-reports/services/chart-data-transformers.service.js +1 -1
  636. package/esm2015/lib/components/reports/ndf-reports/services/chart-manager.service.js +1 -1
  637. package/esm2015/lib/components/reports/ndf-reports/services/chart-plugins-registry.service.js +1 -1
  638. package/esm2015/lib/components/reports/ndf-reports/services/chart-theme.service.js +1 -1
  639. package/esm2015/lib/components/reports/ndf-reports/services/custom-reports-registry.service.js +1 -1
  640. package/esm2015/lib/components/reports/ndf-reports/services/digit-chart.service.js +1 -1
  641. package/esm2015/lib/components/reports/ndf-reports/services/dynamic-timeline-report.service.js +1 -1
  642. package/esm2015/lib/components/reports/ndf-reports/services/index.js +1 -1
  643. package/esm2015/lib/components/reports/ndf-reports/services/ndf-reports.service.js +1 -1
  644. package/esm2015/lib/components/reports/ndf-reports/services/report-config-mapper.service.js +28 -15
  645. package/esm2015/lib/components/reports/ndf-reports/services/report-configuration.service.js +1 -1
  646. package/esm2015/lib/components/reports/ndf-reports/services/report-transform.service.js +1 -1
  647. package/esm2015/lib/components/reports/ndf-reports/services/reports-data-transformers.service.js +1 -1
  648. package/esm2015/lib/components/reports/ndf-reports/services/reports-dialog.service.js +1 -1
  649. package/esm2015/lib/components/reports/ndf-reports/services/reports-hooks.service.js +3 -3
  650. package/esm2015/lib/components/reports/ndf-reports/services/reports-state.service.js +1 -1
  651. package/esm2015/lib/components/reports/ndf-reports/utilities/dataset-colors.js +1 -1
  652. package/esm2015/lib/components/reports/ndf-reports/utilities/index.js +1 -1
  653. package/esm2015/lib/components/reports/ndf-reports/utilities/reports-table.mapper.js +1 -1
  654. package/esm2015/lib/components/select/select/select.component.js +1 -1
  655. package/esm2015/lib/components/select/select.module.js +1 -1
  656. package/esm2015/lib/components/select-users-by-department/select-users-by-department.module.js +1 -1
  657. package/esm2015/lib/components/select-users-by-department/select-users-by-departments/department-management.service.js +1 -1
  658. package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +1 -1
  659. package/esm2015/lib/components/skeleton/index.js +1 -1
  660. package/esm2015/lib/components/skeleton/skeleton.component.js +1 -1
  661. package/esm2015/lib/components/skeleton/skeleton.module.js +1 -1
  662. package/esm2015/lib/components/skeleton/table-skeleton.component.js +1 -1
  663. package/esm2015/lib/components/spell-checker-field/spell-checker-field.module.js +1 -1
  664. package/esm2015/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.js +1 -1
  665. package/esm2015/lib/components/tables/dynamic-table/directives/empty-state.directive.js +1 -1
  666. package/esm2015/lib/components/tables/dynamic-table/dynamic-table/dynamic-table.component.js +1 -1
  667. package/esm2015/lib/components/tables/dynamic-table/dynamic-table.module.js +1 -1
  668. package/esm2015/lib/components/tables/dynamic-table/index.js +1 -1
  669. package/esm2015/lib/components/tables/dynamic-table/public-api.js +1 -1
  670. package/esm2015/lib/components/tables/dynamic-table/services/dynamic-table.service.js +1 -1
  671. package/esm2015/lib/components/tables/dynamic-table/services/table-hooks.service.js +4 -4
  672. package/esm2015/lib/components/tables/index.js +1 -1
  673. package/esm2015/lib/components/tables/ndf-table/components/index.js +1 -1
  674. package/esm2015/lib/components/tables/ndf-table/components/mode-toggler/mode-toggler.component.js +1 -1
  675. package/esm2015/lib/components/tables/ndf-table/components/sorting-list/sorting-list.component.js +2 -2
  676. package/esm2015/lib/components/tables/ndf-table/components/table-columns-toggler/table-columns-toggler.component.js +2 -2
  677. package/esm2015/lib/components/tables/ndf-table/components/table-export/table-export.component.js +2 -2
  678. package/esm2015/lib/components/tables/ndf-table/components/text-search/text-search.component.js +1 -1
  679. package/esm2015/lib/components/tables/ndf-table/constants/index.js +1 -1
  680. package/esm2015/lib/components/tables/ndf-table/constants/sizes.js +1 -1
  681. package/esm2015/lib/components/tables/ndf-table/containers/index.js +1 -1
  682. package/esm2015/lib/components/tables/ndf-table/containers/ndf-table/ndf-table.component.js +1 -1
  683. package/esm2015/lib/components/tables/ndf-table/directives/actions.directive.js +1 -1
  684. package/esm2015/lib/components/tables/ndf-table/directives/filter-custom.directive.js +1 -1
  685. package/esm2015/lib/components/tables/ndf-table/directives/index.js +1 -1
  686. package/esm2015/lib/components/tables/ndf-table/directives/search.directive.js +1 -1
  687. package/esm2015/lib/components/tables/ndf-table/index.js +1 -1
  688. package/esm2015/lib/components/tables/ndf-table/models/index.js +1 -1
  689. package/esm2015/lib/components/tables/ndf-table/models/payload-types.js +1 -1
  690. package/esm2015/lib/components/tables/ndf-table/models/search.config.js +1 -1
  691. package/esm2015/lib/components/tables/ndf-table/models/table-column.js +1 -1
  692. package/esm2015/lib/components/tables/ndf-table/models/table-config.js +1 -1
  693. package/esm2015/lib/components/tables/ndf-table/models/table-mode.js +1 -1
  694. package/esm2015/lib/components/tables/ndf-table/models/table-options.js +1 -1
  695. package/esm2015/lib/components/tables/ndf-table/models/types.js +1 -1
  696. package/esm2015/lib/components/tables/ndf-table/ndf-table.module.js +1 -1
  697. package/esm2015/lib/components/tables/ndf-table/public-api.js +1 -1
  698. package/esm2015/lib/components/tables/ndf-table/services/index.js +1 -1
  699. package/esm2015/lib/components/tables/ndf-table/services/ndf-table-configuration.service.js +1 -1
  700. package/esm2015/lib/components/tables/ndf-table/services/ndf-table.service.js +1 -1
  701. package/esm2015/lib/components/tables/public-api.js +1 -1
  702. package/esm2015/lib/components/tables/table/dynamic-column/dynamic-column.component.js +1 -1
  703. package/esm2015/lib/components/tables/table/dynamic-component.js +1 -1
  704. package/esm2015/lib/components/tables/table/index.js +1 -1
  705. package/esm2015/lib/components/tables/table/page-sizes-list/page-sizes-list.component.js +1 -1
  706. package/esm2015/lib/components/tables/table/public-api.js +1 -1
  707. package/esm2015/lib/components/tables/table/table/table.component.js +2 -2
  708. package/esm2015/lib/components/tables/table/table.module.js +1 -1
  709. package/esm2015/lib/components/toasts/components/notification-toast/notification-toast.component.js +1 -1
  710. package/esm2015/lib/components/toasts/index.js +1 -1
  711. package/esm2015/lib/components/toasts/public-api.js +1 -1
  712. package/esm2015/lib/components/toasts/toasts.module.js +1 -1
  713. package/esm2015/lib/components/user/user/user.component.js +1 -1
  714. package/esm2015/lib/components/user/user.module.js +1 -1
  715. package/esm2015/lib/components/users-card/users-card.component.js +2 -2
  716. package/esm2015/lib/components/users-card/users-card.module.js +1 -1
  717. package/esm2015/lib/components/viewer-log/components/viewer-log/viewer-log.component.js +1 -1
  718. package/esm2015/lib/components/viewer-log/viewer-log.module.js +1 -1
  719. package/esm2015/lib/components/vocabulary/interfaces/op-type.interface.js +1 -1
  720. package/esm2015/lib/components/vocabulary/services/vocabulary-api.service.js +1 -1
  721. package/esm2015/lib/components/vocabulary/translated-vocabulary-select/translated-vocabulary-select.component.js +1 -1
  722. package/esm2015/lib/components/vocabulary/vocabulary/vocabulary.component.js +1 -1
  723. package/esm2015/lib/components/vocabulary/vocabulary.module.js +1 -1
  724. package/esm2015/lib/configuration/app-config.service.js +1 -1
  725. package/esm2015/lib/configuration/helpers/app-initializer.js +1 -1
  726. package/esm2015/lib/core/adapters/adapter.service.js +1 -1
  727. package/esm2015/lib/core/core.module.js +1 -1
  728. package/esm2015/lib/core/enums/language.enum.js +1 -1
  729. package/esm2015/lib/core/env/env-manager.js +1 -1
  730. package/esm2015/lib/core/env/index.js +1 -1
  731. package/esm2015/lib/core/models/api-response.model.js +1 -1
  732. package/esm2015/lib/core/models/automation-response.model.js +1 -1
  733. package/esm2015/lib/core/models/base-response.models.js +1 -1
  734. package/esm2015/lib/core/models/component.model.js +1 -1
  735. package/esm2015/lib/core/models/index.js +1 -1
  736. package/esm2015/lib/core/services/callApi/call-api.service.js +1 -1
  737. package/esm2015/lib/core/services/column-renderer/column-renderer-registry.service.js +1 -1
  738. package/esm2015/lib/core/services/column-renderer/index.js +1 -1
  739. package/esm2015/lib/core/services/extension/action.extensions.js +1 -1
  740. package/esm2015/lib/core/services/extension/component-register.service.js +1 -1
  741. package/esm2015/lib/core/services/extension/extenion-utils.js +1 -1
  742. package/esm2015/lib/core/services/extension/extension-element.js +1 -1
  743. package/esm2015/lib/core/services/extension/extension-loader.service.js +1 -1
  744. package/esm2015/lib/core/services/extension/extension.service.js +1 -1
  745. package/esm2015/lib/core/services/index.js +1 -1
  746. package/esm2015/lib/core/services/initialization/initialization.service.js +1 -1
  747. package/esm2015/lib/core/services/localStorag/local-storag.service.js +1 -1
  748. package/esm2015/lib/core/services/ndf-transform.service.js +1 -1
  749. package/esm2015/lib/core/services/nuxeo/new-nuxeo-overide.js +1 -1
  750. package/esm2015/lib/core/services/nuxeo/nuxeo-override.js +1 -1
  751. package/esm2015/lib/core/services/nuxeo/nuxeo.service.js +1 -1
  752. package/esm2015/lib/core/services/roles/roles.service.js +1 -1
  753. package/esm2015/lib/core/services/translation/translate-loader.service.js +1 -1
  754. package/esm2015/lib/core/services/translation/translation.service.js +1 -1
  755. package/esm2015/lib/core/services/user/user-preferences.service.js +1 -1
  756. package/esm2015/lib/core/tokens/index.js +1 -1
  757. package/esm2015/lib/core/tokens/project.token.js +1 -1
  758. package/esm2015/lib/core/utilities/moment-date-adapter.js +1 -1
  759. package/esm2015/lib/core/utilities/utility.service.js +1 -1
  760. package/esm2015/lib/directive/app-has-role/app-has-role.directive.js +1 -1
  761. package/esm2015/lib/directive/clickOutSide/click-outside.directive.js +1 -1
  762. package/esm2015/lib/directive/directive.module.js +1 -1
  763. package/esm2015/lib/directive/drag-and-drop/drag-and-drop.directive.js +1 -1
  764. package/esm2015/lib/directive/permissions/evaluators.service.js +1 -1
  765. package/esm2015/lib/directive/permissions/permissions.directive.js +1 -1
  766. package/esm2015/lib/directive/rtl/set-dir-rtl.directive.js +1 -1
  767. package/esm2015/lib/directive/rtl/set-rtl.directive.js +1 -1
  768. package/esm2015/lib/nuxeo-development-framework.component.js +1 -1
  769. package/esm2015/lib/nuxeo-development-framework.module.js +1 -1
  770. package/esm2015/lib/nuxeo-development-framework.service.js +1 -1
  771. package/esm2015/lib/pipes/file-size.pipe.js +1 -1
  772. package/esm2015/lib/pipes/hijri-date.pipe.js +1 -1
  773. package/esm2015/lib/pipes/localized-date.pipe.js +1 -1
  774. package/esm2015/lib/pipes/multi-value.pipe.js +1 -1
  775. package/esm2015/lib/pipes/pipes.module.js +1 -1
  776. package/esm2015/lib/pipes/secure-html.pipe.js +1 -1
  777. package/esm2015/lib/pipes/secure.pipe.js +1 -1
  778. package/esm2015/lib/pipes/time-ago.pipe.js +1 -1
  779. package/esm2015/lib/shared/components/base/base-column.component.js +1 -1
  780. package/esm2015/lib/shared/components/base/base-dialog.component.js +1 -1
  781. package/esm2015/lib/shared/components/base/base-selector.component.js +1 -1
  782. package/esm2015/lib/shared/components/base/base.component.js +1 -1
  783. package/esm2015/lib/shared/components/base/destroy.subject.js +1 -1
  784. package/esm2015/lib/shared/components/base/index.js +1 -1
  785. package/esm2015/lib/shared/components/button/button.component.js +1 -1
  786. package/esm2015/lib/shared/components/general-notification-popup/general-notification-popup.component.js +1 -1
  787. package/esm2015/lib/shared/components/index.js +1 -1
  788. package/esm2015/lib/shared/components/item-list/item-list.component.js +2 -2
  789. package/esm2015/lib/shared/components/no-data/no-data.component.js +1 -1
  790. package/esm2015/lib/shared/components/nuxeo-dialog/confirmation/ndf-confirmation-dialog.component.js +1 -1
  791. package/esm2015/lib/shared/components/nuxeo-dialog/index.js +1 -1
  792. package/esm2015/lib/shared/components/nuxeo-dialog/models/confirm-options.model.js +1 -1
  793. package/esm2015/lib/shared/components/nuxeo-dialog/models/dialog-option.model.js +1 -1
  794. package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.js +1 -1
  795. package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +2 -2
  796. package/esm2015/lib/shared/components/nuxeo-dialog/services/nuxeo-dialog.service.js +1 -1
  797. package/esm2015/lib/shared/components/read-more/read-more.component.js +1 -1
  798. package/esm2015/lib/shared/components/search-autocomplete/search-autocomplete.component.js +1 -1
  799. package/esm2015/lib/shared/components/spinner/spinner.component.js +1 -1
  800. package/esm2015/lib/shared/components/user-card/user-card.component.js +1 -1
  801. package/esm2015/lib/shared/constants/editor-config-type.js +1 -1
  802. package/esm2015/lib/shared/constants/index.js +1 -1
  803. package/esm2015/lib/shared/directives/copy-to-clipboard.directive.js +1 -1
  804. package/esm2015/lib/shared/directives/element-height.directive.js +1 -1
  805. package/esm2015/lib/shared/directives/fluid-height.directive.js +1 -1
  806. package/esm2015/lib/shared/directives/index.js +1 -1
  807. package/esm2015/lib/shared/index.js +5 -6
  808. package/esm2015/lib/shared/libraryShared.module.js +1 -1
  809. package/esm2015/lib/shared/models/index.js +1 -1
  810. package/esm2015/lib/shared/models/mapper/index.js +1 -1
  811. package/esm2015/lib/shared/models/mapper/nuxeo-mapper.js +1 -1
  812. package/esm2015/lib/shared/models/ndf-request.model.js +1 -1
  813. package/esm2015/lib/shared/models/nuxeo-response.model.js +1 -1
  814. package/esm2015/lib/shared/models/task.model.js +1 -1
  815. package/esm2015/lib/shared/models/type-helpers.js +1 -1
  816. package/esm2015/lib/shared/services/base/base-editor-config.service.js +1 -1
  817. package/esm2015/lib/shared/services/base/base.service.js +1 -1
  818. package/esm2015/lib/shared/services/base/cache-base.service.js +1 -1
  819. package/esm2015/lib/shared/services/base/config/default-ttl-config.js +1 -1
  820. package/esm2015/lib/shared/services/base/config/index.js +1 -1
  821. package/esm2015/lib/shared/services/base/constants/default-cache-options.js +1 -1
  822. package/esm2015/lib/shared/services/base/constants/index.js +1 -1
  823. package/esm2015/lib/shared/services/base/http-base.service.js +1 -1
  824. package/esm2015/lib/shared/services/base/index.js +1 -1
  825. package/esm2015/lib/shared/services/base/models/cache-info-model.js +1 -1
  826. package/esm2015/lib/shared/services/base/models/http-options.model.js +1 -1
  827. package/esm2015/lib/shared/services/base/models/index.js +1 -1
  828. package/esm2015/lib/shared/services/base/models/operation-options.model.js +1 -1
  829. package/esm2015/lib/shared/services/base/models/query-options.model.js +1 -1
  830. package/esm2015/lib/shared/services/base/models/request-options.model.js +1 -1
  831. package/esm2015/lib/shared/services/base/override-token.service.js +1 -1
  832. package/esm2015/lib/shared/services/index.js +1 -1
  833. package/esm2015/lib/shared-services/apis-errors-messages.service.js +1 -1
  834. package/esm2015/lib/shared-services/dialog-mangment.service.js +1 -1
  835. package/esm2015/lib/shared-services/dynamic-form.service.js +1 -1
  836. package/esm2015/lib/shared-services/file-manager.adapter.js +1 -1
  837. package/esm2015/lib/shared-services/file-manager.service.js +1 -1
  838. package/esm2015/lib/shared-services/global-admin.service.js +1 -1
  839. package/esm2015/lib/shared-services/global-pdftron.service.js +1 -1
  840. package/esm2015/lib/shared-services/mainfolder.service.js +1 -1
  841. package/esm2015/lib/shared-services/publishing-document.service.js +1 -1
  842. package/esm2015/lib/shared-services/recently-viewed.service.js +1 -1
  843. package/esm2015/lib/shared-services/shared-docs.service.js +1 -1
  844. package/esm2015/lib/shared-services/shared-services.module.js +1 -1
  845. package/esm2015/lib/shared-services/upload-file.service.js +1 -1
  846. package/esm2015/lib/shared-services/upload-managment.service.js +1 -1
  847. package/esm2015/lib/shared-services/user.service.js +1 -1
  848. package/esm2015/nuxeo-development-framework.js +1 -1
  849. package/esm2015/public-api.js +12 -13
  850. package/fesm2015/nuxeo-development-framework.js +697 -994
  851. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  852. package/lib/components/diagrams/components/custom-connection.component.d.ts +1 -1
  853. package/lib/components/dynamic-form/components/form-wrappers/base-edit-form/base-edit-form.d.ts +1 -1
  854. package/lib/components/ndf-filters/components/__parts/filter-autocomplete-input/filter-autocomplete.service.d.ts +1 -2
  855. package/lib/components/ndf-filters/containers/filters-panel/filters-panel.component.d.ts +3 -3
  856. package/lib/components/ndf-filters/models/base-field-config.d.ts +1 -1
  857. package/lib/components/ndf-filters/pipes/check-condition.pipe.d.ts +1 -2
  858. package/lib/components/reports/charts/components/base-chart.component.d.ts +1 -1
  859. package/lib/components/reports/ndf-reports/base/base-chart.d.ts +1 -1
  860. package/lib/components/reports/ndf-reports/components/dynamic-timeline-report/dynamic-timeline-report.component.d.ts +1 -17
  861. package/lib/components/reports/ndf-reports/components/graph-report/graph-report.component.d.ts +1 -1
  862. package/lib/components/reports/ndf-reports/models/details.d.ts +1 -1
  863. package/lib/components/reports/ndf-reports/models/graph-definition.d.ts +2 -2
  864. package/lib/components/reports/ndf-reports/services/base-chart-builder.service.d.ts +14 -14
  865. package/lib/components/reports/ndf-reports/services/ndf-reports.service.d.ts +1 -1
  866. package/lib/components/reports/ndf-reports/services/report-config-mapper.service.d.ts +2 -2
  867. package/lib/components/tables/ndf-table/components/table-export/table-export.component.d.ts +1 -1
  868. package/lib/components/tables/ndf-table/models/table-config.d.ts +1 -1
  869. package/lib/shared/index.d.ts +7 -5
  870. package/package.json +1 -1
  871. package/public-api.d.ts +11 -12
  872. package/esm2015/lib/shared/evaluator/evaluator.js +0 -318
  873. package/esm2015/lib/shared/evaluator/index.js +0 -3
  874. package/esm2015/lib/shared/evaluator/types.js +0 -2
  875. package/lib/shared/evaluator/evaluator.d.ts +0 -79
  876. package/lib/shared/evaluator/index.d.ts +0 -2
  877. package/lib/shared/evaluator/types.d.ts +0 -18
@@ -941,7 +941,7 @@ export class NdfScannerComponent {
941
941
  }
942
942
  }
943
943
  NdfScannerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfScannerComponent, deps: [{ token: i1.TranslateService }, { token: i2.DocumentsService }, { token: i3.NdfUploaderService }, { token: i4.DatePipe }, { token: APP_BASE_HREF }], target: i0.ɵɵFactoryTarget.Component });
944
- NdfScannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: NdfScannerComponent, selector: "ndf-scanner", inputs: { useStoredFile: "useStoredFile", hideUploadButton: "hideUploadButton", loading: "loading" }, outputs: { file: "file" }, host: { classAttribute: "ndf-scanner" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"DWTcontainer\" class=\"h-full\">\r\n\t<div id=\"DWTcontainerTop\">\r\n\t\t<div id=\"divEdit\">\r\n\t\t\t<ul class=\"operateGrp\">\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.showImageEditor' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnShowImageEditor_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Editor'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.rotateLeft' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRotateLeft_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Rotate-Left'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.rotateRight' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRotateRight_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Rotate-Right'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.rotate180' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRotate180_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Rotate-180'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.mirror' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnMirror_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:flip-horizontal'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.flip' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnFlip_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:flip-vertical'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.removeSelected' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRemoveCurrentImage_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:RemoveImages'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.removeAll' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRemoveAllImages_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:RemoveAllImages'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.resize' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnChangeImageSize_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:changeSize'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.crop' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnCrop_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:crop'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t</ul>\r\n\t\t\t<div id=\"ImgSizeEditor\" style=\"visibility: hidden\">\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label for=\"img_height\"\r\n\t\t\t\t\t\t\t>{{ 'scanner.newHeight' | translate }} :\r\n\t\t\t\t\t\t\t<input type=\"text\" id=\"img_height\" style=\"width: 50%\" size=\"10\" />\r\n\t\t\t\t\t\t\t{{ 'scanner.pixel' | translate }}</label\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label for=\"img_width\"\r\n\t\t\t\t\t\t\t>{{ 'scanner.newWidth' | translate }} :&nbsp;\r\n\t\t\t\t\t\t\t<input type=\"text\" id=\"img_width\" style=\"width: 50%\" size=\"10\" />\r\n\t\t\t\t\t\t\t{{ 'scanner.pixel' | translate }}</label\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t{{ 'scanner.InterpolationMethod' | translate }}:\r\n\t\t\t\t\t\t<select size=\"1\" id=\"InterpolationMethod\">\r\n\t\t\t\t\t\t\t<option value=\"\"></option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li style=\"text-align: center\">\r\n\t\t\t\t\t\t<input type=\"button\" value=\" OK \" id=\"btnChangeImageSizeOK\" (click)=\"btnChangeImageSizeOK_onclick()\" />\r\n\t\t\t\t\t\t<input type=\"button\" value=\" Cancel \" id=\"btnCancelChange\" (click)=\"btnCancelChange_onclick()\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div id=\"dwtcontrolContainer\"></div>\r\n\t\t<div class=\"w-full\" id=\"loader\">\r\n\t\t\t<div class=\"flex items-center justify-center h-full\">\r\n\t\t\t\t<mat-spinner></mat-spinner>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div id=\"btnGroupBtm\">\r\n\t\t\t<div class=\"ct-lt\">\r\n\t\t\t\t{{ 'scanner.page' | translate }}:\r\n\t\t\t\t<input id=\"DW_btnFirstImage\" (click)=\"btnFirstImage_onclick()\" type=\"button\" value=\" |< \" />&nbsp;\r\n\t\t\t\t<input id=\"DW_btnPreImage\" (click)=\"btnPreImage_onclick()\" type=\"button\" value=\" < \" />&nbsp;&nbsp;\r\n\t\t\t\t<input type=\"text\" size=\"2\" id=\"DW_CurrentImage\" readonly=\"readonly\" />\r\n\t\t\t\t/\r\n\t\t\t\t<input type=\"text\" size=\"2\" id=\"DW_TotalImage\" readonly=\"readonly\" />&nbsp;&nbsp;\r\n\t\t\t\t<input id=\"DW_btnNextImage\" (click)=\"btnNextImage_onclick()\" type=\"button\" value=\"> \" />&nbsp;\r\n\t\t\t\t<input id=\"DW_btnLastImage\" (click)=\"btnLastImage_onclick()\" type=\"button\" value=\">| \" />\r\n\t\t\t</div>\r\n\t\t\t<div class=\"ct-rt\">\r\n\t\t\t\t{{ 'scanner.preview' | translate }}:\r\n\t\t\t\t<select size=\"1\" id=\"DW_PreviewMode\" (change)=\"setlPreviewMode()\">\r\n\t\t\t\t\t<option value=\"0\">1X1</option>\r\n\t\t\t\t\t<option value=\"1\">2X2</option>\r\n\t\t\t\t\t<option value=\"2\">3X3</option>\r\n\t\t\t\t\t<option value=\"3\">4X4</option>\r\n\t\t\t\t\t<option value=\"4\">5X5</option></select\r\n\t\t\t\t><br />\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t<div id=\"ScanWrapper\">\r\n\t\t<div id=\"divScanner\" class=\"divinput\">\r\n\t\t\t<div id=\"div_ScanImage\" class=\"divTableStyle\">\r\n\t\t\t\t<ul id=\"ulScaneImageHIDE\">\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label for=\"source\">\r\n\t\t\t\t\t\t\t<p>{{ 'scanner.source' | translate }}:</p>\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<select size=\"1\" id=\"source\" style=\"position: relative\" (change)=\"source_onchange()\">\r\n\t\t\t\t\t\t\t<option value=\"\"></option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li style=\"display: none\" id=\"pNoScanner\">\r\n\t\t\t\t\t\t<a href=\"javascript: void(0)\" class=\"ShowtblLoadImage\" style=\"color: #fe8e14\" id=\"aNoScanner\"\r\n\t\t\t\t\t\t\t>(No TWAIN compatible drivers detected)</a\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li id=\"divProductDetail\">\r\n\t\t\t\t\t\t<ul id=\"divTwainType\">\r\n\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t<label id=\"lblShowUI\" for=\"ShowUI\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" id=\"ShowUI\" />{{ 'scanner.ShowUI' | translate }}&nbsp;</label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<label for=\"ADF\"> <input type=\"checkbox\" id=\"ADF\" />{{ 'scanner.AutoFeeder' | translate }}&nbsp;</label>\r\n\t\t\t\t\t\t\t\t<label for=\"Duplex\"> <input type=\"checkbox\" id=\"Duplex\" />{{ 'scanner.Duplex' | translate }}</label>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t{{ 'scanner.PixelType' | translate }}:\r\n\t\t\t\t\t\t\t\t<label for=\"BW\" style=\"margin-left: 5px\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"BW\" name=\"PixelType\" />{{ 'scanner.B&W' | translate }}</label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<label for=\"Gray\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"Gray\" name=\"PixelType\" />{{ 'scanner.Gray' | translate }}</label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<label for=\"RGB\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"RGB\" name=\"PixelType\" />{{ 'scanner.Color' | translate }}</label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t<span>{{ 'scanner.Resolution' | translate }}:&nbsp;</span\r\n\t\t\t\t\t\t\t\t><select size=\"1\" id=\"Resolution\">\r\n\t\t\t\t\t\t\t\t\t<option value=\"100\">100</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"150\">150</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"200\">200</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"300\" selected>300</option>\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t</li>\r\n\r\n\t\t\t\t\t<div class=\"flex justify-between items-center\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\tid=\"btnScan\"\r\n\t\t\t\t\t\t\tdisabled=\"disabled\"\r\n\t\t\t\t\t\t\t(click)=\"acquireImage()\"\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclass=\"action-btn action-btn_2\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<i class=\"bi bi-upc-upload icon\"></i>\r\n\t\t\t\t\t\t\t<span> {{ 'scanner.scanFile' | translate }}</span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t(click)=\"btnLoadImagesOrPDFs_onclick()\"\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclass=\"action-btn action-btn_1 flex items-center justify-center gap-x-2\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<i class=\"bi bi-upload icon\"></i>\r\n\t\t\t\t\t\t\t<span> {{ 'scanner.loadFile' | translate }}</span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ul>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"flex justify-end mx-3\">\r\n\t\t\t<button\r\n\t\t\t\tclass=\"btn save-button\"\r\n\t\t\t\t[ngClass]=\"{ 'hide-upload-button': hideUploadButton }\"\r\n\t\t\t\t#scannerUploadButton\r\n\t\t\t\tid=\"scannerUploadButton\"\r\n\t\t\t\t[disabled]=\"DWObject?.HowManyImagesInBuffer === 0\"\r\n\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t(click)=\"convertToBlob()\"\r\n\t\t\t>\r\n\t\t\t\t{{ 'scanner.saveFile' | translate }}\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [".ndf-scanner img{vertical-align:middle;border:0}.ndf-scanner p{margin:0;padding:0}.ndf-scanner a:link,.ndf-scanner a:visited{color:#606060;text-decoration:none}.ndf-scanner a:hover{color:#fe8e14}.ndf-scanner input{font:normal 12px verdana;color:#444}.ndf-scanner input.invalid{background-color:#ff9;border:2px red inset}.ndf-scanner a img{border:none}.ndf-scanner a img:hover{border:none}.ndf-scanner ul{list-style:none;padding-left:0;margin:0}.ndf-scanner .container{width:980px;margin:0 auto}.ndf-scanner .container:after,.ndf-scanner .clearfix:after{content:\"\";display:table;clear:both}.ndf-scanner .tc{text-align:center}.ndf-scanner .btnOrg{padding:0 15px;height:30px;line-height:28px;font-size:14px;color:#fff;background:#50a8e1;border:none;outline:none;cursor:pointer;border-radius:5px;-webkit-border-radius:5px;-moz-border-right-colors:5px;transition:all .2s ease-in-out}.ndf-scanner .btnOrg:hover{background:#61c2ec}.ndf-scanner .d-btn{display:inline-block;padding:0 25px;height:36px;line-height:30px;color:#fe8e14;font-size:14px;text-align:center;cursor:pointer;border:solid 2px #fe8e14;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-o-border-radius:5px;transition:all .2s ease-in-out}.ndf-scanner .d-btn:link,.ndf-scanner .d-btn:visited{color:#fe8e14}.ndf-scanner .d-btn:hover{color:#ffae38;border:solid 2px #ffae38}.ndf-scanner .d-btn.lgBtn{height:46px;line-height:40px}.ndf-scanner .d-btn.mdBtn{height:42px;line-height:36px}.ndf-scanner .d-btn.smBtn{height:38px;line-height:32px}.ndf-scanner .d-btn.bgOrange{background:#fe8e14;color:#fff}.ndf-scanner .d-btn.bgOrange:hover{background:#ffae38}.ndf-scanner .d-btn.bgBlue{border-color:#50a8e1;background:#50a8e1;color:#fff}.ndf-scanner .d-btn.bgBlue:hover{border-color:#61c2ec;background:#61c2ec}.ndf-scanner #dwtScanDemo{width:980px;margin:0 auto}.ndf-scanner #dwtScanDemo .ct-top{padding:0 0 15px}.ndf-scanner #dwtScanDemo .ct-top .title{font-size:18px;line-height:27px;color:#444}.ndf-scanner #dwtScanDemo .ct-top .desc{margin:0 15px 0 30px;font-size:14px;line-height:24px;color:#aaa}.ndf-scanner #DWTcontainer{display:flex;justify-content:space-between;flex-direction:row}.ndf-scanner #DWTcontainerTop{position:relative;float:left;flex:1;margin:0 10px;height:auto;border-radius:4px;border:3px solid #ccc;display:flex;justify-content:space-between;flex-direction:row;overflow:hidden}.ndf-scanner .ds-dwt-container-box>div{border:none!important}.ndf-scanner #divEdit{float:left;margin:0;padding:0;width:60px;background:#fff;border-right:1px solid #ccc}.ndf-scanner #divEdit .operateGrp li{margin:0;width:60px;height:57px;line-height:52px;border-bottom:solid 1px #ccc;text-align:center}.ndf-scanner #divEdit .operateGrp li:nth-last-child(2){height:58px}.ndf-scanner #divEdit .operateGrp li:last-child{height:56px}.ndf-scanner #divEdit .operateGrp li>img{cursor:pointer}.ndf-scanner #Crop{padding:10px 5px 5px;text-align:center;border-collapse:collapse;border:3px solid #ce5e04;position:absolute;height:80px;z-index:1;background-color:#f0f0f0;width:250px}.ndf-scanner #ImgSizeEditor{padding:10px 15px;position:absolute;z-index:1;top:513px;left:-1px;height:auto;width:320px;font-size:14px;color:#606060;text-align:left;background-color:#f5f5f5;border-collapse:collapse;border:1px solid #ccc;box-shadow:4px 4px 18px #ccc;-webkit-box-shadow:4px 4px 18px #ccc;-moz-box-shadow:4px 4px 18px #ccc}.ndf-scanner #ImgSizeEditor li{margin-bottom:5px}.ndf-scanner #ImgSizeEditor input{background:#fff;border:solid 1px #ccc}.ndf-scanner #ImgSizeEditor input[type=text]{padding-left:3px}.ndf-scanner #ImgSizeEditor input[type=button]{padding:5px;margin:6px 5px 0}.ndf-scanner #dwtcontrolContainer{float:left;width:100%;height:calc(100% - 58px)}.ndf-scanner #dwtcontrolContainer .dynamsoft-dwt-container-box>div{border:none!important}.ndf-scanner #dwt-NonInstallContainerID{float:left;width:560px;height:590px}.ndf-scanner #DWTcontainerTop #btnGroupBtm{position:absolute;bottom:0;padding:15px;width:calc(100% - 60px);height:58px;background:#f5f5f5;border-top:1px solid #ccc;font-size:14px;color:#606060;vertical-align:bottom;display:flex;justify-content:space-between;flex-direction:row;align-items:center;box-sizing:border-box;left:60px}.ndf-scanner #btnGroupBtm .ct-lt{float:left}.ndf-scanner #btnGroupBtm .ct-lt input{padding:0;margin-right:6px;width:25px;height:20px;font-size:10px;background:var(--input-field-bg, #f5f5f5);border:solid 1px var(--border-color, #bbbcc0);color:var(--input-field-color, #606060);outline:none;cursor:pointer}.ndf-scanner #btnGroupBtm .ct-lt input[type=text]{height:20px;font-size:12px;border:none;cursor:default}.ndf-scanner #btnGroupBtm .ct-lt #DW_btnFirstImage{margin-left:5px}.ndf-scanner #btnGroupBtm .ct-lt #DW_CurrentImage{margin:0 0 0 -13px;text-align:right}.ndf-scanner #btnGroupBtm .ct-lt #DW_TotalImage{margin:0 -7px 0 0;text-align:left}.ndf-scanner #btnGroupBtm .ct-rt{float:right}.ndf-scanner #DW_PreviewMode{padding:0 5px;margin-left:5px;height:26px;border:solid 1px #d8d8d8;color:#444;outline:none;border-radius:5px;cursor:pointer}.ndf-scanner #ScanWrapper{border-radius:4px;width:315px;height:570px;box-sizing:border-box}.ndf-scanner div.divinput{font-size:14px;color:#606060;line-height:24px;margin-bottom:20px}.ndf-scanner .divType,.ndf-scanner #ScanWrapper .toggle{padding-left:20px;height:38px;line-height:36px;font-size:14px;color:#444;background:#eee;border-bottom:1px solid #ccc;cursor:pointer}.ndf-scanner #ScanWrapper .toggle{cursor:default}.ndf-scanner .mark_arrow{display:block;float:right;margin:15px 20px 0 0;width:12px;height:8px}.ndf-scanner .divTableStyle{border:3px solid #ccc;border-radius:5px;padding:10px}.ndf-scanner .divTableStyle input[type=radio],.ndf-scanner .divTableStyle input[type=checkbox]{margin:0 5px!important;height:13px;display:inline-block}.ndf-scanner #ScanWrapper select,.ndf-scanner #divUpload input[type=text]{margin-top:3px;margin-bottom:6px;height:26px;border:solid 1px #ccc;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;outline:none}.ndf-scanner #ScanWrapper input[type=checkbox],.ndf-scanner #ScanWrapper input[type=radio]{margin:0 3px 0 0}.ndf-scanner #divScanner{border-bottom:none}.ndf-scanner #PCollapse{list-style:none inside none;margin-left:0;padding-left:0}.ndf-scanner select#source{margin-top:3px;padding-left:3px;width:100%;font-size:12px;border:solid 1px #ccc;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;outline:none}.ndf-scanner select#Resolution{margin-left:3px;width:192px;height:26px}.ndf-scanner #divProductDetail li{margin-top:8px}.ndf-scanner #divProductDetail li:first-child{margin-top:3px}.ndf-scanner #divProductDetail li label{display:inline-block;margin:0 4px;font-size:12px}.ndf-scanner #divProductDetail li label:last-child{margin:0}.ndf-scanner #divProductDetail li label input{width:15px;height:15px;vertical-align:middle}.ndf-scanner #div_LoadLocalImage input[type=button]{margin:15px 0;width:90px;height:30px}.ndf-scanner #div_ScanImage{position:relative}.ndf-scanner #tblLoadImage{position:absolute;top:102px;z-index:1;padding:30px 22px;width:275px;height:128px;font-size:14px;line-height:30px;text-align:left;border:1px solid #fe8e14;background-color:#f5f5f5}.ndf-scanner #tblLoadImage>a{position:absolute;top:15px;right:15px;line-height:normal;text-decoration:none}.ndf-scanner #tblLoadImage a{color:#50a8e1}.ndf-scanner #tblLoadImage a:hover{color:#61c2ec}.ndf-scanner #divUpload input[type=text]{width:100%;padding-left:5px}.ndf-scanner #divUpload li label{display:inline-block;margin:0 8px 0 0;font-size:12px}.ndf-scanner #divUpload li img{margin-right:2px}.ndf-scanner #divUpload li label:last-child{margin-right:0}.ndf-scanner #divUpload li input{width:15px;height:15px;vertical-align:middle}.ndf-scanner #divUpload li:nth-child(3){margin:5px 0 8px}.ndf-scanner #divUpload li{padding:0 20px}.ndf-scanner #divUpload li:nth-child(2){padding-top:12px}.ndf-scanner #divUpload input[type=button]{margin:14px 0 20px}.ndf-scanner #divUpload #btnSave,.ndf-scanner #divUpload #btnUpload{padding:0;width:115px;height:30px;margin-right:15px;cursor:pointer}.ndf-scanner #divUpload #btnUpload{width:138px;margin-right:0}.ndf-scanner #DWTcontainerBtm{position:relative;float:left;width:980px}.ndf-scanner #DWTemessageContainer{float:left}.ndf-scanner #DWTemessageContainer input[type=text]{border:solid 1px #ccc;padding-left:3px}.ndf-scanner #DWTemessageContainer input[type=button]{cursor:pointer;margin:0 3px;outline:none}.ndf-scanner #DWTdivMsg{padding:5px 0 0;font-size:14px;color:#444}.ndf-scanner #DWTemessage{padding:6px 0 0 8px;margin-top:3px;width:632px;height:160px;border:solid 1px #ccc;overflow-y:scroll;background:#fff}.ndf-scanner #divNoteMessage{float:right;padding:10px 15px;margin-top:34px;width:315px;height:160px;font-size:12px;line-height:20px;border:1px solid #ccc;background:#e7f2fd;color:#606060}.ndf-scanner #divNoteMessage p{margin:0;color:#444}.ndf-scanner .ds-dialog-wrap,.ndf-scanner .ds-dialog-wrap div{box-sizing:content-box!important}.ndf-scanner .ds-dialog-wrap:before,.ndf-scanner .ds-dialog-wrap div:before,.ndf-scanner .ds-dialog-wrap:after,.ndf-scanner .ds-dialog-wrap div:after{box-sizing:content-box!important}.ndf-scanner .ks-overlay{position:absolute;left:-9999px;top:-9999px}.ndf-scanner .ks-ext-close{padding:0 20px;position:absolute;right:-5px;top:5px}.ndf-scanner .ks-ext-close,.ndf-scanner .ks-ext-close:link{color:#22a;text-decoration:none;cursor:pointer}.ndf-scanner .ks-ext-mask{background:#999;filter:alpha(opacity=70);-moz-opacity:.7;opacity:.7}.ndf-scanner .D-dailog .ks-ext-close .ks-ext-close-x{height:8px}.ndf-scanner .D-dailog .ks-ext-close,.ndf-scanner .D-dailog .ks-ext-close:hover{background:none;border:none}.ndf-scanner .D-dailog{position:absolute;left:-9999px;top:-99999px;margin:100px auto;padding:0;width:392px;height:262px;background-color:#f1f2f2}.ndf-scanner .D-dailog .D-dailog-body{width:350px;height:200px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-Mac{width:350px;height:235px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-NotAllowed{color:#444;line-height:1.8;width:350px;height:185px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-Scan{width:380px;height:240px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-Scan-sample{width:380px;height:200px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog a{text-decoration:none}.ndf-scanner .link{text-decoration:underline}.ndf-scanner .D-dailog ul{margin:10px 0 10px 20px;list-style-type:disc}.ndf-scanner .red{color:red;margin-left:5px}.ndf-scanner #message{position:fixed;top:0px;left:0px;width:100%;z-index:105;text-align:center;font-weight:bold;font-size:100%;padding:10px 0;color:#239210;background-color:#e0f0d6;border:1px solid #54d33f;box-shadow:0 0 10px #3a3a3a}.ndf-scanner #MessageBody a{color:#6a9962;font-size:14px}.ndf-scanner #message span{text-align:center;width:95%;float:left}.ndf-scanner #MessageBoy a:hover{text-decoration:underline}.ndf-scanner .close-notify{white-space:nowrap;float:right;margin-right:10px;color:#fff;text-decoration:none;border:2px #fff solid;padding-left:3px;padding-right:3px}.ndf-scanner .close-notify a{color:#fff}.ndf-scanner .DWTPage{margin:0 auto}.hide-upload-button{opacity:0!important}app-scanner input[type=checkbox]{appearance:none;-webkit-appearance:none;width:20px!important;height:20px!important;border:2px solid var(--main-color)!important;background-color:var(--wrapper-bg)!important;cursor:pointer;border-radius:4px;position:relative;transition:background-color .3s}app-scanner input[type=checkbox]:checked{background-color:var(--main-color)!important;border-color:var(--main-color)!important}app-scanner input[type=checkbox]:checked:after{content:\"\";position:absolute;top:2px;left:6px;width:5px;border:solid var(--checkbox-inner-color, #fff);height:10px;border-width:0 2px 2px 0;transform:rotate(45deg)}app-scanner input[type=radio]{appearance:none;-webkit-appearance:none;width:20px!important;height:20px!important;border:2px solid var(--radio-border, var(--main-color))!important;background-color:var(--radio-bg, var(--wrapper-bg))!important;border-radius:50%;cursor:pointer;position:relative;transition:background-color .3s ease}app-scanner input[type=radio]:checked{background-color:var(--main-color)!important;border-color:var(--main-color)!important}app-scanner input[type=radio]:checked:after{content:\"\";position:absolute;top:4px;left:4px;width:8px;height:8px;background-color:var(--radio-inner-color, #fff)!important;border-radius:50%}app-scanner .mat-icon{color:var(--scanner-icon-color, #161616)}\n"], components: [{ type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i1.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
944
+ NdfScannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: NdfScannerComponent, selector: "ndf-scanner", inputs: { useStoredFile: "useStoredFile", hideUploadButton: "hideUploadButton", loading: "loading" }, outputs: { file: "file" }, host: { classAttribute: "ndf-scanner" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"DWTcontainer\" class=\"h-full\">\r\n\t<div id=\"DWTcontainerTop\">\r\n\t\t<div id=\"divEdit\">\r\n\t\t\t<ul class=\"operateGrp\">\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.showImageEditor' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnShowImageEditor_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Editor'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.rotateLeft' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRotateLeft_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Rotate-Left'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.rotateRight' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRotateRight_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Rotate-Right'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.rotate180' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRotate180_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Rotate-180'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.mirror' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnMirror_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:flip-horizontal'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.flip' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnFlip_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:flip-vertical'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.removeSelected' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRemoveCurrentImage_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:RemoveImages'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.removeAll' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRemoveAllImages_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:RemoveAllImages'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.resize' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnChangeImageSize_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:changeSize'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.crop' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnCrop_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:crop'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t</ul>\r\n\t\t\t<div id=\"ImgSizeEditor\" style=\"visibility: hidden\">\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label for=\"img_height\"\r\n\t\t\t\t\t\t\t>{{ 'scanner.newHeight' | translate }} :\r\n\t\t\t\t\t\t\t<input type=\"text\" id=\"img_height\" style=\"width: 50%\" size=\"10\" />\r\n\t\t\t\t\t\t\t{{ 'scanner.pixel' | translate }}</label\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label for=\"img_width\"\r\n\t\t\t\t\t\t\t>{{ 'scanner.newWidth' | translate }} :&nbsp;\r\n\t\t\t\t\t\t\t<input type=\"text\" id=\"img_width\" style=\"width: 50%\" size=\"10\" />\r\n\t\t\t\t\t\t\t{{ 'scanner.pixel' | translate }}</label\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t{{ 'scanner.InterpolationMethod' | translate }}:\r\n\t\t\t\t\t\t<select size=\"1\" id=\"InterpolationMethod\">\r\n\t\t\t\t\t\t\t<option value=\"\"></option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li style=\"text-align: center\">\r\n\t\t\t\t\t\t<input type=\"button\" value=\" OK \" id=\"btnChangeImageSizeOK\" (click)=\"btnChangeImageSizeOK_onclick()\" />\r\n\t\t\t\t\t\t<input type=\"button\" value=\" Cancel \" id=\"btnCancelChange\" (click)=\"btnCancelChange_onclick()\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div id=\"dwtcontrolContainer\"></div>\r\n\t\t<div class=\"w-full\" id=\"loader\">\r\n\t\t\t<div class=\"flex items-center justify-center h-full\">\r\n\t\t\t\t<mat-spinner></mat-spinner>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div id=\"btnGroupBtm\">\r\n\t\t\t<div class=\"ct-lt\">\r\n\t\t\t\t{{ 'scanner.page' | translate }}:\r\n\t\t\t\t<input id=\"DW_btnFirstImage\" (click)=\"btnFirstImage_onclick()\" type=\"button\" value=\" |< \" />&nbsp;\r\n\t\t\t\t<input id=\"DW_btnPreImage\" (click)=\"btnPreImage_onclick()\" type=\"button\" value=\" < \" />&nbsp;&nbsp;\r\n\t\t\t\t<input type=\"text\" size=\"2\" id=\"DW_CurrentImage\" readonly=\"readonly\" />\r\n\t\t\t\t/\r\n\t\t\t\t<input type=\"text\" size=\"2\" id=\"DW_TotalImage\" readonly=\"readonly\" />&nbsp;&nbsp;\r\n\t\t\t\t<input id=\"DW_btnNextImage\" (click)=\"btnNextImage_onclick()\" type=\"button\" value=\"> \" />&nbsp;\r\n\t\t\t\t<input id=\"DW_btnLastImage\" (click)=\"btnLastImage_onclick()\" type=\"button\" value=\">| \" />\r\n\t\t\t</div>\r\n\t\t\t<div class=\"ct-rt\">\r\n\t\t\t\t{{ 'scanner.preview' | translate }}:\r\n\t\t\t\t<select size=\"1\" id=\"DW_PreviewMode\" (change)=\"setlPreviewMode()\">\r\n\t\t\t\t\t<option value=\"0\">1X1</option>\r\n\t\t\t\t\t<option value=\"1\">2X2</option>\r\n\t\t\t\t\t<option value=\"2\">3X3</option>\r\n\t\t\t\t\t<option value=\"3\">4X4</option>\r\n\t\t\t\t\t<option value=\"4\">5X5</option></select\r\n\t\t\t\t><br />\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t<div id=\"ScanWrapper\">\r\n\t\t<div id=\"divScanner\" class=\"divinput\">\r\n\t\t\t<div id=\"div_ScanImage\" class=\"divTableStyle\">\r\n\t\t\t\t<ul id=\"ulScaneImageHIDE\">\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label for=\"source\">\r\n\t\t\t\t\t\t\t<p>{{ 'scanner.source' | translate }}:</p>\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<select size=\"1\" id=\"source\" style=\"position: relative\" (change)=\"source_onchange()\">\r\n\t\t\t\t\t\t\t<option value=\"\"></option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li style=\"display: none\" id=\"pNoScanner\">\r\n\t\t\t\t\t\t<a href=\"javascript: void(0)\" class=\"ShowtblLoadImage\" style=\"color: #fe8e14\" id=\"aNoScanner\"\r\n\t\t\t\t\t\t\t>(No TWAIN compatible drivers detected)</a\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li id=\"divProductDetail\">\r\n\t\t\t\t\t\t<ul id=\"divTwainType\">\r\n\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t<label id=\"lblShowUI\" for=\"ShowUI\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" id=\"ShowUI\" />{{ 'scanner.ShowUI' | translate }}&nbsp;</label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<label for=\"ADF\"> <input type=\"checkbox\" id=\"ADF\" />{{ 'scanner.AutoFeeder' | translate }}&nbsp;</label>\r\n\t\t\t\t\t\t\t\t<label for=\"Duplex\"> <input type=\"checkbox\" id=\"Duplex\" />{{ 'scanner.Duplex' | translate }}</label>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t{{ 'scanner.PixelType' | translate }}:\r\n\t\t\t\t\t\t\t\t<label for=\"BW\" style=\"margin-left: 5px\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"BW\" name=\"PixelType\" />{{ 'scanner.B&W' | translate }}</label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<label for=\"Gray\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"Gray\" name=\"PixelType\" />{{ 'scanner.Gray' | translate }}</label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<label for=\"RGB\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"RGB\" name=\"PixelType\" />{{ 'scanner.Color' | translate }}</label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t<span>{{ 'scanner.Resolution' | translate }}:&nbsp;</span\r\n\t\t\t\t\t\t\t\t><select size=\"1\" id=\"Resolution\">\r\n\t\t\t\t\t\t\t\t\t<option value=\"100\">100</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"150\">150</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"200\">200</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"300\" selected>300</option>\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t</li>\r\n\r\n\t\t\t\t\t<div class=\"flex justify-between items-center\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\tid=\"btnScan\"\r\n\t\t\t\t\t\t\tdisabled=\"disabled\"\r\n\t\t\t\t\t\t\t(click)=\"acquireImage()\"\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclass=\"action-btn action-btn_2\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<i class=\"bi bi-upc-upload icon\"></i>\r\n\t\t\t\t\t\t\t<span> {{ 'scanner.scanFile' | translate }}</span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t(click)=\"btnLoadImagesOrPDFs_onclick()\"\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclass=\"action-btn action-btn_1 flex items-center justify-center gap-x-2\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<i class=\"bi bi-upload icon\"></i>\r\n\t\t\t\t\t\t\t<span> {{ 'scanner.loadFile' | translate }}</span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ul>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"flex justify-end mx-3\">\r\n\t\t\t<button\r\n\t\t\t\tclass=\"btn save-button\"\r\n\t\t\t\t[ngClass]=\"{ 'hide-upload-button': hideUploadButton }\"\r\n\t\t\t\t#scannerUploadButton\r\n\t\t\t\tid=\"scannerUploadButton\"\r\n\t\t\t\t[disabled]=\"DWObject?.HowManyImagesInBuffer === 0\"\r\n\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t(click)=\"convertToBlob()\"\r\n\t\t\t>\r\n\t\t\t\t{{ 'scanner.saveFile' | translate }}\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [".ndf-scanner img{vertical-align:middle;border:0}.ndf-scanner p{margin:0;padding:0}.ndf-scanner a:link,.ndf-scanner a:visited{color:#606060;text-decoration:none}.ndf-scanner a:hover{color:#fe8e14}.ndf-scanner input{font:normal 12px verdana;color:#444}.ndf-scanner input.invalid{background-color:#ff9;border:2px red inset}.ndf-scanner a img{border:none}.ndf-scanner a img:hover{border:none}.ndf-scanner ul{list-style:none;padding-left:0;margin:0}.ndf-scanner .container{width:980px;margin:0 auto}.ndf-scanner .container:after,.ndf-scanner .clearfix:after{content:\"\";display:table;clear:both}.ndf-scanner .tc{text-align:center}.ndf-scanner .btnOrg{padding:0 15px;height:30px;line-height:28px;font-size:14px;color:#fff;background:#50a8e1;border:none;outline:none;cursor:pointer;border-radius:5px;-webkit-border-radius:5px;-moz-border-right-colors:5px;transition:all .2s ease-in-out}.ndf-scanner .btnOrg:hover{background:#61c2ec}.ndf-scanner .d-btn{display:inline-block;padding:0 25px;height:36px;line-height:30px;color:#fe8e14;font-size:14px;text-align:center;cursor:pointer;border:solid 2px #fe8e14;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-o-border-radius:5px;transition:all .2s ease-in-out}.ndf-scanner .d-btn:link,.ndf-scanner .d-btn:visited{color:#fe8e14}.ndf-scanner .d-btn:hover{color:#ffae38;border:solid 2px #ffae38}.ndf-scanner .d-btn.lgBtn{height:46px;line-height:40px}.ndf-scanner .d-btn.mdBtn{height:42px;line-height:36px}.ndf-scanner .d-btn.smBtn{height:38px;line-height:32px}.ndf-scanner .d-btn.bgOrange{background:#fe8e14;color:#fff}.ndf-scanner .d-btn.bgOrange:hover{background:#ffae38}.ndf-scanner .d-btn.bgBlue{border-color:#50a8e1;background:#50a8e1;color:#fff}.ndf-scanner .d-btn.bgBlue:hover{border-color:#61c2ec;background:#61c2ec}.ndf-scanner #dwtScanDemo{width:980px;margin:0 auto}.ndf-scanner #dwtScanDemo .ct-top{padding:0 0 15px}.ndf-scanner #dwtScanDemo .ct-top .title{font-size:18px;line-height:27px;color:#444}.ndf-scanner #dwtScanDemo .ct-top .desc{margin:0 15px 0 30px;font-size:14px;line-height:24px;color:#aaa}.ndf-scanner #DWTcontainer{display:flex;justify-content:space-between;flex-direction:row}.ndf-scanner #DWTcontainerTop{position:relative;float:left;flex:1;margin:0 10px;height:auto;border-radius:4px;border:3px solid #ccc;display:flex;justify-content:space-between;flex-direction:row;overflow:hidden}.ndf-scanner .ds-dwt-container-box>div{border:none!important}.ndf-scanner #divEdit{float:left;margin:0;padding:0;width:60px;background:#fff;border-right:1px solid #ccc}.ndf-scanner #divEdit .operateGrp li{margin:0;width:60px;height:57px;line-height:52px;border-bottom:solid 1px #ccc;text-align:center}.ndf-scanner #divEdit .operateGrp li:nth-last-child(2){height:58px}.ndf-scanner #divEdit .operateGrp li:last-child{height:56px}.ndf-scanner #divEdit .operateGrp li>img{cursor:pointer}.ndf-scanner #Crop{padding:10px 5px 5px;text-align:center;border-collapse:collapse;border:3px solid #ce5e04;position:absolute;height:80px;z-index:1;background-color:#f0f0f0;width:250px}.ndf-scanner #ImgSizeEditor{padding:10px 15px;position:absolute;z-index:1;top:513px;left:-1px;height:auto;width:320px;font-size:14px;color:#606060;text-align:left;background-color:#f5f5f5;border-collapse:collapse;border:1px solid #ccc;box-shadow:4px 4px 18px #ccc;-webkit-box-shadow:4px 4px 18px #ccc;-moz-box-shadow:4px 4px 18px #ccc}.ndf-scanner #ImgSizeEditor li{margin-bottom:5px}.ndf-scanner #ImgSizeEditor input{background:#fff;border:solid 1px #ccc}.ndf-scanner #ImgSizeEditor input[type=text]{padding-left:3px}.ndf-scanner #ImgSizeEditor input[type=button]{padding:5px;margin:6px 5px 0}.ndf-scanner #dwtcontrolContainer{float:left;width:100%;height:calc(100% - 58px)}.ndf-scanner #dwtcontrolContainer .dynamsoft-dwt-container-box>div{border:none!important}.ndf-scanner #dwt-NonInstallContainerID{float:left;width:560px;height:590px}.ndf-scanner #DWTcontainerTop #btnGroupBtm{position:absolute;bottom:0;padding:15px;width:calc(100% - 60px);height:58px;background:#f5f5f5;border-top:1px solid #ccc;font-size:14px;color:#606060;vertical-align:bottom;display:flex;justify-content:space-between;flex-direction:row;align-items:center;box-sizing:border-box;left:60px}.ndf-scanner #btnGroupBtm .ct-lt{float:left}.ndf-scanner #btnGroupBtm .ct-lt input{padding:0;margin-right:6px;width:25px;height:20px;font-size:10px;background:var(--input-field-bg, #f5f5f5);border:solid 1px var(--border-color, #bbbcc0);color:var(--input-field-color, #606060);outline:none;cursor:pointer}.ndf-scanner #btnGroupBtm .ct-lt input[type=text]{height:20px;font-size:12px;border:none;cursor:default}.ndf-scanner #btnGroupBtm .ct-lt #DW_btnFirstImage{margin-left:5px}.ndf-scanner #btnGroupBtm .ct-lt #DW_CurrentImage{margin:0 0 0 -13px;text-align:right}.ndf-scanner #btnGroupBtm .ct-lt #DW_TotalImage{margin:0 -7px 0 0;text-align:left}.ndf-scanner #btnGroupBtm .ct-rt{float:right}.ndf-scanner #DW_PreviewMode{padding:0 5px;margin-left:5px;height:26px;border:solid 1px #d8d8d8;color:#444;outline:none;border-radius:5px;cursor:pointer}.ndf-scanner #ScanWrapper{border-radius:4px;width:315px;height:570px;box-sizing:border-box}.ndf-scanner div.divinput{font-size:14px;color:#606060;line-height:24px;margin-bottom:20px}.ndf-scanner .divType,.ndf-scanner #ScanWrapper .toggle{padding-left:20px;height:38px;line-height:36px;font-size:14px;color:#444;background:#eee;border-bottom:1px solid #ccc;cursor:pointer}.ndf-scanner #ScanWrapper .toggle{cursor:default}.ndf-scanner .mark_arrow{display:block;float:right;margin:15px 20px 0 0;width:12px;height:8px}.ndf-scanner .divTableStyle{border:3px solid #ccc;border-radius:5px;padding:10px}.ndf-scanner .divTableStyle input[type=radio],.ndf-scanner .divTableStyle input[type=checkbox]{margin:0 5px!important;height:13px;display:inline-block}.ndf-scanner #ScanWrapper select,.ndf-scanner #divUpload input[type=text]{margin-top:3px;margin-bottom:6px;height:26px;border:solid 1px #ccc;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;outline:none}.ndf-scanner #ScanWrapper input[type=checkbox],.ndf-scanner #ScanWrapper input[type=radio]{margin:0 3px 0 0}.ndf-scanner #divScanner{border-bottom:none}.ndf-scanner #PCollapse{list-style:none inside none;margin-left:0;padding-left:0}.ndf-scanner select#source{margin-top:3px;padding-left:3px;width:100%;font-size:12px;border:solid 1px #ccc;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;outline:none}.ndf-scanner select#Resolution{margin-left:3px;width:192px;height:26px}.ndf-scanner #divProductDetail li{margin-top:8px}.ndf-scanner #divProductDetail li:first-child{margin-top:3px}.ndf-scanner #divProductDetail li label{display:inline-block;margin:0 4px;font-size:12px}.ndf-scanner #divProductDetail li label:last-child{margin:0}.ndf-scanner #divProductDetail li label input{width:15px;height:15px;vertical-align:middle}.ndf-scanner #div_LoadLocalImage input[type=button]{margin:15px 0;width:90px;height:30px}.ndf-scanner #div_ScanImage{position:relative}.ndf-scanner #tblLoadImage{position:absolute;top:102px;z-index:1;padding:30px 22px;width:275px;height:128px;font-size:14px;line-height:30px;text-align:left;border:1px solid #fe8e14;background-color:#f5f5f5}.ndf-scanner #tblLoadImage>a{position:absolute;top:15px;right:15px;line-height:normal;text-decoration:none}.ndf-scanner #tblLoadImage a{color:#50a8e1}.ndf-scanner #tblLoadImage a:hover{color:#61c2ec}.ndf-scanner #divUpload input[type=text]{width:100%;padding-left:5px}.ndf-scanner #divUpload li label{display:inline-block;margin:0 8px 0 0;font-size:12px}.ndf-scanner #divUpload li img{margin-right:2px}.ndf-scanner #divUpload li label:last-child{margin-right:0}.ndf-scanner #divUpload li input{width:15px;height:15px;vertical-align:middle}.ndf-scanner #divUpload li:nth-child(3){margin:5px 0 8px}.ndf-scanner #divUpload li{padding:0 20px}.ndf-scanner #divUpload li:nth-child(2){padding-top:12px}.ndf-scanner #divUpload input[type=button]{margin:14px 0 20px}.ndf-scanner #divUpload #btnSave,.ndf-scanner #divUpload #btnUpload{padding:0;width:115px;height:30px;margin-right:15px;cursor:pointer}.ndf-scanner #divUpload #btnUpload{width:138px;margin-right:0}.ndf-scanner #DWTcontainerBtm{position:relative;float:left;width:980px}.ndf-scanner #DWTemessageContainer{float:left}.ndf-scanner #DWTemessageContainer input[type=text]{border:solid 1px #ccc;padding-left:3px}.ndf-scanner #DWTemessageContainer input[type=button]{cursor:pointer;margin:0 3px;outline:none}.ndf-scanner #DWTdivMsg{padding:5px 0 0;font-size:14px;color:#444}.ndf-scanner #DWTemessage{padding:6px 0 0 8px;margin-top:3px;width:632px;height:160px;border:solid 1px #ccc;overflow-y:scroll;background:#fff}.ndf-scanner #divNoteMessage{float:right;padding:10px 15px;margin-top:34px;width:315px;height:160px;font-size:12px;line-height:20px;border:1px solid #ccc;background:#e7f2fd;color:#606060}.ndf-scanner #divNoteMessage p{margin:0;color:#444}.ndf-scanner .ds-dialog-wrap,.ndf-scanner .ds-dialog-wrap div{box-sizing:content-box!important}.ndf-scanner .ds-dialog-wrap:before,.ndf-scanner .ds-dialog-wrap div:before,.ndf-scanner .ds-dialog-wrap:after,.ndf-scanner .ds-dialog-wrap div:after{box-sizing:content-box!important}.ndf-scanner .ks-overlay{position:absolute;left:-9999px;top:-9999px}.ndf-scanner .ks-ext-close{padding:0 20px;position:absolute;right:-5px;top:5px}.ndf-scanner .ks-ext-close,.ndf-scanner .ks-ext-close:link{color:#22a;text-decoration:none;cursor:pointer}.ndf-scanner .ks-ext-mask{background:#999;filter:alpha(opacity=70);-moz-opacity:.7;opacity:.7}.ndf-scanner .D-dailog .ks-ext-close .ks-ext-close-x{height:8px}.ndf-scanner .D-dailog .ks-ext-close,.ndf-scanner .D-dailog .ks-ext-close:hover{background:none;border:none}.ndf-scanner .D-dailog{position:absolute;left:-9999px;top:-99999px;margin:100px auto;padding:0;width:392px;height:262px;background-color:#f1f2f2}.ndf-scanner .D-dailog .D-dailog-body{width:350px;height:200px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-Mac{width:350px;height:235px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-NotAllowed{color:#444;line-height:1.8;width:350px;height:185px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-Scan{width:380px;height:240px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-Scan-sample{width:380px;height:200px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog a{text-decoration:none}.ndf-scanner .link{text-decoration:underline}.ndf-scanner .D-dailog ul{margin:10px 0 10px 20px;list-style-type:disc}.ndf-scanner .red{color:red;margin-left:5px}.ndf-scanner #message{position:fixed;top:0px;left:0px;width:100%;z-index:105;text-align:center;font-weight:bold;font-size:100%;padding:10px 0;color:#239210;background-color:#e0f0d6;border:1px solid #54d33f;box-shadow:0 0 10px #3a3a3a}.ndf-scanner #MessageBody a{color:#6a9962;font-size:14px}.ndf-scanner #message span{text-align:center;width:95%;float:left}.ndf-scanner #MessageBoy a:hover{text-decoration:underline}.ndf-scanner .close-notify{white-space:nowrap;float:right;margin-right:10px;color:#fff;text-decoration:none;border:2px #fff solid;padding-left:3px;padding-right:3px}.ndf-scanner .close-notify a{color:#fff}.ndf-scanner .DWTPage{margin:0 auto}.hide-upload-button{opacity:0!important}app-scanner input[type=checkbox]{appearance:none;-webkit-appearance:none;width:20px!important;height:20px!important;border:2px solid var(--main-color)!important;background-color:var(--wrapper-bg)!important;cursor:pointer;border-radius:4px;position:relative;transition:background-color .3s}app-scanner input[type=checkbox]:checked{background-color:var(--main-color)!important;border-color:var(--main-color)!important}app-scanner input[type=checkbox]:checked:after{content:\"\";position:absolute;top:2px;left:6px;width:5px;border:solid var(--checkbox-inner-color, #fff);height:10px;border-width:0 2px 2px 0;transform:rotate(45deg)}app-scanner input[type=radio]{appearance:none;-webkit-appearance:none;width:20px!important;height:20px!important;border:2px solid var(--radio-border, var(--main-color))!important;background-color:var(--radio-bg, var(--wrapper-bg))!important;border-radius:50%;cursor:pointer;position:relative;transition:background-color .3s ease}app-scanner input[type=radio]:checked{background-color:var(--main-color)!important;border-color:var(--main-color)!important}app-scanner input[type=radio]:checked:after{content:\"\";position:absolute;top:4px;left:4px;width:8px;height:8px;background-color:var(--radio-inner-color, #fff)!important;border-radius:50%}app-scanner .mat-icon{color:var(--scanner-icon-color, #161616)}\n"], components: [{ type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltipPosition", "matTooltipDisabled", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i1.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
945
945
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfScannerComponent, decorators: [{
946
946
  type: Component,
947
947
  args: [{
@@ -963,4 +963,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
963
963
  }], file: [{
964
964
  type: Output
965
965
  }] } });
966
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmRmLXNjYW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvbmRmLXNjYW5uZXIvbmRmLXNjYW5uZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvbmRmLXNjYW5uZXIvbmRmLXNjYW5uZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQVksTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLFNBQVMsTUFBTSxLQUFLLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxhQUFhLEVBQXNCLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFTNUMsTUFBTSxPQUFPLG1CQUFtQjtJQXlCL0IsWUFDUSxTQUEyQixFQUMzQixnQkFBa0MsRUFDeEIsZUFBbUMsRUFDN0MsUUFBa0IsRUFDTSxRQUFnQjtRQUp4QyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3hCLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUM3QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ00sYUFBUSxHQUFSLFFBQVEsQ0FB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QUN2QixXQUFXLEVBQUUsOEJBQThCO29CQUMzQyxTQUFTLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztvQkFDM0MsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtvQkFDOUIsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3JDOzswQkErQkUsTUFBTTsyQkFBQyxhQUFhOzRDQTNCYixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR04sSUFBSTtzQkFESCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRBZnRlclZpZXdJbml0LFxyXG5cdENvbXBvbmVudCxcclxuXHRFdmVudEVtaXR0ZXIsXHJcblx0SW5qZWN0LFxyXG5cdElucHV0LFxyXG5cdE9uQ2hhbmdlcyxcclxuXHRPbkRlc3Ryb3ksXHJcblx0T25Jbml0LFxyXG5cdE91dHB1dCxcclxuXHRWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEFQUF9CQVNFX0hSRUYsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IER5bmFtc29mdCBmcm9tICdkd3QnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRG9jdW1lbnRzU2VydmljZSB9IGZyb20gJy4uL2RvY3VtZW50cy9zZXJ2aWNlcy9kb2N1bWVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVFdmVudFR5cGUsIE5kZlVwbG9hZGVyU2VydmljZSB9IGZyb20gJy4uL25kZi11cGxvYWRlcic7XHJcbmltcG9ydCB7IEVudk1hbmFnZXIgfSBmcm9tICcuLi8uLi9jb3JlL2Vudic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ25kZi1zY2FubmVyJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vbmRmLXNjYW5uZXIuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL25kZi1zY2FubmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0aG9zdDogeyBjbGFzczogJ25kZi1zY2FubmVyJyB9LFxyXG5cdGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIE5kZlNjYW5uZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuXHR1cGxvYWRlZEZpbGU7XHJcblx0b25NaW5pbWl6aW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblx0QElucHV0KCkgdXNlU3RvcmVkRmlsZSA9IGZhbHNlO1xyXG5cdEBJbnB1dCgpIGhpZGVVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuXHRASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGJhdGNoIGlzIHVwbG9hZGVkICovXHJcblx0QE91dHB1dCgpXHJcblx0ZmlsZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0cHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblx0RFdPYmplY3Q7XHJcblx0c2VsZWN0U291cmNlczogSFRNTFNlbGVjdEVsZW1lbnQ7XHJcblx0RFdUU291cmNlQ291bnQgPSAwO1xyXG5cdGZpbGVuYW1lID0gJyc7XHJcblx0Y29udGFpbmVySWQgPSAnZHd0Y29udHJvbENvbnRhaW5lcic7XHJcblx0YldBU00gPSBEeW5hbXNvZnQuTGliLmVudi5iTW9iaWxlIHx8IER5bmFtc29mdC5EV1QuVXNlTG9jYWxTZXJ2aWNlO1xyXG5cdF9pTGVmdDtcclxuXHRfaVRvcDtcclxuXHRfaVJpZ2h0O1xyXG5cdF9pQm90dG9tO1xyXG5cdF9zdHJUZW1wU3RyID0gJyc7XHJcblx0cmUgPSAvXlxcZCskLztcclxuXHRzdHJyZSA9IC9eW1xcc1xcd10rJC87XHJcblx0cmVmbG9hdCA9IC9eXFxkK1xcLipcXGQqJC9pO1xyXG5cdGlubmVySFRNTDogc3RyaW5nO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuXHRcdHB1YmxpYyBkb2N1bWVudHNTZXJ2aWNlOiBEb2N1bWVudHNTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSB1cGxvYWRlclNlcnZpY2U6IE5kZlVwbG9hZGVyU2VydmljZSxcclxuXHRcdHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcblx0XHRASW5qZWN0KEFQUF9CQVNFX0hSRUYpIHByaXZhdGUgYmFzZUhyZWY6IHN0cmluZ1xyXG5cdCkge31cclxuXHRuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmxvYWRpbmcpIHtcclxuXHRcdFx0dGhpcy5zaG93TG9hZGVyKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmhpZGVMb2FkZXIoKTtcclxuXHRcdH1cclxuXHR9XHJcblx0c2hvd0xvYWRlcigpIHtcclxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkd3Rjb250cm9sQ29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2FkZXInKS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblx0fVxyXG5cclxuXHRoaWRlTG9hZGVyKCkge1xyXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvYWRlcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHd0Y29udHJvbENvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuXHR9XHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmhpZGVMb2FkZXIoKTtcclxuXHRcdER5bmFtc29mdC5EV1QuUmVzb3VyY2VzUGF0aCA9IHRoaXMuYmFzZUhyZWYgKyAnL2Fzc2V0cy9kd3QtcmVzb3VyY2VzJztcclxuXHRcdC8vL1xyXG5cdFx0RHluYW1zb2Z0LkRXVC5BdXRvTG9hZCA9IHRydWU7XHJcblx0XHQvLy9cclxuXHRcdC8vIGNvbnN0IHdpZHRoID0gd2luZG93Lm91dGVyV2lkdGggKiAwLjM7XHJcblx0XHQvLyBjb25zdCBoZWlnaHQgPSB3aW5kb3cub3V0ZXJIZWlnaHQgKiAwLjM7XHJcblx0XHREeW5hbXNvZnQuRFdULkNvbnRhaW5lcnMgPSBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRXZWJUd2FpbklkOiAnRFdUT2JqZWN0JyxcclxuXHRcdFx0XHRDb250YWluZXJJZDogJ2R3dGNvbnRyb2xDb250YWluZXInLFxyXG5cdFx0XHRcdFdpZHRoOiAnMTAwJScsXHJcblx0XHRcdFx0SGVpZ2h0OiAnMTAwJSdcclxuXHRcdFx0fVxyXG5cdFx0XTtcclxuXHJcblx0XHREeW5hbXNvZnQuRFdULlByb2R1Y3RLZXkgPSBFbnZNYW5hZ2VyLmVudmlyb25tZW50LmR5bmFtc29mdFByb2R1Y3RLZXk7XHJcblx0XHQvLyBEeW5hbXNvZnQuRFdULlRyaWFsID0gZmFsc2U7XHJcblx0XHQvLyBEeW5hbXNvZnQuRFdULkRlYnVnID0gZmFsc2U7IC8vIG9ubHkgZm9yIGRlYnVnZ2VyIG91dHB1dFxyXG5cclxuXHRcdC8vL1xyXG5cdFx0RHluYW1zb2Z0LkRXVC5JZkFkZE1ENUluVXBsb2FkSGVhZGVyID0gZmFsc2U7XHJcblxyXG5cdFx0Ly8vXHJcblx0XHREeW5hbXNvZnQuRFdULklmQ29uZmluZU1hc2tXaXRoaW5UaGVWaWV3ZXIgPSBmYWxzZTtcclxuXHRcdER5bmFtc29mdC5NU0cgPSB7XHJcblx0XHRcdENvbnZlcnRpbmdUb0Jhc2U2NDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5Db252ZXJ0aW5nVG9CYXNlNjQnKSxcclxuXHRcdFx0Q29udmVydGluZ1RvQmxvYjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5Db252ZXJ0aW5nVG9CbG9iJyksXHJcblx0XHRcdERvd25sb2FkaW5nOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLkRvd25sb2FkaW5nJyksXHJcblx0XHRcdEVuY29kaW5nOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLkVuY29kaW5nJyksXHJcblx0XHRcdEVycl9Ccm93c2VyTm90U3VwcG9ydFdhc206IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuRXJyX0Jyb3dzZXJOb3RTdXBwb3J0V2FzbScpLFxyXG5cdFx0XHRJbml0X0FsbEpzTG9hZGVkOiBEeW5hbXNvZnQuTVNHLkluaXRfQWxsSnNMb2FkZWQsXHJcblx0XHRcdEluaXRfQ2hlY2tEV1Q6IER5bmFtc29mdC5NU0cuSW5pdF9DaGVja0RXVCxcclxuXHRcdFx0SW5pdF9DaGVja0RXVFZlcnNpb246IER5bmFtc29mdC5NU0cuSW5pdF9DaGVja0RXVFZlcnNpb24sXHJcblx0XHRcdEluaXRfQ2hlY2tpbmdMaWNlbnNlOiBEeW5hbXNvZnQuTVNHLkluaXRfQ2hlY2tpbmdMaWNlbnNlLFxyXG5cdFx0XHRJbml0X0NvbXBpbGluZ1dhc206IER5bmFtc29mdC5NU0cuSW5pdF9Db21waWxpbmdXYXNtLFxyXG5cdFx0XHRJbml0X0NvbmZpZ3VyaW5nRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfQ29uZmlndXJpbmdEV1QsXHJcblx0XHRcdEluaXRfQ3JlYXRpbmdEV1Q6IER5bmFtc29mdC5NU0cuSW5pdF9DcmVhdGluZ0RXVCxcclxuXHRcdFx0SW5pdF9Eb3dubG9hZGluZ1dhc206IER5bmFtc29mdC5NU0cuSW5pdF9Eb3dubG9hZGluZ1dhc20sXHJcblx0XHRcdEluaXRfRmlyZUJlZm9yZUluaXRFdnQ6IER5bmFtc29mdC5NU0cuSW5pdF9GaXJlQmVmb3JlSW5pdEV2dCxcclxuXHRcdFx0SW5pdF9HZXRMaWNlbnNlSW5mb0ZvckRXVDogRHluYW1zb2Z0Lk1TRy5Jbml0X0dldExpY2Vuc2VJbmZvRm9yRFdULFxyXG5cdFx0XHRJbml0X0luaXRBY3RpdmVYOiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdEFjdGl2ZVgsXHJcblx0XHRcdEluaXRfSW5pdER5bmFtc29mdFNlcnZpY2U6IER5bmFtc29mdC5NU0cuSW5pdF9Jbml0RHluYW1zb2Z0U2VydmljZSxcclxuXHRcdFx0SW5pdF9Jbml0SDU6IER5bmFtc29mdC5NU0cuSW5pdF9Jbml0SDUsXHJcblx0XHRcdEluaXRfSW5pdFdhc206IER5bmFtc29mdC5NU0cuSW5pdF9Jbml0V2FzbSxcclxuXHRcdFx0SW5pdF9Mb2FkaW5nVmlld2VySnM6IER5bmFtc29mdC5NU0cuSW5pdF9Mb2FkaW5nVmlld2VySnMsXHJcblx0XHRcdEluaXRfTG9va2luZ0xpY2Vuc2U6IER5bmFtc29mdC5NU0cuSW5pdF9Mb29raW5nTGljZW5zZSxcclxuXHRcdFx0SW5pdF9TZXRMaWNlbnNlRm9yRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfU2V0TGljZW5zZUZvckRXVCxcclxuXHRcdFx0TG9hZGluZzogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5Mb2FkaW5nJyksXHJcblx0XHRcdExvYWRpbmdQZGY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuTG9hZGluZ1BkZicpLFxyXG5cdFx0XHRMb2FkaW5nVGlmZjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5Mb2FkaW5nVGlmZicpLFxyXG5cdFx0XHRTYXZpbmdQZGY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuU2F2aW5nUGRmJyksXHJcblx0XHRcdFNhdmluZ1RpZmY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuU2F2aW5nVGlmZicpLFxyXG5cdFx0XHRVcGxvYWRpbmc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuVXBsb2FkaW5nJylcclxuXHRcdH07XHJcblx0XHREeW5hbXNvZnQuRFdULkN1c3RvbWl6YWJsZURpc3BsYXlJbmZvID0ge1xyXG5cdFx0XHRlcnJvck1lc3NhZ2VzOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLmVycm9yTWVzc2FnZXMnKSxcclxuXHJcblx0XHRcdC8vIGxhdW5jaFxyXG5cdFx0XHRnZW5lcmFsTWVzc2FnZXM6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuZ2VuZXJhbE1lc3NhZ2VzJyksXHJcblxyXG5cdFx0XHRjdXN0b21Qcm9ncmVzc1RleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuY3VzdG9tUHJvZ3Jlc3NUZXh0JyksXHJcblxyXG5cdFx0XHQvLyBpbWFnZSBlZGl0b3JcclxuXHRcdFx0YnV0dG9uczogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5idXR0b25zJyksXHJcblxyXG5cdFx0XHRkaWFsb2dUZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLmRpYWxvZ1RleHQnKVxyXG5cdFx0fTtcclxuXHRcdER5bmFtc29mdC5EV1QuT25XZWJUd2FpblJlYWR5ID0gKCk6IGFueSA9PiB7XHJcblx0XHRcdHRoaXMucGFnZW9ubG9hZCgpO1xyXG5cdFx0XHR0aGlzLkR5bmFtc29mdF9PblJlYWR5KCk7XHJcblx0XHR9O1xyXG5cdFx0RHluYW1zb2Z0LkRXVC5Mb2FkKCk7XHJcblxyXG5cdFx0Ly8gdGhpcy5vbk1pbmltaXppbmdTdWJzY3JpcHRpb24gPSB0aGlzLkRvY3VtZW50U2NhblNlcnZpY2Uub25NaW5pbWl6aW5nLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHQvLyBcdHRoaXMuY29udmVydFRvQmxvYkZvclNhdmluZygpO1xyXG5cdFx0Ly8gfSk7XHJcblx0fVxyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHRcdHRoaXMucGFnZW9ubG9hZCgpO1xyXG5cdFx0Ly8gaWYgKHRoaXMudXNlU3RvcmVkRmlsZSkge1xyXG5cdFx0Ly8gXHRpZiAodGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnN0b3JlZEZpbGUpIHtcclxuXHRcdC8vIFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdC8vIFx0XHRcdHRoaXMuc2V0U3RvcmVkRmlsZVRvU2Nhbm5lcih0aGlzLkRvY3VtZW50U2NhblNlcnZpY2Uuc3RvcmVkRmlsZSk7XHJcblx0XHQvLyBcdFx0fSwgMjAwMCk7XHJcblx0XHQvLyBcdH1cclxuXHRcdC8vIH1cclxuXHR9XHJcblxyXG5cdHNldFN0b3JlZEZpbGVUb1NjYW5uZXIocmVzdWx0KSB7XHJcblx0XHR0aGlzLkRXT2JqZWN0LkxvYWRJbWFnZUZyb21CaW5hcnkoXHJcblx0XHRcdHJlc3VsdCxcclxuXHRcdFx0ZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdzdWNjZXNzJyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZ1bmN0aW9uIChlcnJvckNvZGUsIGVycm9yU3RyaW5nKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coZXJyb3JTdHJpbmcpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cGFnZW9ubG9hZCgpIHtcclxuXHRcdHRoaXMuSGlkZUxvYWRJbWFnZUZvckxpbnV4KCk7XHJcblx0XHRjb25zdCB0d2FpbnNvdXJjZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdXJjZScpO1xyXG5cdFx0aWYgKHR3YWluc291cmNlKSB7XHJcblx0XHRcdHR3YWluc291cmNlLm9wdGlvbnMubGVuZ3RoID0gMDtcclxuXHRcdFx0dHdhaW5zb3VyY2Uub3B0aW9ucy5hZGQobmV3IE9wdGlvbih0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLnBsZWFzZVdhaXQnKSwgJzAnKSk7XHJcblx0XHRcdHR3YWluc291cmNlLm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuaW5pdGlhdGVJbnB1dHMoKTtcclxuXHR9XHJcblxyXG5cdEhpZGVMb2FkSW1hZ2VGb3JMaW51eCgpIHtcclxuXHRcdGNvbnN0IG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlMb2FkSW1hZ2UnKTtcclxuXHRcdGlmIChvKSB7XHJcblx0XHRcdGlmIChEeW5hbXNvZnQuTGliLmVudi5iTGludXgpIHtcclxuXHRcdFx0XHRvLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0by5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGluaXRpYXRlSW5wdXRzKCkge1xyXG5cdFx0Y29uc3QgYWxsaW5wdXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFsbGlucHV0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZiAoYWxsaW5wdXRzW2ldLnR5cGUgPT09ICdjaGVja2JveCcpIHtcclxuXHRcdFx0XHRhbGxpbnB1dHNbaV0uY2hlY2tlZCA9IGZhbHNlO1xyXG5cdFx0XHR9IGVsc2UgaWYgKGFsbGlucHV0c1tpXS50eXBlID09PSAndGV4dCcpIHtcclxuXHRcdFx0XHRhbGxpbnB1dHNbaV0udmFsdWUgPSAnJztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChEeW5hbXNvZnQuTGliLmVudi5iSUUgPT09IHRydWUgJiYgdGhpcy5pc1dpbjY0KCkpIHtcclxuXHRcdFx0bGV0IG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxlc291cmNlNjRiaXQnKTtcclxuXHRcdFx0aWYgKG8pIHtcclxuXHRcdFx0XHRvLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYW1wbGVzb3VyY2UzMmJpdCcpO1xyXG5cdFx0XHRpZiAobykge1xyXG5cdFx0XHRcdG8uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRpc1dpbjY0KCkge1xyXG5cdFx0Ly8gcmV0dXJuIChcclxuXHRcdC8vIFx0bmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoJ1dpbicpICE9PSAtMSAmJlxyXG5cdFx0Ly8gXHRuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ3g2NCcpICE9PSAtMVxyXG5cdFx0Ly8gKTtcclxuXHRcdHJldHVybiAvV2luZG93cyBOVC4qeDY0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG5cdH1cclxuXHRpbml0RGxsRm9yQ2hhbmdlSW1hZ2VTaXplKCkge1xyXG5cdFx0Y29uc3QgdkludGVycG9sYXRpb25NZXRob2Q6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbnRlcnBvbGF0aW9uTWV0aG9kJyk7XHJcblx0XHR2SW50ZXJwb2xhdGlvbk1ldGhvZC5vcHRpb25zLmxlbmd0aCA9IDA7XHJcblx0XHR2SW50ZXJwb2xhdGlvbk1ldGhvZC5vcHRpb25zLmFkZChuZXcgT3B0aW9uKCdOZWFyZXN0TmVpZ2hib3InLCAnMScpKTtcclxuXHRcdHZJbnRlcnBvbGF0aW9uTWV0aG9kLm9wdGlvbnMuYWRkKG5ldyBPcHRpb24oJ0JpbGluZWFyJywgJzInKSk7XHJcblx0XHR2SW50ZXJwb2xhdGlvbk1ldGhvZC5vcHRpb25zLmFkZChuZXcgT3B0aW9uKCdCaWN1YmljJywgJzMnKSk7XHJcblx0fVxyXG5cclxuXHRzZXREZWZhdWx0VmFsdWUoKSB7XHJcblx0XHRjb25zdCB2R3JheTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0dyYXknKTtcclxuXHRcdGlmICh2R3JheSkge1xyXG5cdFx0XHR2R3JheS5jaGVja2VkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCB2YXJJbWdUeXBlcG5nMjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ1R5cGVwbmcyJyk7XHJcblx0XHRpZiAodmFySW1nVHlwZXBuZzIpIHtcclxuXHRcdFx0dmFySW1nVHlwZXBuZzIuY2hlY2tlZCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRjb25zdCB2YXJJbWdUeXBlcG5nOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nVHlwZXBuZycpO1xyXG5cdFx0aWYgKHZhckltZ1R5cGVwbmcpIHtcclxuXHRcdFx0dmFySW1nVHlwZXBuZy5jaGVja2VkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBfc3RyRGVmYXVsdFNhdmVJbWFnZU5hbWUgPSAnV2ViVFdBSU5JbWFnZSc7XHJcblx0XHRjb25zdCBfdHh0RmlsZU5hbWVmb3JTYXZlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHh0X2ZpbGVOYW1lZm9yU2F2ZScpO1xyXG5cdFx0aWYgKF90eHRGaWxlTmFtZWZvclNhdmUpIHtcclxuXHRcdFx0X3R4dEZpbGVOYW1lZm9yU2F2ZS52YWx1ZSA9IF9zdHJEZWZhdWx0U2F2ZUltYWdlTmFtZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBfdHh0RmlsZU5hbWU6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eHRfZmlsZU5hbWUnKTtcclxuXHRcdGlmIChfdHh0RmlsZU5hbWUpIHtcclxuXHRcdFx0X3R4dEZpbGVOYW1lLnZhbHVlID0gX3N0ckRlZmF1bHRTYXZlSW1hZ2VOYW1lO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VUSUZGX3NhdmU6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VUSUZGX3NhdmUnKTtcclxuXHRcdGlmIChfY2hrTXVsdGlQYWdlVElGRl9zYXZlKSB7XHJcblx0XHRcdF9jaGtNdWx0aVBhZ2VUSUZGX3NhdmUuZGlzYWJsZWQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgX2Noa011bHRpUGFnZVBERl9zYXZlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlUERGX3NhdmUnKTtcclxuXHRcdGlmIChfY2hrTXVsdGlQYWdlUERGX3NhdmUpIHtcclxuXHRcdFx0X2Noa011bHRpUGFnZVBERl9zYXZlLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VUSUZGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlVElGRicpO1xyXG5cdFx0aWYgKF9jaGtNdWx0aVBhZ2VUSUZGKSB7XHJcblx0XHRcdF9jaGtNdWx0aVBhZ2VUSUZGLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VQREY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VQREYnKTtcclxuXHRcdGlmIChfY2hrTXVsdGlQYWdlUERGKSB7XHJcblx0XHRcdF9jaGtNdWx0aVBhZ2VQREYuZGlzYWJsZWQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2hlY2sgaWYgdGhlIGNvbnRyb2wgaXMgZnVsbHkgbG9hZGVkLlxyXG5cdER5bmFtc29mdF9PblJlYWR5KCkge1xyXG5cdFx0Y29uc3QgbGlOb1NjYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncE5vU2Nhbm5lcicpO1xyXG5cdFx0Ly8gSWYgdGhlIEVycm9yQ29kZSBpcyAwLCBpdCBtZWFucyBldmVyeXRoaW5nIGlzIGZpbmUgZm9yIHRoZSBjb250cm9sLiBJdCBpcyBmdWxseSBsb2FkZWQuXHJcblx0XHR0aGlzLkRXT2JqZWN0ID0gRHluYW1zb2Z0LkRXVC5HZXRXZWJUd2FpbignZHd0Y29udHJvbENvbnRhaW5lcicpO1xyXG5cdFx0aWYgKHRoaXMuRFdPYmplY3QpIHtcclxuXHRcdFx0aWYgKHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlID09PSAwKSB7XHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5Mb2dMZXZlbCA9IDA7XHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5JZkFsbG93TG9jYWxDYWNoZSA9IHRydWU7XHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5JbWFnZUNhcHR1cmVEcml2ZXJUeXBlID0gNDtcclxuXHRcdFx0XHR0aGlzLnNldERlZmF1bHRWYWx1ZSgpO1xyXG5cclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoJ09uVG9wSW1hZ2VJblRoZVZpZXdDaGFuZ2VkJywgdGhpcy5EeW5hbXNvZnRfT25Ub3BJbWFnZUluVGhlVmlld0NoYW5nZWQpO1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudCgnT25Nb3VzZUNsaWNrJywgdGhpcy5EeW5hbXNvZnRfT25Nb3VzZUNsaWNrKTtcclxuXHJcblx0XHRcdFx0bGV0IHR3YWluc291cmNlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291cmNlJyk7XHJcblx0XHRcdFx0aWYgKCF0d2FpbnNvdXJjZSkge1xyXG5cdFx0XHRcdFx0dHdhaW5zb3VyY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2ViY2Ftc291cmNlJyk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCB2Q291bnQgPSB0aGlzLkRXT2JqZWN0LlNvdXJjZUNvdW50O1xyXG5cdFx0XHRcdHRoaXMuRFdUU291cmNlQ291bnQgPSB2Q291bnQ7XHJcblxyXG5cdFx0XHRcdGlmICh0d2FpbnNvdXJjZSkge1xyXG5cdFx0XHRcdFx0dHdhaW5zb3VyY2Uub3B0aW9ucy5sZW5ndGggPSAwO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2Q291bnQ7IGkrKykge1xyXG5cdFx0XHRcdFx0XHR0d2FpbnNvdXJjZS5vcHRpb25zLmFkZChuZXcgT3B0aW9uKHRoaXMuRFdPYmplY3QuR2V0U291cmNlTmFtZUl0ZW1zKGkpLCBpLnRvU3RyaW5nKCkpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIElmIHNvdXJjZSBsaXN0IG5lZWQgdG8gYmUgZGlzcGxheWVkLCBmaWxsIGluIHRoZSBzb3VyY2UgaXRlbXMuXHJcblx0XHRcdFx0aWYgKHZDb3VudCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0aWYgKGxpTm9TY2FubmVyKSB7XHJcblx0XHRcdFx0XHRcdGlmIChEeW5hbXNvZnQuTGliLmVudi5iV2luKSB7XHJcblx0XHRcdFx0XHRcdFx0bGlOb1NjYW5uZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblx0XHRcdFx0XHRcdFx0bGlOb1NjYW5uZXIuc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0bGlOb1NjYW5uZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHZDb3VudCA+IDApIHtcclxuXHRcdFx0XHRcdHRoaXMuc291cmNlX29uY2hhbmdlKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYldpbikge1xyXG5cdFx0XHRcdFx0dGhpcy5EV09iamVjdC5Nb3VzZVNoYXBlID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBidG5TY2FuOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuU2NhbicpO1xyXG5cdFx0XHRcdGlmIChidG5TY2FuKSB7XHJcblx0XHRcdFx0XHRpZiAodkNvdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdGJ0blNjYW4uZGlzYWJsZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0YnRuU2Nhbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCFEeW5hbXNvZnQuTGliLmVudi5iV2luICYmIHZDb3VudCA+IDApIHtcclxuXHRcdFx0XHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykpIHtcclxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpKSB7XHJcblx0XHRcdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpKSB7XHJcblx0XHRcdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpKSB7XHJcblx0XHRcdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLmluaXREbGxGb3JDaGFuZ2VJbWFnZVNpemUoKTtcclxuXHJcblx0XHRcdFx0dGhpcy5faUxlZnQgPSAwO1xyXG5cdFx0XHRcdHRoaXMuX2lUb3AgPSAwO1xyXG5cdFx0XHRcdHRoaXMuX2lSaWdodCA9IDA7XHJcblx0XHRcdFx0dGhpcy5faUJvdHRvbSA9IDA7XHJcblxyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZG9jdW1lbnQubGlua3MubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGlmIChkb2N1bWVudC5saW5rc1tpXS5jbGFzc05hbWUgPT09ICdTaG93dGJsTG9hZEltYWdlJykge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5saW5rc1tpXS5vbmNsaWNrID0gdGhpcy5zaG93dGJsTG9hZEltYWdlX29uY2xpY2s7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoZG9jdW1lbnQubGlua3NbaV0uY2xhc3NOYW1lID09PSAnQ2xvc2V0YmxMb2FkSW1hZ2UnKSB7XHJcblx0XHRcdFx0XHRcdGRvY3VtZW50LmxpbmtzW2ldLm9uY2xpY2sgPSB0aGlzLmNsb3NldGJsTG9hZEltYWdlX29uY2xpY2s7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh2Q291bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGlmIChEeW5hbXNvZnQuTGliLmVudi5iV2luKSB7XHJcblx0XHRcdFx0XHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYU5vU2Nhbm5lcicpICYmIHdpbmRvd1snYkRXVE9ubGluZURlbW8nXSkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2X1NjYW5JbWFnZScpLnN0eWxlLmRpc3BsYXkgPT09ICcnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNob3d0YmxMb2FkSW1hZ2Vfb25jbGljaygpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Jlc29sdXRpb24nKSkge1xyXG5cdFx0XHRcdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCBkaXZCbGFuayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZCbGFuaycpO1xyXG5cdFx0XHRcdFx0aWYgKGRpdkJsYW5rKSB7XHJcblx0XHRcdFx0XHRcdGRpdkJsYW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0XHRcdFx0Y29uc3QgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0aWYgKCF1YS5pbmRleE9mKCdtc2llIDYuMCcpKSB7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoJ09uUG9zdFRyYW5zZmVyJywgdGhpcy5EeW5hbXNvZnRfT25Qb3N0VHJhbnNmZXIpO1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudCgnT25Qb3N0TG9hZCcsIHRoaXMuRHluYW1zb2Z0X09uUG9zdExvYWRmdW5jdGlvbik7XHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KCdPblBvc3RBbGxUcmFuc2ZlcnMnLCB0aGlzLkR5bmFtc29mdF9PblBvc3RBbGxUcmFuc2ZlcnMpO1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudCgnT25JbWFnZUFyZWFTZWxlY3RlZCcsIHRoaXMuRHluYW1zb2Z0X09uSW1hZ2VBcmVhU2VsZWN0ZWQpO1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudCgnT25JbWFnZUFyZWFEZVNlbGVjdGVkJywgdGhpcy5EeW5hbXNvZnRfT25JbWFnZUFyZWFEZXNlbGVjdGVkKTtcclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoJ09uR2V0RmlsZVBhdGgnLCB0aGlzLkR5bmFtc29mdF9PbkdldEZpbGVQYXRoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0c2hvd3RibExvYWRJbWFnZV9vbmNsaWNrKCkge1xyXG5cdFx0c3dpdGNoIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJsTG9hZEltYWdlJykuc3R5bGUudmlzaWJpbGl0eSkge1xyXG5cdFx0XHRjYXNlICdoaWRkZW4nOlxyXG5cdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YmxMb2FkSW1hZ2UnKS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG5cdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICd2aXNpYmxlJzpcclxuXHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJsTG9hZEltYWdlJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncE5vU2Nhbm5lcicpKSB7XHJcblx0XHRcdC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGJsTG9hZEltYWdlXCIpLnN0eWxlLnRvcCA9IGRzX2dldHRvcChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBOb1NjYW5uZXJcIikpICsgcE5vU2Nhbm5lci5vZmZzZXRIZWlnaHQgKyBcInB4XCI7XHJcblx0XHRcdC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGJsTG9hZEltYWdlXCIpLnN0eWxlLmxlZnQgPSBkc19nZXRsZWZ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicE5vU2Nhbm5lclwiKSkgKyAwICsgXCJweFwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Y2xvc2V0YmxMb2FkSW1hZ2Vfb25jbGljaygpIHtcclxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YmxMb2FkSW1hZ2UnKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIFVzZWQgYSBsb3QgKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHVwZGF0ZVBhZ2VJbmZvKCkge1xyXG5cdFx0Y29uc3QgdG90YWxJbWFnZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX1RvdGFsSW1hZ2UnKTtcclxuXHRcdGNvbnN0IGN1cnJlbnRJbWFnZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX0N1cnJlbnRJbWFnZScpO1xyXG5cdFx0aWYgKHRvdGFsSW1hZ2UpIHtcclxuXHRcdFx0dG90YWxJbWFnZS52YWx1ZSA9IHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGN1cnJlbnRJbWFnZSkge1xyXG5cdFx0XHRjdXJyZW50SW1hZ2UudmFsdWUgPSB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgKyAxO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXBwZW5kTWVzc2FnZShzdHJNZXNzYWdlKSB7XHJcblx0XHR0aGlzLl9zdHJUZW1wU3RyICs9IHN0ck1lc3NhZ2U7XHJcblx0XHRjb25zdCBfZGl2TWVzc2FnZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV1RlbWVzc2FnZScpO1xyXG5cdFx0aWYgKF9kaXZNZXNzYWdlQ29udGFpbmVyKSB7XHJcblx0XHRcdF9kaXZNZXNzYWdlQ29udGFpbmVyLmlubmVySFRNTCA9IHRoaXMuX3N0clRlbXBTdHI7XHJcblx0XHRcdF9kaXZNZXNzYWdlQ29udGFpbmVyLnNjcm9sbFRvcCA9IF9kaXZNZXNzYWdlQ29udGFpbmVyLnNjcm9sbEhlaWdodDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpIHtcclxuXHRcdGlmICh0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlciA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJ1RoZXJlIGlzIG5vIGltYWdlIGluIGJ1ZmZlci48YnIgLz4nKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjaGVja0Vycm9yU3RyaW5nKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2hlY2tFcnJvclN0cmluZ1dpdGhFcnJvckNvZGUodGhpcy5EV09iamVjdC5FcnJvckNvZGUsIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmcpO1xyXG5cdH1cclxuXHJcblx0Y2hlY2tFcnJvclN0cmluZ1dpdGhFcnJvckNvZGUoZXJyb3JDb2RlLCBlcnJvclN0cmluZywgcmVzcG9uc2VTdHJpbmcgPSBudWxsKSB7XHJcblx0XHRpZiAoZXJyb3JDb2RlID09PSAwKSB7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZShcIjxzcGFuIHN0eWxlPSdjb2xvcjojY0U1RTA0Jz48Yj5cIiArIGVycm9yU3RyaW5nICsgJzwvYj48L3NwYW4+PGJyIC8+Jyk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChlcnJvckNvZGUgPT09IC0yMTE1KSB7XHJcblx0XHRcdC8vIENhbmNlbCBmaWxlIGRpYWxvZ1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChlcnJvckNvZGUgPT09IC0yMDAzKSB7XHJcblx0XHRcdFx0Y29uc3QgRXJyb3JNZXNzYWdlV2luID0gd2luZG93Lm9wZW4oXHJcblx0XHRcdFx0XHQnJyxcclxuXHRcdFx0XHRcdCdFcnJvck1lc3NhZ2UnLFxyXG5cdFx0XHRcdFx0J2hlaWdodD01MDAsd2lkdGg9NzUwLHRvcD0wLGxlZnQ9MCx0b29sYmFyPW5vLG1lbnViYXI9bm8sc2Nyb2xsYmFycz1ubywgcmVzaXphYmxlPW5vLGxvY2F0aW9uPW5vLCBzdGF0dXM9bm8nXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRFcnJvck1lc3NhZ2VXaW4uZG9jdW1lbnQud3JpdGVsbihyZXNwb25zZVN0cmluZyk7IC8vIHRoaXMuRFdPYmplY3QuSFRUUFBvc3RSZXNwb25zZVN0cmluZyk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKFwiPHNwYW4gc3R5bGU9J2NvbG9yOiNjRTVFMDQnPjxiPlwiICsgZXJyb3JTdHJpbmcgKyAnPC9iPjwvc3Bhbj48YnIgLz4nKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIFVzZWQgYSBsb3QgKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdGRzX2dldGxlZnQoZWwpIHtcclxuXHRcdGxldCB0bXAgPSBlbC5vZmZzZXRMZWZ0O1xyXG5cdFx0ZWwgPSBlbC5vZmZzZXRQYXJlbnQ7XHJcblx0XHR3aGlsZSAoZWwpIHtcclxuXHRcdFx0dG1wICs9IGVsLm9mZnNldExlZnQ7XHJcblx0XHRcdGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRtcDtcclxuXHR9XHJcblx0ZHNfZ2V0dG9wKGVsKSB7XHJcblx0XHRsZXQgdG1wID0gZWwub2Zmc2V0VG9wO1xyXG5cdFx0ZWwgPSBlbC5vZmZzZXRQYXJlbnQ7XHJcblx0XHR3aGlsZSAoZWwpIHtcclxuXHRcdFx0dG1wICs9IGVsLm9mZnNldFRvcDtcclxuXHRcdFx0ZWwgPSBlbC5vZmZzZXRQYXJlbnQ7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdG1wO1xyXG5cdH1cclxuXHJcblx0T3Zlcl9PdXRfRGVtb0ltYWdlKG9iaiwgdXJsKSB7XHJcblx0XHRvYmouc3JjID0gdXJsO1xyXG5cdH1cclxuXHRzb3VyY2Vfb25jaGFuZ2UoKSB7XHJcblx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdlR3YWluVHlwZScpKSB7XHJcblx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZUd2FpblR5cGUnKS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKSkge1xyXG5cdFx0XHRjb25zdCBjSW5kZXggPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdXJjZScpIGFzIEhUTUxTZWxlY3RFbGVtZW50KS5zZWxlY3RlZEluZGV4O1xyXG5cdFx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYk1hYykge1xyXG5cdFx0XHRcdGNvbnN0IHN0clNvdXJjZU5hbWUgPSB0aGlzLkRXT2JqZWN0LkdldFNvdXJjZU5hbWVJdGVtcyhjSW5kZXgpO1xyXG5cdFx0XHRcdGlmIChzdHJTb3VyY2VOYW1lLmluZGV4T2YoJ0lDQScpID09PSAwKSB7XHJcblx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpKSB7XHJcblx0XHRcdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKSkge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKSkge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKSkge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlNlbGVjdFNvdXJjZUJ5SW5kZXgoY0luZGV4KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bWVkaWFUeXBlX29uY2hhbmdlKCkge1xyXG5cdFx0Y29uc3QgTWVkaWFUeXBlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTWVkaWFUeXBlJyk7XHJcblx0XHRpZiAoTWVkaWFUeXBlICYmIE1lZGlhVHlwZS5vcHRpb25zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Y29uc3QgdmFsdWVNZWRpYVR5cGUgPSBNZWRpYVR5cGUub3B0aW9uc1tNZWRpYVR5cGUuc2VsZWN0ZWRJbmRleF0udGV4dDtcclxuXHRcdFx0aWYgKHZhbHVlTWVkaWFUeXBlICE9PSAnJykge1xyXG5cdFx0XHRcdGlmICghdGhpcy5EV09iamVjdC5BZGRvbi5XZWJjYW0uU2V0TWVkaWFUeXBlKHZhbHVlTWVkaWFUeXBlKSkge1xyXG5cdFx0XHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5FcnJvciBzZXR0aW5nIE1lZGlhVHlwZSB2YWx1ZTogPC9iPicpO1xyXG5cdFx0XHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKFwiPHNwYW4gc3R5bGU9J2NvbG9yOiNjRTVFMDQnPjxiPlwiICsgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZyArICc8L2I+PC9zcGFuPjxiciAvPicpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IFJlc29sdXRpb25XZWJjYW06IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uV2ViY2FtJyk7XHJcblx0XHRpZiAoUmVzb2x1dGlvbldlYmNhbSkge1xyXG5cdFx0XHRSZXNvbHV0aW9uV2ViY2FtLm9wdGlvbnMubGVuZ3RoID0gMDtcclxuXHRcdFx0Y29uc3QgYXJ5UmVzb2x1dGlvbiA9IHRoaXMuRFdPYmplY3QuQWRkb24uV2ViY2FtLkdldFJlc29sdXRpb24oKTtcclxuXHRcdFx0Y29uc3QgY291bnRSZXNvbHV0aW9uID0gYXJ5UmVzb2x1dGlvbi5HZXRDb3VudCgpO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50UmVzb2x1dGlvbjsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBhcnlSZXNvbHV0aW9uLkdldChpKTtcclxuXHRcdFx0XHRSZXNvbHV0aW9uV2ViY2FtLm9wdGlvbnMuYWRkKG5ldyBPcHRpb24odmFsdWUsIHZhbHVlKSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS1BY3F1aXJlIEltYWdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcblx0YWNxdWlyZUltYWdlKCkge1xyXG5cdFx0Y29uc3QgY0luZGV4ID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKSBhcyBIVE1MU2VsZWN0RWxlbWVudCkuc2VsZWN0ZWRJbmRleDtcclxuXHRcdGlmIChjSW5kZXggPCAwKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLkRXT2JqZWN0LlNlbGVjdFNvdXJjZUJ5SW5kZXgoY0luZGV4KTtcclxuXHRcdHRoaXMuRFdPYmplY3QuQ2xvc2VTb3VyY2UoKTtcclxuXHRcdHRoaXMuRFdPYmplY3QuT3BlblNvdXJjZSgpO1xyXG5cdFx0dGhpcy5EV09iamVjdC5JZlNob3dVSSA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcclxuXHJcblx0XHRsZXQgaTtcclxuXHRcdGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuXHRcdFx0aWYgKChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnUGl4ZWxUeXBlJykuaXRlbShpKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkID09PSB0cnVlKSB7XHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5QaXhlbFR5cGUgPSBpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5EV09iamVjdC5FcnJvckNvZGUgIT09IDApIHtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5FcnJvciBzZXR0aW5nIFBpeGVsVHlwZSB2YWx1ZTogPC9iPicpO1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoXCI8c3BhbiBzdHlsZT0nY29sb3I6I2NFNUUwNCc+PGI+XCIgKyB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nICsgJzwvYj48L3NwYW4+PGJyIC8+Jyk7XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LlJlc29sdXRpb24gPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Jlc29sdXRpb24nKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcclxuXHRcdGlmICh0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSAhPT0gMCkge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkVycm9yIHNldHRpbmcgUmVzb2x1dGlvbiB2YWx1ZTogPC9iPicpO1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoXCI8c3BhbiBzdHlsZT0nY29sb3I6I2NFNUUwNCc+PGI+XCIgKyB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nICsgJzwvYj48L3NwYW4+PGJyIC8+Jyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYkFERkNoZWNrZWQgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FERicpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XHJcblx0XHR0aGlzLkRXT2JqZWN0LklmRmVlZGVyRW5hYmxlZCA9IGJBREZDaGVja2VkO1xyXG5cdFx0aWYgKGJBREZDaGVja2VkID09PSB0cnVlICYmIHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlICE9PSAwKSB7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RXJyb3Igc2V0dGluZyBBREYgdmFsdWU6IDwvYj4nKTtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKFwiPHNwYW4gc3R5bGU9J2NvbG9yOiNjRTVFMDQnPjxiPlwiICsgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZyArICc8L2I+PC9zcGFuPjxiciAvPicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGJEdXBsZXhDaGVja2VkID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEdXBsZXgnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xyXG5cdFx0dGhpcy5EV09iamVjdC5JZkR1cGxleEVuYWJsZWQgPSBiRHVwbGV4Q2hlY2tlZDtcclxuXHRcdGlmIChiRHVwbGV4Q2hlY2tlZCA9PT0gdHJ1ZSAmJiB0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSAhPT0gMCkge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkVycm9yIHNldHRpbmcgRHVwbGV4IHZhbHVlOiA8L2I+Jyk7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZShcIjxzcGFuIHN0eWxlPSdjb2xvcjojY0U1RTA0Jz48Yj5cIiArIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmcgKyAnPC9iPjwvc3Bhbj48YnIgLz4nKTtcclxuXHRcdH1cclxuXHRcdGlmIChEeW5hbXNvZnQuTGliLmVudi5iV2luIHx8ICghRHluYW1zb2Z0LkxpYi5lbnYuYldpbiAmJiB0aGlzLkRXT2JqZWN0LkltYWdlQ2FwdHVyZURyaXZlclR5cGUgPT09IDApKSB7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZShcclxuXHRcdFx0XHQnUGl4ZWwgVHlwZTogJyArIHRoaXMuRFdPYmplY3QuUGl4ZWxUeXBlICsgJzxiciAvPlJlc29sdXRpb246ICcgKyB0aGlzLkRXT2JqZWN0LlJlc29sdXRpb24gKyAnPGJyIC8+J1xyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5JZkRpc2FibGVTb3VyY2VBZnRlckFjcXVpcmUgPSB0cnVlO1xyXG5cdFx0dGhpcy5EV09iamVjdC5BY3F1aXJlSW1hZ2UoKTtcclxuXHR9XHJcblxyXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS1Mb2FkIEltYWdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHRidG5Mb2FkSW1hZ2VzT3JQREZzX29uY2xpY2soKSB7XHJcblx0XHRjb25zdCBPblBERlN1Y2Nlc3MgPSAoKSA9PiB7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnTG9hZGVkIGFuIGltYWdlIHN1Y2Nlc3NmdWxseS48YnIvPicpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0XHR9O1xyXG5cclxuXHRcdGNvbnN0IE9uUERGRmFpbHVyZSA9IChlcnJvckNvZGUsIGVycm9yU3RyaW5nKSA9PiB7XHJcblx0XHRcdHRoaXMuY2hlY2tFcnJvclN0cmluZ1dpdGhFcnJvckNvZGUoZXJyb3JDb2RlLCBlcnJvclN0cmluZyk7XHJcblx0XHR9O1xyXG5cclxuXHRcdHRoaXMuRFdPYmplY3QuSWZTaG93RmlsZURpYWxvZyA9IHRydWU7XHJcblx0XHR0aGlzLkRXT2JqZWN0LkFkZG9uLlBERi5TZXRSZXNvbHV0aW9uKDIwMCk7XHJcblx0XHR0aGlzLkRXT2JqZWN0LkFkZG9uLlBERi5TZXRDb252ZXJ0TW9kZShEeW5hbXNvZnQuRFdULkVudW1EV1RfQ29udmVydE1vZGUuQ01fUkVOREVSQUxMKTtcclxuXHRcdHRoaXMuRFdPYmplY3QuTG9hZEltYWdlRXgoJycsIER5bmFtc29mdC5EV1QuRW51bURXVF9JbWFnZVR5cGUuSVRfQUxMLCBPblBERlN1Y2Nlc3MsIE9uUERGRmFpbHVyZSk7XHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIEVkaXQgSW1hZ2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0YnRuU2hvd0ltYWdlRWRpdG9yX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5TaG93SW1hZ2VFZGl0b3IoKTtcclxuXHR9XHJcblxyXG5cdGJ0blJvdGF0ZVJpZ2h0X29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5Sb3RhdGVSaWdodCh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIpO1xyXG5cdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5Sb3RhdGUgcmlnaHQ6IDwvYj4nKTtcclxuXHRcdGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0fVxyXG5cdGJ0blJvdGF0ZUxlZnRfb25jbGljaygpIHtcclxuXHRcdGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LlJvdGF0ZUxlZnQodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuXHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+Um90YXRlIGxlZnQ6IDwvYj4nKTtcclxuXHRcdGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRidG5Sb3RhdGUxODBfb25jbGljaygpIHtcclxuXHRcdGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LlJvdGF0ZSh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIsIDE4MCwgdHJ1ZSk7XHJcblx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPlJvdGF0ZSAxODA6IDwvYj4nKTtcclxuXHRcdGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRidG5NaXJyb3Jfb25jbGljaygpIHtcclxuXHRcdGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0Lk1pcnJvcih0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIpO1xyXG5cdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5NaXJyb3I6IDwvYj4nKTtcclxuXHRcdGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0fVxyXG5cdGJ0bkZsaXBfb25jbGljaygpIHtcclxuXHRcdGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LkZsaXAodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuXHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RmxpcDogPC9iPicpO1xyXG5cdFx0aWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUNyb3AgTWV0aG9kLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHRidG5Dcm9wX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuX2lMZWZ0ICE9PSAwIHx8IHRoaXMuX2lUb3AgIT09IDAgfHwgdGhpcy5faVJpZ2h0ICE9PSAwIHx8IHRoaXMuX2lCb3R0b20gIT09IDApIHtcclxuXHRcdFx0dGhpcy5EV09iamVjdC5Dcm9wKHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciwgdGhpcy5faUxlZnQsIHRoaXMuX2lUb3AsIHRoaXMuX2lSaWdodCwgdGhpcy5faUJvdHRvbSk7XHJcblx0XHRcdHRoaXMuX2lMZWZ0ID0gMDtcclxuXHRcdFx0dGhpcy5faVRvcCA9IDA7XHJcblx0XHRcdHRoaXMuX2lSaWdodCA9IDA7XHJcblx0XHRcdHRoaXMuX2lCb3R0b20gPSAwO1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkNyb3A6IDwvYj4nKTtcclxuXHRcdFx0aWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZShcIjxiPkNyb3A6IDwvYj5mYWlsZWQuIFBsZWFzZSBmaXJzdCBzZWxlY3QgdGhlIGFyZWEgeW91J2QgbGlrZSB0byBjcm9wLjxiciAvPlwiKTtcclxuXHRcdH1cclxuXHR9XHJcblx0LyotLS0tLS0tLS0tLS0tLS0tQ2hhbmdlIEltYWdlIFNpemUtLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblx0YnRuQ2hhbmdlSW1hZ2VTaXplX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0c3dpdGNoIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW1nU2l6ZUVkaXRvcicpLnN0eWxlLnZpc2liaWxpdHkpIHtcclxuXHRcdFx0Y2FzZSAndmlzaWJsZSc6XHJcblx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ2hpZGRlbic6XHJcblx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdFx0Ly8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJJbWdTaXplRWRpdG9yXCIpLnN0eWxlLnRvcCA9IGRzX2dldHRvcChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ0bkNoYW5nZUltYWdlU2l6ZVwiKSkgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ0bkNoYW5nZUltYWdlU2l6ZVwiKS5vZmZzZXRIZWlnaHQgKyAxNSArIFwicHhcIjtcclxuXHRcdC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiSW1nU2l6ZUVkaXRvclwiKS5zdHlsZS5sZWZ0ID0gZHNfZ2V0bGVmdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ0bkNoYW5nZUltYWdlU2l6ZVwiKSkgLSAxNCArIFwicHhcIjtcclxuXHJcblx0XHRjb25zdCBpV2lkdGggPSB0aGlzLkRXT2JqZWN0LkdldEltYWdlV2lkdGgodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuXHRcdGlmIChpV2lkdGggIT09IC0xKSB7XHJcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSBpV2lkdGg7XHJcblx0XHR9XHJcblx0XHRjb25zdCBpSGVpZ2h0ID0gdGhpcy5EV09iamVjdC5HZXRJbWFnZUhlaWdodCh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIpO1xyXG5cdFx0aWYgKGlIZWlnaHQgIT09IC0xKSB7XHJcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gaUhlaWdodDtcclxuXHRcdH1cclxuXHR9XHJcblx0YnRuQ2FuY2VsQ2hhbmdlX29uY2xpY2soKSB7XHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW1nU2l6ZUVkaXRvcicpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuXHR9XHJcblxyXG5cdGJ0bkNoYW5nZUltYWdlU2l6ZU9LX29uY2xpY2soKSB7XHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpLmNsYXNzTmFtZSA9ICcnO1xyXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpLmNsYXNzTmFtZSA9ICcnO1xyXG5cdFx0aWYgKCF0aGlzLnJlLnRlc3QoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfaGVpZ2h0JykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpKSB7XHJcblx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfaGVpZ2h0JykuY2xhc3NOYW1lICs9ICcgaW52YWxpZCc7XHJcblx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfaGVpZ2h0JykuZm9jdXMoKTtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCdQbGVhc2UgaW5wdXQgYSB2YWxpZCA8Yj5oZWlnaHQ8L2I+LjxiciAvPicpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZiAoIXRoaXMucmUudGVzdCgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSkge1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykuY2xhc3NOYW1lICs9ICcgaW52YWxpZCc7XHJcblx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKS5mb2N1cygpO1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJ1BsZWFzZSBpbnB1dCBhIHZhbGlkIDxiPndpZHRoPC9iPi48YnIgLz4nKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5DaGFuZ2VJbWFnZVNpemUoXHJcblx0XHRcdHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcixcclxuXHRcdFx0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSxcclxuXHRcdFx0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfaGVpZ2h0JykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsXHJcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW50ZXJwb2xhdGlvbk1ldGhvZCcpIGFzIEhUTUxTZWxlY3RFbGVtZW50KS5zZWxlY3RlZEluZGV4ICsgMVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+Q2hhbmdlIEltYWdlIFNpemU6IDwvYj4nKTtcclxuXHRcdGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW1nU2l6ZUVkaXRvcicpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIFNhdmUgSW1hZ2UqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdGJ0blNhdmVfb25jbGljaygpIHtcclxuXHRcdGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBzdHJpbWdUeXBlX3NhdmUgPSAncGRmJztcclxuXHJcblx0XHR0aGlzLkRXT2JqZWN0LklmU2hvd0ZpbGVEaWFsb2cgPSB0cnVlO1xyXG5cdFx0Y29uc3QgX3R4dEZpbGVOYW1lZm9yU2F2ZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4dF9maWxlTmFtZScpO1xyXG5cdFx0aWYgKF90eHRGaWxlTmFtZWZvclNhdmUpIHtcclxuXHRcdFx0X3R4dEZpbGVOYW1lZm9yU2F2ZS5jbGFzc05hbWUgPSAnJztcclxuXHRcdH1cclxuXHRcdGxldCBiU2F2ZTogYW55ID0gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3Qgc3RyRmlsZVBhdGggPSBfdHh0RmlsZU5hbWVmb3JTYXZlLnZhbHVlICsgJy4nICsgc3RyaW1nVHlwZV9zYXZlO1xyXG5cclxuXHRcdGNvbnN0IE9uU3VjY2VzcyA9ICgpID0+IHtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5TYXZlIEltYWdlOiA8L2I+Jyk7XHJcblx0XHRcdHRoaXMuY2hlY2tFcnJvclN0cmluZ1dpdGhFcnJvckNvZGUoMCwgJ1N1Y2Nlc3NmdWwuJyk7XHJcblx0XHR9O1xyXG5cclxuXHRcdGNvbnN0IE9uRmFpbHVyZSA9IChlcnJvckNvZGUsIGVycm9yU3RyaW5nKSA9PiB7XHJcblx0XHRcdHRoaXMuY2hlY2tFcnJvclN0cmluZ1dpdGhFcnJvckNvZGUoZXJyb3JDb2RlLCBlcnJvclN0cmluZyk7XHJcblx0XHR9O1xyXG5cclxuXHRcdGJTYXZlID0gdGhpcy5EV09iamVjdC5TYXZlQWxsQXNQREYoc3RyRmlsZVBhdGgsIE9uU3VjY2VzcywgT25GYWlsdXJlKTtcclxuXHJcblx0XHRpZiAoYlNhdmUpIHtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5TYXZlIEltYWdlOiA8L2I+Jyk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIFVwbG9hZCBJbWFnZSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRtYWtlaWQobGVuZ3RoKSB7XHJcblx0XHRsZXQgcmVzdWx0ID0gJyc7XHJcblx0XHRjb25zdCBjaGFyYWN0ZXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcclxuXHRcdGNvbnN0IGNoYXJhY3RlcnNMZW5ndGggPSBjaGFyYWN0ZXJzLmxlbmd0aDtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0cmVzdWx0ICs9IGNoYXJhY3RlcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjb252ZXJ0VG9CbG9iKCkge1xyXG5cdFx0Ly8gdGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnVwbG9hZFN0YXJ0LmVtaXQodHJ1ZSk7XHJcblx0XHRjb25zdCBwYWdlcyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuRFdPYmplY3Q/Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlcjsgaW5kZXgrKykge1xyXG5cdFx0XHRwYWdlcy5wdXNoKGluZGV4KTtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuQ29udmVydFRvQmxvYihcclxuXHRcdFx0cGFnZXMsXHJcblx0XHRcdER5bmFtc29mdC5EV1QuRW51bURXVF9JbWFnZVR5cGUuSVRfUERGLFxyXG5cdFx0XHQocmVzdWx0LCBpbmRpY2VzLCB0eXBlKSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0Lmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0XHRcdHJlc3VsdC5uYW1lID0gJ3NjYW4tJyArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJlc3VsdC5sYXN0TW9kaWZpZWREYXRlLCAnZGQtTU0teXl5eScpICsgJy5wZGYnO1xyXG5cdFx0XHRcdHRoaXMudXBsb2FkZXJTZXJ2aWNlXHJcblx0XHRcdFx0XHQudXBsb2FkKFtyZXN1bHRdKVxyXG5cdFx0XHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG5cdFx0XHRcdFx0LnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGV2ZW50LnR5cGUgPT0gRmlsZUV2ZW50VHlwZS5Db21wbGV0ZSkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZmlsZS5uZXh0KGV2ZW50LmRhdGFbMF0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0KGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhlcnJvclN0cmluZyk7XHJcblx0XHRcdFx0Ly8gdGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnVwbG9hZFN0YXJ0LmVtaXQoZmFsc2UpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29udmVydFRvQmxvYkZvclNhdmluZygpIHtcclxuXHRcdGNvbnN0IHBhZ2VzID0gW107XHJcblx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5EV09iamVjdD8uSG93TWFueUltYWdlc0luQnVmZmVyOyBpbmRleCsrKSB7XHJcblx0XHRcdHBhZ2VzLnB1c2goaW5kZXgpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5Db252ZXJ0VG9CbG9iKFxyXG5cdFx0XHRwYWdlcyxcclxuXHRcdFx0RHluYW1zb2Z0LkRXVC5FbnVtRFdUX0ltYWdlVHlwZS5JVF9QREYsXHJcblx0XHRcdChyZXN1bHQsIGluZGljZXMsIHR5cGUpID0+IHtcclxuXHRcdFx0XHRyZXN1bHQubGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblx0XHRcdFx0cmVzdWx0Lm5hbWUgPSAnc2Nhbi0nICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVzdWx0Lmxhc3RNb2RpZmllZERhdGUsICdkZC1NTS15eXl5JykgKyAnLnBkZic7XHJcblx0XHRcdFx0Ly8gdGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnN0b3JlZEZpbGUgPSByZXN1bHQ7XHJcblx0XHRcdFx0dGhpcy5vbk1pbmltaXppbmdTdWJzY3JpcHRpb24gPyB0aGlzLm9uTWluaW1pemluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpIDogJyc7XHJcblx0XHRcdH0sXHJcblx0XHRcdChlcnJvckNvZGUsIGVycm9yU3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coZXJyb3JTdHJpbmcpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIE5hdmlnYXRvciBmdW5jdGlvbnMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdGJ0bkZpcnN0SW1hZ2Vfb25jbGljaygpIHtcclxuXHRcdGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPSAwO1xyXG5cdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdH1cclxuXHJcblx0YnRuUHJlSW1hZ2Vfd2hlZWwoKSB7XHJcblx0XHRpZiAodGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgIT09IDApIHtcclxuXHRcdFx0dGhpcy5idG5QcmVJbWFnZV9vbmNsaWNrKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRidG5OZXh0SW1hZ2Vfd2hlZWwoKSB7XHJcblx0XHRpZiAodGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgIT09IDApIHtcclxuXHRcdFx0dGhpcy5idG5OZXh0SW1hZ2Vfb25jbGljaygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YnRuUHJlSW1hZ2Vfb25jbGljaygpIHtcclxuXHRcdGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciA9PT0gMCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPSB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgLSAxO1xyXG5cdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdH1cclxuXHRidG5OZXh0SW1hZ2Vfb25jbGljaygpIHtcclxuXHRcdGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciA9PT0gdGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgLSAxKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciA9IHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciArIDE7XHJcblx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0fVxyXG5cclxuXHRidG5MYXN0SW1hZ2Vfb25jbGljaygpIHtcclxuXHRcdGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPSB0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlciAtIDE7XHJcblx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0fVxyXG5cclxuXHRidG5SZW1vdmVDdXJyZW50SW1hZ2Vfb25jbGljaygpIHtcclxuXHRcdGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LlJlbW92ZUFsbFNlbGVjdGVkSW1hZ2VzKCk7XHJcblx0XHRpZiAodGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgPT09IDApIHtcclxuXHRcdFx0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19Ub3RhbEltYWdlJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSB0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlcjtcclxuXHRcdFx0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19DdXJyZW50SW1hZ2UnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9ICcnO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRidG5SZW1vdmVBbGxJbWFnZXNfb25jbGljaygpIHtcclxuXHRcdGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LlJlbW92ZUFsbEltYWdlcygpO1xyXG5cdFx0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19Ub3RhbEltYWdlJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSAnMCc7XHJcblx0XHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX0N1cnJlbnRJbWFnZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gJyc7XHJcblx0fVxyXG5cdHNldGxQcmV2aWV3TW9kZSgpIHtcclxuXHRcdGNvbnN0IHZhck51bSA9IHBhcnNlSW50KFxyXG5cdFx0XHQoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19QcmV2aWV3TW9kZScpIGFzIEhUTUxTZWxlY3RFbGVtZW50KS5zZWxlY3RlZEluZGV4ICsgMSkudG9TdHJpbmcoKSxcclxuXHRcdFx0MTBcclxuXHRcdCk7XHJcblx0XHRjb25zdCBidG5Dcm9wOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuQ3JvcCcpO1xyXG5cdFx0aWYgKGJ0bkNyb3ApIHtcclxuXHRcdFx0bGV0IHRtcHN0ciA9IGJ0bkNyb3Auc3JjO1xyXG5cdFx0XHRpZiAodmFyTnVtID4gMSkge1xyXG5cdFx0XHRcdHRtcHN0ciA9IHRtcHN0ci5yZXBsYWNlKCdDcm9wLicsICdDcm9wX2dyYXkuJyk7XHJcblx0XHRcdFx0YnRuQ3JvcC5zcmMgPSB0bXBzdHI7XHJcblx0XHRcdFx0YnRuQ3JvcC5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dG1wc3RyID0gdG1wc3RyLnJlcGxhY2UoJ0Nyb3BfZ3JheS4nLCAnQ3JvcC4nKTtcclxuXHRcdFx0XHRidG5Dcm9wLnNyYyA9IHRtcHN0cjtcclxuXHRcdFx0XHRidG5Dcm9wLm9uY2xpY2sgPSAoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmJ0bkNyb3Bfb25jbGljaygpO1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLkRXT2JqZWN0LlNldFZpZXdNb2RlKHZhck51bSwgdmFyTnVtKTtcclxuXHRcdGlmIChEeW5hbXNvZnQuTGliLmVudi5iTWFjIHx8IER5bmFtc29mdC5MaWIuZW52LmJMaW51eCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9IGVsc2UgaWYgKChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfUHJldmlld01vZGUnKSBhcyBIVE1MU2VsZWN0RWxlbWVudCkuc2VsZWN0ZWRJbmRleCAhPT0gMCkge1xyXG5cdFx0XHR0aGlzLkRXT2JqZWN0Lk1vdXNlU2hhcGUgPSB0cnVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5EV09iamVjdC5Nb3VzZVNoYXBlID0gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnJhZGlvIHJlc3BvbnNlKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRyZFRJRkZfb25jbGljaygpIHtcclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VUSUZGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlVElGRicpO1xyXG5cdFx0X2Noa011bHRpUGFnZVRJRkYuZGlzYWJsZWQgPSBmYWxzZTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VUSUZGLmNoZWNrZWQgPSBmYWxzZTtcclxuXHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlUERGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlUERGJyk7XHJcblx0XHRfY2hrTXVsdGlQYWdlUERGLmNoZWNrZWQgPSBmYWxzZTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VQREYuZGlzYWJsZWQgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0cmRQREZfb25jbGljaygpIHtcclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VUSUZGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlVElGRicpO1xyXG5cdFx0X2Noa011bHRpUGFnZVRJRkYuY2hlY2tlZCA9IGZhbHNlO1xyXG5cdFx0X2Noa011bHRpUGFnZVRJRkYuZGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VQREY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VQREYnKTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VQREYuZGlzYWJsZWQgPSBmYWxzZTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VQREYuY2hlY2tlZCA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRyZF9vbmNsaWNrKCkge1xyXG5cdFx0Y29uc3QgX2Noa011bHRpUGFnZVRJRkY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VUSUZGJyk7XHJcblx0XHRfY2hrTXVsdGlQYWdlVElGRi5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRfY2hrTXVsdGlQYWdlVElGRi5kaXNhYmxlZCA9IHRydWU7XHJcblxyXG5cdFx0Y29uc3QgX2Noa011bHRpUGFnZVBERjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVBERicpO1xyXG5cdFx0X2Noa011bHRpUGFnZVBERi5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRfY2hrTXVsdGlQYWdlUERGLmRpc2FibGVkID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gKioqKioqKioqKioqKioqKioqKioqKioqKiogRHluYW1pYyBXZWIgVFdBSU4gRXZlbnRzKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHREeW5hbXNvZnRfT25Qb3N0VHJhbnNmZXIgPSAoKSA9PiB7XHJcblx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0fTtcclxuXHJcblx0RHluYW1zb2Z0X09uUG9zdExvYWRmdW5jdGlvbiA9IChwYXRoLCBuYW1lLCB0eXBlKSA9PiB7XHJcblx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0fTtcclxuXHJcblx0RHluYW1zb2Z0X09uUG9zdEFsbFRyYW5zZmVycyA9ICgpID0+IHtcclxuXHRcdHRoaXMuRFdPYmplY3QuQ2xvc2VTb3VyY2UoKTtcclxuXHRcdHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuXHRcdHRoaXMuY2hlY2tFcnJvclN0cmluZygpO1xyXG5cdH07XHJcblxyXG5cdER5bmFtc29mdF9Pbk1vdXNlQ2xpY2sgPSAoaW5kZXgpID0+IHtcclxuXHRcdHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuXHR9O1xyXG5cclxuXHREeW5hbXNvZnRfT25Nb3VzZVJpZ2h0Q2xpY2sgPSAoaW5kZXgpID0+IHtcclxuXHRcdC8vIFRvIGFkZFxyXG5cdH07XHJcblxyXG5cdER5bmFtc29mdF9PbkltYWdlQXJlYVNlbGVjdGVkID0gKGluZGV4LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pID0+IHtcclxuXHRcdHRoaXMuX2lMZWZ0ID0gbGVmdDtcclxuXHRcdHRoaXMuX2lUb3AgPSB0b3A7XHJcblx0XHR0aGlzLl9pUmlnaHQgPSByaWdodDtcclxuXHRcdHRoaXMuX2lCb3R0b20gPSBib3R0b207XHJcblx0fTtcclxuXHJcblx0RHluYW1zb2Z0X09uSW1hZ2VBcmVhRGVzZWxlY3RlZCA9IChpbmRleCkgPT4ge1xyXG5cdFx0dGhpcy5faUxlZnQgPSAwO1xyXG5cdFx0dGhpcy5faVRvcCA9IDA7XHJcblx0XHR0aGlzLl9pUmlnaHQgPSAwO1xyXG5cdFx0dGhpcy5faUJvdHRvbSA9IDA7XHJcblx0fTtcclxuXHJcblx0RHluYW1zb2Z0X09uTW91c2VEb3VibGVDbGljaygpIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdER5bmFtc29mdF9PblRvcEltYWdlSW5UaGVWaWV3Q2hhbmdlZCA9IChpbmRleCkgPT4ge1xyXG5cdFx0dGhpcy5faUxlZnQgPSAwO1xyXG5cdFx0dGhpcy5faVRvcCA9IDA7XHJcblx0XHR0aGlzLl9pUmlnaHQgPSAwO1xyXG5cdFx0dGhpcy5faUJvdHRvbSA9IDA7XHJcblx0XHR0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPSBpbmRleDtcclxuXHRcdHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuXHR9O1xyXG5cclxuXHREeW5hbXNvZnRfT25HZXRGaWxlUGF0aCA9IChiU2F2ZSwgY291bnQsIGluZGV4LCBwYXRoLCBuYW1lKSA9PiB7fTtcclxuXHRuZ09uRGVzdHJveSgpIHtcclxuXHRcdHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG5cdFx0dGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG5cdH1cclxufVxyXG4iLCI8ZGl2IGlkPVwiRFdUY29udGFpbmVyXCIgY2xhc3M9XCJoLWZ1bGxcIj5cclxuXHQ8ZGl2IGlkPVwiRFdUY29udGFpbmVyVG9wXCI+XHJcblx0XHQ8ZGl2IGlkPVwiZGl2RWRpdFwiPlxyXG5cdFx0XHQ8dWwgY2xhc3M9XCJvcGVyYXRlR3JwXCI+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIuc2hvd0ltYWdlRWRpdG9yJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJidG5TaG93SW1hZ2VFZGl0b3Jfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpFZGl0b3InXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIucm90YXRlTGVmdCcgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiYnRuUm90YXRlTGVmdF9vbmNsaWNrKClcIlxyXG5cdFx0XHRcdFx0XHRjbGFzcz1cImZpbHRlci1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0W3N2Z0ljb25dPVwiJ2ljb25zOlJvdGF0ZS1MZWZ0J1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLnJvdGF0ZVJpZ2h0JyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJidG5Sb3RhdGVSaWdodF9vbmNsaWNrKClcIlxyXG5cdFx0XHRcdFx0XHRjbGFzcz1cImZpbHRlci1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0W3N2Z0ljb25dPVwiJ2ljb25zOlJvdGF0ZS1SaWdodCdcIlxyXG5cdFx0XHRcdFx0PjwvbWF0LWljb24+XHJcblx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHQ8bGkgY2xzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGxlYWRpbmctbm9uZSB3LTE1IGgtMTVcIj5cclxuXHRcdFx0XHRcdDxtYXQtaWNvblxyXG5cdFx0XHRcdFx0XHRbbWF0VG9vbHRpcF09XCInc2Nhbm5lci5yb3RhdGUxODAnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImJ0blJvdGF0ZTE4MF9vbmNsaWNrKClcIlxyXG5cdFx0XHRcdFx0XHRjbGFzcz1cImZpbHRlci1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0W3N2Z0ljb25dPVwiJ2ljb25zOlJvdGF0ZS0xODAnXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIubWlycm9yJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJidG5NaXJyb3Jfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpmbGlwLWhvcml6b250YWwnXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIuZmxpcCcgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiYnRuRmxpcF9vbmNsaWNrKClcIlxyXG5cdFx0XHRcdFx0XHRjbGFzcz1cImZpbHRlci1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0W3N2Z0ljb25dPVwiJ2ljb25zOmZsaXAtdmVydGljYWwnXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIucmVtb3ZlU2VsZWN0ZWQnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImJ0blJlbW92ZUN1cnJlbnRJbWFnZV9vbmNsaWNrKClcIlxyXG5cdFx0XHRcdFx0XHRjbGFzcz1cImZpbHRlci1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0W3N2Z0ljb25dPVwiJ2ljb25zOlJlbW92ZUltYWdlcydcIlxyXG5cdFx0XHRcdFx0PjwvbWF0LWljb24+XHJcblx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHQ8bGkgY2xzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGxlYWRpbmctbm9uZSB3LTE1IGgtMTVcIj5cclxuXHRcdFx0XHRcdDxtYXQtaWNvblxyXG5cdFx0XHRcdFx0XHRbbWF0VG9vbHRpcF09XCInc2Nhbm5lci5yZW1vdmVBbGwnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImJ0blJlbW92ZUFsbEltYWdlc19vbmNsaWNrKClcIlxyXG5cdFx0XHRcdFx0XHRjbGFzcz1cImZpbHRlci1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0W3N2Z0ljb25dPVwiJ2ljb25zOlJlbW92ZUFsbEltYWdlcydcIlxyXG5cdFx0XHRcdFx0PjwvbWF0LWljb24+XHJcblx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHQ8bGkgY2xzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGxlYWRpbmctbm9uZSB3LTE1IGgtMTVcIj5cclxuXHRcdFx0XHRcdDxtYXQtaWNvblxyXG5cdFx0XHRcdFx0XHRbbWF0VG9vbHRpcF09XCInc2Nhbm5lci5yZXNpemUnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImJ0bkNoYW5nZUltYWdlU2l6ZV9vbmNsaWNrKClcIlxyXG5cdFx0XHRcdFx0XHRjbGFzcz1cImZpbHRlci1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0W3N2Z0ljb25dPVwiJ2ljb25zOmNoYW5nZVNpemUnXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIuY3JvcCcgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiYnRuQ3JvcF9vbmNsaWNrKClcIlxyXG5cdFx0XHRcdFx0XHRjbGFzcz1cImZpbHRlci1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0W3N2Z0ljb25dPVwiJ2ljb25zOmNyb3AnXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdDwvdWw+XHJcblx0XHRcdDxkaXYgaWQ9XCJJbWdTaXplRWRpdG9yXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW5cIj5cclxuXHRcdFx0XHQ8dWw+XHJcblx0XHRcdFx0XHQ8bGk+XHJcblx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJpbWdfaGVpZ2h0XCJcclxuXHRcdFx0XHRcdFx0XHQ+e3sgJ3NjYW5uZXIubmV3SGVpZ2h0JyB8IHRyYW5zbGF0ZSB9fSA6XHJcblx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJpbWdfaGVpZ2h0XCIgc3R5bGU9XCJ3aWR0aDogNTAlXCIgc2l6ZT1cIjEwXCIgLz5cclxuXHRcdFx0XHRcdFx0XHR7eyAnc2Nhbm5lci5waXhlbCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+XHJcblx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJpbWdfd2lkdGhcIlxyXG5cdFx0XHRcdFx0XHRcdD57eyAnc2Nhbm5lci5uZXdXaWR0aCcgfCB0cmFuc2xhdGUgfX0gOiZuYnNwO1xyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiaW1nX3dpZHRoXCIgc3R5bGU9XCJ3aWR0aDogNTAlXCIgc2l6ZT1cIjEwXCIgLz5cclxuXHRcdFx0XHRcdFx0XHR7eyAnc2Nhbm5lci5waXhlbCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+XHJcblx0XHRcdFx0XHRcdHt7ICdzY2FubmVyLkludGVycG9sYXRpb25NZXRob2QnIHwgdHJhbnNsYXRlIH19OlxyXG5cdFx0XHRcdFx0XHQ8c2VsZWN0IHNpemU9XCIxXCIgaWQ9XCJJbnRlcnBvbGF0aW9uTWV0aG9kXCI+XHJcblx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPlxyXG5cdFx0XHRcdFx0XHQ8L3NlbGVjdD5cclxuXHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHQ8bGkgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIiAgIE9LICAgXCIgaWQ9XCJidG5DaGFuZ2VJbWFnZVNpemVPS1wiIChjbGljayk9XCJidG5DaGFuZ2VJbWFnZVNpemVPS19vbmNsaWNrKClcIiAvPlxyXG5cdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiIENhbmNlbCBcIiBpZD1cImJ0bkNhbmNlbENoYW5nZVwiIChjbGljayk9XCJidG5DYW5jZWxDaGFuZ2Vfb25jbGljaygpXCIgLz5cclxuXHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PC91bD5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxkaXYgaWQ9XCJkd3Rjb250cm9sQ29udGFpbmVyXCI+PC9kaXY+XHJcblx0XHQ8ZGl2IGNsYXNzPVwidy1mdWxsXCIgaWQ9XCJsb2FkZXJcIj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtZnVsbFwiPlxyXG5cdFx0XHRcdDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdiBpZD1cImJ0bkdyb3VwQnRtXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJjdC1sdFwiPlxyXG5cdFx0XHRcdHt7ICdzY2FubmVyLnBhZ2UnIHwgdHJhbnNsYXRlIH19OlxyXG5cdFx0XHRcdDxpbnB1dCBpZD1cIkRXX2J0bkZpcnN0SW1hZ2VcIiAoY2xpY2spPVwiYnRuRmlyc3RJbWFnZV9vbmNsaWNrKClcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCIgfDwgXCIgLz4mbmJzcDtcclxuXHRcdFx0XHQ8aW5wdXQgaWQ9XCJEV19idG5QcmVJbWFnZVwiIChjbGljayk9XCJidG5QcmVJbWFnZV9vbmNsaWNrKClcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCIgPCBcIiAvPiZuYnNwOyZuYnNwO1xyXG5cdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCIyXCIgaWQ9XCJEV19DdXJyZW50SW1hZ2VcIiByZWFkb25seT1cInJlYWRvbmx5XCIgLz5cclxuXHRcdFx0XHQvXHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIjJcIiBpZD1cIkRXX1RvdGFsSW1hZ2VcIiByZWFkb25seT1cInJlYWRvbmx5XCIgLz4mbmJzcDsmbmJzcDtcclxuXHRcdFx0XHQ8aW5wdXQgaWQ9XCJEV19idG5OZXh0SW1hZ2VcIiAoY2xpY2spPVwiYnRuTmV4dEltYWdlX29uY2xpY2soKVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj4gXCIgLz4mbmJzcDtcclxuXHRcdFx0XHQ8aW5wdXQgaWQ9XCJEV19idG5MYXN0SW1hZ2VcIiAoY2xpY2spPVwiYnRuTGFzdEltYWdlX29uY2xpY2soKVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj58IFwiIC8+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY3QtcnRcIj5cclxuXHRcdFx0XHR7eyAnc2Nhbm5lci5wcmV2aWV3JyB8IHRyYW5zbGF0ZSB9fTpcclxuXHRcdFx0XHQ8c2VsZWN0IHNpemU9XCIxXCIgaWQ9XCJEV19QcmV2aWV3TW9kZVwiIChjaGFuZ2UpPVwic2V0bFByZXZpZXdNb2RlKClcIj5cclxuXHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCIwXCI+MVgxPC9vcHRpb24+XHJcblx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiMVwiPjJYMjwvb3B0aW9uPlxyXG5cdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cIjJcIj4zWDM8L29wdGlvbj5cclxuXHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCIzXCI+NFg0PC9vcHRpb24+XHJcblx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiNFwiPjVYNTwvb3B0aW9uPjwvc2VsZWN0XHJcblx0XHRcdFx0PjxiciAvPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG5cdDxkaXYgaWQ9XCJTY2FuV3JhcHBlclwiPlxyXG5cdFx0PGRpdiBpZD1cImRpdlNjYW5uZXJcIiBjbGFzcz1cImRpdmlucHV0XCI+XHJcblx0XHRcdDxkaXYgaWQ9XCJkaXZfU2NhbkltYWdlXCIgY2xhc3M9XCJkaXZUYWJsZVN0eWxlXCI+XHJcblx0XHRcdFx0PHVsIGlkPVwidWxTY2FuZUltYWdlSElERVwiPlxyXG5cdFx0XHRcdFx0PGxpPlxyXG5cdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwic291cmNlXCI+XHJcblx0XHRcdFx0XHRcdFx0PHA+e3sgJ3NjYW5uZXIuc291cmNlJyB8IHRyYW5zbGF0ZSB9fTo8L3A+XHJcblx0XHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdDxzZWxlY3Qgc2l6ZT1cIjFcIiBpZD1cInNvdXJjZVwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCIgKGNoYW5nZSk9XCJzb3VyY2Vfb25jaGFuZ2UoKVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj5cclxuXHRcdFx0XHRcdFx0PC9zZWxlY3Q+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0PGxpIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIGlkPVwicE5vU2Nhbm5lclwiPlxyXG5cdFx0XHRcdFx0XHQ8YSBocmVmPVwiamF2YXNjcmlwdDogdm9pZCgwKVwiIGNsYXNzPVwiU2hvd3RibExvYWRJbWFnZVwiIHN0eWxlPVwiY29sb3I6ICNmZThlMTRcIiBpZD1cImFOb1NjYW5uZXJcIlxyXG5cdFx0XHRcdFx0XHRcdD4oTm8gVFdBSU4gY29tcGF0aWJsZSBkcml2ZXJzIGRldGVjdGVkKTwvYVxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0PGxpIGlkPVwiZGl2UHJvZHVjdERldGFpbFwiPlxyXG5cdFx0XHRcdFx0XHQ8dWwgaWQ9XCJkaXZUd2FpblR5cGVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bGk+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgaWQ9XCJsYmxTaG93VUlcIiBmb3I9XCJTaG93VUlcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiU2hvd1VJXCIgLz57eyAnc2Nhbm5lci5TaG93VUknIHwgdHJhbnNsYXRlIH19Jm5ic3A7PC9sYWJlbFxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIkFERlwiPiA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJBREZcIiAvPnt7ICdzY2FubmVyLkF1dG9GZWVkZXInIHwgdHJhbnNsYXRlIH19Jm5ic3A7PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJEdXBsZXhcIj4gPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiRHVwbGV4XCIgLz57eyAnc2Nhbm5lci5EdXBsZXgnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0XHRcdDxsaT5cclxuXHRcdFx0XHRcdFx0XHRcdHt7ICdzY2FubmVyLlBpeGVsVHlwZScgfCB0cmFuc2xhdGUgfX06XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiQldcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA1cHhcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYWRpb1wiIGlkPVwiQldcIiBuYW1lPVwiUGl4ZWxUeXBlXCIgLz57eyAnc2Nhbm5lci5CJlcnIHwgdHJhbnNsYXRlIH19PC9sYWJlbFxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIkdyYXlcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYWRpb1wiIGlkPVwiR3JheVwiIG5hbWU9XCJQaXhlbFR5cGVcIiAvPnt7ICdzY2FubmVyLkdyYXknIHwgdHJhbnNsYXRlIH19PC9sYWJlbFxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIlJHQlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhZGlvXCIgaWQ9XCJSR0JcIiBuYW1lPVwiUGl4ZWxUeXBlXCIgLz57eyAnc2Nhbm5lci5Db2xvcicgfCB0cmFuc2xhdGUgfX08L2xhYmVsXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHQ8bGk+XHJcblx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj57eyAnc2Nhbm5lci5SZXNvbHV0aW9uJyB8IHRyYW5zbGF0ZSB9fTombmJzcDs8L3NwYW5cclxuXHRcdFx0XHRcdFx0XHRcdD48c2VsZWN0IHNpemU9XCIxXCIgaWQ9XCJSZXNvbHV0aW9uXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCIxMDBcIj4xMDA8L29wdGlvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cIjE1MFwiPjE1MDwvb3B0aW9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiMjAwXCI+MjAwPC9vcHRpb24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCIzMDBcIiBzZWxlY3RlZD4zMDA8L29wdGlvbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvc2VsZWN0PlxyXG5cdFx0XHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHRcdDwvdWw+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdGlkPVwiYnRuU2NhblwiXHJcblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImFjcXVpcmVJbWFnZSgpXCJcclxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cImFjdGlvbi1idG4gYWN0aW9uLWJ0bl8yXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDxpIGNsYXNzPVwiYmkgYmktdXBjLXVwbG9hZCBpY29uXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuPiB7eyAnc2Nhbm5lci5zY2FuRmlsZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImJ0bkxvYWRJbWFnZXNPclBERnNfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cImFjdGlvbi1idG4gYWN0aW9uLWJ0bl8xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC14LTJcIlxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJiaSBiaS11cGxvYWQgaWNvblwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj4ge3sgJ3NjYW5uZXIubG9hZEZpbGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvdWw+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBteC0zXCI+XHJcblx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRjbGFzcz1cImJ0biBzYXZlLWJ1dHRvblwiXHJcblx0XHRcdFx0W25nQ2xhc3NdPVwieyAnaGlkZS11cGxvYWQtYnV0dG9uJzogaGlkZVVwbG9hZEJ1dHRvbiB9XCJcclxuXHRcdFx0XHQjc2Nhbm5lclVwbG9hZEJ1dHRvblxyXG5cdFx0XHRcdGlkPVwic2Nhbm5lclVwbG9hZEJ1dHRvblwiXHJcblx0XHRcdFx0W2Rpc2FibGVkXT1cIkRXT2JqZWN0Py5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgPT09IDBcIlxyXG5cdFx0XHRcdGNvbG9yPVwicHJpbWFyeVwiXHJcblx0XHRcdFx0KGNsaWNrKT1cImNvbnZlcnRUb0Jsb2IoKVwiXHJcblx0XHRcdD5cclxuXHRcdFx0XHR7eyAnc2Nhbm5lci5zYXZlRmlsZScgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0PC9idXR0b24+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
966
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmRmLXNjYW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9uZGYtc2Nhbm5lci9uZGYtc2Nhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL25kZi1zY2FubmVyL25kZi1zY2FubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFZLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxTQUFTLE1BQU0sS0FBSyxDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBUzVDLE1BQU0sT0FBTyxtQkFBbUI7SUF5Qi9CLFlBQ1EsU0FBMkIsRUFDM0IsZ0JBQWtDLEVBQ3hCLGVBQW1DLEVBQzdDLFFBQWtCLEVBQ00sUUFBZ0I7UUFKeEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNNLGFBQVEsR0FB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QUUsYUFBYTtvQkFDdkIsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsOEJBQThCLENBQUM7b0JBQzNDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7b0JBQzlCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUNyQzs7MEJBK0JFLE1BQU07MkJBQUMsYUFBYTs0Q0EzQmIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUdOLElBQUk7c0JBREgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0QWZ0ZXJWaWV3SW5pdCxcclxuXHRDb21wb25lbnQsXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdEluamVjdCxcclxuXHRJbnB1dCxcclxuXHRPbkNoYW5nZXMsXHJcblx0T25EZXN0cm95LFxyXG5cdE9uSW5pdCxcclxuXHRPdXRwdXQsXHJcblx0Vmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBBUFBfQkFTRV9IUkVGLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCBEeW5hbXNvZnQgZnJvbSAnZHd0JztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERvY3VtZW50c1NlcnZpY2UgfSBmcm9tICcuLi9kb2N1bWVudHMvc2VydmljZXMvZG9jdW1lbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlRXZlbnRUeXBlLCBOZGZVcGxvYWRlclNlcnZpY2UgfSBmcm9tICcuLi9uZGYtdXBsb2FkZXInO1xyXG5pbXBvcnQgeyBFbnZNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vY29yZS9lbnYnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICduZGYtc2Nhbm5lcicsXHJcblx0dGVtcGxhdGVVcmw6ICcuL25kZi1zY2FubmVyLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9uZGYtc2Nhbm5lci5jb21wb25lbnQuc2NzcyddLFxyXG5cdGhvc3Q6IHsgY2xhc3M6ICduZGYtc2Nhbm5lcicgfSxcclxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZGZTY2FubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcblx0dXBsb2FkZWRGaWxlO1xyXG5cdG9uTWluaW1pemluZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdEBJbnB1dCgpIHVzZVN0b3JlZEZpbGUgPSBmYWxzZTtcclxuXHRASW5wdXQoKSBoaWRlVXBsb2FkQnV0dG9uID0gZmFsc2U7XHJcblx0QElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBiYXRjaCBpcyB1cGxvYWRlZCAqL1xyXG5cdEBPdXRwdXQoKVxyXG5cdGZpbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cdERXT2JqZWN0O1xyXG5cdHNlbGVjdFNvdXJjZXM6IEhUTUxTZWxlY3RFbGVtZW50O1xyXG5cdERXVFNvdXJjZUNvdW50ID0gMDtcclxuXHRmaWxlbmFtZSA9ICcnO1xyXG5cdGNvbnRhaW5lcklkID0gJ2R3dGNvbnRyb2xDb250YWluZXInO1xyXG5cdGJXQVNNID0gRHluYW1zb2Z0LkxpYi5lbnYuYk1vYmlsZSB8fCBEeW5hbXNvZnQuRFdULlVzZUxvY2FsU2VydmljZTtcclxuXHRfaUxlZnQ7XHJcblx0X2lUb3A7XHJcblx0X2lSaWdodDtcclxuXHRfaUJvdHRvbTtcclxuXHRfc3RyVGVtcFN0ciA9ICcnO1xyXG5cdHJlID0gL15cXGQrJC87XHJcblx0c3RycmUgPSAvXltcXHNcXHddKyQvO1xyXG5cdHJlZmxvYXQgPSAvXlxcZCtcXC4qXFxkKiQvaTtcclxuXHRpbm5lckhUTUw6IHN0cmluZztcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgZG9jdW1lbnRzU2VydmljZTogRG9jdW1lbnRzU2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgdXBsb2FkZXJTZXJ2aWNlOiBOZGZVcGxvYWRlclNlcnZpY2UsXHJcblx0XHRwdWJsaWMgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG5cdFx0QEluamVjdChBUFBfQkFTRV9IUkVGKSBwcml2YXRlIGJhc2VIcmVmOiBzdHJpbmdcclxuXHQpIHt9XHJcblx0bmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5sb2FkaW5nKSB7XHJcblx0XHRcdHRoaXMuc2hvd0xvYWRlcigpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5oaWRlTG9hZGVyKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHNob3dMb2FkZXIoKSB7XHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHd0Y29udHJvbENvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9hZGVyJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdH1cclxuXHJcblx0aGlkZUxvYWRlcigpIHtcclxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2FkZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R3dGNvbnRyb2xDb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblx0fVxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5oaWRlTG9hZGVyKCk7XHJcblx0XHREeW5hbXNvZnQuRFdULlJlc291cmNlc1BhdGggPSB0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvZHd0LXJlc291cmNlcyc7XHJcblx0XHQvLy9cclxuXHRcdER5bmFtc29mdC5EV1QuQXV0b0xvYWQgPSB0cnVlO1xyXG5cdFx0Ly8vXHJcblx0XHQvLyBjb25zdCB3aWR0aCA9IHdpbmRvdy5vdXRlcldpZHRoICogMC4zO1xyXG5cdFx0Ly8gY29uc3QgaGVpZ2h0ID0gd2luZG93Lm91dGVySGVpZ2h0ICogMC4zO1xyXG5cdFx0RHluYW1zb2Z0LkRXVC5Db250YWluZXJzID0gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0V2ViVHdhaW5JZDogJ0RXVE9iamVjdCcsXHJcblx0XHRcdFx0Q29udGFpbmVySWQ6ICdkd3Rjb250cm9sQ29udGFpbmVyJyxcclxuXHRcdFx0XHRXaWR0aDogJzEwMCUnLFxyXG5cdFx0XHRcdEhlaWdodDogJzEwMCUnXHJcblx0XHRcdH1cclxuXHRcdF07XHJcblxyXG5cdFx0RHluYW1zb2Z0LkRXVC5Qcm9kdWN0S2V5ID0gRW52TWFuYWdlci5lbnZpcm9ubWVudC5keW5hbXNvZnRQcm9kdWN0S2V5O1xyXG5cdFx0Ly8gRHluYW1zb2Z0LkRXVC5UcmlhbCA9IGZhbHNlO1xyXG5cdFx0Ly8gRHluYW1zb2Z0LkRXVC5EZWJ1ZyA9IGZhbHNlOyAvLyBvbmx5IGZvciBkZWJ1Z2dlciBvdXRwdXRcclxuXHJcblx0XHQvLy9cclxuXHRcdER5bmFtc29mdC5EV1QuSWZBZGRNRDVJblVwbG9hZEhlYWRlciA9IGZhbHNlO1xyXG5cclxuXHRcdC8vL1xyXG5cdFx0RHluYW1zb2Z0LkRXVC5JZkNvbmZpbmVNYXNrV2l0aGluVGhlVmlld2VyID0gZmFsc2U7XHJcblx0XHREeW5hbXNvZnQuTVNHID0ge1xyXG5cdFx0XHRDb252ZXJ0aW5nVG9CYXNlNjQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuQ29udmVydGluZ1RvQmFzZTY0JyksXHJcblx0XHRcdENvbnZlcnRpbmdUb0Jsb2I6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuQ29udmVydGluZ1RvQmxvYicpLFxyXG5cdFx0XHREb3dubG9hZGluZzogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5Eb3dubG9hZGluZycpLFxyXG5cdFx0XHRFbmNvZGluZzogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5FbmNvZGluZycpLFxyXG5cdFx0XHRFcnJfQnJvd3Nlck5vdFN1cHBvcnRXYXNtOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLkVycl9Ccm93c2VyTm90U3VwcG9ydFdhc20nKSxcclxuXHRcdFx0SW5pdF9BbGxKc0xvYWRlZDogRHluYW1zb2Z0Lk1TRy5Jbml0X0FsbEpzTG9hZGVkLFxyXG5cdFx0XHRJbml0X0NoZWNrRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfQ2hlY2tEV1QsXHJcblx0XHRcdEluaXRfQ2hlY2tEV1RWZXJzaW9uOiBEeW5hbXNvZnQuTVNHLkluaXRfQ2hlY2tEV1RWZXJzaW9uLFxyXG5cdFx0XHRJbml0X0NoZWNraW5nTGljZW5zZTogRHluYW1zb2Z0Lk1TRy5Jbml0X0NoZWNraW5nTGljZW5zZSxcclxuXHRcdFx0SW5pdF9Db21waWxpbmdXYXNtOiBEeW5hbXNvZnQuTVNHLkluaXRfQ29tcGlsaW5nV2FzbSxcclxuXHRcdFx0SW5pdF9Db25maWd1cmluZ0RXVDogRHluYW1zb2Z0Lk1TRy5Jbml0X0NvbmZpZ3VyaW5nRFdULFxyXG5cdFx0XHRJbml0X0NyZWF0aW5nRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfQ3JlYXRpbmdEV1QsXHJcblx0XHRcdEluaXRfRG93bmxvYWRpbmdXYXNtOiBEeW5hbXNvZnQuTVNHLkluaXRfRG93bmxvYWRpbmdXYXNtLFxyXG5cdFx0XHRJbml0X0ZpcmVCZWZvcmVJbml0RXZ0OiBEeW5hbXNvZnQuTVNHLkluaXRfRmlyZUJlZm9yZUluaXRFdnQsXHJcblx0XHRcdEluaXRfR2V0TGljZW5zZUluZm9Gb3JEV1Q6IER5bmFtc29mdC5NU0cuSW5pdF9HZXRMaWNlbnNlSW5mb0ZvckRXVCxcclxuXHRcdFx0SW5pdF9Jbml0QWN0aXZlWDogRHluYW1zb2Z0Lk1TRy5Jbml0X0luaXRBY3RpdmVYLFxyXG5cdFx0XHRJbml0X0luaXREeW5hbXNvZnRTZXJ2aWNlOiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdER5bmFtc29mdFNlcnZpY2UsXHJcblx0XHRcdEluaXRfSW5pdEg1OiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdEg1LFxyXG5cdFx0XHRJbml0X0luaXRXYXNtOiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdFdhc20sXHJcblx0XHRcdEluaXRfTG9hZGluZ1ZpZXdlckpzOiBEeW5hbXNvZnQuTVNHLkluaXRfTG9hZGluZ1ZpZXdlckpzLFxyXG5cdFx0XHRJbml0X0xvb2tpbmdMaWNlbnNlOiBEeW5hbXNvZnQuTVNHLkluaXRfTG9va2luZ0xpY2Vuc2UsXHJcblx0XHRcdEluaXRfU2V0TGljZW5zZUZvckRXVDogRHluYW1zb2Z0Lk1TRy5Jbml0X1NldExpY2Vuc2VGb3JEV1QsXHJcblx0XHRcdExvYWRpbmc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuTG9hZGluZycpLFxyXG5cdFx0XHRMb2FkaW5nUGRmOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLkxvYWRpbmdQZGYnKSxcclxuXHRcdFx0TG9hZGluZ1RpZmY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuTG9hZGluZ1RpZmYnKSxcclxuXHRcdFx0U2F2aW5nUGRmOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLlNhdmluZ1BkZicpLFxyXG5cdFx0XHRTYXZpbmdUaWZmOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLlNhdmluZ1RpZmYnKSxcclxuXHRcdFx0VXBsb2FkaW5nOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLlVwbG9hZGluZycpXHJcblx0XHR9O1xyXG5cdFx0RHluYW1zb2Z0LkRXVC5DdXN0b21pemFibGVEaXNwbGF5SW5mbyA9IHtcclxuXHRcdFx0ZXJyb3JNZXNzYWdlczogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5lcnJvck1lc3NhZ2VzJyksXHJcblxyXG5cdFx0XHQvLyBsYXVuY2hcclxuXHRcdFx0Z2VuZXJhbE1lc3NhZ2VzOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLmdlbmVyYWxNZXNzYWdlcycpLFxyXG5cclxuXHRcdFx0Y3VzdG9tUHJvZ3Jlc3NUZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLmN1c3RvbVByb2dyZXNzVGV4dCcpLFxyXG5cclxuXHRcdFx0Ly8gaW1hZ2UgZWRpdG9yXHJcblx0XHRcdGJ1dHRvbnM6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuYnV0dG9ucycpLFxyXG5cclxuXHRcdFx0ZGlhbG9nVGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5kaWFsb2dUZXh0JylcclxuXHRcdH07XHJcblx0XHREeW5hbXNvZnQuRFdULk9uV2ViVHdhaW5SZWFkeSA9ICgpOiBhbnkgPT4ge1xyXG5cdFx0XHR0aGlzLnBhZ2VvbmxvYWQoKTtcclxuXHRcdFx0dGhpcy5EeW5hbXNvZnRfT25SZWFkeSgpO1xyXG5cdFx0fTtcclxuXHRcdER5bmFtc29mdC5EV1QuTG9hZCgpO1xyXG5cclxuXHRcdC8vIHRoaXMub25NaW5pbWl6aW5nU3Vic2NyaXB0aW9uID0gdGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLm9uTWluaW1pemluZy5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG5cdFx0Ly8gXHR0aGlzLmNvbnZlcnRUb0Jsb2JGb3JTYXZpbmcoKTtcclxuXHRcdC8vIH0pO1xyXG5cdH1cclxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XHJcblx0XHR0aGlzLnBhZ2VvbmxvYWQoKTtcclxuXHRcdC8vIGlmICh0aGlzLnVzZVN0b3JlZEZpbGUpIHtcclxuXHRcdC8vIFx0aWYgKHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS5zdG9yZWRGaWxlKSB7XHJcblx0XHQvLyBcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHQvLyBcdFx0XHR0aGlzLnNldFN0b3JlZEZpbGVUb1NjYW5uZXIodGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnN0b3JlZEZpbGUpO1xyXG5cdFx0Ly8gXHRcdH0sIDIwMDApO1xyXG5cdFx0Ly8gXHR9XHJcblx0XHQvLyB9XHJcblx0fVxyXG5cclxuXHRzZXRTdG9yZWRGaWxlVG9TY2FubmVyKHJlc3VsdCkge1xyXG5cdFx0dGhpcy5EV09iamVjdC5Mb2FkSW1hZ2VGcm9tQmluYXJ5KFxyXG5cdFx0XHRyZXN1bHQsXHJcblx0XHRcdGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnc3VjY2VzcycpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmdW5jdGlvbiAoZXJyb3JDb2RlLCBlcnJvclN0cmluZykge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGVycm9yU3RyaW5nKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHBhZ2VvbmxvYWQoKSB7XHJcblx0XHR0aGlzLkhpZGVMb2FkSW1hZ2VGb3JMaW51eCgpO1xyXG5cdFx0Y29uc3QgdHdhaW5zb3VyY2U6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKTtcclxuXHRcdGlmICh0d2FpbnNvdXJjZSkge1xyXG5cdFx0XHR0d2FpbnNvdXJjZS5vcHRpb25zLmxlbmd0aCA9IDA7XHJcblx0XHRcdHR3YWluc291cmNlLm9wdGlvbnMuYWRkKG5ldyBPcHRpb24odGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5wbGVhc2VXYWl0JyksICcwJykpO1xyXG5cdFx0XHR0d2FpbnNvdXJjZS5vcHRpb25zWzBdLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmluaXRpYXRlSW5wdXRzKCk7XHJcblx0fVxyXG5cclxuXHRIaWRlTG9hZEltYWdlRm9yTGludXgoKSB7XHJcblx0XHRjb25zdCBvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpTG9hZEltYWdlJyk7XHJcblx0XHRpZiAobykge1xyXG5cdFx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYkxpbnV4KSB7XHJcblx0XHRcdFx0by5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdG8uc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpbml0aWF0ZUlucHV0cygpIHtcclxuXHRcdGNvbnN0IGFsbGlucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhbGxpbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKGFsbGlucHV0c1tpXS50eXBlID09PSAnY2hlY2tib3gnKSB7XHJcblx0XHRcdFx0YWxsaW5wdXRzW2ldLmNoZWNrZWQgPSBmYWxzZTtcclxuXHRcdFx0fSBlbHNlIGlmIChhbGxpbnB1dHNbaV0udHlwZSA9PT0gJ3RleHQnKSB7XHJcblx0XHRcdFx0YWxsaW5wdXRzW2ldLnZhbHVlID0gJyc7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYklFID09PSB0cnVlICYmIHRoaXMuaXNXaW42NCgpKSB7XHJcblx0XHRcdGxldCBvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbXBsZXNvdXJjZTY0Yml0Jyk7XHJcblx0XHRcdGlmIChvKSB7XHJcblx0XHRcdFx0by5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxlc291cmNlMzJiaXQnKTtcclxuXHRcdFx0aWYgKG8pIHtcclxuXHRcdFx0XHRvLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aXNXaW42NCgpIHtcclxuXHRcdC8vIHJldHVybiAoXHJcblx0XHQvLyBcdG5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCdXaW4nKSAhPT0gLTEgJiZcclxuXHRcdC8vIFx0bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCd4NjQnKSAhPT0gLTFcclxuXHRcdC8vICk7XHJcblx0XHRyZXR1cm4gL1dpbmRvd3MgTlQuKng2NC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcclxuXHR9XHJcblx0aW5pdERsbEZvckNoYW5nZUltYWdlU2l6ZSgpIHtcclxuXHRcdGNvbnN0IHZJbnRlcnBvbGF0aW9uTWV0aG9kOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW50ZXJwb2xhdGlvbk1ldGhvZCcpO1xyXG5cdFx0dkludGVycG9sYXRpb25NZXRob2Qub3B0aW9ucy5sZW5ndGggPSAwO1xyXG5cdFx0dkludGVycG9sYXRpb25NZXRob2Qub3B0aW9ucy5hZGQobmV3IE9wdGlvbignTmVhcmVzdE5laWdoYm9yJywgJzEnKSk7XHJcblx0XHR2SW50ZXJwb2xhdGlvbk1ldGhvZC5vcHRpb25zLmFkZChuZXcgT3B0aW9uKCdCaWxpbmVhcicsICcyJykpO1xyXG5cdFx0dkludGVycG9sYXRpb25NZXRob2Qub3B0aW9ucy5hZGQobmV3IE9wdGlvbignQmljdWJpYycsICczJykpO1xyXG5cdH1cclxuXHJcblx0c2V0RGVmYXVsdFZhbHVlKCkge1xyXG5cdFx0Y29uc3QgdkdyYXk6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdHcmF5Jyk7XHJcblx0XHRpZiAodkdyYXkpIHtcclxuXHRcdFx0dkdyYXkuY2hlY2tlZCA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgdmFySW1nVHlwZXBuZzI6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdUeXBlcG5nMicpO1xyXG5cdFx0aWYgKHZhckltZ1R5cGVwbmcyKSB7XHJcblx0XHRcdHZhckltZ1R5cGVwbmcyLmNoZWNrZWQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgdmFySW1nVHlwZXBuZzogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ1R5cGVwbmcnKTtcclxuXHRcdGlmICh2YXJJbWdUeXBlcG5nKSB7XHJcblx0XHRcdHZhckltZ1R5cGVwbmcuY2hlY2tlZCA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgX3N0ckRlZmF1bHRTYXZlSW1hZ2VOYW1lID0gJ1dlYlRXQUlOSW1hZ2UnO1xyXG5cdFx0Y29uc3QgX3R4dEZpbGVOYW1lZm9yU2F2ZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4dF9maWxlTmFtZWZvclNhdmUnKTtcclxuXHRcdGlmIChfdHh0RmlsZU5hbWVmb3JTYXZlKSB7XHJcblx0XHRcdF90eHRGaWxlTmFtZWZvclNhdmUudmFsdWUgPSBfc3RyRGVmYXVsdFNhdmVJbWFnZU5hbWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgX3R4dEZpbGVOYW1lOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHh0X2ZpbGVOYW1lJyk7XHJcblx0XHRpZiAoX3R4dEZpbGVOYW1lKSB7XHJcblx0XHRcdF90eHRGaWxlTmFtZS52YWx1ZSA9IF9zdHJEZWZhdWx0U2F2ZUltYWdlTmFtZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlVElGRl9zYXZlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlVElGRl9zYXZlJyk7XHJcblx0XHRpZiAoX2Noa011bHRpUGFnZVRJRkZfc2F2ZSkge1xyXG5cdFx0XHRfY2hrTXVsdGlQYWdlVElGRl9zYXZlLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VQREZfc2F2ZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVBERl9zYXZlJyk7XHJcblx0XHRpZiAoX2Noa011bHRpUGFnZVBERl9zYXZlKSB7XHJcblx0XHRcdF9jaGtNdWx0aVBhZ2VQREZfc2F2ZS5kaXNhYmxlZCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlVElGRjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVRJRkYnKTtcclxuXHRcdGlmIChfY2hrTXVsdGlQYWdlVElGRikge1xyXG5cdFx0XHRfY2hrTXVsdGlQYWdlVElGRi5kaXNhYmxlZCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlUERGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlUERGJyk7XHJcblx0XHRpZiAoX2Noa011bHRpUGFnZVBERikge1xyXG5cdFx0XHRfY2hrTXVsdGlQYWdlUERGLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENoZWNrIGlmIHRoZSBjb250cm9sIGlzIGZ1bGx5IGxvYWRlZC5cclxuXHREeW5hbXNvZnRfT25SZWFkeSgpIHtcclxuXHRcdGNvbnN0IGxpTm9TY2FubmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BOb1NjYW5uZXInKTtcclxuXHRcdC8vIElmIHRoZSBFcnJvckNvZGUgaXMgMCwgaXQgbWVhbnMgZXZlcnl0aGluZyBpcyBmaW5lIGZvciB0aGUgY29udHJvbC4gSXQgaXMgZnVsbHkgbG9hZGVkLlxyXG5cdFx0dGhpcy5EV09iamVjdCA9IER5bmFtc29mdC5EV1QuR2V0V2ViVHdhaW4oJ2R3dGNvbnRyb2xDb250YWluZXInKTtcclxuXHRcdGlmICh0aGlzLkRXT2JqZWN0KSB7XHJcblx0XHRcdGlmICh0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSA9PT0gMCkge1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuTG9nTGV2ZWwgPSAwO1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuSWZBbGxvd0xvY2FsQ2FjaGUgPSB0cnVlO1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuSW1hZ2VDYXB0dXJlRHJpdmVyVHlwZSA9IDQ7XHJcblx0XHRcdFx0dGhpcy5zZXREZWZhdWx0VmFsdWUoKTtcclxuXHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KCdPblRvcEltYWdlSW5UaGVWaWV3Q2hhbmdlZCcsIHRoaXMuRHluYW1zb2Z0X09uVG9wSW1hZ2VJblRoZVZpZXdDaGFuZ2VkKTtcclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoJ09uTW91c2VDbGljaycsIHRoaXMuRHluYW1zb2Z0X09uTW91c2VDbGljayk7XHJcblxyXG5cdFx0XHRcdGxldCB0d2FpbnNvdXJjZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdXJjZScpO1xyXG5cdFx0XHRcdGlmICghdHdhaW5zb3VyY2UpIHtcclxuXHRcdFx0XHRcdHR3YWluc291cmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dlYmNhbXNvdXJjZScpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgdkNvdW50ID0gdGhpcy5EV09iamVjdC5Tb3VyY2VDb3VudDtcclxuXHRcdFx0XHR0aGlzLkRXVFNvdXJjZUNvdW50ID0gdkNvdW50O1xyXG5cclxuXHRcdFx0XHRpZiAodHdhaW5zb3VyY2UpIHtcclxuXHRcdFx0XHRcdHR3YWluc291cmNlLm9wdGlvbnMubGVuZ3RoID0gMDtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdkNvdW50OyBpKyspIHtcclxuXHRcdFx0XHRcdFx0dHdhaW5zb3VyY2Uub3B0aW9ucy5hZGQobmV3IE9wdGlvbih0aGlzLkRXT2JqZWN0LkdldFNvdXJjZU5hbWVJdGVtcyhpKSwgaS50b1N0cmluZygpKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBJZiBzb3VyY2UgbGlzdCBuZWVkIHRvIGJlIGRpc3BsYXllZCwgZmlsbCBpbiB0aGUgc291cmNlIGl0ZW1zLlxyXG5cdFx0XHRcdGlmICh2Q291bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGlmIChsaU5vU2Nhbm5lcikge1xyXG5cdFx0XHRcdFx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYldpbikge1xyXG5cdFx0XHRcdFx0XHRcdGxpTm9TY2FubmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdFx0XHRcdFx0XHRcdGxpTm9TY2FubmVyLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGxpTm9TY2FubmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICh2Q291bnQgPiAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNvdXJjZV9vbmNoYW5nZSgpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKER5bmFtc29mdC5MaWIuZW52LmJXaW4pIHtcclxuXHRcdFx0XHRcdHRoaXMuRFdPYmplY3QuTW91c2VTaGFwZSA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgYnRuU2NhbjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0blNjYW4nKTtcclxuXHRcdFx0XHRpZiAoYnRuU2Nhbikge1xyXG5cdFx0XHRcdFx0aWYgKHZDb3VudCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRidG5TY2FuLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGJ0blNjYW4uZGlzYWJsZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICghRHluYW1zb2Z0LkxpYi5lbnYuYldpbiAmJiB2Q291bnQgPiAwKSB7XHJcblx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpKSB7XHJcblx0XHRcdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKSkge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKSkge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKSkge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5pbml0RGxsRm9yQ2hhbmdlSW1hZ2VTaXplKCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuX2lMZWZ0ID0gMDtcclxuXHRcdFx0XHR0aGlzLl9pVG9wID0gMDtcclxuXHRcdFx0XHR0aGlzLl9pUmlnaHQgPSAwO1xyXG5cdFx0XHRcdHRoaXMuX2lCb3R0b20gPSAwO1xyXG5cclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRvY3VtZW50LmxpbmtzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRpZiAoZG9jdW1lbnQubGlua3NbaV0uY2xhc3NOYW1lID09PSAnU2hvd3RibExvYWRJbWFnZScpIHtcclxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQubGlua3NbaV0ub25jbGljayA9IHRoaXMuc2hvd3RibExvYWRJbWFnZV9vbmNsaWNrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmxpbmtzW2ldLmNsYXNzTmFtZSA9PT0gJ0Nsb3NldGJsTG9hZEltYWdlJykge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5saW5rc1tpXS5vbmNsaWNrID0gdGhpcy5jbG9zZXRibExvYWRJbWFnZV9vbmNsaWNrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodkNvdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYldpbikge1xyXG5cdFx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FOb1NjYW5uZXInKSAmJiB3aW5kb3dbJ2JEV1RPbmxpbmVEZW1vJ10pIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rpdl9TY2FuSW1hZ2UnKS5zdHlsZS5kaXNwbGF5ID09PSAnJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zaG93dGJsTG9hZEltYWdlX29uY2xpY2soKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykpIHtcclxuXHRcdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGl2QmxhbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2QmxhbmsnKTtcclxuXHRcdFx0XHRcdGlmIChkaXZCbGFuaykge1xyXG5cdFx0XHRcdFx0XHRkaXZCbGFuay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdFx0XHRcdGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmICghdWEuaW5kZXhPZignbXNpZSA2LjAnKSkge1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KCdPblBvc3RUcmFuc2ZlcicsIHRoaXMuRHluYW1zb2Z0X09uUG9zdFRyYW5zZmVyKTtcclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoJ09uUG9zdExvYWQnLCB0aGlzLkR5bmFtc29mdF9PblBvc3RMb2FkZnVuY3Rpb24pO1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudCgnT25Qb3N0QWxsVHJhbnNmZXJzJywgdGhpcy5EeW5hbXNvZnRfT25Qb3N0QWxsVHJhbnNmZXJzKTtcclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoJ09uSW1hZ2VBcmVhU2VsZWN0ZWQnLCB0aGlzLkR5bmFtc29mdF9PbkltYWdlQXJlYVNlbGVjdGVkKTtcclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoJ09uSW1hZ2VBcmVhRGVTZWxlY3RlZCcsIHRoaXMuRHluYW1zb2Z0X09uSW1hZ2VBcmVhRGVzZWxlY3RlZCk7XHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KCdPbkdldEZpbGVQYXRoJywgdGhpcy5EeW5hbXNvZnRfT25HZXRGaWxlUGF0aCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHNob3d0YmxMb2FkSW1hZ2Vfb25jbGljaygpIHtcclxuXHRcdHN3aXRjaCAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RibExvYWRJbWFnZScpLnN0eWxlLnZpc2liaWxpdHkpIHtcclxuXHRcdFx0Y2FzZSAnaGlkZGVuJzpcclxuXHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJsTG9hZEltYWdlJykuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAndmlzaWJsZSc6XHJcblx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RibExvYWRJbWFnZScpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuXHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BOb1NjYW5uZXInKSkge1xyXG5cdFx0XHQvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRibExvYWRJbWFnZVwiKS5zdHlsZS50b3AgPSBkc19nZXR0b3AoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwTm9TY2FubmVyXCIpKSArIHBOb1NjYW5uZXIub2Zmc2V0SGVpZ2h0ICsgXCJweFwiO1xyXG5cdFx0XHQvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRibExvYWRJbWFnZVwiKS5zdHlsZS5sZWZ0ID0gZHNfZ2V0bGVmdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBOb1NjYW5uZXJcIikpICsgMCArIFwicHhcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGNsb3NldGJsTG9hZEltYWdlX29uY2xpY2soKSB7XHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJsTG9hZEltYWdlJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Jlc29sdXRpb24nKS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBVc2VkIGEgbG90ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR1cGRhdGVQYWdlSW5mbygpIHtcclxuXHRcdGNvbnN0IHRvdGFsSW1hZ2U6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19Ub3RhbEltYWdlJyk7XHJcblx0XHRjb25zdCBjdXJyZW50SW1hZ2U6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19DdXJyZW50SW1hZ2UnKTtcclxuXHRcdGlmICh0b3RhbEltYWdlKSB7XHJcblx0XHRcdHRvdGFsSW1hZ2UudmFsdWUgPSB0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlcjtcclxuXHRcdH1cclxuXHRcdGlmIChjdXJyZW50SW1hZ2UpIHtcclxuXHRcdFx0Y3VycmVudEltYWdlLnZhbHVlID0gdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyICsgMTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFwcGVuZE1lc3NhZ2Uoc3RyTWVzc2FnZSkge1xyXG5cdFx0dGhpcy5fc3RyVGVtcFN0ciArPSBzdHJNZXNzYWdlO1xyXG5cdFx0Y29uc3QgX2Rpdk1lc3NhZ2VDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdUZW1lc3NhZ2UnKTtcclxuXHRcdGlmIChfZGl2TWVzc2FnZUNvbnRhaW5lcikge1xyXG5cdFx0XHRfZGl2TWVzc2FnZUNvbnRhaW5lci5pbm5lckhUTUwgPSB0aGlzLl9zdHJUZW1wU3RyO1xyXG5cdFx0XHRfZGl2TWVzc2FnZUNvbnRhaW5lci5zY3JvbGxUb3AgPSBfZGl2TWVzc2FnZUNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSB7XHJcblx0XHRpZiAodGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgPT09IDApIHtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCdUaGVyZSBpcyBubyBpbWFnZSBpbiBidWZmZXIuPGJyIC8+Jyk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y2hlY2tFcnJvclN0cmluZygpIHtcclxuXHRcdHJldHVybiB0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlLCB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nKTtcclxuXHR9XHJcblxyXG5cdGNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcsIHJlc3BvbnNlU3RyaW5nID0gbnVsbCkge1xyXG5cdFx0aWYgKGVycm9yQ29kZSA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoXCI8c3BhbiBzdHlsZT0nY29sb3I6I2NFNUUwNCc+PGI+XCIgKyBlcnJvclN0cmluZyArICc8L2I+PC9zcGFuPjxiciAvPicpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAoZXJyb3JDb2RlID09PSAtMjExNSkge1xyXG5cdFx0XHQvLyBDYW5jZWwgZmlsZSBkaWFsb2dcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoZXJyb3JDb2RlID09PSAtMjAwMykge1xyXG5cdFx0XHRcdGNvbnN0IEVycm9yTWVzc2FnZVdpbiA9IHdpbmRvdy5vcGVuKFxyXG5cdFx0XHRcdFx0JycsXHJcblx0XHRcdFx0XHQnRXJyb3JNZXNzYWdlJyxcclxuXHRcdFx0XHRcdCdoZWlnaHQ9NTAwLHdpZHRoPTc1MCx0b3A9MCxsZWZ0PTAsdG9vbGJhcj1ubyxtZW51YmFyPW5vLHNjcm9sbGJhcnM9bm8sIHJlc2l6YWJsZT1ubyxsb2NhdGlvbj1ubywgc3RhdHVzPW5vJ1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0RXJyb3JNZXNzYWdlV2luLmRvY3VtZW50LndyaXRlbG4ocmVzcG9uc2VTdHJpbmcpOyAvLyB0aGlzLkRXT2JqZWN0LkhUVFBQb3N0UmVzcG9uc2VTdHJpbmcpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZShcIjxzcGFuIHN0eWxlPSdjb2xvcjojY0U1RTA0Jz48Yj5cIiArIGVycm9yU3RyaW5nICsgJzwvYj48L3NwYW4+PGJyIC8+Jyk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBVc2VkIGEgbG90ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRkc19nZXRsZWZ0KGVsKSB7XHJcblx0XHRsZXQgdG1wID0gZWwub2Zmc2V0TGVmdDtcclxuXHRcdGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG5cdFx0d2hpbGUgKGVsKSB7XHJcblx0XHRcdHRtcCArPSBlbC5vZmZzZXRMZWZ0O1xyXG5cdFx0XHRlbCA9IGVsLm9mZnNldFBhcmVudDtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0bXA7XHJcblx0fVxyXG5cdGRzX2dldHRvcChlbCkge1xyXG5cdFx0bGV0IHRtcCA9IGVsLm9mZnNldFRvcDtcclxuXHRcdGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG5cdFx0d2hpbGUgKGVsKSB7XHJcblx0XHRcdHRtcCArPSBlbC5vZmZzZXRUb3A7XHJcblx0XHRcdGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRtcDtcclxuXHR9XHJcblxyXG5cdE92ZXJfT3V0X0RlbW9JbWFnZShvYmosIHVybCkge1xyXG5cdFx0b2JqLnNyYyA9IHVybDtcclxuXHR9XHJcblx0c291cmNlX29uY2hhbmdlKCkge1xyXG5cdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZUd2FpblR5cGUnKSkge1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2VHdhaW5UeXBlJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291cmNlJykpIHtcclxuXHRcdFx0Y29uc3QgY0luZGV4ID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKSBhcyBIVE1MU2VsZWN0RWxlbWVudCkuc2VsZWN0ZWRJbmRleDtcclxuXHRcdFx0aWYgKER5bmFtc29mdC5MaWIuZW52LmJNYWMpIHtcclxuXHRcdFx0XHRjb25zdCBzdHJTb3VyY2VOYW1lID0gdGhpcy5EV09iamVjdC5HZXRTb3VyY2VOYW1lSXRlbXMoY0luZGV4KTtcclxuXHRcdFx0XHRpZiAoc3RyU291cmNlTmFtZS5pbmRleE9mKCdJQ0EnKSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKSkge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykpIHtcclxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykpIHtcclxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykpIHtcclxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5TZWxlY3RTb3VyY2VCeUluZGV4KGNJbmRleCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1lZGlhVHlwZV9vbmNoYW5nZSgpIHtcclxuXHRcdGNvbnN0IE1lZGlhVHlwZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ01lZGlhVHlwZScpO1xyXG5cdFx0aWYgKE1lZGlhVHlwZSAmJiBNZWRpYVR5cGUub3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGNvbnN0IHZhbHVlTWVkaWFUeXBlID0gTWVkaWFUeXBlLm9wdGlvbnNbTWVkaWFUeXBlLnNlbGVjdGVkSW5kZXhdLnRleHQ7XHJcblx0XHRcdGlmICh2YWx1ZU1lZGlhVHlwZSAhPT0gJycpIHtcclxuXHRcdFx0XHRpZiAoIXRoaXMuRFdPYmplY3QuQWRkb24uV2ViY2FtLlNldE1lZGlhVHlwZSh2YWx1ZU1lZGlhVHlwZSkpIHtcclxuXHRcdFx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RXJyb3Igc2V0dGluZyBNZWRpYVR5cGUgdmFsdWU6IDwvYj4nKTtcclxuXHRcdFx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZShcIjxzcGFuIHN0eWxlPSdjb2xvcjojY0U1RTA0Jz48Yj5cIiArIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmcgKyAnPC9iPjwvc3Bhbj48YnIgLz4nKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBSZXNvbHV0aW9uV2ViY2FtOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbldlYmNhbScpO1xyXG5cdFx0aWYgKFJlc29sdXRpb25XZWJjYW0pIHtcclxuXHRcdFx0UmVzb2x1dGlvbldlYmNhbS5vcHRpb25zLmxlbmd0aCA9IDA7XHJcblx0XHRcdGNvbnN0IGFyeVJlc29sdXRpb24gPSB0aGlzLkRXT2JqZWN0LkFkZG9uLldlYmNhbS5HZXRSZXNvbHV0aW9uKCk7XHJcblx0XHRcdGNvbnN0IGNvdW50UmVzb2x1dGlvbiA9IGFyeVJlc29sdXRpb24uR2V0Q291bnQoKTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudFJlc29sdXRpb247IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYXJ5UmVzb2x1dGlvbi5HZXQoaSk7XHJcblx0XHRcdFx0UmVzb2x1dGlvbldlYmNhbS5vcHRpb25zLmFkZChuZXcgT3B0aW9uKHZhbHVlLCB2YWx1ZSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tQWNxdWlyZSBJbWFnZS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG5cdGFjcXVpcmVJbWFnZSgpIHtcclxuXHRcdGNvbnN0IGNJbmRleCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291cmNlJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnNlbGVjdGVkSW5kZXg7XHJcblx0XHRpZiAoY0luZGV4IDwgMCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5EV09iamVjdC5TZWxlY3RTb3VyY2VCeUluZGV4KGNJbmRleCk7XHJcblx0XHR0aGlzLkRXT2JqZWN0LkNsb3NlU291cmNlKCk7XHJcblx0XHR0aGlzLkRXT2JqZWN0Lk9wZW5Tb3VyY2UoKTtcclxuXHRcdHRoaXMuRFdPYmplY3QuSWZTaG93VUkgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XHJcblxyXG5cdFx0bGV0IGk7XHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcblx0XHRcdGlmICgoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJ1BpeGVsVHlwZScpLml0ZW0oaSkgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuUGl4ZWxUeXBlID0gaTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlICE9PSAwKSB7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RXJyb3Igc2V0dGluZyBQaXhlbFR5cGUgdmFsdWU6IDwvYj4nKTtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKFwiPHNwYW4gc3R5bGU9J2NvbG9yOiNjRTVFMDQnPjxiPlwiICsgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZyArICc8L2I+PC9zcGFuPjxiciAvPicpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5SZXNvbHV0aW9uID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcblx0XHRpZiAodGhpcy5EV09iamVjdC5FcnJvckNvZGUgIT09IDApIHtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5FcnJvciBzZXR0aW5nIFJlc29sdXRpb24gdmFsdWU6IDwvYj4nKTtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKFwiPHNwYW4gc3R5bGU9J2NvbG9yOiNjRTVFMDQnPjxiPlwiICsgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZyArICc8L2I+PC9zcGFuPjxiciAvPicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGJBREZDaGVja2VkID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdBREYnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xyXG5cdFx0dGhpcy5EV09iamVjdC5JZkZlZWRlckVuYWJsZWQgPSBiQURGQ2hlY2tlZDtcclxuXHRcdGlmIChiQURGQ2hlY2tlZCA9PT0gdHJ1ZSAmJiB0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSAhPT0gMCkge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkVycm9yIHNldHRpbmcgQURGIHZhbHVlOiA8L2I+Jyk7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZShcIjxzcGFuIHN0eWxlPSdjb2xvcjojY0U1RTA0Jz48Yj5cIiArIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmcgKyAnPC9iPjwvc3Bhbj48YnIgLz4nKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBiRHVwbGV4Q2hlY2tlZCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRHVwbGV4JykgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcclxuXHRcdHRoaXMuRFdPYmplY3QuSWZEdXBsZXhFbmFibGVkID0gYkR1cGxleENoZWNrZWQ7XHJcblx0XHRpZiAoYkR1cGxleENoZWNrZWQgPT09IHRydWUgJiYgdGhpcy5EV09iamVjdC5FcnJvckNvZGUgIT09IDApIHtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5FcnJvciBzZXR0aW5nIER1cGxleCB2YWx1ZTogPC9iPicpO1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoXCI8c3BhbiBzdHlsZT0nY29sb3I6I2NFNUUwNCc+PGI+XCIgKyB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nICsgJzwvYj48L3NwYW4+PGJyIC8+Jyk7XHJcblx0XHR9XHJcblx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYldpbiB8fCAoIUR5bmFtc29mdC5MaWIuZW52LmJXaW4gJiYgdGhpcy5EV09iamVjdC5JbWFnZUNhcHR1cmVEcml2ZXJUeXBlID09PSAwKSkge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoXHJcblx0XHRcdFx0J1BpeGVsIFR5cGU6ICcgKyB0aGlzLkRXT2JqZWN0LlBpeGVsVHlwZSArICc8YnIgLz5SZXNvbHV0aW9uOiAnICsgdGhpcy5EV09iamVjdC5SZXNvbHV0aW9uICsgJzxiciAvPidcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuSWZEaXNhYmxlU291cmNlQWZ0ZXJBY3F1aXJlID0gdHJ1ZTtcclxuXHRcdHRoaXMuRFdPYmplY3QuQWNxdWlyZUltYWdlKCk7XHJcblx0fVxyXG5cclxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tTG9hZCBJbWFnZS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblx0YnRuTG9hZEltYWdlc09yUERGc19vbmNsaWNrKCkge1xyXG5cdFx0Y29uc3QgT25QREZTdWNjZXNzID0gKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJ0xvYWRlZCBhbiBpbWFnZSBzdWNjZXNzZnVsbHkuPGJyLz4nKTtcclxuXHRcdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdFx0fTtcclxuXHJcblx0XHRjb25zdCBPblBERkZhaWx1cmUgPSAoZXJyb3JDb2RlLCBlcnJvclN0cmluZykgPT4ge1xyXG5cdFx0XHR0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpO1xyXG5cdFx0fTtcclxuXHJcblx0XHR0aGlzLkRXT2JqZWN0LklmU2hvd0ZpbGVEaWFsb2cgPSB0cnVlO1xyXG5cdFx0dGhpcy5EV09iamVjdC5BZGRvbi5QREYuU2V0UmVzb2x1dGlvbigyMDApO1xyXG5cdFx0dGhpcy5EV09iamVjdC5BZGRvbi5QREYuU2V0Q29udmVydE1vZGUoRHluYW1zb2Z0LkRXVC5FbnVtRFdUX0NvbnZlcnRNb2RlLkNNX1JFTkRFUkFMTCk7XHJcblx0XHR0aGlzLkRXT2JqZWN0LkxvYWRJbWFnZUV4KCcnLCBEeW5hbXNvZnQuRFdULkVudW1EV1RfSW1hZ2VUeXBlLklUX0FMTCwgT25QREZTdWNjZXNzLCBPblBERkZhaWx1cmUpO1xyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBFZGl0IEltYWdlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdGJ0blNob3dJbWFnZUVkaXRvcl9vbmNsaWNrKCkge1xyXG5cdFx0aWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuU2hvd0ltYWdlRWRpdG9yKCk7XHJcblx0fVxyXG5cclxuXHRidG5Sb3RhdGVSaWdodF9vbmNsaWNrKCkge1xyXG5cdFx0aWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuUm90YXRlUmlnaHQodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuXHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+Um90YXRlIHJpZ2h0OiA8L2I+Jyk7XHJcblx0XHRpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRidG5Sb3RhdGVMZWZ0X29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5Sb3RhdGVMZWZ0KHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcik7XHJcblx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPlJvdGF0ZSBsZWZ0OiA8L2I+Jyk7XHJcblx0XHRpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YnRuUm90YXRlMTgwX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5Sb3RhdGUodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyLCAxODAsIHRydWUpO1xyXG5cdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5Sb3RhdGUgMTgwOiA8L2I+Jyk7XHJcblx0XHRpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YnRuTWlycm9yX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5NaXJyb3IodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuXHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+TWlycm9yOiA8L2I+Jyk7XHJcblx0XHRpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRidG5GbGlwX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5GbGlwKHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcik7XHJcblx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkZsaXA6IDwvYj4nKTtcclxuXHRcdGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Dcm9wIE1ldGhvZC0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblx0YnRuQ3JvcF9vbmNsaWNrKCkge1xyXG5cdFx0aWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLl9pTGVmdCAhPT0gMCB8fCB0aGlzLl9pVG9wICE9PSAwIHx8IHRoaXMuX2lSaWdodCAhPT0gMCB8fCB0aGlzLl9pQm90dG9tICE9PSAwKSB7XHJcblx0XHRcdHRoaXMuRFdPYmplY3QuQ3JvcCh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIsIHRoaXMuX2lMZWZ0LCB0aGlzLl9pVG9wLCB0aGlzLl9pUmlnaHQsIHRoaXMuX2lCb3R0b20pO1xyXG5cdFx0XHR0aGlzLl9pTGVmdCA9IDA7XHJcblx0XHRcdHRoaXMuX2lUb3AgPSAwO1xyXG5cdFx0XHR0aGlzLl9pUmlnaHQgPSAwO1xyXG5cdFx0XHR0aGlzLl9pQm90dG9tID0gMDtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5Dcm9wOiA8L2I+Jyk7XHJcblx0XHRcdGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoXCI8Yj5Dcm9wOiA8L2I+ZmFpbGVkLiBQbGVhc2UgZmlyc3Qgc2VsZWN0IHRoZSBhcmVhIHlvdSdkIGxpa2UgdG8gY3JvcC48YnIgLz5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8qLS0tLS0tLS0tLS0tLS0tLUNoYW5nZSBJbWFnZSBTaXplLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cdGJ0bkNoYW5nZUltYWdlU2l6ZV9vbmNsaWNrKCkge1xyXG5cdFx0aWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHN3aXRjaCAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5KSB7XHJcblx0XHRcdGNhc2UgJ3Zpc2libGUnOlxyXG5cdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbWdTaXplRWRpdG9yJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdoaWRkZW4nOlxyXG5cdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbWdTaXplRWRpdG9yJykuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHRcdC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiSW1nU2l6ZUVkaXRvclwiKS5zdHlsZS50b3AgPSBkc19nZXR0b3AoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG5DaGFuZ2VJbWFnZVNpemVcIikpICsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG5DaGFuZ2VJbWFnZVNpemVcIikub2Zmc2V0SGVpZ2h0ICsgMTUgKyBcInB4XCI7XHJcblx0XHQvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkltZ1NpemVFZGl0b3JcIikuc3R5bGUubGVmdCA9IGRzX2dldGxlZnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG5DaGFuZ2VJbWFnZVNpemVcIikpIC0gMTQgKyBcInB4XCI7XHJcblxyXG5cdFx0Y29uc3QgaVdpZHRoID0gdGhpcy5EV09iamVjdC5HZXRJbWFnZVdpZHRoKHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcik7XHJcblx0XHRpZiAoaVdpZHRoICE9PSAtMSkge1xyXG5cdFx0XHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gaVdpZHRoO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgaUhlaWdodCA9IHRoaXMuRFdPYmplY3QuR2V0SW1hZ2VIZWlnaHQodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuXHRcdGlmIChpSGVpZ2h0ICE9PSAtMSkge1xyXG5cdFx0XHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ19oZWlnaHQnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9IGlIZWlnaHQ7XHJcblx0XHR9XHJcblx0fVxyXG5cdGJ0bkNhbmNlbENoYW5nZV9vbmNsaWNrKCkge1xyXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcblx0fVxyXG5cclxuXHRidG5DaGFuZ2VJbWFnZVNpemVPS19vbmNsaWNrKCkge1xyXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ19oZWlnaHQnKS5jbGFzc05hbWUgPSAnJztcclxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKS5jbGFzc05hbWUgPSAnJztcclxuXHRcdGlmICghdGhpcy5yZS50ZXN0KChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSkge1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpLmNsYXNzTmFtZSArPSAnIGludmFsaWQnO1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpLmZvY3VzKCk7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnUGxlYXNlIGlucHV0IGEgdmFsaWQgPGI+aGVpZ2h0PC9iPi48YnIgLz4nKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCF0aGlzLnJlLnRlc3QoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSkpIHtcclxuXHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpLmNsYXNzTmFtZSArPSAnIGludmFsaWQnO1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykuZm9jdXMoKTtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCdQbGVhc2UgaW5wdXQgYSB2YWxpZCA8Yj53aWR0aDwvYj4uPGJyIC8+Jyk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuQ2hhbmdlSW1hZ2VTaXplKFxyXG5cdFx0XHR0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIsXHJcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsXHJcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLFxyXG5cdFx0XHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ludGVycG9sYXRpb25NZXRob2QnKSBhcyBIVE1MU2VsZWN0RWxlbWVudCkuc2VsZWN0ZWRJbmRleCArIDFcclxuXHRcdCk7XHJcblx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkNoYW5nZSBJbWFnZSBTaXplOiA8L2I+Jyk7XHJcblx0XHRpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuXHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHR9XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBTYXZlIEltYWdlKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRidG5TYXZlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3Qgc3RyaW1nVHlwZV9zYXZlID0gJ3BkZic7XHJcblxyXG5cdFx0dGhpcy5EV09iamVjdC5JZlNob3dGaWxlRGlhbG9nID0gdHJ1ZTtcclxuXHRcdGNvbnN0IF90eHRGaWxlTmFtZWZvclNhdmU6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eHRfZmlsZU5hbWUnKTtcclxuXHRcdGlmIChfdHh0RmlsZU5hbWVmb3JTYXZlKSB7XHJcblx0XHRcdF90eHRGaWxlTmFtZWZvclNhdmUuY2xhc3NOYW1lID0gJyc7XHJcblx0XHR9XHJcblx0XHRsZXQgYlNhdmU6IGFueSA9IGZhbHNlO1xyXG5cclxuXHRcdGNvbnN0IHN0ckZpbGVQYXRoID0gX3R4dEZpbGVOYW1lZm9yU2F2ZS52YWx1ZSArICcuJyArIHN0cmltZ1R5cGVfc2F2ZTtcclxuXHJcblx0XHRjb25zdCBPblN1Y2Nlc3MgPSAoKSA9PiB7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+U2F2ZSBJbWFnZTogPC9iPicpO1xyXG5cdFx0XHR0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKDAsICdTdWNjZXNzZnVsLicpO1xyXG5cdFx0fTtcclxuXHJcblx0XHRjb25zdCBPbkZhaWx1cmUgPSAoZXJyb3JDb2RlLCBlcnJvclN0cmluZykgPT4ge1xyXG5cdFx0XHR0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpO1xyXG5cdFx0fTtcclxuXHJcblx0XHRiU2F2ZSA9IHRoaXMuRFdPYmplY3QuU2F2ZUFsbEFzUERGKHN0ckZpbGVQYXRoLCBPblN1Y2Nlc3MsIE9uRmFpbHVyZSk7XHJcblxyXG5cdFx0aWYgKGJTYXZlKSB7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+U2F2ZSBJbWFnZTogPC9iPicpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHR9XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBVcGxvYWQgSW1hZ2UqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0bWFrZWlkKGxlbmd0aCkge1xyXG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xyXG5cdFx0Y29uc3QgY2hhcmFjdGVycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XHJcblx0XHRjb25zdCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHJlc3VsdCArPSBjaGFyYWN0ZXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29udmVydFRvQmxvYigpIHtcclxuXHRcdC8vIHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS51cGxvYWRTdGFydC5lbWl0KHRydWUpO1xyXG5cdFx0Y29uc3QgcGFnZXMgPSBbXTtcclxuXHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLkRXT2JqZWN0Py5Ib3dNYW55SW1hZ2VzSW5CdWZmZXI7IGluZGV4KyspIHtcclxuXHRcdFx0cGFnZXMucHVzaChpbmRleCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LkNvbnZlcnRUb0Jsb2IoXHJcblx0XHRcdHBhZ2VzLFxyXG5cdFx0XHREeW5hbXNvZnQuRFdULkVudW1EV1RfSW1hZ2VUeXBlLklUX1BERixcclxuXHRcdFx0KHJlc3VsdCwgaW5kaWNlcywgdHlwZSkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdC5sYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcclxuXHRcdFx0XHRyZXN1bHQubmFtZSA9ICdzY2FuLScgKyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZXN1bHQubGFzdE1vZGlmaWVkRGF0ZSwgJ2RkLU1NLXl5eXknKSArICcucGRmJztcclxuXHRcdFx0XHR0aGlzLnVwbG9hZGVyU2VydmljZVxyXG5cdFx0XHRcdFx0LnVwbG9hZChbcmVzdWx0XSlcclxuXHRcdFx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuXHRcdFx0XHRcdC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChldmVudC50eXBlID09IEZpbGVFdmVudFR5cGUuQ29tcGxldGUpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZpbGUubmV4dChldmVudC5kYXRhWzBdKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdChlcnJvckNvZGUsIGVycm9yU3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coZXJyb3JTdHJpbmcpO1xyXG5cdFx0XHRcdC8vIHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS51cGxvYWRTdGFydC5lbWl0KGZhbHNlKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNvbnZlcnRUb0Jsb2JGb3JTYXZpbmcoKSB7XHJcblx0XHRjb25zdCBwYWdlcyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuRFdPYmplY3Q/Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlcjsgaW5kZXgrKykge1xyXG5cdFx0XHRwYWdlcy5wdXNoKGluZGV4KTtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuQ29udmVydFRvQmxvYihcclxuXHRcdFx0cGFnZXMsXHJcblx0XHRcdER5bmFtc29mdC5EV1QuRW51bURXVF9JbWFnZVR5cGUuSVRfUERGLFxyXG5cdFx0XHQocmVzdWx0LCBpbmRpY2VzLCB0eXBlKSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0Lmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0XHRcdHJlc3VsdC5uYW1lID0gJ3NjYW4tJyArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJlc3VsdC5sYXN0TW9kaWZpZWREYXRlLCAnZGQtTU0teXl5eScpICsgJy5wZGYnO1xyXG5cdFx0XHRcdC8vIHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS5zdG9yZWRGaWxlID0gcmVzdWx0O1xyXG5cdFx0XHRcdHRoaXMub25NaW5pbWl6aW5nU3Vic2NyaXB0aW9uID8gdGhpcy5vbk1pbmltaXppbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQoZXJyb3JDb2RlLCBlcnJvclN0cmluZykgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGVycm9yU3RyaW5nKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBOYXZpZ2F0b3IgZnVuY3Rpb25zKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRidG5GaXJzdEltYWdlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID0gMDtcclxuXHRcdHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuXHR9XHJcblxyXG5cdGJ0blByZUltYWdlX3doZWVsKCkge1xyXG5cdFx0aWYgKHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyICE9PSAwKSB7XHJcblx0XHRcdHRoaXMuYnRuUHJlSW1hZ2Vfb25jbGljaygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YnRuTmV4dEltYWdlX3doZWVsKCkge1xyXG5cdFx0aWYgKHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyICE9PSAwKSB7XHJcblx0XHRcdHRoaXMuYnRuTmV4dEltYWdlX29uY2xpY2soKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGJ0blByZUltYWdlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPT09IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID0gdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyIC0gMTtcclxuXHRcdHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuXHR9XHJcblx0YnRuTmV4dEltYWdlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPT09IHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyIC0gMSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPSB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgKyAxO1xyXG5cdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdH1cclxuXHJcblx0YnRuTGFzdEltYWdlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID0gdGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgLSAxO1xyXG5cdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdH1cclxuXHJcblx0YnRuUmVtb3ZlQ3VycmVudEltYWdlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5SZW1vdmVBbGxTZWxlY3RlZEltYWdlcygpO1xyXG5cdFx0aWYgKHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyID09PSAwKSB7XHJcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfVG90YWxJbWFnZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gdGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXI7XHJcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfQ3VycmVudEltYWdlJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSAnJztcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YnRuUmVtb3ZlQWxsSW1hZ2VzX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5SZW1vdmVBbGxJbWFnZXMoKTtcclxuXHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfVG90YWxJbWFnZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gJzAnO1xyXG5cdFx0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19DdXJyZW50SW1hZ2UnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9ICcnO1xyXG5cdH1cclxuXHRzZXRsUHJldmlld01vZGUoKSB7XHJcblx0XHRjb25zdCB2YXJOdW0gPSBwYXJzZUludChcclxuXHRcdFx0KChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfUHJldmlld01vZGUnKSBhcyBIVE1MU2VsZWN0RWxlbWVudCkuc2VsZWN0ZWRJbmRleCArIDEpLnRvU3RyaW5nKCksXHJcblx0XHRcdDEwXHJcblx0XHQpO1xyXG5cdFx0Y29uc3QgYnRuQ3JvcDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bkNyb3AnKTtcclxuXHRcdGlmIChidG5Dcm9wKSB7XHJcblx0XHRcdGxldCB0bXBzdHIgPSBidG5Dcm9wLnNyYztcclxuXHRcdFx0aWYgKHZhck51bSA+IDEpIHtcclxuXHRcdFx0XHR0bXBzdHIgPSB0bXBzdHIucmVwbGFjZSgnQ3JvcC4nLCAnQ3JvcF9ncmF5LicpO1xyXG5cdFx0XHRcdGJ0bkNyb3Auc3JjID0gdG1wc3RyO1xyXG5cdFx0XHRcdGJ0bkNyb3Aub25jbGljayA9IGZ1bmN0aW9uICgpIHt9O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRtcHN0ciA9IHRtcHN0ci5yZXBsYWNlKCdDcm9wX2dyYXkuJywgJ0Nyb3AuJyk7XHJcblx0XHRcdFx0YnRuQ3JvcC5zcmMgPSB0bXBzdHI7XHJcblx0XHRcdFx0YnRuQ3JvcC5vbmNsaWNrID0gKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5idG5Dcm9wX29uY2xpY2soKTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5EV09iamVjdC5TZXRWaWV3TW9kZSh2YXJOdW0sIHZhck51bSk7XHJcblx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYk1hYyB8fCBEeW5hbXNvZnQuTGliLmVudi5iTGludXgpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fSBlbHNlIGlmICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX1ByZXZpZXdNb2RlJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnNlbGVjdGVkSW5kZXggIT09IDApIHtcclxuXHRcdFx0dGhpcy5EV09iamVjdC5Nb3VzZVNoYXBlID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuRFdPYmplY3QuTW91c2VTaGFwZSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipyYWRpbyByZXNwb25zZSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0cmRUSUZGX29uY2xpY2soKSB7XHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlVElGRjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVRJRkYnKTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VUSUZGLmRpc2FibGVkID0gZmFsc2U7XHJcblx0XHRfY2hrTXVsdGlQYWdlVElGRi5jaGVja2VkID0gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3QgX2Noa011bHRpUGFnZVBERjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVBERicpO1xyXG5cdFx0X2Noa011bHRpUGFnZVBERi5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRfY2hrTXVsdGlQYWdlUERGLmRpc2FibGVkID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJkUERGX29uY2xpY2soKSB7XHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlVElGRjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVRJRkYnKTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VUSUZGLmNoZWNrZWQgPSBmYWxzZTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VUSUZGLmRpc2FibGVkID0gdHJ1ZTtcclxuXHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlUERGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlUERGJyk7XHJcblx0XHRfY2hrTXVsdGlQYWdlUERGLmRpc2FibGVkID0gZmFsc2U7XHJcblx0XHRfY2hrTXVsdGlQYWdlUERGLmNoZWNrZWQgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0cmRfb25jbGljaygpIHtcclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VUSUZGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlVElGRicpO1xyXG5cdFx0X2Noa011bHRpUGFnZVRJRkYuY2hlY2tlZCA9IGZhbHNlO1xyXG5cdFx0X2Noa011bHRpUGFnZVRJRkYuZGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VQREY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VQREYnKTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VQREYuY2hlY2tlZCA9IGZhbHNlO1xyXG5cdFx0X2Noa011bHRpUGFnZVBERi5kaXNhYmxlZCA9IHRydWU7XHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIER5bmFtaWMgV2ViIFRXQUlOIEV2ZW50cyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0RHluYW1zb2Z0X09uUG9zdFRyYW5zZmVyID0gKCkgPT4ge1xyXG5cdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdH07XHJcblxyXG5cdER5bmFtc29mdF9PblBvc3RMb2FkZnVuY3Rpb24gPSAocGF0aCwgbmFtZSwgdHlwZSkgPT4ge1xyXG5cdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdH07XHJcblxyXG5cdER5bmFtc29mdF9PblBvc3RBbGxUcmFuc2ZlcnMgPSAoKSA9PiB7XHJcblx0XHR0aGlzLkRXT2JqZWN0LkNsb3NlU291cmNlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0XHR0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKTtcclxuXHR9O1xyXG5cclxuXHREeW5hbXNvZnRfT25Nb3VzZUNsaWNrID0gKGluZGV4KSA9PiB7XHJcblx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0fTtcclxuXHJcblx0RHluYW1zb2Z0X09uTW91c2VSaWdodENsaWNrID0gKGluZGV4KSA9PiB7XHJcblx0XHQvLyBUbyBhZGRcclxuXHR9O1xyXG5cclxuXHREeW5hbXNvZnRfT25JbWFnZUFyZWFTZWxlY3RlZCA9IChpbmRleCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSA9PiB7XHJcblx0XHR0aGlzLl9pTGVmdCA9IGxlZnQ7XHJcblx0XHR0aGlzLl9pVG9wID0gdG9wO1xyXG5cdFx0dGhpcy5faVJpZ2h0ID0gcmlnaHQ7XHJcblx0XHR0aGlzLl9pQm90dG9tID0gYm90dG9tO1xyXG5cdH07XHJcblxyXG5cdER5bmFtc29mdF9PbkltYWdlQXJlYURlc2VsZWN0ZWQgPSAoaW5kZXgpID0+IHtcclxuXHRcdHRoaXMuX2lMZWZ0ID0gMDtcclxuXHRcdHRoaXMuX2lUb3AgPSAwO1xyXG5cdFx0dGhpcy5faVJpZ2h0ID0gMDtcclxuXHRcdHRoaXMuX2lCb3R0b20gPSAwO1xyXG5cdH07XHJcblxyXG5cdER5bmFtc29mdF9Pbk1vdXNlRG91YmxlQ2xpY2soKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHREeW5hbXNvZnRfT25Ub3BJbWFnZUluVGhlVmlld0NoYW5nZWQgPSAoaW5kZXgpID0+IHtcclxuXHRcdHRoaXMuX2lMZWZ0ID0gMDtcclxuXHRcdHRoaXMuX2lUb3AgPSAwO1xyXG5cdFx0dGhpcy5faVJpZ2h0ID0gMDtcclxuXHRcdHRoaXMuX2lCb3R0b20gPSAwO1xyXG5cdFx0dGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID0gaW5kZXg7XHJcblx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0fTtcclxuXHJcblx0RHluYW1zb2Z0X09uR2V0RmlsZVBhdGggPSAoYlNhdmUsIGNvdW50LCBpbmRleCwgcGF0aCwgbmFtZSkgPT4ge307XHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuXHRcdHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuXHR9XHJcbn1cclxuIiwiPGRpdiBpZD1cIkRXVGNvbnRhaW5lclwiIGNsYXNzPVwiaC1mdWxsXCI+XHJcblx0PGRpdiBpZD1cIkRXVGNvbnRhaW5lclRvcFwiPlxyXG5cdFx0PGRpdiBpZD1cImRpdkVkaXRcIj5cclxuXHRcdFx0PHVsIGNsYXNzPVwib3BlcmF0ZUdycFwiPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLnNob3dJbWFnZUVkaXRvcicgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiYnRuU2hvd0ltYWdlRWRpdG9yX29uY2xpY2soKVwiXHJcblx0XHRcdFx0XHRcdGNsYXNzPVwiZmlsdGVyLWljb24gY3Vyc29yLXBvaW50ZXJcIlxyXG5cdFx0XHRcdFx0XHRbc3ZnSWNvbl09XCInaWNvbnM6RWRpdG9yJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLnJvdGF0ZUxlZnQnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImJ0blJvdGF0ZUxlZnRfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpSb3RhdGUtTGVmdCdcIlxyXG5cdFx0XHRcdFx0PjwvbWF0LWljb24+XHJcblx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHQ8bGkgY2xzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGxlYWRpbmctbm9uZSB3LTE1IGgtMTVcIj5cclxuXHRcdFx0XHRcdDxtYXQtaWNvblxyXG5cdFx0XHRcdFx0XHRbbWF0VG9vbHRpcF09XCInc2Nhbm5lci5yb3RhdGVSaWdodCcgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiYnRuUm90YXRlUmlnaHRfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpSb3RhdGUtUmlnaHQnXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIucm90YXRlMTgwJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJidG5Sb3RhdGUxODBfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpSb3RhdGUtMTgwJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLm1pcnJvcicgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiYnRuTWlycm9yX29uY2xpY2soKVwiXHJcblx0XHRcdFx0XHRcdGNsYXNzPVwiZmlsdGVyLWljb24gY3Vyc29yLXBvaW50ZXJcIlxyXG5cdFx0XHRcdFx0XHRbc3ZnSWNvbl09XCInaWNvbnM6ZmxpcC1ob3Jpem9udGFsJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLmZsaXAnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImJ0bkZsaXBfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpmbGlwLXZlcnRpY2FsJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLnJlbW92ZVNlbGVjdGVkJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJidG5SZW1vdmVDdXJyZW50SW1hZ2Vfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpSZW1vdmVJbWFnZXMnXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIucmVtb3ZlQWxsJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJidG5SZW1vdmVBbGxJbWFnZXNfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpSZW1vdmVBbGxJbWFnZXMnXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIucmVzaXplJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJidG5DaGFuZ2VJbWFnZVNpemVfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpjaGFuZ2VTaXplJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLmNyb3AnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImJ0bkNyb3Bfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpjcm9wJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHQ8L3VsPlxyXG5cdFx0XHQ8ZGl2IGlkPVwiSW1nU2l6ZUVkaXRvclwiIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuXCI+XHJcblx0XHRcdFx0PHVsPlxyXG5cdFx0XHRcdFx0PGxpPlxyXG5cdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiaW1nX2hlaWdodFwiXHJcblx0XHRcdFx0XHRcdFx0Pnt7ICdzY2FubmVyLm5ld0hlaWdodCcgfCB0cmFuc2xhdGUgfX0gOlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiaW1nX2hlaWdodFwiIHN0eWxlPVwid2lkdGg6IDUwJVwiIHNpemU9XCIxMFwiIC8+XHJcblx0XHRcdFx0XHRcdFx0e3sgJ3NjYW5uZXIucGl4ZWwnIHwgdHJhbnNsYXRlIH19PC9sYWJlbFxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPlxyXG5cdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiaW1nX3dpZHRoXCJcclxuXHRcdFx0XHRcdFx0XHQ+e3sgJ3NjYW5uZXIubmV3V2lkdGgnIHwgdHJhbnNsYXRlIH19IDombmJzcDtcclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImltZ193aWR0aFwiIHN0eWxlPVwid2lkdGg6IDUwJVwiIHNpemU9XCIxMFwiIC8+XHJcblx0XHRcdFx0XHRcdFx0e3sgJ3NjYW5uZXIucGl4ZWwnIHwgdHJhbnNsYXRlIH19PC9sYWJlbFxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPlxyXG5cdFx0XHRcdFx0XHR7eyAnc2Nhbm5lci5JbnRlcnBvbGF0aW9uTWV0aG9kJyB8IHRyYW5zbGF0ZSB9fTpcclxuXHRcdFx0XHRcdFx0PHNlbGVjdCBzaXplPVwiMVwiIGlkPVwiSW50ZXJwb2xhdGlvbk1ldGhvZFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj5cclxuXHRcdFx0XHRcdFx0PC9zZWxlY3Q+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0PGxpIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCIgICBPSyAgIFwiIGlkPVwiYnRuQ2hhbmdlSW1hZ2VTaXplT0tcIiAoY2xpY2spPVwiYnRuQ2hhbmdlSW1hZ2VTaXplT0tfb25jbGljaygpXCIgLz5cclxuXHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIiBDYW5jZWwgXCIgaWQ9XCJidG5DYW5jZWxDaGFuZ2VcIiAoY2xpY2spPVwiYnRuQ2FuY2VsQ2hhbmdlX29uY2xpY2soKVwiIC8+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDwvdWw+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8ZGl2IGlkPVwiZHd0Y29udHJvbENvbnRhaW5lclwiPjwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cInctZnVsbFwiIGlkPVwibG9hZGVyXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLWZ1bGxcIj5cclxuXHRcdFx0XHQ8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxkaXYgaWQ9XCJidG5Hcm91cEJ0bVwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY3QtbHRcIj5cclxuXHRcdFx0XHR7eyAnc2Nhbm5lci5wYWdlJyB8IHRyYW5zbGF0ZSB9fTpcclxuXHRcdFx0XHQ8aW5wdXQgaWQ9XCJEV19idG5GaXJzdEltYWdlXCIgKGNsaWNrKT1cImJ0bkZpcnN0SW1hZ2Vfb25jbGljaygpXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiIHw8IFwiIC8+Jm5ic3A7XHJcblx0XHRcdFx0PGlucHV0IGlkPVwiRFdfYnRuUHJlSW1hZ2VcIiAoY2xpY2spPVwiYnRuUHJlSW1hZ2Vfb25jbGljaygpXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiIDwgXCIgLz4mbmJzcDsmbmJzcDtcclxuXHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPVwiMlwiIGlkPVwiRFdfQ3VycmVudEltYWdlXCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIC8+XHJcblx0XHRcdFx0L1xyXG5cdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCIyXCIgaWQ9XCJEV19Ub3RhbEltYWdlXCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIC8+Jm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0PGlucHV0IGlkPVwiRFdfYnRuTmV4dEltYWdlXCIgKGNsaWNrKT1cImJ0bk5leHRJbWFnZV9vbmNsaWNrKClcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI+IFwiIC8+Jm5ic3A7XHJcblx0XHRcdFx0PGlucHV0IGlkPVwiRFdfYnRuTGFzdEltYWdlXCIgKGNsaWNrKT1cImJ0bkxhc3RJbWFnZV9vbmNsaWNrKClcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI+fCBcIiAvPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImN0LXJ0XCI+XHJcblx0XHRcdFx0e3sgJ3NjYW5uZXIucHJldmlldycgfCB0cmFuc2xhdGUgfX06XHJcblx0XHRcdFx0PHNlbGVjdCBzaXplPVwiMVwiIGlkPVwiRFdfUHJldmlld01vZGVcIiAoY2hhbmdlKT1cInNldGxQcmV2aWV3TW9kZSgpXCI+XHJcblx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiMFwiPjFYMTwvb3B0aW9uPlxyXG5cdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cIjFcIj4yWDI8L29wdGlvbj5cclxuXHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCIyXCI+M1gzPC9vcHRpb24+XHJcblx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiM1wiPjRYNDwvb3B0aW9uPlxyXG5cdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cIjRcIj41WDU8L29wdGlvbj48L3NlbGVjdFxyXG5cdFx0XHRcdD48YnIgLz5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGlkPVwiU2NhbldyYXBwZXJcIj5cclxuXHRcdDxkaXYgaWQ9XCJkaXZTY2FubmVyXCIgY2xhc3M9XCJkaXZpbnB1dFwiPlxyXG5cdFx0XHQ8ZGl2IGlkPVwiZGl2X1NjYW5JbWFnZVwiIGNsYXNzPVwiZGl2VGFibGVTdHlsZVwiPlxyXG5cdFx0XHRcdDx1bCBpZD1cInVsU2NhbmVJbWFnZUhJREVcIj5cclxuXHRcdFx0XHRcdDxsaT5cclxuXHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cInNvdXJjZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxwPnt7ICdzY2FubmVyLnNvdXJjZScgfCB0cmFuc2xhdGUgfX06PC9wPlxyXG5cdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHQ8c2VsZWN0IHNpemU9XCIxXCIgaWQ9XCJzb3VyY2VcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiIChjaGFuZ2UpPVwic291cmNlX29uY2hhbmdlKClcIj5cclxuXHRcdFx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+XHJcblx0XHRcdFx0XHRcdDwvc2VsZWN0PlxyXG5cdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdDxsaSBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiBpZD1cInBOb1NjYW5uZXJcIj5cclxuXHRcdFx0XHRcdFx0PGEgaHJlZj1cImphdmFzY3JpcHQ6IHZvaWQoMClcIiBjbGFzcz1cIlNob3d0YmxMb2FkSW1hZ2VcIiBzdHlsZT1cImNvbG9yOiAjZmU4ZTE0XCIgaWQ9XCJhTm9TY2FubmVyXCJcclxuXHRcdFx0XHRcdFx0XHQ+KE5vIFRXQUlOIGNvbXBhdGlibGUgZHJpdmVycyBkZXRlY3RlZCk8L2FcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdDxsaSBpZD1cImRpdlByb2R1Y3REZXRhaWxcIj5cclxuXHRcdFx0XHRcdFx0PHVsIGlkPVwiZGl2VHdhaW5UeXBlXCI+XHJcblx0XHRcdFx0XHRcdFx0PGxpPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGlkPVwibGJsU2hvd1VJXCIgZm9yPVwiU2hvd1VJXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIlNob3dVSVwiIC8+e3sgJ3NjYW5uZXIuU2hvd1VJJyB8IHRyYW5zbGF0ZSB9fSZuYnNwOzwvbGFiZWxcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJBREZcIj4gPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiQURGXCIgLz57eyAnc2Nhbm5lci5BdXRvRmVlZGVyJyB8IHRyYW5zbGF0ZSB9fSZuYnNwOzwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiRHVwbGV4XCI+IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIkR1cGxleFwiIC8+e3sgJ3NjYW5uZXIuRHVwbGV4JyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHQ8bGk+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyAnc2Nhbm5lci5QaXhlbFR5cGUnIHwgdHJhbnNsYXRlIH19OlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIkJXXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFkaW9cIiBpZD1cIkJXXCIgbmFtZT1cIlBpeGVsVHlwZVwiIC8+e3sgJ3NjYW5uZXIuQiZXJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWxcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJHcmF5XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFkaW9cIiBpZD1cIkdyYXlcIiBuYW1lPVwiUGl4ZWxUeXBlXCIgLz57eyAnc2Nhbm5lci5HcmF5JyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWxcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJSR0JcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYWRpb1wiIGlkPVwiUkdCXCIgbmFtZT1cIlBpeGVsVHlwZVwiIC8+e3sgJ3NjYW5uZXIuQ29sb3InIHwgdHJhbnNsYXRlIH19PC9sYWJlbFxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHRcdFx0PGxpPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e3sgJ3NjYW5uZXIuUmVzb2x1dGlvbicgfCB0cmFuc2xhdGUgfX06Jm5ic3A7PC9zcGFuXHJcblx0XHRcdFx0XHRcdFx0XHQ+PHNlbGVjdCBzaXplPVwiMVwiIGlkPVwiUmVzb2x1dGlvblwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiMTAwXCI+MTAwPC9vcHRpb24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCIxNTBcIj4xNTA8L29wdGlvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cIjIwMFwiPjIwMDwvb3B0aW9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiMzAwXCIgc2VsZWN0ZWQ+MzAwPC9vcHRpb24+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3NlbGVjdD5cclxuXHRcdFx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHRcdFx0PC9saT5cclxuXHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRpZD1cImJ0blNjYW5cIlxyXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkPVwiZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdChjbGljayk9XCJhY3F1aXJlSW1hZ2UoKVwiXHJcblx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJhY3Rpb24tYnRuIGFjdGlvbi1idG5fMlwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cImJpIGJpLXVwYy11cGxvYWQgaWNvblwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj4ge3sgJ3NjYW5uZXIuc2NhbkZpbGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdChjbGljayk9XCJidG5Mb2FkSW1hZ2VzT3JQREZzX29uY2xpY2soKVwiXHJcblx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJhY3Rpb24tYnRuIGFjdGlvbi1idG5fMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAteC0yXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDxpIGNsYXNzPVwiYmkgYmktdXBsb2FkIGljb25cIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4+IHt7ICdzY2FubmVyLmxvYWRGaWxlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgbXgtM1wiPlxyXG5cdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0Y2xhc3M9XCJidG4gc2F2ZS1idXR0b25cIlxyXG5cdFx0XHRcdFtuZ0NsYXNzXT1cInsgJ2hpZGUtdXBsb2FkLWJ1dHRvbic6IGhpZGVVcGxvYWRCdXR0b24gfVwiXHJcblx0XHRcdFx0I3NjYW5uZXJVcGxvYWRCdXR0b25cclxuXHRcdFx0XHRpZD1cInNjYW5uZXJVcGxvYWRCdXR0b25cIlxyXG5cdFx0XHRcdFtkaXNhYmxlZF09XCJEV09iamVjdD8uSG93TWFueUltYWdlc0luQnVmZmVyID09PSAwXCJcclxuXHRcdFx0XHRjb2xvcj1cInByaW1hcnlcIlxyXG5cdFx0XHRcdChjbGljayk9XCJjb252ZXJ0VG9CbG9iKClcIlxyXG5cdFx0XHQ+XHJcblx0XHRcdFx0e3sgJ3NjYW5uZXIuc2F2ZUZpbGUnIHwgdHJhbnNsYXRlIH19XHJcblx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=