taon 18.0.18 → 18.0.20
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/shared/shared_folder_info.txt +1 -1
- package/browser/esm2022/lib/base-classes/base-abstract-entity.mjs +1 -1
- package/browser/esm2022/lib/base-classes/base-crud-controller.mjs +1 -1
- package/browser/esm2022/lib/base-classes/base-injector.mjs +8 -1
- package/browser/esm2022/lib/base-classes/base.mjs +3 -3
- package/browser/esm2022/lib/create-context.mjs +10 -7
- package/browser/esm2022/lib/decorators/http/http-decorators.mjs +3 -1
- package/browser/esm2022/lib/decorators/http/http-methods-decorators.mjs +1 -1
- package/browser/esm2022/lib/endpoint-context.mjs +49 -11
- package/browser/esm2022/lib/entity-process.mjs +1 -10
- package/browser/esm2022/lib/get-response-value.mjs +1 -15
- package/browser/esm2022/lib/index.mjs +2 -1
- package/browser/esm2022/lib/models.mjs +1 -1
- package/browser/esm2022/lib/ui/directives/index.mjs +6 -0
- package/browser/esm2022/lib/ui/directives/safe.pipe.mjs +43 -0
- package/browser/esm2022/lib/ui/directives/taon-inject-html.directive.mjs +24 -0
- package/browser/esm2022/lib/ui/directives/taon-long-press.directive.mjs +120 -0
- package/browser/esm2022/lib/ui/index.mjs +12 -0
- package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.mjs +5 -0
- package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.mjs +115 -0
- package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.mjs +50 -0
- package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.mjs +5 -0
- package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.mjs +61 -0
- package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.mjs +21 -0
- package/browser/esm2022/lib/ui/taon-admin-mode-configuration/index.mjs +6 -0
- package/browser/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +14 -3
- package/browser/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.mjs +54 -0
- package/browser/esm2022/lib/ui/taon-full-material.module.mjs +179 -0
- package/browser/esm2022/lib/ui/taon-github-fork-me-corner/index.mjs +5 -0
- package/browser/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.mjs +18 -0
- package/browser/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.mjs +21 -0
- package/browser/esm2022/lib/ui/taon-notifications/index.mjs +7 -0
- package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.component.mjs +25 -0
- package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.models.mjs +5 -0
- package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.module.mjs +21 -0
- package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.service.mjs +48 -0
- package/browser/esm2022/lib/ui/taon-progress-bar/index.mjs +5 -0
- package/browser/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.component.mjs +98 -0
- package/browser/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.module.mjs +22 -0
- package/browser/esm2022/lib/ui/taon-session-passcode/index.mjs +4 -0
- package/browser/esm2022/lib/ui/taon-session-passcode/taon-session-passcode.component.mjs +120 -0
- package/browser/esm2022/lib/ui/taon-table/index.mjs +5 -0
- package/browser/esm2022/lib/ui/taon-table/taon-table.component.mjs +161 -0
- package/browser/esm2022/lib/ui/taon-table/taon-table.module.mjs +57 -0
- package/browser/fesm2022/taon.mjs +1463 -94
- package/browser/fesm2022/taon.mjs.map +1 -1
- package/browser/lib/base-classes/base-abstract-entity.d.ts +2 -1
- package/browser/lib/base-classes/base-context.d.ts +4 -1
- package/browser/lib/base-classes/base-crud-controller.d.ts +1 -1
- package/browser/lib/base-classes/base-injector.d.ts +5 -0
- package/browser/lib/base-classes/base.d.ts +7 -3
- package/browser/lib/create-context.d.ts +7 -4
- package/browser/lib/decorators/http/http-decorators.d.ts +2 -0
- package/browser/lib/decorators/http/http-methods-decorators.d.ts +9 -0
- package/browser/lib/endpoint-context.d.ts +3 -2
- package/browser/lib/index.d.ts +13 -3
- package/browser/lib/models.d.ts +2 -4
- package/browser/lib/ui/directives/index.d.ts +4 -0
- package/browser/lib/ui/directives/safe.pipe.d.ts +11 -0
- package/browser/lib/ui/directives/taon-inject-html.directive.d.ts +10 -0
- package/browser/lib/ui/directives/taon-long-press.directive.d.ts +26 -0
- package/browser/lib/ui/index.d.ts +10 -0
- package/browser/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.d.ts +3 -0
- package/browser/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.d.ts +33 -0
- package/browser/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.d.ts +16 -0
- package/browser/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.d.ts +3 -0
- package/browser/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.d.ts +17 -0
- package/browser/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.d.ts +10 -0
- package/browser/lib/ui/taon-admin-mode-configuration/index.d.ts +4 -0
- package/browser/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.d.ts +17 -0
- package/browser/lib/ui/taon-full-material.module.d.ts +47 -0
- package/browser/lib/ui/taon-github-fork-me-corner/index.d.ts +3 -0
- package/browser/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.d.ts +7 -0
- package/browser/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.d.ts +9 -0
- package/browser/lib/ui/taon-notifications/index.d.ts +5 -0
- package/browser/lib/ui/taon-notifications/taon-notifications.component.d.ts +13 -0
- package/browser/lib/ui/taon-notifications/taon-notifications.models.d.ts +7 -0
- package/browser/lib/ui/taon-notifications/taon-notifications.module.d.ts +8 -0
- package/browser/lib/ui/taon-notifications/taon-notifications.service.d.ts +15 -0
- package/browser/lib/ui/taon-progress-bar/index.d.ts +3 -0
- package/browser/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +19 -0
- package/browser/lib/ui/taon-progress-bar/taon-progress-bar.module.d.ts +10 -0
- package/browser/lib/ui/taon-session-passcode/index.d.ts +2 -0
- package/browser/lib/ui/taon-session-passcode/taon-session-passcode.component.d.ts +39 -0
- package/browser/lib/ui/taon-table/index.d.ts +3 -0
- package/browser/lib/ui/taon-table/taon-table.component.d.ts +37 -0
- package/browser/lib/ui/taon-table/taon-table.module.d.ts +17 -0
- package/client/esm2022/lib/base-classes/base-abstract-entity.mjs +1 -1
- package/client/esm2022/lib/base-classes/base-crud-controller.mjs +1 -1
- package/client/esm2022/lib/base-classes/base-injector.mjs +8 -1
- package/client/esm2022/lib/base-classes/base.mjs +3 -3
- package/client/esm2022/lib/create-context.mjs +10 -7
- package/client/esm2022/lib/decorators/http/http-decorators.mjs +3 -1
- package/client/esm2022/lib/decorators/http/http-methods-decorators.mjs +1 -1
- package/client/esm2022/lib/endpoint-context.mjs +49 -11
- package/client/esm2022/lib/entity-process.mjs +1 -10
- package/client/esm2022/lib/get-response-value.mjs +1 -15
- package/client/esm2022/lib/index.mjs +2 -1
- package/client/esm2022/lib/models.mjs +1 -1
- package/client/esm2022/lib/ui/directives/index.mjs +6 -0
- package/client/esm2022/lib/ui/directives/safe.pipe.mjs +43 -0
- package/client/esm2022/lib/ui/directives/taon-inject-html.directive.mjs +24 -0
- package/client/esm2022/lib/ui/directives/taon-long-press.directive.mjs +120 -0
- package/client/esm2022/lib/ui/index.mjs +12 -0
- package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.mjs +5 -0
- package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.mjs +115 -0
- package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.mjs +50 -0
- package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.mjs +5 -0
- package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.mjs +61 -0
- package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.mjs +21 -0
- package/client/esm2022/lib/ui/taon-admin-mode-configuration/index.mjs +6 -0
- package/client/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +14 -3
- package/client/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.mjs +54 -0
- package/client/esm2022/lib/ui/taon-full-material.module.mjs +179 -0
- package/client/esm2022/lib/ui/taon-github-fork-me-corner/index.mjs +5 -0
- package/client/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.mjs +18 -0
- package/client/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.mjs +21 -0
- package/client/esm2022/lib/ui/taon-notifications/index.mjs +7 -0
- package/client/esm2022/lib/ui/taon-notifications/taon-notifications.component.mjs +25 -0
- package/client/esm2022/lib/ui/taon-notifications/taon-notifications.models.mjs +5 -0
- package/client/esm2022/lib/ui/taon-notifications/taon-notifications.module.mjs +21 -0
- package/client/esm2022/lib/ui/taon-notifications/taon-notifications.service.mjs +48 -0
- package/client/esm2022/lib/ui/taon-progress-bar/index.mjs +5 -0
- package/client/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.component.mjs +98 -0
- package/client/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.module.mjs +22 -0
- package/client/esm2022/lib/ui/taon-session-passcode/index.mjs +4 -0
- package/client/esm2022/lib/ui/taon-session-passcode/taon-session-passcode.component.mjs +120 -0
- package/client/esm2022/lib/ui/taon-table/index.mjs +5 -0
- package/client/esm2022/lib/ui/taon-table/taon-table.component.mjs +161 -0
- package/client/esm2022/lib/ui/taon-table/taon-table.module.mjs +57 -0
- package/client/fesm2022/taon.mjs +1463 -94
- package/client/fesm2022/taon.mjs.map +1 -1
- package/client/lib/base-classes/base-abstract-entity.d.ts +2 -1
- package/client/lib/base-classes/base-context.d.ts +4 -1
- package/client/lib/base-classes/base-crud-controller.d.ts +1 -1
- package/client/lib/base-classes/base-injector.d.ts +5 -0
- package/client/lib/base-classes/base.d.ts +7 -3
- package/client/lib/create-context.d.ts +7 -4
- package/client/lib/decorators/http/http-decorators.d.ts +2 -0
- package/client/lib/decorators/http/http-methods-decorators.d.ts +9 -0
- package/client/lib/endpoint-context.d.ts +3 -2
- package/client/lib/index.d.ts +13 -3
- package/client/lib/models.d.ts +2 -4
- package/client/lib/ui/directives/index.d.ts +4 -0
- package/client/lib/ui/directives/safe.pipe.d.ts +11 -0
- package/client/lib/ui/directives/taon-inject-html.directive.d.ts +10 -0
- package/client/lib/ui/directives/taon-long-press.directive.d.ts +26 -0
- package/client/lib/ui/index.d.ts +10 -0
- package/client/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.d.ts +3 -0
- package/client/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.d.ts +33 -0
- package/client/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.d.ts +16 -0
- package/client/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.d.ts +3 -0
- package/client/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.d.ts +17 -0
- package/client/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.d.ts +10 -0
- package/client/lib/ui/taon-admin-mode-configuration/index.d.ts +4 -0
- package/client/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.d.ts +17 -0
- package/client/lib/ui/taon-full-material.module.d.ts +47 -0
- package/client/lib/ui/taon-github-fork-me-corner/index.d.ts +3 -0
- package/client/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.d.ts +7 -0
- package/client/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.d.ts +9 -0
- package/client/lib/ui/taon-notifications/index.d.ts +5 -0
- package/client/lib/ui/taon-notifications/taon-notifications.component.d.ts +13 -0
- package/client/lib/ui/taon-notifications/taon-notifications.models.d.ts +7 -0
- package/client/lib/ui/taon-notifications/taon-notifications.module.d.ts +8 -0
- package/client/lib/ui/taon-notifications/taon-notifications.service.d.ts +15 -0
- package/client/lib/ui/taon-progress-bar/index.d.ts +3 -0
- package/client/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +19 -0
- package/client/lib/ui/taon-progress-bar/taon-progress-bar.module.d.ts +10 -0
- package/client/lib/ui/taon-session-passcode/index.d.ts +2 -0
- package/client/lib/ui/taon-session-passcode/taon-session-passcode.component.d.ts +39 -0
- package/client/lib/ui/taon-table/index.d.ts +3 -0
- package/client/lib/ui/taon-table/taon-table.component.d.ts +37 -0
- package/client/lib/ui/taon-table/taon-table.module.d.ts +17 -0
- package/lib/base-classes/base-abstract-entity.d.ts +1 -0
- package/lib/base-classes/base-context.d.ts +4 -1
- package/lib/base-classes/base-crud-controller.d.ts +1 -1
- package/lib/base-classes/base-injector.d.ts +5 -0
- package/lib/base-classes/base-injector.js +11 -0
- package/lib/base-classes/base-injector.js.map +1 -1
- package/lib/base-classes/base.d.ts +7 -3
- package/lib/base-classes/base.js +2 -2
- package/lib/base-classes/base.js.map +1 -1
- package/lib/create-context.d.ts +7 -4
- package/lib/create-context.js +19 -6
- package/lib/create-context.js.map +1 -1
- package/lib/decorators/http/http-decorators.d.ts +3 -1
- package/lib/decorators/http/http-decorators.js +2 -0
- package/lib/decorators/http/http-decorators.js.map +1 -1
- package/lib/decorators/http/http-methods-decorators.d.ts +9 -0
- package/lib/decorators/http/http-methods-decorators.js.map +1 -1
- package/lib/endpoint-context.d.ts +3 -2
- package/lib/endpoint-context.js +165 -126
- package/lib/endpoint-context.js.map +1 -1
- package/lib/entity-process.js +0 -9
- package/lib/entity-process.js.map +1 -1
- package/lib/get-response-value.js +14 -37
- package/lib/get-response-value.js.map +1 -1
- package/lib/index.d.ts +13 -3
- package/lib/models.d.ts +2 -5
- package/lib/models.js.map +1 -1
- package/lib/ui/directives/index.d.ts +3 -4
- package/lib/ui/directives/index.js +2 -2
- package/lib/ui/index.d.ts +9 -0
- package/lib/ui/index.js +5 -0
- package/lib/ui/index.js.map +1 -0
- package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.js +2 -2
- package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.d.ts +3 -5
- package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.js +2 -2
- package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/taon-db-admin.component.d.ts +2 -3
- package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.js +2 -2
- package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.d.ts +1 -2
- package/lib/ui/taon-admin-mode-configuration/index.d.ts +0 -1
- package/lib/ui/taon-admin-mode-configuration/index.js +2 -2
- package/lib/ui/taon-github-fork-me-corner/index.js +2 -2
- package/lib/ui/taon-github-fork-me-ribbon/index.js +2 -2
- package/lib/ui/taon-notifications/taon-notifications.models.js +2 -2
- package/lib/ui/taon-progress-bar/index.js +2 -2
- package/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +1 -0
- package/lib/ui/taon-session-passcode/index.js +2 -2
- package/lib/ui/taon-table/index.d.ts +2 -0
- package/lib/ui/taon-table/index.js +5 -0
- package/lib/ui/taon-table/index.js.map +1 -0
- package/lib/ui/taon-table/taon-table.component.d.ts +33 -0
- package/lib/ui/taon-table/taon-table.module.d.ts +2 -0
- package/package.json +7 -7
- package/tmp-environment.json +37 -31
- package/websql/esm2022/lib/base-classes/base-abstract-entity.mjs +1 -1
- package/websql/esm2022/lib/base-classes/base-crud-controller.mjs +1 -1
- package/websql/esm2022/lib/base-classes/base-injector.mjs +8 -1
- package/websql/esm2022/lib/base-classes/base.mjs +3 -3
- package/websql/esm2022/lib/create-context.mjs +10 -7
- package/websql/esm2022/lib/decorators/http/http-decorators.mjs +3 -1
- package/websql/esm2022/lib/decorators/http/http-methods-decorators.mjs +1 -1
- package/websql/esm2022/lib/endpoint-context.mjs +49 -11
- package/websql/esm2022/lib/entity-process.mjs +1 -10
- package/websql/esm2022/lib/get-response-value.mjs +4 -24
- package/websql/esm2022/lib/index.mjs +2 -1
- package/websql/esm2022/lib/models.mjs +1 -1
- package/websql/esm2022/lib/ui/directives/index.mjs +6 -0
- package/websql/esm2022/lib/ui/directives/safe.pipe.mjs +43 -0
- package/websql/esm2022/lib/ui/directives/taon-inject-html.directive.mjs +24 -0
- package/websql/esm2022/lib/ui/directives/taon-long-press.directive.mjs +120 -0
- package/websql/esm2022/lib/ui/index.mjs +12 -0
- package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.mjs +5 -0
- package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.mjs +115 -0
- package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.mjs +50 -0
- package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.mjs +5 -0
- package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.mjs +61 -0
- package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.mjs +21 -0
- package/websql/esm2022/lib/ui/taon-admin-mode-configuration/index.mjs +6 -0
- package/websql/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +14 -3
- package/websql/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.mjs +54 -0
- package/websql/esm2022/lib/ui/taon-full-material.module.mjs +179 -0
- package/websql/esm2022/lib/ui/taon-github-fork-me-corner/index.mjs +5 -0
- package/websql/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.mjs +18 -0
- package/websql/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.mjs +21 -0
- package/websql/esm2022/lib/ui/taon-notifications/index.mjs +7 -0
- package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.component.mjs +25 -0
- package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.models.mjs +5 -0
- package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.module.mjs +21 -0
- package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.service.mjs +48 -0
- package/websql/esm2022/lib/ui/taon-progress-bar/index.mjs +5 -0
- package/websql/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.component.mjs +50 -0
- package/websql/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.module.mjs +22 -0
- package/websql/esm2022/lib/ui/taon-session-passcode/index.mjs +4 -0
- package/websql/esm2022/lib/ui/taon-session-passcode/taon-session-passcode.component.mjs +120 -0
- package/websql/esm2022/lib/ui/taon-table/index.mjs +5 -0
- package/websql/esm2022/lib/ui/taon-table/taon-table.component.mjs +161 -0
- package/websql/esm2022/lib/ui/taon-table/taon-table.module.mjs +57 -0
- package/websql/fesm2022/taon.mjs +1435 -120
- package/websql/fesm2022/taon.mjs.map +1 -1
- package/websql/lib/base-classes/base-abstract-entity.d.ts +2 -1
- package/websql/lib/base-classes/base-context.d.ts +4 -1
- package/websql/lib/base-classes/base-crud-controller.d.ts +1 -1
- package/websql/lib/base-classes/base-injector.d.ts +5 -0
- package/websql/lib/base-classes/base.d.ts +7 -3
- package/websql/lib/create-context.d.ts +7 -4
- package/websql/lib/decorators/http/http-decorators.d.ts +2 -0
- package/websql/lib/decorators/http/http-methods-decorators.d.ts +9 -0
- package/websql/lib/endpoint-context.d.ts +3 -2
- package/websql/lib/index.d.ts +13 -3
- package/websql/lib/models.d.ts +2 -5
- package/websql/lib/ui/directives/index.d.ts +4 -0
- package/websql/lib/ui/directives/safe.pipe.d.ts +11 -0
- package/websql/lib/ui/directives/taon-inject-html.directive.d.ts +10 -0
- package/websql/lib/ui/directives/taon-long-press.directive.d.ts +26 -0
- package/websql/lib/ui/index.d.ts +10 -0
- package/websql/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.d.ts +3 -0
- package/websql/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.d.ts +33 -0
- package/websql/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.d.ts +16 -0
- package/websql/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.d.ts +3 -0
- package/websql/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.d.ts +17 -0
- package/websql/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.d.ts +10 -0
- package/websql/lib/ui/taon-admin-mode-configuration/index.d.ts +4 -0
- package/websql/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.d.ts +17 -0
- package/websql/lib/ui/taon-full-material.module.d.ts +47 -0
- package/websql/lib/ui/taon-github-fork-me-corner/index.d.ts +3 -0
- package/websql/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.d.ts +7 -0
- package/websql/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.d.ts +9 -0
- package/websql/lib/ui/taon-notifications/index.d.ts +5 -0
- package/websql/lib/ui/taon-notifications/taon-notifications.component.d.ts +13 -0
- package/websql/lib/ui/taon-notifications/taon-notifications.models.d.ts +7 -0
- package/websql/lib/ui/taon-notifications/taon-notifications.module.d.ts +8 -0
- package/websql/lib/ui/taon-notifications/taon-notifications.service.d.ts +15 -0
- package/websql/lib/ui/taon-progress-bar/index.d.ts +3 -0
- package/websql/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +19 -0
- package/websql/lib/ui/taon-progress-bar/taon-progress-bar.module.d.ts +10 -0
- package/websql/lib/ui/taon-session-passcode/index.d.ts +2 -0
- package/websql/lib/ui/taon-session-passcode/taon-session-passcode.component.d.ts +39 -0
- package/websql/lib/ui/taon-table/index.d.ts +3 -0
- package/websql/lib/ui/taon-table/taon-table.component.d.ts +37 -0
- package/websql/lib/ui/taon-table/taon-table.module.d.ts +17 -0
- /package/lib/ui/directives/{firedev-inject-html.directive.d.ts → taon-inject-html.directive.d.ts} +0 -0
- /package/lib/ui/directives/{firedev-long-press.directive.d.ts → taon-long-press.directive.d.ts} +0 -0
- /package/lib/ui/{toan-full-material.module.d.ts → taon-full-material.module.d.ts} +0 -0
|
@@ -36,11 +36,6 @@ export class EndpointContext {
|
|
|
36
36
|
static initNgZone(ngZone) {
|
|
37
37
|
this.ngZone = ngZone;
|
|
38
38
|
}
|
|
39
|
-
static findForTraget(classFnOrObject) {
|
|
40
|
-
const obj = ClassHelpers.getClassFnFromObject(classFnOrObject) || {};
|
|
41
|
-
return (classFnOrObject[Symbols.ctxInClassOrClassObj] ||
|
|
42
|
-
obj[Symbols.ctxInClassOrClassObj]);
|
|
43
|
-
}
|
|
44
39
|
get realtimeClient() {
|
|
45
40
|
return this.realtime.client;
|
|
46
41
|
}
|
|
@@ -167,16 +162,38 @@ export class EndpointContext {
|
|
|
167
162
|
};
|
|
168
163
|
}
|
|
169
164
|
async init(options) {
|
|
170
|
-
const { initFromRecrusiveContextResovle } = options || {}; // TODO use it ?
|
|
165
|
+
const { initFromRecrusiveContextResovle, overrideHost, overrideRemoteHost, } = options || {}; // TODO use it ?
|
|
171
166
|
this.inited = true;
|
|
172
167
|
this.config = this.configFn(ENV);
|
|
168
|
+
if (overrideHost && overrideRemoteHost) {
|
|
169
|
+
Helpers.throw(`[taon-config] You can't have overrideHost and overrideRemoteHost at the same time`);
|
|
170
|
+
}
|
|
171
|
+
this.config.host = !_.isUndefined(overrideHost)
|
|
172
|
+
? overrideHost
|
|
173
|
+
: this.config.host;
|
|
174
|
+
this.config.remoteHost = !_.isUndefined(overrideRemoteHost)
|
|
175
|
+
? overrideRemoteHost
|
|
176
|
+
: this.config.remoteHost;
|
|
177
|
+
this.config.host = this.host === null ? void 0 : this.host;
|
|
178
|
+
this.config.remoteHost =
|
|
179
|
+
this.remoteHost === null ? void 0 : this.remoteHost;
|
|
180
|
+
if (this.config.host &&
|
|
181
|
+
!this.config.host.startsWith('http://') &&
|
|
182
|
+
!this.config.host.startsWith('https://')) {
|
|
183
|
+
Helpers.throw(`[taon-config] Your 'host' must start with http:// or https://`);
|
|
184
|
+
}
|
|
185
|
+
if (this.config.remoteHost &&
|
|
186
|
+
!this.config.remoteHost.startsWith('http://') &&
|
|
187
|
+
!this.config.remoteHost.startsWith('https://')) {
|
|
188
|
+
Helpers.throw(`[taon-config] Your 'remoteHost' must start with http:// or https://`);
|
|
189
|
+
}
|
|
173
190
|
if (this.config.host) {
|
|
174
191
|
this.mode = 'backend-frontend(tcp+udp)';
|
|
175
192
|
this.mode = 'backend-frontend(websql)';
|
|
176
193
|
}
|
|
177
194
|
if (this.config.remoteHost) {
|
|
178
195
|
if (this.config.host) {
|
|
179
|
-
Helpers.
|
|
196
|
+
Helpers.throw(`[taon] You can't have remoteHost and host at the same time`);
|
|
180
197
|
}
|
|
181
198
|
this.mode = 'remote-backend(tcp+udp)';
|
|
182
199
|
}
|
|
@@ -197,7 +214,7 @@ export class EndpointContext {
|
|
|
197
214
|
this.databaseConfig = this.getAutoGeneratedConfig();
|
|
198
215
|
}
|
|
199
216
|
else if (_.isObject(this.config.database)) {
|
|
200
|
-
this.databaseConfig = _.cloneDeep(this.config.database);
|
|
217
|
+
this.databaseConfig = _.merge(this.getAutoGeneratedConfig(), _.cloneDeep(this.config.database));
|
|
201
218
|
}
|
|
202
219
|
if (this.config.session) {
|
|
203
220
|
this.session = _.cloneDeep(this.config.session);
|
|
@@ -399,6 +416,9 @@ export class EndpointContext {
|
|
|
399
416
|
/* */
|
|
400
417
|
/* */
|
|
401
418
|
/* */
|
|
419
|
+
/* */
|
|
420
|
+
/* */
|
|
421
|
+
/* */
|
|
402
422
|
return (void 0);
|
|
403
423
|
}
|
|
404
424
|
displayRoutes(app) {
|
|
@@ -513,7 +533,7 @@ export class EndpointContext {
|
|
|
513
533
|
}
|
|
514
534
|
checkIfContextInitialized() {
|
|
515
535
|
if (_.isUndefined(this.config)) {
|
|
516
|
-
throw new Error(`Please check if your context has been
|
|
536
|
+
throw new Error(`Please check if your context has been initialized.
|
|
517
537
|
|
|
518
538
|
|
|
519
539
|
await Context.initialize();
|
|
@@ -574,6 +594,9 @@ export class EndpointContext {
|
|
|
574
594
|
}
|
|
575
595
|
}
|
|
576
596
|
async reinitControllers() {
|
|
597
|
+
if (this.remoteHost) {
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
577
600
|
const controllers = this.getClassesInstancesArrBy(Models.ClassType.CONTROLLER);
|
|
578
601
|
for (const ctrl of controllers) {
|
|
579
602
|
if (_.isFunction(ctrl.initExampleDbData)) {
|
|
@@ -585,6 +608,9 @@ export class EndpointContext {
|
|
|
585
608
|
}
|
|
586
609
|
}
|
|
587
610
|
async initClasses() {
|
|
611
|
+
if (this.remoteHost) {
|
|
612
|
+
return;
|
|
613
|
+
}
|
|
588
614
|
for (const classTypeName of [
|
|
589
615
|
Models.ClassType.PROVIDER,
|
|
590
616
|
Models.ClassType.REPOSITORY,
|
|
@@ -652,6 +678,9 @@ export class EndpointContext {
|
|
|
652
678
|
return this.uri?.origin;
|
|
653
679
|
}
|
|
654
680
|
async initSubscribers() {
|
|
681
|
+
if (this.remoteHost) {
|
|
682
|
+
return;
|
|
683
|
+
}
|
|
655
684
|
const subscriberClasses = this.getClassFunByArr(Models.ClassType.SUBSCRIBER);
|
|
656
685
|
for (const subscriberClassFn of subscriberClasses) {
|
|
657
686
|
const options = Reflect.getMetadata(Symbols.metadata.options.subscriber, subscriberClassFn);
|
|
@@ -659,6 +688,9 @@ export class EndpointContext {
|
|
|
659
688
|
}
|
|
660
689
|
}
|
|
661
690
|
async initEntities() {
|
|
691
|
+
if (this.remoteHost) {
|
|
692
|
+
return;
|
|
693
|
+
}
|
|
662
694
|
const entities = this.getClassFunByArr(Models.ClassType.ENTITY);
|
|
663
695
|
for (const entity of entities) {
|
|
664
696
|
const options = Reflect.getMetadata(Symbols.metadata.options.entity, entity);
|
|
@@ -678,6 +710,9 @@ export class EndpointContext {
|
|
|
678
710
|
}
|
|
679
711
|
}
|
|
680
712
|
async initDatabaseConnection() {
|
|
713
|
+
if (this.remoteHost) {
|
|
714
|
+
return;
|
|
715
|
+
}
|
|
681
716
|
const entities = (this.config.override?.entities
|
|
682
717
|
? this.config.override.entities
|
|
683
718
|
: this.getClassFunByArr(Models.ClassType.ENTITY)).map(entityFn => {
|
|
@@ -809,6 +844,9 @@ export class EndpointContext {
|
|
|
809
844
|
}
|
|
810
845
|
}
|
|
811
846
|
writeActiveRoutes() {
|
|
847
|
+
if (this.remoteHost) {
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
812
850
|
const contexts = [this];
|
|
813
851
|
const troutes = this.activeRoutes.map(({ method, routePath }) => {
|
|
814
852
|
return (TaonHelpers.fillUpTo(method.toUpperCase() + ':', 10) +
|
|
@@ -835,7 +873,7 @@ export class EndpointContext {
|
|
|
835
873
|
/* */
|
|
836
874
|
return (void 0);
|
|
837
875
|
}
|
|
838
|
-
|
|
876
|
+
initMiddlewares() {
|
|
839
877
|
/* */
|
|
840
878
|
/* */
|
|
841
879
|
/* */
|
|
@@ -1501,4 +1539,4 @@ instead
|
|
|
1501
1539
|
}
|
|
1502
1540
|
;
|
|
1503
1541
|
({}); // @--end-of-file-for-module=taon lib/endpoint-context.ts
|
|
1504
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0LXdlYnNxbC90YW9uL3Byb2plY3RzL3Rhb24vc3JjL2xpYi9lbmRwb2ludC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLCtDQUErQztBQUcvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFXdEQsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQVEsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRSxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUdMLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVsRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUksT0FBTyxFQUFJLE1BQU0sSUFBSSxhQUFhLEVBQUksUUFBUSxFQUFJLFdBQVcsR0FBRyxNQUFNLGlCQUFpQixDQUFDLENBQUEsS0FBSztBQUN4RyxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxF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Q0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FB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Q0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1FBRUQsQ0FBQztRQUVELE9BQU87WUFDTCxTQUFTLEVB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V0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNwRCx1QkFBdUIsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxDQUNILENBQUM7Z0JBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFDNUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUMxQyxDQUFDO1lBQ0osQ0FBQztZQUdELE1BQU0sYUFBYSxHQUFHO2dCQUNwQixRQUFRLEVBQUUsVUFBVTtvQkFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzFELENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDakQsQ0FBQztZQUNGLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztJQUVKLENBQUM7Q0FFRjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMseURBQXlEIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC90eXBlZGVmICovXG5cblxuaW1wb3J0IHsgRXZlbnRTdWJzY3JpYmVyIH0gZnJvbSAndGFvbi10eXBlb3JtL3dlYnNxbCc7XG5pbXBvcnQgdHlwZSB7XG4gIFRyYW5zYWN0aW9uUm9sbGJhY2tFdmVudCxcbiAgVHJhbnNhY3Rpb25Db21taXRFdmVudCxcbiAgVHJhbnNhY3Rpb25TdGFydEV2ZW50LFxuICBSZWNvdmVyRXZlbnQsXG4gIFNvZnRSZW1vdmVFdmVudCxcbiAgUmVtb3ZlRXZlbnQsXG4gIFVwZGF0ZUV2ZW50LFxuICBJbnNlcnRFdmVudCxcbn0gZnJvbSAndGFvbi10eXBlb3JtJztcbmltcG9ydCB7IEVudGl0eSBhcyBUeXBlb3JtRW50aXR5LCBUcmVlIH0gZnJvbSAndGFvbi10eXBlb3JtL3dlYnNxbCc7XG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuaW1wb3J0IHsgVGFvbkFkbWluIH0gZnJvbSAnLi91aS90YW9uLWFkbWluLW1vZGUtY29uZmlndXJhdGlvbi90YW9uLWFkbWluLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBDbGFzc0hlbHBlcnMgfSBmcm9tICcuL2hlbHBlcnMvY2xhc3MtaGVscGVycyc7XG5pbXBvcnQgeyBTeW1ib2xzIH0gZnJvbSAnLi9zeW1ib2xzJztcbmltcG9ydCB7IF8sIEhlbHBlcnMgfSBmcm9tICd0bnAtY29yZS93ZWJzcWwnO1xuaW1wb3J0IHR5cGUgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnLi9jcmVhdGUtY29udGV4dCc7XG5pbXBvcnQgeyBESVRhb25Db250YWluZXIgfSBmcm9tICcuL2RlcGVuZGVuY3ktaW5qZWN0aW9uL2RpLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBUYW9uQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tICcuL2RlY29yYXRvcnMvY2xhc3Nlcy9jb250cm9sbGVyLWRlY29yYXRvcic7XG5pbXBvcnQgeyBUYW9uSGVscGVycyB9IGZyb20gJy4vaGVscGVycy90YW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgICBNYXBwaW5nLCAgIE1vZGVscyBhcyBNb2RlbHNOZzJSZXN0LCAgIFJlc291cmNlLCAgIFJlc3RIZWFkZXJzLCB9IGZyb20gJ25nMi1yZXN0L3dlYnNxbCc7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG5cbmltcG9ydCB7IEpTT04xMCB9IGZyb20gJ2pzb24xMC93ZWJzcWwnO1xuaW1wb3J0IHsgcGF0aCB9IGZyb20gJ3RucC1jb3JlL3dlYnNxbCc7XG5pbXBvcnQgeyBmcm9tLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHlQcm9jZXNzIH0gZnJvbSAnLi9lbnRpdHktcHJvY2Vzcyc7XG5pbXBvcnQgeyBnZXRSZXNwb25zZVZhbHVlIH0gZnJvbSAnLi9nZXQtcmVzcG9uc2UtdmFsdWUnO1xuaW1wb3J0IHR5cGUgeyBBcHBsaWNhdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB0eXBlIHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7ICAgRGF0YVNvdXJjZSwgICBEYXRhU291cmNlT3B0aW9ucywgICBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlLCB9IGZyb20gJ3Rhb24tdHlwZW9ybS93ZWJzcWwnOy8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG5cbmltcG9ydCB7IFRhb25FbnRpdHlPcHRpb25zIH0gZnJvbSAnLi9kZWNvcmF0b3JzL2NsYXNzZXMvZW50aXR5LWRlY29yYXRvcic7XG5pbXBvcnQgdHlwZSB7IFNlcnZlciB9IGZyb20gJ2h0dHAnO1xuaW1wb3J0IHsgRU5WIH0gZnJvbSAnLi9lbnYnO1xuaW1wb3J0IHR5cGUgeyBCYXNlQ2xhc3MgfSBmcm9tICcuL2Jhc2UtY2xhc3Nlcy9iYXNlLWNsYXNzJztcbmltcG9ydCB7IFJlYWx0aW1lQ29yZSB9IGZyb20gJy4vcmVhbHRpbWUvcmVhbHRpbWUtY29yZSc7XG5pbXBvcnQgeyBUYW9uU3Vic2NyaWJlck9wdGlvbnMgfSBmcm9tICcuL2RlY29yYXRvcnMvY2xhc3Nlcy9zdWJzY3JpYmVyLWRlY29yYXRvcic7XG5pbXBvcnQgeyBCYXNlU3Vic2NyaWJlckZvckVudGl0eSB9IGZyb20gJy4vYmFzZS1jbGFzc2VzL2Jhc2Utc3Vic2NyaWJlci1mb3ItZW50aXR5JztcblxuXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRDb250ZXh0IHtcblxuXG5cbiAgcHJpdmF0ZSBzdGF0aWMgbmdab25lOiBOZ1pvbmU7XG5cbiAgc3RhdGljIGluaXROZ1pvbmUobmdab25lOiBOZ1pvbmUpIHtcblxuICAgIHRoaXMubmdab25lID0gbmdab25lO1xuXG4gIH1cbiAgcHVibGljIHN0YXRpYyBmaW5kRm9yVHJhZ2V0KGNsYXNzRm5Pck9iamVjdDogYW55KTogRW5kcG9pbnRDb250ZXh0IHtcbiAgICBjb25zdCBvYmogPSBDbGFzc0hlbHBlcnMuZ2V0Q2xhc3NGbkZyb21PYmplY3QoY2xhc3NGbk9yT2JqZWN0KSB8fCB7fTtcbiAgICByZXR1cm4gKFxuICAgICAgY2xhc3NGbk9yT2JqZWN0W1N5bWJvbHMuY3R4SW5DbGFzc09yQ2xhc3NPYmpdIHx8XG4gICAgICBvYmpbU3ltYm9scy5jdHhJbkNsYXNzT3JDbGFzc09ial1cbiAgICApO1xuICB9XG5cblxuXG5cblxuICBkaXNhYmxlZFJlYWx0aW1lOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBjaGVjayB3aGV0aGVyIGNvbnRleHQgaXMgaW5pdGVkXG4gICAqICh3aXRoIGluaXQoKSBmdW5jdGlvbiApXG4gICAqL1xuICBwdWJsaWMgaW5pdGVkOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsSW5zdGFjZU9ialN5bWJvbCA9IFN5bWJvbCgnbG9jYWxJbnN0YWNlT2JqU3ltYm9sJyk7XG5cblxuICAvKipcbiAgICogYWxsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGZyb20gY29udGV4dFxuICAgKiBrZXkgaXMgY2xhc3MgbmFtZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFsbENsYXNzZXNJbnN0YW5jZXMgPSB7fTtcblxuXG5cbiAgcHJpdmF0ZSByZWFkb25seSBjbGFzc0luc3RhbmNlc0J5TmFtZU9iaiA9IHt9O1xuXG5cblxuICBwcml2YXRlIHJlYWRvbmx5IG9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyID0ge307XG5cblxuXG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVSb3V0ZXM6IHtcbiAgICByb3V0ZVBhdGg6IHN0cmluZztcbiAgICBtZXRob2Q6IE1vZGVscy5IdHRwLlJlc3QuSHR0cE1ldGhvZDtcbiAgfVtdID0gW107XG5cblxuXG4gIHByaXZhdGUgaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzID0gW1xuICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgIE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWSxcbiAgICBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVIsXG4gIF07XG5cblxuICBwcml2YXRlIGFsbFR5cGVzZnJvbUNvbnRleHRzID0gW1xuICAgIC4uLnRoaXMuaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzLFxuICAgIE1vZGVscy5DbGFzc1R5cGUuRU5USVRZLFxuICBdO1xuXG5cbiAgcHVibGljIGV4cHJlc3NBcHA6IEFwcGxpY2F0aW9uID0ge30gYXMgYW55O1xuXG5cblxuICBwdWJsaWMgc2VydmVyVGNwVWRwOiBTZXJ2ZXI7XG5cblxuXG4gIGRhdGFiYXNlQ29uZmlnPzogTW9kZWxzLkRhdGFiYXNlQ29uZmlnO1xuICBwcml2YXRlIGF1dG9HZW5lcmF0ZWRDb25maWc/OiBNb2RlbHMuRGF0YWJhc2VDb25maWc7XG5cblxuXG4gIG1vZGU6IE1vZGVscy5GcmFtZXdvcmtNb2RlO1xuXG5cblxuICBzZXNzaW9uPzogTW9kZWxzLklTZXNzaW9uO1xuXG5cblxuICBwdWJsaWMgY29ubmVjdGlvbjogRGF0YVNvdXJjZTtcblxuXG5cbiAgcHJpdmF0ZSBlbnRpdGllc1RyaWdnZXJzID0ge307XG5cblxuXG4gIHByaXZhdGUgcmVhbHRpbWU6IFJlYWx0aW1lQ29yZTtcbiAgZ2V0IHJlYWx0aW1lQ2xpZW50KCkge1xuICAgIHJldHVybiB0aGlzLnJlYWx0aW1lLmNsaWVudDtcbiAgfVxuICBnZXQgcmVhbHRpbWVTZXJ2ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhbHRpbWUuc2VydmVyO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBhdmFpbGFibGUgYWZ0ZXIgaW5pdCgpXG4gICAqL1xuICBwdWJsaWMgY29uZmlnOiBNb2RlbHMuQ29udGV4dE9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cblxuXG4gIGdldCBsb2dIdHRwKCk6IGJvb2xlYW4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMuY29uZmlnPy5sb2dzKSkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLmxvZ3MgYXMgTW9kZWxzLkNvbnRlY3Rpb25PcHRpb25zTG9ncykuaHR0cDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5sb2dzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGxvZ1JlYWx0aW1lKCk6IGJvb2xlYW4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMuY29uZmlnPy5sb2dzKSkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLmxvZ3MgYXMgTW9kZWxzLkNvbnRlY3Rpb25PcHRpb25zTG9ncykucmVhbHRpbWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ubG9ncyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBsb2dGcmFtZXdvcmsoKTogYm9vbGVhbiB7XG4gICAgaWYgKF8uaXNPYmplY3QodGhpcy5jb25maWc/LmxvZ3MpKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5jb25maWcubG9ncyBhcyBNb2RlbHMuQ29udGVjdGlvbk9wdGlvbnNMb2dzKS5mcmFtZXdvcms7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ubG9ncyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBsb2dEYigpOiBib29sZWFuIHtcbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZz8ubG9ncykpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmNvbmZpZy5sb2dzIGFzIE1vZGVscy5Db250ZWN0aW9uT3B0aW9uc0xvZ3MpLmRiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmxvZ3MgPT09IHRydWU7XG4gIH1cblxuXG5cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3JpZ2luYWxDb25maWc6IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PixcbiAgICBwcml2YXRlIGNvbmZpZ0ZuOiAoXG4gICAgICBlbnY6IGFueSxcbiAgICApID0+IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PixcbiAgKSB7fVxuXG5cblxuICBwdWJsaWMgYXN5bmMgaW5pdChvcHRpb25zPzogeyBpbml0RnJvbVJlY3J1c2l2ZUNvbnRleHRSZXNvdmxlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgeyBpbml0RnJvbVJlY3J1c2l2ZUNvbnRleHRSZXNvdmxlIH0gPSBvcHRpb25zIHx8IHt9OyAvLyBUT0RPIHVzZSBpdCA/XG5cbiAgICB0aGlzLmluaXRlZCA9IHRydWU7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZ0ZuKEVOVik7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmhvc3QpIHtcbiAgICAgIHRoaXMubW9kZSA9ICdiYWNrZW5kLWZyb250ZW5kKHRjcCt1ZHApJztcblxuICAgICAgdGhpcy5tb2RlID0gJ2JhY2tlbmQtZnJvbnRlbmQod2Vic3FsKSc7XG5cbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlbW90ZUhvc3QpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5ob3N0KSB7XG4gICAgICAgIEhlbHBlcnMuZXJyb3IoXG4gICAgICAgICAgYFt0YW9uXSBZb3UgY2FuJ3QgaGF2ZSByZW1vdGVIb3N0IGFuZCBob3N0IGF0IHRoZSBzYW1lIHRpbWVgLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLm1vZGUgPSAncmVtb3RlLWJhY2tlbmQodGNwK3VkcCknO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy51c2VJcGNXaGVuRWxlY3Ryb24gJiYgSGVscGVycy5pc0VsZWN0cm9uKSB7XG4gICAgICBpZiAoSGVscGVycy5pc1dlYlNRTCkge1xuICAgICAgICB0aGlzLm1vZGUgPSAnYmFja2VuZC1mcm9udGVuZCh3ZWJzcWwtZWxlY3Ryb24pJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9kZSA9ICdiYWNrZW5kLWZyb250ZW5kKGlwYy1lbGVjdHJvbiknO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5tb2RlICYmICF0aGlzLmNvbmZpZy5hYnN0cmFjdCkge1xuICAgICAgSGVscGVycy5lcnJvcihcbiAgICAgICAgYFt0YW9uXSBDb250ZXh0IFwiJHt0aGlzLmNvbnRleHROYW1lfVwiOiBZb3UgbmVlZCB0byBwcm92aWRlIGhvc3Qgb3IgcmVtb3RlSG9zdCBvciB1c2VJcGNXaGVuRWxlY3Ryb25gLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4vKiAqL1xuLyogKi9cbiAgXG4gICAgfVxuXG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5kYXRhYmFzZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kYXRhYmFzZUNvbmZpZyA9IHRoaXMuZ2V0QXV0b0dlbmVyYXRlZENvbmZpZygpO1xuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZy5kYXRhYmFzZSkpIHtcbiAgICAgIHRoaXMuZGF0YWJhc2VDb25maWcgPSBfLmNsb25lRGVlcChcbiAgICAgICAgdGhpcy5jb25maWcuZGF0YWJhc2UsXG4gICAgICApIGFzIE1vZGVscy5EYXRhYmFzZUNvbmZpZztcbiAgICB9XG5cblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnNlc3Npb24pIHtcbiAgICAgIHRoaXMuc2Vzc2lvbiA9IF8uY2xvbmVEZWVwKHRoaXMuY29uZmlnLnNlc3Npb24pO1xuICAgICAgY29uc3Qgb25lSG91ciA9IDEwMDAgKiA2MCAqIDYwICogMTsgLy8gMjQ7XG4gICAgICBpZiAoIXRoaXMuc2Vzc2lvbi5jb29raWVNYXhBZ2UpIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmNvb2tpZU1heEFnZSA9IG9uZUhvdXI7XG4gICAgICB9XG5cbiAgICAgIGF4aW9zLmRlZmF1bHRzLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgfVxuXG5cblxuICAgIHRoaXMuY29uZmlnLmNvbnRleHRzID0gdGhpcy5jb25maWcuY29udGV4dHMgfHwge307XG4gICAgdGhpcy5jb25maWcuZW50aXRpZXMgPSB0aGlzLmNvbmZpZy5lbnRpdGllcyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5jb250cm9sbGVycyA9IHRoaXMuY29uZmlnLmNvbnRyb2xsZXJzIHx8IHt9O1xuICAgIHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyA9IHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5wcm92aWRlcnMgPSB0aGlzLmNvbmZpZy5wcm92aWRlcnMgfHwge307XG4gICAgdGhpcy5jb25maWcuc3Vic2NyaWJlcnMgPSB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycyB8fCB7fTtcblxuICAgIHRoaXMuY29uZmlnLmVudGl0aWVzID0ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICAgICAgTW9kZWxzLkNsYXNzVHlwZS5FTlRJVFksXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLmVudGl0aWVzLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbmZpZy5jb250cm9sbGVycyA9IHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICAgICkpLFxuICAgICAgLi4udGhpcy5jb25maWcuY29udHJvbGxlcnMsXG4gICAgfTtcblxuICAgIHRoaXMuY29uZmlnLnByb3ZpZGVycyA9IHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgICAgIE1vZGVscy5DbGFzc1R5cGUuUFJPVklERVIsXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLnByb3ZpZGVycyxcbiAgICB9O1xuXG4gICAgdGhpcy5jb25maWcuc3Vic2NyaWJlcnMgPSB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgICAgICBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVIsXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLnN1YnNjcmliZXJzLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMgPSB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgICAgICBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyxcbiAgICB9O1xuXG5cblxuXG5cbiAgICB0aGlzLmNvbmZpZy5jb250cm9sbGVycyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcuY29udHJvbGxlcnMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgfSk7XG4gICAgdGhpcy5jb25maWcucmVwb3NpdG9yaWVzID0gdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgY2xhc3Nlc0lucHV0OiB0aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgfSk7XG4gICAgdGhpcy5jb25maWcucHJvdmlkZXJzID0gdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgY2xhc3Nlc0lucHV0OiB0aGlzLmNvbmZpZy5wcm92aWRlcnMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgIH0pO1xuICAgIHRoaXMuY29uZmlnLnN1YnNjcmliZXJzID0gdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgY2xhc3Nlc0lucHV0OiB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycyxcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjdHg6IHRoaXMsXG4gICAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUuU1VCU0NSSUJFUixcbiAgICB9KTtcblxuXG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgdGhpcy5pbmplY3RhYmxlVHlwZXNmcm9tQ29udGV4dHMpIHtcbiAgICAgIHRoaXMuY2xhc3NJbnN0YW5jZXNCeU5hbWVPYmpbY2xhc3NUeXBlTmFtZV0gPSB7fTtcbiAgICAgIHRoaXMub2JqV2l0aENsYXNzZXNJbnN0YW5jZXNBcnJbY2xhc3NUeXBlTmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgdGhpcy5pbmplY3RhYmxlVHlwZXNmcm9tQ29udGV4dHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlSW5zdGFuY2VzKFxuICAgICAgICB0aGlzLmNvbmZpZ1tNb2RlbHMuQ2xhc3NUeXBlS2V5W2NsYXNzVHlwZU5hbWVdXSxcbiAgICAgICAgY2xhc3NUeXBlTmFtZSxcbiAgICAgICk7XG4gICAgfVxuXG5cblxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdiYWNrZW5kLWZyb250ZW5kKHRjcCt1ZHApJyAmJiAhdGhpcy5jb25maWcuYWJzdHJhY3QpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgIH1cblxuXG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLmRpc2FibGVkUmVhbHRpbWUgPSAhIXRoaXMuY29uZmlnLmRpc2FibGVkUmVhbHRpbWU7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICB0aGlzLnJlYWx0aW1lID0gbmV3IFJlYWx0aW1lQ29yZSh0aGlzKTtcbiAgICB9XG5cblxuXG5cbiAgICBpZiAodGhpcy5jb25maWcuYWJzdHJhY3QpIHtcbiAgICAgIHRoaXMubG9nRnJhbWV3b3JrICYmXG4gICAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgICBgW3Rhb25dIENyZWF0ZSBhYnN0cmFjdCBjb250ZXh0OiAke3RoaXMuY29uZmlnLmNvbnRleHROYW1lfWAsXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5yZW1vdGVIb3N0KSB7XG4gICAgICAgIHRoaXMubG9nRnJhbWV3b3JrICYmXG4gICAgICAgICAgSGVscGVycy5pbmZvKFxuICAgICAgICAgICAgYFt0YW9uXSBDcmVhdGUgY29udGV4dCBmb3IgcmVtb3RlIGhvc3Q6ICR7dGhpcy5jb25maWcucmVtb3RlSG9zdH1gLFxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgICAgIEhlbHBlcnMuaW5mbyhgW3Rhb25dIENyZWF0ZSBjb250ZXh0IGZvciBob3N0OiAke3RoaXMuY29uZmlnLmhvc3R9YCk7XG4gICAgICB9XG4gICAgfVxuXG5cblxuICAgIE9iamVjdC5rZXlzKHRoaXMuY29uZmlnKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0aGlzLm9yaWdpbmFsQ29uZmlnW2tleV0gPSB0aGlzLmNvbmZpZ1trZXldO1xuICAgIH0pO1xuICB9XG5cblxuXG4gIHByaXZhdGUgZ2V0QXV0b0dlbmVyYXRlZENvbmZpZygpOiBNb2RlbHMuRGF0YWJhc2VDb25maWcge1xuXG4gICAgbGV0IGRhdGFiYXNlQ29uZmlnOiBNb2RlbHMuRGF0YWJhc2VDb25maWc7XG4gICAgaWYgKEhlbHBlcnMuaXNSdW5uaW5nSW5Eb2NrZXIoKSkge1xuICAgICAgSGVscGVycy5pbmZvKCdSdW5uaW5nIGluIGRvY2tlciwgdXNpbmcgaW4gbXlzcWwgZGF0YWJhc2UnKTtcblxuICAgICAgZGF0YWJhc2VDb25maWcgPSB7XG4gICAgICAgIGRhdGFiYXNlOiBgdG1wLWRiLSR7Xy5rZWJhYkNhc2UodGhpcy5jb250ZXh0TmFtZSl9LnNxbGpzLmRiYCxcbiAgICAgICAgdHlwZTogJ215c3FsJyxcbiAgICAgICAgYXV0b1NhdmU6IHRydWUsXG4gICAgICAgIHN5bmNocm9uaXplOiB0cnVlLFxuICAgICAgICBkcm9wU2NoZW1hOiB0cnVlLFxuICAgICAgICBsb2dnaW5nOiB0aGlzLmxvZ0RiLFxuICAgICAgICBkYXRhYmFzZVBvcnQ6IDMzMDYsXG4gICAgICAgIGRhdGFiYXNlSG9zdDogJ2xvY2FsaG9zdCcsXG4gICAgICAgIGRhdGFiYXNlVXNlcm5hbWU6ICdyb290JyxcbiAgICAgICAgZGF0YWJhc2VQYXNzd29yZDogJ2FkbWluJyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nRnJhbWV3b3JrICYmXG4gICAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgICBgW3Rhb25dW2RhdGFiYXNlXSBBdXRvbWF0aWNhbGx5IHJlc29sdmluZyBkYXRhYmFzZSBjb25maWcgZm9yIG1vZGUgJHt0aGlzLm1vZGV9YCxcbiAgICAgICAgKTtcbiAgICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XG5cbiAgICAgICAgY2FzZSAnYmFja2VuZC1mcm9udGVuZChpcGMtZWxlY3Ryb24pJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYXRpb246IGB0bXAtZGItJHtfLmtlYmFiQ2FzZSh0aGlzLmNvbnRleHROYW1lKX0uc3FsanNgLFxuICAgICAgICAgICAgdHlwZTogJ3NxbGpzJyxcbiAgICAgICAgICAgIGF1dG9TYXZlOiB0cnVlLFxuICAgICAgICAgICAgc3luY2hyb25pemU6IHRydWUsXG4gICAgICAgICAgICBkcm9wU2NoZW1hOiB0cnVlLFxuICAgICAgICAgICAgbG9nZ2luZzogdGhpcy5sb2dEYixcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuXG5cblxuICAgICAgICBjYXNlICdiYWNrZW5kLWZyb250ZW5kKHdlYnNxbC1lbGVjdHJvbiknOlxuICAgICAgICBjYXNlICdiYWNrZW5kLWZyb250ZW5kKHdlYnNxbCknOlxuICAgICAgICAgIGRhdGFiYXNlQ29uZmlnID0ge1xuICAgICAgICAgICAgbG9jYXRpb246IGB0bXAtZGItJHtfLmtlYmFiQ2FzZSh0aGlzLmNvbnRleHROYW1lKX0uc3FsanNgLFxuICAgICAgICAgICAgdHlwZTogJ3NxbGpzJyxcbiAgICAgICAgICAgIHVzZUxvY2FsRm9yYWdlOiB0cnVlLCAvLyAhIXdpbmRvd1snbG9jYWxmb3JhZ2UnXSwgLy8gVE9ETyB0aGlzIG5lZWQgdG8gYmUgY2hlY2tlZCBpbiBydW50aW1lXG4gICAgICAgICAgICBhdXRvU2F2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHN5bmNocm9uaXplOiB0cnVlLFxuICAgICAgICAgICAgZHJvcFNjaGVtYTogdHJ1ZSxcbiAgICAgICAgICAgIGxvZ2dpbmc6IHRoaXMubG9nRGIsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGxldCBrZWVwV2Vic3FsRGJEYXRhQWZ0ZXJSZWxvYWQgPSBmYWxzZTtcblxuICAgICAgICAgIGtlZXBXZWJzcWxEYkRhdGFBZnRlclJlbG9hZCA9XG4gICAgICAgICAgICBUYW9uQWRtaW4uSW5zdGFuY2Uua2VlcFdlYnNxbERiRGF0YUFmdGVyUmVsb2FkO1xuXG5cbiAgICAgICAgICBpZiAoa2VlcFdlYnNxbERiRGF0YUFmdGVyUmVsb2FkKSB7XG4gICAgICAgICAgICBkYXRhYmFzZUNvbmZpZy5kcm9wU2NoZW1hID0gZmFsc2U7XG4gICAgICAgICAgICBkZWxldGUgZGF0YWJhc2VDb25maWcuc3luY2hyb25pemU7IC8vIGZhbHNlIGlzIG5vdCBhdXRvIHN5bmNob25pemUgLSBmcm9tIHdoYXQgSSB1bmRlcnN0YW5kXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFiYXNlQ29uZmlnLmRyb3BTY2hlbWEgPSB0cnVlO1xuICAgICAgICAgICAgZGF0YWJhc2VDb25maWcuc3luY2hyb25pemUgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG5cblxuICAgICAgICBjYXNlICdiYWNrZW5kLWZyb250ZW5kKHRjcCt1ZHApJzpcbiAgICAgICAgICBkYXRhYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgICAgIGRhdGFiYXNlOiBgY29udGV4dC1kYi0ke18ua2ViYWJDYXNlKHRoaXMuY29udGV4dE5hbWUpfWAsXG4gICAgICAgICAgICBsb2NhdGlvbjogYHRtcC1kYi0ke18ua2ViYWJDYXNlKHRoaXMuY29udGV4dE5hbWUpfS5zcWxpdGVgLFxuICAgICAgICAgICAgdHlwZTogJ3NxbGpzJyxcbiAgICAgICAgICAgIGF1dG9TYXZlOiB0cnVlLFxuICAgICAgICAgICAgc3luY2hyb25pemU6IHRydWUsXG4gICAgICAgICAgICBkcm9wU2NoZW1hOiB0cnVlLFxuICAgICAgICAgICAgbG9nZ2luZzogdGhpcy5sb2dEYixcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhYmFzZUNvbmZpZztcblxuICB9XG5cblxuXG4gIGdldCBuZ1pvbmUoKTogYW55IHtcblxuICAgIHJldHVybiBFbmRwb2ludENvbnRleHQubmdab25lO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cblxuXG4gIHN0YXJ0U2VydmVyKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgZGlzcGxheVJvdXRlcyhhcHApIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIGdldCBtb2RlQWxsb3dzRGF0YWJhc2VDcmVhdGlvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tb2RlID09PSAnYmFja2VuZC1mcm9udGVuZCh0Y3ArdWRwKScgfHxcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2JhY2tlbmQtZnJvbnRlbmQod2Vic3FsKScgfHxcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2JhY2tlbmQtZnJvbnRlbmQoaXBjLWVsZWN0cm9uKSdcbiAgICApO1xuICB9XG5cblxuXG5cbiAgcHJpdmF0ZSBjbG9uZUNsYXNzV2l0aE5ld01ldGFkYXRhID0gPFxuICAgIFQgZXh0ZW5kcyB7IG5ldyAoLi4uYXJnczogYW55W10pOiBhbnkgfSxcbiAgPih7XG4gICAgQmFzZUNsYXNzLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb25maWcsXG4gICAgY3R4LFxuICAgIGNsYXNzVHlwZSxcbiAgfToge1xuICAgIEJhc2VDbGFzczogVDtcbiAgICBjbGFzc05hbWU6IHN0cmluZztcbiAgICBjb25maWc6IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PjtcbiAgICBjdHg6IEVuZHBvaW50Q29udGV4dDtcbiAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGU7XG4gIH0pOiBUID0+IHtcblxuICAgIGNvbnN0IGNsb25lQ2xhc3MgPSAoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIEJhc2VDbGFzc1tTeW1ib2xzLmZ1bGxDbGFzc05hbWVTdGF0aWNQcm9wZXJ0eV0gPT09XG4gICAgICAgIGAke2N0eC5jb250ZXh0TmFtZX0uJHtjbGFzc05hbWV9YFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBCYXNlQ2xhc3M7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xuXG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzdGF0aWMgW1N5bWJvbHMub3JpZ25hbENsYXNzXSA9IEJhc2VDbGFzcztcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHN0YXRpYyBbU3ltYm9scy5mdWxsQ2xhc3NOYW1lU3RhdGljUHJvcGVydHldID0gYCR7Y3R4LmNvbnRleHROYW1lfS4ke2NsYXNzTmFtZX1gO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc3RhdGljIFtTeW1ib2xzLmNsYXNzTmFtZVN0YXRpY1Byb3BlcnR5XSA9IGNsYXNzTmFtZTtcblxuICAgICAgICBzdGF0aWMgW1N5bWJvbHMuY3R4SW5DbGFzc09yQ2xhc3NPYmpdID0gY3R4O1xuXG4gICAgICAgIHN0YXRpYyBfX2dldEZ1bGxQYXRoRm9yQ2xhc3NfXyhhcnIgPSBbXSkge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzW1N5bWJvbHMuZnVsbENsYXNzTmFtZVN0YXRpY1Byb3BlcnR5XTtcbiAgICAgICAgICBhcnIucHVzaChuYW1lKTtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpc1tTeW1ib2xzLm9yaWduYWxDbGFzc10gJiYgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpc1tTeW1ib2xzLm9yaWduYWxDbGFzc10uX19nZXRGdWxsUGF0aEZvckNsYXNzX19cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXNbU3ltYm9scy5vcmlnbmFsQ2xhc3NdLl9fZ2V0RnVsbFBhdGhGb3JDbGFzc19fKGFycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhcnIuam9pbignLycpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXQgZnVsbFBhdGhGb3JDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9fZ2V0RnVsbFBhdGhGb3JDbGFzc19fKCk7XG4gICAgICAgIH1cbiAgICAgICAgW1N5bWJvbHMuY3R4SW5DbGFzc09yQ2xhc3NPYmpdID0gY3R4O1xuXG5cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNsb25lQ2xhc3NGdW5jdGlvbiA9IGNsb25lQ2xhc3MoKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgIHJldHVybiBjbG9uZUNsYXNzRnVuY3Rpb247XG4gIH07XG5cblxuXG5cblxuICBwcml2YXRlIGNsb25lQ2xhc3Nlc09ialdpdGhOZXdNZXRhZGF0YSA9ICh7XG4gICAgY2xhc3Nlc0lucHV0LFxuICAgIGNvbmZpZyxcbiAgICBjdHgsXG4gICAgY2xhc3NUeXBlLFxuICB9OiB7XG4gICAgY2xhc3Nlc0lucHV0OiBhbnk7XG4gICAgY29uZmlnOiBNb2RlbHMuQ29udGV4dE9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG4gICAgY3R4OiBFbmRwb2ludENvbnRleHQ7XG4gICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlO1xuICB9KSA9PiB7XG4gICAgY29uc3QgY2xhc3NlcyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY2xhc3Nlc0lucHV0IHx8IHt9KSkge1xuICAgICAgY29uc3QgQmFzZUNsYXNzID0gY2xhc3Nlc0lucHV0W2tleV07XG5cbiAgICAgIGlmICghQmFzZUNsYXNzKSB7XG4gICAgICAgIEhlbHBlcnMuZXJyb3IoYENsYXNzICR7a2V5fSBpcyBub3QgZGVmaW5lZCBpbiBjb250ZXh0ICR7Y3R4LmNvbnRleHROYW1lfVxuXG4gICAgICAgIFBsZWFzZSBjaGVjayBpZiB5b3UgaGF2ZSBjb3JyZWN0IGltcG9ydCBpbiBjb250ZXh0IGZpbGVcblxuICAgICAgICBgKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNsYXNzTmFtZSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFN5bWJvbHMubWV0YWRhdGEuY2xhc3NOYW1lLFxuICAgICAgICBCYXNlQ2xhc3MsXG4gICAgICApO1xuXG5cblxuXG5cbiAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBrZXk7XG4gICAgICBCYXNlQ2xhc3NbU3ltYm9scy5jbGFzc05hbWVTdGF0aWNQcm9wZXJ0eV0gPSBjbGFzc05hbWU7XG5cbiAgICAgIGNvbnN0IGNsb25lZENsYXNzID0gdGhpcy5jbG9uZUNsYXNzV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgICAgQmFzZUNsYXNzLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY3R4LFxuICAgICAgICBjbGFzc1R5cGUsXG4gICAgICB9KTtcbiAgICAgIGNsYXNzZXNbY2xhc3NOYW1lXSA9IGNsb25lZENsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfTtcblxuXG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSxcbiAgKSB7XG4gICAgY29uc3QgYXJyID0gYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzKGNsYXNzVHlwZSk7XG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoKGFjYywgYykgPT4ge1xuICAgICAgYWNjW0NsYXNzSGVscGVycy5nZXROYW1lKGMpXSA9IGM7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0cyhcbiAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUsXG4gICAgYXJyID0gW10sXG4gICkge1xuICAgIGNvbnN0IGNvbnRleHRzID0gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbmZpZy5jb250ZXh0cyB8fCB7fSkgYXMgUmV0dXJuVHlwZTxcbiAgICAgIHR5cGVvZiBjcmVhdGVDb250ZXh0XG4gICAgPltdO1xuXG5cblxuICAgIGZvciAoY29uc3QgY3R4IG9mIGNvbnRleHRzKSB7XG5cbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IGN0eC5fX3JlZigpO1xuXG4gICAgICBjb25zdCBjbGFzc2VzSW5wdXQgPSByZWYuZ2V0Q2xhc3NGdW5CeShjbGFzc1R5cGUpO1xuXG5cbiAgICAgIGNvbnN0IGNsb25lZENsYXNzZXMgPSBPYmplY3QudmFsdWVzKFxuICAgICAgICB0aGlzLmNsb25lQ2xhc3Nlc09ialdpdGhOZXdNZXRhZGF0YSh7XG4gICAgICAgICAgY2xhc3Nlc0lucHV0LFxuICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICAgICAgY3R4OiB0aGlzLFxuICAgICAgICAgIGNsYXNzVHlwZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICBjbG9uZWRDbGFzc2VzLmZvckVhY2goYyA9PiBhcnIucHVzaChjKSk7XG5cbiAgICAgIGF3YWl0IHJlZi5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzKGNsYXNzVHlwZSwgYXJyKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyciBhcyBGdW5jdGlvbltdO1xuICB9XG5cblxuXG4gIGdldENsYXNzSW5zdGFuY2VPYmpCeShjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNsYXNzSW5zdGFuY2VzQnlOYW1lT2JqW2NsYXNzVHlwZV07XG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBnZXRDbGFzc2VzSW5zdGFuY2VzQXJyQnkoY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLm9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyW2NsYXNzVHlwZV07XG4gIH1cblxuXG5cbiAgaW5qZWN0PFQ+KFxuICAgIGN0b3I6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGxvY2FsSW5zdGFuY2U/OiBib29sZWFuO1xuICAgICAgY29udGV4dENsYXNzSW5zdGFuY2U/OiBCYXNlQ2xhc3M7XG4gICAgICBsb2NhSW5zdGFuY2VDb25zdHJ1Y3RvckFyZ3M/OiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIGN0b3I+O1xuICAgIH0sXG4gICk6IFQge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9IGFzIGFueTtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NIZWxwZXJzLmdldE5hbWUoY3Rvcik7XG5cbiAgICBjb25zdCBsb2NhSW5zdGFuY2VDb25zdHJ1Y3RvckFyZ3MgPVxuICAgICAgb3B0aW9ucy5sb2NhSW5zdGFuY2VDb25zdHJ1Y3RvckFyZ3MgfHwgW107XG5cbiAgICBpZiAodGhpcy5pc0NMYXNzVHlwZShNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksIGN0b3IpKSB7XG4gICAgICBvcHRpb25zLmxvY2FsSW5zdGFuY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5sb2NhbEluc3RhbmNlKSB7XG4gICAgICBjb25zdCBjdHhDbGFzc0ZuID0gdGhpcy5nZXRDbGFzc0Z1bkJ5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG4gICAgICBsZXQgZW50aXR5TmFtZTogc3RyaW5nID0gJyc7XG5cbiAgICAgIGlmIChjbGFzc05hbWUgPT09ICdCYXNlUmVwb3NpdG9yeScpIHtcbiAgICAgICAgY29uc3QgZW50aXR5Rm4gPSBsb2NhSW5zdGFuY2VDb25zdHJ1Y3RvckFyZ3NbMF07XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0eUZuICYmIGVudGl0eUZuKCk7XG4gICAgICAgIGVudGl0eU5hbWUgPSBlbnRpdHkgJiYgQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHRDbGFzc0luc3RhbmNlW3RoaXMubG9jYWxJbnN0YWNlT2JqU3ltYm9sXSkge1xuICAgICAgICBvcHRpb25zLmNvbnRleHRDbGFzc0luc3RhbmNlW3RoaXMubG9jYWxJbnN0YWNlT2JqU3ltYm9sXSA9IHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgaW5zdGFuY2VLZXkgPSBjbGFzc05hbWUgKyAoZW50aXR5TmFtZSA/IGAuJHtlbnRpdHlOYW1lfWAgOiAnJyk7XG4gICAgICBjb25zdCBleGlzdGVkID1cbiAgICAgICAgb3B0aW9ucy5jb250ZXh0Q2xhc3NJbnN0YW5jZVt0aGlzLmxvY2FsSW5zdGFjZU9ialN5bWJvbF1baW5zdGFuY2VLZXldO1xuICAgICAgaWYgKGV4aXN0ZWQpIHtcblxuICAgICAgICByZXR1cm4gZXhpc3RlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjdHhDbGFzc0ZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGFibGUgdG8gaW5qZWN0IFwiJHtjbGFzc05hbWV9XCIgaW5zaWRlIGNvbnRleHQgXCIke3RoaXMuY29udGV4dE5hbWV9XCJcblxuICAgICAgICBNYWtlIHN1cmUgdGhleSBzaGFyZSB0aGUgc2FtZSBjb250ZXh0IG9yIGltcG9ydCBjb250ZXh0IHdoZXJlIFwiJHtjbGFzc05hbWV9XCIgaXMgZGVmaW5lZC5cblxuICAgICAgICBgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5qZWN0ZWRJbnN0YW5jZSA9IG5ldyAoY3R4Q2xhc3NGbiBhcyBhbnkpKFxuICAgICAgICAuLi5sb2NhSW5zdGFuY2VDb25zdHJ1Y3RvckFyZ3MsXG4gICAgICApO1xuICAgICAgb3B0aW9ucy5jb250ZXh0Q2xhc3NJbnN0YW5jZVt0aGlzLmxvY2FsSW5zdGFjZU9ialN5bWJvbF1baW5zdGFuY2VLZXldID1cbiAgICAgICAgaW5qZWN0ZWRJbnN0YW5jZTtcblxuICAgICAgcmV0dXJuIGluamVjdGVkSW5zdGFuY2U7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dFNjb3BlSW5zdGFuY2UgPSB0aGlzLmFsbENsYXNzZXNJbnN0YW5jZXNbY2xhc3NOYW1lXTtcblxuXG5cbiAgICByZXR1cm4gY29udGV4dFNjb3BlSW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogYWxpYXMgZm9yIGluamVjdFxuICAgKi9cbiAgZ2V0SW5zdGFuY2VCeTxUPihjdG9yOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0KGN0b3IsIHsgbG9jYWxJbnN0YW5jZTogZmFsc2UgfSk7XG4gIH1cblxuXG4gIGNoZWNrSWZDb250ZXh0SW5pdGlhbGl6ZWQoKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5jb25maWcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBjaGVjayBpZiB5b3VyIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlsaXplZC5cblxuXG4gICAgICBhd2FpdCBDb250ZXh0LmluaXRpYWxpemUoKTtcblxuXG5cbiAgICAgIGApO1xuICAgIH1cbiAgfVxuXG5cbiAgZ2V0Q2xhc3NGdW5CeShjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpIHtcbiAgICB0aGlzLmNoZWNrSWZDb250ZXh0SW5pdGlhbGl6ZWQoKTtcbiAgICBzd2l0Y2ggKGNsYXNzVHlwZSkge1xuICAgICAgY2FzZSBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVI6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb250cm9sbGVycztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5FTlRJVFk6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5lbnRpdGllcztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnByb3ZpZGVycztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcucmVwb3NpdG9yaWVzO1xuICAgICAgY2FzZSBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVI6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycztcbiAgICB9XG4gIH1cblxuICBpc0NMYXNzVHlwZShjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUsIGNsYXNzRm46IEZ1bmN0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRDbGFzc0Z1bkJ5KGNsYXNzVHlwZSlbQ2xhc3NIZWxwZXJzLmdldE5hbWUoY2xhc3NGbildO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgZm9yIGluamVjdGFibGUgdHlwZXNcbiAgICogT25seSBmb3IgY2xhc3NUeXBlOiBDT05UUk9MTEVSLCBSRVBPU0lUT1JZLCBQUk9WSURFUlxuICAgKi9cbiAgZ2V0Q2xhc3NGdW5CeUNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IEZ1bmN0aW9uIHtcbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgdGhpcy5hbGxUeXBlc2Zyb21Db250ZXh0cykge1xuICAgICAgY29uc3QgY2xhc3Nlc0ZvckluamVjdGFibGVUeXBlID1cbiAgICAgICAgdGhpcy5jb25maWdbTW9kZWxzLkNsYXNzVHlwZUtleVtjbGFzc1R5cGVOYW1lXV07XG5cbiAgICAgIGlmIChjbGFzc2VzRm9ySW5qZWN0YWJsZVR5cGVbY2xhc3NOYW1lXSkge1xuICAgICAgICByZXR1cm4gY2xhc3Nlc0ZvckluamVjdGFibGVUeXBlW2NsYXNzTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xhc3NGdW5CeUNsYXNzKGNsYXNzRnVuY3Rpb246IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IENsYXNzSGVscGVycy5nZXROYW1lKGNsYXNzRnVuY3Rpb24pO1xuICAgIHJldHVybiB0aGlzLmdldENsYXNzRnVuQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgfVxuXG4gIGdldENsYXNzRnVuQnlBcnIoY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5nZXRDbGFzc0Z1bkJ5KGNsYXNzVHlwZSkgfHwge30pIGFzIEZ1bmN0aW9uW107XG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVJbnN0YW5jZXMoY2xhc3NlczogYW55LCBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpIHtcblxuXG5cblxuXG4gICAgZm9yIChjb25zdCBjbGFzc0ZuIG9mIFtcblxuICAgICAgLi4uT2JqZWN0LnZhbHVlcyhjbGFzc2VzKSxcbiAgICBdKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IERJVGFvbkNvbnRhaW5lci5yZXNvbHZlKGNsYXNzRm4gYXMgYW55KSBhcyBhbnk7XG4gICAgICBjb25zdCBjbGFzc0luc3RhbmNlc0J5TmFtZU9iaiA9IHRoaXMuY2xhc3NJbnN0YW5jZXNCeU5hbWVPYmpbY2xhc3NUeXBlXTtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IENsYXNzSGVscGVycy5nZXROYW1lKGNsYXNzRm4pO1xuXG4gICAgICBjbGFzc0luc3RhbmNlc0J5TmFtZU9ialtjbGFzc05hbWVdID0gaW5zdGFuY2U7XG5cbiAgICAgIHRoaXMuY29uZmlnW01vZGVscy5DbGFzc1R5cGVLZXlbY2xhc3NUeXBlXV1bY2xhc3NOYW1lXSA9IGNsYXNzRm47XG4gICAgICB0aGlzLm9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyW2NsYXNzVHlwZV0ucHVzaChpbnN0YW5jZSk7XG4gICAgICB0aGlzLmFsbENsYXNzZXNJbnN0YW5jZXNbY2xhc3NOYW1lXSA9IGluc3RhbmNlO1xuICAgIH1cbiAgfVxuXG5cblxuICBhc3luYyByZWluaXRDb250cm9sbGVycygpIHtcblxuXG5cbiAgICBjb25zdCBjb250cm9sbGVycyA9IHRoaXMuZ2V0Q2xhc3Nlc0luc3RhbmNlc0FyckJ5KFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSLFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IGN0cmwgb2YgY29udHJvbGxlcnMpIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY3RybC5pbml0RXhhbXBsZURiRGF0YSkpIHtcbiAgICAgICAgYXdhaXQgSGVscGVycy5ydW5TeW5jT3JBc3luYyh7XG4gICAgICAgICAgZnVuY3Rpb25GbjogY3RybC5pbml0RXhhbXBsZURiRGF0YSxcbiAgICAgICAgICBjb250ZXh0OiBjdHJsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cblxuXG4gIH1cbiAgYXN5bmMgaW5pdENsYXNzZXMoKSB7XG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIFtcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuUFJPVklERVIsXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLkVOVElUWSxcbiAgICBdKSB7XG5cblxuXG5cbiAgICAgIGZvciAoY29uc3QgY2xhc3NGdW4gb2YgdGhpcy5nZXRDbGFzc0Z1bkJ5QXJyKGNsYXNzVHlwZU5hbWUpIGFzIGFueVtdKSB7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY2xhc3NGdW4uXykpIHtcbiAgICAgICAgICBhd2FpdCBIZWxwZXJzLnJ1blN5bmNPckFzeW5jKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uRm46IGNsYXNzRnVuLl8sXG4gICAgICAgICAgICBjb250ZXh0OiBjbGFzc0Z1bixcbiAgICAgICAgICB9KTtcblxuXG5cblxuXG5cbiAgICAgICAgfVxuICAgICAgfVxuXG5cblxuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIFtcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuUFJPVklERVIsXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgXSkge1xuXG5cblxuXG4gICAgICBmb3IgKGNvbnN0IGN0cmwgb2YgdGhpcy5nZXRDbGFzc2VzSW5zdGFuY2VzQXJyQnkoY2xhc3NUeXBlTmFtZSkpIHtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjdHJsLl8pKSB7XG4gICAgICAgICAgYXdhaXQgSGVscGVycy5ydW5TeW5jT3JBc3luYyh7XG4gICAgICAgICAgICBmdW5jdGlvbkZuOiBjdHJsLl8sXG4gICAgICAgICAgICBjb250ZXh0OiBjdHJsLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cblxuXG5cbiAgICB9XG4gIH1cblxuXG5cbiAgaXNBY3RpdmVPbihjbGFzc0luc3RhbmNlOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICBsZXQgY29udGV4dFJlZjogRW5kcG9pbnRDb250ZXh0ID1cbiAgICAgIGNsYXNzSW5zdGFuY2VbU3ltYm9scy5jdHhJbkNsYXNzT3JDbGFzc09ial07XG4gICAgcmV0dXJuIHRoaXMgPT09IGNvbnRleHRSZWY7XG4gIH1cblxuXG5cbiAgZ2V0IHVyaSgpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmhvc3RcbiAgICAgID8gbmV3IFVSTCh0aGlzLmhvc3QpXG4gICAgICA6IHRoaXMucmVtb3RlSG9zdFxuICAgICAgICA/IG5ldyBVUkwodGhpcy5yZW1vdGVIb3N0KVxuICAgICAgICA6IHZvaWQgMDtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cblxuXG4gIGdldCBpc0h0dHBTZXJ2ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudXJpLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgfVxuXG5cblxuICAvKipcbiAgICogaXBjL3VkcCBuZWVkcyB0aGlzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbnRleHROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb250ZXh0TmFtZTtcbiAgfVxuXG5cblxuICBwdWJsaWMgZ2V0IHB1YmxpY0Fzc2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnB1YmxpY0Fzc2V0cyB8fCBbXTtcbiAgfVxuXG5cblxuICBnZXQgaXNQcm9kdWN0aW9uTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucHJvZHVjdGlvbk1vZGU7XG4gIH1cblxuXG5cbiAgZ2V0IHJlbW90ZUhvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlbW90ZUhvc3Q7XG4gIH1cblxuXG5cbiAgZ2V0IGhvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmhvc3Q7XG4gIH1cblxuXG5cbiAgZ2V0IG9yZ2luKCkge1xuICAgIHJldHVybiB0aGlzLnVyaT8ub3JpZ2luO1xuICB9XG5cblxuXG4gIGFzeW5jIGluaXRTdWJzY3JpYmVycygpIHtcblxuICAgIGNvbnN0IHN1YnNjcmliZXJDbGFzc2VzID0gdGhpcy5nZXRDbGFzc0Z1bkJ5QXJyKFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5TVUJTQ1JJQkVSLFxuICAgICk7XG4gICAgZm9yIChjb25zdCBzdWJzY3JpYmVyQ2xhc3NGbiBvZiBzdWJzY3JpYmVyQ2xhc3Nlcykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFN5bWJvbHMubWV0YWRhdGEub3B0aW9ucy5zdWJzY3JpYmVyLFxuICAgICAgICBzdWJzY3JpYmVyQ2xhc3NGbixcbiAgICAgICkgYXMgVGFvblN1YnNjcmliZXJPcHRpb25zO1xuXG5cbiAgICAgIEV2ZW50U3Vic2NyaWJlcigpKHN1YnNjcmliZXJDbGFzc0ZuKTtcbiAgICB9XG5cbiAgfVxuXG5cblxuICBhc3luYyBpbml0RW50aXRpZXMoKSB7XG5cbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuZ2V0Q2xhc3NGdW5CeUFycihNb2RlbHMuQ2xhc3NUeXBlLkVOVElUWSk7XG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICBTeW1ib2xzLm1ldGFkYXRhLm9wdGlvbnMuZW50aXR5LFxuICAgICAgICBlbnRpdHksXG4gICAgICApIGFzIFRhb25FbnRpdHlPcHRpb25zO1xuICAgICAgY29uc3QgY3JlYXRlVGFibGUgPSBfLmlzVW5kZWZpbmVkKG9wdGlvbnMuY3JlYXRlVGFibGUpXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IG9wdGlvbnMuY3JlYXRlVGFibGU7XG4gICAgICBjb25zdCBuYW1lRm9yRW50aXR5ID0gQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5KTtcblxuICAgICAgaWYgKF8uaXNVbmRlZmluZWQob3B0aW9ucy5jcmVhdGVUYWJsZSkgPyB0cnVlIDogb3B0aW9ucy5jcmVhdGVUYWJsZSkge1xuICAgICAgICB0aGlzLmxvZ0RiICYmXG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgYFt0YW9uXVt0eXBlb3JtXSBjcmVhdGUgdGFibGUgZm9yIGVudGl0eSBcIiR7bmFtZUZvckVudGl0eX1cIiA/ICcke2NyZWF0ZVRhYmxlfSdgLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgVHlwZW9ybUVudGl0eShuYW1lRm9yRW50aXR5KShlbnRpdHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dEYiAmJlxuICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgIGBbdGFvbl1bdHlwZW9ybV0gY3JlYXRlIHRhYmxlIGZvciBlbnRpdHkgXCIke25hbWVGb3JFbnRpdHl9XCIgPyAnJHtjcmVhdGVUYWJsZX0nYCxcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cblxuXG5cbiAgYXN5bmMgaW5pdERhdGFiYXNlQ29ubmVjdGlvbigpIHtcblxuICAgIGNvbnN0IGVudGl0aWVzID0gKFxuICAgICAgdGhpcy5jb25maWcub3ZlcnJpZGU/LmVudGl0aWVzXG4gICAgICAgID8gdGhpcy5jb25maWcub3ZlcnJpZGUuZW50aXRpZXNcbiAgICAgICAgOiB0aGlzLmdldENsYXNzRnVuQnlBcnIoTW9kZWxzLkNsYXNzVHlwZS5FTlRJVFkpXG4gICAgKS5tYXAoZW50aXR5Rm4gPT4ge1xuICAgICAgcmV0dXJuIENsYXNzSGVscGVycy5nZXRPcmdpbmFsQ2xhc3MoZW50aXR5Rm4pO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3Vic2NyaWJlcnMgPSB0aGlzLmNvbmZpZy5vdmVycmlkZT8uc3Vic2NyaWJlcnNcbiAgICAgID8gdGhpcy5jb25maWcub3ZlcnJpZGUuc3Vic2NyaWJlcnNcbiAgICAgIDogdGhpcy5nZXRDbGFzc0Z1bkJ5QXJyKE1vZGVscy5DbGFzc1R5cGUuU1VCU0NSSUJFUik7XG5cbiAgICBjb25zdCBkYXRhU291cmNlRGJDb25maWcgPSBfLmlzT2JqZWN0KHRoaXMuZGF0YWJhc2VDb25maWcpXG4gICAgICA/ICh7XG4gICAgICAgICAgdHlwZTogdGhpcy5kYXRhYmFzZUNvbmZpZy50eXBlLFxuICAgICAgICAgIHBvcnQ6IHRoaXMuZGF0YWJhc2VDb25maWcuZGF0YWJhc2VQb3J0LFxuICAgICAgICAgIGhvc3Q6IHRoaXMuZGF0YWJhc2VDb25maWcuZGF0YWJhc2VIb3N0LFxuICAgICAgICAgIGRhdGFiYXNlOiB0aGlzLmRhdGFiYXNlQ29uZmlnLmRhdGFiYXNlIGFzIGFueSxcbiAgICAgICAgICB1c2VybmFtZTogdGhpcy5kYXRhYmFzZUNvbmZpZy5kYXRhYmFzZVVzZXJuYW1lLFxuICAgICAgICAgIHBhc3N3b3JkOiB0aGlzLmRhdGFiYXNlQ29uZmlnLmRhdGFiYXNlUGFzc3dvcmQsXG4gICAgICAgICAgdXNlTG9jYWxGb3JhZ2U6IHRoaXMuZGF0YWJhc2VDb25maWcudXNlTG9jYWxGb3JhZ2UsXG4gICAgICAgICAgZW50aXRpZXMsXG4gICAgICAgICAgc3Vic2NyaWJlcnMsXG4gICAgICAgICAgc3luY2hyb25pemU6IHRoaXMuZGF0YWJhc2VDb25maWcuc3luY2hyb25pemUsXG4gICAgICAgICAgYXV0b1NhdmU6IHRoaXMuZGF0YWJhc2VDb25maWcuYXV0b1NhdmUsXG4gICAgICAgICAgZHJvcFNjaGVtYTogdGhpcy5kYXRhYmFzZUNvbmZpZy5kcm9wU2NoZW1hLFxuICAgICAgICAgIGxvZ2dpbmc6ICEhdGhpcy5kYXRhYmFzZUNvbmZpZy5sb2dnaW5nLFxuICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLmRhdGFiYXNlQ29uZmlnLmxvY2F0aW9uLFxuICAgICAgICB9IGFzIERhdGFTb3VyY2VPcHRpb25zKVxuICAgICAgOiAoe30gYXMgRGF0YVNvdXJjZU9wdGlvbnMpO1xuXG5cbiAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbQ29udGV4dDogXCIke3RoaXMuY29udGV4dE5hbWV9XCJdIGRhdGFTb3VyY2VEYkNvbmZpZ2AsXG4gICAgICAgIGRhdGFTb3VyY2VEYkNvbmZpZyxcbiAgICAgICk7XG5cbiAgICBpZiAodGhpcy5tb2RlQWxsb3dzRGF0YWJhc2VDcmVhdGlvbiAmJiB0aGlzLmRhdGFiYXNlQ29uZmlnKSB7XG4gICAgICB0aGlzLmxvZ0RiICYmXG4gICAgICAgIHRoaXMubG9nRnJhbWV3b3JrICYmXG4gICAgICAgIEhlbHBlcnMuaW5mbygnW3Rhb25dW2RhdGFiYXNlXSBwcmVwYXJlIHR5cGVvcm0gY29ubmVjdGlvbi4uLicpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBEYXRhU291cmNlKGRhdGFTb3VyY2VEYkNvbmZpZyk7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbi5pbml0aWFsaXplKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yPy5tZXNzYWdlIHx8IGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmNvbm5lY3Rpb24/LmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1dST05HIENPTkZJRycsIGRhdGFTb3VyY2VEYkNvbmZpZyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU29tZXRoaW5nIHdyb25nIHdpdGggY29ubmVjdGlvbiBpbml0IGluICR7dGhpcy5tb2RlfWApO1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgfVxuXG4gICAgICAodGhpcy5sb2dEYiB8fCB0aGlzLmxvZ0ZyYW1ld29yaykgJiZcbiAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgIGBcblxuICAgICAgICBDT05URUNUSU9OIE9LIGZvciAke3RoaXMuY29udGV4dE5hbWV9IC0gJHt0aGlzLm1vZGV9XG5cbiAgICAgICAgW3Rhb25dW3R5cGVvcm1dIGRiIHByZXByYXRpb24gZG9uZS4uIGRiIGluaXRpYWxpemU9JHt0aGlzLmNvbm5lY3Rpb24/LmlzSW5pdGlhbGl6ZWR9XG5cblxuICAgICAgICBgLFxuICAgICAgICAgIGRhdGFTb3VyY2VEYkNvbmZpZyxcbiAgICAgICAgKTtcblxuXG5cblxuXG5cblxuXG5cblxuICAgIH0gZWxzZSB7XG4gICAgICBIZWxwZXJzLmluZm8oYFt0YW9uXVt0eXBlb3JtXSBOb3QgaW5pdGluZyBkYiBmb3IgbW9kZSAke3RoaXMubW9kZX1gKTtcbiAgICB9XG5cbiAgfVxuXG5cblxuXG4gIGluaXRNZXRhZGF0YSgpIHtcbiAgICBjb25zdCBhbGxDb250cm9sbGVycyA9IHRoaXMuZ2V0Q2xhc3NGdW5CeUFycihNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIpO1xuXG4gICAgZm9yIChjb25zdCBjb250cm9sbGVyQ2xhc3NGbiBvZiBhbGxDb250cm9sbGVycykge1xuICAgICAgY29udHJvbGxlckNsYXNzRm5bU3ltYm9scy5jbGFzc01ldGhvZHNOYW1lc10gPVxuICAgICAgICBDbGFzc0hlbHBlcnMuZ2V0TWV0aG9kc05hbWVzKGNvbnRyb2xsZXJDbGFzc0ZuKTtcbiAgICAgIGNvbnN0IGNvbmZpZ3MgPSBDbGFzc0hlbHBlcnMuZ2V0Q29udHJvbGxlckNvbmZpZ3MoY29udHJvbGxlckNsYXNzRm4pO1xuXG4gICAgICBjb25zdCBjbGFzc0NvbmZpZzogTW9kZWxzLlJ1bnRpbWVDb250cm9sbGVyQ29uZmlnID0gY29uZmlnc1swXTtcblxuICAgICAgY29uc3QgcGFyZW50c2NhbGN1bGF0ZWRQYXRoID0gXy5zbGljZShjb25maWdzLCAxKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5tYXAoYmMgPT4ge1xuICAgICAgICAgIGlmIChUYW9uSGVscGVycy5pc0dvb2RQYXRoKGJjLnBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gYmMucGF0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJjLmNsYXNzTmFtZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJy8nKTtcblxuICAgICAgaWYgKFRhb25IZWxwZXJzLmlzR29vZFBhdGgoY2xhc3NDb25maWcucGF0aCkpIHtcbiAgICAgICAgY2xhc3NDb25maWcuY2FsY3VsYXRlZFBhdGggPSBjbGFzc0NvbmZpZy5wYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3NDb25maWcuY2FsY3VsYXRlZFBhdGggPVxuICAgICAgICAgIGAke3BhcmVudHNjYWxjdWxhdGVkUGF0aH0vJHtDbGFzc0hlbHBlcnMuZ2V0TmFtZShjb250cm9sbGVyQ2xhc3NGbil9YFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG4gICAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBiYykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gXy5sYXN0KGFjYykgPT09IGJjID8gYWNjIDogWy4uLmFjYywgYmNdO1xuICAgICAgICAgICAgfSwgW10pXG4gICAgICAgICAgICAuam9pbignLycpO1xuICAgICAgfVxuXG4gICAgICBfLnNsaWNlKGNvbmZpZ3MsIDEpLmZvckVhY2goYmMgPT4ge1xuICAgICAgICBjb25zdCBhbHJlYWR5SXMgPSBjbGFzc0NvbmZpZy5tZXRob2RzO1xuICAgICAgICBjb25zdCB0b01lcmdlID0gXy5jbG9uZURlZXAoYmMubWV0aG9kcyk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRvTWVyZ2UpIHtcbiAgICAgICAgICBpZiAodG9NZXJnZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFhbHJlYWR5SXNba2V5XSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRvTWVyZ2Vba2V5XTtcbiAgICAgICAgICAgIGFscmVhZHlJc1trZXldID0gZWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICAgIHRoaXMubG9nSHR0cCAmJlxuICAgICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXG4gICAgICAgICAgICBgW3Rhb25dW2V4cHJlc3Mtc2VydmVyXSByb3V0ZXMgWyR7Y2xhc3NDb25maWcuY2xhc3NOYW1lfV1gLFxuICAgICAgICAgICk7XG4vKiAqL1xuLyogKi9cbiAgXG5cblxuICAgICAgT2JqZWN0LmtleXMoY2xhc3NDb25maWcubWV0aG9kcykuZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICAgICAgY29uc3QgbWV0aG9kQ29uZmlnOiBNb2RlbHMuTWV0aG9kQ29uZmlnID1cbiAgICAgICAgICBjbGFzc0NvbmZpZy5tZXRob2RzW21ldGhvZE5hbWVdO1xuXG4gICAgICAgIGNvbnN0IHR5cGU6IE1vZGVscy5IdHRwLlJlc3QuSHR0cE1ldGhvZCA9IG1ldGhvZENvbmZpZy50eXBlO1xuICAgICAgICBjb25zdCBleHByZXNzUGF0aCA9IG1ldGhvZENvbmZpZy5nbG9iYWxcbiAgICAgICAgICA/IGAvJHttZXRob2RDb25maWcucGF0aD8ucmVwbGFjZSgvXFwvLywgJycpfWBcbiAgICAgICAgICA6IFRhb25IZWxwZXJzLmdldEV4cHJlc3NQYXRoKGNsYXNzQ29uZmlnLCBtZXRob2RDb25maWcpO1xuXG5cbiAgICAgICAgaWYgKEhlbHBlcnMuaXNOb2RlIHx8IEhlbHBlcnMuaXNXZWJTUUwpIHtcblxuXG4gICAgICAgICAgY29uc3QgeyByb3V0ZVBhdGgsIG1ldGhvZCB9ID0gdGhpcy5pbml0U2VydmVyKFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG1ldGhvZENvbmZpZyxcbiAgICAgICAgICAgIGNsYXNzQ29uZmlnLFxuICAgICAgICAgICAgZXhwcmVzc1BhdGgsXG4gICAgICAgICAgICBjb250cm9sbGVyQ2xhc3NGbixcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5hY3RpdmVSb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICByb3V0ZVBhdGgsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNob3VsZEluaXRDbGllbnQgPVxuICAgICAgICAgIEhlbHBlcnMuaXNCcm93c2VyIHx8IHRoaXMucmVtb3RlSG9zdCB8fCBIZWxwZXJzLmlzV2ViU1FMO1xuXG4gICAgICAgIGlmIChzaG91bGRJbml0Q2xpZW50KSB7XG5cblxuXG5cblxuXG5cbiAgICAgICAgICB0aGlzLmluaXRDbGllbnQoY29udHJvbGxlckNsYXNzRm4sIHR5cGUsIG1ldGhvZENvbmZpZywgZXhwcmVzc1BhdGgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuLyogKi9cbi8qICovXG4gIFxuICAgICAgICB0aGlzLmxvZ0h0dHAgJiYgY29uc29sZS5ncm91cEVuZCgpO1xuLyogKi9cbi8qICovXG4gIFxuICAgIH1cbiAgfVxuXG5cblxuICBwdWJsaWMgd3JpdGVBY3RpdmVSb3V0ZXMoKSB7XG4gICAgY29uc3QgY29udGV4dHM6IEVuZHBvaW50Q29udGV4dFtdID0gW3RoaXNdO1xuXG5cbiAgICBjb25zdCB0cm91dGVzID0gdGhpcy5hY3RpdmVSb3V0ZXMubWFwKCh7IG1ldGhvZCwgcm91dGVQYXRoIH0pID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFRhb25IZWxwZXJzLmZpbGxVcFRvKG1ldGhvZC50b1VwcGVyQ2FzZSgpICsgJzonLCAxMCkgK1xuICAgICAgICB0aGlzLnVyaS5ocmVmLnJlcGxhY2UoL1xcLyQvLCAnJykgK1xuICAgICAgICByb3V0ZVBhdGhcbiAgICAgICk7XG5cblxuXG4gICAgfSk7XG4gICAgY29uc3Qgcm91dGVzID0gW1xuICAgICAgLi4uWycnLCBgLS0tLS0tLS0tLSBGT1IgSE9TVCAke3RoaXMudXJpLmhyZWZ9IC0tLS0tLS0tLS1gXSxcbiAgICAgIC4uLnRyb3V0ZXMsXG4gICAgXTtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguam9pbihcbi8qICovXG4vKiAqL1xuICBcbiAgICAgIGB0bXAtcm91dGVzLSR7Xy5rZWJhYkNhc2UodGhpcy5jb25maWcuY29udGV4dE5hbWUpfS5qc29uYCxcbiAgICApO1xuXG4gICAgdGhpcy5sb2dGcmFtZXdvcmsgJiYgY29uc29sZS5sb2coYFt0YW9uXSByb3V0ZXMgZmlsZTogJHtmaWxlTmFtZX0gYCk7XG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuICB9XG5cblxuXG4gIHB1YmxpYyBnZXQgbWlkZGxld2FyZXMoKTogTW9kZWxzLk1pZGRsZXdhcmVUeXBlW10ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByaXZhdGUgaW5pdE1pZGxld2FyZSgpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBpbml0U2VydmVyKFxuXG4gICAgdHlwZTogTW9kZWxzLkh0dHAuUmVzdC5IdHRwTWV0aG9kLFxuICAgIG1ldGhvZENvbmZpZzogTW9kZWxzLk1ldGhvZENvbmZpZyxcbiAgICBjbGFzc0NvbmZpZzogTW9kZWxzLlJ1bnRpbWVDb250cm9sbGVyQ29uZmlnLFxuICAgIGV4cHJlc3NQYXRoOiBzdHJpbmcsXG4gICAgdGFyZ2V0OiBGdW5jdGlvbixcblxuICApOiBhbnkge1xuXG5cbiAgICBjb25zdCByZXF1ZXN0SGFuZGxlciA9XG4gICAgICBtZXRob2RDb25maWcucmVxdWVzdEhhbmRsZXIgJiZcbiAgICAgIHR5cGVvZiBtZXRob2RDb25maWcucmVxdWVzdEhhbmRsZXIgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBtZXRob2RDb25maWcucmVxdWVzdEhhbmRsZXJcbiAgICAgICAgOiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9O1xuXG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLnVyaTtcblxuXG4gICAgY29uc3QgZ2V0UmVzdWx0ID0gYXN5bmMgKHJlc29sdmVkUGFyYW1zLCByZXEsIHJlcykgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IE1vZGVscy5IdHRwLlJlc3BvbnNlPGFueT4gPVxuICAgICAgICBtZXRob2RDb25maWcuZGVzY3JpcHRvci52YWx1ZS5hcHBseShcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBDb250ZXh0IGZvciBtZXRob2QgQEdFVCxAUFVUIGV0Yy5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLmdldEluc3RhbmNlQnkodGFyZ2V0IGFzIGFueSksXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUGFyYW1zIGZvciBtZXRqb2QgQEdFVCwgQFBVVCBldGMuXG4gICAgICAgICAgICovXG4gICAgICAgICAgcmVzb2x2ZWRQYXJhbXMsXG4gICAgICAgICk7XG4gICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZ2V0UmVzcG9uc2VWYWx1ZShyZXNwb25zZSwgeyByZXEsIHJlcyB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuXG4gICAgdXJsLnBhdGhuYW1lID0gdXJsLnBhdGhuYW1lLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgZXhwcmVzc1BhdGggPSB1cmwucGF0aG5hbWUuc3RhcnRzV2l0aCgnLycpXG4gICAgICA/IGAke3VybC5wYXRobmFtZX0ke2V4cHJlc3NQYXRofWBcbiAgICAgIDogZXhwcmVzc1BhdGg7XG4gICAgZXhwcmVzc1BhdGggPSBleHByZXNzUGF0aC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKTtcblxuXG5cbiAgICBpZiAoSGVscGVycy5pc0VsZWN0cm9uKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgIH1cblxuICAgIGlmICghdGhpcy5yZW1vdGVIb3N0KSB7XG5cblxuICAgICAgaWYgKEhlbHBlcnMuaXNXZWJTUUwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cHJlc3NBcHBbdHlwZS50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgIHRoaXMuZXhwcmVzc0FwcFt0eXBlLnRvTG93ZXJDYXNlKCldID0gKCkgPT4ge307XG4gICAgICAgIH1cbiAgICAgIH1cblxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByb3V0ZVBhdGg6IGV4cHJlc3NQYXRoLFxuICAgICAgbWV0aG9kOiBtZXRob2RDb25maWcudHlwZSxcbiAgICB9O1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBjbGllbnQgY2FuIGJlIGJyb3dzZXIgb3Igbm9kZWpzICh3aGVuIHJlbW90ZSBob3N0KVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0Q2xpZW50KFxuXG4gICAgdGFyZ2V0OiBGdW5jdGlvbixcbiAgICB0eXBlOiBNb2RlbHMuSHR0cC5SZXN0Lkh0dHBNZXRob2QsXG4gICAgbWV0aG9kQ29uZmlnOiBNb2RlbHMuSHR0cC5SZXN0Lk1ldGhvZENvbmZpZyxcbiAgICBleHByZXNzUGF0aDogc3RyaW5nLFxuXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IHRoaXM7XG5cbiAgICB0aGlzLmxvZ0h0dHAgJiYgY29uc29sZS5sb2coYCR7dHlwZT8udG9VcHBlckNhc2UoKX0gJHtleHByZXNzUGF0aH0gYCk7XG5cblxuICAgIGxldCBzdG9yYWdlOiBhbnk7XG4gICAgaWYgKEhlbHBlcnMuaXNCcm93c2VyKSB7XG4gICAgICBzdG9yYWdlID0gd2luZG93O1xuICAgIH1cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cbiAgICBjb25zdCBvcmdNZXRob2RzID0gdGFyZ2V0LnByb3RvdHlwZVttZXRob2RDb25maWcubWV0aG9kTmFtZV07XG5cblxuXG4gICAgaWYgKEhlbHBlcnMuaXNFbGVjdHJvbikge1xuICAgICAgdGFyZ2V0LnByb3RvdHlwZVttZXRob2RDb25maWcubWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICBjb25zdCByZWNlaXZlZCA9IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICAgICAgY29uc3QgeyByZXF1ZXN0LCByZXNwb25zZSB9ID0gVGFvbkhlbHBlcnMud2Vic3FsTW9ja3MoaGVhZGVycyk7XG5cbiAgICAgICAgICBIZWxwZXJzLmlwY1JlbmRlcmVyLm9uY2UoXG4gICAgICAgICAgICBUYW9uSGVscGVycy5pcGNLZXlOYW1lUmVzcG9uc2UodGFyZ2V0LCBtZXRob2RDb25maWcsIGV4cHJlc3NQYXRoKSxcbiAgICAgICAgICAgIChldmVudCwgcmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGxldCByZXM6IGFueSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coeyByZXNwb25zZURhdGEgfSk7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHJlcztcbiAgICAgICAgICAgICAgICByZXMgPSBuZXcgTW9kZWxzTmcyUmVzdC5IdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgaXNBcnJheTogdm9pZCAwIGFzIGFueSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2RDb25maWcudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBgJHtjdHgudXJpLm9yaWdpbn0ke1xuICAgICAgICAgICAgICAgICAgICAgICcnIC8vIFRPRE8gZXhwcmVzcyBwYXRoXG4gICAgICAgICAgICAgICAgICAgIH0ke21ldGhvZENvbmZpZy5wYXRofSBgLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIEhlbHBlcnMuaXNCbG9iKGJvZHkpIHx8IF8uaXNTdHJpbmcoYm9keSlcbiAgICAgICAgICAgICAgICAgICAgPyBib2R5XG4gICAgICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICAgICAgICAgICAgICBSZXN0SGVhZGVycy5mcm9tKGhlYWRlcnMpLFxuICAgICAgICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgKCkgPT4gYm9keSxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBIZWxwZXJzLmlwY1JlbmRlcmVyLnNlbmQoXG4gICAgICAgICAgICBUYW9uSGVscGVycy5pcGNLZXlOYW1lUmVxdWVzdCh0YXJnZXQsIG1ldGhvZENvbmZpZywgZXhwcmVzc1BhdGgpLFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVjZWl2ZWRbJ29ic2VydmFibGUnXSA9IGZyb20ocmVjZWl2ZWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlY2VpdmVkLFxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuXG5cblxuXG4gICAgY29uc3QgTUlOX1RJTUVPVVQgPSA1MDA7XG4gICAgY29uc3QgTUlOX1RJTUVPVVRfU1RFUCA9IDIwMDtcbiAgICBjb25zdCB0aW1lb3V0ID1cbiAgICAgIHdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19USU1FT1VUXSB8fCBNSU5fVElNRU9VVDtcblxuICAgIGxldCB1cGRhdGVGdW46IFN1YmplY3Q8bnVtYmVyPiA9XG4gICAgICB3aW5kb3dbU3ltYm9scy5vbGQuV0VCU1FMX1JFU1RfUFJPR1JFU1NfRlVOXTtcbiAgICBpZiAoIXdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19GVU5dKSB7XG4gICAgICB3aW5kb3dbU3ltYm9scy5vbGQuV0VCU1FMX1JFU1RfUFJPR1JFU1NfRlVOXSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgfVxuICAgIHVwZGF0ZUZ1biA9IHdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19GVU5dO1xuXG4gICAgbGV0IHN0YXJ0RnVuOiBTdWJqZWN0PHZvaWQ+ID1cbiAgICAgIHdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19GVU5fU1RBUlRdO1xuICAgIGlmICghd2luZG93W1N5bWJvbHMub2xkLldFQlNRTF9SRVNUX1BST0dSRVNTX0ZVTl9TVEFSVF0pIHtcbiAgICAgIHdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19GVU5fU1RBUlRdID0gbmV3IFN1YmplY3QoKTtcbiAgICB9XG4gICAgc3RhcnRGdW4gPSB3aW5kb3dbU3ltYm9scy5vbGQuV0VCU1FMX1JFU1RfUFJPR1JFU1NfRlVOX1NUQVJUXTtcblxuICAgIGxldCBkb25lRnVuOiBTdWJqZWN0PHZvaWQ+ID1cbiAgICAgIHdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19GVU5fRE9ORV07XG4gICAgaWYgKCF3aW5kb3dbU3ltYm9scy5vbGQuV0VCU1FMX1JFU1RfUFJPR1JFU1NfRlVOX0RPTkVdKSB7XG4gICAgICB3aW5kb3dbU3ltYm9scy5vbGQuV0VCU1FMX1JFU1RfUFJPR1JFU1NfRlVOX0RPTkVdID0gbmV3IFN1YmplY3QoKTtcbiAgICB9XG4gICAgZG9uZUZ1biA9IHdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19GVU5fRE9ORV07XG5cbiAgICBsZXQgcGVyaW9kc1RvVXBkYXRlID0gMDtcbiAgICBpZiAodGltZW91dCA+PSBNSU5fVElNRU9VVCkge1xuICAgICAgcGVyaW9kc1RvVXBkYXRlID0gTWF0aC5mbG9vcih0aW1lb3V0IC8gTUlOX1RJTUVPVVRfU1RFUCk7XG4gICAgfVxuXG5cblxuICAgIGNvbnN0IHBlcmlvZHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBzdGFydEZ1bi5uZXh0KCk7XG4gICAgICBmb3IgKGxldCBuID0gMTsgbiA8PSBwZXJpb2RzVG9VcGRhdGU7IG4rKykge1xuXG5cblxuICAgICAgICBsZXQgdXBWYWx1ZSA9IE1hdGgucm91bmQoKChNSU5fVElNRU9VVF9TVEVQICogbikgLyB0aW1lb3V0KSAqIDEwMCk7XG4gICAgICAgIGlmICh1cFZhbHVlID4gMTAwKSB7XG4gICAgICAgICAgdXBWYWx1ZSA9IDEwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZUZ1bi5uZXh0KHVwVmFsdWUpO1xuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUodm9pZCAwKTtcbiAgICAgICAgICB9LCBNSU5fVElNRU9VVF9TVEVQKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIH1cbiAgICAgIGRvbmVGdW4ubmV4dCgpO1xuICAgIH07XG5cblxuICAgIHRhcmdldC5wcm90b3R5cGVbbWV0aG9kQ29uZmlnLm1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblxuXG5cbiAgICAgIGNvbnN0IHJlY2VpdmVkID0gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdCwgcmVzcG9uc2UgfSA9IFRhb25IZWxwZXJzLndlYnNxbE1vY2tzKGhlYWRlcnMpO1xuXG4gICAgICAgIGxldCByZXM6IGFueTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXMgPSBhd2FpdCBIZWxwZXJzLnJ1blN5bmNPckFzeW5jKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uRm46IG9yZ01ldGhvZHMsXG4gICAgICAgICAgICBjb250ZXh0OiB0aGlzLFxuICAgICAgICAgICAgYXJyYXlPZlBhcmFtczogYXJncyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXMgPSBhd2FpdCBIZWxwZXJzLnJ1blN5bmNPckFzeW5jKHtcbiAgICAgICAgICAgICAgZnVuY3Rpb25GbjogcmVzLFxuICAgICAgICAgICAgICBjb250ZXh0OiB0aGlzLFxuICAgICAgICAgICAgICBhcnJheU9mUGFyYW1zOiBbcmVxdWVzdCwgcmVzcG9uc2VdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlcyA9IGF3YWl0IEhlbHBlcnMucnVuU3luY09yQXN5bmMoe1xuICAgICAgICAgICAgICBmdW5jdGlvbkZuOiByZXMsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMsXG4gICAgICAgICAgICAgIGFycmF5T2ZQYXJhbXM6IFtyZXF1ZXN0LCByZXNwb25zZV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cblxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiByZXM/LnJlY2VpdmVkKSB7XG4gICAgICAgICAgICByZXMgPSBhd2FpdCByZXMucmVjZWl2ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHJlcztcblxuICAgICAgICAgIHJlcyA9IG5ldyBNb2RlbHNOZzJSZXN0Lkh0dHBSZXNwb25zZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYm9keTogdm9pZCAwLFxuICAgICAgICAgICAgICBpc0FycmF5OiB2b2lkIDAgYXMgYW55LFxuICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZENvbmZpZy50eXBlLFxuICAgICAgICAgICAgICB1cmw6IGAke2N0eC51cmkub3JpZ2lufSR7XG4gICAgICAgICAgICAgICAgJycgLy8gVE9ETyBleHByZXNzIHBhdGhcbiAgICAgICAgICAgICAgfSR7bWV0aG9kQ29uZmlnLnBhdGh9IGAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSGVscGVycy5pc0Jsb2IoYm9keSkgfHwgXy5pc1N0cmluZyhib2R5KVxuICAgICAgICAgICAgICA/IGJvZHlcbiAgICAgICAgICAgICAgOiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgICAgIFJlc3RIZWFkZXJzLmZyb20oaGVhZGVycyksXG4gICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICAoKSA9PiBib2R5LFxuICAgICAgICAgICk7XG5cblxuXG5cblxuICAgICAgICAgIGF3YWl0IHBlcmlvZHMoKTtcbiAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgYXdhaXQgcGVyaW9kcygpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXG5cblxuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmVjZWl2ZWRbJ29ic2VydmFibGUnXSA9IGZyb20ocmVjZWl2ZWQpO1xuXG4gICAgICBpZiAoSGVscGVycy5pc1dlYlNRTCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlY2VpdmVkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKEhlbHBlcnMuaXNXZWJTUUwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuXG5cblxuICAgIHRhcmdldC5wcm90b3R5cGVbbWV0aG9kQ29uZmlnLm1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKHRoaXM6IHt9LCAuLi5hcmdzKSB7XG5cblxuXG5cblxuICAgICAgaWYgKCFzdG9yYWdlW1N5bWJvbHMub2xkLkVORFBPSU5UX01FVEFfQ09ORklHXSlcbiAgICAgICAgc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR10gPSB7fTtcbiAgICAgIGlmICghc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR11bY3R4LnVyaS5ocmVmXSlcbiAgICAgICAgc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR11bY3R4LnVyaS5ocmVmXSA9IHt9O1xuICAgICAgY29uc3QgZW5kcG9pbnRzID0gc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR107XG4gICAgICBsZXQgcmVzdDogTW9kZWxzTmcyUmVzdC5SZXNvdXJjZU1vZGVsPGFueSwgYW55PjtcbiAgICAgIGlmICghZW5kcG9pbnRzW2N0eC51cmkuaHJlZl1bZXhwcmVzc1BhdGhdKSB7XG4gICAgICAgIGxldCBoZWFkZXJzID0ge307XG4gICAgICAgIGlmIChtZXRob2RDb25maWcuY29udGVudFR5cGUgJiYgIW1ldGhvZENvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgICAgICByZXN0ID0gUmVzb3VyY2UuY3JlYXRlKFxuICAgICAgICAgICAgY3R4LnVyaS5ocmVmLFxuICAgICAgICAgICAgZXhwcmVzc1BhdGgsXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVIgYXMgYW55LFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSBhcyBhbnksXG4gICAgICAgICAgICBSZXN0SGVhZGVycy5mcm9tKHtcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgQWNjZXB0OiBtZXRob2RDb25maWcuY29udGVudFR5cGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSAmJiBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICAgICAgcmVzdCA9IFJlc291cmNlLmNyZWF0ZShcbiAgICAgICAgICAgIGN0eC51cmkuaHJlZixcbiAgICAgICAgICAgIGV4cHJlc3NQYXRoLFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSIGFzIGFueSxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLkNJUkNVUkFMX09CSkVDVFNfTUFQX0JPRFkgYXMgYW55LFxuICAgICAgICAgICAgUmVzdEhlYWRlcnMuZnJvbSh7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBtZXRob2RDb25maWcuY29udGVudFR5cGUsXG4gICAgICAgICAgICAgIEFjY2VwdDogbWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICByZXNwb25zZXR5cGVheGlvczogbWV0aG9kQ29uZmlnLnJlc3BvbnNlVHlwZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW1ldGhvZENvbmZpZy5jb250ZW50VHlwZSAmJiBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICAgICAgcmVzdCA9IFJlc291cmNlLmNyZWF0ZShcbiAgICAgICAgICAgIGN0eC51cmkuaHJlZixcbiAgICAgICAgICAgIGV4cHJlc3NQYXRoLFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSIGFzIGFueSxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLkNJUkNVUkFMX09CSkVDVFNfTUFQX0JPRFkgYXMgYW55LFxuICAgICAgICAgICAgUmVzdEhlYWRlcnMuZnJvbSh7XG4gICAgICAgICAgICAgIHJlc3BvbnNldHlwZWF4aW9zOiBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0ID0gUmVzb3VyY2UuY3JlYXRlKFxuICAgICAgICAgICAgY3R4LnVyaS5ocmVmLFxuICAgICAgICAgICAgZXhwcmVzc1BhdGgsXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVIgYXMgYW55LFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSBhcyBhbnksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVuZHBvaW50c1tjdHgudXJpLmhyZWZdW2V4cHJlc3NQYXRoXSA9IHJlc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0ID0gZW5kcG9pbnRzW2N0eC51cmkuaHJlZl1bZXhwcmVzc1BhdGhdIGFzIGFueTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWV0aG9kID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgaXNXaXRoQm9keSA9IG1ldGhvZCA9PT0gJ3B1dCcgfHwgbWV0aG9kID09PSAncG9zdCc7XG4gICAgICBjb25zdCBwYXRoUHJhbXMgPSB7fTtcbiAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHt9O1xuICAgICAgbGV0IGJvZHlPYmplY3QgPSB7fTtcbiAgICAgIGFyZ3MuZm9yRWFjaCgocGFyYW0sIGkpID0+IHtcbiAgICAgICAgbGV0IGN1cnJlbnRQYXJhbTogTW9kZWxzLkh0dHAuUmVzdC5QYXJhbUNvbmZpZyA9IHZvaWQgMCBhcyBhbnk7XG5cbiAgICAgICAgZm9yIChsZXQgcHAgaW4gbWV0aG9kQ29uZmlnLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgICBsZXQgdiA9IG1ldGhvZENvbmZpZy5wYXJhbWV0ZXJzW3BwXTtcbiAgICAgICAgICBpZiAodi5pbmRleCA9PT0gaSkge1xuICAgICAgICAgICAgY3VycmVudFBhcmFtID0gdjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnUGF0aCcpIHtcbiAgICAgICAgICBwYXRoUHJhbXNbY3VycmVudFBhcmFtLnBhcmFtTmFtZV0gPSBwYXJhbTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtVHlwZSA9PT0gJ1F1ZXJ5Jykge1xuICAgICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gTWFwcGluZy5kZWNvZGUocGFyYW0sICFjdHguaXNQcm9kdWN0aW9uTW9kZSk7XG4gICAgICAgICAgICBpZiAobWFwcGluZykge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgIGAke1N5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUl9RVUVSWV9QQVJBTVN9JHtjdXJyZW50UGFyYW0ucGFyYW1OYW1lfSBgLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1hcHBpbmcpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlQYXJhbXNbY3VycmVudFBhcmFtLnBhcmFtTmFtZV0gPSBwYXJhbTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IE1hcHBpbmcuZGVjb2RlKHBhcmFtLCAhY3R4LmlzUHJvZHVjdGlvbk1vZGUpO1xuICAgICAgICAgICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVJfUVVFUllfUEFSQU1TLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1hcHBpbmcpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBfLmNsb25lRGVlcChwYXJhbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnSGVhZGVyJykge1xuICAgICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtTmFtZSA9PT0gU3ltYm9scy5vbGQuTURDX0tFWSkge1xuXG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmFtLnBhcmFtTmFtZSxcbiAgICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocGFyYW0pKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoY3VycmVudFBhcmFtLnBhcmFtTmFtZSwgcGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBoZWFkZXIgaW4gcGFyYW0pIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChoZWFkZXIsIHBhcmFtW2hlYWRlcl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtVHlwZSA9PT0gJ0Nvb2tpZScpIHtcbiAgICAgICAgICBSZXNvdXJjZS5Db29raWVzLndyaXRlKFxuICAgICAgICAgICAgY3VycmVudFBhcmFtLnBhcmFtTmFtZSxcbiAgICAgICAgICAgIHBhcmFtLFxuICAgICAgICAgICAgY3VycmVudFBhcmFtLmV4cGlyZUluU2Vjb25kcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnQm9keScpIHtcbiAgICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtTmFtZSkge1xuICAgICAgICAgICAgaWYgKENsYXNzSGVscGVycy5nZXROYW1lKGJvZHlPYmplY3QpID09PSAnRm9ybURhdGEnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW3Rhb24gLSBmcmFtZXdvcmtdIERvbiB1c2UgcGFyYW0gbmFtZXMgd2hlbiBwb3N0aW5nIC8gcHV0dGluZyBGb3JtRGF0YS5cbiAgICAgICAgICAgICAgVXNlIHRoaXM6XG5cbihAVGFvbi5IdHRwLlBhcmFtLkJvZHkoKSBmb3JtRGF0YTogRm9ybURhdGEpIC4uLlxuXG5cbmluc3RlYWRcblxuICAoQFRhb24uSHR0cC5QYXJhbS5Cb2R5KCcke2N1cnJlbnRQYXJhbS5wYXJhbU5hbWV9JykgZm9ybURhdGE6IEZvcm1EYXRhKSAuLi5cblxuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gTWFwcGluZy5kZWNvZGUocGFyYW0sICFjdHguaXNQcm9kdWN0aW9uTW9kZSk7XG4gICAgICAgICAgICBpZiAobWFwcGluZykge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgIGAke1N5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUl9CT0RZX1BBUkFNU30ke2N1cnJlbnRQYXJhbS5wYXJhbU5hbWV9IGAsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFwcGluZyksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5T2JqZWN0W2N1cnJlbnRQYXJhbS5wYXJhbU5hbWVdID0gcGFyYW07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBNYXBwaW5nLmRlY29kZShwYXJhbSwgIWN0eC5pc1Byb2R1Y3Rpb25Nb2RlKTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSX0JPRFlfUEFSQU1TLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1hcHBpbmcpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keU9iamVjdCA9IHBhcmFtO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGJvZHlPYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgICAgIENsYXNzSGVscGVycy5nZXROYW1lKGJvZHlPYmplY3QpICE9PSAnRm9ybURhdGEnXG4gICAgICApIHtcbiAgICAgICAgbGV0IGNpcmN1cmFsRnJvbUl0ZW0gPSBbXTtcbiAgICAgICAgYm9keU9iamVjdCA9IEpTT04xMC5wYXJzZShcbiAgICAgICAgICBKU09OMTAuc3RyaW5naWZ5KGJvZHlPYmplY3QsIHZvaWQgMCwgdm9pZCAwLCBjaXJjcyA9PiB7XG4gICAgICAgICAgICBjaXJjdXJhbEZyb21JdGVtID0gY2lyY3M7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSxcbiAgICAgICAgICBKU09OMTAuc3RyaW5naWZ5KGNpcmN1cmFsRnJvbUl0ZW0pLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHF1ZXJ5UGFyYW1zID09PSAnb2JqZWN0Jykge1xuICAgICAgICBsZXQgY2lyY3VyYWxGcm9tUXVlcnlQYXJhbXMgPSBbXTtcbiAgICAgICAgcXVlcnlQYXJhbXMgPSBKU09OMTAucGFyc2UoXG4gICAgICAgICAgSlNPTjEwLnN0cmluZ2lmeShxdWVyeVBhcmFtcywgdm9pZCAwLCB2b2lkIDAsIGNpcmNzID0+IHtcbiAgICAgICAgICAgIGNpcmN1cmFsRnJvbVF1ZXJ5UGFyYW1zID0gY2lyY3M7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICBTeW1ib2xzLm9sZC5DSVJDVVJBTF9PQkpFQ1RTX01BUF9RVUVSWV9QQVJBTSxcbiAgICAgICAgICBKU09OMTAuc3RyaW5naWZ5KGNpcmN1cmFsRnJvbVF1ZXJ5UGFyYW1zKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuXG4gICAgICBjb25zdCBodHRwUmVzdWx0T2JqID0ge1xuICAgICAgICByZWNlaXZlZDogaXNXaXRoQm9keVxuICAgICAgICAgID8gcmVzdC5tb2RlbChwYXRoUHJhbXMpW21ldGhvZF0oYm9keU9iamVjdCwgW3F1ZXJ5UGFyYW1zXSlcbiAgICAgICAgICA6IHJlc3QubW9kZWwocGF0aFByYW1zKVttZXRob2RdKFtxdWVyeVBhcmFtc10pLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBodHRwUmVzdWx0T2JqO1xuICAgIH07XG5cbiAgfVxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10YW9uIGxpYi9lbmRwb2ludC1jb250ZXh0LnRzIl19
|
|
1542
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0LXdlYnNxbC90YW9uL3Byb2plY3RzL3Rhb24vc3JjL2xpYi9lbmRwb2ludC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLCtDQUErQztBQUcvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFXdEQsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQVEsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRSxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUdMLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVsRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUksT0FBTyxFQUFJLE1BQU0sSUFBSSxhQUFhLEVBQUksUUFBUSxFQUFJLFdBQVcsR0FBRyxNQUFNLGlCQUFpQixDQUFDLENBQUEsS0FBSztBQUN4RyxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxF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QUlQLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZ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QztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx5REFBeUQiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVkZWYgKi9cblxuXG5pbXBvcnQgeyBFdmVudFN1YnNjcmliZXIgfSBmcm9tICd0YW9uLXR5cGVvcm0vd2Vic3FsJztcbmltcG9ydCB0eXBlIHtcbiAgVHJhbnNhY3Rpb25Sb2xsYmFja0V2ZW50LFxuICBUcmFuc2FjdGlvbkNvbW1pdEV2ZW50LFxuICBUcmFuc2FjdGlvblN0YXJ0RXZlbnQsXG4gIFJlY292ZXJFdmVudCxcbiAgU29mdFJlbW92ZUV2ZW50LFxuICBSZW1vdmVFdmVudCxcbiAgVXBkYXRlRXZlbnQsXG4gIEluc2VydEV2ZW50LFxufSBmcm9tICd0YW9uLXR5cGVvcm0nO1xuaW1wb3J0IHsgRW50aXR5IGFzIFR5cGVvcm1FbnRpdHksIFRyZWUgfSBmcm9tICd0YW9uLXR5cGVvcm0vd2Vic3FsJztcblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5pbXBvcnQgeyBUYW9uQWRtaW4gfSBmcm9tICcuL3VpL3Rhb24tYWRtaW4tbW9kZS1jb25maWd1cmF0aW9uL3Rhb24tYWRtaW4uc2VydmljZSc7XG5cbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IENsYXNzSGVscGVycyB9IGZyb20gJy4vaGVscGVycy9jbGFzcy1oZWxwZXJzJztcbmltcG9ydCB7IFN5bWJvbHMgfSBmcm9tICcuL3N5bWJvbHMnO1xuaW1wb3J0IHsgXywgSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL3dlYnNxbCc7XG5pbXBvcnQgdHlwZSB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuL2NyZWF0ZS1jb250ZXh0JztcbmltcG9ydCB7IERJVGFvbkNvbnRhaW5lciB9IGZyb20gJy4vZGVwZW5kZW5jeS1pbmplY3Rpb24vZGktY29udGFpbmVyJztcbmltcG9ydCB7IFRhb25Db250cm9sbGVyT3B0aW9ucyB9IGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL2NvbnRyb2xsZXItZGVjb3JhdG9yJztcbmltcG9ydCB7IFRhb25IZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzL3Rhb24taGVscGVycyc7XG5pbXBvcnQgeyAgIE1hcHBpbmcsICAgTW9kZWxzIGFzIE1vZGVsc05nMlJlc3QsICAgUmVzb3VyY2UsICAgUmVzdEhlYWRlcnMsIH0gZnJvbSAnbmcyLXJlc3Qvd2Vic3FsJzsvKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cblxuaW1wb3J0IHsgSlNPTjEwIH0gZnJvbSAnanNvbjEwL3dlYnNxbCc7XG5pbXBvcnQgeyBwYXRoIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7IGZyb20sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVByb2Nlc3MgfSBmcm9tICcuL2VudGl0eS1wcm9jZXNzJztcbmltcG9ydCB7IGdldFJlc3BvbnNlVmFsdWUgfSBmcm9tICcuL2dldC1yZXNwb25zZS12YWx1ZSc7XG5pbXBvcnQgdHlwZSB7IEFwcGxpY2F0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHR5cGUgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgICBEYXRhU291cmNlLCAgIERhdGFTb3VyY2VPcHRpb25zLCAgIGdldE1ldGFkYXRhQXJnc1N0b3JhZ2UsIH0gZnJvbSAndGFvbi10eXBlb3JtL3dlYnNxbCc7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cblxuaW1wb3J0IHsgVGFvbkVudGl0eU9wdGlvbnMgfSBmcm9tICcuL2RlY29yYXRvcnMvY2xhc3Nlcy9lbnRpdHktZGVjb3JhdG9yJztcbmltcG9ydCB0eXBlIHsgU2VydmVyIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBFTlYgfSBmcm9tICcuL2Vudic7XG5pbXBvcnQgdHlwZSB7IEJhc2VDbGFzcyB9IGZyb20gJy4vYmFzZS1jbGFzc2VzL2Jhc2UtY2xhc3MnO1xuaW1wb3J0IHsgUmVhbHRpbWVDb3JlIH0gZnJvbSAnLi9yZWFsdGltZS9yZWFsdGltZS1jb3JlJztcbmltcG9ydCB7IFRhb25TdWJzY3JpYmVyT3B0aW9ucyB9IGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL3N1YnNjcmliZXItZGVjb3JhdG9yJztcbmltcG9ydCB7IEJhc2VTdWJzY3JpYmVyRm9yRW50aXR5IH0gZnJvbSAnLi9iYXNlLWNsYXNzZXMvYmFzZS1zdWJzY3JpYmVyLWZvci1lbnRpdHknO1xuXG5cbmV4cG9ydCBjbGFzcyBFbmRwb2ludENvbnRleHQge1xuXG5cblxuICBwcml2YXRlIHN0YXRpYyBuZ1pvbmU6IE5nWm9uZTtcblxuICBzdGF0aWMgaW5pdE5nWm9uZShuZ1pvbmU6IE5nWm9uZSkge1xuXG4gICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG5cbiAgfVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICBkaXNhYmxlZFJlYWx0aW1lOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBjaGVjayB3aGV0aGVyIGNvbnRleHQgaXMgaW5pdGVkXG4gICAqICh3aXRoIGluaXQoKSBmdW5jdGlvbiApXG4gICAqL1xuICBwdWJsaWMgaW5pdGVkOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsSW5zdGFjZU9ialN5bWJvbCA9IFN5bWJvbCgnbG9jYWxJbnN0YWNlT2JqU3ltYm9sJyk7XG5cblxuICAvKipcbiAgICogYWxsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGZyb20gY29udGV4dFxuICAgKiBrZXkgaXMgY2xhc3MgbmFtZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFsbENsYXNzZXNJbnN0YW5jZXMgPSB7fTtcblxuXG5cbiAgcHJpdmF0ZSByZWFkb25seSBjbGFzc0luc3RhbmNlc0J5TmFtZU9iaiA9IHt9O1xuXG5cblxuICBwcml2YXRlIHJlYWRvbmx5IG9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyID0ge307XG5cblxuXG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVSb3V0ZXM6IHtcbiAgICByb3V0ZVBhdGg6IHN0cmluZztcbiAgICBtZXRob2Q6IE1vZGVscy5IdHRwLlJlc3QuSHR0cE1ldGhvZDtcbiAgfVtdID0gW107XG5cblxuXG4gIHByaXZhdGUgaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzID0gW1xuICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgIE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWSxcbiAgICBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVIsXG4gIF07XG5cblxuICBwcml2YXRlIGFsbFR5cGVzZnJvbUNvbnRleHRzID0gW1xuICAgIC4uLnRoaXMuaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzLFxuICAgIE1vZGVscy5DbGFzc1R5cGUuRU5USVRZLFxuICBdO1xuXG5cblxuXG4gIHB1YmxpYyBleHByZXNzQXBwOiBBcHBsaWNhdGlvbiA9IHt9IGFzIGFueTtcblxuXG5cbiAgcHVibGljIHNlcnZlclRjcFVkcDogU2VydmVyO1xuXG5cblxuICBkYXRhYmFzZUNvbmZpZz86IE1vZGVscy5EYXRhYmFzZUNvbmZpZztcbiAgcHJpdmF0ZSBhdXRvR2VuZXJhdGVkQ29uZmlnPzogTW9kZWxzLkRhdGFiYXNlQ29uZmlnO1xuXG5cblxuICBtb2RlOiBNb2RlbHMuRnJhbWV3b3JrTW9kZTtcblxuXG5cbiAgc2Vzc2lvbj86IE1vZGVscy5JU2Vzc2lvbjtcblxuXG5cbiAgcHVibGljIGNvbm5lY3Rpb246IERhdGFTb3VyY2U7XG5cblxuXG4gIHByaXZhdGUgZW50aXRpZXNUcmlnZ2VycyA9IHt9O1xuXG5cblxuICBwcml2YXRlIHJlYWx0aW1lOiBSZWFsdGltZUNvcmU7XG4gIGdldCByZWFsdGltZUNsaWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFsdGltZS5jbGllbnQ7XG4gIH1cbiAgZ2V0IHJlYWx0aW1lU2VydmVyKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWx0aW1lLnNlcnZlcjtcbiAgfVxuXG5cblxuICAvKipcbiAgICogYXZhaWxhYmxlIGFmdGVyIGluaXQoKVxuICAgKi9cbiAgcHVibGljIGNvbmZpZzogTW9kZWxzLkNvbnRleHRPcHRpb25zPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuXG5cblxuICBnZXQgbG9nSHR0cCgpOiBib29sZWFuIHtcbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZz8ubG9ncykpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmNvbmZpZy5sb2dzIGFzIE1vZGVscy5Db250ZWN0aW9uT3B0aW9uc0xvZ3MpLmh0dHA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ubG9ncyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBsb2dSZWFsdGltZSgpOiBib29sZWFuIHtcbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZz8ubG9ncykpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmNvbmZpZy5sb2dzIGFzIE1vZGVscy5Db250ZWN0aW9uT3B0aW9uc0xvZ3MpLnJlYWx0aW1lO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmxvZ3MgPT09IHRydWU7XG4gIH1cblxuICBnZXQgbG9nRnJhbWV3b3JrKCk6IGJvb2xlYW4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMuY29uZmlnPy5sb2dzKSkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLmxvZ3MgYXMgTW9kZWxzLkNvbnRlY3Rpb25PcHRpb25zTG9ncykuZnJhbWV3b3JrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmxvZ3MgPT09IHRydWU7XG4gIH1cblxuICBnZXQgbG9nRGIoKTogYm9vbGVhbiB7XG4gICAgaWYgKF8uaXNPYmplY3QodGhpcy5jb25maWc/LmxvZ3MpKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5jb25maWcubG9ncyBhcyBNb2RlbHMuQ29udGVjdGlvbk9wdGlvbnNMb2dzKS5kYjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5sb2dzID09PSB0cnVlO1xuICB9XG5cblxuXG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG9yaWdpbmFsQ29uZmlnOiBNb2RlbHMuQ29udGV4dE9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT4sXG4gICAgcHJpdmF0ZSBjb25maWdGbjogKFxuICAgICAgZW52OiBhbnksXG4gICAgKSA9PiBNb2RlbHMuQ29udGV4dE9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT4sXG4gICkge31cblxuXG5cbiAgcHVibGljIGFzeW5jIGluaXQob3B0aW9ucz86IHtcbiAgICBpbml0RnJvbVJlY3J1c2l2ZUNvbnRleHRSZXNvdmxlPzogYm9vbGVhbjtcbiAgICBvdmVycmlkZUhvc3Q/OiBzdHJpbmcgfCBudWxsO1xuICAgIG92ZXJyaWRlUmVtb3RlSG9zdD86IHN0cmluZyB8IG51bGw7XG4gIH0pIHtcbiAgICBjb25zdCB7XG4gICAgICBpbml0RnJvbVJlY3J1c2l2ZUNvbnRleHRSZXNvdmxlLFxuICAgICAgb3ZlcnJpZGVIb3N0LFxuICAgICAgb3ZlcnJpZGVSZW1vdGVIb3N0LFxuICAgIH0gPSBvcHRpb25zIHx8IHt9OyAvLyBUT0RPIHVzZSBpdCA/XG5cbiAgICB0aGlzLmluaXRlZCA9IHRydWU7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZ0ZuKEVOVik7XG4gICAgaWYgKG92ZXJyaWRlSG9zdCAmJiBvdmVycmlkZVJlbW90ZUhvc3QpIHtcbiAgICAgIEhlbHBlcnMudGhyb3coXG4gICAgICAgIGBbdGFvbi1jb25maWddIFlvdSBjYW4ndCBoYXZlIG92ZXJyaWRlSG9zdCBhbmQgb3ZlcnJpZGVSZW1vdGVIb3N0IGF0IHRoZSBzYW1lIHRpbWVgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZy5ob3N0ID0gIV8uaXNVbmRlZmluZWQob3ZlcnJpZGVIb3N0KVxuICAgICAgPyBvdmVycmlkZUhvc3RcbiAgICAgIDogdGhpcy5jb25maWcuaG9zdDtcbiAgICB0aGlzLmNvbmZpZy5yZW1vdGVIb3N0ID0gIV8uaXNVbmRlZmluZWQob3ZlcnJpZGVSZW1vdGVIb3N0KVxuICAgICAgPyBvdmVycmlkZVJlbW90ZUhvc3RcbiAgICAgIDogdGhpcy5jb25maWcucmVtb3RlSG9zdDtcblxuICAgIHRoaXMuY29uZmlnLmhvc3QgPSB0aGlzLmhvc3QgPT09IG51bGwgPyB2b2lkIDAgOiB0aGlzLmhvc3Q7XG4gICAgdGhpcy5jb25maWcucmVtb3RlSG9zdCA9XG4gICAgICB0aGlzLnJlbW90ZUhvc3QgPT09IG51bGwgPyB2b2lkIDAgOiB0aGlzLnJlbW90ZUhvc3Q7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5ob3N0ICYmXG4gICAgICAhdGhpcy5jb25maWcuaG9zdC5zdGFydHNXaXRoKCdodHRwOi8vJykgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5ob3N0LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJylcbiAgICApIHtcbiAgICAgIEhlbHBlcnMudGhyb3coXG4gICAgICAgIGBbdGFvbi1jb25maWddIFlvdXIgJ2hvc3QnIG11c3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWcucmVtb3RlSG9zdCAmJlxuICAgICAgIXRoaXMuY29uZmlnLnJlbW90ZUhvc3Quc3RhcnRzV2l0aCgnaHR0cDovLycpICYmXG4gICAgICAhdGhpcy5jb25maWcucmVtb3RlSG9zdC5zdGFydHNXaXRoKCdodHRwczovLycpXG4gICAgKSB7XG4gICAgICBIZWxwZXJzLnRocm93KFxuICAgICAgICBgW3Rhb24tY29uZmlnXSBZb3VyICdyZW1vdGVIb3N0JyBtdXN0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovL2AsXG4gICAgICApO1xuICAgIH1cblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmhvc3QpIHtcbiAgICAgIHRoaXMubW9kZSA9ICdiYWNrZW5kLWZyb250ZW5kKHRjcCt1ZHApJztcblxuICAgICAgdGhpcy5tb2RlID0gJ2JhY2tlbmQtZnJvbnRlbmQod2Vic3FsKSc7XG5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcucmVtb3RlSG9zdCkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmhvc3QpIHtcbiAgICAgICAgSGVscGVycy50aHJvdyhcbiAgICAgICAgICBgW3Rhb25dIFlvdSBjYW4ndCBoYXZlIHJlbW90ZUhvc3QgYW5kIGhvc3QgYXQgdGhlIHNhbWUgdGltZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLm1vZGUgPSAncmVtb3RlLWJhY2tlbmQodGNwK3VkcCknO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy51c2VJcGNXaGVuRWxlY3Ryb24gJiYgSGVscGVycy5pc0VsZWN0cm9uKSB7XG4gICAgICBpZiAoSGVscGVycy5pc1dlYlNRTCkge1xuICAgICAgICB0aGlzLm1vZGUgPSAnYmFja2VuZC1mcm9udGVuZCh3ZWJzcWwtZWxlY3Ryb24pJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9kZSA9ICdiYWNrZW5kLWZyb250ZW5kKGlwYy1lbGVjdHJvbiknO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5tb2RlICYmICF0aGlzLmNvbmZpZy5hYnN0cmFjdCkge1xuICAgICAgSGVscGVycy5lcnJvcihcbiAgICAgICAgYFt0YW9uXSBDb250ZXh0IFwiJHt0aGlzLmNvbnRleHROYW1lfVwiOiBZb3UgbmVlZCB0byBwcm92aWRlIGhvc3Qgb3IgcmVtb3RlSG9zdCBvciB1c2VJcGNXaGVuRWxlY3Ryb25gLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4vKiAqL1xuLyogKi9cbiAgXG4gICAgfVxuXG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5kYXRhYmFzZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kYXRhYmFzZUNvbmZpZyA9IHRoaXMuZ2V0QXV0b0dlbmVyYXRlZENvbmZpZygpO1xuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZy5kYXRhYmFzZSkpIHtcbiAgICAgIHRoaXMuZGF0YWJhc2VDb25maWcgPSBfLm1lcmdlKFxuICAgICAgICB0aGlzLmdldEF1dG9HZW5lcmF0ZWRDb25maWcoKSxcbiAgICAgICAgXy5jbG9uZURlZXAodGhpcy5jb25maWcuZGF0YWJhc2UpLFxuICAgICAgKSBhcyBNb2RlbHMuRGF0YWJhc2VDb25maWc7XG4gICAgfVxuXG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5zZXNzaW9uKSB7XG4gICAgICB0aGlzLnNlc3Npb24gPSBfLmNsb25lRGVlcCh0aGlzLmNvbmZpZy5zZXNzaW9uKTtcbiAgICAgIGNvbnN0IG9uZUhvdXIgPSAxMDAwICogNjAgKiA2MCAqIDE7IC8vIDI0O1xuICAgICAgaWYgKCF0aGlzLnNlc3Npb24uY29va2llTWF4QWdlKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5jb29raWVNYXhBZ2UgPSBvbmVIb3VyO1xuICAgICAgfVxuXG4gICAgICBheGlvcy5kZWZhdWx0cy53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgIH1cblxuXG5cbiAgICB0aGlzLmNvbmZpZy5jb250ZXh0cyA9IHRoaXMuY29uZmlnLmNvbnRleHRzIHx8IHt9O1xuICAgIHRoaXMuY29uZmlnLmVudGl0aWVzID0gdGhpcy5jb25maWcuZW50aXRpZXMgfHwge307XG4gICAgdGhpcy5jb25maWcuY29udHJvbGxlcnMgPSB0aGlzLmNvbmZpZy5jb250cm9sbGVycyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMgPSB0aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMgfHwge307XG4gICAgdGhpcy5jb25maWcucHJvdmlkZXJzID0gdGhpcy5jb25maWcucHJvdmlkZXJzIHx8IHt9O1xuICAgIHRoaXMuY29uZmlnLnN1YnNjcmliZXJzID0gdGhpcy5jb25maWcuc3Vic2NyaWJlcnMgfHwge307XG5cbiAgICB0aGlzLmNvbmZpZy5lbnRpdGllcyA9IHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgICAgIE1vZGVscy5DbGFzc1R5cGUuRU5USVRZLFxuICAgICAgKSksXG4gICAgICAuLi50aGlzLmNvbmZpZy5lbnRpdGllcyxcbiAgICB9O1xuXG4gICAgdGhpcy5jb25maWcuY29udHJvbGxlcnMgPSB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgICAgICBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbnRyb2xsZXJzLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbmZpZy5wcm92aWRlcnMgPSB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgICAgICBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgICAgKSksXG4gICAgICAuLi50aGlzLmNvbmZpZy5wcm92aWRlcnMsXG4gICAgfTtcblxuICAgIHRoaXMuY29uZmlnLnN1YnNjcmliZXJzID0ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICAgICAgTW9kZWxzLkNsYXNzVHlwZS5TVUJTQ1JJQkVSLFxuICAgICAgKSksXG4gICAgICAuLi50aGlzLmNvbmZpZy5zdWJzY3JpYmVycyxcbiAgICB9O1xuXG4gICAgdGhpcy5jb25maWcucmVwb3NpdG9yaWVzID0ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICAgICAgTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZLFxuICAgICAgKSksXG4gICAgICAuLi50aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMsXG4gICAgfTtcblxuXG5cblxuXG4gICAgdGhpcy5jb25maWcuY29udHJvbGxlcnMgPSB0aGlzLmNsb25lQ2xhc3Nlc09ialdpdGhOZXdNZXRhZGF0YSh7XG4gICAgICBjbGFzc2VzSW5wdXQ6IHRoaXMuY29uZmlnLmNvbnRyb2xsZXJzLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGN0eDogdGhpcyxcbiAgICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSLFxuICAgIH0pO1xuICAgIHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcucmVwb3NpdG9yaWVzLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGN0eDogdGhpcyxcbiAgICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZLFxuICAgIH0pO1xuICAgIHRoaXMuY29uZmlnLnByb3ZpZGVycyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcucHJvdmlkZXJzLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGN0eDogdGhpcyxcbiAgICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUixcbiAgICB9KTtcbiAgICB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcuc3Vic2NyaWJlcnMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVIsXG4gICAgfSk7XG5cblxuXG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIHRoaXMuaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzKSB7XG4gICAgICB0aGlzLmNsYXNzSW5zdGFuY2VzQnlOYW1lT2JqW2NsYXNzVHlwZU5hbWVdID0ge307XG4gICAgICB0aGlzLm9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyW2NsYXNzVHlwZU5hbWVdID0gW107XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIHRoaXMuaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZUluc3RhbmNlcyhcbiAgICAgICAgdGhpcy5jb25maWdbTW9kZWxzLkNsYXNzVHlwZUtleVtjbGFzc1R5cGVOYW1lXV0sXG4gICAgICAgIGNsYXNzVHlwZU5hbWUsXG4gICAgICApO1xuICAgIH1cblxuXG5cbiAgICBpZiAodGhpcy5tb2RlID09PSAnYmFja2VuZC1mcm9udGVuZCh0Y3ArdWRwKScgJiYgIXRoaXMuY29uZmlnLmFic3RyYWN0KSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICB9XG5cblxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5hYnN0cmFjdCkge1xuICAgICAgdGhpcy5kaXNhYmxlZFJlYWx0aW1lID0gISF0aGlzLmNvbmZpZy5kaXNhYmxlZFJlYWx0aW1lO1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgdGhpcy5yZWFsdGltZSA9IG5ldyBSZWFsdGltZUNvcmUodGhpcyk7XG4gICAgfVxuXG5cblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgICBIZWxwZXJzLmluZm8oXG4gICAgICAgICAgYFt0YW9uXSBDcmVhdGUgYWJzdHJhY3QgY29udGV4dDogJHt0aGlzLmNvbmZpZy5jb250ZXh0TmFtZX1gLFxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jb25maWcucmVtb3RlSG9zdCkge1xuICAgICAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgICAgIGBbdGFvbl0gQ3JlYXRlIGNvbnRleHQgZm9yIHJlbW90ZSBob3N0OiAke3RoaXMuY29uZmlnLnJlbW90ZUhvc3R9YCxcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dGcmFtZXdvcmsgJiZcbiAgICAgICAgICBIZWxwZXJzLmluZm8oYFt0YW9uXSBDcmVhdGUgY29udGV4dCBmb3IgaG9zdDogJHt0aGlzLmNvbmZpZy5ob3N0fWApO1xuICAgICAgfVxuICAgIH1cblxuXG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgdGhpcy5vcmlnaW5hbENvbmZpZ1trZXldID0gdGhpcy5jb25maWdba2V5XTtcbiAgICB9KTtcbiAgfVxuXG5cblxuICBwcml2YXRlIGdldEF1dG9HZW5lcmF0ZWRDb25maWcoKTogTW9kZWxzLkRhdGFiYXNlQ29uZmlnIHtcblxuICAgIGxldCBkYXRhYmFzZUNvbmZpZzogTW9kZWxzLkRhdGFiYXNlQ29uZmlnO1xuICAgIGlmIChIZWxwZXJzLmlzUnVubmluZ0luRG9ja2VyKCkpIHtcbiAgICAgIEhlbHBlcnMuaW5mbygnUnVubmluZyBpbiBkb2NrZXIsIHVzaW5nIGluIG15c3FsIGRhdGFiYXNlJyk7XG5cbiAgICAgIGRhdGFiYXNlQ29uZmlnID0ge1xuICAgICAgICBkYXRhYmFzZTogYHRtcC1kYi0ke18ua2ViYWJDYXNlKHRoaXMuY29udGV4dE5hbWUpfS5zcWxqcy5kYmAsXG4gICAgICAgIHR5cGU6ICdteXNxbCcsXG4gICAgICAgIGF1dG9TYXZlOiB0cnVlLFxuICAgICAgICBzeW5jaHJvbml6ZTogdHJ1ZSxcbiAgICAgICAgZHJvcFNjaGVtYTogdHJ1ZSxcbiAgICAgICAgbG9nZ2luZzogdGhpcy5sb2dEYixcbiAgICAgICAgZGF0YWJhc2VQb3J0OiAzMzA2LFxuICAgICAgICBkYXRhYmFzZUhvc3Q6ICdsb2NhbGhvc3QnLFxuICAgICAgICBkYXRhYmFzZVVzZXJuYW1lOiAncm9vdCcsXG4gICAgICAgIGRhdGFiYXNlUGFzc3dvcmQ6ICdhZG1pbicsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgICBIZWxwZXJzLmluZm8oXG4gICAgICAgICAgYFt0YW9uXVtkYXRhYmFzZV0gQXV0b21hdGljYWxseSByZXNvbHZpbmcgZGF0YWJhc2UgY29uZmlnIGZvciBtb2RlICR7dGhpcy5tb2RlfWAsXG4gICAgICAgICk7XG4gICAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuXG4gICAgICAgIGNhc2UgJ2JhY2tlbmQtZnJvbnRlbmQoaXBjLWVsZWN0cm9uKSc6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2F0aW9uOiBgdG1wLWRiLSR7Xy5rZWJhYkNhc2UodGhpcy5jb250ZXh0TmFtZSl9LnNxbGpzYCxcbiAgICAgICAgICAgIHR5cGU6ICdzcWxqcycsXG4gICAgICAgICAgICBhdXRvU2F2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHN5bmNocm9uaXplOiB0cnVlLFxuICAgICAgICAgICAgZHJvcFNjaGVtYTogdHJ1ZSxcbiAgICAgICAgICAgIGxvZ2dpbmc6IHRoaXMubG9nRGIsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcblxuXG5cbiAgICAgICAgY2FzZSAnYmFja2VuZC1mcm9udGVuZCh3ZWJzcWwtZWxlY3Ryb24pJzpcbiAgICAgICAgY2FzZSAnYmFja2VuZC1mcm9udGVuZCh3ZWJzcWwpJzpcbiAgICAgICAgICBkYXRhYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgICAgIGxvY2F0aW9uOiBgdG1wLWRiLSR7Xy5rZWJhYkNhc2UodGhpcy5jb250ZXh0TmFtZSl9LnNxbGpzYCxcbiAgICAgICAgICAgIHR5cGU6ICdzcWxqcycsXG4gICAgICAgICAgICB1c2VMb2NhbEZvcmFnZTogdHJ1ZSwgLy8gISF3aW5kb3dbJ2xvY2FsZm9yYWdlJ10sIC8vIFRPRE8gdGhpcyBuZWVkIHRvIGJlIGNoZWNrZWQgaW4gcnVudGltZVxuICAgICAgICAgICAgYXV0b1NhdmU6IHRydWUsXG4gICAgICAgICAgICBzeW5jaHJvbml6ZTogdHJ1ZSxcbiAgICAgICAgICAgIGRyb3BTY2hlbWE6IHRydWUsXG4gICAgICAgICAgICBsb2dnaW5nOiB0aGlzLmxvZ0RiLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBsZXQga2VlcFdlYnNxbERiRGF0YUFmdGVyUmVsb2FkID0gZmFsc2U7XG5cbiAgICAgICAgICBrZWVwV2Vic3FsRGJEYXRhQWZ0ZXJSZWxvYWQgPVxuICAgICAgICAgICAgVGFvbkFkbWluLkluc3RhbmNlLmtlZXBXZWJzcWxEYkRhdGFBZnRlclJlbG9hZDtcblxuXG4gICAgICAgICAgaWYgKGtlZXBXZWJzcWxEYkRhdGFBZnRlclJlbG9hZCkge1xuICAgICAgICAgICAgZGF0YWJhc2VDb25maWcuZHJvcFNjaGVtYSA9IGZhbHNlO1xuICAgICAgICAgICAgZGVsZXRlIGRhdGFiYXNlQ29uZmlnLnN5bmNocm9uaXplOyAvLyBmYWxzZSBpcyBub3QgYXV0byBzeW5jaG9uaXplIC0gZnJvbSB3aGF0IEkgdW5kZXJzdGFuZFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhYmFzZUNvbmZpZy5kcm9wU2NoZW1hID0gdHJ1ZTtcbiAgICAgICAgICAgIGRhdGFiYXNlQ29uZmlnLnN5bmNocm9uaXplID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuXG5cbiAgICAgICAgY2FzZSAnYmFja2VuZC1mcm9udGVuZCh0Y3ArdWRwKSc6XG4gICAgICAgICAgZGF0YWJhc2VDb25maWcgPSB7XG4gICAgICAgICAgICBkYXRhYmFzZTogYGNvbnRleHQtZGItJHtfLmtlYmFiQ2FzZSh0aGlzLmNvbnRleHROYW1lKX1gLFxuICAgICAgICAgICAgbG9jYXRpb246IGB0bXAtZGItJHtfLmtlYmFiQ2FzZSh0aGlzLmNvbnRleHROYW1lKX0uc3FsaXRlYCxcbiAgICAgICAgICAgIHR5cGU6ICdzcWxqcycsXG4gICAgICAgICAgICBhdXRvU2F2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHN5bmNocm9uaXplOiB0cnVlLFxuICAgICAgICAgICAgZHJvcFNjaGVtYTogdHJ1ZSxcbiAgICAgICAgICAgIGxvZ2dpbmc6IHRoaXMubG9nRGIsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YWJhc2VDb25maWc7XG5cbiAgfVxuXG5cblxuICBnZXQgbmdab25lKCk6IGFueSB7XG5cbiAgICByZXR1cm4gRW5kcG9pbnRDb250ZXh0Lm5nWm9uZTtcblxuICAgIHJldHVybjtcbiAgfVxuXG5cblxuICBzdGFydFNlcnZlcigpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGRpc3BsYXlSb3V0ZXMoYXBwKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBnZXQgbW9kZUFsbG93c0RhdGFiYXNlQ3JlYXRpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2JhY2tlbmQtZnJvbnRlbmQodGNwK3VkcCknIHx8XG4gICAgICB0aGlzLm1vZGUgPT09ICdiYWNrZW5kLWZyb250ZW5kKHdlYnNxbCknIHx8XG4gICAgICB0aGlzLm1vZGUgPT09ICdiYWNrZW5kLWZyb250ZW5kKGlwYy1lbGVjdHJvbiknXG4gICAgKTtcbiAgfVxuXG5cblxuXG4gIHByaXZhdGUgY2xvbmVDbGFzc1dpdGhOZXdNZXRhZGF0YSA9IDxcbiAgICBUIGV4dGVuZHMgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogYW55IH0sXG4gID4oe1xuICAgIEJhc2VDbGFzcyxcbiAgICBjbGFzc05hbWUsXG4gICAgY29uZmlnLFxuICAgIGN0eCxcbiAgICBjbGFzc1R5cGUsXG4gIH06IHtcbiAgICBCYXNlQ2xhc3M6IFQ7XG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgY29uZmlnOiBNb2RlbHMuQ29udGV4dE9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG4gICAgY3R4OiBFbmRwb2ludENvbnRleHQ7XG4gICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlO1xuICB9KTogVCA9PiB7XG5cbiAgICBjb25zdCBjbG9uZUNsYXNzID0gKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBCYXNlQ2xhc3NbU3ltYm9scy5mdWxsQ2xhc3NOYW1lU3RhdGljUHJvcGVydHldID09PVxuICAgICAgICBgJHtjdHguY29udGV4dE5hbWV9LiR7Y2xhc3NOYW1lfWBcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gQmFzZUNsYXNzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgQmFzZUNsYXNzIHtcblxuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc3RhdGljIFtTeW1ib2xzLm9yaWduYWxDbGFzc10gPSBCYXNlQ2xhc3M7XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzdGF0aWMgW1N5bWJvbHMuZnVsbENsYXNzTmFtZVN0YXRpY1Byb3BlcnR5XSA9IGAke2N0eC5jb250ZXh0TmFtZX0uJHtjbGFzc05hbWV9YDtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHN0YXRpYyBbU3ltYm9scy5jbGFzc05hbWVTdGF0aWNQcm9wZXJ0eV0gPSBjbGFzc05hbWU7XG5cbiAgICAgICAgc3RhdGljIFtTeW1ib2xzLmN0eEluQ2xhc3NPckNsYXNzT2JqXSA9IGN0eDtcblxuICAgICAgICBzdGF0aWMgX19nZXRGdWxsUGF0aEZvckNsYXNzX18oYXJyID0gW10pIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gdGhpc1tTeW1ib2xzLmZ1bGxDbGFzc05hbWVTdGF0aWNQcm9wZXJ0eV07XG4gICAgICAgICAgYXJyLnB1c2gobmFtZSk7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXNbU3ltYm9scy5vcmlnbmFsQ2xhc3NdICYmIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXNbU3ltYm9scy5vcmlnbmFsQ2xhc3NdLl9fZ2V0RnVsbFBhdGhGb3JDbGFzc19fXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICB0aGlzW1N5bWJvbHMub3JpZ25hbENsYXNzXS5fX2dldEZ1bGxQYXRoRm9yQ2xhc3NfXyhhcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXJyLmpvaW4oJy8nKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZ2V0IGZ1bGxQYXRoRm9yQ2xhc3MoKTogc3RyaW5nIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fX2dldEZ1bGxQYXRoRm9yQ2xhc3NfXygpO1xuICAgICAgICB9XG4gICAgICAgIFtTeW1ib2xzLmN0eEluQ2xhc3NPckNsYXNzT2JqXSA9IGN0eDtcblxuXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjbG9uZUNsYXNzRnVuY3Rpb24gPSBjbG9uZUNsYXNzKCk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICByZXR1cm4gY2xvbmVDbGFzc0Z1bmN0aW9uO1xuICB9O1xuXG5cblxuXG5cbiAgcHJpdmF0ZSBjbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEgPSAoe1xuICAgIGNsYXNzZXNJbnB1dCxcbiAgICBjb25maWcsXG4gICAgY3R4LFxuICAgIGNsYXNzVHlwZSxcbiAgfToge1xuICAgIGNsYXNzZXNJbnB1dDogYW55O1xuICAgIGNvbmZpZzogTW9kZWxzLkNvbnRleHRPcHRpb25zPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuICAgIGN0eDogRW5kcG9pbnRDb250ZXh0O1xuICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZTtcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGNsYXNzZXMgPSB7fTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNsYXNzZXNJbnB1dCB8fCB7fSkpIHtcbiAgICAgIGNvbnN0IEJhc2VDbGFzcyA9IGNsYXNzZXNJbnB1dFtrZXldO1xuXG4gICAgICBpZiAoIUJhc2VDbGFzcykge1xuICAgICAgICBIZWxwZXJzLmVycm9yKGBDbGFzcyAke2tleX0gaXMgbm90IGRlZmluZWQgaW4gY29udGV4dCAke2N0eC5jb250ZXh0TmFtZX1cblxuICAgICAgICBQbGVhc2UgY2hlY2sgaWYgeW91IGhhdmUgY29ycmVjdCBpbXBvcnQgaW4gY29udGV4dCBmaWxlXG5cbiAgICAgICAgYCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc05hbWUgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICBTeW1ib2xzLm1ldGFkYXRhLmNsYXNzTmFtZSxcbiAgICAgICAgQmFzZUNsYXNzLFxuICAgICAgKTtcblxuXG5cblxuXG4gICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwga2V5O1xuICAgICAgQmFzZUNsYXNzW1N5bWJvbHMuY2xhc3NOYW1lU3RhdGljUHJvcGVydHldID0gY2xhc3NOYW1lO1xuXG4gICAgICBjb25zdCBjbG9uZWRDbGFzcyA9IHRoaXMuY2xvbmVDbGFzc1dpdGhOZXdNZXRhZGF0YSh7XG4gICAgICAgIEJhc2VDbGFzcyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGN0eCxcbiAgICAgICAgY2xhc3NUeXBlLFxuICAgICAgfSk7XG4gICAgICBjbGFzc2VzW2NsYXNzTmFtZV0gPSBjbG9uZWRDbGFzcztcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH07XG5cblxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUsXG4gICkge1xuICAgIGNvbnN0IGFyciA9IGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0cyhjbGFzc1R5cGUpO1xuICAgIHJldHVybiBhcnIucmVkdWNlKChhY2MsIGMpID0+IHtcbiAgICAgIGFjY1tDbGFzc0hlbHBlcnMuZ2V0TmFtZShjKV0gPSBjO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHMoXG4gICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLFxuICAgIGFyciA9IFtdLFxuICApIHtcbiAgICBjb25zdCBjb250ZXh0cyA9IE9iamVjdC52YWx1ZXModGhpcy5jb25maWcuY29udGV4dHMgfHwge30pIGFzIFJldHVyblR5cGU8XG4gICAgICB0eXBlb2YgY3JlYXRlQ29udGV4dFxuICAgID5bXTtcblxuXG5cbiAgICBmb3IgKGNvbnN0IGN0eCBvZiBjb250ZXh0cykge1xuXG4gICAgICBjb25zdCByZWYgPSBhd2FpdCBjdHguX19yZWYoKTtcblxuICAgICAgY29uc3QgY2xhc3Nlc0lucHV0ID0gcmVmLmdldENsYXNzRnVuQnkoY2xhc3NUeXBlKTtcblxuXG4gICAgICBjb25zdCBjbG9uZWRDbGFzc2VzID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgICAgdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgICAgIGNsYXNzZXNJbnB1dCxcbiAgICAgICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgICAgIGN0eDogdGhpcyxcbiAgICAgICAgICBjbGFzc1R5cGUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgY2xvbmVkQ2xhc3Nlcy5mb3JFYWNoKGMgPT4gYXJyLnB1c2goYykpO1xuXG4gICAgICBhd2FpdCByZWYuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0cyhjbGFzc1R5cGUsIGFycik7XG4gICAgfVxuICAgIHJldHVybiBhcnIgYXMgRnVuY3Rpb25bXTtcbiAgfVxuXG5cblxuICBnZXRDbGFzc0luc3RhbmNlT2JqQnkoY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jbGFzc0luc3RhbmNlc0J5TmFtZU9ialtjbGFzc1R5cGVdO1xuICB9XG5cblxuXG4gIHByaXZhdGUgZ2V0Q2xhc3Nlc0luc3RhbmNlc0FyckJ5KGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5vYmpXaXRoQ2xhc3Nlc0luc3RhbmNlc0FycltjbGFzc1R5cGVdO1xuICB9XG5cblxuXG4gIGluamVjdDxUPihcbiAgICBjdG9yOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBsb2NhbEluc3RhbmNlPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHRDbGFzc0luc3RhbmNlPzogQmFzZUNsYXNzO1xuICAgICAgbG9jYUluc3RhbmNlQ29uc3RydWN0b3JBcmdzPzogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBjdG9yPjtcbiAgICB9LFxuICApOiBUIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fSBhcyBhbnk7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IENsYXNzSGVscGVycy5nZXROYW1lKGN0b3IpO1xuXG4gICAgY29uc3QgbG9jYUluc3RhbmNlQ29uc3RydWN0b3JBcmdzID1cbiAgICAgIG9wdGlvbnMubG9jYUluc3RhbmNlQ29uc3RydWN0b3JBcmdzIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuaXNDTGFzc1R5cGUoTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZLCBjdG9yKSkge1xuICAgICAgb3B0aW9ucy5sb2NhbEluc3RhbmNlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8ubG9jYWxJbnN0YW5jZSkge1xuICAgICAgY29uc3QgY3R4Q2xhc3NGbiA9IHRoaXMuZ2V0Q2xhc3NGdW5CeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuICAgICAgbGV0IGVudGl0eU5hbWU6IHN0cmluZyA9ICcnO1xuXG4gICAgICBpZiAoY2xhc3NOYW1lID09PSAnQmFzZVJlcG9zaXRvcnknKSB7XG4gICAgICAgIGNvbnN0IGVudGl0eUZuID0gbG9jYUluc3RhbmNlQ29uc3RydWN0b3JBcmdzWzBdO1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdHlGbiAmJiBlbnRpdHlGbigpO1xuICAgICAgICBlbnRpdHlOYW1lID0gZW50aXR5ICYmIENsYXNzSGVscGVycy5nZXROYW1lKGVudGl0eSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy5jb250ZXh0Q2xhc3NJbnN0YW5jZVt0aGlzLmxvY2FsSW5zdGFjZU9ialN5bWJvbF0pIHtcbiAgICAgICAgb3B0aW9ucy5jb250ZXh0Q2xhc3NJbnN0YW5jZVt0aGlzLmxvY2FsSW5zdGFjZU9ialN5bWJvbF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluc3RhbmNlS2V5ID0gY2xhc3NOYW1lICsgKGVudGl0eU5hbWUgPyBgLiR7ZW50aXR5TmFtZX1gIDogJycpO1xuICAgICAgY29uc3QgZXhpc3RlZCA9XG4gICAgICAgIG9wdGlvbnMuY29udGV4dENsYXNzSW5zdGFuY2VbdGhpcy5sb2NhbEluc3RhY2VPYmpTeW1ib2xdW2luc3RhbmNlS2V5XTtcbiAgICAgIGlmIChleGlzdGVkKSB7XG5cbiAgICAgICAgcmV0dXJuIGV4aXN0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghY3R4Q2xhc3NGbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBhYmxlIHRvIGluamVjdCBcIiR7Y2xhc3NOYW1lfVwiIGluc2lkZSBjb250ZXh0IFwiJHt0aGlzLmNvbnRleHROYW1lfVwiXG5cbiAgICAgICAgTWFrZSBzdXJlIHRoZXkgc2hhcmUgdGhlIHNhbWUgY29udGV4dCBvciBpbXBvcnQgY29udGV4dCB3aGVyZSBcIiR7Y2xhc3NOYW1lfVwiIGlzIGRlZmluZWQuXG5cbiAgICAgICAgYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluamVjdGVkSW5zdGFuY2UgPSBuZXcgKGN0eENsYXNzRm4gYXMgYW55KShcbiAgICAgICAgLi4ubG9jYUluc3RhbmNlQ29uc3RydWN0b3JBcmdzLFxuICAgICAgKTtcbiAgICAgIG9wdGlvbnMuY29udGV4dENsYXNzSW5zdGFuY2VbdGhpcy5sb2NhbEluc3RhY2VPYmpTeW1ib2xdW2luc3RhbmNlS2V5XSA9XG4gICAgICAgIGluamVjdGVkSW5zdGFuY2U7XG5cbiAgICAgIHJldHVybiBpbmplY3RlZEluc3RhbmNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHRTY29wZUluc3RhbmNlID0gdGhpcy5hbGxDbGFzc2VzSW5zdGFuY2VzW2NsYXNzTmFtZV07XG5cblxuXG4gICAgcmV0dXJuIGNvbnRleHRTY29wZUluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIGFsaWFzIGZvciBpbmplY3RcbiAgICovXG4gIGdldEluc3RhbmNlQnk8VD4oY3RvcjogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCk6IFQge1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgIHJldHVybiB0aGlzLmluamVjdChjdG9yLCB7IGxvY2FsSW5zdGFuY2U6IGZhbHNlIH0pO1xuICB9XG5cblxuXG4gIGNoZWNrSWZDb250ZXh0SW5pdGlhbGl6ZWQoKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5jb25maWcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBjaGVjayBpZiB5b3VyIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG5cblxuICAgICAgYXdhaXQgQ29udGV4dC5pbml0aWFsaXplKCk7XG5cblxuXG4gICAgICBgKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgZ2V0Q2xhc3NGdW5CeShjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpIHtcbiAgICB0aGlzLmNoZWNrSWZDb250ZXh0SW5pdGlhbGl6ZWQoKTtcbiAgICBzd2l0Y2ggKGNsYXNzVHlwZSkge1xuICAgICAgY2FzZSBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVI6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb250cm9sbGVycztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5FTlRJVFk6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5lbnRpdGllcztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnByb3ZpZGVycztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcucmVwb3NpdG9yaWVzO1xuICAgICAgY2FzZSBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVI6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycztcbiAgICB9XG4gIH1cblxuICBpc0NMYXNzVHlwZShjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUsIGNsYXNzRm46IEZ1bmN0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRDbGFzc0Z1bkJ5KGNsYXNzVHlwZSlbQ2xhc3NIZWxwZXJzLmdldE5hbWUoY2xhc3NGbildO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgZm9yIGluamVjdGFibGUgdHlwZXNcbiAgICogT25seSBmb3IgY2xhc3NUeXBlOiBDT05UUk9MTEVSLCBSRVBPU0lUT1JZLCBQUk9WSURFUlxuICAgKi9cbiAgZ2V0Q2xhc3NGdW5CeUNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IEZ1bmN0aW9uIHtcbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgdGhpcy5hbGxUeXBlc2Zyb21Db250ZXh0cykge1xuICAgICAgY29uc3QgY2xhc3Nlc0ZvckluamVjdGFibGVUeXBlID1cbiAgICAgICAgdGhpcy5jb25maWdbTW9kZWxzLkNsYXNzVHlwZUtleVtjbGFzc1R5cGVOYW1lXV07XG5cbiAgICAgIGlmIChjbGFzc2VzRm9ySW5qZWN0YWJsZVR5cGVbY2xhc3NOYW1lXSkge1xuICAgICAgICByZXR1cm4gY2xhc3Nlc0ZvckluamVjdGFibGVUeXBlW2NsYXNzTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xhc3NGdW5CeUNsYXNzKGNsYXNzRnVuY3Rpb246IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IENsYXNzSGVscGVycy5nZXROYW1lKGNsYXNzRnVuY3Rpb24pO1xuICAgIHJldHVybiB0aGlzLmdldENsYXNzRnVuQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgfVxuXG4gIGdldENsYXNzRnVuQnlBcnIoY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5nZXRDbGFzc0Z1bkJ5KGNsYXNzVHlwZSkgfHwge30pIGFzIEZ1bmN0aW9uW107XG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVJbnN0YW5jZXMoY2xhc3NlczogYW55LCBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpIHtcblxuXG5cblxuXG4gICAgZm9yIChjb25zdCBjbGFzc0ZuIG9mIFtcblxuICAgICAgLi4uT2JqZWN0LnZhbHVlcyhjbGFzc2VzKSxcbiAgICBdKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IERJVGFvbkNvbnRhaW5lci5yZXNvbHZlKGNsYXNzRm4gYXMgYW55KSBhcyBhbnk7XG4gICAgICBjb25zdCBjbGFzc0luc3RhbmNlc0J5TmFtZU9iaiA9IHRoaXMuY2xhc3NJbnN0YW5jZXNCeU5hbWVPYmpbY2xhc3NUeXBlXTtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IENsYXNzSGVscGVycy5nZXROYW1lKGNsYXNzRm4pO1xuXG4gICAgICBjbGFzc0luc3RhbmNlc0J5TmFtZU9ialtjbGFzc05hbWVdID0gaW5zdGFuY2U7XG5cbiAgICAgIHRoaXMuY29uZmlnW01vZGVscy5DbGFzc1R5cGVLZXlbY2xhc3NUeXBlXV1bY2xhc3NOYW1lXSA9IGNsYXNzRm47XG4gICAgICB0aGlzLm9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyW2NsYXNzVHlwZV0ucHVzaChpbnN0YW5jZSk7XG4gICAgICB0aGlzLmFsbENsYXNzZXNJbnN0YW5jZXNbY2xhc3NOYW1lXSA9IGluc3RhbmNlO1xuICAgIH1cbiAgfVxuXG5cblxuICBhc3luYyByZWluaXRDb250cm9sbGVycygpIHtcbiAgICBpZiAodGhpcy5yZW1vdGVIb3N0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGNvbnN0IGNvbnRyb2xsZXJzID0gdGhpcy5nZXRDbGFzc2VzSW5zdGFuY2VzQXJyQnkoXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgY3RybCBvZiBjb250cm9sbGVycykge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjdHJsLmluaXRFeGFtcGxlRGJEYXRhKSkge1xuICAgICAgICBhd2FpdCBIZWxwZXJzLnJ1blN5bmNPckFzeW5jKHtcbiAgICAgICAgICBmdW5jdGlvbkZuOiBjdHJsLmluaXRFeGFtcGxlRGJEYXRhLFxuICAgICAgICAgIGNvbnRleHQ6IGN0cmwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuXG5cbiAgfVxuICBhc3luYyBpbml0Q2xhc3NlcygpIHtcbiAgICBpZiAodGhpcy5yZW1vdGVIb3N0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgY2xhc3NUeXBlTmFtZSBvZiBbXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZLFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSLFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5FTlRJVFksXG4gICAgXSkge1xuXG5cblxuXG4gICAgICBmb3IgKGNvbnN0IGNsYXNzRnVuIG9mIHRoaXMuZ2V0Q2xhc3NGdW5CeUFycihjbGFzc1R5cGVOYW1lKSBhcyBhbnlbXSkge1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNsYXNzRnVuLl8pKSB7XG4gICAgICAgICAgYXdhaXQgSGVscGVycy5ydW5TeW5jT3JBc3luYyh7XG4gICAgICAgICAgICBmdW5jdGlvbkZuOiBjbGFzc0Z1bi5fLFxuICAgICAgICAgICAgY29udGV4dDogY2xhc3NGdW4sXG4gICAgICAgICAgfSk7XG5cblxuXG5cblxuXG4gICAgICAgIH1cbiAgICAgIH1cblxuXG5cblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2xhc3NUeXBlTmFtZSBvZiBbXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZLFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSLFxuICAgIF0pIHtcblxuXG5cblxuICAgICAgZm9yIChjb25zdCBjdHJsIG9mIHRoaXMuZ2V0Q2xhc3Nlc0luc3RhbmNlc0FyckJ5KGNsYXNzVHlwZU5hbWUpKSB7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY3RybC5fKSkge1xuICAgICAgICAgIGF3YWl0IEhlbHBlcnMucnVuU3luY09yQXN5bmMoe1xuICAgICAgICAgICAgZnVuY3Rpb25GbjogY3RybC5fLFxuICAgICAgICAgICAgY29udGV4dDogY3RybCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG5cblxuXG4gICAgfVxuICB9XG5cblxuXG4gIGlzQWN0aXZlT24oY2xhc3NJbnN0YW5jZTogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgbGV0IGNvbnRleHRSZWY6IEVuZHBvaW50Q29udGV4dCA9XG4gICAgICBjbGFzc0luc3RhbmNlW1N5bWJvbHMuY3R4SW5DbGFzc09yQ2xhc3NPYmpdO1xuICAgIHJldHVybiB0aGlzID09PSBjb250ZXh0UmVmO1xuICB9XG5cblxuXG4gIGdldCB1cmkoKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5ob3N0XG4gICAgICA/IG5ldyBVUkwodGhpcy5ob3N0KVxuICAgICAgOiB0aGlzLnJlbW90ZUhvc3RcbiAgICAgICAgPyBuZXcgVVJMKHRoaXMucmVtb3RlSG9zdClcbiAgICAgICAgOiB2b2lkIDA7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG5cblxuICBnZXQgaXNIdHRwU2VydmVyKCkge1xuICAgIHJldHVybiB0aGlzLnVyaS5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGlwYy91ZHAgbmVlZHMgdGhpc1xuICAgKi9cbiAgcHVibGljIGdldCBjb250ZXh0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY29udGV4dE5hbWU7XG4gIH1cblxuXG5cbiAgcHVibGljIGdldCBwdWJsaWNBc3NldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5wdWJsaWNBc3NldHMgfHwgW107XG4gIH1cblxuXG5cbiAgZ2V0IGlzUHJvZHVjdGlvbk1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnByb2R1Y3Rpb25Nb2RlO1xuICB9XG5cblxuXG4gIGdldCByZW1vdGVIb3N0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZW1vdGVIb3N0O1xuICB9XG5cblxuXG4gIGdldCBob3N0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5ob3N0O1xuICB9XG5cblxuXG4gIGdldCBvcmdpbigpIHtcbiAgICByZXR1cm4gdGhpcy51cmk/Lm9yaWdpbjtcbiAgfVxuXG5cblxuICBhc3luYyBpbml0U3Vic2NyaWJlcnMoKSB7XG5cbiAgICBpZiAodGhpcy5yZW1vdGVIb3N0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN1YnNjcmliZXJDbGFzc2VzID0gdGhpcy5nZXRDbGFzc0Z1bkJ5QXJyKFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5TVUJTQ1JJQkVSLFxuICAgICk7XG4gICAgZm9yIChjb25zdCBzdWJzY3JpYmVyQ2xhc3NGbiBvZiBzdWJzY3JpYmVyQ2xhc3Nlcykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFN5bWJvbHMubWV0YWRhdGEub3B0aW9ucy5zdWJzY3JpYmVyLFxuICAgICAgICBzdWJzY3JpYmVyQ2xhc3NGbixcbiAgICAgICkgYXMgVGFvblN1YnNjcmliZXJPcHRpb25zO1xuXG5cbiAgICAgIEV2ZW50U3Vic2NyaWJlcigpKHN1YnNjcmliZXJDbGFzc0ZuKTtcbiAgICB9XG5cbiAgfVxuXG5cblxuICBhc3luYyBpbml0RW50aXRpZXMoKSB7XG5cbiAgICBpZiAodGhpcy5yZW1vdGVIb3N0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5nZXRDbGFzc0Z1bkJ5QXJyKE1vZGVscy5DbGFzc1R5cGUuRU5USVRZKTtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBlbnRpdGllcykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFN5bWJvbHMubWV0YWRhdGEub3B0aW9ucy5lbnRpdHksXG4gICAgICAgIGVudGl0eSxcbiAgICAgICkgYXMgVGFvbkVudGl0eU9wdGlvbnM7XG4gICAgICBjb25zdCBjcmVhdGVUYWJsZSA9IF8uaXNVbmRlZmluZWQob3B0aW9ucy5jcmVhdGVUYWJsZSlcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogb3B0aW9ucy5jcmVhdGVUYWJsZTtcbiAgICAgIGNvbnN0IG5hbWVGb3JFbnRpdHkgPSBDbGFzc0hlbHBlcnMuZ2V0TmFtZShlbnRpdHkpO1xuXG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZChvcHRpb25zLmNyZWF0ZVRhYmxlKSA/IHRydWUgOiBvcHRpb25zLmNyZWF0ZVRhYmxlKSB7XG4gICAgICAgIHRoaXMubG9nRGIgJiZcbiAgICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICBgW3Rhb25dW3R5cGVvcm1dIGNyZWF0ZSB0YWJsZSBmb3IgZW50aXR5IFwiJHtuYW1lRm9yRW50aXR5fVwiID8gJyR7Y3JlYXRlVGFibGV9J2AsXG4gICAgICAgICAgKTtcblxuICAgICAgICBUeXBlb3JtRW50aXR5KG5hbWVGb3JFbnRpdHkpKGVudGl0eSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ0RiICYmXG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgYFt0YW9uXVt0eXBlb3JtXSBjcmVhdGUgdGFibGUgZm9yIGVudGl0eSBcIiR7bmFtZUZvckVudGl0eX1cIiA/ICcke2NyZWF0ZVRhYmxlfSdgLFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuXG5cblxuICBhc3luYyBpbml0RGF0YWJhc2VDb25uZWN0aW9uKCkge1xuXG4gICAgaWYgKHRoaXMucmVtb3RlSG9zdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbnRpdGllcyA9IChcbiAgICAgIHRoaXMuY29uZmlnLm92ZXJyaWRlPy5lbnRpdGllc1xuICAgICAgICA/IHRoaXMuY29uZmlnLm92ZXJyaWRlLmVudGl0aWVzXG4gICAgICAgIDogdGhpcy5nZXRDbGFzc0Z1bkJ5QXJyKE1vZGVscy5DbGFzc1R5cGUuRU5USVRZKVxuICAgICkubWFwKGVudGl0eUZuID0+IHtcbiAgICAgIHJldHVybiBDbGFzc0hlbHBlcnMuZ2V0T3JnaW5hbENsYXNzKGVudGl0eUZuKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1YnNjcmliZXJzID0gdGhpcy5jb25maWcub3ZlcnJpZGU/LnN1YnNjcmliZXJzXG4gICAgICA/IHRoaXMuY29uZmlnLm92ZXJyaWRlLnN1YnNjcmliZXJzXG4gICAgICA6IHRoaXMuZ2V0Q2xhc3NGdW5CeUFycihNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVIpO1xuXG4gICAgY29uc3QgZGF0YVNvdXJjZURiQ29uZmlnID0gXy5pc09iamVjdCh0aGlzLmRhdGFiYXNlQ29uZmlnKVxuICAgICAgPyAoe1xuICAgICAgICAgIHR5cGU6IHRoaXMuZGF0YWJhc2VDb25maWcudHlwZSxcbiAgICAgICAgICBwb3J0OiB0aGlzLmRhdGFiYXNlQ29uZmlnLmRhdGFiYXNlUG9ydCxcbiAgICAgICAgICBob3N0OiB0aGlzLmRhdGFiYXNlQ29uZmlnLmRhdGFiYXNlSG9zdCxcbiAgICAgICAgICBkYXRhYmFzZTogdGhpcy5kYXRhYmFzZUNvbmZpZy5kYXRhYmFzZSBhcyBhbnksXG4gICAgICAgICAgdXNlcm5hbWU6IHRoaXMuZGF0YWJhc2VDb25maWcuZGF0YWJhc2VVc2VybmFtZSxcbiAgICAgICAgICBwYXNzd29yZDogdGhpcy5kYXRhYmFzZUNvbmZpZy5kYXRhYmFzZVBhc3N3b3JkLFxuICAgICAgICAgIHVzZUxvY2FsRm9yYWdlOiB0aGlzLmRhdGFiYXNlQ29uZmlnLnVzZUxvY2FsRm9yYWdlLFxuICAgICAgICAgIGVudGl0aWVzLFxuICAgICAgICAgIHN1YnNjcmliZXJzLFxuICAgICAgICAgIHN5bmNocm9uaXplOiB0aGlzLmRhdGFiYXNlQ29uZmlnLnN5bmNocm9uaXplLFxuICAgICAgICAgIGF1dG9TYXZlOiB0aGlzLmRhdGFiYXNlQ29uZmlnLmF1dG9TYXZlLFxuICAgICAgICAgIGRyb3BTY2hlbWE6IHRoaXMuZGF0YWJhc2VDb25maWcuZHJvcFNjaGVtYSxcbiAgICAgICAgICBsb2dnaW5nOiAhIXRoaXMuZGF0YWJhc2VDb25maWcubG9nZ2luZyxcbiAgICAgICAgICBsb2NhdGlvbjogdGhpcy5kYXRhYmFzZUNvbmZpZy5sb2NhdGlvbixcbiAgICAgICAgfSBhcyBEYXRhU291cmNlT3B0aW9ucylcbiAgICAgIDogKHt9IGFzIERhdGFTb3VyY2VPcHRpb25zKTtcblxuXG4gICAgdGhpcy5sb2dGcmFtZXdvcmsgJiZcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgW0NvbnRleHQ6IFwiJHt0aGlzLmNvbnRleHROYW1lfVwiXSBkYXRhU291cmNlRGJDb25maWdgLFxuICAgICAgICBkYXRhU291cmNlRGJDb25maWcsXG4gICAgICApO1xuXG4gICAgaWYgKHRoaXMubW9kZUFsbG93c0RhdGFiYXNlQ3JlYXRpb24gJiYgdGhpcy5kYXRhYmFzZUNvbmZpZykge1xuICAgICAgdGhpcy5sb2dEYiAmJlxuICAgICAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgICBIZWxwZXJzLmluZm8oJ1t0YW9uXVtkYXRhYmFzZV0gcHJlcGFyZSB0eXBlb3JtIGNvbm5lY3Rpb24uLi4nKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRGF0YVNvdXJjZShkYXRhU291cmNlRGJDb25maWcpO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb24uaW5pdGlhbGl6ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcj8ubWVzc2FnZSB8fCBlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5jb25uZWN0aW9uPy5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdXUk9ORyBDT05GSUcnLCBkYXRhU291cmNlRGJDb25maWcpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvbWV0aGluZyB3cm9uZyB3aXRoIGNvbm5lY3Rpb24gaW5pdCBpbiAke3RoaXMubW9kZX1gKTtcbi8qICovXG4vKiAqL1xuICBcbiAgICAgIH1cblxuICAgICAgKHRoaXMubG9nRGIgfHwgdGhpcy5sb2dGcmFtZXdvcmspICYmXG4gICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICBgXG5cbiAgICAgICAgQ09OVEVDVElPTiBPSyBmb3IgJHt0aGlzLmNvbnRleHROYW1lfSAtICR7dGhpcy5tb2RlfVxuXG4gICAgICAgIFt0YW9uXVt0eXBlb3JtXSBkYiBwcmVwcmF0aW9uIGRvbmUuLiBkYiBpbml0aWFsaXplPSR7dGhpcy5jb25uZWN0aW9uPy5pc0luaXRpYWxpemVkfVxuXG5cbiAgICAgICAgYCxcbiAgICAgICAgICBkYXRhU291cmNlRGJDb25maWcsXG4gICAgICAgICk7XG5cblxuXG5cblxuXG5cblxuXG5cbiAgICB9IGVsc2Uge1xuICAgICAgSGVscGVycy5pbmZvKGBbdGFvbl1bdHlwZW9ybV0gTm90IGluaXRpbmcgZGIgZm9yIG1vZGUgJHt0aGlzLm1vZGV9YCk7XG4gICAgfVxuXG4gIH1cblxuXG5cblxuICBpbml0TWV0YWRhdGEoKSB7XG4gICAgY29uc3QgYWxsQ29udHJvbGxlcnMgPSB0aGlzLmdldENsYXNzRnVuQnlBcnIoTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSKTtcblxuICAgIGZvciAoY29uc3QgY29udHJvbGxlckNsYXNzRm4gb2YgYWxsQ29udHJvbGxlcnMpIHtcbiAgICAgIGNvbnRyb2xsZXJDbGFzc0ZuW1N5bWJvbHMuY2xhc3NNZXRob2RzTmFtZXNdID1cbiAgICAgICAgQ2xhc3NIZWxwZXJzLmdldE1ldGhvZHNOYW1lcyhjb250cm9sbGVyQ2xhc3NGbik7XG4gICAgICBjb25zdCBjb25maWdzID0gQ2xhc3NIZWxwZXJzLmdldENvbnRyb2xsZXJDb25maWdzKGNvbnRyb2xsZXJDbGFzc0ZuKTtcblxuICAgICAgY29uc3QgY2xhc3NDb25maWc6IE1vZGVscy5SdW50aW1lQ29udHJvbGxlckNvbmZpZyA9IGNvbmZpZ3NbMF07XG5cbiAgICAgIGNvbnN0IHBhcmVudHNjYWxjdWxhdGVkUGF0aCA9IF8uc2xpY2UoY29uZmlncywgMSlcbiAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAubWFwKGJjID0+IHtcbiAgICAgICAgICBpZiAoVGFvbkhlbHBlcnMuaXNHb29kUGF0aChiYy5wYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGJjLnBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiYy5jbGFzc05hbWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcvJyk7XG5cbiAgICAgIGlmIChUYW9uSGVscGVycy5pc0dvb2RQYXRoKGNsYXNzQ29uZmlnLnBhdGgpKSB7XG4gICAgICAgIGNsYXNzQ29uZmlnLmNhbGN1bGF0ZWRQYXRoID0gY2xhc3NDb25maWcucGF0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzQ29uZmlnLmNhbGN1bGF0ZWRQYXRoID1cbiAgICAgICAgICBgJHtwYXJlbnRzY2FsY3VsYXRlZFBhdGh9LyR7Q2xhc3NIZWxwZXJzLmdldE5hbWUoY29udHJvbGxlckNsYXNzRm4pfWBcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKVxuICAgICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgYmMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIF8ubGFzdChhY2MpID09PSBiYyA/IGFjYyA6IFsuLi5hY2MsIGJjXTtcbiAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgLmpvaW4oJy8nKTtcbiAgICAgIH1cblxuICAgICAgXy5zbGljZShjb25maWdzLCAxKS5mb3JFYWNoKGJjID0+IHtcbiAgICAgICAgY29uc3QgYWxyZWFkeUlzID0gY2xhc3NDb25maWcubWV0aG9kcztcbiAgICAgICAgY29uc3QgdG9NZXJnZSA9IF8uY2xvbmVEZWVwKGJjLm1ldGhvZHMpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0b01lcmdlKSB7XG4gICAgICAgICAgaWYgKHRvTWVyZ2UuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhYWxyZWFkeUlzW2tleV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0b01lcmdlW2tleV07XG4gICAgICAgICAgICBhbHJlYWR5SXNba2V5XSA9IGVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuLyogKi9cbi8qICovXG4gIFxuICAgICAgICB0aGlzLmxvZ0h0dHAgJiZcbiAgICAgICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFxuICAgICAgICAgICAgYFt0YW9uXVtleHByZXNzLXNlcnZlcl0gcm91dGVzIFske2NsYXNzQ29uZmlnLmNsYXNzTmFtZX1dYCxcbiAgICAgICAgICApO1xuLyogKi9cbi8qICovXG4gIFxuXG5cbiAgICAgIE9iamVjdC5rZXlzKGNsYXNzQ29uZmlnLm1ldGhvZHMpLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZENvbmZpZzogTW9kZWxzLk1ldGhvZENvbmZpZyA9XG4gICAgICAgICAgY2xhc3NDb25maWcubWV0aG9kc1ttZXRob2ROYW1lXTtcblxuICAgICAgICBjb25zdCB0eXBlOiBNb2RlbHMuSHR0cC5SZXN0Lkh0dHBNZXRob2QgPSBtZXRob2RDb25maWcudHlwZTtcbiAgICAgICAgY29uc3QgZXhwcmVzc1BhdGggPSBtZXRob2RDb25maWcuZ2xvYmFsXG4gICAgICAgICAgPyBgLyR7bWV0aG9kQ29uZmlnLnBhdGg/LnJlcGxhY2UoL1xcLy8sICcnKX1gXG4gICAgICAgICAgOiBUYW9uSGVscGVycy5nZXRFeHByZXNzUGF0aChjbGFzc0NvbmZpZywgbWV0aG9kQ29uZmlnKTtcblxuXG4gICAgICAgIGlmIChIZWxwZXJzLmlzTm9kZSB8fCBIZWxwZXJzLmlzV2ViU1FMKSB7XG5cblxuICAgICAgICAgIGNvbnN0IHsgcm91dGVQYXRoLCBtZXRob2QgfSA9IHRoaXMuaW5pdFNlcnZlcihcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBtZXRob2RDb25maWcsXG4gICAgICAgICAgICBjbGFzc0NvbmZpZyxcbiAgICAgICAgICAgIGV4cHJlc3NQYXRoLFxuICAgICAgICAgICAgY29udHJvbGxlckNsYXNzRm4sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuYWN0aXZlUm91dGVzLnB1c2goe1xuICAgICAgICAgICAgcm91dGVQYXRoLFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaG91bGRJbml0Q2xpZW50ID1cbiAgICAgICAgICBIZWxwZXJzLmlzQnJvd3NlciB8fCB0aGlzLnJlbW90ZUhvc3QgfHwgSGVscGVycy5pc1dlYlNRTDtcblxuICAgICAgICBpZiAoc2hvdWxkSW5pdENsaWVudCkge1xuXG5cblxuXG5cblxuXG4gICAgICAgICAgdGhpcy5pbml0Q2xpZW50KGNvbnRyb2xsZXJDbGFzc0ZuLCB0eXBlLCBtZXRob2RDb25maWcsIGV4cHJlc3NQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbi8qICovXG4vKiAqL1xuICBcbiAgICAgICAgdGhpcy5sb2dIdHRwICYmIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbi8qICovXG4vKiAqL1xuICBcbiAgICB9XG4gIH1cblxuXG5cbiAgcHVibGljIHdyaXRlQWN0aXZlUm91dGVzKCkge1xuICAgIGlmICh0aGlzLnJlbW90ZUhvc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dHM6IEVuZHBvaW50Q29udGV4dFtdID0gW3RoaXNdO1xuXG5cbiAgICBjb25zdCB0cm91dGVzID0gdGhpcy5hY3RpdmVSb3V0ZXMubWFwKCh7IG1ldGhvZCwgcm91dGVQYXRoIH0pID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFRhb25IZWxwZXJzLmZpbGxVcFRvKG1ldGhvZC50b1VwcGVyQ2FzZSgpICsgJzonLCAxMCkgK1xuICAgICAgICB0aGlzLnVyaS5ocmVmLnJlcGxhY2UoL1xcLyQvLCAnJykgK1xuICAgICAgICByb3V0ZVBhdGhcbiAgICAgICk7XG5cblxuXG4gICAgfSk7XG4gICAgY29uc3Qgcm91dGVzID0gW1xuICAgICAgLi4uWycnLCBgLS0tLS0tLS0tLSBGT1IgSE9TVCAke3RoaXMudXJpLmhyZWZ9IC0tLS0tLS0tLS1gXSxcbiAgICAgIC4uLnRyb3V0ZXMsXG4gICAgXTtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguam9pbihcbi8qICovXG4vKiAqL1xuICBcbiAgICAgIGB0bXAtcm91dGVzLSR7Xy5rZWJhYkNhc2UodGhpcy5jb25maWcuY29udGV4dE5hbWUpfS5qc29uYCxcbiAgICApO1xuXG4gICAgdGhpcy5sb2dGcmFtZXdvcmsgJiYgY29uc29sZS5sb2coYFt0YW9uXSByb3V0ZXMgZmlsZTogJHtmaWxlTmFtZX0gYCk7XG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuICB9XG5cblxuXG4gIHB1YmxpYyBnZXQgbWlkZGxld2FyZXMoKTogTW9kZWxzLk1pZGRsZXdhcmVUeXBlW10ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByaXZhdGUgaW5pdE1pZGRsZXdhcmVzKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBwcml2YXRlIGluaXRTZXJ2ZXIoXG5cbiAgICB0eXBlOiBNb2RlbHMuSHR0cC5SZXN0Lkh0dHBNZXRob2QsXG4gICAgbWV0aG9kQ29uZmlnOiBNb2RlbHMuTWV0aG9kQ29uZmlnLFxuICAgIGNsYXNzQ29uZmlnOiBNb2RlbHMuUnVudGltZUNvbnRyb2xsZXJDb25maWcsXG4gICAgZXhwcmVzc1BhdGg6IHN0cmluZyxcbiAgICB0YXJnZXQ6IEZ1bmN0aW9uLFxuXG4gICk6IGFueSB7XG5cblxuICAgIGNvbnN0IHJlcXVlc3RIYW5kbGVyID1cbiAgICAgIG1ldGhvZENvbmZpZy5yZXF1ZXN0SGFuZGxlciAmJlxuICAgICAgdHlwZW9mIG1ldGhvZENvbmZpZy5yZXF1ZXN0SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IG1ldGhvZENvbmZpZy5yZXF1ZXN0SGFuZGxlclxuICAgICAgICA6IChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH07XG5cblxuICAgIGNvbnN0IHVybCA9IHRoaXMudXJpO1xuXG5cbiAgICBjb25zdCBnZXRSZXN1bHQgPSBhc3luYyAocmVzb2x2ZWRQYXJhbXMsIHJlcSwgcmVzKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZTogTW9kZWxzLkh0dHAuUmVzcG9uc2U8YW55PiA9XG4gICAgICAgIG1ldGhvZENvbmZpZy5kZXNjcmlwdG9yLnZhbHVlLmFwcGx5KFxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIENvbnRleHQgZm9yIG1ldGhvZCBAR0VULEBQVVQgZXRjLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuZ2V0SW5zdGFuY2VCeSh0YXJnZXQgYXMgYW55KSxcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQYXJhbXMgZm9yIG1ldGpvZCBAR0VULCBAUFVUIGV0Yy5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICByZXNvbHZlZFBhcmFtcyxcbiAgICAgICAgKTtcbiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBnZXRSZXNwb25zZVZhbHVlKHJlc3BvbnNlLCB7IHJlcSwgcmVzIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG5cbiAgICB1cmwucGF0aG5hbWUgPSB1cmwucGF0aG5hbWUucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICBleHByZXNzUGF0aCA9IHVybC5wYXRobmFtZS5zdGFydHNXaXRoKCcvJylcbiAgICAgID8gYCR7dXJsLnBhdGhuYW1lfSR7ZXhwcmVzc1BhdGh9YFxuICAgICAgOiBleHByZXNzUGF0aDtcbiAgICBleHByZXNzUGF0aCA9IGV4cHJlc3NQYXRoLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpO1xuXG5cblxuICAgIGlmIChIZWxwZXJzLmlzRWxlY3Ryb24pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlbW90ZUhvc3QpIHtcblxuXG4gICAgICBpZiAoSGVscGVycy5pc1dlYlNRTCkge1xuICAgICAgICBpZiAoIXRoaXMuZXhwcmVzc0FwcFt0eXBlLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgdGhpcy5leHByZXNzQXBwW3R5cGUudG9Mb3dlckNhc2UoKV0gPSAoKSA9PiB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlUGF0aDogZXhwcmVzc1BhdGgsXG4gICAgICBtZXRob2Q6IG1ldGhvZENvbmZpZy50eXBlLFxuICAgIH07XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGNsaWVudCBjYW4gYmUgYnJvd3NlciBvciBub2RlanMgKHdoZW4gcmVtb3RlIGhvc3QpXG4gICAqL1xuICBwcml2YXRlIGluaXRDbGllbnQoXG5cbiAgICB0YXJnZXQ6IEZ1bmN0aW9uLFxuICAgIHR5cGU6IE1vZGVscy5IdHRwLlJlc3QuSHR0cE1ldGhvZCxcbiAgICBtZXRob2RDb25maWc6IE1vZGVscy5IdHRwLlJlc3QuTWV0aG9kQ29uZmlnLFxuICAgIGV4cHJlc3NQYXRoOiBzdHJpbmcsXG5cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gdGhpcztcblxuICAgIHRoaXMubG9nSHR0cCAmJiBjb25zb2xlLmxvZyhgJHt0eXBlPy50b1VwcGVyQ2FzZSgpfSAke2V4cHJlc3NQYXRofSBgKTtcblxuXG4gICAgbGV0IHN0b3JhZ2U6IGFueTtcbiAgICBpZiAoSGVscGVycy5pc0Jyb3dzZXIpIHtcbiAgICAgIHN0b3JhZ2UgPSB3aW5kb3c7XG4gICAgfVxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuICAgIGNvbnN0IG9yZ01ldGhvZHMgPSB0YXJnZXQucHJvdG90eXBlW21ldGhvZENvbmZpZy5tZXRob2ROYW1lXTtcblxuXG5cbiAgICBpZiAoSGVscGVycy5pc0VsZWN0cm9uKSB7XG4gICAgICB0YXJnZXQucHJvdG90eXBlW21ldGhvZENvbmZpZy5tZXRob2ROYW1lXSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVkID0gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgICAgICBjb25zdCB7IHJlcXVlc3QsIHJlc3BvbnNlIH0gPSBUYW9uSGVscGVycy53ZWJzcWxNb2NrcyhoZWFkZXJzKTtcblxuICAgICAgICAgIEhlbHBlcnMuaXBjUmVuZGVyZXIub25jZShcbiAgICAgICAgICAgIFRhb25IZWxwZXJzLmlwY0tleU5hbWVSZXNwb25zZSh0YXJnZXQsIG1ldGhvZENvbmZpZywgZXhwcmVzc1BhdGgpLFxuICAgICAgICAgICAgKGV2ZW50LCByZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHJlczogYW55ID0gcmVzcG9uc2VEYXRhO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyh7IHJlc3BvbnNlRGF0YSB9KTtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gcmVzO1xuICAgICAgICAgICAgICAgIHJlcyA9IG5ldyBNb2RlbHNOZzJSZXN0Lkh0dHBSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYm9keTogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICBpc0FycmF5OiB2b2lkIDAgYXMgYW55LFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZENvbmZpZy50eXBlLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGAke2N0eC51cmkub3JpZ2lufSR7XG4gICAgICAgICAgICAgICAgICAgICAgJycgLy8gVE9ETyBleHByZXNzIHBhdGhcbiAgICAgICAgICAgICAgICAgICAgfSR7bWV0aG9kQ29uZmlnLnBhdGh9IGAsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgSGVscGVycy5pc0Jsb2IoYm9keSkgfHwgXy5pc1N0cmluZyhib2R5KVxuICAgICAgICAgICAgICAgICAgICA/IGJvZHlcbiAgICAgICAgICAgICAgICAgICAgOiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgICAgICAgICAgIFJlc3RIZWFkZXJzLmZyb20oaGVhZGVycyksXG4gICAgICAgICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICAoKSA9PiBib2R5LFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIEhlbHBlcnMuaXBjUmVuZGVyZXIuc2VuZChcbiAgICAgICAgICAgIFRhb25IZWxwZXJzLmlwY0tleU5hbWVSZXF1ZXN0KHRhcmdldCwgbWV0aG9kQ29uZmlnLCBleHByZXNzUGF0aCksXG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZWNlaXZlZFsnb2JzZXJ2YWJsZSddID0gZnJvbShyZWNlaXZlZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVjZWl2ZWQsXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cblxuXG5cbiAgICBjb25zdCBNSU5fVElNRU9VVCA9IDUwMDtcbiAgICBjb25zdCBNSU5fVElNRU9VVF9TVEVQID0gMjAwO1xuICAgIGNvbnN0IHRpbWVvdXQgPVxuICAgICAgd2luZG93W1N5bWJvbHMub2xkLldFQlNRTF9SRVNUX1BST0dSRVNTX1RJTUVPVVRdIHx8IE1JTl9USU1FT1VUO1xuXG4gICAgbGV0IHVwZGF0ZUZ1bjogU3ViamVjdDxudW1iZXI+ID1cbiAgICAgIHdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19GVU5dO1xuICAgIGlmICghd2luZG93W1N5bWJvbHMub2xkLldFQlNRTF9SRVNUX1BST0dSRVNTX0ZVTl0pIHtcbiAgICAgIHdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19GVU5dID0gbmV3IFN1YmplY3QoKTtcbiAgICB9XG4gICAgdXBkYXRlRnVuID0gd2luZG93W1N5bWJvbHMub2xkLldFQlNRTF9SRVNUX1BST0dSRVNTX0ZVTl07XG5cbiAgICBsZXQgc3RhcnRGdW46IFN1YmplY3Q8dm9pZD4gPVxuICAgICAgd2luZG93W1N5bWJvbHMub2xkLldFQlNRTF9SRVNUX1BST0dSRVNTX0ZVTl9TVEFSVF07XG4gICAgaWYgKCF3aW5kb3dbU3ltYm9scy5vbGQuV0VCU1FMX1JFU1RfUFJPR1JFU1NfRlVOX1NUQVJUXSkge1xuICAgICAgd2luZG93W1N5bWJvbHMub2xkLldFQlNRTF9SRVNUX1BST0dSRVNTX0ZVTl9TVEFSVF0gPSBuZXcgU3ViamVjdCgpO1xuICAgIH1cbiAgICBzdGFydEZ1biA9IHdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19GVU5fU1RBUlRdO1xuXG4gICAgbGV0IGRvbmVGdW46IFN1YmplY3Q8dm9pZD4gPVxuICAgICAgd2luZG93W1N5bWJvbHMub2xkLldFQlNRTF9SRVNUX1BST0dSRVNTX0ZVTl9ET05FXTtcbiAgICBpZiAoIXdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19GVU5fRE9ORV0pIHtcbiAgICAgIHdpbmRvd1tTeW1ib2xzLm9sZC5XRUJTUUxfUkVTVF9QUk9HUkVTU19GVU5fRE9ORV0gPSBuZXcgU3ViamVjdCgpO1xuICAgIH1cbiAgICBkb25lRnVuID0gd2luZG93W1N5bWJvbHMub2xkLldFQlNRTF9SRVNUX1BST0dSRVNTX0ZVTl9ET05FXTtcblxuICAgIGxldCBwZXJpb2RzVG9VcGRhdGUgPSAwO1xuICAgIGlmICh0aW1lb3V0ID49IE1JTl9USU1FT1VUKSB7XG4gICAgICBwZXJpb2RzVG9VcGRhdGUgPSBNYXRoLmZsb29yKHRpbWVvdXQgLyBNSU5fVElNRU9VVF9TVEVQKTtcbiAgICB9XG5cblxuXG4gICAgY29uc3QgcGVyaW9kcyA9IGFzeW5jICgpID0+IHtcbiAgICAgIHN0YXJ0RnVuLm5leHQoKTtcbiAgICAgIGZvciAobGV0IG4gPSAxOyBuIDw9IHBlcmlvZHNUb1VwZGF0ZTsgbisrKSB7XG5cblxuXG4gICAgICAgIGxldCB1cFZhbHVlID0gTWF0aC5yb3VuZCgoKE1JTl9USU1FT1VUX1NURVAgKiBuKSAvIHRpbWVvdXQpICogMTAwKTtcbiAgICAgICAgaWYgKHVwVmFsdWUgPiAxMDApIHtcbiAgICAgICAgICB1cFZhbHVlID0gMTAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlRnVuLm5leHQodXBWYWx1ZSk7XG5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSh2b2lkIDApO1xuICAgICAgICAgIH0sIE1JTl9USU1FT1VUX1NURVApO1xuICAgICAgICB9KTtcblxuICAgICAgfVxuICAgICAgZG9uZUZ1bi5uZXh0KCk7XG4gICAgfTtcblxuXG4gICAgdGFyZ2V0LnByb3RvdHlwZVttZXRob2RDb25maWcubWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXG5cblxuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0LCByZXNwb25zZSB9ID0gVGFvbkhlbHBlcnMud2Vic3FsTW9ja3MoaGVhZGVycyk7XG5cbiAgICAgICAgbGV0IHJlczogYW55O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcyA9IGF3YWl0IEhlbHBlcnMucnVuU3luY09yQXN5bmMoe1xuICAgICAgICAgICAgZnVuY3Rpb25Gbjogb3JnTWV0aG9kcyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMsXG4gICAgICAgICAgICBhcnJheU9mUGFyYW1zOiBhcmdzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlcyA9IGF3YWl0IEhlbHBlcnMucnVuU3luY09yQXN5bmMoe1xuICAgICAgICAgICAgICBmdW5jdGlvbkZuOiByZXMsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMsXG4gICAgICAgICAgICAgIGFycmF5T2ZQYXJhbXM6IFtyZXF1ZXN0LCByZXNwb25zZV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmVzID0gYXdhaXQgSGVscGVycy5ydW5TeW5jT3JBc3luYyh7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uRm46IHJlcyxcbiAgICAgICAgICAgICAgY29udGV4dDogdGhpcyxcbiAgICAgICAgICAgICAgYXJyYXlPZlBhcmFtczogW3JlcXVlc3QsIHJlc3BvbnNlXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmIHJlcz8ucmVjZWl2ZWQpIHtcbiAgICAgICAgICAgIHJlcyA9IGF3YWl0IHJlcy5yZWNlaXZlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gcmVzO1xuXG4gICAgICAgICAgcmVzID0gbmV3IE1vZGVsc05nMlJlc3QuSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBib2R5OiB2b2lkIDAsXG4gICAgICAgICAgICAgIGlzQXJyYXk6IHZvaWQgMCBhcyBhbnksXG4gICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kQ29uZmlnLnR5cGUsXG4gICAgICAgICAgICAgIHVybDogYCR7Y3R4LnVyaS5vcmlnaW59JHtcbiAgICAgICAgICAgICAgICAnJyAvLyBUT0RPIGV4cHJlc3MgcGF0aFxuICAgICAgICAgICAgICB9JHttZXRob2RDb25maWcucGF0aH0gYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBIZWxwZXJzLmlzQmxvYihib2R5KSB8fCBfLmlzU3RyaW5nKGJvZHkpXG4gICAgICAgICAgICAgID8gYm9keVxuICAgICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgICAgICAgUmVzdEhlYWRlcnMuZnJvbShoZWFkZXJzKSxcbiAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgICgpID0+IGJvZHksXG4gICAgICAgICAgKTtcblxuXG5cblxuXG4gICAgICAgICAgYXdhaXQgcGVyaW9kcygpO1xuICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBhd2FpdCBwZXJpb2RzKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG5cblxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZWNlaXZlZFsnb2JzZXJ2YWJsZSddID0gZnJvbShyZWNlaXZlZCk7XG5cbiAgICAgIGlmIChIZWxwZXJzLmlzV2ViU1FMKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVjZWl2ZWQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoSGVscGVycy5pc1dlYlNRTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cblxuXG4gICAgdGFyZ2V0LnByb3RvdHlwZVttZXRob2RDb25maWcubWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAodGhpczoge30sIC4uLmFyZ3MpIHtcblxuXG5cblxuXG4gICAgICBpZiAoIXN0b3JhZ2VbU3ltYm9scy5vbGQuRU5EUE9JTlRfTUVUQV9DT05GSUddKVxuICAgICAgICBzdG9yYWdlW1N5bWJvbHMub2xkLkVORFBPSU5UX01FVEFfQ09ORklHXSA9IHt9O1xuICAgICAgaWYgKCFzdG9yYWdlW1N5bWJvbHMub2xkLkVORFBPSU5UX01FVEFfQ09ORklHXVtjdHgudXJpLmhyZWZdKVxuICAgICAgICBzdG9yYWdlW1N5bWJvbHMub2xkLkVORFBPSU5UX01FVEFfQ09ORklHXVtjdHgudXJpLmhyZWZdID0ge307XG4gICAgICBjb25zdCBlbmRwb2ludHMgPSBzdG9yYWdlW1N5bWJvbHMub2xkLkVORFBPSU5UX01FVEFfQ09ORklHXTtcbiAgICAgIGxldCByZXN0OiBNb2RlbHNOZzJSZXN0LlJlc291cmNlTW9kZWw8YW55LCBhbnk+O1xuICAgICAgaWYgKCFlbmRwb2ludHNbY3R4LnVyaS5ocmVmXVtleHByZXNzUGF0aF0pIHtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSB7fTtcbiAgICAgICAgaWYgKG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSAmJiAhbWV0aG9kQ29uZmlnLnJlc3BvbnNlVHlwZSkge1xuICAgICAgICAgIHJlc3QgPSBSZXNvdXJjZS5jcmVhdGUoXG4gICAgICAgICAgICBjdHgudXJpLmhyZWYsXG4gICAgICAgICAgICBleHByZXNzUGF0aCxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUiBhcyBhbnksXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5DSVJDVVJBTF9PQkpFQ1RTX01BUF9CT0RZIGFzIGFueSxcbiAgICAgICAgICAgIFJlc3RIZWFkZXJzLmZyb20oe1xuICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogbWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICBBY2NlcHQ6IG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlICYmIG1ldGhvZENvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgICAgICByZXN0ID0gUmVzb3VyY2UuY3JlYXRlKFxuICAgICAgICAgICAgY3R4LnVyaS5ocmVmLFxuICAgICAgICAgICAgZXhwcmVzc1BhdGgsXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVIgYXMgYW55LFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSBhcyBhbnksXG4gICAgICAgICAgICBSZXN0SGVhZGVycy5mcm9tKHtcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgQWNjZXB0OiBtZXRob2RDb25maWcuY29udGVudFR5cGUsXG4gICAgICAgICAgICAgIHJlc3BvbnNldHlwZWF4aW9zOiBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICghbWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlICYmIG1ldGhvZENvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgICAgICByZXN0ID0gUmVzb3VyY2UuY3JlYXRlKFxuICAgICAgICAgICAgY3R4LnVyaS5ocmVmLFxuICAgICAgICAgICAgZXhwcmVzc1BhdGgsXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVIgYXMgYW55LFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSBhcyBhbnksXG4gICAgICAgICAgICBSZXN0SGVhZGVycy5mcm9tKHtcbiAgICAgICAgICAgICAgcmVzcG9uc2V0eXBlYXhpb3M6IG1ldGhvZENvbmZpZy5yZXNwb25zZVR5cGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3QgPSBSZXNvdXJjZS5jcmVhdGUoXG4gICAgICAgICAgICBjdHgudXJpLmhyZWYsXG4gICAgICAgICAgICBleHByZXNzUGF0aCxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUiBhcyBhbnksXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5DSVJDVVJBTF9PQkpFQ1RTX01BUF9CT0RZIGFzIGFueSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5kcG9pbnRzW2N0eC51cmkuaHJlZl1bZXhwcmVzc1BhdGhdID0gcmVzdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QgPSBlbmRwb2ludHNbY3R4LnVyaS5ocmVmXVtleHByZXNzUGF0aF0gYXMgYW55O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRob2QgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBpc1dpdGhCb2R5ID0gbWV0aG9kID09PSAncHV0JyB8fCBtZXRob2QgPT09ICdwb3N0JztcbiAgICAgIGNvbnN0IHBhdGhQcmFtcyA9IHt9O1xuICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgICBsZXQgYm9keU9iamVjdCA9IHt9O1xuICAgICAgYXJncy5mb3JFYWNoKChwYXJhbSwgaSkgPT4ge1xuICAgICAgICBsZXQgY3VycmVudFBhcmFtOiBNb2RlbHMuSHR0cC5SZXN0LlBhcmFtQ29uZmlnID0gdm9pZCAwIGFzIGFueTtcblxuICAgICAgICBmb3IgKGxldCBwcCBpbiBtZXRob2RDb25maWcucGFyYW1ldGVycykge1xuICAgICAgICAgIGxldCB2ID0gbWV0aG9kQ29uZmlnLnBhcmFtZXRlcnNbcHBdO1xuICAgICAgICAgIGlmICh2LmluZGV4ID09PSBpKSB7XG4gICAgICAgICAgICBjdXJyZW50UGFyYW0gPSB2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbVR5cGUgPT09ICdQYXRoJykge1xuICAgICAgICAgIHBhdGhQcmFtc1tjdXJyZW50UGFyYW0ucGFyYW1OYW1lXSA9IHBhcmFtO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnUXVlcnknKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBNYXBwaW5nLmRlY29kZShwYXJhbSwgIWN0eC5pc1Byb2R1Y3Rpb25Nb2RlKTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgYCR7U3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSX1FVRVJZX1BBUkFNU30ke2N1cnJlbnRQYXJhbS5wYXJhbU5hbWV9IGAsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFwcGluZyksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeVBhcmFtc1tjdXJyZW50UGFyYW0ucGFyYW1OYW1lXSA9IHBhcmFtO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gTWFwcGluZy5kZWNvZGUocGFyYW0sICFjdHguaXNQcm9kdWN0aW9uTW9kZSk7XG4gICAgICAgICAgICBpZiAobWFwcGluZykge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgIFN5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUl9RVUVSWV9QQVJBTVMsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFwcGluZyksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IF8uY2xvbmVEZWVwKHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbVR5cGUgPT09ICdIZWFkZXInKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbU5hbWUpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1OYW1lID09PSBTeW1ib2xzLm9sZC5NRENfS0VZKSB7XG5cbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyYW0ucGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShwYXJhbSkpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChjdXJyZW50UGFyYW0ucGFyYW1OYW1lLCBwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGhlYWRlciBpbiBwYXJhbSkge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KGhlYWRlciwgcGFyYW1baGVhZGVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnQ29va2llJykge1xuICAgICAgICAgIFJlc291cmNlLkNvb2tpZXMud3JpdGUoXG4gICAgICAgICAgICBjdXJyZW50UGFyYW0ucGFyYW1OYW1lLFxuICAgICAgICAgICAgcGFyYW0sXG4gICAgICAgICAgICBjdXJyZW50UGFyYW0uZXhwaXJlSW5TZWNvbmRzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbVR5cGUgPT09ICdCb2R5Jykge1xuICAgICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICBpZiAoQ2xhc3NIZWxwZXJzLmdldE5hbWUoYm9keU9iamVjdCkgPT09ICdGb3JtRGF0YScpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbdGFvbiAtIGZyYW1ld29ya10gRG9uIHVzZSBwYXJhbSBuYW1lcyB3aGVuIHBvc3RpbmcgLyBwdXR0aW5nIEZvcm1EYXRhLlxuICAgICAgICAgICAgICBVc2UgdGhpczpcblxuKEBUYW9uLkh0dHAuUGFyYW0uQm9keSgpIGZvcm1EYXRhOiBGb3JtRGF0YSkgLi4uXG5cblxuaW5zdGVhZFxuXG4gIChAVGFvbi5IdHRwLlBhcmFtLkJvZHkoJyR7Y3VycmVudFBhcmFtLnBhcmFtTmFtZX0nKSBmb3JtRGF0YTogRm9ybURhdGEpIC4uLlxuXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBNYXBwaW5nLmRlY29kZShwYXJhbSwgIWN0eC5pc1Byb2R1Y3Rpb25Nb2RlKTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgYCR7U3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSX0JPRFlfUEFSQU1TfSR7Y3VycmVudFBhcmFtLnBhcmFtTmFtZX0gYCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYXBwaW5nKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJvZHlPYmplY3RbY3VycmVudFBhcmFtLnBhcmFtTmFtZV0gPSBwYXJhbTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IE1hcHBpbmcuZGVjb2RlKHBhcmFtLCAhY3R4LmlzUHJvZHVjdGlvbk1vZGUpO1xuICAgICAgICAgICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVJfQk9EWV9QQVJBTVMsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFwcGluZyksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5T2JqZWN0ID0gcGFyYW07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgYm9keU9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgQ2xhc3NIZWxwZXJzLmdldE5hbWUoYm9keU9iamVjdCkgIT09ICdGb3JtRGF0YSdcbiAgICAgICkge1xuICAgICAgICBsZXQgY2lyY3VyYWxGcm9tSXRlbSA9IFtdO1xuICAgICAgICBib2R5T2JqZWN0ID0gSlNPTjEwLnBhcnNlKFxuICAgICAgICAgIEpTT04xMC5zdHJpbmdpZnkoYm9keU9iamVjdCwgdm9pZCAwLCB2b2lkIDAsIGNpcmNzID0+IHtcbiAgICAgICAgICAgIGNpcmN1cmFsRnJvbUl0ZW0gPSBjaXJjcztcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICBTeW1ib2xzLm9sZC5DSVJDVVJBTF9PQkpFQ1RTX01BUF9CT0RZLFxuICAgICAgICAgIEpTT04xMC5zdHJpbmdpZnkoY2lyY3VyYWxGcm9tSXRlbSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgcXVlcnlQYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGxldCBjaXJjdXJhbEZyb21RdWVyeVBhcmFtcyA9IFtdO1xuICAgICAgICBxdWVyeVBhcmFtcyA9IEpTT04xMC5wYXJzZShcbiAgICAgICAgICBKU09OMTAuc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zLCB2b2lkIDAsIHZvaWQgMCwgY2lyY3MgPT4ge1xuICAgICAgICAgICAgY2lyY3VyYWxGcm9tUXVlcnlQYXJhbXMgPSBjaXJjcztcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgIFN5bWJvbHMub2xkLkNJUkNVUkFMX09CSkVDVFNfTUFQX1FVRVJZX1BBUkFNLFxuICAgICAgICAgIEpTT04xMC5zdHJpbmdpZnkoY2lyY3VyYWxGcm9tUXVlcnlQYXJhbXMpLFxuICAgICAgICApO1xuICAgICAgfVxuXG5cbiAgICAgIGNvbnN0IGh0dHBSZXN1bHRPYmogPSB7XG4gICAgICAgIHJlY2VpdmVkOiBpc1dpdGhCb2R5XG4gICAgICAgICAgPyByZXN0Lm1vZGVsKHBhdGhQcmFtcylbbWV0aG9kXShib2R5T2JqZWN0LCBbcXVlcnlQYXJhbXNdKVxuICAgICAgICAgIDogcmVzdC5tb2RlbChwYXRoUHJhbXMpW21ldGhvZF0oW3F1ZXJ5UGFyYW1zXSksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGh0dHBSZXN1bHRPYmo7XG4gICAgfTtcblxuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRhb24gbGliL2VuZHBvaW50LWNvbnRleHQudHMiXX0=
|