@openziti/ziti-console-lib 1.0.3 → 1.1.0
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/assets/styles/global.scss +70 -0
- package/fesm2022/openziti-ziti-console-lib.mjs +2133 -1321
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/index.d.ts +5689 -6
- package/index.d.ts.map +1 -0
- package/package.json +10 -12
- package/esm2022/lib/ZAC_VERSION.mjs +0 -4
- package/esm2022/lib/app.initializer.mjs +0 -24
- package/esm2022/lib/default-app-config.mjs +0 -5
- package/esm2022/lib/features/card/card.component.mjs +0 -34
- package/esm2022/lib/features/card-list/card-list.component.mjs +0 -55
- package/esm2022/lib/features/config-editor/config-editor.component.mjs +0 -337
- package/esm2022/lib/features/confirm/confirm.component.mjs +0 -77
- package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +0 -93
- package/esm2022/lib/features/custom-tags/custom-tags.component.mjs +0 -111
- package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +0 -46
- package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +0 -49
- package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +0 -58
- package/esm2022/lib/features/data-table/cells/table-cell-token/table-cell-token.component.mjs +0 -123
- package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +0 -268
- package/esm2022/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.mjs +0 -93
- package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +0 -37
- package/esm2022/lib/features/data-table/column-headers/table-column-select/table-column-select.component.mjs +0 -33
- package/esm2022/lib/features/data-table/data-table-filter.service.mjs +0 -138
- package/esm2022/lib/features/data-table/data-table.component.mjs +0 -918
- package/esm2022/lib/features/data-table/data-table.service.mjs +0 -98
- package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +0 -108
- package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +0 -26
- package/esm2022/lib/features/data-table/tooltips/os-tooltip.component.mjs +0 -29
- package/esm2022/lib/features/data-table/tooltips/sdk-tooltip.component.mjs +0 -34
- package/esm2022/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.mjs +0 -72
- package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +0 -134
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +0 -189
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.mjs +0 -50
- package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +0 -95
- package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +0 -121
- package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +0 -83
- package/esm2022/lib/features/dynamic-widgets/port-ranges/port-ranges.component.mjs +0 -100
- package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +0 -201
- package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +0 -166
- package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +0 -108
- package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +0 -126
- package/esm2022/lib/features/extendable/extendable.component.mjs +0 -55
- package/esm2022/lib/features/extendable/extensions-noop.service.mjs +0 -52
- package/esm2022/lib/features/header-bar/header-bar.component.mjs +0 -105
- package/esm2022/lib/features/json-view/json-view.component.mjs +0 -212
- package/esm2022/lib/features/list-page-features/list-page-form/list-page-form.component.mjs +0 -138
- package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +0 -66
- package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +0 -29
- package/esm2022/lib/features/login/login-dialog.component.mjs +0 -121
- package/esm2022/lib/features/messaging/growler.component.mjs +0 -62
- package/esm2022/lib/features/messaging/growler.model.mjs +0 -24
- package/esm2022/lib/features/messaging/growler.module.mjs +0 -34
- package/esm2022/lib/features/messaging/growler.service.mjs +0 -71
- package/esm2022/lib/features/messaging/logger.service.mjs +0 -174
- package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +0 -30
- package/esm2022/lib/features/no-items/no-items.component.mjs +0 -46
- package/esm2022/lib/features/overrides/overrides.component.mjs +0 -118
- package/esm2022/lib/features/overrides/overrides.service.mjs +0 -114
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +0 -151
- package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +0 -114
- package/esm2022/lib/features/progress-meter/progress-meter.component.mjs +0 -43
- package/esm2022/lib/features/progress-wizard/progress-wizard.component.mjs +0 -90
- package/esm2022/lib/features/projectable-forms/api-session/api-session-form.component.mjs +0 -143
- package/esm2022/lib/features/projectable-forms/api-session/api-session-form.service.mjs +0 -118
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +0 -337
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +0 -114
- package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +0 -399
- package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +0 -95
- package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +0 -217
- package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +0 -54
- package/esm2022/lib/features/projectable-forms/config-type/config-type-form.component.mjs +0 -244
- package/esm2022/lib/features/projectable-forms/config-type/config-type-form.service.mjs +0 -92
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +0 -275
- package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +0 -137
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +0 -231
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +0 -118
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +0 -277
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +0 -188
- package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +0 -101
- package/esm2022/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.mjs +0 -54
- package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +0 -135
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +0 -471
- package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +0 -131
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +0 -533
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +0 -79
- package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.component.mjs +0 -437
- package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.service.mjs +0 -81
- package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +0 -315
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +0 -330
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +0 -591
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +0 -1036
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +0 -275
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +0 -172
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +0 -279
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +0 -230
- package/esm2022/lib/features/projectable-forms/session/session-form.component.mjs +0 -213
- package/esm2022/lib/features/projectable-forms/session/session-form.service.mjs +0 -84
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +0 -244
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.service.mjs +0 -130
- package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.component.mjs +0 -224
- package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.service.mjs +0 -118
- package/esm2022/lib/features/qr-code/qr-code.component.mjs +0 -166
- package/esm2022/lib/features/quick-add/quick-add.component.mjs +0 -50
- package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +0 -86
- package/esm2022/lib/features/reset-enrollment/reset-enrollment.service.mjs +0 -61
- package/esm2022/lib/features/side-modal/side-modal.component.mjs +0 -45
- package/esm2022/lib/features/side-navigator/side-navigator.component.mjs +0 -127
- package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +0 -54
- package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +0 -291
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +0 -586
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +0 -373
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +0 -1706
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +0 -591
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +0 -883
- package/esm2022/lib/features/visualizer/visualizer-service.class.mjs +0 -32
- package/esm2022/lib/models/api-session.mjs +0 -7
- package/esm2022/lib/models/auth-policy.mjs +0 -31
- package/esm2022/lib/models/certificate-authority.mjs +0 -16
- package/esm2022/lib/models/config-type.mjs +0 -10
- package/esm2022/lib/models/config.mjs +0 -10
- package/esm2022/lib/models/edge-router-policy.mjs +0 -11
- package/esm2022/lib/models/edge-router.mjs +0 -13
- package/esm2022/lib/models/identity.mjs +0 -34
- package/esm2022/lib/models/jwt-signer.mjs +0 -20
- package/esm2022/lib/models/posture-check.mjs +0 -29
- package/esm2022/lib/models/service-edge-router-policy.mjs +0 -11
- package/esm2022/lib/models/service-policy.mjs +0 -13
- package/esm2022/lib/models/service.mjs +0 -12
- package/esm2022/lib/models/session.mjs +0 -7
- package/esm2022/lib/models/terminator.mjs +0 -14
- package/esm2022/lib/pages/api-sessions/api-sessions-page.component.mjs +0 -112
- package/esm2022/lib/pages/api-sessions/api-sessions-page.service.mjs +0 -235
- package/esm2022/lib/pages/attributes/attributes.component.mjs +0 -104
- package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +0 -120
- package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +0 -215
- package/esm2022/lib/pages/callback/callback.component.mjs +0 -155
- package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +0 -119
- package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +0 -240
- package/esm2022/lib/pages/config-types/config-types-page.component.mjs +0 -130
- package/esm2022/lib/pages/config-types/config-types-page.service.mjs +0 -134
- package/esm2022/lib/pages/configurations/configurations-page.component.mjs +0 -134
- package/esm2022/lib/pages/configurations/configurations-page.service.mjs +0 -251
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +0 -128
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +0 -407
- package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +0 -136
- package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +0 -354
- package/esm2022/lib/pages/geolocate/geolocate.component.mjs +0 -130
- package/esm2022/lib/pages/identities/identities-page.component.mjs +0 -221
- package/esm2022/lib/pages/identities/identities-page.service.mjs +0 -591
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +0 -160
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.service.mjs +0 -177
- package/esm2022/lib/pages/posture-checks/posture-checks-page.component.mjs +0 -103
- package/esm2022/lib/pages/posture-checks/posture-checks-page.service.mjs +0 -200
- package/esm2022/lib/pages/profile/profile.component.mjs +0 -58
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +0 -122
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +0 -367
- package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +0 -124
- package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +0 -446
- package/esm2022/lib/pages/services/services-page.component.mjs +0 -218
- package/esm2022/lib/pages/services/services-page.service.mjs +0 -378
- package/esm2022/lib/pages/sessions/sessions-page.component.mjs +0 -112
- package/esm2022/lib/pages/sessions/sessions-page.service.mjs +0 -228
- package/esm2022/lib/pages/settings/settings.component.mjs +0 -61
- package/esm2022/lib/pages/terminators/terminators-page.component.mjs +0 -97
- package/esm2022/lib/pages/terminators/terminators-page.service.mjs +0 -235
- package/esm2022/lib/pages/transit-routers/transit-routers-page.component.mjs +0 -129
- package/esm2022/lib/pages/transit-routers/transit-routers-page.service.mjs +0 -248
- package/esm2022/lib/safe.pipe.mjs +0 -18
- package/esm2022/lib/services/auth.service.mjs +0 -94
- package/esm2022/lib/services/console-events.service.mjs +0 -20
- package/esm2022/lib/services/csv-download.service.mjs +0 -91
- package/esm2022/lib/services/deactivate-guard.service.mjs +0 -17
- package/esm2022/lib/services/login-service.class.mjs +0 -47
- package/esm2022/lib/services/node-data.service.mjs +0 -397
- package/esm2022/lib/services/noop-login.service.mjs +0 -41
- package/esm2022/lib/services/schema.service.mjs +0 -807
- package/esm2022/lib/services/settings-service.class.mjs +0 -120
- package/esm2022/lib/services/settings.service.mjs +0 -203
- package/esm2022/lib/services/tab-name.service.mjs +0 -73
- package/esm2022/lib/services/validation.service.mjs +0 -156
- package/esm2022/lib/services/ziti-controller-data.service.mjs +0 -340
- package/esm2022/lib/services/ziti-data.service.mjs +0 -100
- package/esm2022/lib/services/ziti-domain-controller.service.mjs +0 -3
- package/esm2022/lib/shared/list-page-component.class.mjs +0 -186
- package/esm2022/lib/shared/list-page-service.class.mjs +0 -244
- package/esm2022/lib/urls.mjs +0 -34
- package/esm2022/lib/zac-routing.module.mjs +0 -34
- package/esm2022/lib/ziti-console-lib.module.mjs +0 -538
- package/esm2022/lib/ziti-console.constants.mjs +0 -20
- package/esm2022/openziti-ziti-console-lib.mjs +0 -5
- package/esm2022/public-api.mjs +0 -130
- package/lib/ZAC_VERSION.d.ts +0 -4
- package/lib/ZAC_VERSION.d.ts.map +0 -1
- package/lib/app.initializer.d.ts +0 -3
- package/lib/app.initializer.d.ts.map +0 -1
- package/lib/default-app-config.d.ts +0 -9
- package/lib/default-app-config.d.ts.map +0 -1
- package/lib/features/card/card.component.d.ts +0 -13
- package/lib/features/card/card.component.d.ts.map +0 -1
- package/lib/features/card-list/card-list.component.d.ts +0 -27
- package/lib/features/card-list/card-list.component.d.ts.map +0 -1
- package/lib/features/config-editor/config-editor.component.d.ts +0 -50
- package/lib/features/config-editor/config-editor.component.d.ts.map +0 -1
- package/lib/features/confirm/confirm.component.d.ts +0 -34
- package/lib/features/confirm/confirm.component.d.ts.map +0 -1
- package/lib/features/creation-summary-dialog/creation-summary-dialog.component.d.ts +0 -32
- package/lib/features/creation-summary-dialog/creation-summary-dialog.component.d.ts.map +0 -1
- package/lib/features/custom-tags/custom-tags.component.d.ts +0 -37
- package/lib/features/custom-tags/custom-tags.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.d.ts +0 -16
- package/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts +0 -20
- package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts +0 -15
- package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-token/table-cell-token.component.d.ts +0 -22
- package/lib/features/data-table/cells/table-cell-token/table-cell-token.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-default/table-column-default.component.d.ts +0 -52
- package/lib/features/data-table/column-headers/table-column-default/table-column-default.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.d.ts +0 -27
- package/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.d.ts +0 -19
- package/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-select/table-column-select.component.d.ts +0 -15
- package/lib/features/data-table/column-headers/table-column-select/table-column-select.component.d.ts.map +0 -1
- package/lib/features/data-table/data-table-filter.service.d.ts +0 -37
- package/lib/features/data-table/data-table-filter.service.d.ts.map +0 -1
- package/lib/features/data-table/data-table.component.d.ts +0 -164
- package/lib/features/data-table/data-table.component.d.ts.map +0 -1
- package/lib/features/data-table/data-table.service.d.ts +0 -20
- package/lib/features/data-table/data-table.service.d.ts.map +0 -1
- package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts +0 -25
- package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +0 -1
- package/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.d.ts +0 -10
- package/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.d.ts.map +0 -1
- package/lib/features/data-table/tooltips/os-tooltip.component.d.ts +0 -15
- package/lib/features/data-table/tooltips/os-tooltip.component.d.ts.map +0 -1
- package/lib/features/data-table/tooltips/sdk-tooltip.component.d.ts +0 -15
- package/lib/features/data-table/tooltips/sdk-tooltip.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.d.ts +0 -19
- package/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts +0 -28
- package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts +0 -50
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.d.ts +0 -14
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/number/number-input.component.d.ts +0 -23
- package/lib/features/dynamic-widgets/number/number-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/object/object.component.d.ts +0 -26
- package/lib/features/dynamic-widgets/object/object.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/password/password-input.component.d.ts +0 -24
- package/lib/features/dynamic-widgets/password/password-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts +0 -22
- package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts +0 -60
- package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts +0 -30
- package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts +0 -27
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts +0 -26
- package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts.map +0 -1
- package/lib/features/extendable/extendable.component.d.ts +0 -15
- package/lib/features/extendable/extendable.component.d.ts.map +0 -1
- package/lib/features/extendable/extensions-noop.service.d.ts +0 -35
- package/lib/features/extendable/extensions-noop.service.d.ts.map +0 -1
- package/lib/features/header-bar/header-bar.component.d.ts +0 -29
- package/lib/features/header-bar/header-bar.component.d.ts.map +0 -1
- package/lib/features/json-view/json-view.component.d.ts +0 -40
- package/lib/features/json-view/json-view.component.d.ts.map +0 -1
- package/lib/features/list-page-features/list-page-form/list-page-form.component.d.ts +0 -35
- package/lib/features/list-page-features/list-page-form/list-page-form.component.d.ts.map +0 -1
- package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts +0 -14
- package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts.map +0 -1
- package/lib/features/loading-indicator/loading-indicator.component.d.ts +0 -11
- package/lib/features/loading-indicator/loading-indicator.component.d.ts.map +0 -1
- package/lib/features/login/login-dialog.component.d.ts +0 -30
- package/lib/features/login/login-dialog.component.d.ts.map +0 -1
- package/lib/features/messaging/growler.component.d.ts +0 -19
- package/lib/features/messaging/growler.component.d.ts.map +0 -1
- package/lib/features/messaging/growler.model.d.ts +0 -8
- package/lib/features/messaging/growler.model.d.ts.map +0 -1
- package/lib/features/messaging/growler.module.d.ts +0 -10
- package/lib/features/messaging/growler.module.d.ts.map +0 -1
- package/lib/features/messaging/growler.service.d.ts +0 -18
- package/lib/features/messaging/growler.service.d.ts.map +0 -1
- package/lib/features/messaging/logger.service.d.ts +0 -27
- package/lib/features/messaging/logger.service.d.ts.map +0 -1
- package/lib/features/multi-action-button/multi-action-button.component.d.ts +0 -13
- package/lib/features/multi-action-button/multi-action-button.component.d.ts.map +0 -1
- package/lib/features/no-items/no-items.component.d.ts +0 -19
- package/lib/features/no-items/no-items.component.d.ts.map +0 -1
- package/lib/features/overrides/overrides.component.d.ts +0 -33
- package/lib/features/overrides/overrides.component.d.ts.map +0 -1
- package/lib/features/overrides/overrides.service.d.ts +0 -18
- package/lib/features/overrides/overrides.service.d.ts.map +0 -1
- package/lib/features/preview-list/preview-list.component.d.ts +0 -34
- package/lib/features/preview-list/preview-list.component.d.ts.map +0 -1
- package/lib/features/preview-selections/preview-selections.component.d.ts +0 -39
- package/lib/features/preview-selections/preview-selections.component.d.ts.map +0 -1
- package/lib/features/progress-meter/progress-meter.component.d.ts +0 -19
- package/lib/features/progress-meter/progress-meter.component.d.ts.map +0 -1
- package/lib/features/progress-wizard/progress-wizard.component.d.ts +0 -31
- package/lib/features/progress-wizard/progress-wizard.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts +0 -50
- package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/api-session/api-session-form.service.d.ts +0 -27
- package/lib/features/projectable-forms/api-session/api-session-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +0 -74
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts +0 -38
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +0 -80
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts +0 -37
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +0 -62
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts +0 -28
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts +0 -63
- package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/config-type/config-type-form.service.d.ts +0 -27
- package/lib/features/projectable-forms/config-type/config-type-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +0 -62
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/configuration/configuration.service.d.ts +0 -33
- package/lib/features/projectable-forms/configuration/configuration.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +0 -53
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts +0 -29
- package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +0 -54
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts +0 -40
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts +0 -29
- package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.d.ts +0 -15
- package/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/form-header/form-header.component.d.ts +0 -38
- package/lib/features/projectable-forms/form-header/form-header.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts +0 -93
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/identity/identity-form.service.d.ts +0 -20
- package/lib/features/projectable-forms/identity/identity-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +0 -97
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts +0 -21
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts +0 -134
- package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/posture-check/posture-check-form.service.d.ts +0 -23
- package/lib/features/projectable-forms/posture-check/posture-check-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/projectable-form.class.d.ts +0 -92
- package/lib/features/projectable-forms/projectable-form.class.d.ts.map +0 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts +0 -70
- package/lib/features/projectable-forms/service/service-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts +0 -123
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +0 -173
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +0 -53
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts +0 -38
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +0 -55
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts +0 -48
- package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/session/session-form.component.d.ts +0 -63
- package/lib/features/projectable-forms/session/session-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/session/session-form.service.d.ts +0 -23
- package/lib/features/projectable-forms/session/session-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +0 -58
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts +0 -33
- package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts +0 -50
- package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/transit-router/transit-router-form.service.d.ts +0 -27
- package/lib/features/projectable-forms/transit-router/transit-router-form.service.d.ts.map +0 -1
- package/lib/features/qr-code/qr-code.component.d.ts +0 -45
- package/lib/features/qr-code/qr-code.component.d.ts.map +0 -1
- package/lib/features/quick-add/quick-add.component.d.ts +0 -15
- package/lib/features/quick-add/quick-add.component.d.ts.map +0 -1
- package/lib/features/reset-enrollment/reset-enrollment.component.d.ts +0 -27
- package/lib/features/reset-enrollment/reset-enrollment.component.d.ts.map +0 -1
- package/lib/features/reset-enrollment/reset-enrollment.service.d.ts +0 -13
- package/lib/features/reset-enrollment/reset-enrollment.service.d.ts.map +0 -1
- package/lib/features/side-modal/side-modal.component.d.ts +0 -15
- package/lib/features/side-modal/side-modal.component.d.ts.map +0 -1
- package/lib/features/side-navigator/side-navigator.component.d.ts +0 -33
- package/lib/features/side-navigator/side-navigator.component.d.ts.map +0 -1
- package/lib/features/sidebars/side-navbar/side-navbar.component.d.ts +0 -16
- package/lib/features/sidebars/side-navbar/side-navbar.component.d.ts.map +0 -1
- package/lib/features/tag-selector/tag-selector.component.d.ts +0 -59
- package/lib/features/tag-selector/tag-selector.component.d.ts.map +0 -1
- package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts +0 -54
- package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts.map +0 -1
- package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts +0 -21
- package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts.map +0 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +0 -146
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts.map +0 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts +0 -172
- package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts.map +0 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts +0 -35
- package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts.map +0 -1
- package/lib/features/visualizer/visualizer-service.class.d.ts +0 -10
- package/lib/features/visualizer/visualizer-service.class.d.ts.map +0 -1
- package/lib/models/api-session.d.ts +0 -18
- package/lib/models/api-session.d.ts.map +0 -1
- package/lib/models/auth-policy.d.ts +0 -8
- package/lib/models/auth-policy.d.ts.map +0 -1
- package/lib/models/certificate-authority.d.ts +0 -14
- package/lib/models/certificate-authority.d.ts.map +0 -1
- package/lib/models/config-type.d.ts +0 -7
- package/lib/models/config-type.d.ts.map +0 -1
- package/lib/models/config.d.ts +0 -7
- package/lib/models/config.d.ts.map +0 -1
- package/lib/models/edge-router-policy.d.ts +0 -8
- package/lib/models/edge-router-policy.d.ts.map +0 -1
- package/lib/models/edge-router.d.ts +0 -10
- package/lib/models/edge-router.d.ts.map +0 -1
- package/lib/models/identity.d.ts +0 -16
- package/lib/models/identity.d.ts.map +0 -1
- package/lib/models/jwt-signer.d.ts +0 -17
- package/lib/models/jwt-signer.d.ts.map +0 -1
- package/lib/models/posture-check.d.ts +0 -17
- package/lib/models/posture-check.d.ts.map +0 -1
- package/lib/models/service-edge-router-policy.d.ts +0 -8
- package/lib/models/service-edge-router-policy.d.ts.map +0 -1
- package/lib/models/service-policy.d.ts +0 -10
- package/lib/models/service-policy.d.ts.map +0 -1
- package/lib/models/service.d.ts +0 -9
- package/lib/models/service.d.ts.map +0 -1
- package/lib/models/session.d.ts +0 -17
- package/lib/models/session.d.ts.map +0 -1
- package/lib/models/terminator.d.ts +0 -11
- package/lib/models/terminator.d.ts.map +0 -1
- package/lib/pages/api-sessions/api-sessions-page.component.d.ts +0 -30
- package/lib/pages/api-sessions/api-sessions-page.component.d.ts.map +0 -1
- package/lib/pages/api-sessions/api-sessions-page.service.d.ts +0 -31
- package/lib/pages/api-sessions/api-sessions-page.service.d.ts.map +0 -1
- package/lib/pages/attributes/attributes.component.d.ts +0 -31
- package/lib/pages/attributes/attributes.component.d.ts.map +0 -1
- package/lib/pages/auth-policies/auth-policies-page.component.d.ts +0 -29
- package/lib/pages/auth-policies/auth-policies-page.component.d.ts.map +0 -1
- package/lib/pages/auth-policies/auth-policies-page.service.d.ts +0 -34
- package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +0 -1
- package/lib/pages/callback/callback.component.d.ts +0 -22
- package/lib/pages/callback/callback.component.d.ts.map +0 -1
- package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts +0 -30
- package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts.map +0 -1
- package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts +0 -35
- package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts.map +0 -1
- package/lib/pages/config-types/config-types-page.component.d.ts +0 -31
- package/lib/pages/config-types/config-types-page.component.d.ts.map +0 -1
- package/lib/pages/config-types/config-types-page.service.d.ts +0 -29
- package/lib/pages/config-types/config-types-page.service.d.ts.map +0 -1
- package/lib/pages/configurations/configurations-page.component.d.ts +0 -30
- package/lib/pages/configurations/configurations-page.component.d.ts.map +0 -1
- package/lib/pages/configurations/configurations-page.service.d.ts +0 -80
- package/lib/pages/configurations/configurations-page.service.d.ts.map +0 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts +0 -33
- package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts.map +0 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts +0 -63
- package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts.map +0 -1
- package/lib/pages/edge-routers/edge-routers-page.component.d.ts +0 -36
- package/lib/pages/edge-routers/edge-routers-page.component.d.ts.map +0 -1
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts +0 -51
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +0 -1
- package/lib/pages/geolocate/geolocate.component.d.ts +0 -32
- package/lib/pages/geolocate/geolocate.component.d.ts.map +0 -1
- package/lib/pages/identities/identities-page.component.d.ts +0 -40
- package/lib/pages/identities/identities-page.component.d.ts.map +0 -1
- package/lib/pages/identities/identities-page.service.d.ts +0 -64
- package/lib/pages/identities/identities-page.service.d.ts.map +0 -1
- package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts +0 -34
- package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts.map +0 -1
- package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts +0 -31
- package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts.map +0 -1
- package/lib/pages/posture-checks/posture-checks-page.component.d.ts +0 -29
- package/lib/pages/posture-checks/posture-checks-page.component.d.ts.map +0 -1
- package/lib/pages/posture-checks/posture-checks-page.service.d.ts +0 -28
- package/lib/pages/posture-checks/posture-checks-page.service.d.ts.map +0 -1
- package/lib/pages/profile/profile.component.d.ts +0 -17
- package/lib/pages/profile/profile.component.d.ts.map +0 -1
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts +0 -33
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts.map +0 -1
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts +0 -57
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts.map +0 -1
- package/lib/pages/service-policies/service-policies-page.component.d.ts +0 -34
- package/lib/pages/service-policies/service-policies-page.component.d.ts.map +0 -1
- package/lib/pages/service-policies/service-policies-page.service.d.ts +0 -63
- package/lib/pages/service-policies/service-policies-page.service.d.ts.map +0 -1
- package/lib/pages/services/services-page.component.d.ts +0 -42
- package/lib/pages/services/services-page.component.d.ts.map +0 -1
- package/lib/pages/services/services-page.service.d.ts +0 -69
- package/lib/pages/services/services-page.service.d.ts.map +0 -1
- package/lib/pages/sessions/sessions-page.component.d.ts +0 -30
- package/lib/pages/sessions/sessions-page.component.d.ts.map +0 -1
- package/lib/pages/sessions/sessions-page.service.d.ts +0 -30
- package/lib/pages/sessions/sessions-page.service.d.ts.map +0 -1
- package/lib/pages/settings/settings.component.d.ts +0 -23
- package/lib/pages/settings/settings.component.d.ts.map +0 -1
- package/lib/pages/terminators/terminators-page.component.d.ts +0 -29
- package/lib/pages/terminators/terminators-page.component.d.ts.map +0 -1
- package/lib/pages/terminators/terminators-page.service.d.ts +0 -32
- package/lib/pages/terminators/terminators-page.service.d.ts.map +0 -1
- package/lib/pages/transit-routers/transit-routers-page.component.d.ts +0 -35
- package/lib/pages/transit-routers/transit-routers-page.component.d.ts.map +0 -1
- package/lib/pages/transit-routers/transit-routers-page.service.d.ts +0 -50
- package/lib/pages/transit-routers/transit-routers-page.service.d.ts.map +0 -1
- package/lib/safe.pipe.d.ts +0 -11
- package/lib/safe.pipe.d.ts.map +0 -1
- package/lib/services/auth.service.d.ts +0 -21
- package/lib/services/auth.service.d.ts.map +0 -1
- package/lib/services/console-events.service.d.ts +0 -12
- package/lib/services/console-events.service.d.ts.map +0 -1
- package/lib/services/csv-download.service.d.ts +0 -11
- package/lib/services/csv-download.service.d.ts.map +0 -1
- package/lib/services/deactivate-guard.service.d.ts +0 -14
- package/lib/services/deactivate-guard.service.d.ts.map +0 -1
- package/lib/services/login-service.class.d.ts +0 -30
- package/lib/services/login-service.class.d.ts.map +0 -1
- package/lib/services/node-data.service.d.ts +0 -38
- package/lib/services/node-data.service.d.ts.map +0 -1
- package/lib/services/noop-login.service.d.ts +0 -22
- package/lib/services/noop-login.service.d.ts.map +0 -1
- package/lib/services/schema.service.d.ts +0 -63
- package/lib/services/schema.service.d.ts.map +0 -1
- package/lib/services/settings-service.class.d.ts +0 -36
- package/lib/services/settings-service.class.d.ts.map +0 -1
- package/lib/services/settings.service.d.ts +0 -20
- package/lib/services/settings.service.d.ts.map +0 -1
- package/lib/services/tab-name.service.d.ts +0 -20
- package/lib/services/tab-name.service.d.ts.map +0 -1
- package/lib/services/validation.service.d.ts +0 -20
- package/lib/services/validation.service.d.ts.map +0 -1
- package/lib/services/ziti-controller-data.service.d.ts +0 -36
- package/lib/services/ziti-controller-data.service.d.ts.map +0 -1
- package/lib/services/ziti-data.service.d.ts +0 -49
- package/lib/services/ziti-data.service.d.ts.map +0 -1
- package/lib/services/ziti-domain-controller.service.d.ts +0 -13
- package/lib/services/ziti-domain-controller.service.d.ts.map +0 -1
- package/lib/shared/list-page-component.class.d.ts +0 -57
- package/lib/shared/list-page-component.class.d.ts.map +0 -1
- package/lib/shared/list-page-service.class.d.ts +0 -81
- package/lib/shared/list-page-service.class.d.ts.map +0 -1
- package/lib/urls.d.ts +0 -34
- package/lib/urls.d.ts.map +0 -1
- package/lib/zac-routing.module.d.ts +0 -8
- package/lib/zac-routing.module.d.ts.map +0 -1
- package/lib/ziti-console-lib.module.d.ts +0 -121
- package/lib/ziti-console-lib.module.d.ts.map +0 -1
- package/lib/ziti-console.constants.d.ts +0 -5
- package/lib/ziti-console.constants.d.ts.map +0 -1
- package/openziti-ziti-console-lib.d.ts.map +0 -1
- package/public-api.d.ts +0 -127
- package/public-api.d.ts.map +0 -1
package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs
DELETED
|
@@ -1,373 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import _ from 'lodash';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
class Link {
|
|
5
|
-
}
|
|
6
|
-
class Node {
|
|
7
|
-
}
|
|
8
|
-
class ServiceHostNode {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.intercept = [];
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
export class ServiceData {
|
|
14
|
-
}
|
|
15
|
-
export class IdentityServicePathHelper {
|
|
16
|
-
constructor() {
|
|
17
|
-
this.posy_for_group3 = 0;
|
|
18
|
-
}
|
|
19
|
-
getEndpointGraphObj(endpoint, bindIdnetities, edgerouters, selectedServiceOb, serviceConfigs, filterText = '') {
|
|
20
|
-
let endpointNodeOb = null;
|
|
21
|
-
const rootOb = new RootJson();
|
|
22
|
-
const bindNode = bindIdnetities.find((nd) => nd.id === endpoint.id);
|
|
23
|
-
if (!bindNode) {
|
|
24
|
-
endpointNodeOb = createEndpoint(endpoint);
|
|
25
|
-
endpointNodeOb.group = '1';
|
|
26
|
-
endpointNodeOb.posx = 50;
|
|
27
|
-
endpointNodeOb.posy = 200;
|
|
28
|
-
rootOb.addNode(endpointNodeOb);
|
|
29
|
-
}
|
|
30
|
-
let publicRouterNodes = [];
|
|
31
|
-
let posy = 0;
|
|
32
|
-
_.isArray(edgerouters) && edgerouters.forEach((nd) => {
|
|
33
|
-
const nodeOb = createERNode(nd);
|
|
34
|
-
nodeOb.group = '2a';
|
|
35
|
-
nodeOb.posx = 250;
|
|
36
|
-
posy = posy + 100;
|
|
37
|
-
nodeOb.posy = posy;
|
|
38
|
-
publicRouterNodes.push(nodeOb);
|
|
39
|
-
rootOb.addNode(nodeOb);
|
|
40
|
-
});
|
|
41
|
-
let publicRouterNodesForEndpointTunnelers = [];
|
|
42
|
-
const posx_for_group3 = 550;
|
|
43
|
-
this.posy_for_group3 = 0;
|
|
44
|
-
let group3Ids = [];
|
|
45
|
-
let posy_for_group4 = 150;
|
|
46
|
-
const group4Nodes = [];
|
|
47
|
-
const serviceIPPorts = [];
|
|
48
|
-
const srNode = new ServiceHostNode();
|
|
49
|
-
srNode.id = selectedServiceOb.id;
|
|
50
|
-
srNode.name = selectedServiceOb.name;
|
|
51
|
-
srNode.intercept = serviceConfigAlias(serviceConfigs);
|
|
52
|
-
srNode.type = 'Config Service';
|
|
53
|
-
srNode.group = '4';
|
|
54
|
-
srNode.status = '1';
|
|
55
|
-
group4Nodes.push(srNode);
|
|
56
|
-
rootOb.addNode(srNode);
|
|
57
|
-
_.isArray(bindIdnetities) && bindIdnetities.forEach((ePoint) => {
|
|
58
|
-
if (group3Ids.indexOf(ePoint.id) < 0) {
|
|
59
|
-
group3Ids.push(ePoint.id);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
// create links between nodes
|
|
63
|
-
// in group3, remove routers/ep that exist in group2
|
|
64
|
-
this.posy_for_group3 = 165;
|
|
65
|
-
let grp3Yincrement = 100;
|
|
66
|
-
const group3Nodes = [];
|
|
67
|
-
let countgrp3 = 0;
|
|
68
|
-
group3Ids.find((nid) => {
|
|
69
|
-
// let's check if the service hosted is an Endpoint
|
|
70
|
-
let grp3Node = findEndpoint(nid, bindIdnetities);
|
|
71
|
-
if (grp3Node) {
|
|
72
|
-
grp3Node.group = '3';
|
|
73
|
-
grp3Node.posx = posx_for_group3;
|
|
74
|
-
grp3Node.posy = this.posy_for_group3;
|
|
75
|
-
this.posy_for_group3 = this.posy_for_group3 + 125;
|
|
76
|
-
group3Nodes.push(grp3Node);
|
|
77
|
-
countgrp3++;
|
|
78
|
-
rootOb.addNode(grp3Node);
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
grp3Yincrement = countgrp3 > 2 ? 75 : 100;
|
|
82
|
-
if (countgrp3 === 1) {
|
|
83
|
-
this.posy_for_group3 = 160;
|
|
84
|
-
}
|
|
85
|
-
else if (countgrp3 === 2) {
|
|
86
|
-
this.posy_for_group3 = 120;
|
|
87
|
-
}
|
|
88
|
-
else if (countgrp3 >= 5) {
|
|
89
|
-
this.posy_for_group3 = 50;
|
|
90
|
-
grp3Yincrement = 75;
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
this.posy_for_group3 = 73;
|
|
94
|
-
}
|
|
95
|
-
if (group3Nodes)
|
|
96
|
-
group3Nodes.find((node3) => {
|
|
97
|
-
if (node3.group === '3') {
|
|
98
|
-
node3.posy = this.posy_for_group3;
|
|
99
|
-
this.posy_for_group3 = this.posy_for_group3 + grp3Yincrement;
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
if (group4Nodes && group4Nodes.length === 1) {
|
|
103
|
-
posy_for_group4 = 200;
|
|
104
|
-
}
|
|
105
|
-
group4Nodes.find((nd4) => {
|
|
106
|
-
// nd4.posx = group3Nodes && group3Nodes.length > 0 && !group3Nodes[0].type.includes("Public Hosted") ? posx_for_group3 + 175 : posx_for_group3;
|
|
107
|
-
nd4.posx = posx_for_group3 + 175;
|
|
108
|
-
nd4.posy = posy_for_group4;
|
|
109
|
-
posy_for_group4 = posy_for_group4 + 100;
|
|
110
|
-
});
|
|
111
|
-
let countPublicNodes = 0;
|
|
112
|
-
rootOb.nodes.find((pNode) => {
|
|
113
|
-
if (pNode.group.includes('2')) {
|
|
114
|
-
countPublicNodes = countPublicNodes + 1;
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
publicRouterNodes = [];
|
|
118
|
-
let posy_group2 = 100;
|
|
119
|
-
let yIncrement = 0;
|
|
120
|
-
if (countPublicNodes === 1) {
|
|
121
|
-
posy_group2 = 200;
|
|
122
|
-
}
|
|
123
|
-
else if (countPublicNodes >= 2 && countPublicNodes < 5) {
|
|
124
|
-
posy_group2 = 60;
|
|
125
|
-
yIncrement = 80;
|
|
126
|
-
}
|
|
127
|
-
else if (countPublicNodes >= 5 && countPublicNodes < 10) {
|
|
128
|
-
posy_group2 = 40;
|
|
129
|
-
yIncrement = 50;
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
posy_group2 = 40;
|
|
133
|
-
yIncrement = 40;
|
|
134
|
-
}
|
|
135
|
-
rootOb.nodes.find((publicNode) => {
|
|
136
|
-
if (publicNode.group.includes('2')) {
|
|
137
|
-
publicNode.posx = 275;
|
|
138
|
-
publicNode.posy = posy_group2;
|
|
139
|
-
posy_group2 = posy_group2 + yIncrement;
|
|
140
|
-
publicRouterNodes.push(publicNode);
|
|
141
|
-
if (publicNode.group === '2b') {
|
|
142
|
-
group3Nodes.push(publicNode);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
for (let k1 = 0; k1 < rootOb.nodes.length; k1++) {
|
|
147
|
-
const nd = rootOb.nodes[k1];
|
|
148
|
-
if (endpointNodeOb !== null && (nd.group === '2a' || nd.group === '2ab' || nd.group === '2ac')) {
|
|
149
|
-
const lnk = new Link();
|
|
150
|
-
lnk.source = endpointNodeOb.id;
|
|
151
|
-
lnk.sourceName = endpointNodeOb.name;
|
|
152
|
-
lnk.target = nd.id;
|
|
153
|
-
lnk.targetName = nd.name;
|
|
154
|
-
lnk.status = getEndpointToRouterLinkState(endpointNodeOb, nd);
|
|
155
|
-
lnk.weight = getWeight(lnk.status);
|
|
156
|
-
rootOb.addLink(lnk);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
for (let k1 = 0; k1 < rootOb.nodes.length; k1++) {
|
|
160
|
-
const nd1 = rootOb.nodes[k1];
|
|
161
|
-
if (nd1.group.includes('2')) {
|
|
162
|
-
for (let k2 = 0; k2 < group3Nodes.length; k2++) {
|
|
163
|
-
const nd2 = group3Nodes[k2];
|
|
164
|
-
if (nd2.group === '2b' || nd2.group === '2ab') {
|
|
165
|
-
continue;
|
|
166
|
-
} // link not required.
|
|
167
|
-
const lnk = new Link();
|
|
168
|
-
lnk.source = nd1.id;
|
|
169
|
-
lnk.sourceName = nd1.name;
|
|
170
|
-
lnk.target = nd2.id;
|
|
171
|
-
lnk.targetName = nd2.name;
|
|
172
|
-
if (nd1.type.includes('Router') && nd2.type.includes('Router')) {
|
|
173
|
-
lnk.status =
|
|
174
|
-
nd1.status === 'PROVISIONED' &&
|
|
175
|
-
nd1.online === 'Yes' &&
|
|
176
|
-
nd2.status === 'PROVISIONED' &&
|
|
177
|
-
nd2.online === 'Yes'
|
|
178
|
-
? 1
|
|
179
|
-
: 0;
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
lnk.status = getEndpointToRouterLinkState(nd2, nd1);
|
|
183
|
-
}
|
|
184
|
-
lnk.weight = getWeight(lnk.status);
|
|
185
|
-
rootOb.addLink(lnk);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
for (let k0 = 0; k0 < group4Nodes.length; k0++) {
|
|
190
|
-
for (let k1 = 0; k1 < group3Nodes.length; k1++) {
|
|
191
|
-
const lnk = new Link();
|
|
192
|
-
lnk.source = group3Nodes[k1].id;
|
|
193
|
-
lnk.sourceName = group3Nodes[k1].name;
|
|
194
|
-
lnk.target = group4Nodes[k0].id;
|
|
195
|
-
lnk.targetName = group4Nodes[k0].name;
|
|
196
|
-
lnk.weight = 1;
|
|
197
|
-
const foundNd = rootOb.nodes.find(function (rnd) {
|
|
198
|
-
return rnd.id === group3Nodes[k1].id;
|
|
199
|
-
});
|
|
200
|
-
if (foundNd.type.includes('Router')) {
|
|
201
|
-
lnk.status = foundNd.online === 'Yes' ? 1 : 0;
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
lnk.status = getServiceToEndpointLinkState(group3Nodes[k1], group4Nodes[k0]);
|
|
205
|
-
lnk.weight = getWeight(lnk.status);
|
|
206
|
-
}
|
|
207
|
-
rootOb.addLink(lnk);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
function serviceConfigAlias(configs) {
|
|
211
|
-
let intercept = [];
|
|
212
|
-
_.isArray(configs) && configs.forEach((conf) => {
|
|
213
|
-
let addresses = '';
|
|
214
|
-
let ports = '';
|
|
215
|
-
if (conf.data.addresses) {
|
|
216
|
-
addresses = conf.data.addresses.toString();
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
addresses = conf.data.address;
|
|
220
|
-
}
|
|
221
|
-
if (_.isArray(conf.data.portRanges)) {
|
|
222
|
-
conf.data.portRanges.forEach((portsJson) => {
|
|
223
|
-
for (const key in portsJson) {
|
|
224
|
-
ports = ports + key + ':' + portsJson[key] + ' ';
|
|
225
|
-
}
|
|
226
|
-
ports = ports + ';';
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
ports = conf.data.port;
|
|
231
|
-
}
|
|
232
|
-
intercept.push(addresses);
|
|
233
|
-
intercept.push(ports);
|
|
234
|
-
});
|
|
235
|
-
return intercept;
|
|
236
|
-
}
|
|
237
|
-
function findEndpoint(endpointId, endpoints) {
|
|
238
|
-
let node = null;
|
|
239
|
-
if (endpointId === null) {
|
|
240
|
-
return null;
|
|
241
|
-
}
|
|
242
|
-
const ePoint = endpoints.find(function (er) {
|
|
243
|
-
return er.id === endpointId;
|
|
244
|
-
});
|
|
245
|
-
if (ePoint) {
|
|
246
|
-
node = createEndpoint(ePoint);
|
|
247
|
-
node.type = 'Hosted Identity';
|
|
248
|
-
}
|
|
249
|
-
return node;
|
|
250
|
-
} // end of findEndpoint
|
|
251
|
-
function createEndpoint(ePoint) {
|
|
252
|
-
const node = new Node();
|
|
253
|
-
node.id = ePoint.id;
|
|
254
|
-
node.name = ePoint.name;
|
|
255
|
-
node.type = 'Identity';
|
|
256
|
-
if (_.has(ePoint, 'edgeRouterConnectionStatus')) {
|
|
257
|
-
node.routerConnection = ePoint.edgeRouterConnectionStatus === 'offline' ? 'No' : 'Yes';
|
|
258
|
-
node.apiSession = node.routerConnection;
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
node.routerConnection = ePoint['hasEdgeRouterConnection'] === false ? 'No' : 'Yes';
|
|
262
|
-
node.apiSession = ePoint['hasApiSession'] === false ? 'No' : 'Yes';
|
|
263
|
-
}
|
|
264
|
-
node.os = ePoint.envInfo ? ePoint.envInfo.os : '';
|
|
265
|
-
node.mfaEnabled = ePoint.isMfaEnabled;
|
|
266
|
-
node.status = ePoint.envInfo && ePoint.envInfo.os !== null ? 'Registered' : 'Un-Registered';
|
|
267
|
-
return node;
|
|
268
|
-
}
|
|
269
|
-
function createERNode(erouter) {
|
|
270
|
-
const nodeOb = new Node();
|
|
271
|
-
nodeOb.id = erouter.id;
|
|
272
|
-
nodeOb.name = erouter.name;
|
|
273
|
-
nodeOb.status = erouter.isVerified === true ? 'Registered' : 'Un-Registered';
|
|
274
|
-
nodeOb.online = erouter.isOnline === false ? 'No' : 'Yes';
|
|
275
|
-
nodeOb.tunnelerEnabled = erouter.isTunnelerEnabled === false ? 'No' : 'Yes';
|
|
276
|
-
nodeOb.type = 'EdgeRouter';
|
|
277
|
-
return nodeOb;
|
|
278
|
-
}
|
|
279
|
-
function findEdgeRouterForId(routerId, edgerouters) {
|
|
280
|
-
const erouter = edgerouters.find((er) => {
|
|
281
|
-
// if (er.id === routerId) {
|
|
282
|
-
return er.id === routerId;
|
|
283
|
-
// }
|
|
284
|
-
});
|
|
285
|
-
if (erouter) {
|
|
286
|
-
return createERNode(erouter);
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
return null;
|
|
290
|
-
}
|
|
291
|
-
} // end of findEdgeRouterForId
|
|
292
|
-
function getEndpointToRouterLinkState(endpointNode, routerNode) {
|
|
293
|
-
let linkstate = 0;
|
|
294
|
-
if (routerNode.status === 'ERROR') {
|
|
295
|
-
linkstate = 0;
|
|
296
|
-
}
|
|
297
|
-
else if (endpointNode.status === 'Un-Registered') {
|
|
298
|
-
linkstate = -1;
|
|
299
|
-
}
|
|
300
|
-
else if (endpointNode.apiSession === 'No') {
|
|
301
|
-
linkstate = 0;
|
|
302
|
-
}
|
|
303
|
-
else if (endpointNode.routerConnection === 'No') {
|
|
304
|
-
linkstate = -1;
|
|
305
|
-
}
|
|
306
|
-
else if (routerNode.online === 'Yes' && endpointNode.routerConnection === 'Yes') {
|
|
307
|
-
linkstate = 1;
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
linkstate = -1;
|
|
311
|
-
}
|
|
312
|
-
return linkstate;
|
|
313
|
-
}
|
|
314
|
-
function getServiceToEndpointLinkState(endpointNode, serviceNode) {
|
|
315
|
-
let linkstate = 0;
|
|
316
|
-
if (endpointNode.status === 'Un-Registered' || serviceNode.intercept.includes('No')) {
|
|
317
|
-
linkstate = -1;
|
|
318
|
-
}
|
|
319
|
-
else if (endpointNode.apiSession === 'No') {
|
|
320
|
-
linkstate = 0;
|
|
321
|
-
}
|
|
322
|
-
else if (endpointNode.status === 'Registered' && endpointNode.routerConnection === 'Yes') {
|
|
323
|
-
linkstate = 1;
|
|
324
|
-
}
|
|
325
|
-
else {
|
|
326
|
-
linkstate = 0;
|
|
327
|
-
}
|
|
328
|
-
return linkstate;
|
|
329
|
-
}
|
|
330
|
-
function getWeight(linkState) {
|
|
331
|
-
return linkState === -1 ? 5 : 1;
|
|
332
|
-
}
|
|
333
|
-
return rootOb;
|
|
334
|
-
} // end of NEW Function
|
|
335
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
336
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathHelper, providedIn: 'root' }); }
|
|
337
|
-
}
|
|
338
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathHelper, decorators: [{
|
|
339
|
-
type: Injectable,
|
|
340
|
-
args: [{
|
|
341
|
-
providedIn: 'root',
|
|
342
|
-
}]
|
|
343
|
-
}], ctorParameters: function () { return []; } });
|
|
344
|
-
class RootJson {
|
|
345
|
-
constructor() {
|
|
346
|
-
this.nodes = [];
|
|
347
|
-
this.links = [];
|
|
348
|
-
}
|
|
349
|
-
addNode(newObject) {
|
|
350
|
-
const foundObj = this.nodes.find(function (nd) {
|
|
351
|
-
// if (nd.id === newObject.id) {
|
|
352
|
-
// nd = newObject;
|
|
353
|
-
return nd.id === newObject.id;
|
|
354
|
-
// }
|
|
355
|
-
});
|
|
356
|
-
if (!foundObj) {
|
|
357
|
-
this.nodes.push(newObject);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
;
|
|
361
|
-
replaceNode(newObject) {
|
|
362
|
-
const indx = this.nodes.findIndex(nd => nd.id === newObject.id);
|
|
363
|
-
if (indx >= 0) {
|
|
364
|
-
this.nodes[indx] = newObject;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
;
|
|
368
|
-
addLink(newObject) {
|
|
369
|
-
this.links.push(newObject);
|
|
370
|
-
}
|
|
371
|
-
;
|
|
372
|
-
}
|
|
373
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wYXRoLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL2lkZW50aXR5LXNlcnZpY2UtcGF0aC9pZGVudGl0eS1zZXJ2aWNlLXBhdGguaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDOztBQUV2QixNQUFNLElBQUk7Q0FPVDtBQUVELE1BQU0sSUFBSTtDQWdCVDtBQUVELE1BQU0sZUFBZTtJQUFyQjtRQWtCSSxjQUFTLEdBQUcsRUFBRSxDQUFDO0lBR25CLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxXQUFXO0NBR3ZCO0FBS0QsTUFBTSxPQUFPLHlCQUF5QjtJQUdsQztRQUZBLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO0lBR2pCLENBQUM7SUFFRyxtQkFBbUIsQ0FDdEIsUUFBUSxFQUNSLGNBQWMsRUFDZCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxVQUFVLEdBQUcsRUFBRTtRQUVmLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sUUFBUSxHQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBRyxDQUFDO1FBQzFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWixjQUFjLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQzNCLGNBQWMsQ0FBQyxJQUFJLEdBQUcs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LENBQUM7SUFDOUIsQ0FBQztJQUFBLENBQUM7Q0FFUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY2xhc3MgTGluayB7XG4gICAgc291cmNlO1xuICAgIHNvdXJjZU5hbWU7XG4gICAgdGFyZ2V0O1xuICAgIHRhcmdldE5hbWU7XG4gICAgd2VpZ2h0O1xuICAgIHN0YXR1cztcbn1cblxuY2xhc3MgTm9kZSB7XG4gICAgaWQ7XG4gICAgbmFtZTtcbiAgICBwcm92aWRlcjtcbiAgICBncm91cDtcbiAgICBwb3N4O1xuICAgIHBvc3k7XG4gICAgc3RhdHVzO1xuICAgIG9ubGluZTtcbiAgICBhcGlTZXNzaW9uO1xuICAgIHJvdXRlckNvbm5lY3Rpb247XG4gICAgdHVubmVsZXJFbmFibGVkO1xuICAgIG9zO1xuICAgIG1mYUVuYWJsZWQ7XG4gICAgdHlwZTtcbiAgICB1c2FnZTtcbn1cblxuY2xhc3MgU2VydmljZUhvc3ROb2RlIHtcbiAgICBpZDtcbiAgICBuYW1lO1xuICAgIGdyb3VwO1xuICAgIHBvc3g7XG4gICAgcG9zeTtcbiAgICBpbnRlcmNlcHRJcHM7XG4gICAgaW50ZXJjZXB0UG9ydHM7XG4gICAgaW50ZXJjZXB0UHJvdG9jb2xzO1xuICAgIGZvcndhcmRlZEhvc3Q7XG4gICAgaG9zdE5hbWVzO1xuICAgIGZvcndhcmRlZFBvcnQ7XG4gICAgaG9zdFBvcnRzO1xuICAgIGZvcndhcmRlZFByb3RvY29sO1xuICAgIGhvc3RQcm90b2NvbHM7XG4gICAgc3RhdHVzO1xuICAgIHR5cGU7XG4gICAgdXNhZ2U7XG4gICAgaW50ZXJjZXB0ID0gW107XG4gICAgY29uZmlnQWRkcmVzcztcbiAgICBjb25maWdQb3J0cztcbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VEYXRhIHtcbiAgICBpZDtcbiAgICBuYW1lO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJZGVudGl0eVNlcnZpY2VQYXRoSGVscGVyIHtcbiAgICBwb3N5X2Zvcl9ncm91cDMgPSAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgKSB7fVxuXG4gICAgcHVibGljIGdldEVuZHBvaW50R3JhcGhPYmooXG4gICAgICAgIGVuZHBvaW50LFxuICAgICAgICBiaW5kSWRuZXRpdGllcyxcbiAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgIHNlbGVjdGVkU2VydmljZU9iLFxuICAgICAgICBzZXJ2aWNlQ29uZmlncyxcbiAgICAgICAgZmlsdGVyVGV4dCA9ICcnXG4gICAgKSB7XG4gICAgICAgIGxldCBlbmRwb2ludE5vZGVPYiA9IG51bGw7XG4gICAgICAgIGNvbnN0IHJvb3RPYiA9IG5ldyBSb290SnNvbigpO1xuICAgICAgICBjb25zdCBiaW5kTm9kZSA9ICBiaW5kSWRuZXRpdGllcy5maW5kKCAobmQpID0+ICBuZC5pZCA9PT0gZW5kcG9pbnQuaWQgICk7XG4gICAgICAgaWYgKCFiaW5kTm9kZSkge1xuICAgICAgICAgIGVuZHBvaW50Tm9kZU9iID0gY3JlYXRlRW5kcG9pbnQoZW5kcG9pbnQpO1xuICAgICAgICAgIGVuZHBvaW50Tm9kZU9iLmdyb3VwID0gJzEnO1xuICAgICAgICAgIGVuZHBvaW50Tm9kZU9iLnBvc3ggPSA1MDtcbiAgICAgICAgICBlbmRwb2ludE5vZGVPYi5wb3N5ID0gMjAwO1xuICAgICAgICAgIHJvb3RPYi5hZGROb2RlKGVuZHBvaW50Tm9kZU9iKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcHVibGljUm91dGVyTm9kZXMgPSBbXTtcbiAgICAgICAgbGV0IHBvc3kgPSAwO1xuICAgICAgICBfLmlzQXJyYXkoZWRnZXJvdXRlcnMpICYmIGVkZ2Vyb3V0ZXJzLmZvckVhY2goKG5kKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlT2IgPSBjcmVhdGVFUk5vZGUobmQpO1xuICAgICAgICAgICAgbm9kZU9iLmdyb3VwID0gJzJhJztcbiAgICAgICAgICAgIG5vZGVPYi5wb3N4ID0gMjUwO1xuICAgICAgICAgICAgcG9zeSA9IHBvc3kgKyAxMDA7XG4gICAgICAgICAgICBub2RlT2IucG9zeSA9IHBvc3k7XG4gICAgICAgICAgICBwdWJsaWNSb3V0ZXJOb2Rlcy5wdXNoKG5vZGVPYik7XG4gICAgICAgICAgICByb290T2IuYWRkTm9kZShub2RlT2IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgcHVibGljUm91dGVyTm9kZXNGb3JFbmRwb2ludFR1bm5lbGVycyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHBvc3hfZm9yX2dyb3VwMyA9IDU1MDtcbiAgICAgICAgdGhpcy5wb3N5X2Zvcl9ncm91cDMgPSAwO1xuICAgICAgICBsZXQgZ3JvdXAzSWRzID0gW107XG4gICAgICAgIGxldCBwb3N5X2Zvcl9ncm91cDQgPSAxNTA7XG4gICAgICAgIGNvbnN0IGdyb3VwNE5vZGVzID0gW107XG4gICAgICAgIGNvbnN0IHNlcnZpY2VJUFBvcnRzID0gW107XG4gICAgICAgICAgIGNvbnN0IHNyTm9kZSA9IG5ldyBTZXJ2aWNlSG9zdE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgc3JOb2RlLmlkID0gc2VsZWN0ZWRTZXJ2aWNlT2IuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgIHNyTm9kZS5uYW1lID0gc2VsZWN0ZWRTZXJ2aWNlT2IubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgc3JOb2RlLmludGVyY2VwdCA9IHNlcnZpY2VDb25maWdBbGlhcyhzZXJ2aWNlQ29uZmlncyk7XG4gICAgICAgICAgICAgICAgICAgICAgIHNyTm9kZS50eXBlID0gJ0NvbmZpZyBTZXJ2aWNlJztcbiAgICAgICAgICAgICAgICAgICAgICAgc3JOb2RlLmdyb3VwID0gJzQnO1xuICAgICAgICAgICAgICAgICAgICAgICBzck5vZGUuc3RhdHVzID0gJzEnO1xuICAgICAgICAgICAgICAgICAgICAgICBncm91cDROb2Rlcy5wdXNoKHNyTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgIHJvb3RPYi5hZGROb2RlKHNyTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIF8uaXNBcnJheShiaW5kSWRuZXRpdGllcykgJiYgYmluZElkbmV0aXRpZXMuZm9yRWFjaCgoZVBvaW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwM0lkcy5pbmRleE9mKGVQb2ludC5pZCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAzSWRzLnB1c2goZVBvaW50LmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBjcmVhdGUgbGlua3MgYmV0d2VlbiBub2Rlc1xuXG4gICAgICAgIC8vIGluIGdyb3VwMywgIHJlbW92ZSAgcm91dGVycy9lcCAgdGhhdCBleGlzdCBpbiBncm91cDJcbiAgICAgICAgdGhpcy5wb3N5X2Zvcl9ncm91cDMgPSAxNjU7XG4gICAgICAgIGxldCBncnAzWWluY3JlbWVudCA9IDEwMDtcblxuICAgICAgICBjb25zdCBncm91cDNOb2RlcyA9IFtdO1xuICAgICAgICBsZXQgY291bnRncnAzID0gMDtcbiAgICAgICAgZ3JvdXAzSWRzLmZpbmQoKG5pZCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGxldCdzIGNoZWNrIGlmIHRoZSBzZXJ2aWNlIGhvc3RlZCBpcyBhbiBFbmRwb2ludFxuICAgICAgICAgICAgICAgbGV0IGdycDNOb2RlID0gZmluZEVuZHBvaW50KG5pZCwgYmluZElkbmV0aXRpZXMpO1xuICAgICAgICAgICAgICAgICAgaWYoZ3JwM05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JwM05vZGUuZ3JvdXAgPSAnMyc7XG4gICAgICAgICAgICAgICAgICAgIGdycDNOb2RlLnBvc3ggPSBwb3N4X2Zvcl9ncm91cDM7XG4gICAgICAgICAgICAgICAgICAgIGdycDNOb2RlLnBvc3kgPSB0aGlzLnBvc3lfZm9yX2dyb3VwMztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N5X2Zvcl9ncm91cDMgPSB0aGlzLnBvc3lfZm9yX2dyb3VwMyArIDEyNTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAzTm9kZXMucHVzaChncnAzTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Z3JwMysrO1xuICAgICAgICAgICAgICAgICAgICByb290T2IuYWRkTm9kZShncnAzTm9kZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGdycDNZaW5jcmVtZW50ID0gY291bnRncnAzID4gMiA/IDc1IDogMTAwO1xuICAgICAgICBpZiAoY291bnRncnAzID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IDE2MDtcbiAgICAgICAgfSBlbHNlIGlmIChjb3VudGdycDMgPT09IDIpIHtcbiAgICAgICAgICAgIHRoaXMucG9zeV9mb3JfZ3JvdXAzID0gMTIwO1xuICAgICAgICB9IGVsc2UgaWYgKGNvdW50Z3JwMyA+PSA1KSB7XG4gICAgICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IDUwO1xuICAgICAgICAgICAgZ3JwM1lpbmNyZW1lbnQgPSA3NTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9zeV9mb3JfZ3JvdXAzID0gNzM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ3JvdXAzTm9kZXMpXG4gICAgICAgICAgICBncm91cDNOb2Rlcy5maW5kKChub2RlMykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChub2RlMy5ncm91cCA9PT0gJzMnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUzLnBvc3kgPSB0aGlzLnBvc3lfZm9yX2dyb3VwMztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N5X2Zvcl9ncm91cDMgPSB0aGlzLnBvc3lfZm9yX2dyb3VwMyArIGdycDNZaW5jcmVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChncm91cDROb2RlcyAmJiBncm91cDROb2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHBvc3lfZm9yX2dyb3VwNCA9IDIwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdyb3VwNE5vZGVzLmZpbmQoKG5kNCkgPT4ge1xuICAgICAgICAgICAvLyBuZDQucG9zeCA9IGdyb3VwM05vZGVzICAmJiBncm91cDNOb2Rlcy5sZW5ndGggPiAwICAmJiAhZ3JvdXAzTm9kZXNbMF0udHlwZS5pbmNsdWRlcyhcIlB1YmxpYyBIb3N0ZWRcIikgPyBwb3N4X2Zvcl9ncm91cDMgKyAxNzUgOiBwb3N4X2Zvcl9ncm91cDM7XG4gICAgICAgICAgICBuZDQucG9zeCA9IHBvc3hfZm9yX2dyb3VwMyArIDE3NTtcbiAgICAgICAgICAgIG5kNC5wb3N5ID0gcG9zeV9mb3JfZ3JvdXA0O1xuICAgICAgICAgICAgcG9zeV9mb3JfZ3JvdXA0ID0gcG9zeV9mb3JfZ3JvdXA0ICsgMTAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgY291bnRQdWJsaWNOb2RlcyA9IDA7XG4gICAgICAgIHJvb3RPYi5ub2Rlcy5maW5kKChwTm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHBOb2RlLmdyb3VwLmluY2x1ZGVzKCcyJykpIHtcbiAgICAgICAgICAgICAgICBjb3VudFB1YmxpY05vZGVzID0gY291bnRQdWJsaWNOb2RlcyArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHB1YmxpY1JvdXRlck5vZGVzID0gW107XG4gICAgICAgIGxldCBwb3N5X2dyb3VwMiA9IDEwMDtcbiAgICAgICAgbGV0IHlJbmNyZW1lbnQgPSAwO1xuICAgICAgICBpZiAoY291bnRQdWJsaWNOb2RlcyA9PT0gMSkge1xuICAgICAgICAgICAgcG9zeV9ncm91cDIgPSAyMDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY291bnRQdWJsaWNOb2RlcyA+PSAyICYmIGNvdW50UHVibGljTm9kZXMgPCA1KSB7XG4gICAgICAgICAgICBwb3N5X2dyb3VwMiA9IDYwO1xuICAgICAgICAgICAgeUluY3JlbWVudCA9IDgwO1xuICAgICAgICB9IGVsc2UgaWYgKGNvdW50UHVibGljTm9kZXMgPj0gNSAmJiBjb3VudFB1YmxpY05vZGVzIDwgMTApIHtcbiAgICAgICAgICAgIHBvc3lfZ3JvdXAyID0gNDA7XG4gICAgICAgICAgICB5SW5jcmVtZW50ID0gNTA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb3N5X2dyb3VwMiA9IDQwO1xuICAgICAgICAgICAgeUluY3JlbWVudCA9IDQwO1xuICAgICAgICB9XG5cbiAgICAgICAgcm9vdE9iLm5vZGVzLmZpbmQoKHB1YmxpY05vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChwdWJsaWNOb2RlLmdyb3VwLmluY2x1ZGVzKCcyJykpIHtcbiAgICAgICAgICAgICAgICBwdWJsaWNOb2RlLnBvc3ggPSAyNzU7XG4gICAgICAgICAgICAgICAgcHVibGljTm9kZS5wb3N5ID0gcG9zeV9ncm91cDI7XG4gICAgICAgICAgICAgICAgcG9zeV9ncm91cDIgPSBwb3N5X2dyb3VwMiArIHlJbmNyZW1lbnQ7XG4gICAgICAgICAgICAgICAgcHVibGljUm91dGVyTm9kZXMucHVzaChwdWJsaWNOb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAocHVibGljTm9kZS5ncm91cCA9PT0gJzJiJykge1xuICAgICAgICAgICAgICAgICAgICBncm91cDNOb2Rlcy5wdXNoKHB1YmxpY05vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cblxuICAgICAgICBmb3IgKGxldCBrMSA9IDA7IGsxIDwgcm9vdE9iLm5vZGVzLmxlbmd0aDsgazErKykge1xuICAgICAgICAgICAgY29uc3QgbmQgPSByb290T2Iubm9kZXNbazFdO1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50Tm9kZU9iICE9PW51bGwgJiYgKG5kLmdyb3VwID09PSAnMmEnIHx8IG5kLmdyb3VwID09PSAnMmFiJyB8fCBuZC5ncm91cCA9PT0gJzJhYycpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG5rID0gbmV3IExpbmsoKTtcbiAgICAgICAgICAgICAgICBsbmsuc291cmNlID0gZW5kcG9pbnROb2RlT2IuaWQ7XG4gICAgICAgICAgICAgICAgbG5rLnNvdXJjZU5hbWUgPSBlbmRwb2ludE5vZGVPYi5uYW1lO1xuICAgICAgICAgICAgICAgIGxuay50YXJnZXQgPSBuZC5pZDtcbiAgICAgICAgICAgICAgICBsbmsudGFyZ2V0TmFtZSA9IG5kLm5hbWU7XG4gICAgICAgICAgICAgICAgbG5rLnN0YXR1cyA9IGdldEVuZHBvaW50VG9Sb3V0ZXJMaW5rU3RhdGUoZW5kcG9pbnROb2RlT2IsIG5kKTtcbiAgICAgICAgICAgICAgICBsbmsud2VpZ2h0ID0gZ2V0V2VpZ2h0KGxuay5zdGF0dXMpO1xuICAgICAgICAgICAgICAgIHJvb3RPYi5hZGRMaW5rKGxuayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBrMSA9IDA7IGsxIDwgcm9vdE9iLm5vZGVzLmxlbmd0aDsgazErKykge1xuICAgICAgICAgICAgY29uc3QgbmQxID0gcm9vdE9iLm5vZGVzW2sxXTtcblxuICAgICAgICAgICAgaWYgKG5kMS5ncm91cC5pbmNsdWRlcygnMicpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgazIgPSAwOyBrMiA8IGdyb3VwM05vZGVzLmxlbmd0aDsgazIrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZDIgPSBncm91cDNOb2Rlc1trMl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZDIuZ3JvdXAgPT09ICcyYicgfHwgbmQyLmdyb3VwID09PSAnMmFiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH0gLy8gbGluayBub3QgcmVxdWlyZWQuXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG5rID0gbmV3IExpbmsoKTtcbiAgICAgICAgICAgICAgICAgICAgbG5rLnNvdXJjZSA9IG5kMS5pZDtcbiAgICAgICAgICAgICAgICAgICAgbG5rLnNvdXJjZU5hbWUgPSBuZDEubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgbG5rLnRhcmdldCA9IG5kMi5pZDtcbiAgICAgICAgICAgICAgICAgICAgbG5rLnRhcmdldE5hbWUgPSBuZDIubmFtZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmQxLnR5cGUuaW5jbHVkZXMoJ1JvdXRlcicpICYmIG5kMi50eXBlLmluY2x1ZGVzKCdSb3V0ZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG5rLnN0YXR1cyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmQxLnN0YXR1cyA9PT0gJ1BST1ZJU0lPTkVEJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kMS5vbmxpbmUgPT09ICdZZXMnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmQyLnN0YXR1cyA9PT0gJ1BST1ZJU0lPTkVEJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kMi5vbmxpbmUgPT09ICdZZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsbmsuc3RhdHVzID0gZ2V0RW5kcG9pbnRUb1JvdXRlckxpbmtTdGF0ZShuZDIsIG5kMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG5rLndlaWdodCA9IGdldFdlaWdodChsbmsuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgcm9vdE9iLmFkZExpbmsobG5rKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBrMCA9IDA7IGswIDwgZ3JvdXA0Tm9kZXMubGVuZ3RoOyBrMCsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBrMSA9IDA7IGsxIDwgZ3JvdXAzTm9kZXMubGVuZ3RoOyBrMSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG5rID0gbmV3IExpbmsoKTtcbiAgICAgICAgICAgICAgICBsbmsuc291cmNlID0gZ3JvdXAzTm9kZXNbazFdLmlkO1xuICAgICAgICAgICAgICAgIGxuay5zb3VyY2VOYW1lID0gZ3JvdXAzTm9kZXNbazFdLm5hbWU7XG4gICAgICAgICAgICAgICAgbG5rLnRhcmdldCA9IGdyb3VwNE5vZGVzW2swXS5pZDtcbiAgICAgICAgICAgICAgICBsbmsudGFyZ2V0TmFtZSA9IGdyb3VwNE5vZGVzW2swXS5uYW1lO1xuICAgICAgICAgICAgICAgIGxuay53ZWlnaHQgPSAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kTmQgPSByb290T2Iubm9kZXMuZmluZCggZnVuY3Rpb24gKHJuZCkge1xuICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJuZC5pZCA9PT0gZ3JvdXAzTm9kZXNbazFdLmlkO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kTmQudHlwZS5pbmNsdWRlcygnUm91dGVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgbG5rLnN0YXR1cyA9ICBmb3VuZE5kLm9ubGluZSA9PT0gJ1llcycgPyAxIDogMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsbmsuc3RhdHVzID0gZ2V0U2VydmljZVRvRW5kcG9pbnRMaW5rU3RhdGUoZ3JvdXAzTm9kZXNbazFdLCBncm91cDROb2Rlc1trMF0pO1xuICAgICAgICAgICAgICAgICAgICBsbmsud2VpZ2h0ID0gZ2V0V2VpZ2h0KGxuay5zdGF0dXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByb290T2IuYWRkTGluayhsbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2VydmljZUNvbmZpZ0FsaWFzKGNvbmZpZ3MpIHtcbiAgICAgICAgICBsZXQgaW50ZXJjZXB0ID0gW107XG4gICAgICAgICAgXy5pc0FycmF5KGNvbmZpZ3MpICYmIGNvbmZpZ3MuZm9yRWFjaCggKGNvbmYpID0+IHtcbiAgICAgICAgICAgICBsZXQgYWRkcmVzc2VzID0gJyc7XG4gICAgICAgICAgICAgbGV0IHBvcnRzID0gJyc7XG4gICAgICAgICAgICBpZiAoY29uZi5kYXRhLmFkZHJlc3Nlcykge1xuICAgICAgICAgICAgICAgYWRkcmVzc2VzID0gY29uZi5kYXRhLmFkZHJlc3Nlcy50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgIGFkZHJlc3NlcyA9IGNvbmYuZGF0YS5hZGRyZXNzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXy5pc0FycmF5KGNvbmYuZGF0YS5wb3J0UmFuZ2VzKSApIHtcbiAgICAgICAgICAgICAgICBjb25mLmRhdGEucG9ydFJhbmdlcy5mb3JFYWNoKCAocG9ydHNKc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwb3J0c0pzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcG9ydHMgPSBwb3J0cyArIGtleSArJzonK3BvcnRzSnNvbltrZXldICsnICcgO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgIHBvcnRzID0gcG9ydHMgKyAnOyc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBvcnRzID0gIGNvbmYuZGF0YS5wb3J0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJjZXB0LnB1c2goYWRkcmVzc2VzKTtcbiAgICAgICAgICAgIGludGVyY2VwdC5wdXNoKHBvcnRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJjZXB0O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZmluZEVuZHBvaW50KGVuZHBvaW50SWQsIGVuZHBvaW50cykge1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50SWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVQb2ludCA9IGVuZHBvaW50cy5maW5kKCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgICAgICAgICAgcmV0dXJuIGVyLmlkID09PSBlbmRwb2ludElkO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICBub2RlID0gY3JlYXRlRW5kcG9pbnQoZVBvaW50KTtcbiAgICAgICAgICAgICAgICBub2RlLnR5cGUgPSAnSG9zdGVkIElkZW50aXR5JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IC8vIGVuZCBvZiBmaW5kRW5kcG9pbnRcblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVFbmRwb2ludChlUG9pbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgbm9kZS5pZCA9IGVQb2ludC5pZDtcbiAgICAgICAgICAgIG5vZGUubmFtZSA9IGVQb2ludC5uYW1lO1xuICAgICAgICAgICAgbm9kZS50eXBlID0gJ0lkZW50aXR5JztcbiAgICAgICAgICAgIGlmIChfLmhhcyhlUG9pbnQsJ2VkZ2VSb3V0ZXJDb25uZWN0aW9uU3RhdHVzJykgKSB7XG4gICAgICAgICAgICAgIG5vZGUucm91dGVyQ29ubmVjdGlvbiA9IGVQb2ludC5lZGdlUm91dGVyQ29ubmVjdGlvblN0YXR1cyA9PT0gJ29mZmxpbmUnID8gJ05vJyA6ICdZZXMnO1xuICAgICAgICAgICAgICBub2RlLmFwaVNlc3Npb24gPSAgbm9kZS5yb3V0ZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbm9kZS5yb3V0ZXJDb25uZWN0aW9uID0gZVBvaW50WydoYXNFZGdlUm91dGVyQ29ubmVjdGlvbiddID09PSBmYWxzZSA/ICdObycgOiAnWWVzJztcbiAgICAgICAgICAgICAgbm9kZS5hcGlTZXNzaW9uID0gIGVQb2ludFsnaGFzQXBpU2Vzc2lvbiddID09PSBmYWxzZSA/ICdObycgOiAnWWVzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICBub2RlLm9zID0gZVBvaW50LmVudkluZm8/IGVQb2ludC5lbnZJbmZvLm9zIDogJyc7XG4gICAgICAgICAgICAgbm9kZS5tZmFFbmFibGVkID0gZVBvaW50LmlzTWZhRW5hYmxlZDtcbiAgICAgICAgICAgICBub2RlLnN0YXR1cyA9IGVQb2ludC5lbnZJbmZvICYmIGVQb2ludC5lbnZJbmZvLm9zICE9PSBudWxsID8gJ1JlZ2lzdGVyZWQnIDogJ1VuLVJlZ2lzdGVyZWQnO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVFUk5vZGUoZXJvdXRlcikge1xuICAgICAgICAgICAgY29uc3Qgbm9kZU9iID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgIG5vZGVPYi5pZCA9IGVyb3V0ZXIuaWQ7XG4gICAgICAgICAgICBub2RlT2IubmFtZSA9IGVyb3V0ZXIubmFtZTtcbiAgICAgICAgICAgIG5vZGVPYi5zdGF0dXMgPSBlcm91dGVyLmlzVmVyaWZpZWQgPT09IHRydWU/ICdSZWdpc3RlcmVkJzonVW4tUmVnaXN0ZXJlZCc7XG4gICAgICAgICAgICBub2RlT2Iub25saW5lID0gZXJvdXRlci5pc09ubGluZSA9PT0gZmFsc2UgPyAnTm8nIDogJ1llcyc7XG4gICAgICAgICAgICBub2RlT2IudHVubmVsZXJFbmFibGVkID0gZXJvdXRlci5pc1R1bm5lbGVyRW5hYmxlZCA9PT0gZmFsc2UgPyAnTm8nIDogJ1llcyc7XG4gICAgICAgICAgICBub2RlT2IudHlwZSA9ICdFZGdlUm91dGVyJztcbiAgICAgICAgICAgIHJldHVybiBub2RlT2I7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmaW5kRWRnZVJvdXRlckZvcklkKHJvdXRlcklkLCBlZGdlcm91dGVycykge1xuICAgICAgICAgICAgY29uc3QgZXJvdXRlciA9IGVkZ2Vyb3V0ZXJzLmZpbmQoKGVyKSA9PiB7XG4gICAgICAgICAgICAgIC8vICBpZiAoZXIuaWQgPT09IHJvdXRlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlci5pZCA9PT0gcm91dGVySWQ7XG4gICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGVyb3V0ZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlRVJOb2RlKGVyb3V0ZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBlbmQgb2YgZmluZEVkZ2VSb3V0ZXJGb3JJZFxuXG4gICAgICAgIGZ1bmN0aW9uIGdldEVuZHBvaW50VG9Sb3V0ZXJMaW5rU3RhdGUoZW5kcG9pbnROb2RlLCByb3V0ZXJOb2RlKSB7XG4gICAgICAgICAgICBsZXQgbGlua3N0YXRlID0gMDtcbiAgICAgICAgICAgIGlmIChyb3V0ZXJOb2RlLnN0YXR1cyA9PT0gJ0VSUk9SJykge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZHBvaW50Tm9kZS5zdGF0dXMgPT09ICdVbi1SZWdpc3RlcmVkJykge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRwb2ludE5vZGUuYXBpU2Vzc2lvbiA9PT0gJ05vJykge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZHBvaW50Tm9kZS5yb3V0ZXJDb25uZWN0aW9uID09PSAnTm8nKSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gLTE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvdXRlck5vZGUub25saW5lID09PSAnWWVzJyAmJiBlbmRwb2ludE5vZGUucm91dGVyQ29ubmVjdGlvbiA9PT0gJ1llcycpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsaW5rc3RhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRTZXJ2aWNlVG9FbmRwb2ludExpbmtTdGF0ZShlbmRwb2ludE5vZGUsIHNlcnZpY2VOb2RlKSB7XG4gICAgICAgICAgICBsZXQgbGlua3N0YXRlID0gMDtcbiAgICAgICAgICAgIGlmIChlbmRwb2ludE5vZGUuc3RhdHVzID09PSAnVW4tUmVnaXN0ZXJlZCcgfHwgc2VydmljZU5vZGUuaW50ZXJjZXB0LmluY2x1ZGVzKCdObycpKSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gLTE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZHBvaW50Tm9kZS5hcGlTZXNzaW9uID09PSAnTm8nKSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kcG9pbnROb2RlLnN0YXR1cyA9PT0gJ1JlZ2lzdGVyZWQnICYmIGVuZHBvaW50Tm9kZS5yb3V0ZXJDb25uZWN0aW9uID09PSAnWWVzJykge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbGlua3N0YXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0V2VpZ2h0KGxpbmtTdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGxpbmtTdGF0ZSA9PT0gLTEgPyA1IDogMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm9vdE9iO1xuICAgIH0gLy8gZW5kIG9mIE5FVyBGdW5jdGlvblxuXG59XG5cbiBjbGFzcyBSb290SnNvbiB7XG4gICAgICAgIG5vZGVzOmFueSA9IFtdO1xuICAgICAgICBsaW5rczphbnkgPSBbXTtcbiAgICAgICAgYWRkTm9kZSAobmV3T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmRPYmogPSB0aGlzLm5vZGVzLmZpbmQoIGZ1bmN0aW9uIChuZCkge1xuICAgICAgICAgICAgICAgICAgIC8vIGlmIChuZC5pZCA9PT0gbmV3T2JqZWN0LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIC8vIG5kID0gbmV3T2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5kLmlkID09PSBuZXdPYmplY3QuaWQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZXMucHVzaChuZXdPYmplY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmVwbGFjZU5vZGUgKG5ld09iamVjdCkge1xuICAgICAgICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5ub2Rlcy5maW5kSW5kZXgobmQgPT4gbmQuaWQgPT09IG5ld09iamVjdC5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzW2luZHhdID0gbmV3T2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICBhZGRMaW5rIChuZXdPYmplY3QpIHtcbiAgICAgICAgICAgdGhpcy5saW5rcy5wdXNoKG5ld09iamVjdCk7XG4gICAgICAgIH07XG5cbiB9XG4iXX0=
|