geonetwork-ui 2.6.0-dev.c5432f39f → 2.6.0-dev.cfd9cd166

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 (586) hide show
  1. package/README.md +2 -3
  2. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +11 -2
  3. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.mjs +3 -3
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +17 -11
  5. package/esm2022/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.mjs +3 -3
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +4 -8
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +3 -6
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +14 -6
  9. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +4 -4
  10. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +5 -5
  11. package/esm2022/libs/api/metadata-converter/src/lib/translate-utils.mjs +17 -0
  12. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +4 -4
  13. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +4 -2
  14. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +18 -16
  15. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +46 -16
  16. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +8 -8
  17. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +14 -11
  18. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +23 -13
  19. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +2 -1
  20. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  21. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  22. package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +7 -31
  23. package/esm2022/libs/feature/catalog/src/lib/sources/sources.service.mjs +9 -8
  24. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +4 -4
  25. package/esm2022/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.mjs +4 -5
  26. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +5 -3
  27. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +4 -4
  28. package/esm2022/libs/feature/editor/src/index.mjs +1 -4
  29. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
  30. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +13 -7
  31. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +4 -1
  32. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +5 -1
  33. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +5 -7
  34. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +8 -13
  35. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +5 -6
  36. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +11 -9
  37. package/esm2022/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.mjs +4 -13
  38. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +5 -5
  39. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.mjs +5 -8
  40. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.mjs +4 -5
  41. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +6 -10
  42. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +8 -14
  43. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +4 -15
  44. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +4 -4
  45. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +4 -4
  46. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +4 -4
  47. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +4 -4
  48. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.mjs +4 -4
  49. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +4 -4
  50. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +6 -17
  51. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +4 -5
  52. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +12 -30
  53. package/esm2022/libs/feature/editor/src/lib/models/index.mjs +1 -3
  54. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +5 -6
  55. package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +11 -8
  56. package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +11 -8
  57. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +11 -6
  58. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +10 -5
  59. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +3 -36
  60. package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +5 -11
  61. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +6 -6
  62. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +20 -19
  63. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +6 -7
  64. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +4 -5
  65. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +6 -7
  66. package/esm2022/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.mjs +4 -4
  67. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +8 -22
  68. package/esm2022/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.mjs +5 -5
  69. package/esm2022/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.mjs +15 -7
  70. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +77 -28
  71. package/esm2022/libs/feature/search/src/lib/constants.mjs +3 -2
  72. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +4 -4
  73. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +24 -27
  74. package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +3 -3
  75. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +8 -6
  76. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +6 -6
  77. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +13 -10
  78. package/esm2022/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.mjs +5 -7
  79. package/esm2022/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.mjs +4 -4
  80. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +5 -4
  81. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +4 -5
  82. package/esm2022/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.mjs +4 -5
  83. package/esm2022/libs/ui/catalog/src/lib/organisations-result/organisations-result.component.mjs +4 -5
  84. package/esm2022/libs/ui/dataviz/src/index.mjs +1 -2
  85. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +4 -4
  86. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +5 -5
  87. package/esm2022/libs/ui/elements/src/index.mjs +1 -3
  88. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +6 -6
  89. package/esm2022/libs/ui/elements/src/lib/application-banner/application-banner.component.mjs +5 -5
  90. package/esm2022/libs/ui/elements/src/lib/avatar/avatar.component.mjs +4 -3
  91. package/esm2022/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.mjs +5 -3
  92. package/esm2022/libs/ui/elements/src/lib/download-item/download-item.component.mjs +4 -5
  93. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +4 -4
  94. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +4 -5
  95. package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +4 -5
  96. package/esm2022/libs/ui/elements/src/lib/image-input/image-input.component.mjs +4 -5
  97. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +19 -36
  98. package/esm2022/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.mjs +58 -0
  99. package/esm2022/libs/ui/elements/src/lib/kind-badge/kind-badge.component.mjs +7 -10
  100. package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +4 -5
  101. package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +3 -6
  102. package/esm2022/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.mjs +4 -5
  103. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +4 -5
  104. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +6 -7
  105. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +39 -16
  106. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +8 -5
  107. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +7 -5
  108. package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +52 -32
  109. package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +5 -4
  110. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +4 -5
  111. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +5 -4
  112. package/esm2022/libs/ui/inputs/src/index.mjs +1 -2
  113. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +5 -6
  114. package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +4 -3
  115. package/esm2022/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.mjs +7 -6
  116. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +29 -7
  117. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +4 -5
  118. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +5 -7
  119. package/esm2022/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.mjs +4 -3
  120. package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +12 -7
  121. package/esm2022/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.mjs +4 -5
  122. package/esm2022/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.mjs +3 -3
  123. package/esm2022/libs/ui/layout/src/index.mjs +2 -2
  124. package/esm2022/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.mjs +3 -2
  125. package/esm2022/libs/ui/layout/src/lib/cell-popin/cell-popin.component.mjs +110 -0
  126. package/esm2022/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.mjs +4 -5
  127. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +21 -12
  128. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +4 -5
  129. package/esm2022/libs/ui/layout/src/lib/pagination/pagination.component.mjs +4 -5
  130. package/esm2022/libs/ui/layout/src/lib/sticky-header/sticky-header.component.mjs +4 -3
  131. package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +17 -53
  132. package/esm2022/libs/ui/map/src/lib/components/map-container/map-container.component.mjs +4 -5
  133. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +6 -6
  134. package/esm2022/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.mjs +3 -3
  135. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +8 -8
  136. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +28 -17
  137. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +23 -24
  138. package/esm2022/libs/ui/widgets/src/index.mjs +1 -2
  139. package/esm2022/libs/ui/widgets/src/lib/color-scale/color-scale.component.mjs +3 -3
  140. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +1 -3
  141. package/esm2022/libs/util/i18n/src/index.mjs +2 -3
  142. package/esm2022/libs/util/i18n/src/lib/embedded.translate.loader.mjs +3 -2
  143. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +36 -69
  144. package/esm2022/libs/util/i18n/src/lib/i18n.interceptor.mjs +10 -9
  145. package/esm2022/libs/util/i18n/src/lib/i18n.providers.mjs +41 -0
  146. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +40 -2
  147. package/esm2022/libs/util/shared/src/index.mjs +2 -2
  148. package/esm2022/libs/util/shared/src/lib/image-fallback.directive.mjs +3 -2
  149. package/esm2022/libs/util/shared/src/lib/record.util.mjs +56 -0
  150. package/esm2022/translations/de.json +20 -22
  151. package/esm2022/translations/en.json +21 -23
  152. package/esm2022/translations/es.json +19 -21
  153. package/esm2022/translations/fr.json +25 -27
  154. package/esm2022/translations/it.json +22 -24
  155. package/esm2022/translations/nl.json +19 -21
  156. package/esm2022/translations/pt.json +19 -21
  157. package/esm2022/translations/sk.json +602 -0
  158. package/fesm2022/geonetwork-ui.mjs +10826 -10689
  159. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  160. package/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.d.ts.map +1 -1
  161. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +4 -4
  162. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  163. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
  164. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
  165. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  166. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  167. package/libs/api/metadata-converter/src/lib/translate-utils.d.ts +2 -0
  168. package/libs/api/metadata-converter/src/lib/translate-utils.d.ts.map +1 -0
  169. package/libs/api/repository/src/lib/gn4/auth/auth.service.d.ts.map +1 -1
  170. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  171. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +8 -6
  172. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  173. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +10 -4
  174. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  175. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.d.ts +1 -0
  176. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.d.ts.map +1 -1
  177. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts +4 -4
  178. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  179. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +6 -3
  180. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  181. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts +1 -0
  182. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  183. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +20 -17
  184. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  185. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +5 -2
  186. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  187. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts +4 -8
  188. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts.map +1 -1
  189. package/libs/feature/catalog/src/lib/sources/sources.service.d.ts +3 -3
  190. package/libs/feature/catalog/src/lib/sources/sources.service.d.ts.map +1 -1
  191. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  192. package/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.d.ts.map +1 -1
  193. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  194. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  195. package/libs/feature/editor/src/index.d.ts +0 -3
  196. package/libs/feature/editor/src/index.d.ts.map +1 -1
  197. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +8 -1
  198. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  199. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +10 -12
  200. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  201. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +2 -1
  202. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  203. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  204. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +1 -1
  205. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  206. package/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.d.ts.map +1 -1
  207. package/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.d.ts.map +1 -1
  208. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts.map +1 -1
  209. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -1
  210. package/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.d.ts.map +1 -1
  211. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  212. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.d.ts.map +1 -1
  213. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.d.ts.map +1 -1
  214. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts.map +1 -1
  215. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -1
  216. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts.map +1 -1
  217. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts.map +1 -1
  218. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts.map +1 -1
  219. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +1 -1
  220. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts.map +1 -1
  221. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts.map +1 -1
  222. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  223. package/libs/feature/editor/src/lib/feature-editor.module.d.ts +10 -17
  224. package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
  225. package/libs/feature/editor/src/lib/models/index.d.ts +0 -2
  226. package/libs/feature/editor/src/lib/models/index.d.ts.map +1 -1
  227. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.d.ts.map +1 -1
  228. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -1
  229. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts.map +1 -1
  230. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -1
  231. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts.map +1 -1
  232. package/libs/feature/map/src/lib/feature-map.module.d.ts +2 -11
  233. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  234. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -1
  235. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts.map +1 -1
  236. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +7 -4
  237. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  238. package/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.d.ts.map +1 -1
  239. package/libs/feature/record/src/lib/feature-record.module.d.ts +8 -12
  240. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  241. package/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.d.ts.map +1 -1
  242. package/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.d.ts.map +1 -1
  243. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +13 -6
  244. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  245. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  246. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  247. package/libs/feature/search/src/lib/feature-search.module.d.ts +24 -24
  248. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  249. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +2 -1
  250. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  251. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +6 -5
  252. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  253. package/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.d.ts +1 -2
  254. package/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.d.ts.map +1 -1
  255. package/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.d.ts.map +1 -1
  256. package/libs/feature/search/src/lib/utils/service/fields.d.ts +1 -2
  257. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  258. package/libs/ui/dataviz/src/index.d.ts +0 -1
  259. package/libs/ui/dataviz/src/index.d.ts.map +1 -1
  260. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -1
  261. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts +1 -1
  262. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts.map +1 -1
  263. package/libs/ui/elements/src/index.d.ts +0 -2
  264. package/libs/ui/elements/src/index.d.ts.map +1 -1
  265. package/libs/ui/elements/src/lib/api-card/api-card.component.d.ts.map +1 -1
  266. package/libs/ui/elements/src/lib/avatar/avatar.component.d.ts +1 -1
  267. package/libs/ui/elements/src/lib/avatar/avatar.component.d.ts.map +1 -1
  268. package/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.d.ts +2 -0
  269. package/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.d.ts.map +1 -1
  270. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  271. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +4 -7
  272. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  273. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts +14 -0
  274. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts.map +1 -0
  275. package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts.map +1 -1
  276. package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts.map +1 -1
  277. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  278. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +3 -0
  279. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  280. package/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.d.ts.map +1 -1
  281. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  282. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +20 -9
  283. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -1
  284. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -1
  285. package/libs/ui/elements/src/lib/user-preview/user-preview.component.d.ts +1 -1
  286. package/libs/ui/elements/src/lib/user-preview/user-preview.component.d.ts.map +1 -1
  287. package/libs/ui/inputs/src/index.d.ts +0 -1
  288. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  289. package/libs/ui/inputs/src/lib/checkbox/checkbox.component.d.ts +1 -1
  290. package/libs/ui/inputs/src/lib/checkbox/checkbox.component.d.ts.map +1 -1
  291. package/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.d.ts +1 -1
  292. package/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.d.ts.map +1 -1
  293. package/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.d.ts +1 -1
  294. package/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.d.ts.map +1 -1
  295. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts.map +1 -1
  296. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.d.ts +1 -1
  297. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.d.ts.map +1 -1
  298. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -1
  299. package/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.d.ts +1 -1
  300. package/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.d.ts.map +1 -1
  301. package/libs/ui/layout/src/index.d.ts +1 -1
  302. package/libs/ui/layout/src/index.d.ts.map +1 -1
  303. package/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.d.ts +1 -1
  304. package/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.d.ts.map +1 -1
  305. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts +28 -0
  306. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts.map +1 -0
  307. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +4 -2
  308. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  309. package/libs/ui/layout/src/lib/sticky-header/sticky-header.component.d.ts +1 -1
  310. package/libs/ui/layout/src/lib/sticky-header/sticky-header.component.d.ts.map +1 -1
  311. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +6 -11
  312. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -1
  313. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +2 -1
  314. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  315. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +5 -3
  316. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  317. package/libs/ui/search/src/lib/ui-search.module.d.ts +11 -11
  318. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  319. package/libs/ui/widgets/src/index.d.ts +0 -1
  320. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  321. package/libs/ui/widgets/src/lib/color-scale/color-scale.component.d.ts +1 -1
  322. package/libs/ui/widgets/src/lib/color-scale/color-scale.component.d.ts.map +1 -1
  323. package/libs/util/app-config/src/lib/app-config.d.ts +0 -1
  324. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  325. package/libs/util/i18n/src/index.d.ts +1 -2
  326. package/libs/util/i18n/src/index.d.ts.map +1 -1
  327. package/libs/util/i18n/src/lib/embedded.translate.loader.d.ts +1 -1
  328. package/libs/util/i18n/src/lib/embedded.translate.loader.d.ts.map +1 -1
  329. package/libs/util/i18n/src/lib/i18n.constants.d.ts +6 -16
  330. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  331. package/libs/util/i18n/src/lib/i18n.interceptor.d.ts +5 -5
  332. package/libs/util/i18n/src/lib/i18n.interceptor.d.ts.map +1 -1
  333. package/libs/util/i18n/src/lib/i18n.providers.d.ts +4 -0
  334. package/libs/util/i18n/src/lib/i18n.providers.d.ts.map +1 -0
  335. package/libs/util/i18n/src/lib/language-codes.d.ts +3 -29
  336. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
  337. package/libs/util/shared/src/index.d.ts +1 -1
  338. package/libs/util/shared/src/index.d.ts.map +1 -1
  339. package/libs/util/shared/src/lib/image-fallback.directive.d.ts +1 -1
  340. package/libs/util/shared/src/lib/image-fallback.directive.d.ts.map +1 -1
  341. package/libs/util/shared/src/lib/record.util.d.ts +3 -0
  342. package/libs/util/shared/src/lib/record.util.d.ts.map +1 -0
  343. package/package.json +3 -3
  344. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +10 -1
  345. package/src/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.ts +2 -2
  346. package/src/libs/api/metadata-converter/src/lib/fixtures/metadata-for-i18n.records.ts +4196 -0
  347. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +19 -6
  348. package/src/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.ts +4 -4
  349. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +3 -7
  350. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +2 -6
  351. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +14 -8
  352. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +3 -3
  353. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +5 -7
  354. package/src/libs/api/metadata-converter/src/lib/translate-utils.ts +17 -0
  355. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +3 -6
  356. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +3 -1
  357. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +14 -6
  358. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +60 -16
  359. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +8 -7
  360. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +13 -6
  361. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +24 -20
  362. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -0
  363. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +20 -14
  364. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +9 -2
  365. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +113 -0
  366. package/src/libs/feature/catalog/src/lib/feature-catalog.module.ts +4 -17
  367. package/src/libs/feature/catalog/src/lib/sources/sources.service.ts +7 -3
  368. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +2 -2
  369. package/src/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.ts +2 -2
  370. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +4 -2
  371. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +2 -2
  372. package/src/libs/feature/editor/src/index.ts +0 -3
  373. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +9 -1
  374. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +23 -12
  375. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +13 -1
  376. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +9 -1
  377. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.ts +3 -4
  378. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.ts +5 -16
  379. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.ts +7 -5
  380. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +16 -10
  381. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.ts +2 -10
  382. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +3 -2
  383. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.ts +3 -4
  384. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.ts +2 -2
  385. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.ts +4 -11
  386. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +5 -9
  387. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +2 -17
  388. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.ts +2 -2
  389. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +2 -2
  390. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.ts +2 -2
  391. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +2 -2
  392. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +2 -2
  393. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.ts +2 -2
  394. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +2 -2
  395. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +2 -15
  396. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +2 -2
  397. package/src/libs/feature/editor/src/lib/feature-editor.module.ts +4 -17
  398. package/src/libs/feature/editor/src/lib/models/index.ts +0 -2
  399. package/src/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.ts +2 -1
  400. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +8 -3
  401. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.ts +10 -3
  402. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +8 -2
  403. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.ts +8 -2
  404. package/src/libs/feature/map/src/lib/feature-map.module.ts +0 -17
  405. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +3 -8
  406. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.ts +3 -2
  407. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +1 -1
  408. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +22 -19
  409. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +2 -2
  410. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.ts +2 -2
  411. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +2 -2
  412. package/src/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.ts +2 -2
  413. package/src/libs/feature/record/src/lib/feature-record.module.ts +4 -13
  414. package/src/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.ts +4 -3
  415. package/src/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.ts +10 -4
  416. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +27 -9
  417. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +113 -30
  418. package/src/libs/feature/search/src/lib/constants.ts +2 -1
  419. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +2 -2
  420. package/src/libs/feature/search/src/lib/feature-search.module.ts +13 -18
  421. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +1 -1
  422. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +5 -0
  423. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  424. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +13 -3
  425. package/src/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.ts +10 -4
  426. package/src/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.ts +2 -2
  427. package/src/libs/feature/search/src/lib/utils/service/fields.ts +4 -3
  428. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.ts +2 -2
  429. package/src/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.ts +2 -2
  430. package/src/libs/ui/catalog/src/lib/organisations-result/organisations-result.component.ts +2 -2
  431. package/src/libs/ui/dataviz/src/index.ts +0 -1
  432. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +2 -2
  433. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +0 -1
  434. package/src/libs/ui/dataviz/src/lib/figure/figure.component.ts +4 -0
  435. package/src/libs/ui/elements/src/index.ts +0 -2
  436. package/src/libs/ui/elements/src/lib/api-card/api-card.component.ts +3 -2
  437. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.html +6 -6
  438. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.ts +2 -2
  439. package/src/libs/ui/elements/src/lib/avatar/avatar.component.ts +3 -0
  440. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.html +6 -2
  441. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.ts +5 -1
  442. package/src/libs/ui/elements/src/lib/download-item/download-item.component.ts +2 -2
  443. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +2 -5
  444. package/src/libs/ui/elements/src/lib/error/error.component.ts +2 -2
  445. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +2 -2
  446. package/src/libs/ui/elements/src/lib/image-input/image-input.component.ts +2 -2
  447. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +8 -76
  448. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +22 -55
  449. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.html +69 -0
  450. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.ts +61 -0
  451. package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.ts +4 -5
  452. package/src/libs/ui/elements/src/lib/link-card/link-card.component.ts +2 -2
  453. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +1 -4
  454. package/src/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.ts +2 -2
  455. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts +2 -2
  456. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +4 -7
  457. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +51 -13
  458. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +6 -2
  459. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +4 -2
  460. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +96 -37
  461. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +62 -31
  462. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +7 -2
  463. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +2 -2
  464. package/src/libs/ui/elements/src/lib/user-preview/user-preview.component.ts +4 -0
  465. package/src/libs/ui/inputs/src/index.ts +0 -1
  466. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +2 -2
  467. package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.ts +3 -0
  468. package/src/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.html +1 -1
  469. package/src/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.ts +4 -0
  470. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.ts +27 -0
  471. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +2 -2
  472. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.ts +3 -4
  473. package/src/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.ts +3 -0
  474. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +9 -3
  475. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +2 -2
  476. package/src/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.ts +1 -0
  477. package/src/libs/ui/layout/src/index.ts +1 -1
  478. package/src/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.ts +1 -0
  479. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.html +40 -0
  480. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.ts +141 -0
  481. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.ts +2 -2
  482. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +2 -2
  483. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +15 -8
  484. package/src/libs/ui/layout/src/lib/max-lines/max-lines.component.ts +2 -2
  485. package/src/libs/ui/layout/src/lib/pagination/pagination.component.ts +2 -2
  486. package/src/libs/ui/layout/src/lib/sticky-header/sticky-header.component.ts +3 -0
  487. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +25 -42
  488. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +12 -58
  489. package/src/libs/ui/map/src/lib/components/map-container/map-container.component.ts +2 -2
  490. package/src/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.html +4 -1
  491. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +6 -4
  492. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +4 -4
  493. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +14 -22
  494. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +34 -13
  495. package/src/libs/ui/search/src/lib/ui-search.module.ts +12 -11
  496. package/src/libs/ui/widgets/src/index.ts +0 -1
  497. package/src/libs/ui/widgets/src/lib/color-scale/color-scale.component.ts +1 -0
  498. package/src/libs/util/app-config/src/lib/app-config.ts +0 -2
  499. package/src/libs/util/i18n/src/index.ts +1 -2
  500. package/src/libs/util/i18n/src/lib/embedded.translate.loader.ts +4 -3
  501. package/src/libs/util/i18n/src/lib/i18n.constants.ts +39 -71
  502. package/src/libs/util/i18n/src/lib/i18n.interceptor.ts +11 -9
  503. package/src/libs/util/i18n/src/lib/i18n.providers.ts +68 -0
  504. package/src/libs/util/i18n/src/lib/language-codes.ts +44 -1
  505. package/src/libs/util/shared/src/index.ts +1 -1
  506. package/src/libs/util/shared/src/lib/image-fallback.directive.ts +1 -0
  507. package/src/libs/util/shared/src/lib/record.util.ts +114 -0
  508. package/translations/de.json +20 -22
  509. package/translations/en.json +21 -23
  510. package/translations/es.json +19 -21
  511. package/translations/fr.json +25 -27
  512. package/translations/it.json +22 -24
  513. package/translations/nl.json +19 -21
  514. package/translations/pt.json +19 -21
  515. package/translations/sk.json +19 -21
  516. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.mjs +0 -44
  517. package/esm2022/libs/feature/editor/src/lib/components/wizard/wizard.component.mjs +0 -75
  518. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +0 -160
  519. package/esm2022/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.mjs +0 -53
  520. package/esm2022/libs/feature/editor/src/lib/models/wizard-field.model.mjs +0 -2
  521. package/esm2022/libs/feature/editor/src/lib/models/wizard-field.type.mjs +0 -8
  522. package/esm2022/libs/feature/editor/src/lib/services/wizard.service.mjs +0 -87
  523. package/esm2022/libs/ui/dataviz/src/lib/ui-dataviz.module.mjs +0 -47
  524. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +0 -56
  525. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +0 -130
  526. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +0 -160
  527. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +0 -23
  528. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +0 -46
  529. package/esm2022/libs/util/i18n/src/lib/lang.service.mjs +0 -31
  530. package/esm2022/libs/util/i18n/src/lib/util-i18n.module.mjs +0 -37
  531. package/esm2022/libs/util/shared/src/lib/util-shared.module.mjs +0 -18
  532. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts +0 -14
  533. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts.map +0 -1
  534. package/libs/feature/editor/src/lib/components/wizard/wizard.component.d.ts +0 -31
  535. package/libs/feature/editor/src/lib/components/wizard/wizard.component.d.ts.map +0 -1
  536. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts +0 -43
  537. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts.map +0 -1
  538. package/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.d.ts +0 -17
  539. package/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.d.ts.map +0 -1
  540. package/libs/feature/editor/src/lib/models/wizard-field.model.d.ts +0 -10
  541. package/libs/feature/editor/src/lib/models/wizard-field.model.d.ts.map +0 -1
  542. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts +0 -7
  543. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts.map +0 -1
  544. package/libs/feature/editor/src/lib/services/wizard.service.d.ts +0 -33
  545. package/libs/feature/editor/src/lib/services/wizard.service.d.ts.map +0 -1
  546. package/libs/ui/dataviz/src/lib/ui-dataviz.module.d.ts +0 -11
  547. package/libs/ui/dataviz/src/lib/ui-dataviz.module.d.ts.map +0 -1
  548. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +0 -19
  549. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +0 -1
  550. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +0 -31
  551. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +0 -1
  552. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +0 -35
  553. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +0 -1
  554. package/libs/ui/layout/src/lib/ui-layout.module.d.ts +0 -12
  555. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +0 -1
  556. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +0 -15
  557. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +0 -1
  558. package/libs/util/i18n/src/lib/lang.service.d.ts +0 -13
  559. package/libs/util/i18n/src/lib/lang.service.d.ts.map +0 -1
  560. package/libs/util/i18n/src/lib/util-i18n.module.d.ts +0 -12
  561. package/libs/util/i18n/src/lib/util-i18n.module.d.ts.map +0 -1
  562. package/libs/util/shared/src/lib/util-shared.module.d.ts +0 -9
  563. package/libs/util/shared/src/lib/util-shared.module.d.ts.map +0 -1
  564. package/src/libs/feature/editor/src/lib/components/wizard/wizard.component.css +0 -5
  565. package/src/libs/feature/editor/src/lib/components/wizard/wizard.component.html +0 -22
  566. package/src/libs/feature/editor/src/lib/components/wizard/wizard.component.ts +0 -93
  567. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.css +0 -31
  568. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.html +0 -62
  569. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.ts +0 -206
  570. package/src/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.css +0 -3
  571. package/src/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.html +0 -21
  572. package/src/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.ts +0 -58
  573. package/src/libs/feature/editor/src/lib/models/wizard-field.model.ts +0 -10
  574. package/src/libs/feature/editor/src/lib/models/wizard-field.type.ts +0 -6
  575. package/src/libs/feature/editor/src/lib/services/wizard.service.ts +0 -105
  576. package/src/libs/ui/dataviz/src/lib/ui-dataviz.module.ts +0 -27
  577. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.css +0 -0
  578. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +0 -9
  579. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +0 -61
  580. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +0 -72
  581. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +0 -96
  582. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +0 -14
  583. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +0 -25
  584. package/src/libs/util/i18n/src/lib/lang.service.ts +0 -23
  585. package/src/libs/util/i18n/src/lib/util-i18n.module.ts +0 -26
  586. package/src/libs/util/shared/src/lib/util-shared.module.ts +0 -10
@@ -7,7 +7,7 @@ import { getKeywordTypeFromKeywordTypeCode } from './utils/keyword.mapper';
7
7
  import { getRoleFromRoleCode } from './utils/role.mapper';
8
8
  import { getStatusFromStatusCode } from './utils/status.mapper';
9
9
  import { getUpdateFrequencyFromFrequencyCode } from './utils/update-frequency.mapper';
10
- import { LANG_3_TO_2_MAPPER } from '../../../../../../libs/util/i18n/src/lib/language-codes';
10
+ import { getLang2FromLang3 } from '../../../../../../libs/util/i18n/src/lib/language-codes';
11
11
  import { getResourceType, getReuseType } from '../common/resource-types';
12
12
  export function extractCharacterString() {
13
13
  return pipe(fallback(findChildElement('gco:CharacterString', false), findChildElement('gmx:Anchor', false), findChildElement('gmx:MimeFileType', false)), readText());
@@ -474,12 +474,12 @@ export function readSpatialExtents(rootEl) {
474
474
  }
475
475
  export function readOtherLanguages(rootEl) {
476
476
  const defaultLanguage = readDefaultLanguage(rootEl);
477
- return pipe(findChildrenElement('gmd:locale', false), mapArray(pipe(findChildElement('lan:LanguageCode'), readAttribute('codeListValue'), map((lang) => LANG_3_TO_2_MAPPER[lang.toLowerCase()] ?? lang))), map((languages) => languages.filter((lang) => lang !== null)), map((languages) => (languages.length ? languages : [defaultLanguage])))(rootEl);
477
+ return pipe(findChildrenElement('gmd:locale', false), mapArray(pipe(findChildElement('lan:LanguageCode'), readAttribute('codeListValue'), map((lang) => getLang2FromLang3(lang?.toLowerCase()) ?? lang))), map((languages) => languages.filter((lang) => lang !== null)), map((languages) => (languages.length ? languages : [defaultLanguage])))(rootEl);
478
478
  }
479
479
  export function readDefaultLanguage(rootEl) {
480
- return pipe(findChildElement('gmd:language', false), findChildElement('lan:LanguageCode'), readAttribute('codeListValue'), map((lang) => (lang ? LANG_3_TO_2_MAPPER[lang.toLowerCase()] : null)))(rootEl);
480
+ return pipe(findChildElement('gmd:language', false), findChildElement('lan:LanguageCode'), readAttribute('codeListValue'), map((lang) => (lang ? getLang2FromLang3(lang.toLowerCase()) : null)))(rootEl);
481
481
  }
482
482
  export function readResourceIdentifier(rootEl) {
483
483
  return pipe(findIdentification(), findNestedElement('gmd:citation', 'gmd:CI_Citation', 'gmd:identifier', 'gmd:MD_Identifier', 'gmd:code'), extractCharacterString())(rootEl);
484
484
  }
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1wYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3JlYWQtcGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEJBLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDNUUsT0FBTyxFQUVMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFFBQVEsR0FFVCxNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9ELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFBO0FBQzVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFeEUsTUFBTSxVQUFVLHNCQUFzQjtJQUlwQyxPQUFPLElBQUksQ0FDVCxRQUFRLENBQ04sZ0JBQWdCLENBQUMscUJBQXFC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QUNULGtCQUFrQixFQUFFLEVBQ3BCLGlCQUFpQixDQUNmLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixVQUFVLENBQ1gsRUFDRCxzQkFBc0IsRUFBRSxDQUN6QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnN0cmFpbnQsXG4gIENvbnN0cmFpbnRUcmFuc2xhdGlvbnMsXG4gIERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgRmllbGRUcmFuc2xhdGlvbixcbiAgR3JhcGhpY092ZXJ2aWV3LFxuICBJbmRpdmlkdWFsLFxuICBLZXl3b3JkLFxuICBLZXl3b3JkVHJhbnNsYXRpb25zLFxuICBMYW5ndWFnZUNvZGUsXG4gIE1vZGVsVHJhbnNsYXRpb25zLFxuICBPbmxpbmVMaW5rUmVzb3VyY2UsXG4gIE9ubGluZVJlc291cmNlLFxuICBPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucyxcbiAgT3JnYW5pemF0aW9uLFxuICBPcmdhbml6YXRpb25UcmFuc2xhdGlvbnMsXG4gIFJlY29yZEtpbmQsXG4gIFJlY29yZFN0YXR1cyxcbiAgUmVjb3JkVHJhbnNsYXRpb25zLFxuICBSZXVzZVR5cGUsXG4gIFJvbGUsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZSxcbiAgU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSxcbiAgVXBkYXRlRnJlcXVlbmN5LFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdnZW9qc29uJ1xuaW1wb3J0IHsgbWF0Y2hNaW1lVHlwZSwgbWF0Y2hQcm90b2NvbCB9IGZyb20gJy4uL2NvbW1vbi9kaXN0cmlidXRpb24ubWFwcGVyJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGNvbWJpbmUsXG4gIGZhbGxiYWNrLFxuICBmaWx0ZXJBcnJheSxcbiAgZmxhdHRlbkFycmF5LFxuICBnZXRBdEluZGV4LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBwaXBlLFxufSBmcm9tICcuLi9mdW5jdGlvbi11dGlscydcbmltcG9ydCB7XG4gIGZpbmRDaGlsZEVsZW1lbnQsXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIGZpbmRQYXJlbnQsXG4gIGZpcnN0Q2hpbGRFbGVtZW50LFxuICByZWFkQXR0cmlidXRlLFxuICByZWFkVGV4dCxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHsgcmVhZEdlb21ldHJ5IH0gZnJvbSAnLi91dGlscy9nZW9tZXRyeSdcbmltcG9ydCB7IGZ1bGxOYW1lVG9QYXJ0cyB9IGZyb20gJy4vdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgZ2V0S2V5d29yZFR5cGVGcm9tS2V5d29yZFR5cGVDb2RlIH0gZnJvbSAnLi91dGlscy9rZXl3b3JkLm1hcHBlcidcbmltcG9ydCB7IGdldFJvbGVGcm9tUm9sZUNvZGUgfSBmcm9tICcuL3V0aWxzL3JvbGUubWFwcGVyJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUgfSBmcm9tICcuL3V0aWxzL3N0YXR1cy5tYXBwZXInXG5pbXBvcnQgeyBnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlLWZyZXF1ZW5jeS5tYXBwZXInXG5pbXBvcnQgeyBMQU5HXzNfVE9fMl9NQVBQRVIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMvbGliL2xhbmd1YWdlLWNvZGVzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VUeXBlLCBnZXRSZXVzZVR5cGUgfSBmcm9tICcuLi9jb21tb24vcmVzb3VyY2UtdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBzdHJpbmdcbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmYWxsYmFjayhcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6QW5jaG9yJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ214Ok1pbWVGaWxlVHlwZScsIGZhbHNlKVxuICAgICksXG4gICAgcmVhZFRleHQoKVxuICApXG59XG5cbi8qKlxuICogVHJhbnNsYXRlZCB2YWx1ZXMgd2lsbCBhbHNvIGJlIGNvbGxlY3RlZCBpbiB0aGUgdHJhbnNsYXRpb25zIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxUIGV4dGVuZHMgTW9kZWxUcmFuc2xhdGlvbnM+KFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgdHJhbnNsYXRpb25zPzogVFxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgW3N0cmluZywgVF0+IHtcbiAgcmV0dXJuIGNvbWJpbmUoXG4gICAgcGlwZShcbiAgICAgIGZhbGxiYWNrKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286Q2hhcmFjdGVyU3RyaW5nJywgZmFsc2UpLFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6QW5jaG9yJywgZmFsc2UpXG4gICAgICApLFxuICAgICAgcmVhZFRleHQoKVxuICAgICksXG4gICAgKGVsKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkVmFsdWVzID0gZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAnZ21kOlBUX0ZyZWVUZXh0JyxcbiAgICAgICAgJ2dtZDp0ZXh0R3JvdXAnLFxuICAgICAgICAnZ21kOkxvY2FsaXNlZENoYXJhY3RlclN0cmluZydcbiAgICAgICkoZWwpXG4gICAgICBjb25zdCB0cmFuc2xhdGlvbnNTYWZlID0gdHJhbnNsYXRpb25zID8/ICh7fSBhcyBUKVxuICAgICAgaWYgKCF0cmFuc2xhdGVkVmFsdWVzLmxlbmd0aCkgcmV0dXJuIHRyYW5zbGF0aW9uc1NhZmVcbiAgICAgIGNvbnN0IHZhbHVlVHJhbnNsYXRpb25zOiBGaWVsZFRyYW5zbGF0aW9uID0gdHJhbnNsYXRlZFZhbHVlcy5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCB0cmFuc2xhdGlvbkVsKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGFuZyA9IHJlYWRBdHRyaWJ1dGUoJ2xvY2FsZScpKHRyYW5zbGF0aW9uRWwpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL14jLywgJycpXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSByZWFkVGV4dCgpKHRyYW5zbGF0aW9uRWwpXG4gICAgICAgICAgaWYgKCFsYW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldlxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5wcmV2LCBbbGFuZ106IHZhbHVlIH1cbiAgICAgICAgfSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICAgIHRyYW5zbGF0aW9uc1NhZmVbZmllbGROYW1lXSA9IHtcbiAgICAgICAgLi4udHJhbnNsYXRpb25zU2FmZVtmaWVsZE5hbWVdLFxuICAgICAgICAuLi52YWx1ZVRyYW5zbGF0aW9ucyxcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbnNTYWZlXG4gICAgfVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0ZVRpbWUoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgRGF0ZT4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmYWxsYmFjayhcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpEYXRlVGltZScsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpEYXRlJywgZmFsc2UpXG4gICAgKSxcbiAgICByZWFkVGV4dCgpLFxuICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGVjaW1hbCgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBudW1iZXI+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkRlY2ltYWwnLCBmYWxzZSksXG4gICAgcmVhZFRleHQoKSxcbiAgICBtYXAoKG51bWJlclN0cikgPT4gKG51bWJlclN0ciA/IE51bWJlcihudW1iZXJTdHIpIDogbnVsbCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RVcmwoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgVVJMPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOlVSTCcsIGZhbHNlKSwgcmVhZFRleHQoKSlcbiAgY29uc3QgZ2V0Q2hhcmFjdGVyU3RyaW5nID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286Q2hhcmFjdGVyU3RyaW5nJywgZmFsc2UpLFxuICAgIHJlYWRUZXh0KClcbiAgKVxuICBjb25zdCBnZXRBbmNob3IgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dteDpBbmNob3InLCBmYWxzZSksXG4gICAgcmVhZEF0dHJpYnV0ZSgneGxpbms6aHJlZicpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmFsbGJhY2soZ2V0VXJsLCBnZXRBbmNob3IsIGdldENoYXJhY3RlclN0cmluZyksXG4gICAgbWFwKCh1cmxTdHIpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgVVJMKHVybFN0cilcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TWFuZGF0b3J5VXJsKCkge1xuICByZXR1cm4gZmFsbGJhY2soZXh0cmFjdFVybCgpLCAoKSA9PiBuZXcgVVJMKCdodHRwOi8vbWlzc2luZycpKVxufVxuXG4vLyBmcm9tIGdtZDpyb2xlXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFJvbGUoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgUm9sZT4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfUm9sZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKGdldFJvbGVGcm9tUm9sZUNvZGUpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPcmdhbml6YXRpb24oKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIE9yZ2FuaXphdGlvblxuPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgJ2dtZDpjb250YWN0SW5mbycsXG4gICAgICAnZ21kOkNJX0NvbnRhY3QnLFxuICAgICAgJ2dtZDpvbmxpbmVSZXNvdXJjZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJyxcbiAgICAgICdnbWQ6bGlua2FnZSdcbiAgICApLFxuICAgIGdldEF0SW5kZXgoMCksXG4gICAgZXh0cmFjdFVybCgpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgY29tYmluZShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpvcmdhbmlzYXRpb25OYW1lJywgZmFsc2UpLFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9yZ2FuaXphdGlvblRyYW5zbGF0aW9ucz4oJ25hbWUnKVxuICAgICAgKSxcbiAgICAgIGdldFVybFxuICAgICksXG4gICAgbWFwKChbW25hbWUsIHRyYW5zbGF0aW9uc10sIHdlYnNpdGVdKSA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIC4uLih3ZWJzaXRlICYmIHsgd2Vic2l0ZSB9KSxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpDSV9SZXNwb25zaWJsZVBhcnR5XG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEluZGl2aWR1YWwoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgSW5kaXZpZHVhbD4ge1xuICBjb25zdCBnZXRSb2xlID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cm9sZScpLCBleHRyYWN0Um9sZSgpKVxuICBjb25zdCBnZXRQb3NpdGlvbiA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnBvc2l0aW9uTmFtZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIGNvbnN0IGdldE5hbWVQYXJ0cyA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmluZGl2aWR1YWxOYW1lJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpLFxuICAgIG1hcCgoZnVsbE5hbWUpID0+IHtcbiAgICAgIGlmICghZnVsbE5hbWUpIHJldHVybiBbXVxuICAgICAgcmV0dXJuIGZ1bGxOYW1lVG9QYXJ0cyhmdWxsTmFtZSlcbiAgICB9KVxuICApXG4gIGNvbnN0IGdldE9yZ2FuaXphdGlvbiA9IGV4dHJhY3RPcmdhbml6YXRpb24oKVxuICBjb25zdCBnZXRDb250YWN0Um9vdCA9IGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y29udGFjdEluZm8nLCAnZ21kOkNJX0NvbnRhY3QnKVxuICBjb25zdCBnZXRFbWFpbCA9IHBpcGUoXG4gICAgZ2V0Q29udGFjdFJvb3QsXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmVsZWN0cm9uaWNNYWlsQWRkcmVzcycpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSxcbiAgICBtYXAoKGVtYWlsKSA9PiAoZW1haWwgPT09IG51bGwgPyAnbWlzc2luZ0BtaXNzaW5nLmNvbScgOiBlbWFpbCkpXG4gIClcbiAgY29uc3QgZ2V0QWRkcmVzcyA9IHBpcGUoXG4gICAgZ2V0Q29udGFjdFJvb3QsXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDphZGRyZXNzJywgJ2dtZDpDSV9BZGRyZXNzJyksXG4gICAgY29tYmluZShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZWxpdmVyeVBvaW50JywgZmFsc2UpLFxuICAgICAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgICAgICksXG4gICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpjaXR5JywgZmFsc2UpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpLFxuICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cG9zdGFsQ29kZScsIGZhbHNlKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKSxcbiAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmNvdW50cnknLCBmYWxzZSksIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSlcbiAgICApLFxuICAgIG1hcCgocGFydHMpID0+IHBhcnRzLmZpbHRlcigocCkgPT4gISFwKS5qb2luKCcsICcpKVxuICApXG4gIGNvbnN0IGdldFBob25lID0gcGlwZShcbiAgICBnZXRDb250YWN0Um9vdCxcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOnBob25lJywgJ2dtZDpDSV9UZWxlcGhvbmUnLCAnZ21kOnZvaWNlJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgY29tYmluZShcbiAgICAgIGdldFJvbGUsXG4gICAgICBnZXRQb3NpdGlvbixcbiAgICAgIGdldE5hbWVQYXJ0cyxcbiAgICAgIGdldE9yZ2FuaXphdGlvbixcbiAgICAgIGdldEVtYWlsLFxuICAgICAgZ2V0QWRkcmVzcyxcbiAgICAgIGdldFBob25lXG4gICAgKSxcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICByb2xlLFxuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgW2ZpcnN0TmFtZSwgbGFzdE5hbWVdLFxuICAgICAgICBvcmdhbml6YXRpb24sXG4gICAgICAgIGVtYWlsLFxuICAgICAgICBhZGRyZXNzLFxuICAgICAgICBwaG9uZSxcbiAgICAgIF0pID0+ICh7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICByb2xlLFxuICAgICAgICBvcmdhbml6YXRpb24sXG4gICAgICAgIC4uLihwb3NpdGlvbiAmJiB7IHBvc2l0aW9uIH0pLFxuICAgICAgICAuLi4oZmlyc3ROYW1lICYmIHsgZmlyc3ROYW1lIH0pLFxuICAgICAgICAuLi4obGFzdE5hbWUgJiYgeyBsYXN0TmFtZSB9KSxcbiAgICAgICAgLi4uKGFkZHJlc3MgJiYgeyBhZGRyZXNzIH0pLFxuICAgICAgICAuLi4ocGhvbmUgJiYgeyBwaG9uZSB9KSxcbiAgICAgIH0pXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U3RhdHVzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFJlY29yZFN0YXR1cz4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6TURfUHJvZ3Jlc3NDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRTdGF0dXNGcm9tU3RhdHVzQ29kZSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExlZ2FsQ29uc3RyYWludHMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnLCBmYWxzZSksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgIG1hcCgodmFsdWVzKSA9PiB2YWx1ZXMuaW5kZXhPZignbGljZW5zZScpID09PSAtMSlcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOm90aGVyQ29uc3RyYWludHMnKSxcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnVzZUxpbWl0YXRpb24nKVxuICAgICAgKVxuICAgICksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPENvbnN0cmFpbnRUcmFuc2xhdGlvbnM+KCd0ZXh0JyksXG4gICAgICAgIGV4dHJhY3RVcmwoKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtbdGV4dCwgdHJhbnNsYXRpb25zXSwgdXJsXSkgPT4gKHtcbiAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICB0ZXh0LFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbi8vIGZyb20gZ21kOnJlc291cmNlQ29uc3RyYWludHNcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U2VjdXJpdHlDb25zdHJhaW50cygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJywgJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPENvbnN0cmFpbnRUcmFuc2xhdGlvbnM+KCd0ZXh0JyksXG4gICAgICAgIGV4dHJhY3RVcmwoKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtbdGV4dCwgdHJhbnNsYXRpb25zXSwgdXJsXSkgPT4gKHtcbiAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICB0ZXh0LFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbi8vIGZyb20gZ21kOnJlc291cmNlQ29uc3RyYWludHNcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0T3RoZXJDb25zdHJhaW50cygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9Db25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxDb25zdHJhaW50VHJhbnNsYXRpb25zPigndGV4dCcpLFxuICAgICAgICBleHRyYWN0VXJsKClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbW3RleHQsIHRyYW5zbGF0aW9uc10sIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExpY2Vuc2VzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBBcnJheTxDb25zdHJhaW50PlxuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJywgZmFsc2UpLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgICAgICBtYXAoKHZhbHVlcykgPT4gdmFsdWVzLmluZGV4T2YoJ2xpY2Vuc2UnKSA+IC0xKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpXG4gICAgICApXG4gICAgKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8Q29uc3RyYWludFRyYW5zbGF0aW9ucz4oJ3RleHQnKSxcbiAgICAgICAgZXh0cmFjdFVybCgpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW1t0ZXh0LCB0cmFuc2xhdGlvbnNdLCB1cmxdKSA9PiAoe1xuICAgICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgICAgIHRleHQsXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSkpXG4gIClcbn1cblxuY29uc3QgZ2V0TWltZVR5cGUgPSBwaXBlKFxuICBmaW5kUGFyZW50KCdnbWQ6TURfRGlzdHJpYnV0aW9uJyksXG4gIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uRm9ybWF0JywgJ2dtZDpNRF9Gb3JtYXQnLCAnZ21kOm5hbWUnKSxcbiAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpLFxuICBtYXAobWF0Y2hNaW1lVHlwZSlcbilcblxuLyoqXG4gKiBFeHRyYWN0IG9ubGluZSByZXNvdXJjZXMgZnJvbSBhbiBNRF9EaXN0cmlidXRpb24gZWxlbWVudFxuICogQHBhcmFtIGdldE1pbWVUeXBlRm4gVGhpcyBmdW5jdGlvbiBzdGFydHMgZnJvbSBhIGdtZDp0cmFuc2Zlck9wdGlvbnMgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGFzZXRPbmxpbmVSZXNvdXJjZXMoXG4gIGdldE1pbWVUeXBlRm46IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIHN0cmluZz5cbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIERhdGFzZXRPbmxpbmVSZXNvdXJjZVtdPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmxpbmthZ2UnKSwgZXh0cmFjdE1hbmRhdG9yeVVybCgpKVxuICBjb25zdCBnZXRQcm90b2NvbFN0ciA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnByb3RvY29sJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgY29uc3QgZ2V0UHJvdG9jb2wgPSBwaXBlKGdldFByb3RvY29sU3RyLCBtYXAobWF0Y2hQcm90b2NvbCkpXG4gIGNvbnN0IGdldE9ubGluZUZ1bmN0aW9uID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmZ1bmN0aW9uJywgJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJylcbiAgKVxuICBjb25zdCBnZXRJc1NlcnZpY2UgPSBwaXBlKFxuICAgIGdldFByb3RvY29sLFxuICAgIG1hcCgocHJvdG9jb2wpID0+IHByb3RvY29sICE9PSAnb3RoZXInKVxuICApXG4gIGNvbnN0IGdldElzRG93bmxvYWQgPSBwaXBlKFxuICAgIGNvbWJpbmUoZ2V0SXNTZXJ2aWNlLCBnZXRPbmxpbmVGdW5jdGlvbiwgZ2V0UHJvdG9jb2xTdHIpLFxuICAgIG1hcChcbiAgICAgIChbaXNTZXJ2aWNlLCBvbmxpbmVGdW5jdGlvbiwgcHJvdG9jb2xTdHJdKSA9PlxuICAgICAgICAoIWlzU2VydmljZSAmJiBvbmxpbmVGdW5jdGlvbiA9PT0gJ2Rvd25sb2FkJykgfHxcbiAgICAgICAgL2Rvd25sb2FkL2kudGVzdChwcm90b2NvbFN0cilcbiAgICApXG4gIClcbiAgY29uc3QgZ2V0TmFtZSA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignbmFtZScpXG4gIClcbiAgY29uc3QgZ2V0RGVzY3JpcHRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KCdkZXNjcmlwdGlvbicpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgJ2dtZDp0cmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGdldElzU2VydmljZSxcbiAgICAgICAgZ2V0SXNEb3dubG9hZCxcbiAgICAgICAgZ2V0UHJvdG9jb2wsXG4gICAgICAgIGdldFVybCxcbiAgICAgICAgZ2V0TmFtZSxcbiAgICAgICAgZ2V0RGVzY3JpcHRpb24sXG4gICAgICAgIGdldE1pbWVUeXBlRm5cbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgKFtcbiAgICAgICAgaXNTZXJ2aWNlLFxuICAgICAgICBpc0Rvd25sb2FkLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdXJsLFxuICAgICAgICBbbmFtZSwgbmFtZVRyYW5zbGF0aW9uc10sXG4gICAgICAgIFtkZXNjcmlwdGlvbiwgZGVzY3JpcHRpb25UcmFuc2xhdGlvbnNdLFxuICAgICAgICBtaW1lVHlwZSxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICAgICAgICAgIC4uLm5hbWVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgLi4uZGVzY3JpcHRpb25UcmFuc2xhdGlvbnMsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU2VydmljZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnc2VydmljZScsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIGFjY2Vzc1NlcnZpY2VQcm90b2NvbDogcHJvdG9jb2wsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IGlkZW50aWZpZXJJblNlcnZpY2U6IG5hbWUgfSksIC8vIHNob3VsZCB3ZSBrZWVwIHRoZSBpZGVudGlmaWVySW5TZXJ2aWNlPyByZWFkLXdyaXRlIGR1cGxpY2F0ZSB3aXRoIG5hbWVcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpc0Rvd25sb2FkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkb3dubG9hZCcsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgLi4uKG1pbWVUeXBlICYmIHsgbWltZVR5cGUgfSksXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUN1c3RvbVBlcmlvZChcbiAgaXNvUGVyaW9kOiBzdHJpbmdcbik6IFVwZGF0ZUZyZXF1ZW5jeUN1c3RvbSB7XG4gIGlmICghaXNvUGVyaW9kKSByZXR1cm4gbnVsbFxuICBjb25zdCBtYXRjaGVzID0gaXNvUGVyaW9kLm1hdGNoKFxuICAgIC9eLT9QKD86KFswLTldKylZKT8oPzooWzAtOV0rKU0pPyg/OihbMC05XSspRCk/VD8oPzooWzAtOV0rKUgpPy9cbiAgKVxuICBpZiAoIW1hdGNoZXMpIHJldHVybiBudWxsXG4gIGNvbnN0IHllYXJzID0gcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApIHx8IDBcbiAgY29uc3QgbW9udGhzID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTApIHx8IDBcbiAgY29uc3QgZGF5cyA9IHBhcnNlSW50KG1hdGNoZXNbM10sIDEwKSB8fCAwXG4gIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQobWF0Y2hlc1s0XSwgMTApIHx8IDBcbiAgaWYgKHllYXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ3llYXInLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChtb250aHMgPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnbW9udGgnLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChtb250aHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAneWVhcicsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMTIgLyBtb250aHMpLFxuICAgIH1cbiAgfSBlbHNlIGlmIChkYXlzID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ2RheScsXG4gICAgICB1cGRhdGVkVGltZXM6IDEsXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMgPj0gMSAmJiBkYXlzIDw9IDcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnd2VlaycsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoNyAvIGRheXMgLSAwLjAwMDEpLCAvLyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0ICdldmVyeSAyIGRheXMnID0gJzMgdGltZXMgcGVyIHdlZWsnXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnbW9udGgnLFxuICAgICAgdXBkYXRlZFRpbWVzOiBNYXRoLnJvdW5kKDMwIC8gZGF5cyksXG4gICAgfVxuICB9IGVsc2UgaWYgKGhvdXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ2RheScsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMjQgLyBob3VycyksXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbi8vIGZyb20gZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb25cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VXBkYXRlRnJlcXVlbmN5KCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBVcGRhdGVGcmVxdWVuY3lcbj4ge1xuICByZXR1cm4gZmFsbGJhY2soXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpNRF9NYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUnKSxcbiAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgIG1hcChnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZSlcbiAgICApLFxuICAgIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDp1c2VyRGVmaW5lZE1haW50ZW5hbmNlRnJlcXVlbmN5JyxcbiAgICAgICAgJ2d0czpUTV9QZXJpb2REdXJhdGlvbidcbiAgICAgICksXG4gICAgICByZWFkVGV4dCgpLFxuICAgICAgbWFwKGdldFVwZGF0ZUZyZXF1ZW5jeUZyb21DdXN0b21QZXJpb2QpXG4gICAgKSxcbiAgICBtYXAoKCkgPT4gJ3Vua25vd24nKVxuICApXG59XG5cbi8qKlxuICogTG9va3MgZm9yIHNydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24gb3IgZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbiBlbGVtZW50XG4gKiBXaWxsIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGV4aXN0cywgbm90IHJlYWRpbmcgdGhlIHR5cGUgb2YgdGhlIHJlY29yZFxuICogKHRoaXMgYWxsb3dzIHVzaW5nIHRoaXMgZnVuY3Rpb24gaW4gb3RoZXIgc2ltaWxhciBzY2hlbWFzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZElkZW50aWZpY2F0aW9uKCkge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6aWRlbnRpZmljYXRpb25JbmZvJywgZmFsc2UpLFxuICAgIGNvbWJpbmUoXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbicsIGZhbHNlKVxuICAgICksXG4gICAgZmlsdGVyQXJyYXkoKGVsKSA9PiBlbCAhPT0gbnVsbCksXG4gICAgZ2V0QXRJbmRleCgwKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SWRlbnRpZmljYXRpb25EYXRlKFxuICB0eXBlOiAnY3JlYXRpb24nIHwgJ3JldmlzaW9uJyB8ICdwdWJsaWNhdGlvbidcbikge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOmRhdGUnKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAnZ21kOkNJX0RhdGUnLFxuICAgICAgICAgICdnbWQ6ZGF0ZVR5cGUnLFxuICAgICAgICAgICdnbWQ6Q0lfRGF0ZVR5cGVDb2RlJ1xuICAgICAgICApLFxuICAgICAgICBnZXRBdEluZGV4KDApLFxuICAgICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICAgIG1hcCgodmFsdWUpID0+IHZhbHVlID09PSB0eXBlKVxuICAgICAgKVxuICAgICksXG4gICAgZ2V0QXRJbmRleCgwKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpDSV9EYXRlJywgJ2dtZDpkYXRlJyksXG4gICAgZ2V0QXRJbmRleCgwKSxcbiAgICBleHRyYWN0RGF0ZVRpbWUoKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGF0aWFsUmVwcmVzZW50YXRpb25Gcm9tQ29kZShcbiAgc3BhdGlhbFJlcHJlc2VudGF0aW9uQ29kZTogc3RyaW5nXG4pOiBTcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlIHwgbnVsbCB7XG4gIHN3aXRjaCAoc3BhdGlhbFJlcHJlc2VudGF0aW9uQ29kZSkge1xuICAgIGNhc2UgJ2dyaWQnOlxuICAgIGNhc2UgJ3ZlY3Rvcic6XG4gICAgY2FzZSAndGluJzpcbiAgICBjYXNlICd0YWJsZSc6XG4gICAgY2FzZSAncG9pbnQnOlxuICAgICAgcmV0dXJuIHNwYXRpYWxSZXByZXNlbnRhdGlvbkNvZGVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVuaXF1ZUlkZW50aWZpZXIocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVJZGVudGlmaWVyJywgZmFsc2UpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRLaW5kKHJvb3RFbDogWG1sRWxlbWVudCk6IFJlY29yZEtpbmQge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmhpZXJhcmNoeUxldmVsJywgJ2dtZDpNRF9TY29wZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKChzY29wZUNvZGUpOiBSZWNvcmRLaW5kID0+IGdldFJlc291cmNlVHlwZShzY29wZUNvZGUpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPd25lck9yZ2FuaXphdGlvbihyb290RWw6IFhtbEVsZW1lbnQpOiBPcmdhbml6YXRpb24ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmNvbnRhY3QnLCAnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknKSxcbiAgICBleHRyYWN0T3JnYW5pemF0aW9uKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VVcGRhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZSgncmV2aXNpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VDcmVhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZSgnY3JlYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VQdWJsaXNoZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBleHRyYWN0SWRlbnRpZmljYXRpb25EYXRlKCdwdWJsaWNhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZWNvcmRVcGRhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGF0ZVN0YW1wJyksIGV4dHJhY3REYXRlVGltZSgpKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmV1c2VUeXBlKHJvb3RFbDogWG1sRWxlbWVudCk6IFJldXNlVHlwZSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6aGllcmFyY2h5TGV2ZWwnLCAnZ21kOk1EX1Njb3BlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoKHNjb3BlQ29kZSk6IFJldXNlVHlwZSA9PiBnZXRSZXVzZVR5cGUoc2NvcGVDb2RlKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGl0bGUoXG4gIHJvb3RFbDogWG1sRWxlbWVudCxcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnNcbik6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDp0aXRsZScpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoJ3RpdGxlJywgdHJhbnNsYXRpb25zKSxcbiAgICBtYXAoKFt0aXRsZV0pID0+IHRpdGxlKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRBYnN0cmFjdChcbiAgcm9vdEVsOiBYbWxFbGVtZW50LFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9uc1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmFic3RyYWN0JywgZmFsc2UpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoJ2Fic3RyYWN0JywgdHJhbnNsYXRpb25zKSxcbiAgICBtYXAoKFthYnN0cmFjdF0pID0+IGFic3RyYWN0KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDb250YWN0cyhyb290RWw6IFhtbEVsZW1lbnQpOiBJbmRpdmlkdWFsW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6Y29udGFjdCcsIGZhbHNlKSxcbiAgICBtYXBBcnJheShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScsIGZhbHNlKSksXG4gICAgbWFwQXJyYXkoZXh0cmFjdEluZGl2aWR1YWwoKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ29udGFjdHNGb3JSZXNvdXJjZShyb290RWw6IFhtbEVsZW1lbnQpOiBJbmRpdmlkdWFsW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBjb21iaW5lKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmNvbnRhY3QnLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cG9pbnRPZkNvbnRhY3QnLCBmYWxzZSlcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JywgZmFsc2UpKSxcbiAgICBtYXBBcnJheShleHRyYWN0SW5kaXZpZHVhbCgpKVxuICApKHJvb3RFbClcbn1cblxuLy8gZnJvbSBnbWQ6dGhlc2F1cnVzTmFtZVxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRUaGVzYXVydXMocm9vdEVsOiBYbWxFbGVtZW50KTogVGhlc2F1cnVzTW9kZWwge1xuICBpZiAoIXJvb3RFbCkgcmV0dXJuIG51bGxcblxuICBjb25zdCBmaW5kSWRlbnRpZmllciA9IGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICdnbWQ6Q0lfQ2l0YXRpb24nLFxuICAgICdnbWQ6aWRlbnRpZmllcicsXG4gICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAnZ21kOmNvZGUnXG4gIClcbiAgY29uc3QgaWQgPSBwaXBlKGZpbmRJZGVudGlmaWVyLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpKHJvb3RFbClcbiAgY29uc3QgdXJsID0gcGlwZShmaW5kSWRlbnRpZmllciwgZXh0cmFjdFVybCgpKShyb290RWwpXG4gIGNvbnN0IG5hbWUgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICkocm9vdEVsKVxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICB9XG59XG5cbi8vIGZyb20gZ21kOk1EX0tleXdvcmRzXG5leHBvcnQgZnVuY3Rpb24gcmVhZEtleXdvcmRHcm91cChyb290RWw6IFhtbEVsZW1lbnQpOiBLZXl3b3JkW10ge1xuICBjb25zdCB0eXBlID0gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfS2V5d29yZFR5cGVDb2RlJyksXG4gICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICBtYXAoKHZhbHVlcykgPT4gZ2V0S2V5d29yZFR5cGVGcm9tS2V5d29yZFR5cGVDb2RlKHZhbHVlc1swXSkpXG4gICkocm9vdEVsKVxuICBjb25zdCB0aGVzYXVydXMgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6dGhlc2F1cnVzTmFtZScpLFxuICAgIHJlYWRUaGVzYXVydXNcbiAgKShyb290RWwpXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDprZXl3b3JkJyksXG4gICAgbWFwQXJyYXkoKGVsKSA9PiB7XG4gICAgICBjb25zdCBbbGFiZWwsIHRyYW5zbGF0aW9uc10gPVxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPEtleXdvcmRUcmFuc2xhdGlvbnM+KCdsYWJlbCcpKGVsKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoZXNhdXJ1cyA/IHsgdGhlc2F1cnVzIH0gOiB7fSksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICB0eXBlLFxuICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICB9IGFzIEtleXdvcmRcbiAgICB9KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRLZXl3b3Jkcyhyb290RWw6IFhtbEVsZW1lbnQpOiBLZXl3b3JkW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJywgJ2dtZDpNRF9LZXl3b3JkcycpLFxuICAgIG1hcEFycmF5KHJlYWRLZXl3b3JkR3JvdXApLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFN0YXR1cyhyb290RWw6IFhtbEVsZW1lbnQpOiBSZWNvcmRTdGF0dXMge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6c3RhdHVzJywgZmFsc2UpLFxuICAgIGV4dHJhY3RTdGF0dXMoKVxuICApKHJvb3RFbClcbn1cblxuY29uc3QgZ2V0Q29uc3RyYWludHMgPSBwaXBlKFxuICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLCBmYWxzZSlcbilcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMZWdhbENvbnN0cmFpbnRzKHJvb3RFbDogWG1sRWxlbWVudCk6IENvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RMZWdhbENvbnN0cmFpbnRzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFNlY3VyaXR5Q29uc3RyYWludHMocm9vdEVsOiBYbWxFbGVtZW50KTogQ29uc3RyYWludFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZ2V0Q29uc3RyYWludHMsXG4gICAgbWFwQXJyYXkoZXh0cmFjdFNlY3VyaXR5Q29uc3RyYWludHMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3RoZXJDb25zdHJhaW50cyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0T3RoZXJDb25zdHJhaW50cygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMaWNlbnNlcyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0TGljZW5zZXMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbi8vIG5vdCB1c2VkIHlldFxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRJc29Ub3BpY3Mocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfVG9waWNDYXRlZ29yeUNvZGUnLCB0cnVlKSxcbiAgICBtYXBBcnJheShyZWFkVGV4dCgpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTcGF0aWFsUmVwcmVzZW50YXRpb24oXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKTogU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSB8IG51bGwge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6c3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZScsXG4gICAgICAnZ21kOk1EX1NwYXRpYWxSZXByZXNlbnRhdGlvblR5cGVDb2RlJ1xuICAgICksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRTcGF0aWFsUmVwcmVzZW50YXRpb25Gcm9tQ29kZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3ZlcnZpZXdzKHJvb3RFbDogWG1sRWxlbWVudCk6IEdyYXBoaWNPdmVydmlld1tdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmdyYXBoaWNPdmVydmlldycsIGZhbHNlKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVOYW1lJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVEZXNjcmlwdGlvbicpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW3VybCwgZGVzY3JpcHRpb25dKSA9PiAoe1xuICAgICAgdXJsLFxuICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgfSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExpbmVhZ2UoXG4gIHJvb3RFbDogWG1sRWxlbWVudCxcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnNcbik6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpkYXRhUXVhbGl0eUluZm8nLFxuICAgICAgJ2dtZDpEUV9EYXRhUXVhbGl0eScsXG4gICAgICAnZ21kOmxpbmVhZ2UnLFxuICAgICAgJ2dtZDpMSV9MaW5lYWdlJyxcbiAgICAgICdnbWQ6c3RhdGVtZW50J1xuICAgICksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZygnbGluZWFnZScsIHRyYW5zbGF0aW9ucyksXG4gICAgbWFwKChbbGluZWFnZV0pID0+IGxpbmVhZ2UpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVwZGF0ZUZyZXF1ZW5jeShyb290RWw6IFhtbEVsZW1lbnQpOiBVcGRhdGVGcmVxdWVuY3kge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6cmVzb3VyY2VNYWludGVuYW5jZScsXG4gICAgICAnZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb24nXG4gICAgKSxcbiAgICBleHRyYWN0VXBkYXRlRnJlcXVlbmN5KCksXG4gICAgbWFwKCh1cGRhdGVGcmVxdWVuY3kpID0+IHVwZGF0ZUZyZXF1ZW5jeSB8fCAndW5rbm93bicpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFNlcnZpY2VPbmxpbmVSZXNvdXJjZXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZVtdXG4+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGlua2FnZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpXG4gIGNvbnN0IGdldFByb3RvY29sU3RyID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICBjb25zdCBnZXRQcm90b2NvbCA9IHBpcGUoZ2V0UHJvdG9jb2xTdHIsIG1hcChtYXRjaFByb3RvY29sKSlcbiAgY29uc3QgZ2V0T25saW5lRnVuY3Rpb24gPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKVxuICApXG4gIGNvbnN0IGdldElzTGluayA9IHBpcGUoXG4gICAgZ2V0T25saW5lRnVuY3Rpb24sXG4gICAgbWFwKChvbmxpbmVGdW5jdGlvbikgPT4gb25saW5lRnVuY3Rpb24gPT09ICdpbmZvcm1hdGlvbicpXG4gIClcbiAgY29uc3QgZ2V0TmFtZSA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignbmFtZScpXG4gIClcbiAgY29uc3QgZ2V0RGVzY3JpcHRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KFxuICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgIHt9XG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6dHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOm9uTGluZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICksXG4gICAgbWFwQXJyYXkoY29tYmluZShnZXRJc0xpbmssIGdldFByb3RvY29sLCBnZXRVcmwsIGdldE5hbWUsIGdldERlc2NyaXB0aW9uKSksXG4gICAgbWFwQXJyYXkoXG4gICAgICAoW1xuICAgICAgICBpc0xpbmssXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICB1cmwsXG4gICAgICAgIFtuYW1lLCBuYW1lVHJhbnNsYXRpb25zXSxcbiAgICAgICAgW2Rlc2NyaXB0aW9uLCBkZXNjcmlwdGlvblRyYW5zbGF0aW9uc10sXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgICAgICAgICAuLi5uYW1lVHJhbnNsYXRpb25zLFxuICAgICAgICAgIC4uLmRlc2NyaXB0aW9uVHJhbnNsYXRpb25zLFxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0xpbmspIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmRwb2ludCcsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIGFjY2Vzc1NlcnZpY2VQcm90b2NvbDogcHJvdG9jb2wsXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RSZXVzZU9ubGluZVJlc291cmNlcygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgT25saW5lTGlua1Jlc291cmNlW11cbj4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpsaW5rYWdlJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSlcbiAgY29uc3QgZ2V0TmFtZSA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignbmFtZScpXG4gIClcbiAgY29uc3QgZ2V0RGVzY3JpcHRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KFxuICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgIHt9XG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6dHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOm9uTGluZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICksXG4gICAgbWFwQXJyYXkoY29tYmluZShnZXRVcmwsIGdldE5hbWUsIGdldERlc2NyaXB0aW9uKSksXG4gICAgbWFwQXJyYXkoXG4gICAgICAoW1xuICAgICAgICB1cmwsXG4gICAgICAgIFtuYW1lLCBuYW1lVHJhbnNsYXRpb25zXSxcbiAgICAgICAgW2Rlc2NyaXB0aW9uLCBkZXNjcmlwdGlvblRyYW5zbGF0aW9uc10sXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgICAgICAgICAuLi5uYW1lVHJhbnNsYXRpb25zLFxuICAgICAgICAgIC4uLmRlc2NyaXB0aW9uVHJhbnNsYXRpb25zLFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPbmxpbmVSZXNvdXJjZXMocm9vdEVsOiBYbWxFbGVtZW50KTogT25saW5lUmVzb3VyY2VbXSB7XG4gIGxldCBnZXRPbmxpbmVSZXNvdXJjZXM6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIE9ubGluZVJlc291cmNlW10+XG4gIGlmIChyZWFkS2luZChyb290RWwpID09PSAnZGF0YXNldCcpIHtcbiAgICBnZXRPbmxpbmVSZXNvdXJjZXMgPSAoZWwpID0+IGV4dHJhY3REYXRhc2V0T25saW5lUmVzb3VyY2VzKGdldE1pbWVUeXBlKShlbClcbiAgfSBlbHNlIGlmIChyZWFkS2luZChyb290RWwpID09PSAnc2VydmljZScpIHtcbiAgICBnZXRPbmxpbmVSZXNvdXJjZXMgPSBleHRyYWN0U2VydmljZU9ubGluZVJlc291cmNlcygpXG4gIH0gZWxzZSB7XG4gICAgZ2V0T25saW5lUmVzb3VyY2VzID0gZXh0cmFjdFJldXNlT25saW5lUmVzb3VyY2VzKClcbiAgfVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBtYXBBcnJheShnZXRPbmxpbmVSZXNvdXJjZXMpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRlbXBvcmFsRXh0ZW50cyhyb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnLCAnZ21kOnRlbXBvcmFsRWxlbWVudCcpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcsXG4gICAgICAgICAgJ2dtZDpleHRlbnQnLFxuICAgICAgICAgICdnbWw6VGltZVBlcmlvZCdcbiAgICAgICAgKSxcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcsXG4gICAgICAgICAgJ2dtZDpleHRlbnQnLFxuICAgICAgICAgICdnbWw6VGltZUluc3RhbnQnXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbcGVyaW9kRWwsIGluc3RhbnRFbF0pID0+IHtcbiAgICAgIGlmIChwZXJpb2RFbCkge1xuICAgICAgICByZXR1cm4gcGlwZShcbiAgICAgICAgICBjb21iaW5lKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21sOmJlZ2luUG9zaXRpb24nLCBmYWxzZSksXG4gICAgICAgICAgICAgIHJlYWRUZXh0KCksXG4gICAgICAgICAgICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtbDplbmRQb3NpdGlvbicsIGZhbHNlKSxcbiAgICAgICAgICAgICAgcmVhZFRleHQoKSxcbiAgICAgICAgICAgICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtYXAoKFtzdGFydCwgZW5kXSkgPT4gKHtcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgZW5kLFxuICAgICAgICAgIH0pKVxuICAgICAgICApKHBlcmlvZEVsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBpcGUoXG4gICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21sOnRpbWVQb3NpdGlvbicsIGZhbHNlKSxcbiAgICAgICAgICByZWFkVGV4dCgpLFxuICAgICAgICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKSxcbiAgICAgICAgICBtYXAoKGRhdGUpID0+ICh7XG4gICAgICAgICAgICBzdGFydDogZGF0ZSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKShpbnN0YW50RWwpXG4gICAgICB9XG4gICAgfSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3BhdGlhbEV4dGVudHMocm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIGNvbnN0IGV4dHJhY3RHZW9tZXRyeSA9IChyb290RWw6IFhtbEVsZW1lbnQpOiBHZW9tZXRyeSA9PiB7XG4gICAgaWYgKCFyb290RWwpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cG9seWdvbicsIGZhbHNlKSxcbiAgICAgIGZpcnN0Q2hpbGRFbGVtZW50LFxuICAgICAgbWFwKChlbCkgPT4gKGVsID8gcmVhZEdlb21ldHJ5KGVsKSA6IG51bGwpKVxuICAgICkocm9vdEVsKVxuICB9XG5cbiAgY29uc3QgZXh0cmFjdEJCb3ggPSAoXG4gICAgcm9vdEVsOiBYbWxFbGVtZW50XG4gICk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgICBpZiAoIXJvb3RFbCkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOndlc3RCb3VuZExvbmdpdHVkZScpLCBleHRyYWN0RGVjaW1hbCgpKSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6c291dGhCb3VuZExhdGl0dWRlJyksIGV4dHJhY3REZWNpbWFsKCkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDplYXN0Qm91bmRMb25naXR1ZGUnKSwgZXh0cmFjdERlY2ltYWwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOm5vcnRoQm91bmRMYXRpdHVkZScpLCBleHRyYWN0RGVjaW1hbCgpKVxuICAgICAgKVxuICAgICkocm9vdEVsKVxuICB9XG5cbiAgY29uc3QgZXh0cmFjdERlc2NyaXB0aW9uID0gKFxuICAgIHJvb3RFbDogWG1sRWxlbWVudFxuICApOiBbc3RyaW5nLCBNb2RlbFRyYW5zbGF0aW9uc10gPT4ge1xuICAgIGlmICghcm9vdEVsKSByZXR1cm4gW251bGwsIHt9XVxuICAgIHJldHVybiBwaXBlKFxuICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICdnbWQ6Z2VvZ3JhcGhpY0lkZW50aWZpZXInLFxuICAgICAgICAnZ21kOk1EX0lkZW50aWZpZXInLFxuICAgICAgICAnZ21kOmNvZGUnXG4gICAgICApLFxuICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZygnZGVzY3JpcHRpb24nKVxuICAgICkocm9vdEVsKVxuICB9XG5cbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnLCAnZ21kOmdlb2dyYXBoaWNFbGVtZW50JyksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpFWF9Cb3VuZGluZ1BvbHlnb24nKSwgZXh0cmFjdEdlb21ldHJ5KSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6RVhfR2VvZ3JhcGhpY0JvdW5kaW5nQm94JyksIGV4dHJhY3RCQm94KSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6RVhfR2VvZ3JhcGhpY0Rlc2NyaXB0aW9uJyksXG4gICAgICAgICAgZXh0cmFjdERlc2NyaXB0aW9uXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgKFtnZW9tZXRyeSwgYmJveCwgW2Rlc2NyaXB0aW9uXV0pID0+ICEhZ2VvbWV0cnkgfHwgISFiYm94IHx8ICEhZGVzY3JpcHRpb25cbiAgICApLFxuICAgIG1hcEFycmF5KChbZ2VvbWV0cnksIGJib3gsIFtkZXNjcmlwdGlvbiwgdHJhbnNsYXRpb25zXV0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLihnZW9tZXRyeSAmJiB7IGdlb21ldHJ5IH0pLFxuICAgICAgICAuLi4oYmJveCAmJiB7IGJib3ggfSksXG4gICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICB9XG4gICAgfSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3RoZXJMYW5ndWFnZXMocm9vdEVsOiBYbWxFbGVtZW50KTogTGFuZ3VhZ2VDb2RlW10ge1xuICBjb25zdCBkZWZhdWx0TGFuZ3VhZ2UgPSByZWFkRGVmYXVsdExhbmd1YWdlKHJvb3RFbClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmxvY2FsZScsIGZhbHNlKSxcbiAgICBtYXBBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2xhbjpMYW5ndWFnZUNvZGUnKSxcbiAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICBtYXAoKGxhbmcpID0+IExBTkdfM19UT18yX01BUFBFUltsYW5nLnRvTG93ZXJDYXNlKCldID8/IGxhbmcpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGxhbmd1YWdlcykgPT5cbiAgICAgIGxhbmd1YWdlcy5maWx0ZXIoKGxhbmcpOiBsYW5nIGlzIExhbmd1YWdlQ29kZSA9PiBsYW5nICE9PSBudWxsKVxuICAgICksXG4gICAgbWFwKChsYW5ndWFnZXMpID0+IChsYW5ndWFnZXMubGVuZ3RoID8gbGFuZ3VhZ2VzIDogW2RlZmF1bHRMYW5ndWFnZV0pKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWREZWZhdWx0TGFuZ3VhZ2Uocm9vdEVsOiBYbWxFbGVtZW50KTogTGFuZ3VhZ2VDb2RlIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmxhbmd1YWdlJywgZmFsc2UpLFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2xhbjpMYW5ndWFnZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKChsYW5nKSA9PiAobGFuZyA/IExBTkdfM19UT18yX01BUFBFUltsYW5nLnRvTG93ZXJDYXNlKCldIDogbnVsbCkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlc291cmNlSWRlbnRpZmllcihyb290RWw6IFhtbEVsZW1lbnQpOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6Y2l0YXRpb24nLFxuICAgICAgJ2dtZDpDSV9DaXRhdGlvbicsXG4gICAgICAnZ21kOmlkZW50aWZpZXInLFxuICAgICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAgICdnbWQ6Y29kZSdcbiAgICApLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApKHJvb3RFbClcbn1cbiJdfQ==
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1wYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3JlYWQtcGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEJBLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDNUUsT0FBTyxFQUVMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFFBQVEsR0FFVCxNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9ELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3JGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFBO0FBQzNGLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFeEUsTUFBTSxVQUFVLHNCQUFzQjtJQUlwQyxPQUFPLElBQUksQ0FDVCxRQUFRLENBQ04sZ0JBQWdCLENBQUMscUJBQXFC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QUNULGtCQUFrQixFQUFFLEVBQ3BCLGlCQUFpQixDQUNmLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixVQUFVLENBQ1gsRUFDRCxzQkFBc0IsRUFBRSxDQUN6QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnN0cmFpbnQsXG4gIENvbnN0cmFpbnRUcmFuc2xhdGlvbnMsXG4gIERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgRmllbGRUcmFuc2xhdGlvbixcbiAgR3JhcGhpY092ZXJ2aWV3LFxuICBJbmRpdmlkdWFsLFxuICBLZXl3b3JkLFxuICBLZXl3b3JkVHJhbnNsYXRpb25zLFxuICBMYW5ndWFnZUNvZGUsXG4gIE1vZGVsVHJhbnNsYXRpb25zLFxuICBPbmxpbmVMaW5rUmVzb3VyY2UsXG4gIE9ubGluZVJlc291cmNlLFxuICBPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucyxcbiAgT3JnYW5pemF0aW9uLFxuICBPcmdhbml6YXRpb25UcmFuc2xhdGlvbnMsXG4gIFJlY29yZEtpbmQsXG4gIFJlY29yZFN0YXR1cyxcbiAgUmVjb3JkVHJhbnNsYXRpb25zLFxuICBSZXVzZVR5cGUsXG4gIFJvbGUsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZSxcbiAgU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSxcbiAgVXBkYXRlRnJlcXVlbmN5LFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdnZW9qc29uJ1xuaW1wb3J0IHsgbWF0Y2hNaW1lVHlwZSwgbWF0Y2hQcm90b2NvbCB9IGZyb20gJy4uL2NvbW1vbi9kaXN0cmlidXRpb24ubWFwcGVyJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGNvbWJpbmUsXG4gIGZhbGxiYWNrLFxuICBmaWx0ZXJBcnJheSxcbiAgZmxhdHRlbkFycmF5LFxuICBnZXRBdEluZGV4LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBwaXBlLFxufSBmcm9tICcuLi9mdW5jdGlvbi11dGlscydcbmltcG9ydCB7XG4gIGZpbmRDaGlsZEVsZW1lbnQsXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIGZpbmRQYXJlbnQsXG4gIGZpcnN0Q2hpbGRFbGVtZW50LFxuICByZWFkQXR0cmlidXRlLFxuICByZWFkVGV4dCxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHsgcmVhZEdlb21ldHJ5IH0gZnJvbSAnLi91dGlscy9nZW9tZXRyeSdcbmltcG9ydCB7IGZ1bGxOYW1lVG9QYXJ0cyB9IGZyb20gJy4vdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgZ2V0S2V5d29yZFR5cGVGcm9tS2V5d29yZFR5cGVDb2RlIH0gZnJvbSAnLi91dGlscy9rZXl3b3JkLm1hcHBlcidcbmltcG9ydCB7IGdldFJvbGVGcm9tUm9sZUNvZGUgfSBmcm9tICcuL3V0aWxzL3JvbGUubWFwcGVyJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUgfSBmcm9tICcuL3V0aWxzL3N0YXR1cy5tYXBwZXInXG5pbXBvcnQgeyBnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlLWZyZXF1ZW5jeS5tYXBwZXInXG5pbXBvcnQgeyBnZXRMYW5nMkZyb21MYW5nMyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9pMThuL3NyYy9saWIvbGFuZ3VhZ2UtY29kZXMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZVR5cGUsIGdldFJldXNlVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9yZXNvdXJjZS10eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIHN0cmluZ1xuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZhbGxiYWNrKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkNoYXJhY3RlclN0cmluZycsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dteDpBbmNob3InLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6TWltZUZpbGVUeXBlJywgZmFsc2UpXG4gICAgKSxcbiAgICByZWFkVGV4dCgpXG4gIClcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGVkIHZhbHVlcyB3aWxsIGFsc28gYmUgY29sbGVjdGVkIGluIHRoZSB0cmFuc2xhdGlvbnMgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPFQgZXh0ZW5kcyBNb2RlbFRyYW5zbGF0aW9ucz4oXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICB0cmFuc2xhdGlvbnM/OiBUXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBbc3RyaW5nLCBUXT4ge1xuICByZXR1cm4gY29tYmluZShcbiAgICBwaXBlKFxuICAgICAgZmFsbGJhY2soXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnLCBmYWxzZSksXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dteDpBbmNob3InLCBmYWxzZSlcbiAgICAgICksXG4gICAgICByZWFkVGV4dCgpXG4gICAgKSxcbiAgICAoZWwpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRWYWx1ZXMgPSBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAgICdnbWQ6UFRfRnJlZVRleHQnLFxuICAgICAgICAnZ21kOnRleHRHcm91cCcsXG4gICAgICAgICdnbWQ6TG9jYWxpc2VkQ2hhcmFjdGVyU3RyaW5nJ1xuICAgICAgKShlbClcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uc1NhZmUgPSB0cmFuc2xhdGlvbnMgPz8gKHt9IGFzIFQpXG4gICAgICBpZiAoIXRyYW5zbGF0ZWRWYWx1ZXMubGVuZ3RoKSByZXR1cm4gdHJhbnNsYXRpb25zU2FmZVxuICAgICAgY29uc3QgdmFsdWVUcmFuc2xhdGlvbnM6IEZpZWxkVHJhbnNsYXRpb24gPSB0cmFuc2xhdGVkVmFsdWVzLnJlZHVjZShcbiAgICAgICAgKHByZXYsIHRyYW5zbGF0aW9uRWwpID0+IHtcbiAgICAgICAgICBjb25zdCBsYW5nID0gcmVhZEF0dHJpYnV0ZSgnbG9jYWxlJykodHJhbnNsYXRpb25FbClcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXiMvLCAnJylcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlYWRUZXh0KCkodHJhbnNsYXRpb25FbClcbiAgICAgICAgICBpZiAoIWxhbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IC4uLnByZXYsIFtsYW5nXTogdmFsdWUgfVxuICAgICAgICB9LFxuICAgICAgICB7fVxuICAgICAgKVxuICAgICAgdHJhbnNsYXRpb25zU2FmZVtmaWVsZE5hbWVdID0ge1xuICAgICAgICAuLi50cmFuc2xhdGlvbnNTYWZlW2ZpZWxkTmFtZV0sXG4gICAgICAgIC4uLnZhbHVlVHJhbnNsYXRpb25zLFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uc1NhZmVcbiAgICB9XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRlVGltZSgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBEYXRlPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZhbGxiYWNrKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkRhdGVUaW1lJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkRhdGUnLCBmYWxzZSlcbiAgICApLFxuICAgIHJlYWRUZXh0KCksXG4gICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REZWNpbWFsKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIG51bWJlcj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286RGVjaW1hbCcsIGZhbHNlKSxcbiAgICByZWFkVGV4dCgpLFxuICAgIG1hcCgobnVtYmVyU3RyKSA9PiAobnVtYmVyU3RyID8gTnVtYmVyKG51bWJlclN0cikgOiBudWxsKSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFVybCgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBVUkw+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6VVJMJywgZmFsc2UpLCByZWFkVGV4dCgpKVxuICBjb25zdCBnZXRDaGFyYWN0ZXJTdHJpbmcgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnLCBmYWxzZSksXG4gICAgcmVhZFRleHQoKVxuICApXG4gIGNvbnN0IGdldEFuY2hvciA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ214OkFuY2hvcicsIGZhbHNlKSxcbiAgICByZWFkQXR0cmlidXRlKCd4bGluazpocmVmJylcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBmYWxsYmFjayhnZXRVcmwsIGdldEFuY2hvciwgZ2V0Q2hhcmFjdGVyU3RyaW5nKSxcbiAgICBtYXAoKHVybFN0cikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVUkwodXJsU3RyKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSB7XG4gIHJldHVybiBmYWxsYmFjayhleHRyYWN0VXJsKCksICgpID0+IG5ldyBVUkwoJ2h0dHA6Ly9taXNzaW5nJykpXG59XG5cbi8vIGZyb20gZ21kOnJvbGVcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Um9sZSgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBSb2xlPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9Sb2xlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoZ2V0Um9sZUZyb21Sb2xlQ29kZSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpDSV9SZXNwb25zaWJsZVBhcnR5XG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE9yZ2FuaXphdGlvbigpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgT3JnYW5pemF0aW9uXG4+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAnZ21kOmNvbnRhY3RJbmZvJyxcbiAgICAgICdnbWQ6Q0lfQ29udGFjdCcsXG4gICAgICAnZ21kOm9ubGluZVJlc291cmNlJyxcbiAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnLFxuICAgICAgJ2dtZDpsaW5rYWdlJ1xuICAgICksXG4gICAgZ2V0QXRJbmRleCgwKSxcbiAgICBleHRyYWN0VXJsKClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBjb21iaW5lKFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm9yZ2FuaXNhdGlvbk5hbWUnLCBmYWxzZSksXG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T3JnYW5pemF0aW9uVHJhbnNsYXRpb25zPignbmFtZScpXG4gICAgICApLFxuICAgICAgZ2V0VXJsXG4gICAgKSxcbiAgICBtYXAoKFtbbmFtZSwgdHJhbnNsYXRpb25zXSwgd2Vic2l0ZV0pID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgLi4uKHdlYnNpdGUgJiYgeyB3ZWJzaXRlIH0pLFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbi8vIGZyb20gZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHlcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SW5kaXZpZHVhbCgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBJbmRpdmlkdWFsPiB7XG4gIGNvbnN0IGdldFJvbGUgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpyb2xlJyksIGV4dHJhY3RSb2xlKCkpXG4gIGNvbnN0IGdldFBvc2l0aW9uID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cG9zaXRpb25OYW1lJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgY29uc3QgZ2V0TmFtZVBhcnRzID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6aW5kaXZpZHVhbE5hbWUnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCksXG4gICAgbWFwKChmdWxsTmFtZSkgPT4ge1xuICAgICAgaWYgKCFmdWxsTmFtZSkgcmV0dXJuIFtdXG4gICAgICByZXR1cm4gZnVsbE5hbWVUb1BhcnRzKGZ1bGxOYW1lKVxuICAgIH0pXG4gIClcbiAgY29uc3QgZ2V0T3JnYW5pemF0aW9uID0gZXh0cmFjdE9yZ2FuaXphdGlvbigpXG4gIGNvbnN0IGdldENvbnRhY3RSb290ID0gZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpjb250YWN0SW5mbycsICdnbWQ6Q0lfQ29udGFjdCcpXG4gIGNvbnN0IGdldEVtYWlsID0gcGlwZShcbiAgICBnZXRDb250YWN0Um9vdCxcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZWxlY3Ryb25pY01haWxBZGRyZXNzJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpLFxuICAgIG1hcCgoZW1haWwpID0+IChlbWFpbCA9PT0gbnVsbCA/ICdtaXNzaW5nQG1pc3NpbmcuY29tJyA6IGVtYWlsKSlcbiAgKVxuICBjb25zdCBnZXRBZGRyZXNzID0gcGlwZShcbiAgICBnZXRDb250YWN0Um9vdCxcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmFkZHJlc3MnLCAnZ21kOkNJX0FkZHJlc3MnKSxcbiAgICBjb21iaW5lKFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmRlbGl2ZXJ5UG9pbnQnLCBmYWxzZSksXG4gICAgICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICAgICAgKSxcbiAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmNpdHknLCBmYWxzZSksIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSksXG4gICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwb3N0YWxDb2RlJywgZmFsc2UpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpLFxuICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Y291bnRyeScsIGZhbHNlKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKVxuICAgICksXG4gICAgbWFwKChwYXJ0cykgPT4gcGFydHMuZmlsdGVyKChwKSA9PiAhIXApLmpvaW4oJywgJykpXG4gIClcbiAgY29uc3QgZ2V0UGhvbmUgPSBwaXBlKFxuICAgIGdldENvbnRhY3RSb290LFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6cGhvbmUnLCAnZ21kOkNJX1RlbGVwaG9uZScsICdnbWQ6dm9pY2UnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBjb21iaW5lKFxuICAgICAgZ2V0Um9sZSxcbiAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgZ2V0TmFtZVBhcnRzLFxuICAgICAgZ2V0T3JnYW5pemF0aW9uLFxuICAgICAgZ2V0RW1haWwsXG4gICAgICBnZXRBZGRyZXNzLFxuICAgICAgZ2V0UGhvbmVcbiAgICApLFxuICAgIG1hcChcbiAgICAgIChbXG4gICAgICAgIHJvbGUsXG4gICAgICAgIHBvc2l0aW9uLFxuICAgICAgICBbZmlyc3ROYW1lLCBsYXN0TmFtZV0sXG4gICAgICAgIG9yZ2FuaXphdGlvbixcbiAgICAgICAgZW1haWwsXG4gICAgICAgIGFkZHJlc3MsXG4gICAgICAgIHBob25lLFxuICAgICAgXSkgPT4gKHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIHJvbGUsXG4gICAgICAgIG9yZ2FuaXphdGlvbixcbiAgICAgICAgLi4uKHBvc2l0aW9uICYmIHsgcG9zaXRpb24gfSksXG4gICAgICAgIC4uLihmaXJzdE5hbWUgJiYgeyBmaXJzdE5hbWUgfSksXG4gICAgICAgIC4uLihsYXN0TmFtZSAmJiB7IGxhc3ROYW1lIH0pLFxuICAgICAgICAuLi4oYWRkcmVzcyAmJiB7IGFkZHJlc3MgfSksXG4gICAgICAgIC4uLihwaG9uZSAmJiB7IHBob25lIH0pLFxuICAgICAgfSlcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTdGF0dXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgUmVjb3JkU3RhdHVzPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpNRF9Qcm9ncmVzc0NvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKGdldFN0YXR1c0Zyb21TdGF0dXNDb2RlKVxuICApXG59XG5cbi8vIGZyb20gZ21kOnJlc291cmNlQ29uc3RyYWludHNcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TGVnYWxDb25zdHJhaW50cygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsIGZhbHNlKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgbWFwKCh2YWx1ZXMpID0+IHZhbHVlcy5pbmRleE9mKCdsaWNlbnNlJykgPT09IC0xKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpXG4gICAgICApXG4gICAgKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8Q29uc3RyYWludFRyYW5zbGF0aW9ucz4oJ3RleHQnKSxcbiAgICAgICAgZXh0cmFjdFVybCgpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW1t0ZXh0LCB0cmFuc2xhdGlvbnNdLCB1cmxdKSA9PiAoe1xuICAgICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgICAgIHRleHQsXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTZWN1cml0eUNvbnN0cmFpbnRzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBBcnJheTxDb25zdHJhaW50PlxuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOk1EX1NlY3VyaXR5Q29uc3RyYWludHMnLCAnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8Q29uc3RyYWludFRyYW5zbGF0aW9ucz4oJ3RleHQnKSxcbiAgICAgICAgZXh0cmFjdFVybCgpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW1t0ZXh0LCB0cmFuc2xhdGlvbnNdLCB1cmxdKSA9PiAoe1xuICAgICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgICAgIHRleHQsXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPdGhlckNvbnN0cmFpbnRzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBBcnJheTxDb25zdHJhaW50PlxuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOk1EX0NvbnN0cmFpbnRzJywgJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPENvbnN0cmFpbnRUcmFuc2xhdGlvbnM+KCd0ZXh0JyksXG4gICAgICAgIGV4dHJhY3RVcmwoKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtbdGV4dCwgdHJhbnNsYXRpb25zXSwgdXJsXSkgPT4gKHtcbiAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICB0ZXh0LFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbi8vIGZyb20gZ21kOnJlc291cmNlQ29uc3RyYWludHNcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TGljZW5zZXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnLCBmYWxzZSksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgIG1hcCgodmFsdWVzKSA9PiB2YWx1ZXMuaW5kZXhPZignbGljZW5zZScpID4gLTEpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDp1c2VMaW1pdGF0aW9uJylcbiAgICAgIClcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxDb25zdHJhaW50VHJhbnNsYXRpb25zPigndGV4dCcpLFxuICAgICAgICBleHRyYWN0VXJsKClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbW3RleHQsIHRyYW5zbGF0aW9uc10sIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG5jb25zdCBnZXRNaW1lVHlwZSA9IHBpcGUoXG4gIGZpbmRQYXJlbnQoJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25Gb3JtYXQnLCAnZ21kOk1EX0Zvcm1hdCcsICdnbWQ6bmFtZScpLFxuICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCksXG4gIG1hcChtYXRjaE1pbWVUeXBlKVxuKVxuXG4vKipcbiAqIEV4dHJhY3Qgb25saW5lIHJlc291cmNlcyBmcm9tIGFuIE1EX0Rpc3RyaWJ1dGlvbiBlbGVtZW50XG4gKiBAcGFyYW0gZ2V0TWltZVR5cGVGbiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBmcm9tIGEgZ21kOnRyYW5zZmVyT3B0aW9ucyBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YXNldE9ubGluZVJlc291cmNlcyhcbiAgZ2V0TWltZVR5cGVGbjogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgc3RyaW5nPlxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgRGF0YXNldE9ubGluZVJlc291cmNlW10+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGlua2FnZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpXG4gIGNvbnN0IGdldFByb3RvY29sU3RyID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICBjb25zdCBnZXRQcm90b2NvbCA9IHBpcGUoZ2V0UHJvdG9jb2xTdHIsIG1hcChtYXRjaFByb3RvY29sKSlcbiAgY29uc3QgZ2V0T25saW5lRnVuY3Rpb24gPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKVxuICApXG4gIGNvbnN0IGdldElzU2VydmljZSA9IHBpcGUoXG4gICAgZ2V0UHJvdG9jb2wsXG4gICAgbWFwKChwcm90b2NvbCkgPT4gcHJvdG9jb2wgIT09ICdvdGhlcicpXG4gIClcbiAgY29uc3QgZ2V0SXNEb3dubG9hZCA9IHBpcGUoXG4gICAgY29tYmluZShnZXRJc1NlcnZpY2UsIGdldE9ubGluZUZ1bmN0aW9uLCBnZXRQcm90b2NvbFN0ciksXG4gICAgbWFwKFxuICAgICAgKFtpc1NlcnZpY2UsIG9ubGluZUZ1bmN0aW9uLCBwcm90b2NvbFN0cl0pID0+XG4gICAgICAgICghaXNTZXJ2aWNlICYmIG9ubGluZUZ1bmN0aW9uID09PSAnZG93bmxvYWQnKSB8fFxuICAgICAgICAvZG93bmxvYWQvaS50ZXN0KHByb3RvY29sU3RyKVxuICAgIClcbiAgKVxuICBjb25zdCBnZXROYW1lID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bmFtZScpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KCduYW1lJylcbiAgKVxuICBjb25zdCBnZXREZXNjcmlwdGlvbiA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucz4oJ2Rlc2NyaXB0aW9uJylcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAnZ21kOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpvbkxpbmUnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZ2V0SXNTZXJ2aWNlLFxuICAgICAgICBnZXRJc0Rvd25sb2FkLFxuICAgICAgICBnZXRQcm90b2NvbCxcbiAgICAgICAgZ2V0VXJsLFxuICAgICAgICBnZXROYW1lLFxuICAgICAgICBnZXREZXNjcmlwdGlvbixcbiAgICAgICAgZ2V0TWltZVR5cGVGblxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICAoW1xuICAgICAgICBpc1NlcnZpY2UsXG4gICAgICAgIGlzRG93bmxvYWQsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICB1cmwsXG4gICAgICAgIFtuYW1lLCBuYW1lVHJhbnNsYXRpb25zXSxcbiAgICAgICAgW2Rlc2NyaXB0aW9uLCBkZXNjcmlwdGlvblRyYW5zbGF0aW9uc10sXG4gICAgICAgIG1pbWVUeXBlLFxuICAgICAgXSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gICAgICAgICAgLi4ubmFtZVRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAuLi5kZXNjcmlwdGlvblRyYW5zbGF0aW9ucyxcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTZXJ2aWNlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXJ2aWNlJyxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgYWNjZXNzU2VydmljZVByb3RvY29sOiBwcm90b2NvbCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgaWRlbnRpZmllckluU2VydmljZTogbmFtZSB9KSwgLy8gc2hvdWxkIHdlIGtlZXAgdGhlIGlkZW50aWZpZXJJblNlcnZpY2U/IHJlYWQtd3JpdGUgZHVwbGljYXRlIHdpdGggbmFtZVxuICAgICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzRG93bmxvYWQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2Rvd25sb2FkJyxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICAuLi4obWltZVR5cGUgJiYgeyBtaW1lVHlwZSB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVGcmVxdWVuY3lGcm9tQ3VzdG9tUGVyaW9kKFxuICBpc29QZXJpb2Q6IHN0cmluZ1xuKTogVXBkYXRlRnJlcXVlbmN5Q3VzdG9tIHtcbiAgaWYgKCFpc29QZXJpb2QpIHJldHVybiBudWxsXG4gIGNvbnN0IG1hdGNoZXMgPSBpc29QZXJpb2QubWF0Y2goXG4gICAgL14tP1AoPzooWzAtOV0rKVkpPyg/OihbMC05XSspTSk/KD86KFswLTldKylEKT9UPyg/OihbMC05XSspSCk/L1xuICApXG4gIGlmICghbWF0Y2hlcykgcmV0dXJuIG51bGxcbiAgY29uc3QgeWVhcnMgPSBwYXJzZUludChtYXRjaGVzWzFdLCAxMCkgfHwgMFxuICBjb25zdCBtb250aHMgPSBwYXJzZUludChtYXRjaGVzWzJdLCAxMCkgfHwgMFxuICBjb25zdCBkYXlzID0gcGFyc2VJbnQobWF0Y2hlc1szXSwgMTApIHx8IDBcbiAgY29uc3QgaG91cnMgPSBwYXJzZUludChtYXRjaGVzWzRdLCAxMCkgfHwgMFxuICBpZiAoeWVhcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAneWVhcicsXG4gICAgICB1cGRhdGVkVGltZXM6IDEsXG4gICAgfVxuICB9IGVsc2UgaWYgKG1vbnRocyA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICdtb250aCcsXG4gICAgICB1cGRhdGVkVGltZXM6IDEsXG4gICAgfVxuICB9IGVsc2UgaWYgKG1vbnRocykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICd5ZWFyJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCgxMiAvIG1vbnRocyksXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMgPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnZGF5JyxcbiAgICAgIHVwZGF0ZWRUaW1lczogMSxcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF5cyA+PSAxICYmIGRheXMgPD0gNykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICd3ZWVrJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCg3IC8gZGF5cyAtIDAuMDAwMSksIC8vIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgJ2V2ZXJ5IDIgZGF5cycgPSAnMyB0aW1lcyBwZXIgd2VlaydcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF5cykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICdtb250aCcsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMzAgLyBkYXlzKSxcbiAgICB9XG4gIH0gZWxzZSBpZiAoaG91cnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnZGF5JyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCgyNCAvIGhvdXJzKSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuLy8gZnJvbSBnbWQ6TURfTWFpbnRlbmFuY2VJbmZvcm1hdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RVcGRhdGVGcmVxdWVuY3koKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIFVwZGF0ZUZyZXF1ZW5jeVxuPiB7XG4gIHJldHVybiBmYWxsYmFjayhcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOk1EX01haW50ZW5hbmNlRnJlcXVlbmN5Q29kZScpLFxuICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgbWFwKGdldFVwZGF0ZUZyZXF1ZW5jeUZyb21GcmVxdWVuY3lDb2RlKVxuICAgICksXG4gICAgcGlwZShcbiAgICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgICAnZ21kOnVzZXJEZWZpbmVkTWFpbnRlbmFuY2VGcmVxdWVuY3knLFxuICAgICAgICAnZ3RzOlRNX1BlcmlvZER1cmF0aW9uJ1xuICAgICAgKSxcbiAgICAgIHJlYWRUZXh0KCksXG4gICAgICBtYXAoZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUN1c3RvbVBlcmlvZClcbiAgICApLFxuICAgIG1hcCgoKSA9PiAndW5rbm93bicpXG4gIClcbn1cblxuLyoqXG4gKiBMb29rcyBmb3Igc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbiBvciBnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uIGVsZW1lbnRcbiAqIFdpbGwgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgZXhpc3RzLCBub3QgcmVhZGluZyB0aGUgdHlwZSBvZiB0aGUgcmVjb3JkXG4gKiAodGhpcyBhbGxvd3MgdXNpbmcgdGhpcyBmdW5jdGlvbiBpbiBvdGhlciBzaW1pbGFyIHNjaGVtYXMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSWRlbnRpZmljYXRpb24oKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDppZGVudGlmaWNhdGlvbkluZm8nLCBmYWxzZSksXG4gICAgY29tYmluZShcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24nLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uJywgZmFsc2UpXG4gICAgKSxcbiAgICBmaWx0ZXJBcnJheSgoZWwpID0+IGVsICE9PSBudWxsKSxcbiAgICBnZXRBdEluZGV4KDApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJZGVudGlmaWNhdGlvbkRhdGUoXG4gIHR5cGU6ICdjcmVhdGlvbicgfCAncmV2aXNpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicsICdnbWQ6ZGF0ZScpLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAgICdnbWQ6Q0lfRGF0ZScsXG4gICAgICAgICAgJ2dtZDpkYXRlVHlwZScsXG4gICAgICAgICAgJ2dtZDpDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICksXG4gICAgICAgIGdldEF0SW5kZXgoMCksXG4gICAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICApXG4gICAgKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOkNJX0RhdGUnLCAnZ21kOmRhdGUnKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGV4dHJhY3REYXRlVGltZSgpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXRpYWxSZXByZXNlbnRhdGlvbkZyb21Db2RlKFxuICBzcGF0aWFsUmVwcmVzZW50YXRpb25Db2RlOiBzdHJpbmdcbik6IFNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUgfCBudWxsIHtcbiAgc3dpdGNoIChzcGF0aWFsUmVwcmVzZW50YXRpb25Db2RlKSB7XG4gICAgY2FzZSAnZ3JpZCc6XG4gICAgY2FzZSAndmVjdG9yJzpcbiAgICBjYXNlICd0aW4nOlxuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICBjYXNlICdwb2ludCc6XG4gICAgICByZXR1cm4gc3BhdGlhbFJlcHJlc2VudGF0aW9uQ29kZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVW5pcXVlSWRlbnRpZmllcihyb290RWw6IFhtbEVsZW1lbnQpOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZmlsZUlkZW50aWZpZXInLCBmYWxzZSksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEtpbmQocm9vdEVsOiBYbWxFbGVtZW50KTogUmVjb3JkS2luZCB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6aGllcmFyY2h5TGV2ZWwnLCAnZ21kOk1EX1Njb3BlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoKHNjb3BlQ29kZSk6IFJlY29yZEtpbmQgPT4gZ2V0UmVzb3VyY2VUeXBlKHNjb3BlQ29kZSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE93bmVyT3JnYW5pemF0aW9uKHJvb3RFbDogWG1sRWxlbWVudCk6IE9yZ2FuaXphdGlvbiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y29udGFjdCcsICdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScpLFxuICAgIGV4dHJhY3RPcmdhbml6YXRpb24oKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXNvdXJjZVVwZGF0ZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBleHRyYWN0SWRlbnRpZmljYXRpb25EYXRlKCdyZXZpc2lvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXNvdXJjZUNyZWF0ZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBleHRyYWN0SWRlbnRpZmljYXRpb25EYXRlKCdjcmVhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXNvdXJjZVB1Ymxpc2hlZChyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRlIHtcbiAgcmV0dXJuIGV4dHJhY3RJZGVudGlmaWNhdGlvbkRhdGUoJ3B1YmxpY2F0aW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlY29yZFVwZGF0ZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkYXRlU3RhbXAnKSwgZXh0cmFjdERhdGVUaW1lKCkpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXVzZVR5cGUocm9vdEVsOiBYbWxFbGVtZW50KTogUmV1c2VUeXBlIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpoaWVyYXJjaHlMZXZlbCcsICdnbWQ6TURfU2NvcGVDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcCgoc2NvcGVDb2RlKTogUmV1c2VUeXBlID0+IGdldFJldXNlVHlwZShzY29wZUNvZGUpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRUaXRsZShcbiAgcm9vdEVsOiBYbWxFbGVtZW50LFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9uc1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZygndGl0bGUnLCB0cmFuc2xhdGlvbnMpLFxuICAgIG1hcCgoW3RpdGxlXSkgPT4gdGl0bGUpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEFic3RyYWN0KFxuICByb290RWw6IFhtbEVsZW1lbnQsXG4gIHRyYW5zbGF0aW9uczogUmVjb3JkVHJhbnNsYXRpb25zXG4pOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6YWJzdHJhY3QnLCBmYWxzZSksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZygnYWJzdHJhY3QnLCB0cmFuc2xhdGlvbnMpLFxuICAgIG1hcCgoW2Fic3RyYWN0XSkgPT4gYWJzdHJhY3QpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZENvbnRhY3RzKHJvb3RFbDogWG1sRWxlbWVudCk6IEluZGl2aWR1YWxbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpjb250YWN0JywgZmFsc2UpLFxuICAgIG1hcEFycmF5KGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JywgZmFsc2UpKSxcbiAgICBtYXBBcnJheShleHRyYWN0SW5kaXZpZHVhbCgpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDb250YWN0c0ZvclJlc291cmNlKHJvb3RFbDogWG1sRWxlbWVudCk6IEluZGl2aWR1YWxbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGNvbWJpbmUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6Y29udGFjdCcsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpwb2ludE9mQ29udGFjdCcsIGZhbHNlKVxuICAgICksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoZmluZENoaWxkRWxlbWVudCgnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknLCBmYWxzZSkpLFxuICAgIG1hcEFycmF5KGV4dHJhY3RJbmRpdmlkdWFsKCkpXG4gICkocm9vdEVsKVxufVxuXG4vLyBmcm9tIGdtZDp0aGVzYXVydXNOYW1lXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRoZXNhdXJ1cyhyb290RWw6IFhtbEVsZW1lbnQpOiBUaGVzYXVydXNNb2RlbCB7XG4gIGlmICghcm9vdEVsKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGZpbmRJZGVudGlmaWVyID0gZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgJ2dtZDpDSV9DaXRhdGlvbicsXG4gICAgJ2dtZDppZGVudGlmaWVyJyxcbiAgICAnZ21kOk1EX0lkZW50aWZpZXInLFxuICAgICdnbWQ6Y29kZSdcbiAgKVxuICBjb25zdCBpZCA9IHBpcGUoZmluZElkZW50aWZpZXIsIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSkocm9vdEVsKVxuICBjb25zdCB1cmwgPSBwaXBlKGZpbmRJZGVudGlmaWVyLCBleHRyYWN0VXJsKCkpKHJvb3RFbClcbiAgY29uc3QgbmFtZSA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpDSV9DaXRhdGlvbicsICdnbWQ6dGl0bGUnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gIH1cbn1cblxuLy8gZnJvbSBnbWQ6TURfS2V5d29yZHNcbmV4cG9ydCBmdW5jdGlvbiByZWFkS2V5d29yZEdyb3VwKHJvb3RFbDogWG1sRWxlbWVudCk6IEtleXdvcmRbXSB7XG4gIGNvbnN0IHR5cGUgPSBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9LZXl3b3JkVHlwZUNvZGUnKSxcbiAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgIG1hcCgodmFsdWVzKSA9PiBnZXRLZXl3b3JkVHlwZUZyb21LZXl3b3JkVHlwZUNvZGUodmFsdWVzWzBdKSlcbiAgKShyb290RWwpXG4gIGNvbnN0IHRoZXNhdXJ1cyA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDp0aGVzYXVydXNOYW1lJyksXG4gICAgcmVhZFRoZXNhdXJ1c1xuICApKHJvb3RFbClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmtleXdvcmQnKSxcbiAgICBtYXBBcnJheSgoZWwpID0+IHtcbiAgICAgIGNvbnN0IFtsYWJlbCwgdHJhbnNsYXRpb25zXSA9XG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8S2V5d29yZFRyYW5zbGF0aW9ucz4oJ2xhYmVsJykoZWwpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi4odGhlc2F1cnVzID8geyB0aGVzYXVydXMgfSA6IHt9KSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgIH0gYXMgS2V5d29yZFxuICAgIH0pXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEtleXdvcmRzKHJvb3RFbDogWG1sRWxlbWVudCk6IEtleXdvcmRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRlc2NyaXB0aXZlS2V5d29yZHMnLCAnZ21kOk1EX0tleXdvcmRzJyksXG4gICAgbWFwQXJyYXkocmVhZEtleXdvcmRHcm91cCksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3RhdHVzKHJvb3RFbDogWG1sRWxlbWVudCk6IFJlY29yZFN0YXR1cyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpzdGF0dXMnLCBmYWxzZSksXG4gICAgZXh0cmFjdFN0YXR1cygpXG4gICkocm9vdEVsKVxufVxuXG5jb25zdCBnZXRDb25zdHJhaW50cyA9IHBpcGUoXG4gIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycsIGZhbHNlKVxuKVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExlZ2FsQ29uc3RyYWludHMocm9vdEVsOiBYbWxFbGVtZW50KTogQ29uc3RyYWludFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZ2V0Q29uc3RyYWludHMsXG4gICAgbWFwQXJyYXkoZXh0cmFjdExlZ2FsQ29uc3RyYWludHMoKSksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU2VjdXJpdHlDb25zdHJhaW50cyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0U2VjdXJpdHlDb25zdHJhaW50cygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPdGhlckNvbnN0cmFpbnRzKHJvb3RFbDogWG1sRWxlbWVudCk6IENvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RPdGhlckNvbnN0cmFpbnRzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExpY2Vuc2VzKHJvb3RFbDogWG1sRWxlbWVudCk6IENvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RMaWNlbnNlcygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuLy8gbm90IHVzZWQgeWV0XG5leHBvcnQgZnVuY3Rpb24gcmVhZElzb1RvcGljcyhyb290RWw6IFhtbEVsZW1lbnQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9Ub3BpY0NhdGVnb3J5Q29kZScsIHRydWUpLFxuICAgIG1hcEFycmF5KHJlYWRUZXh0KCkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFNwYXRpYWxSZXByZXNlbnRhdGlvbihcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pOiBTcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlIHwgbnVsbCB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpzcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlJyxcbiAgICAgICdnbWQ6TURfU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZUNvZGUnXG4gICAgKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKGdldFNwYXRpYWxSZXByZXNlbnRhdGlvbkZyb21Db2RlKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPdmVydmlld3Mocm9vdEVsOiBYbWxFbGVtZW50KTogR3JhcGhpY092ZXJ2aWV3W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6Z3JhcGhpY092ZXJ2aWV3JywgZmFsc2UpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZmlsZU5hbWUnKSwgZXh0cmFjdE1hbmRhdG9yeVVybCgpKSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZmlsZURlc2NyaXB0aW9uJyksIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSlcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbdXJsLCBkZXNjcmlwdGlvbl0pID0+ICh7XG4gICAgICB1cmwsXG4gICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICB9KSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkTGluZWFnZShcbiAgcm9vdEVsOiBYbWxFbGVtZW50LFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9uc1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOmRhdGFRdWFsaXR5SW5mbycsXG4gICAgICAnZ21kOkRRX0RhdGFRdWFsaXR5JyxcbiAgICAgICdnbWQ6bGluZWFnZScsXG4gICAgICAnZ21kOkxJX0xpbmVhZ2UnLFxuICAgICAgJ2dtZDpzdGF0ZW1lbnQnXG4gICAgKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKCdsaW5lYWdlJywgdHJhbnNsYXRpb25zKSxcbiAgICBtYXAoKFtsaW5lYWdlXSkgPT4gbGluZWFnZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVXBkYXRlRnJlcXVlbmN5KHJvb3RFbDogWG1sRWxlbWVudCk6IFVwZGF0ZUZyZXF1ZW5jeSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpyZXNvdXJjZU1haW50ZW5hbmNlJyxcbiAgICAgICdnbWQ6TURfTWFpbnRlbmFuY2VJbmZvcm1hdGlvbidcbiAgICApLFxuICAgIGV4dHJhY3RVcGRhdGVGcmVxdWVuY3koKSxcbiAgICBtYXAoKHVwZGF0ZUZyZXF1ZW5jeSkgPT4gdXBkYXRlRnJlcXVlbmN5IHx8ICd1bmtub3duJylcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U2VydmljZU9ubGluZVJlc291cmNlcygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlW11cbj4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpsaW5rYWdlJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSlcbiAgY29uc3QgZ2V0UHJvdG9jb2xTdHIgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwcm90b2NvbCcpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIGNvbnN0IGdldFByb3RvY29sID0gcGlwZShnZXRQcm90b2NvbFN0ciwgbWFwKG1hdGNoUHJvdG9jb2wpKVxuICBjb25zdCBnZXRPbmxpbmVGdW5jdGlvbiA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpmdW5jdGlvbicsICdnbWQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpXG4gIClcbiAgY29uc3QgZ2V0SXNMaW5rID0gcGlwZShcbiAgICBnZXRPbmxpbmVGdW5jdGlvbixcbiAgICBtYXAoKG9ubGluZUZ1bmN0aW9uKSA9PiBvbmxpbmVGdW5jdGlvbiA9PT0gJ2luZm9ybWF0aW9uJylcbiAgKVxuICBjb25zdCBnZXROYW1lID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bmFtZScpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KCduYW1lJylcbiAgKVxuICBjb25zdCBnZXREZXNjcmlwdGlvbiA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucz4oXG4gICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAge31cbiAgICApXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgJ2dtZDp0cmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgKSxcbiAgICBtYXBBcnJheShjb21iaW5lKGdldElzTGluaywgZ2V0UHJvdG9jb2wsIGdldFVybCwgZ2V0TmFtZSwgZ2V0RGVzY3JpcHRpb24pKSxcbiAgICBtYXBBcnJheShcbiAgICAgIChbXG4gICAgICAgIGlzTGluayxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHVybCxcbiAgICAgICAgW25hbWUsIG5hbWVUcmFuc2xhdGlvbnNdLFxuICAgICAgICBbZGVzY3JpcHRpb24sIGRlc2NyaXB0aW9uVHJhbnNsYXRpb25zXSxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICAgICAgICAgIC4uLm5hbWVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgLi4uZGVzY3JpcHRpb25UcmFuc2xhdGlvbnMsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTGluaykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2VuZHBvaW50JyxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgYWNjZXNzU2VydmljZVByb3RvY29sOiBwcm90b2NvbCxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFJldXNlT25saW5lUmVzb3VyY2VzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBPbmxpbmVMaW5rUmVzb3VyY2VbXVxuPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmxpbmthZ2UnKSwgZXh0cmFjdE1hbmRhdG9yeVVybCgpKVxuICBjb25zdCBnZXROYW1lID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bmFtZScpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KCduYW1lJylcbiAgKVxuICBjb25zdCBnZXREZXNjcmlwdGlvbiA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucz4oXG4gICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAge31cbiAgICApXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgJ2dtZDp0cmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgKSxcbiAgICBtYXBBcnJheShjb21iaW5lKGdldFVybCwgZ2V0TmFtZSwgZ2V0RGVzY3JpcHRpb24pKSxcbiAgICBtYXBBcnJheShcbiAgICAgIChbXG4gICAgICAgIHVybCxcbiAgICAgICAgW25hbWUsIG5hbWVUcmFuc2xhdGlvbnNdLFxuICAgICAgICBbZGVzY3JpcHRpb24sIGRlc2NyaXB0aW9uVHJhbnNsYXRpb25zXSxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICAgICAgICAgIC4uLm5hbWVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgLi4uZGVzY3JpcHRpb25UcmFuc2xhdGlvbnMsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE9ubGluZVJlc291cmNlcyhyb290RWw6IFhtbEVsZW1lbnQpOiBPbmxpbmVSZXNvdXJjZVtdIHtcbiAgbGV0IGdldE9ubGluZVJlc291cmNlczogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgT25saW5lUmVzb3VyY2VbXT5cbiAgaWYgKHJlYWRLaW5kKHJvb3RFbCkgPT09ICdkYXRhc2V0Jykge1xuICAgIGdldE9ubGluZVJlc291cmNlcyA9IChlbCkgPT4gZXh0cmFjdERhdGFzZXRPbmxpbmVSZXNvdXJjZXMoZ2V0TWltZVR5cGUpKGVsKVxuICB9IGVsc2UgaWYgKHJlYWRLaW5kKHJvb3RFbCkgPT09ICdzZXJ2aWNlJykge1xuICAgIGdldE9ubGluZVJlc291cmNlcyA9IGV4dHJhY3RTZXJ2aWNlT25saW5lUmVzb3VyY2VzKClcbiAgfSBlbHNlIHtcbiAgICBnZXRPbmxpbmVSZXNvdXJjZXMgPSBleHRyYWN0UmV1c2VPbmxpbmVSZXNvdXJjZXMoKVxuICB9XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRpc3RyaWJ1dGlvbkluZm8nLCAnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpLFxuICAgIG1hcEFycmF5KGdldE9ubGluZVJlc291cmNlcyksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGVtcG9yYWxFeHRlbnRzKHJvb3RFbDogWG1sRWxlbWVudCkge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpleHRlbnQnLCAnZ21kOkVYX0V4dGVudCcsICdnbWQ6dGVtcG9yYWxFbGVtZW50JyksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAnZ21kOkVYX1RlbXBvcmFsRXh0ZW50JyxcbiAgICAgICAgICAnZ21kOmV4dGVudCcsXG4gICAgICAgICAgJ2dtbDpUaW1lUGVyaW9kJ1xuICAgICAgICApLFxuICAgICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAnZ21kOkVYX1RlbXBvcmFsRXh0ZW50JyxcbiAgICAgICAgICAnZ21kOmV4dGVudCcsXG4gICAgICAgICAgJ2dtbDpUaW1lSW5zdGFudCdcbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtwZXJpb2RFbCwgaW5zdGFudEVsXSkgPT4ge1xuICAgICAgaWYgKHBlcmlvZEVsKSB7XG4gICAgICAgIHJldHVybiBwaXBlKFxuICAgICAgICAgIGNvbWJpbmUoXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWw6YmVnaW5Qb3NpdGlvbicsIGZhbHNlKSxcbiAgICAgICAgICAgICAgcmVhZFRleHQoKSxcbiAgICAgICAgICAgICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21sOmVuZFBvc2l0aW9uJywgZmFsc2UpLFxuICAgICAgICAgICAgICByZWFkVGV4dCgpLFxuICAgICAgICAgICAgICBtYXAoKGRhdGVTdHIpID0+IChkYXRlU3RyID8gbmV3IERhdGUoZGF0ZVN0cikgOiBudWxsKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIG1hcCgoW3N0YXJ0LCBlbmRdKSA9PiAoe1xuICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICBlbmQsXG4gICAgICAgICAgfSkpXG4gICAgICAgICkocGVyaW9kRWwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGlwZShcbiAgICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWw6dGltZVBvc2l0aW9uJywgZmFsc2UpLFxuICAgICAgICAgIHJlYWRUZXh0KCksXG4gICAgICAgICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpLFxuICAgICAgICAgIG1hcCgoZGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIHN0YXJ0OiBkYXRlLFxuICAgICAgICAgIH0pKVxuICAgICAgICApKGluc3RhbnRFbClcbiAgICAgIH1cbiAgICB9KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTcGF0aWFsRXh0ZW50cyhyb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgY29uc3QgZXh0cmFjdEdlb21ldHJ5ID0gKHJvb3RFbDogWG1sRWxlbWVudCk6IEdlb21ldHJ5ID0+IHtcbiAgICBpZiAoIXJvb3RFbCkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwb2x5Z29uJywgZmFsc2UpLFxuICAgICAgZmlyc3RDaGlsZEVsZW1lbnQsXG4gICAgICBtYXAoKGVsKSA9PiAoZWwgPyByZWFkR2VvbWV0cnkoZWwpIDogbnVsbCkpXG4gICAgKShyb290RWwpXG4gIH1cblxuICBjb25zdCBleHRyYWN0QkJveCA9IChcbiAgICByb290RWw6IFhtbEVsZW1lbnRcbiAgKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4ge1xuICAgIGlmICghcm9vdEVsKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiBwaXBlKFxuICAgICAgY29tYmluZShcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6d2VzdEJvdW5kTG9uZ2l0dWRlJyksIGV4dHJhY3REZWNpbWFsKCkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpzb3V0aEJvdW5kTGF0aXR1ZGUnKSwgZXh0cmFjdERlY2ltYWwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmVhc3RCb3VuZExvbmdpdHVkZScpLCBleHRyYWN0RGVjaW1hbCgpKSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bm9ydGhCb3VuZExhdGl0dWRlJyksIGV4dHJhY3REZWNpbWFsKCkpXG4gICAgICApXG4gICAgKShyb290RWwpXG4gIH1cblxuICBjb25zdCBleHRyYWN0RGVzY3JpcHRpb24gPSAoXG4gICAgcm9vdEVsOiBYbWxFbGVtZW50XG4gICk6IFtzdHJpbmcsIE1vZGVsVHJhbnNsYXRpb25zXSA9PiB7XG4gICAgaWYgKCFyb290RWwpIHJldHVybiBbbnVsbCwge31dXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDpnZW9ncmFwaGljSWRlbnRpZmllcicsXG4gICAgICAgICdnbWQ6TURfSWRlbnRpZmllcicsXG4gICAgICAgICdnbWQ6Y29kZSdcbiAgICAgICksXG4gICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKCdkZXNjcmlwdGlvbicpXG4gICAgKShyb290RWwpXG4gIH1cblxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpleHRlbnQnLCAnZ21kOkVYX0V4dGVudCcsICdnbWQ6Z2VvZ3JhcGhpY0VsZW1lbnQnKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOkVYX0JvdW5kaW5nUG9seWdvbicpLCBleHRyYWN0R2VvbWV0cnkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpFWF9HZW9ncmFwaGljQm91bmRpbmdCb3gnKSwgZXh0cmFjdEJCb3gpLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpFWF9HZW9ncmFwaGljRGVzY3JpcHRpb24nKSxcbiAgICAgICAgICBleHRyYWN0RGVzY3JpcHRpb25cbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICAoW2dlb21ldHJ5LCBiYm94LCBbZGVzY3JpcHRpb25dXSkgPT4gISFnZW9tZXRyeSB8fCAhIWJib3ggfHwgISFkZXNjcmlwdGlvblxuICAgICksXG4gICAgbWFwQXJyYXkoKFtnZW9tZXRyeSwgYmJveCwgW2Rlc2NyaXB0aW9uLCB0cmFuc2xhdGlvbnNdXSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKGdlb21ldHJ5ICYmIHsgZ2VvbWV0cnkgfSksXG4gICAgICAgIC4uLihiYm94ICYmIHsgYmJveCB9KSxcbiAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgIH1cbiAgICB9KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPdGhlckxhbmd1YWdlcyhyb290RWw6IFhtbEVsZW1lbnQpOiBMYW5ndWFnZUNvZGVbXSB7XG4gIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IHJlYWREZWZhdWx0TGFuZ3VhZ2Uocm9vdEVsKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6bG9jYWxlJywgZmFsc2UpLFxuICAgIG1hcEFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnbGFuOkxhbmd1YWdlQ29kZScpLFxuICAgICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICAgIG1hcCgobGFuZykgPT4gZ2V0TGFuZzJGcm9tTGFuZzMobGFuZz8udG9Mb3dlckNhc2UoKSkgPz8gbGFuZylcbiAgICAgIClcbiAgICApLFxuICAgIG1hcCgobGFuZ3VhZ2VzKSA9PlxuICAgICAgbGFuZ3VhZ2VzLmZpbHRlcigobGFuZyk6IGxhbmcgaXMgTGFuZ3VhZ2VDb2RlID0+IGxhbmcgIT09IG51bGwpXG4gICAgKSxcbiAgICBtYXAoKGxhbmd1YWdlcykgPT4gKGxhbmd1YWdlcy5sZW5ndGggPyBsYW5ndWFnZXMgOiBbZGVmYXVsdExhbmd1YWdlXSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZERlZmF1bHRMYW5ndWFnZShyb290RWw6IFhtbEVsZW1lbnQpOiBMYW5ndWFnZUNvZGUge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGFuZ3VhZ2UnLCBmYWxzZSksXG4gICAgZmluZENoaWxkRWxlbWVudCgnbGFuOkxhbmd1YWdlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoKGxhbmcpID0+IChsYW5nID8gZ2V0TGFuZzJGcm9tTGFuZzMobGFuZy50b0xvd2VyQ2FzZSgpKSA6IG51bGwpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXNvdXJjZUlkZW50aWZpZXIocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOmNpdGF0aW9uJyxcbiAgICAgICdnbWQ6Q0lfQ2l0YXRpb24nLFxuICAgICAgJ2dtZDppZGVudGlmaWVyJyxcbiAgICAgICdnbWQ6TURfSWRlbnRpZmllcicsXG4gICAgICAnZ21kOmNvZGUnXG4gICAgKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG59XG4iXX0=