@igo2/common 1.15.4 → 16.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common-theme.scss +19 -0
- package/{esm2020 → esm2022}/igo2-common.mjs +4 -4
- package/esm2022/lib/action/action.module.mjs +20 -0
- package/esm2022/lib/action/actionbar/actionbar-item.component.mjs +270 -0
- package/esm2022/lib/action/actionbar/actionbar.component.mjs +389 -0
- package/{esm2020 → esm2022}/lib/action/actionbar/actionbar.module.mjs +57 -57
- package/{esm2020 → esm2022}/lib/action/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/action/shared/action.enums.mjs +7 -7
- package/esm2022/lib/action/shared/action.interfaces.mjs +2 -0
- package/{esm2020 → esm2022}/lib/action/shared/index.mjs +4 -4
- package/{esm2020 → esm2022}/lib/action/shared/store.mjs +8 -8
- package/esm2022/lib/backdrop/backdrop.component.mjs +27 -0
- package/{esm2020 → esm2022}/lib/backdrop/backdrop.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/backdrop/index.mjs +2 -2
- package/esm2022/lib/badge-icon/badge-icon.directive.mjs +150 -0
- package/{esm2020 → esm2022}/lib/badge-icon/badge-icon.module.mjs +26 -26
- package/{esm2020 → esm2022}/lib/badge-icon/index.mjs +2 -2
- package/esm2022/lib/clickout/clickout.directive.mjs +33 -0
- package/{esm2020 → esm2022}/lib/clickout/clickout.module.mjs +24 -24
- package/{esm2020 → esm2022}/lib/clickout/index.mjs +2 -2
- package/{esm2020 → esm2022}/lib/clone/clone.module.mjs +24 -24
- package/esm2022/lib/clone/clone.pipe.mjs +24 -0
- package/{esm2020 → esm2022}/lib/clone/index.mjs +2 -2
- package/esm2022/lib/collapsible/collapse.directive.mjs +58 -0
- package/esm2022/lib/collapsible/collapsible.component.mjs +54 -0
- package/{esm2020 → esm2022}/lib/collapsible/collapsible.module.mjs +27 -27
- package/{esm2020 → esm2022}/lib/collapsible/index.mjs +3 -3
- package/esm2022/lib/color-picker-form-field/color-picker-form-field.component.mjs +121 -0
- package/esm2022/lib/color-picker-form-field/color-picker-form-field.module.mjs +32 -0
- package/esm2022/lib/color-picker-form-field/index.mjs +2 -0
- package/esm2022/lib/confirm-dialog/confirm-dialog.component.mjs +47 -0
- package/{esm2020 → esm2022}/lib/confirm-dialog/confirm-dialog.module.mjs +29 -29
- package/esm2022/lib/confirm-dialog/confirm-dialog.service.mjs +29 -0
- package/{esm2020 → esm2022}/lib/confirm-dialog/index.mjs +3 -3
- package/esm2022/lib/context-menu/context-menu.directive.mjs +110 -0
- package/{esm2020 → esm2022}/lib/context-menu/context-menu.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/context-menu/index.mjs +3 -3
- package/esm2022/lib/context-menu/long-press.directive.mjs +67 -0
- package/esm2022/lib/custom-html/custom-html.component.mjs +27 -0
- package/{esm2020 → esm2022}/lib/custom-html/custom-html.module.mjs +47 -47
- package/esm2022/lib/custom-html/custom-html.pipe.mjs +20 -0
- package/{esm2020 → esm2022}/lib/custom-html/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/dom/dom.interfaces.mjs +2 -2
- package/{esm2020 → esm2022}/lib/dom/dom.module.mjs +21 -23
- package/esm2022/lib/dom/dom.service.mjs +35 -0
- package/{esm2020 → esm2022}/lib/dom/index.mjs +3 -3
- package/esm2022/lib/drag-drop/drag-drop.directive.mjs +85 -0
- package/{esm2020 → esm2022}/lib/drag-drop/drag-drop.module.mjs +24 -24
- package/{esm2020 → esm2022}/lib/drag-drop/index.mjs +2 -2
- package/esm2022/lib/dynamic-component/dynamic-component.module.mjs +20 -0
- package/esm2022/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +138 -0
- package/esm2022/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +22 -0
- package/{esm2020 → esm2022}/lib/dynamic-component/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/dynamic-component/shared/dynamic-component.interfaces.mjs +2 -2
- package/esm2022/lib/dynamic-component/shared/dynamic-component.mjs +183 -0
- package/esm2022/lib/dynamic-component/shared/dynamic-component.service.mjs +30 -0
- package/{esm2020 → esm2022}/lib/dynamic-component/shared/index.mjs +4 -4
- package/esm2022/lib/entity/entity-selector/entity-selector.component.mjs +214 -0
- package/esm2022/lib/entity/entity-selector/entity-selector.module.mjs +24 -0
- package/esm2022/lib/entity/entity-table/entity-table-row.directive.mjs +139 -0
- package/esm2022/lib/entity/entity-table/entity-table.component.mjs +1455 -0
- package/{esm2020 → esm2022}/lib/entity/entity-table/entity-table.module.mjs +96 -102
- package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +167 -0
- package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +2 -0
- package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +22 -0
- package/{esm2020 → esm2022}/lib/entity/entity.module.mjs +29 -31
- package/{esm2020 → esm2022}/lib/entity/index.mjs +6 -6
- package/{esm2020 → esm2022}/lib/entity/shared/entity.enums.mjs +28 -28
- package/esm2022/lib/entity/shared/entity.interfaces.mjs +2 -0
- package/esm2022/lib/entity/shared/entity.utils.mjs +73 -0
- package/esm2022/lib/entity/shared/index.mjs +11 -0
- package/esm2022/lib/entity/shared/state.mjs +194 -0
- package/esm2022/lib/entity/shared/store-strategy.mjs +73 -0
- package/esm2022/lib/entity/shared/store.mjs +256 -0
- package/esm2022/lib/entity/shared/strategies/filter-custom-function.mjs +80 -0
- package/esm2022/lib/entity/shared/strategies/filter-selection.mjs +81 -0
- package/{esm2020 → esm2022}/lib/entity/shared/strategies/index.mjs +4 -4
- package/esm2022/lib/entity/shared/strategies/strategy.mjs +78 -0
- package/esm2022/lib/entity/shared/transaction.mjs +329 -0
- package/esm2022/lib/entity/shared/view.mjs +330 -0
- package/esm2022/lib/entity/shared/watcher.mjs +135 -0
- package/esm2022/lib/flexible/flexible.component.mjs +153 -0
- package/{esm2020 → esm2022}/lib/flexible/flexible.module.mjs +24 -24
- package/{esm2020 → esm2022}/lib/flexible/flexible.type.mjs +2 -2
- package/{esm2020 → esm2022}/lib/flexible/index.mjs +3 -3
- package/esm2022/lib/form/form/form.component.mjs +125 -0
- package/esm2022/lib/form/form/form.module.mjs +23 -0
- package/esm2022/lib/form/form-field/form-field-select.component.mjs +140 -0
- package/esm2022/lib/form/form-field/form-field-text.component.mjs +113 -0
- package/esm2022/lib/form/form-field/form-field-textarea.component.mjs +114 -0
- package/esm2022/lib/form/form-field/form-field.component.mjs +78 -0
- package/{esm2020 → esm2022}/lib/form/form-field/form-field.module.mjs +74 -74
- package/{esm2020 → esm2022}/lib/form/form-field/index.mjs +5 -5
- package/esm2022/lib/form/form-group/form-group.component.mjs +115 -0
- package/esm2022/lib/form/form-group/form-group.module.mjs +36 -0
- package/esm2022/lib/form/form.module.mjs +27 -0
- package/{esm2020 → esm2022}/lib/form/index.mjs +5 -5
- package/{esm2020 → esm2022}/lib/form/shared/form-field-component.mjs +7 -7
- package/esm2022/lib/form/shared/form-field.service.mjs +29 -0
- package/esm2022/lib/form/shared/form.interfaces.mjs +2 -0
- package/esm2022/lib/form/shared/form.service.mjs +82 -0
- package/esm2022/lib/form/shared/form.utils.mjs +40 -0
- package/{esm2020 → esm2022}/lib/form/shared/index.mjs +6 -6
- package/esm2022/lib/home-button/home-button.component.mjs +30 -0
- package/{esm2020 → esm2022}/lib/home-button/home-button.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/home-button/index.mjs +2 -2
- package/esm2022/lib/image/image-error.directive.mjs +36 -0
- package/{esm2020 → esm2022}/lib/image/image.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/image/index.mjs +3 -3
- package/esm2022/lib/image/secure-image.pipe.mjs +65 -0
- package/{esm2020 → esm2022}/lib/interactive-tour/index.mjs +5 -5
- package/esm2022/lib/interactive-tour/interactive-tour.component.mjs +161 -0
- package/esm2022/lib/interactive-tour/interactive-tour.interface.mjs +2 -0
- package/esm2022/lib/interactive-tour/interactive-tour.loader.mjs +49 -0
- package/{esm2020 → esm2022}/lib/interactive-tour/interactive-tour.module.mjs +40 -40
- package/esm2022/lib/interactive-tour/interactive-tour.service.mjs +298 -0
- package/{esm2020 → esm2022}/lib/json-dialog/index.mjs +3 -3
- package/esm2022/lib/json-dialog/json-dialog.component.mjs +114 -0
- package/{esm2020 → esm2022}/lib/json-dialog/json-dialog.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/json-dialog/json-dialog.service.mjs +26 -24
- package/{esm2020 → esm2022}/lib/keyvalue/index.mjs +2 -2
- package/{esm2020 → esm2022}/lib/keyvalue/keyvalue.module.mjs +24 -24
- package/{esm2020 → esm2022}/lib/keyvalue/keyvalue.pipe.mjs +18 -18
- package/{esm2020 → esm2022}/lib/list/index.mjs +3 -3
- package/esm2022/lib/list/list-item.directive.mjs +167 -0
- package/esm2022/lib/list/list.component.mjs +268 -0
- package/{esm2020 → esm2022}/lib/list/list.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/panel/index.mjs +2 -2
- package/esm2022/lib/panel/panel.component.mjs +60 -0
- package/{esm2020 → esm2022}/lib/panel/panel.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/sidenav/index.mjs +2 -2
- package/esm2022/lib/sidenav/sidenav-shim.directive.mjs +59 -0
- package/{esm2020 → esm2022}/lib/sidenav/sidenav.module.mjs +24 -24
- package/{esm2020 → esm2022}/lib/spinner/index.mjs +3 -3
- package/esm2022/lib/spinner/spinner-activity.directive.mjs +55 -0
- package/esm2022/lib/spinner/spinner.component.mjs +38 -0
- package/{esm2020 → esm2022}/lib/spinner/spinner.module.mjs +21 -21
- package/{esm2020 → esm2022}/lib/stop-propagation/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/stop-propagation/stop-drop-propagation.directive.mjs +22 -22
- package/{esm2020 → esm2022}/lib/stop-propagation/stop-propagation.directive.mjs +21 -21
- package/{esm2020 → esm2022}/lib/stop-propagation/stop-propagation.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/table/index.mjs +6 -6
- package/{esm2020 → esm2022}/lib/table/table-action-color.enum.mjs +7 -7
- package/esm2022/lib/table/table-database.mjs +28 -0
- package/esm2022/lib/table/table-datasource.mjs +64 -0
- package/esm2022/lib/table/table-model.interface.mjs +2 -0
- package/esm2022/lib/table/table.component.mjs +302 -0
- package/{esm2020 → esm2022}/lib/table/table.module.mjs +67 -67
- package/{esm2020 → esm2022}/lib/tool/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/tool/shared/index.mjs +6 -6
- package/esm2022/lib/tool/shared/tool-component.mjs +9 -0
- package/esm2022/lib/tool/shared/tool.interface.mjs +2 -0
- package/esm2022/lib/tool/shared/tool.service.mjs +43 -0
- package/{esm2020 → esm2022}/lib/tool/shared/toolbox.enums.mjs +7 -7
- package/esm2022/lib/tool/shared/toolbox.mjs +184 -0
- package/esm2022/lib/tool/tool.module.mjs +26 -0
- package/{esm2020 → esm2022}/lib/tool/toolbox/toolbox.animation.mjs +10 -10
- package/esm2022/lib/tool/toolbox/toolbox.component.mjs +273 -0
- package/esm2022/lib/tool/toolbox/toolbox.module.mjs +24 -0
- package/{esm2020 → esm2022}/lib/widget/index.mjs +3 -3
- package/{esm2020 → esm2022}/lib/widget/shared/index.mjs +4 -4
- package/esm2022/lib/widget/shared/widget.interfaces.mjs +2 -0
- package/{esm2020 → esm2022}/lib/widget/shared/widget.mjs +4 -4
- package/esm2022/lib/widget/shared/widget.service.mjs +22 -0
- package/esm2022/lib/widget/widget-outlet/widget-outlet.component.mjs +124 -0
- package/esm2022/lib/widget/widget-outlet/widget-outlet.module.mjs +23 -0
- package/esm2022/lib/widget/widget.module.mjs +21 -0
- package/{esm2020 → esm2022}/lib/workspace/index.mjs +4 -4
- package/{esm2020 → esm2022}/lib/workspace/shared/index.mjs +4 -4
- package/esm2022/lib/workspace/shared/store.mjs +37 -0
- package/esm2022/lib/workspace/shared/workspace.interfaces.mjs +2 -0
- package/esm2022/lib/workspace/shared/workspace.mjs +143 -0
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.component.mjs +58 -0
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +23 -0
- package/esm2022/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +94 -0
- package/esm2022/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +23 -0
- package/esm2022/lib/workspace/workspace.module.mjs +20 -0
- package/esm2022/public_api.mjs +76 -0
- package/{fesm2020 → fesm2022}/igo2-common.mjs +9838 -9345
- package/fesm2022/igo2-common.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/action/action.module.d.ts +8 -8
- package/lib/action/action.theming.scss +5 -0
- package/lib/action/actionbar/actionbar-item.component.d.ts +78 -78
- package/lib/action/actionbar/actionbar-item.theming.scss +32 -0
- package/lib/action/actionbar/actionbar.component.d.ts +147 -146
- package/lib/action/actionbar/actionbar.module.d.ts +20 -20
- package/lib/action/actionbar/actionbar.theming.scss +22 -0
- package/lib/action/index.d.ts +2 -2
- package/lib/action/shared/action.enums.d.ts +5 -5
- package/lib/action/shared/action.interfaces.d.ts +17 -17
- package/lib/action/shared/index.d.ts +3 -3
- package/lib/action/shared/store.d.ts +8 -8
- package/lib/backdrop/backdrop.component.d.ts +9 -9
- package/lib/backdrop/backdrop.module.d.ts +10 -10
- package/lib/backdrop/index.d.ts +1 -1
- package/lib/badge-icon/badge-icon.directive.d.ts +36 -36
- package/lib/badge-icon/badge-icon.module.d.ts +11 -11
- package/lib/badge-icon/index.d.ts +1 -1
- package/lib/clickout/clickout.directive.d.ts +10 -10
- package/lib/clickout/clickout.module.d.ts +9 -9
- package/lib/clickout/index.d.ts +1 -1
- package/lib/clone/clone.module.d.ts +9 -9
- package/lib/clone/clone.pipe.d.ts +7 -7
- package/lib/clone/index.d.ts +1 -1
- package/lib/collapsible/collapse.directive.d.ts +19 -19
- package/lib/collapsible/collapsible.component.d.ts +13 -13
- package/lib/collapsible/collapsible.module.d.ts +12 -12
- package/lib/collapsible/collapsible.theming.scss +22 -0
- package/lib/collapsible/index.d.ts +2 -2
- package/lib/color-picker-form-field/color-picker-form-field.component.d.ts +26 -0
- package/lib/color-picker-form-field/color-picker-form-field.module.d.ts +10 -0
- package/lib/color-picker-form-field/index.d.ts +1 -0
- package/lib/confirm-dialog/confirm-dialog.component.d.ts +9 -9
- package/lib/confirm-dialog/confirm-dialog.module.d.ts +12 -12
- package/lib/confirm-dialog/confirm-dialog.service.d.ts +12 -12
- package/lib/confirm-dialog/index.d.ts +2 -2
- package/lib/context-menu/context-menu.directive.d.ts +21 -21
- package/lib/context-menu/context-menu.module.d.ts +10 -10
- package/lib/context-menu/index.d.ts +2 -2
- package/lib/context-menu/long-press.directive.d.ts +20 -20
- package/lib/custom-html/custom-html.component.d.ts +9 -9
- package/lib/custom-html/custom-html.module.d.ts +16 -16
- package/lib/custom-html/custom-html.pipe.d.ts +10 -10
- package/lib/custom-html/index.d.ts +2 -2
- package/lib/dom/dom.interfaces.d.ts +10 -10
- package/lib/dom/dom.module.d.ts +8 -8
- package/lib/dom/dom.service.d.ts +10 -10
- package/lib/dom/index.d.ts +2 -2
- package/lib/drag-drop/drag-drop.directive.d.ts +14 -14
- package/lib/drag-drop/drag-drop.module.d.ts +9 -9
- package/lib/drag-drop/index.d.ts +1 -1
- package/lib/dynamic-component/dynamic-component.module.d.ts +8 -8
- package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.d.ts +70 -70
- package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.d.ts +11 -11
- package/lib/dynamic-component/index.d.ts +2 -2
- package/lib/dynamic-component/shared/dynamic-component.d.ts +88 -88
- package/lib/dynamic-component/shared/dynamic-component.interfaces.d.ts +3 -3
- package/lib/dynamic-component/shared/dynamic-component.service.d.ts +18 -18
- package/lib/dynamic-component/shared/index.d.ts +3 -3
- package/lib/entity/entity-selector/entity-selector.component.d.ts +92 -92
- package/lib/entity/entity-selector/entity-selector.module.d.ts +13 -13
- package/lib/entity/entity-selector/entity-selector.theming.scss +21 -0
- package/lib/entity/entity-table/entity-table-row.directive.d.ts +69 -69
- package/lib/entity/entity-table/entity-table.component.d.ts +327 -333
- package/lib/entity/entity-table/entity-table.module.d.ts +29 -29
- package/lib/entity/entity-table/entity-table.theming.scss +34 -0
- package/lib/entity/entity-table-paginator/entity-table-paginator.component.d.ts +49 -49
- package/lib/entity/entity-table-paginator/entity-table-paginator.interface.d.ts +8 -8
- package/lib/entity/entity-table-paginator/entity-table-paginator.module.d.ts +11 -11
- package/lib/entity/entity-table-paginator/entity-table-paginator.theming.scss +21 -0
- package/lib/entity/entity.module.d.ts +10 -10
- package/lib/entity/entity.theming.scss +10 -0
- package/lib/entity/index.d.ts +5 -5
- package/lib/entity/shared/entity.enums.d.ts +23 -23
- package/lib/entity/shared/entity.interfaces.d.ts +95 -114
- package/lib/entity/shared/entity.utils.d.ts +49 -49
- package/lib/entity/shared/index.d.ts +10 -9
- package/lib/entity/shared/state.d.ts +108 -103
- package/lib/entity/shared/store-strategy.d.ts +38 -0
- package/lib/entity/shared/store.d.ts +147 -176
- package/lib/entity/shared/strategies/filter-custom-function.d.ts +51 -51
- package/lib/entity/shared/strategies/filter-selection.d.ts +48 -48
- package/lib/entity/shared/strategies/index.d.ts +3 -3
- package/lib/entity/shared/strategies/strategy.d.ts +56 -56
- package/lib/entity/shared/transaction.d.ts +180 -168
- package/lib/entity/shared/view.d.ts +193 -193
- package/lib/entity/shared/watcher.d.ts +72 -72
- package/lib/flexible/flexible.component.d.ts +41 -41
- package/lib/flexible/flexible.module.d.ts +9 -9
- package/lib/flexible/flexible.type.d.ts +2 -2
- package/lib/flexible/index.d.ts +2 -2
- package/lib/form/form/form.component.d.ts +53 -53
- package/lib/form/form/form.module.d.ts +12 -12
- package/lib/form/form-field/form-field-select.component.d.ts +48 -48
- package/lib/form/form-field/form-field-text.component.d.ts +41 -41
- package/lib/form/form-field/form-field-textarea.component.d.ts +41 -41
- package/lib/form/form-field/form-field.component.d.ts +29 -34
- package/lib/form/form-field/form-field.module.d.ts +21 -21
- package/lib/form/form-field/index.d.ts +4 -4
- package/lib/form/form-group/form-group.component.d.ts +49 -49
- package/lib/form/form-group/form-group.module.d.ts +14 -14
- package/lib/form/form.module.d.ts +13 -13
- package/lib/form/index.d.ts +4 -4
- package/lib/form/shared/form-field-component.d.ts +1 -1
- package/lib/form/shared/form-field.service.d.ts +19 -19
- package/lib/form/shared/form.interfaces.d.ts +61 -57
- package/lib/form/shared/form.service.d.ts +15 -15
- package/lib/form/shared/form.utils.d.ts +11 -11
- package/lib/form/shared/index.d.ts +5 -5
- package/lib/home-button/home-button.component.d.ts +9 -9
- package/lib/home-button/home-button.module.d.ts +15 -15
- package/lib/home-button/home-button.theming.scss +18 -0
- package/lib/home-button/index.d.ts +1 -1
- package/lib/image/image-error.directive.d.ts +11 -11
- package/lib/image/image.module.d.ts +10 -10
- package/lib/image/index.d.ts +2 -2
- package/lib/image/secure-image.pipe.d.ts +13 -13
- package/lib/interactive-tour/index.d.ts +4 -4
- package/lib/interactive-tour/interactive-tour.component.d.ts +30 -30
- package/lib/interactive-tour/interactive-tour.interface.d.ts +33 -32
- package/lib/interactive-tour/interactive-tour.loader.d.ts +18 -18
- package/lib/interactive-tour/interactive-tour.module.d.ts +12 -12
- package/lib/interactive-tour/interactive-tour.service.d.ts +29 -29
- package/lib/interactive-tour/interactive-tour.theming.scss +32 -0
- package/lib/json-dialog/index.d.ts +2 -2
- package/lib/json-dialog/json-dialog.component.d.ts +13 -13
- package/lib/json-dialog/json-dialog.module.d.ts +13 -13
- package/lib/json-dialog/json-dialog.service.d.ts +10 -10
- package/lib/keyvalue/index.d.ts +1 -1
- package/lib/keyvalue/keyvalue.module.d.ts +9 -9
- package/lib/keyvalue/keyvalue.pipe.d.ts +7 -7
- package/lib/list/index.d.ts +2 -2
- package/lib/list/list-item.directive.d.ts +43 -43
- package/lib/list/list.component.d.ts +51 -51
- package/lib/list/list.module.d.ts +14 -14
- package/lib/list/list.theming.scss +40 -0
- package/lib/panel/index.d.ts +1 -1
- package/lib/panel/panel.component.d.ts +10 -10
- package/lib/panel/panel.module.d.ts +8 -8
- package/lib/panel/panel.theming.scss +30 -0
- package/lib/sidenav/index.d.ts +1 -1
- package/lib/sidenav/sidenav-shim.directive.d.ts +20 -20
- package/lib/sidenav/sidenav.module.d.ts +9 -9
- package/lib/spinner/index.d.ts +2 -2
- package/lib/spinner/spinner-activity.directive.d.ts +32 -32
- package/lib/spinner/spinner.component.d.ts +12 -12
- package/lib/spinner/spinner.module.d.ts +10 -10
- package/lib/stop-propagation/index.d.ts +2 -2
- package/lib/stop-propagation/stop-drop-propagation.directive.d.ts +6 -6
- package/lib/stop-propagation/stop-propagation.directive.d.ts +6 -6
- package/lib/stop-propagation/stop-propagation.module.d.ts +10 -10
- package/lib/table/index.d.ts +5 -5
- package/lib/table/table-action-color.enum.d.ts +5 -5
- package/lib/table/table-database.d.ts +10 -10
- package/lib/table/table-datasource.d.ts +18 -17
- package/lib/table/table-model.interface.d.ts +28 -28
- package/lib/table/table.component.d.ts +40 -40
- package/lib/table/table.module.d.ts +20 -20
- package/lib/tool/index.d.ts +2 -2
- package/lib/tool/shared/index.d.ts +5 -5
- package/lib/tool/shared/tool-component.d.ts +2 -2
- package/lib/tool/shared/tool.interface.d.ts +18 -18
- package/lib/tool/shared/tool.service.d.ts +30 -30
- package/lib/tool/shared/toolbox.d.ts +95 -95
- package/lib/tool/shared/toolbox.enums.d.ts +5 -5
- package/lib/tool/tool.module.d.ts +10 -10
- package/lib/tool/tool.theming.scss +5 -0
- package/lib/tool/toolbox/toolbox.animation.d.ts +2 -2
- package/lib/tool/toolbox/toolbox.component.d.ts +128 -127
- package/lib/tool/toolbox/toolbox.module.d.ts +13 -13
- package/lib/tool/toolbox/toolbox.theming.scss +105 -0
- package/lib/widget/index.d.ts +2 -2
- package/lib/widget/shared/index.d.ts +3 -3
- package/lib/widget/shared/widget.d.ts +4 -4
- package/lib/widget/shared/widget.interfaces.d.ts +12 -12
- package/lib/widget/shared/widget.service.d.ts +10 -10
- package/lib/widget/widget-outlet/widget-outlet.component.d.ts +71 -71
- package/lib/widget/widget-outlet/widget-outlet.module.d.ts +12 -12
- package/lib/widget/widget.module.d.ts +8 -8
- package/lib/workspace/index.d.ts +3 -3
- package/lib/workspace/shared/index.d.ts +3 -3
- package/lib/workspace/shared/store.d.ts +20 -20
- package/lib/workspace/shared/workspace.d.ts +108 -108
- package/lib/workspace/shared/workspace.interfaces.d.ts +11 -11
- package/lib/workspace/workspace-selector/workspace-selector.component.d.ts +39 -39
- package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +12 -12
- package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.d.ts +57 -57
- package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.d.ts +12 -12
- package/lib/workspace/workspace.module.d.ts +9 -9
- package/locale/en.common.json +43 -0
- package/locale/fr.common.json +43 -0
- package/package.json +31 -28
- package/public_api.d.ts +72 -70
- package/style/partial/common-utils.scss +9 -0
- package/style/partial/common.variables.scss +8 -8
- package/style/style.css +204 -0
- package/esm2020/lib/action/action.module.mjs +0 -27
- package/esm2020/lib/action/actionbar/actionbar-item.component.mjs +0 -252
- package/esm2020/lib/action/actionbar/actionbar.component.mjs +0 -370
- package/esm2020/lib/action/shared/action.interfaces.mjs +0 -2
- package/esm2020/lib/backdrop/backdrop.component.mjs +0 -26
- package/esm2020/lib/badge-icon/badge-icon.directive.mjs +0 -141
- package/esm2020/lib/clickout/clickout.directive.mjs +0 -32
- package/esm2020/lib/clone/clone.pipe.mjs +0 -24
- package/esm2020/lib/collapsible/collapse.directive.mjs +0 -55
- package/esm2020/lib/collapsible/collapsible.component.mjs +0 -57
- package/esm2020/lib/confirm-dialog/confirm-dialog.component.mjs +0 -44
- package/esm2020/lib/confirm-dialog/confirm-dialog.service.mjs +0 -24
- package/esm2020/lib/context-menu/context-menu.directive.mjs +0 -103
- package/esm2020/lib/context-menu/long-press.directive.mjs +0 -67
- package/esm2020/lib/custom-html/custom-html.component.mjs +0 -28
- package/esm2020/lib/custom-html/custom-html.pipe.mjs +0 -18
- package/esm2020/lib/dom/dom.service.mjs +0 -30
- package/esm2020/lib/drag-drop/drag-drop.directive.mjs +0 -88
- package/esm2020/lib/dynamic-component/dynamic-component.module.mjs +0 -31
- package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +0 -122
- package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +0 -28
- package/esm2020/lib/dynamic-component/shared/dynamic-component.mjs +0 -174
- package/esm2020/lib/dynamic-component/shared/dynamic-component.service.mjs +0 -29
- package/esm2020/lib/entity/entity-selector/entity-selector.component.mjs +0 -194
- package/esm2020/lib/entity/entity-selector/entity-selector.module.mjs +0 -32
- package/esm2020/lib/entity/entity-table/entity-table-row.directive.mjs +0 -137
- package/esm2020/lib/entity/entity-table/entity-table.component.mjs +0 -1376
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +0 -132
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +0 -2
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +0 -28
- package/esm2020/lib/entity/shared/entity.interfaces.mjs +0 -2
- package/esm2020/lib/entity/shared/entity.utils.mjs +0 -67
- package/esm2020/lib/entity/shared/index.mjs +0 -10
- package/esm2020/lib/entity/shared/state.mjs +0 -191
- package/esm2020/lib/entity/shared/store.mjs +0 -288
- package/esm2020/lib/entity/shared/strategies/filter-custom-function.mjs +0 -79
- package/esm2020/lib/entity/shared/strategies/filter-selection.mjs +0 -84
- package/esm2020/lib/entity/shared/strategies/strategy.mjs +0 -75
- package/esm2020/lib/entity/shared/transaction.mjs +0 -316
- package/esm2020/lib/entity/shared/view.mjs +0 -315
- package/esm2020/lib/entity/shared/watcher.mjs +0 -120
- package/esm2020/lib/flexible/flexible.component.mjs +0 -148
- package/esm2020/lib/form/form/form.component.mjs +0 -117
- package/esm2020/lib/form/form/form.module.mjs +0 -40
- package/esm2020/lib/form/form-field/form-field-select.component.mjs +0 -127
- package/esm2020/lib/form/form-field/form-field-text.component.mjs +0 -104
- package/esm2020/lib/form/form-field/form-field-textarea.component.mjs +0 -105
- package/esm2020/lib/form/form-field/form-field.component.mjs +0 -72
- package/esm2020/lib/form/form-group/form-group.component.mjs +0 -105
- package/esm2020/lib/form/form-group/form-group.module.mjs +0 -40
- package/esm2020/lib/form/form.module.mjs +0 -49
- package/esm2020/lib/form/shared/form-field.service.mjs +0 -29
- package/esm2020/lib/form/shared/form.interfaces.mjs +0 -2
- package/esm2020/lib/form/shared/form.service.mjs +0 -81
- package/esm2020/lib/form/shared/form.utils.mjs +0 -40
- package/esm2020/lib/home-button/home-button.component.mjs +0 -31
- package/esm2020/lib/image/image-error.directive.mjs +0 -35
- package/esm2020/lib/image/secure-image.pipe.mjs +0 -59
- package/esm2020/lib/interactive-tour/interactive-tour.component.mjs +0 -135
- package/esm2020/lib/interactive-tour/interactive-tour.interface.mjs +0 -2
- package/esm2020/lib/interactive-tour/interactive-tour.loader.mjs +0 -44
- package/esm2020/lib/interactive-tour/interactive-tour.service.mjs +0 -285
- package/esm2020/lib/json-dialog/json-dialog.component.mjs +0 -109
- package/esm2020/lib/list/list-item.directive.mjs +0 -165
- package/esm2020/lib/list/list.component.mjs +0 -262
- package/esm2020/lib/panel/panel.component.mjs +0 -59
- package/esm2020/lib/sidenav/sidenav-shim.directive.mjs +0 -55
- package/esm2020/lib/spinner/spinner-activity.directive.mjs +0 -47
- package/esm2020/lib/spinner/spinner.component.mjs +0 -35
- package/esm2020/lib/table/table-database.mjs +0 -28
- package/esm2020/lib/table/table-datasource.mjs +0 -61
- package/esm2020/lib/table/table-model.interface.mjs +0 -2
- package/esm2020/lib/table/table.component.mjs +0 -297
- package/esm2020/lib/tool/shared/tool-component.mjs +0 -9
- package/esm2020/lib/tool/shared/tool.interface.mjs +0 -2
- package/esm2020/lib/tool/shared/tool.service.mjs +0 -43
- package/esm2020/lib/tool/shared/toolbox.mjs +0 -179
- package/esm2020/lib/tool/tool.module.mjs +0 -32
- package/esm2020/lib/tool/toolbox/toolbox.component.mjs +0 -255
- package/esm2020/lib/tool/toolbox/toolbox.module.mjs +0 -36
- package/esm2020/lib/widget/shared/widget.interfaces.mjs +0 -2
- package/esm2020/lib/widget/shared/widget.service.mjs +0 -20
- package/esm2020/lib/widget/widget-outlet/widget-outlet.component.mjs +0 -116
- package/esm2020/lib/widget/widget-outlet/widget-outlet.module.mjs +0 -32
- package/esm2020/lib/widget/widget.module.mjs +0 -32
- package/esm2020/lib/workspace/shared/store.mjs +0 -40
- package/esm2020/lib/workspace/shared/workspace.interfaces.mjs +0 -2
- package/esm2020/lib/workspace/shared/workspace.mjs +0 -117
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.component.mjs +0 -51
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +0 -32
- package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +0 -88
- package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +0 -32
- package/esm2020/lib/workspace/workspace.module.mjs +0 -27
- package/esm2020/public_api.mjs +0 -74
- package/fesm2015/igo2-common.mjs +0 -10329
- package/fesm2015/igo2-common.mjs.map +0 -1
- package/fesm2020/igo2-common.mjs.map +0 -1
- package/style/common.theming.scss +0 -12
- package/style/partial/action.scss +0 -18
|
@@ -0,0 +1,1455 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef, ElementRef, Optional, Self } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Observable } from 'rxjs';
|
|
3
|
+
import { EntityStore, EntityTableColumnRenderer, EntityTableSelectionState, EntityTableScrollBehavior } from '../shared';
|
|
4
|
+
import { MatPaginator } from '@angular/material/paginator';
|
|
5
|
+
import { MatTableDataSource } from '@angular/material/table';
|
|
6
|
+
import { MatFormFieldControl } from '@angular/material/form-field';
|
|
7
|
+
import { UntypedFormBuilder, NgControl, NgForm, FormControlName, UntypedFormGroup } from '@angular/forms';
|
|
8
|
+
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
9
|
+
import { DateAdapter, ErrorStateMatcher } from '@angular/material/core';
|
|
10
|
+
import { map } from 'rxjs/operators';
|
|
11
|
+
import { default as moment } from 'moment';
|
|
12
|
+
import { StringUtils } from '@igo2/utils';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@angular/forms";
|
|
15
|
+
import * as i2 from "@angular/cdk/a11y";
|
|
16
|
+
import * as i3 from "@angular/material/core";
|
|
17
|
+
import * as i4 from "@angular/common";
|
|
18
|
+
import * as i5 from "@angular/material/table";
|
|
19
|
+
import * as i6 from "@angular/material/autocomplete";
|
|
20
|
+
import * as i7 from "@angular/material/sort";
|
|
21
|
+
import * as i8 from "@angular/material/icon";
|
|
22
|
+
import * as i9 from "@angular/material/button";
|
|
23
|
+
import * as i10 from "@angular/material/checkbox";
|
|
24
|
+
import * as i11 from "@angular/material/form-field";
|
|
25
|
+
import * as i12 from "@angular/material/select";
|
|
26
|
+
import * as i13 from "../../stop-propagation/stop-propagation.directive";
|
|
27
|
+
import * as i14 from "../entity-table-paginator/entity-table-paginator.component";
|
|
28
|
+
import * as i15 from "../../image/image-error.directive";
|
|
29
|
+
import * as i16 from "@angular/material/input";
|
|
30
|
+
import * as i17 from "@angular/material/datepicker";
|
|
31
|
+
import * as i18 from "@angular/material/tooltip";
|
|
32
|
+
import * as i19 from "./entity-table-row.directive";
|
|
33
|
+
import * as i20 from "../../custom-html/custom-html.pipe";
|
|
34
|
+
import * as i21 from "../../image/secure-image.pipe";
|
|
35
|
+
import * as i22 from "@ngx-translate/core";
|
|
36
|
+
function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
38
|
+
i0.ɵɵelementContainerStart(0);
|
|
39
|
+
i0.ɵɵelementStart(1, "mat-checkbox", 11);
|
|
40
|
+
i0.ɵɵlistener("change", function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template_mat_checkbox_change_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r9.onToggleRows($event.checked)); });
|
|
41
|
+
i0.ɵɵelementEnd();
|
|
42
|
+
i0.ɵɵelementContainerEnd();
|
|
43
|
+
} if (rf & 2) {
|
|
44
|
+
const selectionState_r8 = ctx.ngIf;
|
|
45
|
+
const ctx_r7 = i0.ɵɵnextContext(3);
|
|
46
|
+
i0.ɵɵadvance(1);
|
|
47
|
+
i0.ɵɵproperty("checked", selectionState_r8 === ctx_r7.entityTableSelectionState.All)("indeterminate", selectionState_r8 === ctx_r7.entityTableSelectionState.Some);
|
|
48
|
+
} }
|
|
49
|
+
function EntityTableComponent_th_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
+
i0.ɵɵelementContainerStart(0);
|
|
51
|
+
i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_ng_container_1_Template, 2, 2, "ng-container", 10);
|
|
52
|
+
i0.ɵɵpipe(2, "async");
|
|
53
|
+
i0.ɵɵelementContainerEnd();
|
|
54
|
+
} if (rf & 2) {
|
|
55
|
+
const ctx_r6 = i0.ɵɵnextContext(2);
|
|
56
|
+
i0.ɵɵadvance(1);
|
|
57
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 1, ctx_r6.selectionState$));
|
|
58
|
+
} }
|
|
59
|
+
function EntityTableComponent_th_3_Template(rf, ctx) { if (rf & 1) {
|
|
60
|
+
i0.ɵɵelementStart(0, "th", 9);
|
|
61
|
+
i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_Template, 3, 3, "ng-container", 10);
|
|
62
|
+
i0.ɵɵelementEnd();
|
|
63
|
+
} if (rf & 2) {
|
|
64
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
65
|
+
i0.ɵɵadvance(1);
|
|
66
|
+
i0.ɵɵproperty("ngIf", ctx_r0.selectMany);
|
|
67
|
+
} }
|
|
68
|
+
function EntityTableComponent_td_4_Template(rf, ctx) { if (rf & 1) {
|
|
69
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
70
|
+
i0.ɵɵelementStart(0, "td", 12)(1, "mat-checkbox", 13);
|
|
71
|
+
i0.ɵɵlistener("mousedown", function EntityTableComponent_td_4_Template_mat_checkbox_mousedown_1_listener($event) { return $event.shiftKey ? $event.preventDefault() : null; })("click", function EntityTableComponent_td_4_Template_mat_checkbox_click_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r14); const record_r11 = restoredCtx.$implicit; const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView($event.shiftKey ? ctx_r13.onShiftToggleRow(!ctx_r13.rowIsSelected(record_r11), record_r11, $event) : $event.stopPropagation()); })("change", function EntityTableComponent_td_4_Template_mat_checkbox_change_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r14); const record_r11 = restoredCtx.$implicit; const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.onToggleRow($event.checked, record_r11)); });
|
|
72
|
+
i0.ɵɵelementEnd()();
|
|
73
|
+
} if (rf & 2) {
|
|
74
|
+
const record_r11 = ctx.$implicit;
|
|
75
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
76
|
+
i0.ɵɵadvance(1);
|
|
77
|
+
i0.ɵɵproperty("checked", ctx_r1.rowIsSelected(record_r11));
|
|
78
|
+
} }
|
|
79
|
+
function EntityTableComponent_ng_container_5_ng_container_1_th_1_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
+
i0.ɵɵelementStart(0, "th", 16);
|
|
81
|
+
i0.ɵɵtext(1);
|
|
82
|
+
i0.ɵɵelementEnd();
|
|
83
|
+
} if (rf & 2) {
|
|
84
|
+
const column_r16 = i0.ɵɵnextContext(2).$implicit;
|
|
85
|
+
i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
|
|
86
|
+
i0.ɵɵadvance(1);
|
|
87
|
+
i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
|
|
88
|
+
} }
|
|
89
|
+
function EntityTableComponent_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
90
|
+
i0.ɵɵelementContainerStart(0);
|
|
91
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_th_1_Template, 2, 2, "th", 15);
|
|
92
|
+
i0.ɵɵelementContainerEnd();
|
|
93
|
+
} }
|
|
94
|
+
function EntityTableComponent_ng_container_5_ng_container_2_th_1_Template(rf, ctx) { if (rf & 1) {
|
|
95
|
+
i0.ɵɵelementStart(0, "th", 18);
|
|
96
|
+
i0.ɵɵtext(1);
|
|
97
|
+
i0.ɵɵelementEnd();
|
|
98
|
+
} if (rf & 2) {
|
|
99
|
+
const column_r16 = i0.ɵɵnextContext(2).$implicit;
|
|
100
|
+
i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
|
|
101
|
+
i0.ɵɵadvance(1);
|
|
102
|
+
i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
|
|
103
|
+
} }
|
|
104
|
+
function EntityTableComponent_ng_container_5_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
105
|
+
i0.ɵɵelementContainerStart(0);
|
|
106
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_2_th_1_Template, 2, 2, "th", 17);
|
|
107
|
+
i0.ɵɵelementContainerEnd();
|
|
108
|
+
} }
|
|
109
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
110
|
+
i0.ɵɵelementStart(0, "td", 22);
|
|
111
|
+
i0.ɵɵtext(1);
|
|
112
|
+
i0.ɵɵelementEnd();
|
|
113
|
+
} if (rf & 2) {
|
|
114
|
+
const record_r31 = i0.ɵɵnextContext().$implicit;
|
|
115
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
116
|
+
const ctx_r32 = i0.ɵɵnextContext();
|
|
117
|
+
i0.ɵɵproperty("ngClass", ctx_r32.getCellClass(record_r31, column_r16));
|
|
118
|
+
i0.ɵɵadvance(1);
|
|
119
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r32.getValue(record_r31, column_r16), " ");
|
|
120
|
+
} }
|
|
121
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
|
|
122
|
+
i0.ɵɵelement(0, "img", 26);
|
|
123
|
+
i0.ɵɵpipe(1, "async");
|
|
124
|
+
i0.ɵɵpipe(2, "secureImage");
|
|
125
|
+
} if (rf & 2) {
|
|
126
|
+
const record_r31 = i0.ɵɵnextContext(2).$implicit;
|
|
127
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
128
|
+
const ctx_r37 = i0.ɵɵnextContext();
|
|
129
|
+
i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r37.getValue(record_r31, column_r16))), i0.ɵɵsanitizeUrl);
|
|
130
|
+
} }
|
|
131
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
132
|
+
i0.ɵɵelementStart(0, "span");
|
|
133
|
+
i0.ɵɵtext(1);
|
|
134
|
+
i0.ɵɵpipe(2, "translate");
|
|
135
|
+
i0.ɵɵelementEnd();
|
|
136
|
+
} if (rf & 2) {
|
|
137
|
+
i0.ɵɵadvance(1);
|
|
138
|
+
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.common.entity-table.targetHtmlUrl"), " ");
|
|
139
|
+
} }
|
|
140
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
141
|
+
i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
|
|
142
|
+
i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
|
|
143
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 24);
|
|
144
|
+
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
|
|
145
|
+
i0.ɵɵelementEnd()();
|
|
146
|
+
} if (rf & 2) {
|
|
147
|
+
const _r38 = i0.ɵɵreference(4);
|
|
148
|
+
const record_r31 = i0.ɵɵnextContext().$implicit;
|
|
149
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
150
|
+
const ctx_r34 = i0.ɵɵnextContext();
|
|
151
|
+
i0.ɵɵproperty("ngClass", ctx_r34.getCellClass(record_r31, column_r16));
|
|
152
|
+
i0.ɵɵadvance(1);
|
|
153
|
+
i0.ɵɵpropertyInterpolate("href", ctx_r34.getValue(record_r31, column_r16), i0.ɵɵsanitizeUrl);
|
|
154
|
+
i0.ɵɵadvance(1);
|
|
155
|
+
i0.ɵɵproperty("ngIf", ctx_r34.isImg(ctx_r34.getValue(record_r31, column_r16)))("ngIfElse", _r38);
|
|
156
|
+
} }
|
|
157
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
158
|
+
i0.ɵɵelementContainerStart(0);
|
|
159
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template, 2, 2, "td", 20);
|
|
160
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 21, i0.ɵɵtemplateRefExtractor);
|
|
161
|
+
i0.ɵɵelementContainerEnd();
|
|
162
|
+
} if (rf & 2) {
|
|
163
|
+
const record_r31 = ctx.$implicit;
|
|
164
|
+
const _r33 = i0.ɵɵreference(3);
|
|
165
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
166
|
+
const ctx_r30 = i0.ɵɵnextContext();
|
|
167
|
+
i0.ɵɵadvance(1);
|
|
168
|
+
i0.ɵɵproperty("ngIf", !ctx_r30.isUrl(ctx_r30.getValue(record_r31, column_r16)))("ngIfElse", _r33);
|
|
169
|
+
} }
|
|
170
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
171
|
+
i0.ɵɵelementContainerStart(0);
|
|
172
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template, 4, 2, "ng-container", 19);
|
|
173
|
+
i0.ɵɵelementContainerEnd();
|
|
174
|
+
} }
|
|
175
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
176
|
+
i0.ɵɵelement(0, "td", 29);
|
|
177
|
+
} if (rf & 2) {
|
|
178
|
+
const record_r47 = i0.ɵɵnextContext().$implicit;
|
|
179
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
180
|
+
const ctx_r48 = i0.ɵɵnextContext();
|
|
181
|
+
i0.ɵɵproperty("ngClass", ctx_r48.getCellClass(record_r47, column_r16))("innerHTML", ctx_r48.getValue(record_r47, column_r16), i0.ɵɵsanitizeHtml);
|
|
182
|
+
} }
|
|
183
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
|
|
184
|
+
i0.ɵɵelement(0, "img", 26);
|
|
185
|
+
i0.ɵɵpipe(1, "async");
|
|
186
|
+
i0.ɵɵpipe(2, "secureImage");
|
|
187
|
+
} if (rf & 2) {
|
|
188
|
+
const record_r47 = i0.ɵɵnextContext(2).$implicit;
|
|
189
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
190
|
+
const ctx_r53 = i0.ɵɵnextContext();
|
|
191
|
+
i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r53.getValue(record_r47, column_r16))), i0.ɵɵsanitizeUrl);
|
|
192
|
+
} }
|
|
193
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
194
|
+
i0.ɵɵelementStart(0, "span");
|
|
195
|
+
i0.ɵɵtext(1);
|
|
196
|
+
i0.ɵɵpipe(2, "translate");
|
|
197
|
+
i0.ɵɵelementEnd();
|
|
198
|
+
} if (rf & 2) {
|
|
199
|
+
i0.ɵɵadvance(1);
|
|
200
|
+
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
|
|
201
|
+
} }
|
|
202
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
203
|
+
i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
|
|
204
|
+
i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
|
|
205
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 24);
|
|
206
|
+
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
|
|
207
|
+
i0.ɵɵelementEnd()();
|
|
208
|
+
} if (rf & 2) {
|
|
209
|
+
const _r54 = i0.ɵɵreference(4);
|
|
210
|
+
const record_r47 = i0.ɵɵnextContext().$implicit;
|
|
211
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
212
|
+
const ctx_r50 = i0.ɵɵnextContext();
|
|
213
|
+
i0.ɵɵproperty("ngClass", ctx_r50.getCellClass(record_r47, column_r16));
|
|
214
|
+
i0.ɵɵadvance(1);
|
|
215
|
+
i0.ɵɵpropertyInterpolate("href", ctx_r50.getValue(record_r47, column_r16), i0.ɵɵsanitizeUrl);
|
|
216
|
+
i0.ɵɵadvance(1);
|
|
217
|
+
i0.ɵɵproperty("ngIf", ctx_r50.isImg(ctx_r50.getValue(record_r47, column_r16)))("ngIfElse", _r54);
|
|
218
|
+
} }
|
|
219
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
220
|
+
i0.ɵɵelementContainerStart(0);
|
|
221
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template, 1, 2, "td", 27);
|
|
222
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 28, i0.ɵɵtemplateRefExtractor);
|
|
223
|
+
i0.ɵɵelementContainerEnd();
|
|
224
|
+
} if (rf & 2) {
|
|
225
|
+
const record_r47 = ctx.$implicit;
|
|
226
|
+
const _r49 = i0.ɵɵreference(3);
|
|
227
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
228
|
+
const ctx_r46 = i0.ɵɵnextContext();
|
|
229
|
+
i0.ɵɵadvance(1);
|
|
230
|
+
i0.ɵɵproperty("ngIf", !ctx_r46.isUrl(ctx_r46.getValue(record_r47, column_r16)))("ngIfElse", _r49);
|
|
231
|
+
} }
|
|
232
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
233
|
+
i0.ɵɵelementContainerStart(0);
|
|
234
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template, 4, 2, "ng-container", 19);
|
|
235
|
+
i0.ɵɵelementContainerEnd();
|
|
236
|
+
} }
|
|
237
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
238
|
+
const _r79 = i0.ɵɵgetCurrentView();
|
|
239
|
+
i0.ɵɵelementStart(0, "div", 43);
|
|
240
|
+
i0.ɵɵelement(1, "mat-datepicker-toggle", 44);
|
|
241
|
+
i0.ɵɵelementStart(2, "input", 45);
|
|
242
|
+
i0.ɵɵlistener("dateChange", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template_input_dateChange_2_listener($event) { i0.ɵɵrestoreView(_r79); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r77 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r77.onDateChange(column_r16.name, record_r63, $event)); });
|
|
243
|
+
i0.ɵɵelementEnd();
|
|
244
|
+
i0.ɵɵelement(3, "mat-datepicker", null, 46);
|
|
245
|
+
i0.ɵɵelementEnd();
|
|
246
|
+
} if (rf & 2) {
|
|
247
|
+
const _r76 = i0.ɵɵreference(4);
|
|
248
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
249
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
250
|
+
const ctx_r67 = i0.ɵɵnextContext();
|
|
251
|
+
i0.ɵɵadvance(1);
|
|
252
|
+
i0.ɵɵproperty("for", _r76);
|
|
253
|
+
i0.ɵɵadvance(1);
|
|
254
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r67.getValue(record_r63, column_r16));
|
|
255
|
+
i0.ɵɵproperty("matDatepicker", _r76)("formControlName", column_r16.name);
|
|
256
|
+
} }
|
|
257
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template(rf, ctx) { if (rf & 1) {
|
|
258
|
+
const _r85 = i0.ɵɵgetCurrentView();
|
|
259
|
+
i0.ɵɵelementStart(0, "input", 47);
|
|
260
|
+
i0.ɵɵlistener("focus", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_focus_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onFocus($event)); })("keypress", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_keypress_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onChange($event)); })("blur", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_blur_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onBlur($event)); });
|
|
261
|
+
i0.ɵɵelementEnd();
|
|
262
|
+
} if (rf & 2) {
|
|
263
|
+
const column_r16 = i0.ɵɵnextContext(5).$implicit;
|
|
264
|
+
i0.ɵɵproperty("formControlName", column_r16.name);
|
|
265
|
+
} }
|
|
266
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template(rf, ctx) { if (rf & 1) {
|
|
267
|
+
const _r93 = i0.ɵɵgetCurrentView();
|
|
268
|
+
i0.ɵɵelementStart(0, "input", 48);
|
|
269
|
+
i0.ɵɵlistener("input", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r93); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r91 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r91.onValueChange(column_r16.name, record_r63, $event)); });
|
|
270
|
+
i0.ɵɵelementEnd();
|
|
271
|
+
} if (rf & 2) {
|
|
272
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
273
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
274
|
+
const ctx_r69 = i0.ɵɵnextContext();
|
|
275
|
+
i0.ɵɵpropertyInterpolate("step", column_r16.step);
|
|
276
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r69.getValue(record_r63, column_r16));
|
|
277
|
+
i0.ɵɵpropertyInterpolate("readonly", ctx_r69.getValidationAttributeValue(column_r16, "readonly"));
|
|
278
|
+
i0.ɵɵpropertyInterpolate("required", ctx_r69.getValidationAttributeValue(column_r16, "mandatory"));
|
|
279
|
+
i0.ɵɵpropertyInterpolate("min", ctx_r69.getValidationAttributeValue(column_r16, "minValue"));
|
|
280
|
+
i0.ɵɵpropertyInterpolate("max", ctx_r69.getValidationAttributeValue(column_r16, "maxValue"));
|
|
281
|
+
i0.ɵɵproperty("formControlName", column_r16.name);
|
|
282
|
+
} }
|
|
283
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template(rf, ctx) { if (rf & 1) {
|
|
284
|
+
const _r99 = i0.ɵɵgetCurrentView();
|
|
285
|
+
i0.ɵɵelementStart(0, "input", 49);
|
|
286
|
+
i0.ɵɵlistener("input", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r99); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r97 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r97.onValueChange(column_r16.name, record_r63, $event)); });
|
|
287
|
+
i0.ɵɵelementEnd();
|
|
288
|
+
} if (rf & 2) {
|
|
289
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
290
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
291
|
+
const ctx_r70 = i0.ɵɵnextContext();
|
|
292
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r70.getValue(record_r63, column_r16));
|
|
293
|
+
i0.ɵɵpropertyInterpolate("readonly", ctx_r70.getValidationAttributeValue(column_r16, "readonly"));
|
|
294
|
+
i0.ɵɵpropertyInterpolate("required", ctx_r70.getValidationAttributeValue(column_r16, "mandatory"));
|
|
295
|
+
i0.ɵɵproperty("formControlName", column_r16.name);
|
|
296
|
+
} }
|
|
297
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template(rf, ctx) { if (rf & 1) {
|
|
298
|
+
const _r105 = i0.ɵɵgetCurrentView();
|
|
299
|
+
i0.ɵɵelementStart(0, "mat-checkbox", 50);
|
|
300
|
+
i0.ɵɵlistener("change", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template_mat_checkbox_change_0_listener($event) { i0.ɵɵrestoreView(_r105); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r103 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r103.onBooleanValueChange(column_r16.name, record_r63, $event)); });
|
|
301
|
+
i0.ɵɵelementEnd();
|
|
302
|
+
} if (rf & 2) {
|
|
303
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
304
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
305
|
+
const ctx_r71 = i0.ɵɵnextContext();
|
|
306
|
+
i0.ɵɵproperty("formControlName", column_r16.name)("checked", ctx_r71.getValue(record_r63, column_r16));
|
|
307
|
+
} }
|
|
308
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_mat_option_1_Template(rf, ctx) { if (rf & 1) {
|
|
309
|
+
i0.ɵɵelementStart(0, "mat-option", 53);
|
|
310
|
+
i0.ɵɵtext(1);
|
|
311
|
+
i0.ɵɵelementEnd();
|
|
312
|
+
} if (rf & 2) {
|
|
313
|
+
const option_r110 = ctx.$implicit;
|
|
314
|
+
i0.ɵɵproperty("value", option_r110.id)("disabled", option_r110.disabled);
|
|
315
|
+
i0.ɵɵadvance(1);
|
|
316
|
+
i0.ɵɵtextInterpolate1(" ", option_r110.value, " ");
|
|
317
|
+
} }
|
|
318
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template(rf, ctx) { if (rf & 1) {
|
|
319
|
+
const _r113 = i0.ɵɵgetCurrentView();
|
|
320
|
+
i0.ɵɵelementStart(0, "mat-select", 51);
|
|
321
|
+
i0.ɵɵlistener("selectionChange", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template_mat_select_selectionChange_0_listener($event) { i0.ɵɵrestoreView(_r113); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r111 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r111.onSelectValueChange(column_r16.name, record_r63, $event)); });
|
|
322
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_mat_option_1_Template, 2, 3, "mat-option", 52);
|
|
323
|
+
i0.ɵɵelementEnd();
|
|
324
|
+
} if (rf & 2) {
|
|
325
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
326
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
327
|
+
const ctx_r72 = i0.ɵɵnextContext();
|
|
328
|
+
i0.ɵɵpropertyInterpolate("required", ctx_r72.getValidationAttributeValue(column_r16, "mandatory"));
|
|
329
|
+
i0.ɵɵproperty("formControlName", column_r16.name)("multiple", column_r16.multiple)("value", ctx_r72.getValue(record_r63, column_r16));
|
|
330
|
+
i0.ɵɵadvance(1);
|
|
331
|
+
i0.ɵɵproperty("ngForOf", column_r16.domainValues);
|
|
332
|
+
} }
|
|
333
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template(rf, ctx) { if (rf & 1) {
|
|
334
|
+
i0.ɵɵelement(0, "input", 54);
|
|
335
|
+
} if (rf & 2) {
|
|
336
|
+
i0.ɵɵnextContext();
|
|
337
|
+
const _r74 = i0.ɵɵreference(9);
|
|
338
|
+
const record_r63 = i0.ɵɵnextContext().$implicit;
|
|
339
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
340
|
+
const ctx_r73 = i0.ɵɵnextContext();
|
|
341
|
+
i0.ɵɵpropertyInterpolate("required", ctx_r73.getValidationAttributeValue(column_r16, "mandatory"));
|
|
342
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r73.getValue(record_r63, column_r16));
|
|
343
|
+
i0.ɵɵpropertyInterpolate("readonly", ctx_r73.getValidationAttributeValue(column_r16, "readonly"));
|
|
344
|
+
i0.ɵɵproperty("formControlName", column_r16.name)("matAutocomplete", _r74);
|
|
345
|
+
} }
|
|
346
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template(rf, ctx) { if (rf & 1) {
|
|
347
|
+
i0.ɵɵelementStart(0, "mat-option", 55);
|
|
348
|
+
i0.ɵɵtext(1);
|
|
349
|
+
i0.ɵɵelementEnd();
|
|
350
|
+
} if (rf & 2) {
|
|
351
|
+
const option_r119 = ctx.$implicit;
|
|
352
|
+
i0.ɵɵproperty("value", option_r119.id);
|
|
353
|
+
i0.ɵɵadvance(1);
|
|
354
|
+
i0.ɵɵtextInterpolate1(" ", option_r119.value, " ");
|
|
355
|
+
} }
|
|
356
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
357
|
+
const _r122 = i0.ɵɵgetCurrentView();
|
|
358
|
+
i0.ɵɵelementStart(0, "td", 32);
|
|
359
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template, 5, 4, "div", 33);
|
|
360
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template, 1, 1, "input", 34);
|
|
361
|
+
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template, 1, 7, "input", 35);
|
|
362
|
+
i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template, 1, 4, "input", 36);
|
|
363
|
+
i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template, 1, 2, "mat-checkbox", 37);
|
|
364
|
+
i0.ɵɵtemplate(6, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template, 2, 5, "mat-select", 38);
|
|
365
|
+
i0.ɵɵtemplate(7, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template, 1, 5, "input", 39);
|
|
366
|
+
i0.ɵɵelementStart(8, "mat-autocomplete", 40, 41);
|
|
367
|
+
i0.ɵɵlistener("optionSelected", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template_mat_autocomplete_optionSelected_8_listener($event) { i0.ɵɵrestoreView(_r122); const record_r63 = i0.ɵɵnextContext().$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r120 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r120.onAutocompleteValueChange(column_r16, record_r63, $event)); });
|
|
368
|
+
i0.ɵɵtemplate(10, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template, 2, 2, "mat-option", 42);
|
|
369
|
+
i0.ɵɵpipe(11, "async");
|
|
370
|
+
i0.ɵɵelementEnd()();
|
|
371
|
+
} if (rf & 2) {
|
|
372
|
+
const record_r63 = i0.ɵɵnextContext().$implicit;
|
|
373
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
374
|
+
const ctx_r64 = i0.ɵɵnextContext();
|
|
375
|
+
i0.ɵɵproperty("formGroup", ctx_r64.formGroup)("ngClass", ctx_r64.getCellClass(record_r63, column_r16));
|
|
376
|
+
i0.ɵɵadvance(1);
|
|
377
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "date");
|
|
378
|
+
i0.ɵɵadvance(1);
|
|
379
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "time");
|
|
380
|
+
i0.ɵɵadvance(1);
|
|
381
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "number");
|
|
382
|
+
i0.ɵɵadvance(1);
|
|
383
|
+
i0.ɵɵproperty("ngIf", !column_r16.type || column_r16.type === "string");
|
|
384
|
+
i0.ɵɵadvance(1);
|
|
385
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "boolean");
|
|
386
|
+
i0.ɵɵadvance(1);
|
|
387
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "list");
|
|
388
|
+
i0.ɵɵadvance(1);
|
|
389
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "autocomplete");
|
|
390
|
+
i0.ɵɵadvance(3);
|
|
391
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11, 10, ctx_r64.filteredOptions[column_r16.name]));
|
|
392
|
+
} }
|
|
393
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_td_0_Template(rf, ctx) { if (rf & 1) {
|
|
394
|
+
i0.ɵɵelement(0, "td", 29);
|
|
395
|
+
i0.ɵɵpipe(1, "sanitizeHtml");
|
|
396
|
+
} if (rf & 2) {
|
|
397
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
398
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
399
|
+
const ctx_r126 = i0.ɵɵnextContext();
|
|
400
|
+
i0.ɵɵproperty("ngClass", ctx_r126.getCellClass(record_r63, column_r16))("innerHTML", i0.ɵɵpipeBind1(1, 2, ctx_r126.getValue(record_r63, column_r16)), i0.ɵɵsanitizeHtml);
|
|
401
|
+
} }
|
|
402
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_img_2_Template(rf, ctx) { if (rf & 1) {
|
|
403
|
+
i0.ɵɵelement(0, "img", 26);
|
|
404
|
+
i0.ɵɵpipe(1, "async");
|
|
405
|
+
i0.ɵɵpipe(2, "secureImage");
|
|
406
|
+
} if (rf & 2) {
|
|
407
|
+
const record_r63 = i0.ɵɵnextContext(3).$implicit;
|
|
408
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
409
|
+
const ctx_r131 = i0.ɵɵnextContext();
|
|
410
|
+
i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r131.getValue(record_r63, column_r16))), i0.ɵɵsanitizeUrl);
|
|
411
|
+
} }
|
|
412
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
413
|
+
i0.ɵɵelementStart(0, "span");
|
|
414
|
+
i0.ɵɵtext(1);
|
|
415
|
+
i0.ɵɵpipe(2, "translate");
|
|
416
|
+
i0.ɵɵelementEnd();
|
|
417
|
+
} if (rf & 2) {
|
|
418
|
+
i0.ɵɵadvance(1);
|
|
419
|
+
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
|
|
420
|
+
} }
|
|
421
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
422
|
+
i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
|
|
423
|
+
i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
|
|
424
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_img_2_Template, 3, 5, "img", 24);
|
|
425
|
+
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
|
|
426
|
+
i0.ɵɵelementEnd()();
|
|
427
|
+
} if (rf & 2) {
|
|
428
|
+
const _r132 = i0.ɵɵreference(4);
|
|
429
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
430
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
431
|
+
const ctx_r128 = i0.ɵɵnextContext();
|
|
432
|
+
i0.ɵɵproperty("ngClass", ctx_r128.getCellClass(record_r63, column_r16));
|
|
433
|
+
i0.ɵɵadvance(1);
|
|
434
|
+
i0.ɵɵpropertyInterpolate("href", ctx_r128.getValue(record_r63, column_r16), i0.ɵɵsanitizeUrl);
|
|
435
|
+
i0.ɵɵadvance(1);
|
|
436
|
+
i0.ɵɵproperty("ngIf", ctx_r128.isImg(ctx_r128.getValue(record_r63, column_r16)))("ngIfElse", _r132);
|
|
437
|
+
} }
|
|
438
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
439
|
+
i0.ɵɵtemplate(0, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_td_0_Template, 2, 4, "td", 27);
|
|
440
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template, 5, 4, "ng-template", null, 56, i0.ɵɵtemplateRefExtractor);
|
|
441
|
+
} if (rf & 2) {
|
|
442
|
+
const _r127 = i0.ɵɵreference(2);
|
|
443
|
+
const record_r63 = i0.ɵɵnextContext().$implicit;
|
|
444
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
445
|
+
const ctx_r66 = i0.ɵɵnextContext();
|
|
446
|
+
i0.ɵɵproperty("ngIf", !ctx_r66.isUrl(ctx_r66.getValue(record_r63, column_r16)))("ngIfElse", _r127);
|
|
447
|
+
} }
|
|
448
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
449
|
+
i0.ɵɵelementContainerStart(0);
|
|
450
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template, 12, 12, "td", 30);
|
|
451
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template, 3, 2, "ng-template", null, 31, i0.ɵɵtemplateRefExtractor);
|
|
452
|
+
i0.ɵɵelementContainerEnd();
|
|
453
|
+
} if (rf & 2) {
|
|
454
|
+
const record_r63 = ctx.$implicit;
|
|
455
|
+
const _r65 = i0.ɵɵreference(3);
|
|
456
|
+
const ctx_r62 = i0.ɵɵnextContext(4);
|
|
457
|
+
i0.ɵɵadvance(1);
|
|
458
|
+
i0.ɵɵproperty("ngIf", ctx_r62.isEdition(record_r63))("ngIfElse", _r65);
|
|
459
|
+
} }
|
|
460
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
461
|
+
i0.ɵɵelementContainerStart(0);
|
|
462
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template, 4, 2, "ng-container", 19);
|
|
463
|
+
i0.ɵɵelementContainerEnd();
|
|
464
|
+
} }
|
|
465
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template(rf, ctx) { if (rf & 1) {
|
|
466
|
+
const _r147 = i0.ɵɵgetCurrentView();
|
|
467
|
+
i0.ɵɵelementStart(0, "mat-icon", 60);
|
|
468
|
+
i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template_mat_icon_click_0_listener($event) { i0.ɵɵrestoreView(_r147); const column_r16 = i0.ɵɵnextContext(4).$implicit; return i0.ɵɵresetView(column_r16.onClick($event)); });
|
|
469
|
+
i0.ɵɵelementEnd();
|
|
470
|
+
} if (rf & 2) {
|
|
471
|
+
const record_r142 = i0.ɵɵnextContext().$implicit;
|
|
472
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
473
|
+
const ctx_r143 = i0.ɵɵnextContext();
|
|
474
|
+
i0.ɵɵpropertyInterpolate("svgIcon", ctx_r143.getValue(record_r142, column_r16) || column_r16.icon);
|
|
475
|
+
} }
|
|
476
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_2_Template(rf, ctx) { if (rf & 1) {
|
|
477
|
+
i0.ɵɵelement(0, "mat-icon", 61);
|
|
478
|
+
} if (rf & 2) {
|
|
479
|
+
const record_r142 = i0.ɵɵnextContext().$implicit;
|
|
480
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
481
|
+
const ctx_r144 = i0.ɵɵnextContext();
|
|
482
|
+
i0.ɵɵpropertyInterpolate("svgIcon", ctx_r144.getValue(record_r142, column_r16) || column_r16.icon);
|
|
483
|
+
} }
|
|
484
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
485
|
+
i0.ɵɵelementStart(0, "td", 22);
|
|
486
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template, 1, 1, "mat-icon", 58);
|
|
487
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_2_Template, 1, 1, "mat-icon", 59);
|
|
488
|
+
i0.ɵɵelementEnd();
|
|
489
|
+
} if (rf & 2) {
|
|
490
|
+
const record_r142 = ctx.$implicit;
|
|
491
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
492
|
+
const ctx_r141 = i0.ɵɵnextContext();
|
|
493
|
+
i0.ɵɵproperty("ngClass", ctx_r141.getCellClass(record_r142, column_r16));
|
|
494
|
+
i0.ɵɵadvance(1);
|
|
495
|
+
i0.ɵɵproperty("ngIf", column_r16.onClick);
|
|
496
|
+
i0.ɵɵadvance(1);
|
|
497
|
+
i0.ɵɵproperty("ngIf", !column_r16.onClick);
|
|
498
|
+
} }
|
|
499
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
500
|
+
i0.ɵɵelementContainerStart(0);
|
|
501
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template, 3, 3, "td", 57);
|
|
502
|
+
i0.ɵɵelementContainerEnd();
|
|
503
|
+
} }
|
|
504
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template(rf, ctx) { if (rf & 1) {
|
|
505
|
+
const _r162 = i0.ɵɵgetCurrentView();
|
|
506
|
+
i0.ɵɵelementStart(0, "button", 65);
|
|
507
|
+
i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r162); const button_r156 = i0.ɵɵnextContext(2).$implicit; const record_r154 = i0.ɵɵnextContext().$implicit; const ctx_r160 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r160.onButtonClick(button_r156.click, record_r154)); });
|
|
508
|
+
i0.ɵɵelement(1, "mat-icon", 61);
|
|
509
|
+
i0.ɵɵelementEnd();
|
|
510
|
+
} if (rf & 2) {
|
|
511
|
+
const button_r156 = i0.ɵɵnextContext(2).$implicit;
|
|
512
|
+
i0.ɵɵproperty("color", button_r156.color)("disabled", button_r156.disabled);
|
|
513
|
+
i0.ɵɵadvance(1);
|
|
514
|
+
i0.ɵɵpropertyInterpolate("svgIcon", button_r156.icon);
|
|
515
|
+
} }
|
|
516
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template(rf, ctx) { if (rf & 1) {
|
|
517
|
+
const _r167 = i0.ɵɵgetCurrentView();
|
|
518
|
+
i0.ɵɵelementStart(0, "button", 66);
|
|
519
|
+
i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r167); const button_r156 = i0.ɵɵnextContext(2).$implicit; const record_r154 = i0.ɵɵnextContext().$implicit; const ctx_r165 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r165.onButtonClick(button_r156.click, record_r154)); });
|
|
520
|
+
i0.ɵɵelement(1, "mat-icon", 61);
|
|
521
|
+
i0.ɵɵelementEnd();
|
|
522
|
+
} if (rf & 2) {
|
|
523
|
+
const button_r156 = i0.ɵɵnextContext(2).$implicit;
|
|
524
|
+
i0.ɵɵproperty("color", button_r156.color)("disabled", button_r156.disabled);
|
|
525
|
+
i0.ɵɵadvance(1);
|
|
526
|
+
i0.ɵɵpropertyInterpolate("svgIcon", button_r156.icon);
|
|
527
|
+
} }
|
|
528
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
529
|
+
i0.ɵɵelementContainerStart(0);
|
|
530
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template, 2, 3, "button", 63);
|
|
531
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template, 2, 3, "button", 64);
|
|
532
|
+
i0.ɵɵelementContainerEnd();
|
|
533
|
+
} if (rf & 2) {
|
|
534
|
+
const button_r156 = i0.ɵɵnextContext().$implicit;
|
|
535
|
+
i0.ɵɵadvance(1);
|
|
536
|
+
i0.ɵɵproperty("ngIf", button_r156.style === "mat-icon-button");
|
|
537
|
+
i0.ɵɵadvance(1);
|
|
538
|
+
i0.ɵɵproperty("ngIf", button_r156.style !== "mat-icon-button");
|
|
539
|
+
} }
|
|
540
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
541
|
+
i0.ɵɵelementStart(0, "span");
|
|
542
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template, 3, 2, "ng-container", 10);
|
|
543
|
+
i0.ɵɵelementEnd();
|
|
544
|
+
} if (rf & 2) {
|
|
545
|
+
const button_r156 = ctx.$implicit;
|
|
546
|
+
const record_r154 = i0.ɵɵnextContext().$implicit;
|
|
547
|
+
const ctx_r155 = i0.ɵɵnextContext(4);
|
|
548
|
+
i0.ɵɵadvance(1);
|
|
549
|
+
i0.ɵɵproperty("ngIf", ctx_r155.isEdition(record_r154) === button_r156.editMode || button_r156.editMode === undefined);
|
|
550
|
+
} }
|
|
551
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
552
|
+
i0.ɵɵelementContainerStart(0);
|
|
553
|
+
i0.ɵɵelementStart(1, "td", 22);
|
|
554
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template, 2, 1, "span", 62);
|
|
555
|
+
i0.ɵɵelementEnd();
|
|
556
|
+
i0.ɵɵelementContainerEnd();
|
|
557
|
+
} if (rf & 2) {
|
|
558
|
+
const record_r154 = ctx.$implicit;
|
|
559
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
560
|
+
const ctx_r153 = i0.ɵɵnextContext();
|
|
561
|
+
i0.ɵɵadvance(1);
|
|
562
|
+
i0.ɵɵproperty("ngClass", ctx_r153.getCellClass(record_r154, column_r16));
|
|
563
|
+
i0.ɵɵadvance(1);
|
|
564
|
+
i0.ɵɵproperty("ngForOf", ctx_r153.getValue(record_r154, column_r16));
|
|
565
|
+
} }
|
|
566
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
567
|
+
i0.ɵɵelementContainerStart(0);
|
|
568
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template, 3, 2, "ng-container", 19);
|
|
569
|
+
i0.ɵɵelementContainerEnd();
|
|
570
|
+
} }
|
|
571
|
+
function EntityTableComponent_ng_container_5_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
572
|
+
i0.ɵɵelementContainerStart(0);
|
|
573
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template, 2, 0, "ng-container", 10);
|
|
574
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template, 2, 0, "ng-container", 10);
|
|
575
|
+
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template, 2, 0, "ng-container", 10);
|
|
576
|
+
i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template, 2, 0, "ng-container", 10);
|
|
577
|
+
i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template, 2, 0, "ng-container", 10);
|
|
578
|
+
i0.ɵɵelementContainerEnd();
|
|
579
|
+
} if (rf & 2) {
|
|
580
|
+
const columnRenderer_r24 = ctx.ngIf;
|
|
581
|
+
const ctx_r19 = i0.ɵɵnextContext(2);
|
|
582
|
+
i0.ɵɵadvance(1);
|
|
583
|
+
i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Default);
|
|
584
|
+
i0.ɵɵadvance(1);
|
|
585
|
+
i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.HTML);
|
|
586
|
+
i0.ɵɵadvance(1);
|
|
587
|
+
i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.UnsanitizedHTML);
|
|
588
|
+
i0.ɵɵadvance(1);
|
|
589
|
+
i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Icon);
|
|
590
|
+
i0.ɵɵadvance(1);
|
|
591
|
+
i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.ButtonGroup);
|
|
592
|
+
} }
|
|
593
|
+
function EntityTableComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
594
|
+
i0.ɵɵelementContainerStart(0, 14);
|
|
595
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_Template, 2, 0, "ng-container", 10);
|
|
596
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_2_Template, 2, 0, "ng-container", 10);
|
|
597
|
+
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_Template, 6, 5, "ng-container", 10);
|
|
598
|
+
i0.ɵɵelementContainerEnd();
|
|
599
|
+
} if (rf & 2) {
|
|
600
|
+
const column_r16 = ctx.$implicit;
|
|
601
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
602
|
+
i0.ɵɵproperty("matColumnDef", column_r16.name);
|
|
603
|
+
i0.ɵɵadvance(1);
|
|
604
|
+
i0.ɵɵproperty("ngIf", ctx_r2.columnIsSortable(column_r16));
|
|
605
|
+
i0.ɵɵadvance(1);
|
|
606
|
+
i0.ɵɵproperty("ngIf", !ctx_r2.columnIsSortable(column_r16));
|
|
607
|
+
i0.ɵɵadvance(1);
|
|
608
|
+
i0.ɵɵproperty("ngIf", ctx_r2.getColumnRenderer(column_r16));
|
|
609
|
+
} }
|
|
610
|
+
function EntityTableComponent_tr_6_Template(rf, ctx) { if (rf & 1) {
|
|
611
|
+
i0.ɵɵelement(0, "tr", 67);
|
|
612
|
+
} if (rf & 2) {
|
|
613
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
614
|
+
i0.ɵɵproperty("ngClass", ctx_r3.getHeaderClass());
|
|
615
|
+
} }
|
|
616
|
+
function EntityTableComponent_tr_7_Template(rf, ctx) { if (rf & 1) {
|
|
617
|
+
const _r175 = i0.ɵɵgetCurrentView();
|
|
618
|
+
i0.ɵɵelementStart(0, "tr", 68);
|
|
619
|
+
i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r175); const record_r173 = restoredCtx.$implicit; const ctx_r174 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r174.onRowSelect(record_r173)); })("click", function EntityTableComponent_tr_7_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r175); const record_r173 = restoredCtx.$implicit; const ctx_r176 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r176.onRowClick(record_r173)); });
|
|
620
|
+
i0.ɵɵelementEnd();
|
|
621
|
+
} if (rf & 2) {
|
|
622
|
+
const record_r173 = ctx.$implicit;
|
|
623
|
+
const ctx_r4 = i0.ɵɵnextContext();
|
|
624
|
+
i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(record_r173))("selection", ctx_r4.selection)("selected", ctx_r4.rowIsSelected(record_r173));
|
|
625
|
+
} }
|
|
626
|
+
function EntityTableComponent_igo_entity_table_paginator_8_Template(rf, ctx) { if (rf & 1) {
|
|
627
|
+
const _r178 = i0.ɵɵgetCurrentView();
|
|
628
|
+
i0.ɵɵelementStart(0, "igo-entity-table-paginator", 69);
|
|
629
|
+
i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(_r178); const ctx_r177 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r177.paginatorChange($event)); });
|
|
630
|
+
i0.ɵɵelementEnd();
|
|
631
|
+
} if (rf & 2) {
|
|
632
|
+
const ctx_r5 = i0.ɵɵnextContext();
|
|
633
|
+
i0.ɵɵproperty("store", ctx_r5.store)("paginatorOptions", ctx_r5.paginatorOptions)("entitySortChange$", ctx_r5.entitySortChange$);
|
|
634
|
+
} }
|
|
635
|
+
const _c0 = function (a0) { return { height: a0 }; };
|
|
636
|
+
export class EntityTableComponent {
|
|
637
|
+
cdRef;
|
|
638
|
+
formBuilder;
|
|
639
|
+
_focusMonitor;
|
|
640
|
+
_elementRef;
|
|
641
|
+
ngControl;
|
|
642
|
+
_parentForm;
|
|
643
|
+
_controlName;
|
|
644
|
+
_defaultErrorStateMatcher;
|
|
645
|
+
dateAdapter;
|
|
646
|
+
entitySortChange$ = new BehaviorSubject(false);
|
|
647
|
+
formGroup = new UntypedFormGroup({});
|
|
648
|
+
filteredOptions = {};
|
|
649
|
+
/**
|
|
650
|
+
* Reference to the column renderer types
|
|
651
|
+
* @internal
|
|
652
|
+
*/
|
|
653
|
+
entityTableColumnRenderer = EntityTableColumnRenderer;
|
|
654
|
+
/**
|
|
655
|
+
* Reference to the selection's state
|
|
656
|
+
* @internal
|
|
657
|
+
*/
|
|
658
|
+
entityTableSelectionState = EntityTableSelectionState;
|
|
659
|
+
/**
|
|
660
|
+
* Observable of the selection,s state
|
|
661
|
+
* @internal
|
|
662
|
+
*/
|
|
663
|
+
selectionState$ = new BehaviorSubject(undefined);
|
|
664
|
+
/**
|
|
665
|
+
* Subscription to the store's selection
|
|
666
|
+
*/
|
|
667
|
+
selection$$;
|
|
668
|
+
/**
|
|
669
|
+
* Subscription to the dataSource
|
|
670
|
+
*/
|
|
671
|
+
dataSource$$;
|
|
672
|
+
/**
|
|
673
|
+
* The last record checked. Useful for selecting
|
|
674
|
+
* multiple records by holding the shift key and checking
|
|
675
|
+
* checkboxes.
|
|
676
|
+
*/
|
|
677
|
+
lastRecordCheckedKey;
|
|
678
|
+
/**
|
|
679
|
+
* Entity store
|
|
680
|
+
*/
|
|
681
|
+
store;
|
|
682
|
+
/**
|
|
683
|
+
* Table paginator
|
|
684
|
+
*/
|
|
685
|
+
set paginator(value) {
|
|
686
|
+
this._paginator = value;
|
|
687
|
+
this.dataSource.paginator = value;
|
|
688
|
+
}
|
|
689
|
+
get paginator() {
|
|
690
|
+
return this._paginator;
|
|
691
|
+
}
|
|
692
|
+
_paginator;
|
|
693
|
+
/**
|
|
694
|
+
* Table template
|
|
695
|
+
*/
|
|
696
|
+
template;
|
|
697
|
+
/**
|
|
698
|
+
* Scroll behavior on selection
|
|
699
|
+
*/
|
|
700
|
+
scrollBehavior = EntityTableScrollBehavior.Auto;
|
|
701
|
+
/**
|
|
702
|
+
* Whether nulls should be first when sorting
|
|
703
|
+
*/
|
|
704
|
+
sortNullsFirst = false;
|
|
705
|
+
/**
|
|
706
|
+
* Show the table paginator or not. False by default.
|
|
707
|
+
*/
|
|
708
|
+
withPaginator = false;
|
|
709
|
+
/**
|
|
710
|
+
* Paginator options
|
|
711
|
+
*/
|
|
712
|
+
paginatorOptions;
|
|
713
|
+
/**
|
|
714
|
+
* Event emitted when an entity (row) is clicked
|
|
715
|
+
*/
|
|
716
|
+
entityClick = new EventEmitter();
|
|
717
|
+
/**
|
|
718
|
+
* Event emitted when an entity (row) is selected
|
|
719
|
+
*/
|
|
720
|
+
entitySelectChange = new EventEmitter();
|
|
721
|
+
/**
|
|
722
|
+
* Event emitted when the table sort is changed.
|
|
723
|
+
*/
|
|
724
|
+
entitySortChange = new EventEmitter(undefined);
|
|
725
|
+
/**
|
|
726
|
+
* Table headers
|
|
727
|
+
* @internal
|
|
728
|
+
*/
|
|
729
|
+
get headers() {
|
|
730
|
+
let columns = this.template.columns
|
|
731
|
+
.filter((column) => column.visible !== false)
|
|
732
|
+
.map((column) => column.name);
|
|
733
|
+
if (this.selectionCheckbox === true) {
|
|
734
|
+
columns = ['selectionCheckbox'].concat(columns);
|
|
735
|
+
}
|
|
736
|
+
return columns;
|
|
737
|
+
}
|
|
738
|
+
/**
|
|
739
|
+
* Data source consumable by the underlying material table
|
|
740
|
+
* @internal
|
|
741
|
+
*/
|
|
742
|
+
dataSource = new MatTableDataSource();
|
|
743
|
+
/**
|
|
744
|
+
* Whether selection is supported
|
|
745
|
+
* @internal
|
|
746
|
+
*/
|
|
747
|
+
get selection() {
|
|
748
|
+
return this.template.selection || false;
|
|
749
|
+
}
|
|
750
|
+
/**
|
|
751
|
+
* Whether a selection checkbox should be displayed
|
|
752
|
+
* @internal
|
|
753
|
+
*/
|
|
754
|
+
get selectionCheckbox() {
|
|
755
|
+
return this.template.selectionCheckbox || false;
|
|
756
|
+
}
|
|
757
|
+
/**
|
|
758
|
+
* Whether selection many entities should eb supported
|
|
759
|
+
* @internal
|
|
760
|
+
*/
|
|
761
|
+
get selectMany() {
|
|
762
|
+
return this.template.selectMany || false;
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Whether selection many entities should eb supported
|
|
766
|
+
* @internal
|
|
767
|
+
*/
|
|
768
|
+
get fixedHeader() {
|
|
769
|
+
return this.template.fixedHeader === undefined
|
|
770
|
+
? true
|
|
771
|
+
: this.template.fixedHeader;
|
|
772
|
+
}
|
|
773
|
+
get tableHeight() {
|
|
774
|
+
return this.template.tableHeight ? this.template.tableHeight : 'auto';
|
|
775
|
+
}
|
|
776
|
+
constructor(cdRef, formBuilder, _focusMonitor, _elementRef, ngControl, _parentForm, _controlName, _defaultErrorStateMatcher, dateAdapter) {
|
|
777
|
+
this.cdRef = cdRef;
|
|
778
|
+
this.formBuilder = formBuilder;
|
|
779
|
+
this._focusMonitor = _focusMonitor;
|
|
780
|
+
this._elementRef = _elementRef;
|
|
781
|
+
this.ngControl = ngControl;
|
|
782
|
+
this._parentForm = _parentForm;
|
|
783
|
+
this._controlName = _controlName;
|
|
784
|
+
this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
|
|
785
|
+
this.dateAdapter = dateAdapter;
|
|
786
|
+
this.dateAdapter.setLocale('fr-CA');
|
|
787
|
+
}
|
|
788
|
+
/**
|
|
789
|
+
* Track the selection state to properly display the selection checkboxes
|
|
790
|
+
* @internal
|
|
791
|
+
*/
|
|
792
|
+
ngOnInit() {
|
|
793
|
+
this.handleDatasource();
|
|
794
|
+
this.dataSource.paginator = this.paginator;
|
|
795
|
+
}
|
|
796
|
+
/**
|
|
797
|
+
* @internal
|
|
798
|
+
*/
|
|
799
|
+
ngOnChanges(changes) {
|
|
800
|
+
const store = changes.store;
|
|
801
|
+
if (store && store.currentValue !== store.previousValue) {
|
|
802
|
+
this.handleDatasource();
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
/**
|
|
806
|
+
* Process text or number value change (edition)
|
|
807
|
+
*/
|
|
808
|
+
onValueChange(column, record, event) {
|
|
809
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column);
|
|
810
|
+
record.entity.properties[key] = event.target.value;
|
|
811
|
+
}
|
|
812
|
+
/**
|
|
813
|
+
* Process boolean value change (edition)
|
|
814
|
+
*/
|
|
815
|
+
onBooleanValueChange(column, record, event) {
|
|
816
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column);
|
|
817
|
+
record.entity.properties[key] = event.checked;
|
|
818
|
+
}
|
|
819
|
+
/**
|
|
820
|
+
* Process select value change (edition)
|
|
821
|
+
*/
|
|
822
|
+
onSelectValueChange(column, record, event) {
|
|
823
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column);
|
|
824
|
+
record.entity.properties[key] = event.value;
|
|
825
|
+
}
|
|
826
|
+
/**
|
|
827
|
+
* Process autocomplete value change (edition)
|
|
828
|
+
*/
|
|
829
|
+
onAutocompleteValueChange(column, record, event) {
|
|
830
|
+
this.formGroup.controls[column.name].setValue(event.option.viewValue);
|
|
831
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column.name);
|
|
832
|
+
record.entity.properties[key] = event.option.value;
|
|
833
|
+
}
|
|
834
|
+
/**
|
|
835
|
+
* Process date value change (edition)
|
|
836
|
+
*/
|
|
837
|
+
onDateChange(column, record, event) {
|
|
838
|
+
const format = 'YYYY-MM-DD';
|
|
839
|
+
const value = moment(event.value).format(format);
|
|
840
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column);
|
|
841
|
+
record.entity.properties[key] = value;
|
|
842
|
+
}
|
|
843
|
+
/**
|
|
844
|
+
* Enable edition mode for one row
|
|
845
|
+
* More than one row can be edited at the same time
|
|
846
|
+
*/
|
|
847
|
+
enableEdit(record) {
|
|
848
|
+
const item = record.entity.properties || record.entity;
|
|
849
|
+
this.template.columns.forEach((column) => {
|
|
850
|
+
column.title =
|
|
851
|
+
column.validation?.mandatory && !column.title.includes('*')
|
|
852
|
+
? column.title + ' *'
|
|
853
|
+
: column.title;
|
|
854
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column.name);
|
|
855
|
+
if (column.type === 'boolean') {
|
|
856
|
+
if (!item[key] || item[key] === null) {
|
|
857
|
+
item[key] = false;
|
|
858
|
+
}
|
|
859
|
+
else if (typeof item[key] === 'string') {
|
|
860
|
+
item[key] = JSON.parse(item[key].toLowerCase());
|
|
861
|
+
}
|
|
862
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
|
|
863
|
+
}
|
|
864
|
+
else if (column.type === 'list') {
|
|
865
|
+
if (column.multiple) {
|
|
866
|
+
this.formGroup.setControl(column.name, this.formBuilder.control([item[key]]));
|
|
867
|
+
}
|
|
868
|
+
else {
|
|
869
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
|
|
870
|
+
typeof item[key] === 'string'
|
|
871
|
+
? this.formGroup.controls[column.name].setValue(parseInt(item[key]))
|
|
872
|
+
: this.formGroup.controls[column.name].setValue(item[key]);
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
else if (column.type === 'autocomplete') {
|
|
876
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
|
|
877
|
+
this.filteredOptions[column.name] = new Observable();
|
|
878
|
+
this.filteredOptions[column.name] = this.formGroup.controls[column.name].valueChanges.pipe(map((value) => {
|
|
879
|
+
if (value?.length) {
|
|
880
|
+
return column.domainValues?.filter((option) => {
|
|
881
|
+
const filterNormalized = value
|
|
882
|
+
? value
|
|
883
|
+
.toLowerCase()
|
|
884
|
+
.normalize('NFD')
|
|
885
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
886
|
+
: '';
|
|
887
|
+
const featureNameNormalized = option.value
|
|
888
|
+
.toLowerCase()
|
|
889
|
+
.normalize('NFD')
|
|
890
|
+
.replace(/[\u0300-\u036f]/g, '');
|
|
891
|
+
return featureNameNormalized.includes(filterNormalized);
|
|
892
|
+
});
|
|
893
|
+
}
|
|
894
|
+
}));
|
|
895
|
+
let formControlValue = item[key];
|
|
896
|
+
column.domainValues.forEach((option) => {
|
|
897
|
+
if (typeof formControlValue === 'string' &&
|
|
898
|
+
StringUtils.isValidNumber(formControlValue) &&
|
|
899
|
+
!StringUtils.isOctalNumber(formControlValue)) {
|
|
900
|
+
formControlValue = parseInt(formControlValue);
|
|
901
|
+
}
|
|
902
|
+
if (option.value === formControlValue ||
|
|
903
|
+
option.id === formControlValue) {
|
|
904
|
+
formControlValue = option.value;
|
|
905
|
+
}
|
|
906
|
+
});
|
|
907
|
+
this.formGroup.controls[column.name].setValue(formControlValue);
|
|
908
|
+
if (this.isEdition(record) && column.linkColumnForce) {
|
|
909
|
+
const entity = record.entity;
|
|
910
|
+
this.formGroup.controls[column.name].setValue(entity?.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)]);
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
else if (column.type === 'date') {
|
|
914
|
+
if (column.visible !== false) {
|
|
915
|
+
if (item[key]) {
|
|
916
|
+
let date = moment(item[key]);
|
|
917
|
+
item[key] = date.utc().format('YYYY-MM-DD');
|
|
918
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
|
|
919
|
+
}
|
|
920
|
+
else {
|
|
921
|
+
const newKey = this.getColumnKeyWithoutPropertiesTag(column.name);
|
|
922
|
+
record.entity.properties[newKey] = null;
|
|
923
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(null));
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
else {
|
|
928
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
|
|
929
|
+
}
|
|
930
|
+
if (this.formGroup.controls[column.name] &&
|
|
931
|
+
this.getValidationAttributeValue(column, 'readonly')) {
|
|
932
|
+
this.formGroup.controls[column.name].disable();
|
|
933
|
+
}
|
|
934
|
+
});
|
|
935
|
+
}
|
|
936
|
+
handleDatasource() {
|
|
937
|
+
this.unsubscribeStore();
|
|
938
|
+
this.selection$$ = this.store.stateView
|
|
939
|
+
.manyBy$((record) => record.state.selected === true)
|
|
940
|
+
.subscribe((records) => {
|
|
941
|
+
const firstSelected = records[0];
|
|
942
|
+
const firstSelectedStateviewPosition = this.store.stateView
|
|
943
|
+
.all()
|
|
944
|
+
.indexOf(firstSelected);
|
|
945
|
+
const pageMax = this.paginator
|
|
946
|
+
? this.paginator.pageSize * (this.paginator.pageIndex + 1)
|
|
947
|
+
: 0;
|
|
948
|
+
const pageMin = this.paginator ? pageMax - this.paginator.pageSize : 0;
|
|
949
|
+
if (this.paginator &&
|
|
950
|
+
(firstSelectedStateviewPosition < pageMin ||
|
|
951
|
+
firstSelectedStateviewPosition >= pageMax)) {
|
|
952
|
+
const pageToReach = Math.floor(firstSelectedStateviewPosition / this.paginator.pageSize);
|
|
953
|
+
this.dataSource.paginator.pageIndex = pageToReach;
|
|
954
|
+
}
|
|
955
|
+
this.selectionState$.next(this.computeSelectionState(records));
|
|
956
|
+
});
|
|
957
|
+
this.dataSource$$ = this.store.stateView.all$().subscribe((all) => {
|
|
958
|
+
if (all[0]) {
|
|
959
|
+
this.enableEdit(all[0]);
|
|
960
|
+
}
|
|
961
|
+
this.dataSource.data = all;
|
|
962
|
+
});
|
|
963
|
+
}
|
|
964
|
+
/**
|
|
965
|
+
* Unbind the store watcher
|
|
966
|
+
* @internal
|
|
967
|
+
*/
|
|
968
|
+
ngOnDestroy() {
|
|
969
|
+
this.unsubscribeStore();
|
|
970
|
+
}
|
|
971
|
+
unsubscribeStore() {
|
|
972
|
+
if (this.selection$$) {
|
|
973
|
+
this.selection$$.unsubscribe();
|
|
974
|
+
}
|
|
975
|
+
if (this.dataSource$$) {
|
|
976
|
+
this.dataSource$$.unsubscribe();
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
/**
|
|
980
|
+
* Trackby function
|
|
981
|
+
* @param record Record
|
|
982
|
+
* @param index Record index
|
|
983
|
+
* @internal
|
|
984
|
+
*/
|
|
985
|
+
getTrackByFunction() {
|
|
986
|
+
return (index, record) => {
|
|
987
|
+
return record.ref;
|
|
988
|
+
};
|
|
989
|
+
}
|
|
990
|
+
/**
|
|
991
|
+
* Trigger a refresh of thre table. This can be useful when
|
|
992
|
+
* the data source doesn't emit a new value but for some reason
|
|
993
|
+
* the records need an update.
|
|
994
|
+
* @internal
|
|
995
|
+
*/
|
|
996
|
+
refresh() {
|
|
997
|
+
this.cdRef.detectChanges();
|
|
998
|
+
}
|
|
999
|
+
paginatorChange(event) {
|
|
1000
|
+
this.paginator = event;
|
|
1001
|
+
}
|
|
1002
|
+
/**
|
|
1003
|
+
* On sort, sort the store
|
|
1004
|
+
* @param event Sort event
|
|
1005
|
+
* @internal
|
|
1006
|
+
*/
|
|
1007
|
+
onSort(event) {
|
|
1008
|
+
const direction = event.direction;
|
|
1009
|
+
const column = this.template.columns.find((c) => c.name === event.active);
|
|
1010
|
+
if (direction === 'asc' || direction === 'desc') {
|
|
1011
|
+
this.store.stateView.sort({
|
|
1012
|
+
valueAccessor: (record) => this.getValue(record, column),
|
|
1013
|
+
direction,
|
|
1014
|
+
nullsFirst: this.sortNullsFirst
|
|
1015
|
+
});
|
|
1016
|
+
this.entitySortChange.emit({ column, direction });
|
|
1017
|
+
this.entitySortChange$.next(true);
|
|
1018
|
+
}
|
|
1019
|
+
else {
|
|
1020
|
+
this.store.stateView.sort(undefined);
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
/**
|
|
1024
|
+
* When an entity is clicked, emit an event
|
|
1025
|
+
* @param record Record
|
|
1026
|
+
* @internal
|
|
1027
|
+
*/
|
|
1028
|
+
onRowClick(record) {
|
|
1029
|
+
this.lastRecordCheckedKey = this.store.stateView.getKey(record);
|
|
1030
|
+
this.entityClick.emit(record.entity);
|
|
1031
|
+
}
|
|
1032
|
+
/**
|
|
1033
|
+
* When an entity is selected, select it in the store and emit an event. Even if
|
|
1034
|
+
* "many" is set to true, this method always select a single, exclusive row. Selecting
|
|
1035
|
+
* multiple rows should be achieved by using the checkboxes.
|
|
1036
|
+
* @param record Record
|
|
1037
|
+
* @internal
|
|
1038
|
+
*/
|
|
1039
|
+
onRowSelect(record) {
|
|
1040
|
+
if (this.selection === false) {
|
|
1041
|
+
return;
|
|
1042
|
+
}
|
|
1043
|
+
const entity = record.entity;
|
|
1044
|
+
this.store.state.update(entity, { selected: true }, true);
|
|
1045
|
+
this.entitySelectChange.emit({ added: [entity] });
|
|
1046
|
+
}
|
|
1047
|
+
/**
|
|
1048
|
+
* Select or unselect all rows at once. On select, emit an event.
|
|
1049
|
+
* @param toggle Select or unselect
|
|
1050
|
+
* @internal
|
|
1051
|
+
*/
|
|
1052
|
+
onToggleRows(toggle) {
|
|
1053
|
+
if (this.selection === false) {
|
|
1054
|
+
return;
|
|
1055
|
+
}
|
|
1056
|
+
this.store.state.updateAll({ selected: toggle });
|
|
1057
|
+
if (toggle === true) {
|
|
1058
|
+
const entities = this.store.stateView
|
|
1059
|
+
.all()
|
|
1060
|
+
.map((record) => record.entity);
|
|
1061
|
+
this.entitySelectChange.emit({ added: [entities] });
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
/**
|
|
1065
|
+
* When an entity is toggled, select or unselect it in the store. On select,
|
|
1066
|
+
* emit an event.
|
|
1067
|
+
* @param toggle Select or unselect
|
|
1068
|
+
* @param record Record
|
|
1069
|
+
* @internal
|
|
1070
|
+
*/
|
|
1071
|
+
onToggleRow(toggle, record) {
|
|
1072
|
+
if (this.selection === false) {
|
|
1073
|
+
return;
|
|
1074
|
+
}
|
|
1075
|
+
const entity = record.entity;
|
|
1076
|
+
const exclusive = toggle === true && !this.selectMany;
|
|
1077
|
+
this.store.state.update(entity, { selected: toggle }, exclusive);
|
|
1078
|
+
if (toggle === true) {
|
|
1079
|
+
this.entitySelectChange.emit({ added: [entity] });
|
|
1080
|
+
}
|
|
1081
|
+
this.lastRecordCheckedKey = this.store.stateView.getKey(record);
|
|
1082
|
+
}
|
|
1083
|
+
/**
|
|
1084
|
+
* When an entity is toggled, select or unselect it in the store. On select,
|
|
1085
|
+
* emit an event.
|
|
1086
|
+
* @param toggle Select or unselect
|
|
1087
|
+
* @param record Record
|
|
1088
|
+
* @internal
|
|
1089
|
+
*/
|
|
1090
|
+
onShiftToggleRow(toggle, record, event) {
|
|
1091
|
+
if (this.selection === false) {
|
|
1092
|
+
return;
|
|
1093
|
+
}
|
|
1094
|
+
if (this.selectMany === false || this.lastRecordCheckedKey === undefined) {
|
|
1095
|
+
this.onToggleRow(toggle, record);
|
|
1096
|
+
return;
|
|
1097
|
+
}
|
|
1098
|
+
// This is a workaround mat checkbox wrong behavior
|
|
1099
|
+
// when the shift key is held.
|
|
1100
|
+
// See https://github.com/angular/components/issues/6232
|
|
1101
|
+
const range = window.document.createRange();
|
|
1102
|
+
range.selectNode(event.target);
|
|
1103
|
+
window.getSelection().removeAllRanges();
|
|
1104
|
+
window.getSelection().addRange(range);
|
|
1105
|
+
event.stopImmediatePropagation();
|
|
1106
|
+
const records = this.store.stateView.all();
|
|
1107
|
+
const recordIndex = records.indexOf(record);
|
|
1108
|
+
const lastRecordChecked = this.store.stateView.get(this.lastRecordCheckedKey);
|
|
1109
|
+
const lastRecordIndex = records.indexOf(lastRecordChecked);
|
|
1110
|
+
const indexes = [recordIndex, lastRecordIndex];
|
|
1111
|
+
const selectRecords = records.slice(Math.min(...indexes), Math.max(...indexes) + 1);
|
|
1112
|
+
const entities = selectRecords.map((_record) => _record.entity);
|
|
1113
|
+
this.store.state.updateMany(entities, { selected: toggle });
|
|
1114
|
+
if (toggle === true) {
|
|
1115
|
+
this.entitySelectChange.emit({ added: entities });
|
|
1116
|
+
}
|
|
1117
|
+
this.lastRecordCheckedKey = this.store.stateView.getKey(record);
|
|
1118
|
+
}
|
|
1119
|
+
/**
|
|
1120
|
+
* Compute the selection state
|
|
1121
|
+
* @returns Whether all, some or no rows are selected
|
|
1122
|
+
* @internal
|
|
1123
|
+
*/
|
|
1124
|
+
computeSelectionState(selectedRecords) {
|
|
1125
|
+
const states = EntityTableSelectionState;
|
|
1126
|
+
const selectionCount = selectedRecords.length;
|
|
1127
|
+
return selectionCount === 0
|
|
1128
|
+
? states.None
|
|
1129
|
+
: selectionCount === this.store.stateView.count
|
|
1130
|
+
? states.All
|
|
1131
|
+
: states.Some;
|
|
1132
|
+
}
|
|
1133
|
+
/**
|
|
1134
|
+
* Whether a column is sortable
|
|
1135
|
+
* @param column Column
|
|
1136
|
+
* @returns True if a column is sortable
|
|
1137
|
+
* @internal
|
|
1138
|
+
*/
|
|
1139
|
+
columnIsSortable(column) {
|
|
1140
|
+
let sortable = column.sort;
|
|
1141
|
+
if (sortable === undefined) {
|
|
1142
|
+
sortable = this.template.sort === undefined ? false : this.template.sort;
|
|
1143
|
+
}
|
|
1144
|
+
return sortable;
|
|
1145
|
+
}
|
|
1146
|
+
/**
|
|
1147
|
+
* Whether a row is should be selected based on the underlying entity state
|
|
1148
|
+
* @param record Record
|
|
1149
|
+
* @returns True if a row should be selected
|
|
1150
|
+
* @internal
|
|
1151
|
+
*/
|
|
1152
|
+
rowIsSelected(record) {
|
|
1153
|
+
const state = record.state;
|
|
1154
|
+
return state.selected ? state.selected : false;
|
|
1155
|
+
}
|
|
1156
|
+
isImg(value) {
|
|
1157
|
+
if (this.isUrl(value)) {
|
|
1158
|
+
return (['jpg', 'png', 'gif'].indexOf(value.split('.').pop().toLowerCase()) !==
|
|
1159
|
+
-1);
|
|
1160
|
+
}
|
|
1161
|
+
else {
|
|
1162
|
+
return false;
|
|
1163
|
+
}
|
|
1164
|
+
}
|
|
1165
|
+
isUrl(value) {
|
|
1166
|
+
if (typeof value === 'string') {
|
|
1167
|
+
return (value.slice(0, 8) === 'https://' || value.slice(0, 7) === 'http://');
|
|
1168
|
+
}
|
|
1169
|
+
else {
|
|
1170
|
+
return false;
|
|
1171
|
+
}
|
|
1172
|
+
}
|
|
1173
|
+
/**
|
|
1174
|
+
* Method to access an entity's values
|
|
1175
|
+
* @param record Record
|
|
1176
|
+
* @param column Column
|
|
1177
|
+
* @returns Any value
|
|
1178
|
+
* @internal
|
|
1179
|
+
*/
|
|
1180
|
+
getValue(record, column) {
|
|
1181
|
+
const entity = record.entity;
|
|
1182
|
+
let value;
|
|
1183
|
+
if (column.valueAccessor !== undefined) {
|
|
1184
|
+
return column.valueAccessor(entity, record);
|
|
1185
|
+
}
|
|
1186
|
+
if (this.template.valueAccessor !== undefined) {
|
|
1187
|
+
return this.template.valueAccessor(entity, column.name, record);
|
|
1188
|
+
}
|
|
1189
|
+
value = this.store.getProperty(entity, column.name);
|
|
1190
|
+
if (column.type === 'boolean') {
|
|
1191
|
+
if (value === undefined || value === null || value === '') {
|
|
1192
|
+
value = false;
|
|
1193
|
+
}
|
|
1194
|
+
else if (typeof value !== 'boolean' && value !== undefined) {
|
|
1195
|
+
if (typeof value === 'number') {
|
|
1196
|
+
value = Boolean(value);
|
|
1197
|
+
}
|
|
1198
|
+
else {
|
|
1199
|
+
value = JSON.parse(value.toLowerCase());
|
|
1200
|
+
}
|
|
1201
|
+
}
|
|
1202
|
+
if (!this.isEdition(record)) {
|
|
1203
|
+
value = value ? '✓' : ''; // check mark
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
else if (column.type === 'list' && value && column.domainValues) {
|
|
1207
|
+
const entity = record.entity;
|
|
1208
|
+
if (column.multiple) {
|
|
1209
|
+
let list_id;
|
|
1210
|
+
typeof value === 'string'
|
|
1211
|
+
? (list_id = value.match(/[\w.-]+/g).map(Number))
|
|
1212
|
+
: (list_id = value);
|
|
1213
|
+
let list_option = [];
|
|
1214
|
+
column.domainValues.forEach((option) => {
|
|
1215
|
+
if (list_id.includes(option.id)) {
|
|
1216
|
+
if (record.edition) {
|
|
1217
|
+
list_option.push(option.id);
|
|
1218
|
+
}
|
|
1219
|
+
else {
|
|
1220
|
+
list_option.push(option.value);
|
|
1221
|
+
}
|
|
1222
|
+
}
|
|
1223
|
+
});
|
|
1224
|
+
this.isEdition(record) ? (value = list_id) : (value = list_option);
|
|
1225
|
+
}
|
|
1226
|
+
else {
|
|
1227
|
+
if (!this.isEdition(record) && column.linkColumnForce) {
|
|
1228
|
+
value =
|
|
1229
|
+
entity?.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)];
|
|
1230
|
+
}
|
|
1231
|
+
else {
|
|
1232
|
+
column.domainValues.forEach((option) => {
|
|
1233
|
+
if (typeof value === 'string' &&
|
|
1234
|
+
StringUtils.isValidNumber(value) &&
|
|
1235
|
+
!StringUtils.isOctalNumber(value)) {
|
|
1236
|
+
value = parseInt(value);
|
|
1237
|
+
}
|
|
1238
|
+
if (option.value === value || option.id === value) {
|
|
1239
|
+
this.isEdition(record)
|
|
1240
|
+
? (value = option.id)
|
|
1241
|
+
: (value = option.value);
|
|
1242
|
+
}
|
|
1243
|
+
});
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
}
|
|
1247
|
+
else if (column.type === 'autocomplete' && value && column.domainValues) {
|
|
1248
|
+
const entity = record.entity;
|
|
1249
|
+
if (!this.isEdition(record) && column.linkColumnForce) {
|
|
1250
|
+
value =
|
|
1251
|
+
entity?.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)];
|
|
1252
|
+
}
|
|
1253
|
+
else {
|
|
1254
|
+
column.domainValues.forEach((option) => {
|
|
1255
|
+
if (typeof value === 'string' &&
|
|
1256
|
+
StringUtils.isValidNumber(value) &&
|
|
1257
|
+
!StringUtils.isOctalNumber(value)) {
|
|
1258
|
+
value = parseInt(value);
|
|
1259
|
+
}
|
|
1260
|
+
if (option.value === value || option.id === value) {
|
|
1261
|
+
value = option.value;
|
|
1262
|
+
}
|
|
1263
|
+
});
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
else if (column.type === 'date') {
|
|
1267
|
+
if (this.isEdition(record)) {
|
|
1268
|
+
if (value) {
|
|
1269
|
+
let date = moment(value);
|
|
1270
|
+
value = date.format();
|
|
1271
|
+
this.formGroup.controls[column.name].setValue(value);
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
else if (!this.isEdition(record) && value === null) {
|
|
1275
|
+
value = '';
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
if (value === undefined) {
|
|
1279
|
+
value = '';
|
|
1280
|
+
}
|
|
1281
|
+
return value;
|
|
1282
|
+
}
|
|
1283
|
+
/**
|
|
1284
|
+
* Method to access an entity's validation values
|
|
1285
|
+
* @param column Column
|
|
1286
|
+
* @param validationType string
|
|
1287
|
+
* @returns Any value (false if no validation or not the one concerned)
|
|
1288
|
+
* @internal
|
|
1289
|
+
*/
|
|
1290
|
+
getValidationAttributeValue(column, validationType) {
|
|
1291
|
+
if (column.validation !== undefined &&
|
|
1292
|
+
column.validation[validationType] !== undefined) {
|
|
1293
|
+
return column.validation[validationType];
|
|
1294
|
+
}
|
|
1295
|
+
else {
|
|
1296
|
+
return false;
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1299
|
+
isEdition(record) {
|
|
1300
|
+
return record.entity.edition ? true : false;
|
|
1301
|
+
}
|
|
1302
|
+
/**
|
|
1303
|
+
* Return the type of renderer of a column
|
|
1304
|
+
* @param column Column
|
|
1305
|
+
* @returns Renderer type
|
|
1306
|
+
* @internal
|
|
1307
|
+
*/
|
|
1308
|
+
getColumnRenderer(column) {
|
|
1309
|
+
if (column.renderer !== undefined) {
|
|
1310
|
+
return column.renderer;
|
|
1311
|
+
}
|
|
1312
|
+
return EntityTableColumnRenderer.Default;
|
|
1313
|
+
}
|
|
1314
|
+
/**
|
|
1315
|
+
* Return the table ngClass
|
|
1316
|
+
* @returns ngClass
|
|
1317
|
+
* @internal
|
|
1318
|
+
*/
|
|
1319
|
+
getTableClass() {
|
|
1320
|
+
return {
|
|
1321
|
+
'igo-entity-table-with-selection': this.selection
|
|
1322
|
+
};
|
|
1323
|
+
}
|
|
1324
|
+
/**
|
|
1325
|
+
* Return a header ngClass
|
|
1326
|
+
* @returns ngClass
|
|
1327
|
+
* @internal
|
|
1328
|
+
*/
|
|
1329
|
+
getHeaderClass() {
|
|
1330
|
+
const func = this.template.headerClassFunc;
|
|
1331
|
+
if (func instanceof Function) {
|
|
1332
|
+
return func();
|
|
1333
|
+
}
|
|
1334
|
+
return {};
|
|
1335
|
+
}
|
|
1336
|
+
/**
|
|
1337
|
+
* Return a row ngClass
|
|
1338
|
+
* @param record Record
|
|
1339
|
+
* @returns ngClass
|
|
1340
|
+
* @internal
|
|
1341
|
+
*/
|
|
1342
|
+
getRowClass(record) {
|
|
1343
|
+
const entity = record.entity;
|
|
1344
|
+
const func = this.template.rowClassFunc;
|
|
1345
|
+
if (func instanceof Function) {
|
|
1346
|
+
return func(entity, record);
|
|
1347
|
+
}
|
|
1348
|
+
return {};
|
|
1349
|
+
}
|
|
1350
|
+
/**
|
|
1351
|
+
* Return a row ngClass
|
|
1352
|
+
* @param record Record
|
|
1353
|
+
* @param column Column
|
|
1354
|
+
* @returns ngClass
|
|
1355
|
+
* @internal
|
|
1356
|
+
*/
|
|
1357
|
+
getCellClass(record, column) {
|
|
1358
|
+
const entity = record.entity;
|
|
1359
|
+
const cls = {};
|
|
1360
|
+
const tableFunc = this.template.cellClassFunc;
|
|
1361
|
+
if (tableFunc instanceof Function) {
|
|
1362
|
+
Object.assign(cls, tableFunc(entity, column, record));
|
|
1363
|
+
}
|
|
1364
|
+
const columnFunc = column.cellClassFunc;
|
|
1365
|
+
if (columnFunc instanceof Function) {
|
|
1366
|
+
Object.assign(cls, columnFunc(entity, record));
|
|
1367
|
+
}
|
|
1368
|
+
return cls;
|
|
1369
|
+
}
|
|
1370
|
+
/**
|
|
1371
|
+
* When a button is clicked
|
|
1372
|
+
* @param func Function
|
|
1373
|
+
* @param record Record
|
|
1374
|
+
* @internal
|
|
1375
|
+
*/
|
|
1376
|
+
onButtonClick(clickFunc, record) {
|
|
1377
|
+
this.enableEdit(record);
|
|
1378
|
+
if (typeof clickFunc === 'function') {
|
|
1379
|
+
clickFunc(record.entity, record);
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
/**
|
|
1383
|
+
* Retrieve column name without his "properties" tag (useful for edition workspace properties)
|
|
1384
|
+
*/
|
|
1385
|
+
getColumnKeyWithoutPropertiesTag(column) {
|
|
1386
|
+
if (column.includes('properties.')) {
|
|
1387
|
+
return column.split('.')[1];
|
|
1388
|
+
}
|
|
1389
|
+
return column;
|
|
1390
|
+
}
|
|
1391
|
+
static ɵfac = function EntityTableComponent_Factory(t) { return new (t || EntityTableComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.UntypedFormBuilder), i0.ɵɵdirectiveInject(i2.FocusMonitor), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.NgControl, 10), i0.ɵɵdirectiveInject(i1.NgForm, 8), i0.ɵɵdirectiveInject(i1.FormControlName, 8), i0.ɵɵdirectiveInject(i3.ErrorStateMatcher), i0.ɵɵdirectiveInject(i3.DateAdapter)); };
|
|
1392
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityTableComponent, selectors: [["igo-entity-table"]], inputs: { store: "store", paginator: "paginator", template: "template", scrollBehavior: "scrollBehavior", sortNullsFirst: "sortNullsFirst", withPaginator: "withPaginator", paginatorOptions: "paginatorOptions" }, outputs: { entityClick: "entityClick", entitySelectChange: "entitySelectChange", entitySortChange: "entitySortChange" }, features: [i0.ɵɵProvidersFeature([
|
|
1393
|
+
{ provide: MatFormFieldControl, useExisting: EntityTableComponent }
|
|
1394
|
+
]), i0.ɵɵNgOnChangesFeature], decls: 9, vars: 11, consts: [[1, "table-container", 3, "ngStyle"], ["id", "currentWorkspaceTable", "mat-table", "", "matSort", "", 3, "ngClass", "dataSource", "trackBy", "matSortChange"], ["matColumnDef", "selectionCheckbox", 1, "mat-cell-checkbox"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], [3, "matColumnDef", 4, "ngFor", "ngForOf"], ["mat-header-row", "", 3, "ngClass", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click", 4, "matRowDef", "matRowDefColumns"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange", 4, "ngIf"], ["mat-header-cell", ""], [4, "ngIf"], [3, "checked", "indeterminate", "change"], ["mat-cell", ""], [3, "checked", "mousedown", "click", "change"], [3, "matColumnDef"], ["mat-header-cell", "", "mat-sort-header", "", "class", "mat-body-1", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", "mat-sort-header", "", 1, "mat-body-1", 3, "matTooltip"], ["mat-header-cell", "", "class", "mat-body-1", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", 1, "mat-body-1", 3, "matTooltip"], [4, "matCellDef"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "ngIf", "ngIfElse"], ["isAnUrlDefault", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["igoImageError", "", "width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["igoImageError", "", "width", "50", "heigth", "auto", 3, "src"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", "innerHTML", 4, "ngIf", "ngIfElse"], ["isAnUrlHTML", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass", "innerHTML"], ["mat-cell", "", "class", "mat-cell-text edition", 3, "formGroup", "ngClass", 4, "ngIf", "ngIfElse"], ["isUnsanitizedHTML", ""], ["mat-cell", "", 1, "mat-cell-text", "edition", 3, "formGroup", "ngClass"], ["class", "date-picker", 4, "ngIf"], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur", 4, "ngIf"], ["matInput", "", "type", "number", "class", "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input", 4, "ngIf"], [3, "formControlName", "checked", "change", 4, "ngIf"], [3, "required", "formControlName", "multiple", "value", "selectionChange", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value", "readonly", 4, "ngIf"], ["panelWidth", "430px", 3, "optionSelected"], ["auto", "matAutocomplete"], [3, "value", 4, "ngFor", "ngForOf"], [1, "date-picker"], ["matSuffix", "", 3, "for"], ["matInput", "", 3, "matDatepicker", "formControlName", "value", "dateChange"], ["picker", ""], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur"], ["matInput", "", "type", "number", 1, "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input"], [3, "formControlName", "checked", "change"], [3, "required", "formControlName", "multiple", "value", "selectionChange"], [3, "value", "disabled", 4, "ngFor", "ngForOf"], [3, "value", "disabled"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value", "readonly"], [3, "value"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon", "click", 4, "ngIf"], [3, "svgIcon", 4, "ngIf"], [3, "svgIcon", "click"], [3, "svgIcon"], [4, "ngFor", "ngForOf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown"], ["mat-header-row", "", 3, "ngClass"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange"]], template: function EntityTableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1395
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "table", 1);
|
|
1396
|
+
i0.ɵɵlistener("matSortChange", function EntityTableComponent_Template_table_matSortChange_1_listener($event) { return ctx.onSort($event); });
|
|
1397
|
+
i0.ɵɵelementContainerStart(2, 2);
|
|
1398
|
+
i0.ɵɵtemplate(3, EntityTableComponent_th_3_Template, 2, 1, "th", 3);
|
|
1399
|
+
i0.ɵɵtemplate(4, EntityTableComponent_td_4_Template, 2, 1, "td", 4);
|
|
1400
|
+
i0.ɵɵelementContainerEnd();
|
|
1401
|
+
i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_Template, 4, 4, "ng-container", 5);
|
|
1402
|
+
i0.ɵɵtemplate(6, EntityTableComponent_tr_6_Template, 1, 1, "tr", 6);
|
|
1403
|
+
i0.ɵɵtemplate(7, EntityTableComponent_tr_7_Template, 1, 4, "tr", 7);
|
|
1404
|
+
i0.ɵɵelementEnd();
|
|
1405
|
+
i0.ɵɵtemplate(8, EntityTableComponent_igo_entity_table_paginator_8_Template, 1, 3, "igo-entity-table-paginator", 8);
|
|
1406
|
+
i0.ɵɵelementEnd();
|
|
1407
|
+
} if (rf & 2) {
|
|
1408
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(9, _c0, ctx.tableHeight));
|
|
1409
|
+
i0.ɵɵadvance(1);
|
|
1410
|
+
i0.ɵɵproperty("ngClass", ctx.getTableClass())("dataSource", ctx.dataSource)("trackBy", ctx.getTrackByFunction());
|
|
1411
|
+
i0.ɵɵadvance(4);
|
|
1412
|
+
i0.ɵɵproperty("ngForOf", ctx.template.columns);
|
|
1413
|
+
i0.ɵɵadvance(1);
|
|
1414
|
+
i0.ɵɵproperty("matHeaderRowDef", ctx.headers)("matHeaderRowDefSticky", ctx.fixedHeader);
|
|
1415
|
+
i0.ɵɵadvance(1);
|
|
1416
|
+
i0.ɵɵproperty("matRowDefColumns", ctx.headers);
|
|
1417
|
+
i0.ɵɵadvance(1);
|
|
1418
|
+
i0.ɵɵproperty("ngIf", ctx.withPaginator);
|
|
1419
|
+
} }, dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i4.NgStyle, i5.MatTable, i5.MatHeaderCellDef, i5.MatHeaderRowDef, i5.MatColumnDef, i5.MatCellDef, i5.MatRowDef, i5.MatHeaderCell, i5.MatCell, i5.MatHeaderRow, i5.MatRow, i6.MatAutocomplete, i3.MatOption, i6.MatAutocompleteTrigger, i7.MatSort, i7.MatSortHeader, i8.MatIcon, i9.MatIconButton, i9.MatMiniFabButton, i10.MatCheckbox, i11.MatSuffix, i12.MatSelect, i13.StopPropagationDirective, i14.EntityTablePaginatorComponent, i15.ImageErrorDirective, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.RequiredValidator, i1.MinValidator, i1.MaxValidator, i1.FormGroupDirective, i1.FormControlName, i16.MatInput, i17.MatDatepicker, i17.MatDatepickerInput, i17.MatDatepickerToggle, i18.MatTooltip, i19.EntityTableRowDirective, i4.AsyncPipe, i20.SanitizeHtmlPipe, i21.SecureImagePipe, i22.TranslatePipe], styles: ["[_nghost-%COMP%]{width:100%;height:100%;display:block}.table-compact[_nghost-%COMP%] tr.mat-mdc-header-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] mat-checkbox .mat-ripple{height:36px}.table-compact[_nghost-%COMP%] tr.mat-mdc-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] mat-checkbox .mat-ripple{height:28px}[_nghost-%COMP%] .table-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}[_nghost-%COMP%] .mat-cell-text[_ngcontent-%COMP%]{overflow:hidden;word-wrap:break-word}[_nghost-%COMP%] entity-table[_ngcontent-%COMP%] table.igo-entity-table-with-selection[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}[_nghost-%COMP%] table[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:7px}[_nghost-%COMP%] .class_hidden[_ngcontent-%COMP%]{visibility:hidden}[_nghost-%COMP%] .class_display_none[_ngcontent-%COMP%]{display:none}[_nghost-%COMP%] .class_boolean[_ngcontent-%COMP%], [_nghost-%COMP%] .class_icon[_ngcontent-%COMP%], [_nghost-%COMP%] .class_number[_ngcontent-%COMP%]{text-align:center;padding-right:35px!important}[_nghost-%COMP%] .class_string[_ngcontent-%COMP%], [_nghost-%COMP%] .class_text[_ngcontent-%COMP%], [_nghost-%COMP%] .class_number_edition[_ngcontent-%COMP%]{text-align:left}[_nghost-%COMP%] td.edition[_ngcontent-%COMP%]{background:rgba(166,166,166,.2)}[_nghost-%COMP%] input[_ngcontent-%COMP%]{border-bottom:1px solid darkgrey}"], changeDetection: 0 });
|
|
1420
|
+
}
|
|
1421
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityTableComponent, [{
|
|
1422
|
+
type: Component,
|
|
1423
|
+
args: [{ selector: 'igo-entity-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
1424
|
+
{ provide: MatFormFieldControl, useExisting: EntityTableComponent }
|
|
1425
|
+
], template: "<div class=\"table-container\" [ngStyle]=\"{ height: tableHeight }\">\n <table\n id=\"currentWorkspaceTable\"\n mat-table\n matSort\n [ngClass]=\"getTableClass()\"\n [dataSource]=\"dataSource\"\n [trackBy]=\"getTrackByFunction()\"\n (matSortChange)=\"onSort($event)\"\n >\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container *ngIf=\"selectMany\">\n <ng-container *ngIf=\"selectionState$ | async as selectionState\">\n <mat-checkbox\n (change)=\"onToggleRows($event.checked)\"\n [checked]=\"selectionState === entityTableSelectionState.All\"\n [indeterminate]=\"\n selectionState === entityTableSelectionState.Some\n \"\n >\n </mat-checkbox>\n </ng-container>\n </ng-container>\n </th>\n <td mat-cell *matCellDef=\"let record\">\n <mat-checkbox\n (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\"\n (click)=\"\n $event.shiftKey\n ? onShiftToggleRow(!rowIsSelected(record), record, $event)\n : $event.stopPropagation()\n \"\n (change)=\"onToggleRow($event.checked, record)\"\n [checked]=\"rowIsSelected(record)\"\n >\n </mat-checkbox>\n </td>\n </ng-container>\n\n <ng-container\n [matColumnDef]=\"column.name\"\n *ngFor=\"let column of template.columns\"\n >\n <ng-container *ngIf=\"columnIsSortable(column)\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\n class=\"mat-body-1\"\n >\n {{ column.title }}\n </th>\n </ng-container>\n\n <ng-container *ngIf=\"!columnIsSortable(column)\">\n <th\n mat-header-cell\n *matHeaderCellDef\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\n class=\"mat-body-1\"\n >\n {{ column.title }}\n </th>\n </ng-container>\n\n <ng-container *ngIf=\"getColumnRenderer(column) as columnRenderer\">\n <ng-container\n *ngIf=\"columnRenderer === entityTableColumnRenderer.Default\"\n >\n <ng-container *matCellDef=\"let record\">\n <td\n mat-cell\n class=\"mat-cell-text\"\n *ngIf=\"!isUrl(getValue(record, column)); else isAnUrlDefault\"\n [ngClass]=\"getCellClass(record, column)\"\n >\n {{ getValue(record, column) }}\n </td>\n <ng-template #isAnUrlDefault>\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"getCellClass(record, column)\"\n >\n <a\n href=\"{{ getValue(record, column) }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n >\n <img\n igoImageError\n *ngIf=\"isImg(getValue(record, column)); else notImg\"\n src=\"{{ getValue(record, column) | secureImage | async }}\"\n width=\"50\"\n heigth=\"auto\"\n />\n <ng-template #notImg\n ><span\n >{{ 'igo.common.entity-table.targetHtmlUrl' | translate }}\n </span></ng-template\n >\n </a>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.HTML\">\n <ng-container *matCellDef=\"let record\">\n <td\n mat-cell\n class=\"mat-cell-text\"\n *ngIf=\"!isUrl(getValue(record, column)); else isAnUrlHTML\"\n [ngClass]=\"getCellClass(record, column)\"\n [innerHTML]=\"getValue(record, column)\"\n ></td>\n <ng-template #isAnUrlHTML>\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"getCellClass(record, column)\"\n >\n <a\n href=\"{{ getValue(record, column) }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n >\n <img\n igoImageError\n *ngIf=\"isImg(getValue(record, column)); else notImg\"\n src=\"{{ getValue(record, column) | secureImage | async }}\"\n width=\"50\"\n heigth=\"auto\"\n />\n <ng-template #notImg\n ><span\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\n </span></ng-template\n >\n </a>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container\n *ngIf=\"columnRenderer === entityTableColumnRenderer.UnsanitizedHTML\"\n >\n <ng-container *matCellDef=\"let record\">\n <td\n mat-cell\n class=\"mat-cell-text edition\"\n [formGroup]=\"formGroup\"\n *ngIf=\"isEdition(record); else isUnsanitizedHTML\"\n [ngClass]=\"getCellClass(record, column)\"\n >\n <div class=\"date-picker\" *ngIf=\"column.type === 'date'\">\n <mat-datepicker-toggle\n matSuffix\n [for]=\"picker\"\n ></mat-datepicker-toggle>\n <input\n matInput\n [matDatepicker]=\"picker\"\n [formControlName]=\"column.name\"\n value=\"{{ getValue(record, column) }}\"\n (dateChange)=\"onDateChange(column.name, record, $event)\"\n />\n <mat-datepicker #picker></mat-datepicker>\n </div>\n <input\n matInput\n type=\"time\"\n *ngIf=\"column.type === 'time'\"\n [formControlName]=\"column.name\"\n step=\"900\"\n (focus)=\"column.onFocus($event)\"\n (keypress)=\"column.onChange($event)\"\n (blur)=\"column.onBlur($event)\"\n />\n <input\n matInput\n type=\"number\"\n class=\"class_number_edition\"\n *ngIf=\"column.type === 'number'\"\n [formControlName]=\"column.name\"\n step=\"{{ column.step }}\"\n value=\"{{ getValue(record, column) }}\"\n (input)=\"onValueChange(column.name, record, $event)\"\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n min=\"{{ getValidationAttributeValue(column, 'minValue') }}\"\n max=\"{{ getValidationAttributeValue(column, 'maxValue') }}\"\n />\n <input\n matInput\n type=\"text\"\n *ngIf=\"!column.type || column.type === 'string'\"\n [formControlName]=\"column.name\"\n value=\"{{ getValue(record, column) }}\"\n (input)=\"onValueChange(column.name, record, $event)\"\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n />\n <mat-checkbox\n *ngIf=\"column.type === 'boolean'\"\n [formControlName]=\"column.name\"\n [checked]=\"getValue(record, column)\"\n (change)=\"onBooleanValueChange(column.name, record, $event)\"\n ></mat-checkbox>\n <mat-select\n *ngIf=\"column.type === 'list'\"\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n [formControlName]=\"column.name\"\n [multiple]=\"column.multiple\"\n (selectionChange)=\"\n onSelectValueChange(column.name, record, $event)\n \"\n [value]=\"getValue(record, column)\"\n >\n <mat-option\n *ngFor=\"let option of column.domainValues\"\n [value]=\"option.id\"\n [disabled]=\"option.disabled\"\n >\n {{ option.value }}\n </mat-option>\n </mat-select>\n <input\n matInput\n type=\"text\"\n [formControlName]=\"column.name\"\n *ngIf=\"column.type === 'autocomplete'\"\n [matAutocomplete]=\"auto\"\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n value=\"{{ getValue(record, column) }}\"\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"\n onAutocompleteValueChange(column, record, $event)\n \"\n panelWidth=\"430px\"\n >\n <mat-option\n *ngFor=\"let option of filteredOptions[column.name] | async\"\n [value]=\"option.id\"\n >\n {{ option.value }}\n </mat-option>\n </mat-autocomplete>\n </td>\n <ng-template #isUnsanitizedHTML>\n <td\n mat-cell\n class=\"mat-cell-text\"\n *ngIf=\"\n !isUrl(getValue(record, column));\n else isAnUrlUnsanitizedHTML\n \"\n [ngClass]=\"getCellClass(record, column)\"\n [innerHTML]=\"getValue(record, column) | sanitizeHtml\"\n ></td>\n <ng-template #isAnUrlUnsanitizedHTML>\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"getCellClass(record, column)\"\n >\n <a\n href=\"{{ getValue(record, column) }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n >\n <img\n igoImageError\n *ngIf=\"isImg(getValue(record, column)); else notImg\"\n src=\"{{ getValue(record, column) | secureImage | async }}\"\n width=\"50\"\n heigth=\"auto\"\n />\n <ng-template #notImg\n ><span\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\n </span></ng-template\n >\n </a>\n </td>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Icon\">\n <td\n mat-cell\n *matCellDef=\"let record\"\n class=\"mat-cell-text\"\n [ngClass]=\"getCellClass(record, column)\"\n >\n <mat-icon\n *ngIf=\"column.onClick\"\n svgIcon=\"{{ getValue(record, column) || column.icon }}\"\n (click)=\"column.onClick($event)\"\n ></mat-icon>\n <mat-icon\n *ngIf=\"!column.onClick\"\n svgIcon=\"{{ getValue(record, column) || column.icon }}\"\n ></mat-icon>\n </td>\n </ng-container>\n <ng-container\n *ngIf=\"columnRenderer === entityTableColumnRenderer.ButtonGroup\"\n >\n <ng-container *matCellDef=\"let record\">\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"getCellClass(record, column)\"\n >\n <span *ngFor=\"let button of getValue(record, column)\">\n <ng-container\n *ngIf=\"\n isEdition(record) === button.editMode ||\n button.editMode === undefined\n \"\n >\n <button\n *ngIf=\"button.style === 'mat-icon-button'\"\n igoStopPropagation\n mat-icon-button\n [color]=\"button.color\"\n (mousedown)=\"onButtonClick(button.click, record)\"\n [disabled]=\"button.disabled\"\n >\n <mat-icon svgIcon=\"{{ button.icon }}\"></mat-icon>\n </button>\n <button\n *ngIf=\"button.style !== 'mat-icon-button'\"\n igoStopPropagation\n mat-mini-fab\n [color]=\"button.color\"\n (mousedown)=\"onButtonClick(button.click, record)\"\n [disabled]=\"button.disabled\"\n >\n <mat-icon svgIcon=\"{{ button.icon }}\"></mat-icon>\n </button>\n </ng-container>\n </span>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"headers; sticky: fixedHeader\"\n [ngClass]=\"getHeaderClass()\"\n ></tr>\n <tr\n mat-row\n igoEntityTableRow\n *matRowDef=\"let record; columns: headers\"\n [scrollBehavior]=\"scrollBehavior\"\n [ngClass]=\"getRowClass(record)\"\n [selection]=\"selection\"\n [selected]=\"rowIsSelected(record)\"\n (select)=\"onRowSelect(record)\"\n (click)=\"onRowClick(record)\"\n ></tr>\n </table>\n <igo-entity-table-paginator\n *ngIf=\"withPaginator\"\n [store]=\"store\"\n [paginatorOptions]=\"paginatorOptions\"\n [entitySortChange$]=\"entitySortChange$\"\n (paginatorChange)=\"paginatorChange($event)\"\n >\n </igo-entity-table-paginator>\n</div>\n", styles: [":host{width:100%;height:100%;display:block}:host.table-compact tr.mat-mdc-header-row,:host.table-compact ::ng-deep mat-checkbox .mat-ripple{height:36px}:host.table-compact tr.mat-mdc-row,:host.table-compact ::ng-deep mat-checkbox .mat-ripple{height:28px}:host .table-container{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}:host .mat-cell-text{overflow:hidden;word-wrap:break-word}:host entity-table table.igo-entity-table-with-selection tr:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}:host table button{margin:7px}:host .class_hidden{visibility:hidden}:host .class_display_none{display:none}:host .class_boolean,:host .class_icon,:host .class_number{text-align:center;padding-right:35px!important}:host .class_string,:host .class_text,:host .class_number_edition{text-align:left}:host td.edition{background:rgba(166,166,166,.2)}:host input{border-bottom:1px solid darkgrey}\n"] }]
|
|
1426
|
+
}], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.UntypedFormBuilder }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
|
|
1427
|
+
type: Optional
|
|
1428
|
+
}, {
|
|
1429
|
+
type: Self
|
|
1430
|
+
}] }, { type: i1.NgForm, decorators: [{
|
|
1431
|
+
type: Optional
|
|
1432
|
+
}] }, { type: i1.FormControlName, decorators: [{
|
|
1433
|
+
type: Optional
|
|
1434
|
+
}] }, { type: i3.ErrorStateMatcher }, { type: i3.DateAdapter }]; }, { store: [{
|
|
1435
|
+
type: Input
|
|
1436
|
+
}], paginator: [{
|
|
1437
|
+
type: Input
|
|
1438
|
+
}], template: [{
|
|
1439
|
+
type: Input
|
|
1440
|
+
}], scrollBehavior: [{
|
|
1441
|
+
type: Input
|
|
1442
|
+
}], sortNullsFirst: [{
|
|
1443
|
+
type: Input
|
|
1444
|
+
}], withPaginator: [{
|
|
1445
|
+
type: Input
|
|
1446
|
+
}], paginatorOptions: [{
|
|
1447
|
+
type: Input
|
|
1448
|
+
}], entityClick: [{
|
|
1449
|
+
type: Output
|
|
1450
|
+
}], entitySelectChange: [{
|
|
1451
|
+
type: Output
|
|
1452
|
+
}], entitySortChange: [{
|
|
1453
|
+
type: Output
|
|
1454
|
+
}] }); })();
|
|
1455
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUtqQixVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksRUFDTCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxFQUlMLFdBQVcsRUFHWCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUMxQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsTUFBTSxFQUNOLGVBQWUsRUFDZixnQkFBZ0IsRUFDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FB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QU1ILGVBQWdCO1lBQWhCLDhDQUFnQjtZQVV6QyxlQUFtQjtZQUFuQix3Q0FBbUI7Ozt1RkR6VVgsb0JBQW9CO2NBVGhDLFNBQVM7MkJBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7b0JBQ1QsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxzQkFBc0IsRUFBRTtpQkFDcEU7O3NCQWlMRSxRQUFROztzQkFBSSxJQUFJOztzQkFDaEIsUUFBUTs7c0JBQ1IsUUFBUTtrRkFuSUYsS0FBSztrQkFBYixLQUFLO1lBS08sU0FBUztrQkFBckIsS0FBSztZQWFHLFFBQVE7a0JBQWhCLEtBQUs7WUFNTixjQUFjO2tCQURiLEtBQUs7WUFPTixjQUFjO2tCQURiLEtBQUs7WUFPTixhQUFhO2tCQURaLEtBQUs7WUFPTixnQkFBZ0I7a0JBRGYsS0FBSztZQU1JLFdBQVc7a0JBQXBCLE1BQU07WUFLRyxrQkFBa0I7a0JBQTNCLE1BQU07WUFPRyxnQkFBZ0I7a0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBFbGVtZW50UmVmLFxuICBPcHRpb25hbCxcbiAgU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgRW50aXR5S2V5LFxuICBFbnRpdHlSZWNvcmQsXG4gIEVudGl0eVN0YXRlLFxuICBFbnRpdHlTdG9yZSxcbiAgRW50aXR5VGFibGVUZW1wbGF0ZSxcbiAgRW50aXR5VGFibGVDb2x1bW4sXG4gIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIsXG4gIEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUsXG4gIEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3Jcbn0gZnJvbSAnLi4vc2hhcmVkJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBFbnRpdHlUYWJsZVBhZ2luYXRvck9wdGlvbnMgfSBmcm9tICcuLi9lbnRpdHktdGFibGUtcGFnaW5hdG9yL2VudGl0eS10YWJsZS1wYWdpbmF0b3IuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7XG4gIFVudHlwZWRGb3JtQnVpbGRlcixcbiAgTmdDb250cm9sLFxuICBOZ0Zvcm0sXG4gIEZvcm1Db250cm9sTmFtZSxcbiAgVW50eXBlZEZvcm1Hcm91cFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgbW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFN0cmluZ1V0aWxzIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tZW50aXR5LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VudGl0eS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VudGl0eS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRW50aXR5VGFibGVDb21wb25lbnQgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEVudGl0eVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIGVudGl0eVNvcnRDaGFuZ2UkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBwdWJsaWMgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xuXG4gIHB1YmxpYyBmaWx0ZXJlZE9wdGlvbnMgPSB7fTtcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBjb2x1bW4gcmVuZGVyZXIgdHlwZXNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyID0gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlcjtcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBzZWxlY3Rpb24ncyBzdGF0ZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUgPSBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIG9mIHRoZSBzZWxlY3Rpb24scyBzdGF0ZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IHNlbGVjdGlvblN0YXRlJDogQmVoYXZpb3JTdWJqZWN0PEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgc3RvcmUncyBzZWxlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgc2VsZWN0aW9uJCQ6IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBkYXRhU291cmNlXG4gICAqL1xuICBwcml2YXRlIGRhdGFTb3VyY2UkJDogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFzdCByZWNvcmQgY2hlY2tlZC4gVXNlZnVsIGZvciBzZWxlY3RpbmdcbiAgICogbXVsdGlwbGUgcmVjb3JkcyBieSBob2xkaW5nIHRoZSBzaGlmdCBrZXkgYW5kIGNoZWNraW5nXG4gICAqIGNoZWNrYm94ZXMuXG4gICAqL1xuICBwcml2YXRlIGxhc3RSZWNvcmRDaGVja2VkS2V5OiBFbnRpdHlLZXk7XG5cbiAgLyoqXG4gICAqIEVudGl0eSBzdG9yZVxuICAgKi9cbiAgQElucHV0KCkgc3RvcmU6IEVudGl0eVN0b3JlPG9iamVjdD47XG5cbiAgLyoqXG4gICAqIFRhYmxlIHBhZ2luYXRvclxuICAgKi9cbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRvcigpOiBNYXRQYWdpbmF0b3Ige1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3I7XG4gIH1cbiAgcHJpdmF0ZSBfcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgLyoqXG4gICAqIFRhYmxlIHRlbXBsYXRlXG4gICAqL1xuICBASW5wdXQoKSB0ZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZTtcblxuICAvKipcbiAgICogU2Nyb2xsIGJlaGF2aW9yIG9uIHNlbGVjdGlvblxuICAgKi9cbiAgQElucHV0KClcbiAgc2Nyb2xsQmVoYXZpb3I6IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IgPSBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yLkF1dG87XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgbnVsbHMgc2hvdWxkIGJlIGZpcnN0IHdoZW4gc29ydGluZ1xuICAgKi9cbiAgQElucHV0KClcbiAgc29ydE51bGxzRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2hvdyB0aGUgdGFibGUgcGFnaW5hdG9yIG9yIG5vdC4gRmFsc2UgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHdpdGhQYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogUGFnaW5hdG9yIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpXG4gIHBhZ2luYXRvck9wdGlvbnM6IEVudGl0eVRhYmxlUGFnaW5hdG9yT3B0aW9ucztcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBjbGlja2VkXG4gICAqL1xuICBAT3V0cHV0KCkgZW50aXR5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBzZWxlY3RlZFxuICAgKi9cbiAgQE91dHB1dCgpIGVudGl0eVNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGFkZGVkOiBvYmplY3RbXTtcbiAgfT4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB0YWJsZSBzb3J0IGlzIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgZW50aXR5U29ydENoYW5nZTogRXZlbnRFbWl0dGVyPHtcbiAgICBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uO1xuICAgIGRpcmVjdGlvbjogc3RyaW5nO1xuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXIodW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogVGFibGUgaGVhZGVyc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBoZWFkZXJzKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgY29sdW1ucyA9IHRoaXMudGVtcGxhdGUuY29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gY29sdW1uLnZpc2libGUgIT09IGZhbHNlKVxuICAgICAgLm1hcCgoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hlY2tib3ggPT09IHRydWUpIHtcbiAgICAgIGNvbHVtbnMgPSBbJ3NlbGVjdGlvbkNoZWNrYm94J10uY29uY2F0KGNvbHVtbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIERhdGEgc291cmNlIGNvbnN1bWFibGUgYnkgdGhlIHVuZGVybHlpbmcgbWF0ZXJpYWwgdGFibGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBkYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxvYmplY3Q+KCk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgc2VsZWN0aW9uIGlzIHN1cHBvcnRlZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBzZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0aW9uIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBzZWxlY3Rpb24gY2hlY2tib3ggc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBzZWxlY3Rpb25DaGVja2JveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb25DaGVja2JveCB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBtYW55IGVudGl0aWVzIHNob3VsZCBlYiBzdXBwb3J0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgc2VsZWN0TWFueSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3RNYW55IHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgc2VsZWN0aW9uIG1hbnkgZW50aXRpZXMgc2hvdWxkIGViIHN1cHBvcnRlZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBmaXhlZEhlYWRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlciA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHRydWVcbiAgICAgIDogdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlcjtcbiAgfVxuXG4gIGdldCB0YWJsZUhlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnRhYmxlSGVpZ2h0ID8gdGhpcy50ZW1wbGF0ZS50YWJsZUhlaWdodCA6ICdhdXRvJztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcm90ZWN0ZWQgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIF9wYXJlbnRGb3JtOiBOZ0Zvcm0sXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIF9jb250cm9sTmFtZTogRm9ybUNvbnRyb2xOYW1lLFxuICAgIHByb3RlY3RlZCBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcbiAgICBwcml2YXRlIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxEYXRlPlxuICApIHtcbiAgICB0aGlzLmRhdGVBZGFwdGVyLnNldExvY2FsZSgnZnItQ0EnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFjayB0aGUgc2VsZWN0aW9uIHN0YXRlIHRvIHByb3Blcmx5IGRpc3BsYXkgdGhlIHNlbGVjdGlvbiBjaGVja2JveGVzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IHN0b3JlID0gY2hhbmdlcy5zdG9yZTtcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuY3VycmVudFZhbHVlICE9PSBzdG9yZS5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmhhbmRsZURhdGFzb3VyY2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0ZXh0IG9yIG51bWJlciB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXG4gICAqL1xuICBvblZhbHVlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGJvb2xlYW4gdmFsdWUgY2hhbmdlIChlZGl0aW9uKVxuICAgKi9cbiAgb25Cb29sZWFuVmFsdWVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4pO1xuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQuY2hlY2tlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHNlbGVjdCB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXG4gICAqL1xuICBvblNlbGVjdFZhbHVlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50LnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYXV0b2NvbXBsZXRlIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcbiAgICovXG4gIG9uQXV0b2NvbXBsZXRlVmFsdWVDaGFuZ2UoXG4gICAgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbixcbiAgICByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LFxuICAgIGV2ZW50XG4gICkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShldmVudC5vcHRpb24udmlld1ZhbHVlKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKTtcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGRhdGUgdmFsdWUgY2hhbmdlIChlZGl0aW9uKVxuICAgKi9cbiAgb25EYXRlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xuICAgIGNvbnN0IGZvcm1hdCA9ICdZWVlZLU1NLUREJztcbiAgICBjb25zdCB2YWx1ZSA9IG1vbWVudChldmVudC52YWx1ZSkuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4pO1xuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGVkaXRpb24gbW9kZSBmb3Igb25lIHJvd1xuICAgKiBNb3JlIHRoYW4gb25lIHJvdyBjYW4gYmUgZWRpdGVkIGF0IHRoZSBzYW1lIHRpbWVcbiAgICovXG4gIHByaXZhdGUgZW5hYmxlRWRpdChyZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+KSB7XG4gICAgY29uc3QgaXRlbSA9IHJlY29yZC5lbnRpdHkucHJvcGVydGllcyB8fCByZWNvcmQuZW50aXR5O1xuICAgIHRoaXMudGVtcGxhdGUuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbHVtbi50aXRsZSA9XG4gICAgICAgIGNvbHVtbi52YWxpZGF0aW9uPy5tYW5kYXRvcnkgJiYgIWNvbHVtbi50aXRsZS5pbmNsdWRlcygnKicpXG4gICAgICAgICAgPyBjb2x1bW4udGl0bGUgKyAnIConXG4gICAgICAgICAgOiBjb2x1bW4udGl0bGU7XG5cbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKCFpdGVtW2tleV0gfHwgaXRlbVtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgaXRlbVtrZXldID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW1ba2V5XSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpdGVtW2tleV0gPSBKU09OLnBhcnNlKGl0ZW1ba2V5XS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKFxuICAgICAgICAgIGNvbHVtbi5uYW1lLFxuICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChpdGVtW2tleV0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbGlzdCcpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXG4gICAgICAgICAgICBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChbaXRlbVtrZXldXSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXG4gICAgICAgICAgICBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChpdGVtW2tleV0pXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHR5cGVvZiBpdGVtW2tleV0gPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShwYXJzZUludChpdGVtW2tleV0pKVxuICAgICAgICAgICAgOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoaXRlbVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChcbiAgICAgICAgICBjb2x1bW4ubmFtZSxcbiAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woaXRlbVtrZXldKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW2NvbHVtbi5uYW1lXSA9IG5ldyBPYnNlcnZhYmxlPGFueVtdPigpO1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc1tjb2x1bW4ubmFtZV0gPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tcbiAgICAgICAgICBjb2x1bW4ubmFtZVxuICAgICAgICBdLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgIG1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb2x1bW4uZG9tYWluVmFsdWVzPy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVOYW1lTm9ybWFsaXplZCA9IG9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IGZvcm1Db250cm9sVmFsdWUgPSBpdGVtW2tleV07XG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZvcm1Db250cm9sVmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICBTdHJpbmdVdGlscy5pc1ZhbGlkTnVtYmVyKGZvcm1Db250cm9sVmFsdWUpICYmXG4gICAgICAgICAgICAhU3RyaW5nVXRpbHMuaXNPY3RhbE51bWJlcihmb3JtQ29udHJvbFZhbHVlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZSA9IHBhcnNlSW50KGZvcm1Db250cm9sVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBvcHRpb24udmFsdWUgPT09IGZvcm1Db250cm9sVmFsdWUgfHxcbiAgICAgICAgICAgIG9wdGlvbi5pZCA9PT0gZm9ybUNvbnRyb2xWYWx1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShmb3JtQ29udHJvbFZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSkge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHkgYXMgYW55O1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShcbiAgICAgICAgICAgIGVudGl0eT8ucHJvcGVydGllc1tcbiAgICAgICAgICAgICAgdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubGlua0NvbHVtbkZvcmNlKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICBpZiAoY29sdW1uLnZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKGl0ZW1ba2V5XSkge1xuICAgICAgICAgICAgbGV0IGRhdGUgPSBtb21lbnQoaXRlbVtrZXldKTtcbiAgICAgICAgICAgIGl0ZW1ba2V5XSA9IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKFxuICAgICAgICAgICAgICBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKGl0ZW1ba2V5XSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0tleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW25ld0tleV0gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChcbiAgICAgICAgICAgICAgY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXG4gICAgICAgICAgY29sdW1uLm5hbWUsXG4gICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKGl0ZW1ba2V5XSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0gJiZcbiAgICAgICAgdGhpcy5nZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5kaXNhYmxlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGFzb3VyY2UoKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XG4gICAgdGhpcy5zZWxlY3Rpb24kJCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3XG4gICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlKVxuICAgICAgLnN1YnNjcmliZSgocmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXSkgPT4ge1xuICAgICAgICBjb25zdCBmaXJzdFNlbGVjdGVkID0gcmVjb3Jkc1swXTtcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgICAuYWxsKClcbiAgICAgICAgICAuaW5kZXhPZihmaXJzdFNlbGVjdGVkKTtcbiAgICAgICAgY29uc3QgcGFnZU1heCA9IHRoaXMucGFnaW5hdG9yXG4gICAgICAgICAgPyB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSAqICh0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKyAxKVxuICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc3QgcGFnZU1pbiA9IHRoaXMucGFnaW5hdG9yID8gcGFnZU1heCAtIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplIDogMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IgJiZcbiAgICAgICAgICAoZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uIDwgcGFnZU1pbiB8fFxuICAgICAgICAgICAgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID49IHBhZ2VNYXgpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHBhZ2VUb1JlYWNoID0gTWF0aC5mbG9vcihcbiAgICAgICAgICAgIGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiAvIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHBhZ2VUb1JlYWNoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUkLm5leHQodGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGUocmVjb3JkcykpO1xuICAgICAgfSk7XG4gICAgdGhpcy5kYXRhU291cmNlJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwkKCkuc3Vic2NyaWJlKChhbGwpID0+IHtcbiAgICAgIGlmIChhbGxbMF0pIHtcbiAgICAgICAgdGhpcy5lbmFibGVFZGl0KGFsbFswXSk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGFsbDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmJpbmQgdGhlIHN0b3JlIHdhdGNoZXJcbiAgICogQGludGVybmFsXG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlU3RvcmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVTdG9yZSgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24kJCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24kJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhU291cmNlJCQpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrYnkgZnVuY3Rpb25cbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQHBhcmFtIGluZGV4IFJlY29yZCBpbmRleFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFRyYWNrQnlGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKGluZGV4OiBudW1iZXIsIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdCwgRW50aXR5U3RhdGU+KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb3JkLnJlZjtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXIgYSByZWZyZXNoIG9mIHRocmUgdGFibGUuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuXG4gICAqIHRoZSBkYXRhIHNvdXJjZSBkb2Vzbid0IGVtaXQgYSBuZXcgdmFsdWUgYnV0IGZvciBzb21lIHJlYXNvblxuICAgKiB0aGUgcmVjb3JkcyBuZWVkIGFuIHVwZGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWZyZXNoKCkge1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcGFnaW5hdG9yQ2hhbmdlKGV2ZW50OiBNYXRQYWdpbmF0b3IpIHtcbiAgICB0aGlzLnBhZ2luYXRvciA9IGV2ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIHNvcnQsIHNvcnQgdGhlIHN0b3JlXG4gICAqIEBwYXJhbSBldmVudCBTb3J0IGV2ZW50XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Tb3J0KGV2ZW50OiB7IGFjdGl2ZTogc3RyaW5nOyBkaXJlY3Rpb246IHN0cmluZyB9KSB7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gZXZlbnQuZGlyZWN0aW9uO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMudGVtcGxhdGUuY29sdW1ucy5maW5kKFxuICAgICAgKGM6IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjLm5hbWUgPT09IGV2ZW50LmFjdGl2ZVxuICAgICk7XG5cbiAgICBpZiAoZGlyZWN0aW9uID09PSAnYXNjJyB8fCBkaXJlY3Rpb24gPT09ICdkZXNjJykge1xuICAgICAgdGhpcy5zdG9yZS5zdGF0ZVZpZXcuc29ydCh7XG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PlxuICAgICAgICAgIHRoaXMuZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pLFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIG51bGxzRmlyc3Q6IHRoaXMuc29ydE51bGxzRmlyc3RcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbnRpdHlTb3J0Q2hhbmdlLmVtaXQoeyBjb2x1bW4sIGRpcmVjdGlvbiB9KTtcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZSQubmV4dCh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yZS5zdGF0ZVZpZXcuc29ydCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyBjbGlja2VkLCBlbWl0IGFuIGV2ZW50XG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Sb3dDbGljayhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xuICAgIHRoaXMuZW50aXR5Q2xpY2suZW1pdChyZWNvcmQuZW50aXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyBzZWxlY3RlZCwgc2VsZWN0IGl0IGluIHRoZSBzdG9yZSBhbmQgZW1pdCBhbiBldmVudC4gRXZlbiBpZlxuICAgKiBcIm1hbnlcIiBpcyBzZXQgdG8gdHJ1ZSwgdGhpcyBtZXRob2QgYWx3YXlzIHNlbGVjdCBhIHNpbmdsZSwgZXhjbHVzaXZlIHJvdy4gU2VsZWN0aW5nXG4gICAqIG11bHRpcGxlIHJvd3Mgc2hvdWxkIGJlIGFjaGlldmVkIGJ5IHVzaW5nIHRoZSBjaGVja2JveGVzLlxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uUm93U2VsZWN0KHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZShlbnRpdHksIHsgc2VsZWN0ZWQ6IHRydWUgfSwgdHJ1ZSk7XG4gICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7IGFkZGVkOiBbZW50aXR5XSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3Qgb3IgdW5zZWxlY3QgYWxsIHJvd3MgYXQgb25jZS4gT24gc2VsZWN0LCBlbWl0IGFuIGV2ZW50LlxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uVG9nZ2xlUm93cyh0b2dnbGU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGVBbGwoeyBzZWxlY3RlZDogdG9nZ2xlIH0pO1xuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgLmFsbCgpXG4gICAgICAgIC5tYXAoKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHJlY29yZC5lbnRpdHkpO1xuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7IGFkZGVkOiBbZW50aXRpZXNdIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyB0b2dnbGVkLCBzZWxlY3Qgb3IgdW5zZWxlY3QgaXQgaW4gdGhlIHN0b3JlLiBPbiBzZWxlY3QsXG4gICAqIGVtaXQgYW4gZXZlbnQuXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Ub2dnbGVSb3codG9nZ2xlOiBib29sZWFuLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgY29uc3QgZXhjbHVzaXZlID0gdG9nZ2xlID09PSB0cnVlICYmICF0aGlzLnNlbGVjdE1hbnk7XG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7IHNlbGVjdGVkOiB0b2dnbGUgfSwgZXhjbHVzaXZlKTtcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHsgYWRkZWQ6IFtlbnRpdHldIH0pO1xuICAgIH1cbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgdG9nZ2xlZCwgc2VsZWN0IG9yIHVuc2VsZWN0IGl0IGluIHRoZSBzdG9yZS4gT24gc2VsZWN0LFxuICAgKiBlbWl0IGFuIGV2ZW50LlxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uU2hpZnRUb2dnbGVSb3coXG4gICAgdG9nZ2xlOiBib29sZWFuLFxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnRcbiAgKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdE1hbnkgPT09IGZhbHNlIHx8IHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vblRvZ2dsZVJvdyh0b2dnbGUsIHJlY29yZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgbWF0IGNoZWNrYm94IHdyb25nIGJlaGF2aW9yXG4gICAgLy8gd2hlbiB0aGUgc2hpZnQga2V5IGlzIGhlbGQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzYyMzJcbiAgICBjb25zdCByYW5nZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNlbGVjdE5vZGUoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdlKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwoKTtcbiAgICBjb25zdCByZWNvcmRJbmRleCA9IHJlY29yZHMuaW5kZXhPZihyZWNvcmQpO1xuICAgIGNvbnN0IGxhc3RSZWNvcmRDaGVja2VkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0KFxuICAgICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleVxuICAgICk7XG4gICAgY29uc3QgbGFzdFJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKGxhc3RSZWNvcmRDaGVja2VkKTtcbiAgICBjb25zdCBpbmRleGVzID0gW3JlY29yZEluZGV4LCBsYXN0UmVjb3JkSW5kZXhdO1xuICAgIGNvbnN0IHNlbGVjdFJlY29yZHMgPSByZWNvcmRzLnNsaWNlKFxuICAgICAgTWF0aC5taW4oLi4uaW5kZXhlcyksXG4gICAgICBNYXRoLm1heCguLi5pbmRleGVzKSArIDFcbiAgICApO1xuXG4gICAgY29uc3QgZW50aXRpZXMgPSBzZWxlY3RSZWNvcmRzLm1hcChcbiAgICAgIChfcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gX3JlY29yZC5lbnRpdHlcbiAgICApO1xuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlTWFueShlbnRpdGllcywgeyBzZWxlY3RlZDogdG9nZ2xlIH0pO1xuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoeyBhZGRlZDogZW50aXRpZXMgfSk7XG4gICAgfVxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBzZWxlY3Rpb24gc3RhdGVcbiAgICogQHJldHVybnMgV2hldGhlciBhbGwsIHNvbWUgb3Igbm8gcm93cyBhcmUgc2VsZWN0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVTZWxlY3Rpb25TdGF0ZShcbiAgICBzZWxlY3RlZFJlY29yZHM6IEVudGl0eVJlY29yZDxvYmplY3Q+W11cbiAgKTogRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSB7XG4gICAgY29uc3Qgc3RhdGVzID0gRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZTtcbiAgICBjb25zdCBzZWxlY3Rpb25Db3VudCA9IHNlbGVjdGVkUmVjb3Jkcy5sZW5ndGg7XG4gICAgcmV0dXJuIHNlbGVjdGlvbkNvdW50ID09PSAwXG4gICAgICA/IHN0YXRlcy5Ob25lXG4gICAgICA6IHNlbGVjdGlvbkNvdW50ID09PSB0aGlzLnN0b3JlLnN0YXRlVmlldy5jb3VudFxuICAgICAgPyBzdGF0ZXMuQWxsXG4gICAgICA6IHN0YXRlcy5Tb21lO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBjb2x1bW4gaXMgc29ydGFibGVcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIGNvbHVtbiBpcyBzb3J0YWJsZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbHVtbklzU29ydGFibGUoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIGxldCBzb3J0YWJsZSA9IGNvbHVtbi5zb3J0O1xuICAgIGlmIChzb3J0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzb3J0YWJsZSA9IHRoaXMudGVtcGxhdGUuc29ydCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiB0aGlzLnRlbXBsYXRlLnNvcnQ7XG4gICAgfVxuICAgIHJldHVybiBzb3J0YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgcm93IGlzIHNob3VsZCBiZSBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBlbnRpdHkgc3RhdGVcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIHJvdyBzaG91bGQgYmUgc2VsZWN0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICByb3dJc1NlbGVjdGVkKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlY29yZC5zdGF0ZTtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQgPyBzdGF0ZS5zZWxlY3RlZCA6IGZhbHNlO1xuICB9XG5cbiAgaXNJbWcodmFsdWUpIHtcbiAgICBpZiAodGhpcy5pc1VybCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsnanBnJywgJ3BuZycsICdnaWYnXS5pbmRleE9mKHZhbHVlLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKSkgIT09XG4gICAgICAgIC0xXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNVcmwodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdmFsdWUuc2xpY2UoMCwgOCkgPT09ICdodHRwczovLycgfHwgdmFsdWUuc2xpY2UoMCwgNykgPT09ICdodHRwOi8vJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gYWNjZXNzIGFuIGVudGl0eSdzIHZhbHVlc1xuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxuICAgKiBAcmV0dXJucyBBbnkgdmFsdWVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRWYWx1ZShyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYW55IHtcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAoY29sdW1uLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNvbHVtbi52YWx1ZUFjY2Vzc29yKGVudGl0eSwgcmVjb3JkKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVtcGxhdGUudmFsdWVBY2Nlc3NvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS52YWx1ZUFjY2Vzc29yKGVudGl0eSwgY29sdW1uLm5hbWUsIHJlY29yZCk7XG4gICAgfVxuICAgIHZhbHVlID0gdGhpcy5zdG9yZS5nZXRQcm9wZXJ0eShlbnRpdHksIGNvbHVtbi5uYW1lKTtcblxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHZhbHVlID0gQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSA/ICcmIzEwMDAzOycgOiAnJzsgLy8gY2hlY2sgbWFya1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdsaXN0JyAmJiB2YWx1ZSAmJiBjb2x1bW4uZG9tYWluVmFsdWVzKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcbiAgICAgIGlmIChjb2x1bW4ubXVsdGlwbGUpIHtcbiAgICAgICAgbGV0IGxpc3RfaWQ7XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IChsaXN0X2lkID0gdmFsdWUubWF0Y2goL1tcXHcuLV0rL2cpLm1hcChOdW1iZXIpKVxuICAgICAgICAgIDogKGxpc3RfaWQgPSB2YWx1ZSk7XG4gICAgICAgIGxldCBsaXN0X29wdGlvbiA9IFtdO1xuXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKGxpc3RfaWQuaW5jbHVkZXMob3B0aW9uLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlY29yZC5lZGl0aW9uKSB7XG4gICAgICAgICAgICAgIGxpc3Rfb3B0aW9uLnB1c2gob3B0aW9uLmlkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxpc3Rfb3B0aW9uLnB1c2gob3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaXNFZGl0aW9uKHJlY29yZCkgPyAodmFsdWUgPSBsaXN0X2lkKSA6ICh2YWx1ZSA9IGxpc3Rfb3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiBjb2x1bW4ubGlua0NvbHVtbkZvcmNlKSB7XG4gICAgICAgICAgdmFsdWUgPVxuICAgICAgICAgICAgZW50aXR5Py5wcm9wZXJ0aWVzW1xuICAgICAgICAgICAgICB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgU3RyaW5nVXRpbHMuaXNWYWxpZE51bWJlcih2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgIVN0cmluZ1V0aWxzLmlzT2N0YWxOdW1iZXIodmFsdWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSB8fCBvcHRpb24uaWQgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNFZGl0aW9uKHJlY29yZClcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSA9IG9wdGlvbi5pZClcbiAgICAgICAgICAgICAgICA6ICh2YWx1ZSA9IG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJyAmJiB2YWx1ZSAmJiBjb2x1bW4uZG9tYWluVmFsdWVzKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcbiAgICAgIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiBjb2x1bW4ubGlua0NvbHVtbkZvcmNlKSB7XG4gICAgICAgIHZhbHVlID1cbiAgICAgICAgICBlbnRpdHk/LnByb3BlcnRpZXNbXG4gICAgICAgICAgICB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXG4gICAgICAgICAgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgU3RyaW5nVXRpbHMuaXNWYWxpZE51bWJlcih2YWx1ZSkgJiZcbiAgICAgICAgICAgICFTdHJpbmdVdGlscy5pc09jdGFsTnVtYmVyKHZhbHVlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlIHx8IG9wdGlvbi5pZCA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICBpZiAodGhpcy5pc0VkaXRpb24ocmVjb3JkKSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBsZXQgZGF0ZSA9IG1vbWVudCh2YWx1ZSk7XG4gICAgICAgICAgdmFsdWUgPSBkYXRlLmZvcm1hdCgpO1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIGFjY2VzcyBhbiBlbnRpdHkncyB2YWxpZGF0aW9uIHZhbHVlc1xuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblR5cGUgc3RyaW5nXG4gICAqIEByZXR1cm5zIEFueSB2YWx1ZSAoZmFsc2UgaWYgbm8gdmFsaWRhdGlvbiBvciBub3QgdGhlIG9uZSBjb25jZXJuZWQpXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKFxuICAgIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4sXG4gICAgdmFsaWRhdGlvblR5cGU6IHN0cmluZ1xuICApOiBhbnkge1xuICAgIGlmIChcbiAgICAgIGNvbHVtbi52YWxpZGF0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGNvbHVtbi52YWxpZGF0aW9uW3ZhbGlkYXRpb25UeXBlXSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRpb25bdmFsaWRhdGlvblR5cGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRWRpdGlvbihyZWNvcmQpIHtcbiAgICByZXR1cm4gcmVjb3JkLmVudGl0eS5lZGl0aW9uID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdHlwZSBvZiByZW5kZXJlciBvZiBhIGNvbHVtblxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxuICAgKiBAcmV0dXJucyBSZW5kZXJlciB0eXBlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIge1xuICAgIGlmIChjb2x1bW4ucmVuZGVyZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNvbHVtbi5yZW5kZXJlcjtcbiAgICB9XG4gICAgcmV0dXJuIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHRhYmxlIG5nQ2xhc3NcbiAgICogQHJldHVybnMgbmdDbGFzc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFRhYmxlQ2xhc3MoKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAnaWdvLWVudGl0eS10YWJsZS13aXRoLXNlbGVjdGlvbic6IHRoaXMuc2VsZWN0aW9uXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBoZWFkZXIgbmdDbGFzc1xuICAgKiBAcmV0dXJucyBuZ0NsYXNzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0SGVhZGVyQ2xhc3MoKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnRlbXBsYXRlLmhlYWRlckNsYXNzRnVuYztcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gZnVuYygpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcm93IG5nQ2xhc3NcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQHJldHVybnMgbmdDbGFzc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFJvd0NsYXNzKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5yb3dDbGFzc0Z1bmM7XG4gICAgaWYgKGZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIGZ1bmMoZW50aXR5LCByZWNvcmQpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcm93IG5nQ2xhc3NcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cbiAgICogQHJldHVybnMgbmdDbGFzc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldENlbGxDbGFzcyhcbiAgICByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LFxuICAgIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW5cbiAgKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgY29uc3QgY2xzID0ge307XG5cbiAgICBjb25zdCB0YWJsZUZ1bmMgPSB0aGlzLnRlbXBsYXRlLmNlbGxDbGFzc0Z1bmM7XG4gICAgaWYgKHRhYmxlRnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNscywgdGFibGVGdW5jKGVudGl0eSwgY29sdW1uLCByZWNvcmQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5GdW5jID0gY29sdW1uLmNlbGxDbGFzc0Z1bmM7XG4gICAgaWYgKGNvbHVtbkZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIGNvbHVtbkZ1bmMoZW50aXR5LCByZWNvcmQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYSBidXR0b24gaXMgY2xpY2tlZFxuICAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvblxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uQnV0dG9uQ2xpY2soXG4gICAgY2xpY2tGdW5jOiAoZW50aXR5OiBvYmplY3QsIHJlY29yZD86IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiB2b2lkLFxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD5cbiAgKSB7XG4gICAgdGhpcy5lbmFibGVFZGl0KHJlY29yZCk7XG4gICAgaWYgKHR5cGVvZiBjbGlja0Z1bmMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNsaWNrRnVuYyhyZWNvcmQuZW50aXR5LCByZWNvcmQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBjb2x1bW4gbmFtZSB3aXRob3V0IGhpcyBcInByb3BlcnRpZXNcIiB0YWcgKHVzZWZ1bCBmb3IgZWRpdGlvbiB3b3Jrc3BhY2UgcHJvcGVydGllcylcbiAgICovXG4gIHB1YmxpYyBnZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW46IHN0cmluZykge1xuICAgIGlmIChjb2x1bW4uaW5jbHVkZXMoJ3Byb3BlcnRpZXMuJykpIHtcbiAgICAgIHJldHVybiBjb2x1bW4uc3BsaXQoJy4nKVsxXTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiB0YWJsZUhlaWdodCB9XCI+XG4gIDx0YWJsZVxuICAgIGlkPVwiY3VycmVudFdvcmtzcGFjZVRhYmxlXCJcbiAgICBtYXQtdGFibGVcbiAgICBtYXRTb3J0XG4gICAgW25nQ2xhc3NdPVwiZ2V0VGFibGVDbGFzcygpXCJcbiAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgICBbdHJhY2tCeV09XCJnZXRUcmFja0J5RnVuY3Rpb24oKVwiXG4gICAgKG1hdFNvcnRDaGFuZ2UpPVwib25Tb3J0KCRldmVudClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3Rpb25DaGVja2JveFwiIGNsYXNzPVwibWF0LWNlbGwtY2hlY2tib3hcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RNYW55XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvblN0YXRlJCB8IGFzeW5jIGFzIHNlbGVjdGlvblN0YXRlXCI+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVSb3dzKCRldmVudC5jaGVja2VkKVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvblN0YXRlID09PSBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLkFsbFwiXG4gICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIlxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlID09PSBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLlNvbWVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XG4gICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zaGlmdEtleSA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogbnVsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgJGV2ZW50LnNoaWZ0S2V5XG4gICAgICAgICAgICAgID8gb25TaGlmdFRvZ2dsZVJvdyghcm93SXNTZWxlY3RlZChyZWNvcmQpLCByZWNvcmQsICRldmVudClcbiAgICAgICAgICAgICAgOiAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVSb3coJGV2ZW50LmNoZWNrZWQsIHJlY29yZClcIlxuICAgICAgICAgIFtjaGVja2VkXT1cInJvd0lzU2VsZWN0ZWQocmVjb3JkKVwiXG4gICAgICAgID5cbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRlbXBsYXRlLmNvbHVtbnNcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5Jc1NvcnRhYmxlKGNvbHVtbilcIj5cbiAgICAgICAgPHRoXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcCA/IGNvbHVtbi50b29sdGlwIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICBjbGFzcz1cIm1hdC1ib2R5LTFcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29sdW1uLnRpdGxlIH19XG4gICAgICAgIDwvdGg+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW5Jc1NvcnRhYmxlKGNvbHVtbilcIj5cbiAgICAgICAgPHRoXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcCA/IGNvbHVtbi50b29sdGlwIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICBjbGFzcz1cIm1hdC1ib2R5LTFcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29sdW1uLnRpdGxlIH19XG4gICAgICAgIDwvdGg+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtblJlbmRlcmVyKGNvbHVtbikgYXMgY29sdW1uUmVuZGVyZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7IGVsc2UgaXNBblVybERlZmF1bHRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIH19XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsRGVmYXVsdD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfX1cIlxuICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICBpZ29JbWFnZUVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbWcoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTsgZWxzZSBub3RJbWdcIlxuICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7eyBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzZWN1cmVJbWFnZSB8IGFzeW5jIH19XCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MFwiXG4gICAgICAgICAgICAgICAgICAgIGhlaWd0aD1cImF1dG9cIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nXG4gICAgICAgICAgICAgICAgICAgID48c3BhblxuICAgICAgICAgICAgICAgICAgICAgID57eyAnaWdvLmNvbW1vbi5lbnRpdHktdGFibGUudGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkhUTUxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7IGVsc2UgaXNBblVybEhUTUxcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIlxuICAgICAgICAgICAgPjwvdGQ+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxIVE1MPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBtYXQtY2VsbFxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB9fVwiXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIGlnb0ltYWdlRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpOyBlbHNlIG5vdEltZ1wiXG4gICAgICAgICAgICAgICAgICAgIHNyYz1cInt7IGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNlY3VyZUltYWdlIHwgYXN5bmMgfX1cIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjUwXCJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ3RoPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWdcbiAgICAgICAgICAgICAgICAgICAgPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPnt7ICdpZ28uZ2VvLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLlVuc2FuaXRpemVkSFRNTFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dCBlZGl0aW9uXCJcbiAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgICAgICAgICAgICAqbmdJZj1cImlzRWRpdGlvbihyZWNvcmQpOyBlbHNlIGlzVW5zYW5pdGl6ZWRIVE1MXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlclwiICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdkYXRlJ1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgW2Zvcl09XCJwaWNrZXJcIlxuICAgICAgICAgICAgICAgID48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIlxuICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB9fVwiXG4gICAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ3RpbWUnXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiOTAwXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY29sdW1uLm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImNvbHVtbi5vbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJjb2x1bW4ub25CbHVyKCRldmVudClcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xhc3NfbnVtYmVyX2VkaXRpb25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwie3sgY29sdW1uLnN0ZXAgfX1cIlxuICAgICAgICAgICAgICAgIHZhbHVlPVwie3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIH19XCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcmVjb3JkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICByZWFkb25seT1cInt7IGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpIH19XCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInt7XG4gICAgICAgICAgICAgICAgICBnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAnbWFuZGF0b3J5JylcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgbWluPVwie3sgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21pblZhbHVlJykgfX1cIlxuICAgICAgICAgICAgICAgIG1heD1cInt7IGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYXhWYWx1ZScpIH19XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLnR5cGUgfHwgY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB9fVwiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJ7eyBnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKSB9fVwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ7e1xuICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpXG4gICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Cb29sZWFuVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnbGlzdCdcIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwie3tcbiAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKVxuICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiY29sdW1uLm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgb25TZWxlY3RWYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcmVjb3JkLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbi5kb21haW5WYWx1ZXNcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2F1dG9jb21wbGV0ZSdcIlxuICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ7e1xuICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpXG4gICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgIHZhbHVlPVwie3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIH19XCJcbiAgICAgICAgICAgICAgICByZWFkb25seT1cInt7IGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpIH19XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgICAgKG9wdGlvblNlbGVjdGVkKT1cIlxuICAgICAgICAgICAgICAgICAgb25BdXRvY29tcGxldGVWYWx1ZUNoYW5nZShjb2x1bW4sIHJlY29yZCwgJGV2ZW50KVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgcGFuZWxXaWR0aD1cIjQzMHB4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uc1tjb2x1bW4ubmFtZV0gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzVW5zYW5pdGl6ZWRIVE1MPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBtYXQtY2VsbFxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICFpc1VybChnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO1xuICAgICAgICAgICAgICAgICAgZWxzZSBpc0FuVXJsVW5zYW5pdGl6ZWRIVE1MXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNhbml0aXplSHRtbFwiXG4gICAgICAgICAgICAgID48L3RkPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxVbnNhbml0aXplZEhUTUw+XG4gICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICBtYXQtY2VsbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfX1cIlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICBpZ29JbWFnZUVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpOyBlbHNlIG5vdEltZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UgfCBhc3luYyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MFwiXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ3RoPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nXG4gICAgICAgICAgICAgICAgICAgICAgPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9uZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuSWNvblwiPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLm9uQ2xpY2tcIlxuICAgICAgICAgICAgICBzdmdJY29uPVwie3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHx8IGNvbHVtbi5pY29uIH19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbi5vbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgPjwvbWF0LWljb24+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLm9uQ2xpY2tcIlxuICAgICAgICAgICAgICBzdmdJY29uPVwie3sgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHx8IGNvbHVtbi5pY29uIH19XCJcbiAgICAgICAgICAgID48L21hdC1pY29uPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5CdXR0b25Hcm91cFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGdldFZhbHVlKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIGlzRWRpdGlvbihyZWNvcmQpID09PSBidXR0b24uZWRpdE1vZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmVkaXRNb2RlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ1dHRvbi5zdHlsZSA9PT0gJ21hdC1pY29uLWJ1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICBpZ29TdG9wUHJvcGFnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJidXR0b24uY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uLmNsaWNrLCByZWNvcmQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3sgYnV0dG9uLmljb24gfX1cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnV0dG9uLnN0eWxlICE9PSAnbWF0LWljb24tYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIGlnb1N0b3BQcm9wYWdhdGlvblxuICAgICAgICAgICAgICAgICAgICBtYXQtbWluaS1mYWJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7eyBidXR0b24uaWNvbiB9fVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx0clxuICAgICAgbWF0LWhlYWRlci1yb3dcbiAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJoZWFkZXJzOyBzdGlja3k6IGZpeGVkSGVhZGVyXCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldEhlYWRlckNsYXNzKClcIlxuICAgID48L3RyPlxuICAgIDx0clxuICAgICAgbWF0LXJvd1xuICAgICAgaWdvRW50aXR5VGFibGVSb3dcbiAgICAgICptYXRSb3dEZWY9XCJsZXQgcmVjb3JkOyBjb2x1bW5zOiBoZWFkZXJzXCJcbiAgICAgIFtzY3JvbGxCZWhhdmlvcl09XCJzY3JvbGxCZWhhdmlvclwiXG4gICAgICBbbmdDbGFzc109XCJnZXRSb3dDbGFzcyhyZWNvcmQpXCJcbiAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICAgIFtzZWxlY3RlZF09XCJyb3dJc1NlbGVjdGVkKHJlY29yZClcIlxuICAgICAgKHNlbGVjdCk9XCJvblJvd1NlbGVjdChyZWNvcmQpXCJcbiAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJlY29yZClcIlxuICAgID48L3RyPlxuICA8L3RhYmxlPlxuICA8aWdvLWVudGl0eS10YWJsZS1wYWdpbmF0b3JcbiAgICAqbmdJZj1cIndpdGhQYWdpbmF0b3JcIlxuICAgIFtzdG9yZV09XCJzdG9yZVwiXG4gICAgW3BhZ2luYXRvck9wdGlvbnNdPVwicGFnaW5hdG9yT3B0aW9uc1wiXG4gICAgW2VudGl0eVNvcnRDaGFuZ2UkXT1cImVudGl0eVNvcnRDaGFuZ2UkXCJcbiAgICAocGFnaW5hdG9yQ2hhbmdlKT1cInBhZ2luYXRvckNoYW5nZSgkZXZlbnQpXCJcbiAgPlxuICA8L2lnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yPlxuPC9kaXY+XG4iXX0=
|