tnx-shared 5.0.41 → 5.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/bundles/tnx-shared.umd.js +56 -57
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/form-schema.d.ts +3 -2
  6. package/classes/form-schema.d.ts.map +1 -1
  7. package/classes/public-function.d.ts +1 -1
  8. package/components/crud/crud-form/crud-form.component.d.ts +2 -2
  9. package/esm2015/classes/form-schema.js +2 -1
  10. package/esm2015/components/access-denied-component/access-denied-v1/access-denied-v1.component.js +1 -1
  11. package/esm2015/components/common-app-component/app-topbar-v1/app-topbar-v1.component.js +1 -1
  12. package/esm2015/components/common-app-component/app-topbar-v2/app-topbar-v2.component.js +1 -1
  13. package/esm2015/components/common-app-component/app.topbar.component.js +1 -1
  14. package/esm2015/components/common-app-component/common-app-component.js +3 -3
  15. package/esm2015/components/crud/advance-search/advance-search.component.js +1 -1
  16. package/esm2015/components/crud/crud-form/crud-form.component.js +5 -4
  17. package/esm2015/components/crud/crud-list/crud-list.component.js +3 -3
  18. package/esm2015/components/file-explorer/file-manager/file-manager.component.js +2 -2
  19. package/esm2015/components/file-explorer/services/file-explorer-new.service.js +2 -2
  20. package/esm2015/components/file-explorer/services/file-explorer.service.js +3 -3
  21. package/esm2015/components/file-explorer/services/my-drive.service.js +2 -2
  22. package/esm2015/components/not-found/not-found.component.js +1 -1
  23. package/esm2015/components/query-builders/query-builder/query-builder.component.js +1 -1
  24. package/esm2015/components/report-queue/report-queue.component.js +3 -3
  25. package/esm2015/components/splash-component/splash-component-v1/splash-component-v1.component.js +1 -1
  26. package/esm2015/components/splash-component/splash-component-v2/splash-component-v2.component.js +1 -1
  27. package/esm2015/components/splash-component/splash-component.component.js +1 -1
  28. package/esm2015/components/tn-tabview/tn-tabview.component.js +1 -1
  29. package/esm2015/components/user-picker/user-picker-box/user-picker-box.component.js +1 -1
  30. package/esm2015/components/workflow/services/entity-workflow-history.service.js +3 -3
  31. package/esm2015/components/workflow/services/entity-workflow-setting.service.js +4 -4
  32. package/esm2015/components/workflow/workflow-picker/workflow-picker.component.js +1 -1
  33. package/esm2015/components/workflow/workflow-setting-new/workflow-setting-new.component.js +1 -1
  34. package/esm2015/services/base.service.js +2 -2
  35. package/esm2015/services/common.service.js +3 -3
  36. package/esm2015/services/export.service.js +2 -2
  37. package/esm2015/services/file-object-v4.service.js +2 -2
  38. package/esm2015/services/notifier.service.js +1 -1
  39. package/esm2015/services/print.service.js +2 -2
  40. package/esm2015/services/template-text-v4.service.js +1 -1
  41. package/esm2015/services/template.service.js +2 -2
  42. package/esm2015/services/templateinstance.service.js +2 -2
  43. package/esm2015/services/user-v5.service.js +1 -1
  44. package/fesm2015/tnx-shared.js +50 -48
  45. package/fesm2015/tnx-shared.js.map +1 -1
  46. package/package.json +2 -2
  47. package/services/template-text-v4.service.d.ts.map +1 -1
  48. package/tnx-shared.metadata.json +1 -1
@@ -389,7 +389,7 @@ AppTopBarV2Component.decorators = [
389
389
  selector: 'app-topbar-v2',
390
390
  template: "<div class=\"topbar clearfix tn-l-top-bar\">\r\n <div class=\"topbar-left tn-l-top-bar-left\" [ngClass]=\"{'beta-version': !environment.isProduction }\">\r\n <div class=\"tn-l-left-menu-toggle-block\">\r\n <a tabindex=\"1\" id=\"menu-button\" class=\"tn-l-left-menu-toggle\" href=\"#\"\r\n (click)=\"_commonService.onMenuButtonClick($event)\">\r\n <i class=\"pi pi-chevron-left\"></i>\r\n </a>\r\n </div>\r\n\r\n <div class=\"topbar-logo tn-l-logo-wrapper\">\r\n <a tabindex=\"2\" href=\"javascript:\" style=\"display: inline-block;\">\r\n <img class=\"topbar-logo tn-l-logo\" [src]=\"environment.appMetadata.main.logo\" (click)=\"goToHome()\" /></a>\r\n </div>\r\n <div class=\"topbar-title tn-l-logo-title-block\">\r\n <div class=\"topbar-owner\">\r\n {{environment.appMetadata.main.owner}}\r\n </div>\r\n <div class=\"topbar-description\">\r\n {{environment.appMetadata.main.title}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"setting-default-container\">\r\n <ng-container *ngIf=\"showDefaultSetting && currentUser\">\r\n <a tabindex=\"3\" href=\"javascript:void(0)\" class=\"tn-l-m-default-setting pi pi-cog\"\r\n (click)=\"settingDefault()\">\r\n </a>\r\n <h3 class=\"tn-l-default-detting\" (click)=\"settingDefault()\">\r\n {{defaultDataSetting}} <i class=\"pi pi-pencil\" style=\"margin-left:10px\"></i></h3>\r\n </ng-container>\r\n </div>\r\n <div #notify class=\"notify-message\">\r\n <marquee (mouseover)=\"handleMouseOver($event)\" (mouseout)=\"handleMouseOut($event)\">{{message}}</marquee>\r\n </div>\r\n <div class=\"topbar-right tn-l-top-bar-right\" [ngClass]=\"{'beta-version': !environment.isProduction}\"\r\n oncontextmenu=\"return false\">\r\n <div class=\"tn-l-top-bar-right-block-1\">\r\n <a tabindex=\"4\" class=\"topbar-menu-button\" id=\"topbar-menu-button\" href=\"#\"\r\n (click)=\"_commonService.onTopbarMenuButtonClick($event)\">\r\n <svg focusable=\"false\" class=\"tn-m-topbar-menu-toggle\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <span *ngIf=\"messages.totalUnRead > 0\" class=\"topbar-badge animated rubberBand\"\r\n [ngClass]=\"{'topbar-badge-bounce': messages.bounceNoti}\">{{messages.totalUnRead}}</span>\r\n </a>\r\n </div>\r\n\r\n <div class=\"tn-l-top-bar-right-block-2\">\r\n <ul class=\"topbar-items fadeInDown\" [ngClass]=\"{'topbar-items-visible': _commonService.topbarMenuActive}\">\r\n <li #profile class=\"profile-item tn-l-top-bar-menu-item\"\r\n *ngIf=\"_commonService.profileMode==='top'||_commonService.isHorizontal()\"\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === profile}\">\r\n\r\n <a href=\"#\" tabindex=\"10\" class=\"UserPane tn-l-top-bar-menu-item-inner\"\r\n (click)=\"_commonService.onTopbarItemClick($event,profile)\">\r\n <div class=\"profile-image-wrapper topbar-icon-left\">\r\n <img class=\"profile-image tn-l-profile-img\" [src-fallback]=\"defaultAvatar\"\r\n [src]=\"getCurrentUserAvatar()\" />\r\n </div>\r\n <div class=\"profile-info-wrapper\">\r\n <div class=\"topbar-item-name-wrapper\"\r\n [ngClass]=\"{'not-show-position': !getCurrentUserPosition()}\">\r\n <span class=\"topbar-item-name tn-l-user-name\">{{getCurrentUserFullName()}}</span>\r\n </div>\r\n <div class=\"topbar-item-role-wrapper tn-l-topbar-item-role-wrapper\"><span\r\n class=\"topbar-item-role\">{{getCurrentUserPosition()}}</span></div>\r\n </div>\r\n <i class=\"pi pi-user\" style=\"opacity: 0; position: absolute;\"></i>\r\n </a>\r\n\r\n <ul class=\"layout-menu fadeInDown tn-l-switcher\">\r\n <li *ngIf=\"currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"onTopbarLogout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>\u0110\u0103ng xu\u1EA5t</span>\r\n </a>\r\n </li>\r\n <li *ngIf=\"!currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\r\n <span>\u0110\u0103ng nh\u1EADp</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li #help class=\"menu-help tn-l-top-bar-menu-item\" tn-app-help></li>\r\n <li id=\"li-notifications\" class=\"tn-l-top-bar-menu-item\" #messages\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === messages || _commonService.activeTopbarItem === 0}\"\r\n tn-app-notification (openMenu)=\"_commonService.onTopbarItemClick($event,messages)\"></li>\r\n <li id=\"li-app-switcher\" class=\"tn-l-top-bar-menu-item\" #modules\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === modules || _commonService.activeTopbarItem === 1}\">\r\n <a href=\"#\" tabindex=\"7\" class=\"tn-l-top-bar-menu-item-inner\" style=\"height: 30px;\"\r\n pTooltip=\"Danh s\u00E1ch ph\u00E2n h\u1EC7\" tooltipPosition=\"bottom\"\r\n (click)=\"_commonService.onTopbarItemClick($event,modules)\">\r\n <span class=\"topbar-icon-left tn-l-topbar-icon-left\">\r\n <svg focusable=\"false\" class=\"topbar-icon animated swing svgmodule\" role=\"img\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <!-- <i class=\"pi pi-microsoft\"></i> -->\r\n </span>\r\n <span class=\"topbar-item-name\">{{ 'Danh s\u00E1ch ph\u00E2n h\u1EC7' | translate}}</span>\r\n </a>\r\n <ul class=\"app-switcher layout-menu fadeInDown\">\r\n <tn-custom-scrollbar #scrollbar class=\"app-switcher-holder\">\r\n <li role=\"menuitem\" class=\"wrapper-appswitch\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <a class=\"switcher-item tn-l-switcher-item\" href=\"javascript:\"\r\n (click)=\"switchApp(item, true)\">\r\n <span class=\"tn-l-switcher-item-inner\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon tn-l-switcher-item-icon\"></i>\r\n <div class=\"tn-l-switcher-item-label\">\r\n {{ item.title | translate}}\r\n </div>\r\n </span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </tn-custom-scrollbar>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>",
391
391
  providers: [ComponentContextService],
392
- styles: [".topBarSearchButton:disabled{background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important;opacity:1}::ng-deep app-topbar a{outline:none}input:disabled::-moz-placeholder{color:#b1b1b1}input:disabled:-ms-input-placeholder{color:#b1b1b1}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{float:none;margin-top:0}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;float:none;justify-content:center;order:0;text-align:right}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{-ms-grid-row-align:stretch;align-items:center;align-self:stretch;box-shadow:0 0 5px 0 rgba(0,0,0,.3764705882352941);display:flex}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{height:40px;margin:0;width:auto}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{font-size:0;height:auto;margin:0;padding-left:8px;padding-right:8px;width:auto}.tn-l-top-bar{display:flex}.topbar-description,.topbar-owner{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{display:flex;float:none;width:auto}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{display:block;height:28px;margin:auto;width:30px}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{justify-content:center}.notify-message,.setting-default-container{align-items:center;display:flex;margin-left:30px}.notify-message{flex:1 1;overflow:hidden}.notify-message>marquee{color:#ff0;font-size:500;white-space:nowrap}.search-item{margin-right:10px}.tn-l-switcher-item-inner{padding-top:4px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{align-items:center;background:#fff;display:inline-flex;justify-content:center}.tn-l-switcher-item-label{color:#52abff;line-height:20px;margin-top:4px;text-align:center;text-shadow:none}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{color:#52abff;font-size:38px;margin:0 auto;text-shadow:none}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+0){border-left:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1){border-right:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2){border:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1):last-child,::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .topbar .topbar-left{box-shadow:none}::ng-deep .layout-wrapper app-topbar-v2 .wrapper-appswitch{display:-ms-grid;display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));text-align:center}@media (max-width:1024px){::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset}}@media (min-width:1025px){.tn-l-top-bar-right{align-items:center;display:flex;justify-content:space-between}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{align-items:center;display:flex;flex-direction:row-reverse;justify-content:flex-start;margin:0}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width:1025px) and (max-width:1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width:1024px){.tn-l-m-default-setting{align-items:center;color:#fff;display:flex;font-size:28px;height:36px;justify-content:center;width:36px}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{align-items:center;display:flex;justify-content:center;width:36px}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-logo-title-block,.tn-l-top-bar-left,.topbar-description,.topbar-owner{overflow:hidden}.topbar-description,.topbar-owner{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{align-items:center;display:flex;justify-content:flex-end;padding:0 .5em}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{margin-left:.5em;position:relative;right:0;top:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:220px}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{align-items:center;display:flex;justify-content:center}.tn-l-topbar-item-role-wrapper{display:none}}"]
392
+ styles: [".topBarSearchButton:disabled{background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important;opacity:1}::ng-deep app-topbar a{outline:none}input:disabled::-moz-placeholder{color:#b1b1b1}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{float:none;margin-top:0}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;float:none;justify-content:center;order:0;text-align:right}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{align-items:center;align-self:stretch;box-shadow:0 0 5px 0 rgba(0,0,0,.3764705882352941);display:flex}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{height:40px;margin:0;width:auto}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{font-size:0;height:auto;margin:0;padding-left:8px;padding-right:8px;width:auto}.tn-l-top-bar{display:flex}.topbar-description,.topbar-owner{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{display:flex;float:none;width:auto}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{display:block;height:28px;margin:auto;width:30px}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{justify-content:center}.notify-message,.setting-default-container{align-items:center;display:flex;margin-left:30px}.notify-message{flex:1 1;overflow:hidden}.notify-message>marquee{color:#ff0;font-size:500;white-space:nowrap}.search-item{margin-right:10px}.tn-l-switcher-item-inner{padding-top:4px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{align-items:center;background:#fff;display:inline-flex;justify-content:center}.tn-l-switcher-item-label{color:#52abff;line-height:20px;margin-top:4px;text-align:center;text-shadow:none}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{color:#52abff;font-size:38px;margin:0 auto;text-shadow:none}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+0){border-left:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1){border-right:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2){border:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1):last-child,::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .topbar .topbar-left{box-shadow:none}::ng-deep .layout-wrapper app-topbar-v2 .wrapper-appswitch{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));text-align:center}@media (max-width:1024px){::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset}}@media (min-width:1025px){.tn-l-top-bar-right{align-items:center;display:flex;justify-content:space-between}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{align-items:center;display:flex;flex-direction:row-reverse;justify-content:flex-start;margin:0}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width:1025px) and (max-width:1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width:1024px){.tn-l-m-default-setting{align-items:center;color:#fff;display:flex;font-size:28px;height:36px;justify-content:center;width:36px}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{align-items:center;display:flex;justify-content:center;width:36px}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-logo-title-block,.tn-l-top-bar-left,.topbar-description,.topbar-owner{overflow:hidden}.topbar-description,.topbar-owner{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{align-items:center;display:flex;justify-content:flex-end;padding:0 .5em}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{margin-left:.5em;position:relative;right:0;top:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:220px}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{align-items:center;display:flex;justify-content:center}.tn-l-topbar-item-role-wrapper{display:none}}"]
393
393
  },] }
394
394
  ];
395
395
  AppTopBarV2Component.ctorParameters = () => [
@@ -399,7 +399,7 @@ AppTopBarComponent.decorators = [
399
399
  selector: 'app-topbar',
400
400
  template: "<ng-container [ngSwitch]=\"layoutAppSwitcher\">\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"appSwitcherDefault\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"EnumTypeSplash.NEW_V1\">\r\n <app-topbar-v1></app-topbar-v1>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"EnumTypeSplash.NEW_V2\">\r\n <app-topbar-v2></app-topbar-v2>\r\n </ng-container>\r\n</ng-container>\r\n\r\n<ng-template #appSwitcherDefault>\r\n <div class=\"topbar clearfix tn-l-top-bar\">\r\n <div class=\"topbar-left tn-l-top-bar-left\" [ngClass]=\"{'beta-version': !environment.isProduction }\">\r\n <div class=\"tn-l-left-menu-toggle-block\">\r\n <a tabindex=\"1\" id=\"menu-button\" class=\"tn-l-left-menu-toggle\" href=\"#\"\r\n (click)=\"_commonService.onMenuButtonClick($event)\">\r\n <i class=\"pi pi-chevron-left\"></i>\r\n </a>\r\n </div>\r\n\r\n <div class=\"topbar-logo tn-l-logo-wrapper\">\r\n <a tabindex=\"2\" href=\"javascript:\" style=\"display: inline-block;\">\r\n <img class=\"topbar-logo tn-l-logo\" [src]=\"environment.appMetadata.main.logo\"\r\n (click)=\"goToHome()\" /></a>\r\n </div>\r\n <div class=\"topbar-title tn-l-logo-title-block\">\r\n <div class=\"topbar-owner\">\r\n {{environment.appMetadata.main.owner}}\r\n </div>\r\n <div class=\"topbar-description\">\r\n {{environment.appMetadata.main.title}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"setting-default-container\">\r\n <ng-container *ngIf=\"showDefaultSetting && currentUser\">\r\n <a tabindex=\"3\" href=\"javascript:void(0)\" class=\"tn-l-m-default-setting pi pi-cog\"\r\n (click)=\"settingDefault()\">\r\n </a>\r\n <h3 class=\"tn-l-default-detting\" (click)=\"settingDefault()\">\r\n {{defaultDataSetting}} <i class=\"pi pi-pencil\" style=\"margin-left:10px\"></i></h3>\r\n </ng-container>\r\n </div>\r\n <div #notify class=\"notify-message\">\r\n <marquee (mouseover)=\"handleMouseOver($event)\" (mouseout)=\"handleMouseOut($event)\">{{message}}</marquee>\r\n </div>\r\n <div class=\"topbar-right tn-l-top-bar-right\" [ngClass]=\"{'beta-version': !environment.isProduction}\"\r\n oncontextmenu=\"return false\">\r\n <div class=\"tn-l-top-bar-right-block-1\">\r\n <a tabindex=\"4\" class=\"topbar-menu-button\" id=\"topbar-menu-button\" href=\"#\"\r\n (click)=\"_commonService.onTopbarMenuButtonClick($event)\">\r\n <svg focusable=\"false\" class=\"tn-m-topbar-menu-toggle\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <span *ngIf=\"messages.totalUnRead > 0\" class=\"topbar-badge animated rubberBand\"\r\n [ngClass]=\"{'topbar-badge-bounce': messages.bounceNoti}\">{{messages.totalUnRead}}</span>\r\n </a>\r\n </div>\r\n\r\n <div class=\"tn-l-top-bar-right-block-2\">\r\n <ul class=\"topbar-items fadeInDown\"\r\n [ngClass]=\"{'topbar-items-visible': _commonService.topbarMenuActive}\">\r\n <li *ngIf=\"_commonService.profileMode==='top'||_commonService.isHorizontal()\" #profile\r\n class=\"profile-item tn-l-top-bar-menu-item\"\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === profile}\">\r\n\r\n <a href=\"#\" tabindex=\"10\" class=\"UserPane tn-l-top-bar-menu-item-inner\"\r\n (click)=\"_commonService.onTopbarItemClick($event,profile)\">\r\n <div class=\"profile-image-wrapper topbar-icon-left\">\r\n <img class=\"profile-image tn-l-profile-img\" [src-fallback]=\"defaultAvatar\"\r\n [src]=\"getCurrentUserAvatar()\" />\r\n </div>\r\n <div class=\"profile-info-wrapper\">\r\n <div class=\"topbar-item-name-wrapper\"\r\n [ngClass]=\"{'not-show-position': !getCurrentUserPosition()}\">\r\n <span class=\"topbar-item-name tn-l-user-name\">{{getCurrentUserFullName()}}</span>\r\n </div>\r\n <div class=\"topbar-item-role-wrapper tn-l-topbar-item-role-wrapper\"><span\r\n class=\"topbar-item-role\">{{getCurrentUserPosition()}}</span></div>\r\n </div>\r\n <i class=\"pi pi-user\" style=\"opacity: 0; position: absolute;\"></i>\r\n </a>\r\n\r\n <ul class=\"layout-menu fadeInDown tn-l-switcher\">\r\n <ng-container *ngIf=\"currentUser\">\r\n <li role=\"menuitem\">\r\n <a href=\"#\" (click)=\"onEditInfo($event)\">\r\n <i class=\"pi pi-inbox\"></i>\r\n <span>Th\u01B0 m\u1EE5c c\u00E1 nh\u00E2n</span>\r\n </a>\r\n </li>\r\n <li role=\"menuitem\">\r\n <a href=\"#\" (click)=\"onEditInfo($event)\">\r\n <i class=\"pi pi-user-edit\"></i>\r\n <span>C\u1EADp nh\u1EADt th\u00F4ng tin</span>\r\n </a>\r\n </li>\r\n <li role=\"menuitem\">\r\n <a href=\"#\" (click)=\"onEditInfo($event)\">\r\n <i class=\"pi pi-book\"></i>\r\n <span>Ghi ch\u00FA</span>\r\n </a>\r\n </li>\r\n <li role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"onTopbarLogout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>\u0110\u0103ng xu\u1EA5t</span>\r\n </a>\r\n </li>\r\n </ng-container>\r\n\r\n <li *ngIf=\"!currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\r\n <span>\u0110\u0103ng nh\u1EADp</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li #help class=\"menu-help tn-l-top-bar-menu-item\" tn-app-help></li>\r\n <li id=\"li-notifications\" class=\"tn-l-top-bar-menu-item\" #messages\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === messages || _commonService.activeTopbarItem === 0}\"\r\n tn-app-notification (openMenu)=\"_commonService.onTopbarItemClick($event,messages)\"></li>\r\n <li id=\"li-app-switcher\" class=\"tn-l-top-bar-menu-item\" #modules\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === modules || _commonService.activeTopbarItem === 1}\">\r\n <a href=\"#\" tabindex=\"7\" (click)=\"_commonService.onTopbarItemClick($event,modules)\"\r\n style=\"height: 30px;\" pTooltip=\"Danh s\u00E1ch ph\u00E2n h\u1EC7\" tooltipPosition=\"bottom\"\r\n class=\"tn-l-top-bar-menu-item-inner\">\r\n <span class=\"topbar-icon-left tn-l-topbar-icon-left\">\r\n <svg focusable=\"false\" class=\"topbar-icon animated swing svgmodule\" role=\"img\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <!-- <i class=\"pi pi-microsoft\"></i> -->\r\n </span>\r\n <span class=\"topbar-item-name\">{{ 'Danh s\u00E1ch ph\u00E2n h\u1EC7' | translate}}</span>\r\n </a>\r\n <ul class=\"app-switcher layout-menu fadeInDown\">\r\n <tn-custom-scrollbar #scrollbar class=\"app-switcher-holder\">\r\n <li role=\"menuitem\" style=\"text-align: center;\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <a class=\"switcher-item tn-l-switcher-item\" href=\"javascript:\"\r\n [style.background]=\"item.background\" (click)=\"switchApp(item, true)\">\r\n <span class=\"tn-l-switcher-item-inner\" [style.color]=\"item.colorTitle\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon tn-l-switcher-item-icon\"\r\n [style.color]=\"item.colorIcon\"></i>\r\n <div class=\"tn-l-switcher-item-label\">\r\n {{ item.title | translate}}\r\n </div>\r\n </span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </tn-custom-scrollbar>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>",
401
401
  providers: [ComponentContextService],
402
- styles: [".topBarSearchButton:disabled{background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important;opacity:1}::ng-deep app-topbar a{outline:none}input:disabled::-moz-placeholder{color:#b1b1b1}input:disabled:-ms-input-placeholder{color:#b1b1b1}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{float:none;margin-top:0}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;float:none;justify-content:center;order:0;text-align:right}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{-ms-grid-row-align:stretch;align-items:center;align-self:stretch;box-shadow:0 0 5px 0 rgba(0,0,0,.3764705882352941);display:flex}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{height:40px;margin:0;width:auto}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{font-size:0;height:auto;margin:0;padding-left:8px;padding-right:8px;width:auto}.tn-l-top-bar{display:flex}.topbar-description,.topbar-owner{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{display:flex;float:none;width:auto}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{display:block;height:28px;margin:auto;width:30px}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{justify-content:center}.notify-message,.setting-default-container{align-items:center;display:flex;margin-left:30px}.notify-message{flex:1 1;overflow:hidden}.notify-message>marquee{color:#ff0;font-size:500;white-space:nowrap}.search-item{margin-right:10px}.tn-l-switcher-item-inner{padding-top:4px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{align-items:center;display:inline-flex;justify-content:center}.tn-l-switcher-item-label{line-height:1.2;margin-top:4px}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{font-size:38px;margin:0 auto}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}@media (min-width:1025px){.tn-l-top-bar-right{align-items:center;display:flex;justify-content:space-between}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{align-items:center;display:flex;flex-direction:row-reverse;justify-content:flex-start;margin:0}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width:1025px) and (max-width:1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width:1024px){.tn-l-m-default-setting{align-items:center;color:#fff;display:flex;font-size:28px;height:36px;justify-content:center;width:36px}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{align-items:center;display:flex;justify-content:center;width:36px}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-logo-title-block,.tn-l-top-bar-left,.topbar-description,.topbar-owner{overflow:hidden}.topbar-description,.topbar-owner{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{align-items:center;display:flex;justify-content:flex-end;padding:0 .5em}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{margin-left:.5em;position:relative;right:0;top:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:220px}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{align-items:center;display:flex;justify-content:center}.tn-l-topbar-item-role-wrapper{display:none}}"]
402
+ styles: [".topBarSearchButton:disabled{background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important;opacity:1}::ng-deep app-topbar a{outline:none}input:disabled::-moz-placeholder{color:#b1b1b1}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{float:none;margin-top:0}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;float:none;justify-content:center;order:0;text-align:right}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{align-items:center;align-self:stretch;box-shadow:0 0 5px 0 rgba(0,0,0,.3764705882352941);display:flex}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{height:40px;margin:0;width:auto}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{font-size:0;height:auto;margin:0;padding-left:8px;padding-right:8px;width:auto}.tn-l-top-bar{display:flex}.topbar-description,.topbar-owner{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{display:flex;float:none;width:auto}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{display:block;height:28px;margin:auto;width:30px}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{justify-content:center}.notify-message,.setting-default-container{align-items:center;display:flex;margin-left:30px}.notify-message{flex:1 1;overflow:hidden}.notify-message>marquee{color:#ff0;font-size:500;white-space:nowrap}.search-item{margin-right:10px}.tn-l-switcher-item-inner{padding-top:4px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{align-items:center;display:inline-flex;justify-content:center}.tn-l-switcher-item-label{line-height:1.2;margin-top:4px}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{font-size:38px;margin:0 auto}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}@media (min-width:1025px){.tn-l-top-bar-right{align-items:center;display:flex;justify-content:space-between}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{align-items:center;display:flex;flex-direction:row-reverse;justify-content:flex-start;margin:0}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width:1025px) and (max-width:1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width:1024px){.tn-l-m-default-setting{align-items:center;color:#fff;display:flex;font-size:28px;height:36px;justify-content:center;width:36px}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{align-items:center;display:flex;justify-content:center;width:36px}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-logo-title-block,.tn-l-top-bar-left,.topbar-description,.topbar-owner{overflow:hidden}.topbar-description,.topbar-owner{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{align-items:center;display:flex;justify-content:flex-end;padding:0 .5em}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{margin-left:.5em;position:relative;right:0;top:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:220px}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{align-items:center;display:flex;justify-content:center}.tn-l-topbar-item-role-wrapper{display:none}}"]
403
403
  },] }
404
404
  ];
405
405
  AppTopBarComponent.ctorParameters = () => [
@@ -4,7 +4,7 @@ import { Title } from '@angular/platform-browser';
4
4
  import { ActivatedRoute, NavigationStart, Router } from '@angular/router';
5
5
  import { TranslateService } from '@ngx-translate/core';
6
6
  import { OAuthService } from 'angular-oauth2-oidc';
7
- import Hammer from 'hammerjs';
7
+ import * as Hammer from 'hammerjs';
8
8
  import { DeviceDetectorService } from 'ngx-device-detector';
9
9
  import { Subject } from 'rxjs';
10
10
  import { ConfirmationService, MessageService, PrimeNGConfig } from 'tn-custom-primeng/api';
@@ -722,7 +722,7 @@ CommonAppComponentComponent.decorators = [
722
722
  selector: 'common-app-component',
723
723
  template: "<div *ngIf=\"pageLoaded\" [style.display]=\"pageLoaded ? '' : 'none'\" class=\"layout-wrapper\"\r\n (click)=\"_commonService.onLayoutClick()\" [ngClass]=\"{'menu-layout-static': !_commonService.isOverlay(),\r\n 'menu-layout-overlay': _commonService.isOverlay(),\r\n 'layout-menu-overlay-active': _commonService.overlayMenuActive,\r\n 'menu-layout-horizontal': _commonService.isHorizontal(),\r\n 'menu-layout-slim': _commonService.isSlim(),\r\n 'layout-menu-static-desktop-inactive': _commonService.staticMenuDesktopInactive,\r\n 'layout-menu-static-desktop-active': !_commonService.staticMenuDesktopInactive,\r\n 'layout-menu-static-mobile-inactive': !_commonService.staticMenuMobileActive,\r\n 'layout-menu-static-mobile-active': _commonService.staticMenuMobileActive,\r\n 'layout-menu-static-inactive': _commonService.staticMenuDesktopInactive,\r\n 'layout-menu-static-active': _commonService.staticMenuMobileActive}\">\r\n\r\n <app-topbar *ngIf=\"_globalService.getHeaderState()\"></app-topbar>\r\n\r\n <div *ngIf=\"_globalService.getMenuState()\" class=\"layout-menu-container\"\r\n [ngClass]=\"{'layout-menu-dark':_commonService.darkMenu}\" (click)=\"_commonService.onMenuClick($event)\">\r\n <app-root-menu></app-root-menu>\r\n <div class=\"layout-menu-block\">\r\n <tn-custom-scrollbar #scrollbar [style]=\"{'padding-top': '16px'}\">\r\n <app-inline-profile *ngIf=\"_commonService.profileMode == 'inline' &&!_commonService.isHorizontal()\">\r\n </app-inline-profile>\r\n <app-menu [reset]=\"_commonService.resetMenu\" (onMenuActive)=\"handleMenuActive($event)\"></app-menu>\r\n </tn-custom-scrollbar>\r\n </div>\r\n <div class=\"search-area layout-menu-search-area\">\r\n <p-autoComplete [(ngModel)]=\"searchMenuInput\" [style]=\"{'width':'100%'}\" [suggestions]=\"searchMenuResult\"\r\n (completeMethod)=\"onSearchMenu($event)\" [autoHighlight]=\"true\"\r\n [placeholder]=\"'T\u00ECm ki\u1EBFm ch\u1EE9c n\u0103ng' | translate\" [delay]=\"200\" [scrollHeight]=\"'400px'\"\r\n class=\"search-input\" [readonly]=\"!(menuModel && menuModel.length)\"\r\n (onSelect)=\"onSelectMenuSuggestion($event)\" field=\"label\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <div innerHTML=\"{{ item.label | highlight : searchMenuInput}}\"></div>\r\n </ng-template>\r\n </p-autoComplete>\r\n <span class=\"icon-search\"><i class=\"pi pi-search\"></i></span>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"'layout-main'\" [ngClass]=\"{'no-header': _globalService.getHeaderState() ? false : true}\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n\r\n <div class=\"layout-mask\"></div>\r\n <div #quickNoteBt *ngIf=\"!onlyShowMainContent && showQuickNote\" class=\"quick-note-button-holder\" cdkDrag\r\n cdkDragBoundary=\".layout-wrapper\" oncontextmenu=\"return false\" (cdkDragEnded)=\"quickNoteDropped($event)\"\r\n (cdkDragStarted)=\"quickNoteStarted($event)\">\r\n <a #quickNoteBt1 href=\"javascript:;\" class=\"all-note-button\" tabindex=\"0\" (click)=\"quickNoteShowAllNotes()\">\r\n <i class=\"fas fa-sticky-note\"></i></a>\r\n <a #quickNoteBt2 href=\"javascript:;\" class=\"setting-note-button\" tabindex=\"0\" (click)=\"quickNoteShowSettings()\">\r\n <i class=\"fas fa-cog\"></i></a>\r\n <a href=\"javascript:;\" (press)=\"quickNotePress($event)\" (pressup)=\"quickNotePressUp($event)\"\r\n class=\"quick-note-button\" tabindex=\"0\" (click)=\"quickNoteAddNote()\">\r\n <i class=\"fas fa-plus\"></i></a>\r\n </div>\r\n <div #pinnedNotes *ngIf=\"!onlyShowMainContent\" class=\"pinned-notes-holder\" cdkDrag cdkDragBoundary=\".layout-wrapper\"\r\n oncontextmenu=\"return false\" (cdkDragEnded)=\"pinnedNotesDropped($event)\"\r\n (cdkDragStarted)=\"pinnedNotesStarted($event)\">\r\n <div class=\"pinned-notes ui-g\" tabindex=\"0\">\r\n <div *ngIf=\"pinnedNotesMinimizeStatus\" class=\"pinned-notes-minimize-button\"\r\n (click)=\"pinnedNotesMinimize(pinnedNotesMinimizeStatus)\">\r\n <i class=\"pi pi-window-maximize\"></i>\r\n </div>\r\n <div *ngIf=\"pinnedNotesMaximizeStatus\" class=\" pinned-notes-minimize-button\"\r\n (click)=\"pinnedNotesMinimize(pinnedNotesMinimizeStatus)\">\r\n <i class=\"pi pi-window-minimize\"></i>\r\n </div>\r\n <div *ngFor=\"let note of pinnedNoteData\" class=\"pinned-note ui-g-12\">\r\n <div class=\"pinned-note-header-line\" [style.background-color]=\"note.colorCode\">\r\n </div>\r\n <div class=\"pinned-note-body\">\r\n <span class=\"pinned-note-line-title\" [style.paddingBottom]=\"note.titlePaddingBottom\">\r\n <div class=\"pinned-note-header-right\">\r\n <span class=\"pinned-note-header-time\">{{note.created | date: 'dd/MM'}}</span>\r\n <img src=\"../assets/layout/images/ico/unpin-1.ico\" class=\"pinned-note-header-button-unpin\"\r\n (click)=\"unPinNote(note)\">\r\n <i *ngIf=\"!note.isCompleted\" class=\"far fa-flag pinned-note-header-button-complete\"\r\n (click)=\"completeNote(note)\"></i>\r\n <i *ngIf=\"note.isCompleted\" class=\"fas fa-flag-checkered pinned-note-header-button-complete\"\r\n (click)=\"inCompleteNote(note)\"></i>\r\n </div>\r\n <div>{{note.name}}</div>\r\n </span>\r\n <div class=\"pinned-note-contents\" [style.display]=\"note.contentDisplay\">\r\n <span *ngFor=\"let content of note.contents\" class=\"pinned-note-line\">\r\n {{content}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <report-queue [header]=\"'Xu\u1EA5t d\u1EEF li\u1EC7u'\">\r\n </report-queue>\r\n</div>\r\n<div class=\"waiting-box\" [class.show]=\"waiting\">\r\n <div class=\"overlay\"></div>\r\n <div class=\"content-loading\">\r\n <div class=\"lds-ellipsis\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n <div class=\"message-loading\">\r\n <span *ngFor=\"let x of messageWaiting\">{{x}}</span>\r\n </div>\r\n </div>\r\n</div>\r\n<p-toast [position]=\"'top-right'\" [autoZIndex]=\"true\"></p-toast>\r\n<p-confirmDialog #cd [closable]=\"false\">\r\n <p-footer>\r\n <button #okButton type=\"button\" pButton icon=\"pi pi-check\" class=\"p-button-rounded p-button-text\" label=\"\u0110\u1ED3ng \u00FD\"\r\n (keydown.shift.tab)=\"focusTrap($event, false)\" (click)=\"cd.accept()\"></button>\r\n <button *ngIf=\"showRejectConfirm\" #cancelButton type=\"button\" pButton class=\"p-button-rounded p-button-text p-button-secondary\"\r\n icon=\"pi pi-times\" label=\"B\u1ECF qua\" (keydown.tab)=\"focusTrap($event, true)\" (click)=\"cd.reject()\"></button>\r\n </p-footer>\r\n</p-confirmDialog>\r\n<!-- <user-action-manager></user-action-manager> -->\r\n<permission-utils *ngIf=\"rootData.showPermissionUtils\"></permission-utils>\r\n",
724
724
  providers: [ComponentContextService, EntityMetadataService],
725
- styles: [".layout-menu-search-area{position:relative}.icon-search{align-items:center;background-color:transparent;box-shadow:none;color:#888;display:flex;font-size:14px;height:100%;justify-content:center;position:absolute;right:0;top:0;width:30px}.layout-menu-static-inactive .search-area{margin-left:-303px}.layout-menu-container{bottom:0;display:flex;flex-direction:column;height:auto;overflow:hidden;top:60px}.layout-menu-block{display:flex;flex:1;overflow:hidden}.layout-menu-block>tn-custom-scrollbar{width:100%}::ng-deep .layout-menu-search-area .ui-inputtext{border-color:#dadada;border-radius:0;padding-right:40px;width:calc(100% + 1px)}::ng-deep .layout-menu-search-area .ui-inputtext:not(:focus){box-shadow:none}::ng-deep .layout-menu-search-area input{border-left:0;border-radius:0;border-right:0;width:100%}::ng-deep .layout-menu-search-area .p-autocomplete-panel{max-width:100%}::ng-deep .layout-menu-search-area .p-autocomplete-item{white-space:normal}::ng-deep .layout-menu-search-area .p-autocomplete-item mark{background-color:var(--tn-primary-color);border-radius:0;color:#fff;padding:0}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;text-align:center;top:50%;transform:translate(-50%,-50%)}.waiting-box .content-loading .lds-ellipsis{display:inline-block;height:60px;position:relative;width:80px}.waiting-box .content-loading .lds-ellipsis div{-webkit-animation-timing-function:cubic-bezier(0,1,1,0);animation-timing-function:cubic-bezier(0,1,1,0);background:#fff;border-radius:50%;height:13px;position:absolute;top:33px;width:13px}.waiting-box .content-loading .lds-ellipsis div:first-child{-webkit-animation:lds-ellipsis1 .6s infinite;animation:lds-ellipsis1 .6s infinite;left:8px}.waiting-box .content-loading .lds-ellipsis div:nth-child(2){-webkit-animation:lds-ellipsis2 .6s infinite;animation:lds-ellipsis2 .6s infinite;left:8px}.waiting-box .content-loading .lds-ellipsis div:nth-child(3){-webkit-animation:lds-ellipsis2 .6s infinite;animation:lds-ellipsis2 .6s infinite;left:32px}.waiting-box .content-loading .lds-ellipsis div:nth-child(4){-webkit-animation:lds-ellipsis3 .6s infinite;animation:lds-ellipsis3 .6s infinite;left:56px}.waiting-box .message-loading{font-size:1.75em}.waiting-box .message-loading span{-webkit-animation:message-opacity 1s infinite;animation:message-opacity 1s infinite;color:#fff;margin-right:1px}.waiting-box .message-loading span:last-child{margin-right:0}.waiting-box .message-loading span:nth-child(16n+1){-webkit-animation-delay:0;-webkit-animation-delay:0s;animation-delay:0;animation-delay:0s}.waiting-box .message-loading span:nth-child(16n+2){-webkit-animation-delay:.1s;animation-delay:.1s}.waiting-box .message-loading span:nth-child(16n+3){-webkit-animation-delay:.2s;animation-delay:.2s}.waiting-box .message-loading span:nth-child(16n+4){-webkit-animation-delay:.3s;animation-delay:.3s}.waiting-box .message-loading span:nth-child(16n+5){-webkit-animation-delay:.4s;animation-delay:.4s}.waiting-box .message-loading span:nth-child(16n+6){-webkit-animation-delay:.5s;animation-delay:.5s}.waiting-box .message-loading span:nth-child(16n+7){-webkit-animation-delay:.6s;animation-delay:.6s}.waiting-box .message-loading span:nth-child(16n+8){-webkit-animation-delay:.7s;animation-delay:.7s}.waiting-box .message-loading span:nth-child(16n+9){-webkit-animation-delay:.8s;animation-delay:.8s}.waiting-box .message-loading span:nth-child(16n+10){-webkit-animation-delay:.9s;animation-delay:.9s}.waiting-box .message-loading span:nth-child(16n+11){-webkit-animation-delay:1s;animation-delay:1s}.waiting-box .message-loading span:nth-child(16n+12){-webkit-animation-delay:1.1s;animation-delay:1.1s}.waiting-box .message-loading span:nth-child(16n+13){-webkit-animation-delay:1.2s;animation-delay:1.2s}.waiting-box .message-loading span:nth-child(16n+14){-webkit-animation-delay:1.3s;animation-delay:1.3s}.waiting-box .message-loading span:nth-child(16n+15){-webkit-animation-delay:1.4s;animation-delay:1.4s}.waiting-box .message-loading span:nth-child(16n+16){-webkit-animation-delay:1.5s;animation-delay:1.5s}.waiting-box.show{display:block}@-webkit-keyframes lds-ellipsis1{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes lds-ellipsis1{0%{transform:scale(0)}to{transform:scale(1)}}@-webkit-keyframes lds-ellipsis3{0%{transform:scale(1)}to{transform:scale(0)}}@keyframes lds-ellipsis3{0%{transform:scale(1)}to{transform:scale(0)}}@-webkit-keyframes lds-ellipsis2{0%{transform:translate(0)}to{transform:translate(24px)}}@keyframes lds-ellipsis2{0%{transform:translate(0)}to{transform:translate(24px)}}@-webkit-keyframes message-opacity{0%{opacity:1}50%{opacity:.5}to{opacity:1}}@keyframes message-opacity{0%{opacity:1}50%{opacity:.5}to{opacity:1}}"]
725
+ styles: [".layout-menu-search-area{position:relative}.icon-search{align-items:center;background-color:transparent;box-shadow:none;color:#888;display:flex;font-size:14px;height:100%;justify-content:center;position:absolute;right:0;top:0;width:30px}.layout-menu-static-inactive .search-area{margin-left:-303px}.layout-menu-container{bottom:0;display:flex;flex-direction:column;height:auto;overflow:hidden;top:60px}.layout-menu-block{display:flex;flex:1;overflow:hidden}.layout-menu-block>tn-custom-scrollbar{width:100%}::ng-deep .layout-menu-search-area .ui-inputtext{border-color:#dadada;border-radius:0;padding-right:40px;width:calc(100% + 1px)}::ng-deep .layout-menu-search-area .ui-inputtext:not(:focus){box-shadow:none}::ng-deep .layout-menu-search-area input{border-left:0;border-radius:0;border-right:0;width:100%}::ng-deep .layout-menu-search-area .p-autocomplete-panel{max-width:100%}::ng-deep .layout-menu-search-area .p-autocomplete-item{white-space:normal}::ng-deep .layout-menu-search-area .p-autocomplete-item mark{background-color:var(--tn-primary-color);border-radius:0;color:#fff;padding:0}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;text-align:center;top:50%;transform:translate(-50%,-50%)}.waiting-box .content-loading .lds-ellipsis{display:inline-block;height:60px;position:relative;width:80px}.waiting-box .content-loading .lds-ellipsis div{animation-timing-function:cubic-bezier(0,1,1,0);background:#fff;border-radius:50%;height:13px;position:absolute;top:33px;width:13px}.waiting-box .content-loading .lds-ellipsis div:first-child{animation:lds-ellipsis1 .6s infinite;left:8px}.waiting-box .content-loading .lds-ellipsis div:nth-child(2){animation:lds-ellipsis2 .6s infinite;left:8px}.waiting-box .content-loading .lds-ellipsis div:nth-child(3){animation:lds-ellipsis2 .6s infinite;left:32px}.waiting-box .content-loading .lds-ellipsis div:nth-child(4){animation:lds-ellipsis3 .6s infinite;left:56px}.waiting-box .message-loading{font-size:1.75em}.waiting-box .message-loading span{animation:message-opacity 1s infinite;color:#fff;margin-right:1px}.waiting-box .message-loading span:last-child{margin-right:0}.waiting-box .message-loading span:nth-child(16n+1){animation-delay:0;animation-delay:0s}.waiting-box .message-loading span:nth-child(16n+2){animation-delay:.1s}.waiting-box .message-loading span:nth-child(16n+3){animation-delay:.2s}.waiting-box .message-loading span:nth-child(16n+4){animation-delay:.3s}.waiting-box .message-loading span:nth-child(16n+5){animation-delay:.4s}.waiting-box .message-loading span:nth-child(16n+6){animation-delay:.5s}.waiting-box .message-loading span:nth-child(16n+7){animation-delay:.6s}.waiting-box .message-loading span:nth-child(16n+8){animation-delay:.7s}.waiting-box .message-loading span:nth-child(16n+9){animation-delay:.8s}.waiting-box .message-loading span:nth-child(16n+10){animation-delay:.9s}.waiting-box .message-loading span:nth-child(16n+11){animation-delay:1s}.waiting-box .message-loading span:nth-child(16n+12){animation-delay:1.1s}.waiting-box .message-loading span:nth-child(16n+13){animation-delay:1.2s}.waiting-box .message-loading span:nth-child(16n+14){animation-delay:1.3s}.waiting-box .message-loading span:nth-child(16n+15){animation-delay:1.4s}.waiting-box .message-loading span:nth-child(16n+16){animation-delay:1.5s}.waiting-box.show{display:block}@keyframes lds-ellipsis1{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes lds-ellipsis3{0%{transform:scale(1)}to{transform:scale(0)}}@keyframes lds-ellipsis2{0%{transform:translate(0)}to{transform:translate(24px)}}@keyframes message-opacity{0%{opacity:1}50%{opacity:.5}to{opacity:1}}"]
726
726
  },] }
727
727
  ];
728
728
  CommonAppComponentComponent.ctorParameters = () => [
@@ -768,4 +768,4 @@ CommonAppComponentComponent.propDecorators = {
768
768
  allowAnonymous: [{ type: Input }],
769
769
  handleShowPopupPermissionUtils: [{ type: HostListener, args: ['document:keypress', ['$event'],] }]
770
770
  };
771
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWFwcC1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9jb21tb24tYXBwLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEosT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFTLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFDOUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFD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U0FBUyxTQUFDLG9CQUFvQjs0QkFDOUIsU0FBUyxTQUFDLFdBQVc7NEJBRXJCLEtBQUs7NkJBQ0wsS0FBSzs2Q0F5dkJMLFlBQVksU0FBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoQ29uZmlnLCBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcclxuaW1wb3J0IEhhbW1lciBmcm9tICdoYW1tZXJqcyc7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2UsIFByaW1lTkdDb25maWcgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvcmUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LW1ldGFkYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHZW5lcmljR3VhcmRDaGlsZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nZW5lcmljLWd1YXJkLWNoaWxkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHZW5lcmljR3VhcmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2VuZXJpYy1ndWFyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RvcmFnZVVwZGF0ZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS11cGRhdGVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRuQ2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RuLWNsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXBvcnRRdWV1ZUNvbXBvbmVudCB9IGZyb20gJy4uL3JlcG9ydC1xdWV1ZS9yZXBvcnQtcXVldWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICcuLi90bi1jdXN0b20tc2Nyb2xsYmFyL3RuLWN1c3RvbS1zY3JvbGxiYXIuY29tcG9uZW50JztcclxuXHJcbmRlY2xhcmUgdmFyIHRpbnltY2U6IGFueTtcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NvbW1vbi1hcHAtY29tcG9uZW50JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21tb24tYXBwLWNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbW1vbi1hcHAtY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlLCBFbnRpdHlNZXRhZGF0YVNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tb25BcHBDb21wb25lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnb2tCdXR0b24nKSBva0J1dHRvbjogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ2NhbmNlbEJ1dHRvbicpIGNhbmNlbEJ1dHRvbjogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ3F1aWNrTm90ZUJ0JykgcXVpY2tOb3RlQnQ6IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdxdWlja05vdGVCdDEnKSBxdWlja05vdGVCdDE6IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdxdWlja05vdGVCdDInKSBxdWlja05vdGVCdDI6IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdwaW5uZWROb3RlcycpIHBpbm5lZE5vdGVzOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZChSZXBvcnRRdWV1ZUNvbXBvbmVudCkgcmVwb3J0UXVldWU6IFJlcG9ydFF1ZXVlQ29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnc2Nyb2xsYmFyJykgc2Nyb2xsQmFyTWVudTogVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQ7XHJcblxyXG4gICAgQElucHV0KCkgc2hvd1F1aWNrTm90ZSA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBhbGxvd0Fub255bW91cyA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICAvLyByb290VmVyc2lvbkRlcGxveSA9ICcxLjMnO1xyXG4gICAgY3VycmVudFJvdXRlID0gJyc7XHJcbiAgICBwYWdlTG9hZGVkID0gZmFsc2U7XHJcbiAgICBmaXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xyXG4gICAgc2hvd0FkZE5vdGVGb3JtID0gZmFsc2U7XHJcbiAgICBwaW5uZWROb3RlRGF0YTogYW55O1xyXG4gICAgcGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9IGZhbHNlO1xyXG4gICAgcGlubmVkTm90ZXNNYXhpbWl6ZVN0YXR1cyA9IG51bGw7XHJcbiAgICBlbnZpcm9ubWVudDogYW55O1xyXG4gICAgY2FwdHVyZU1vZGUgPSBmYWxzZTtcclxuICAgIHAwOiBhbnk7XHJcbiAgICBwMTogYW55O1xyXG4gICAgbG9nZ2VkSW4gPSBmYWxzZTtcclxuICAgIHN1YnNjcmlibGU6IFN1YnNjcmlwdGlvbjtcclxuICAgIG9ubHlTaG93TWFpbkNvbnRlbnQgPSBmYWxzZTtcclxuXHJcbiAgICBhcHBDb2RlID0gJyc7XHJcblxyXG4gICAgc2VhcmNoTWVudVJlc3VsdDogYW55W107XHJcbiAgICBzZWFyY2hNZW51SW5wdXQ6IHN0cmluZztcclxuXHJcbiAgICBzaG93UGlubmVkTWVudSA9IGZhbHNlO1xyXG4gICAgaXNJblBpbm5lZE1lbnUgPSBmYWxzZTtcclxuICAgIGlzU2VhcmNoTWVudUlucHV0Rm9jdXMgPSBmYWxzZTtcclxuICAgIG1lbnVNb2RlbDogYW55O1xyXG4gICAgd2FpdGluZyA9IGZhbHNlO1xyXG4gICAgbWVzc2FnZVdhaXRpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgICBzaG93UmVqZWN0Q29uZmlybSA9IHRydWU7XHJcblxyXG4gICAgcmVhZG9ubHkga2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMgPSAncHBwcHBwcHBwJztcclxuICAgIGN1cnJlbnRLZXlQcmVzc0luZGV4ID0gMDtcclxuICAgIHJvb3REYXRhOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIF9nbG9iYWxTZXJ2aWNlOiBHbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9vYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9hdXRoZW5TZXJ2aWNlOiBBdXRoZW5TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIF90aXRsZTogVGl0bGUsXHJcbiAgICAgICAgcHJpdmF0ZSBfc2lnbmFsUlNlcnZpY2U6IFNpZ25hbFJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3N0b3JhZ2VVcGRhdGVkU2VydmljZTogU3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2N1c3RvbVJvdXRlU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9hcHBsaWNhdGlvbkNvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIF9jb21wb25lbnRDb250ZXh0U2VydmljZTogQ29tcG9uZW50Q29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgX3RuQ2xpZW50U2VydmljZTogVG5DbGllbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvcmVDb25maWdTZXJ2aWNlOiBDb3JlQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2VudGl0eU1ldGFkYXRhU2VydmljZTogRW50aXR5TWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfY29uZmlybVNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3ByaW1lbmdDb25maWc6IFByaW1lTkdDb25maWcsXHJcbiAgICAgICAgcHJpdmF0ZSBfc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcclxuICAgICAgICB0aGlzLmFwcENvZGUgPSAod2luZG93IGFzIGFueSkuYXBwQ29kZSB8fCB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcENvZGU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmtleVByZXNzUGVybWlzc2lvblV0aWxzKSB7XHJcbiAgICAgICAgICAgIHRoaXMua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMgPSB0aGlzLmVudmlyb25tZW50LmtleVByZXNzUGVybWlzc2lvblV0aWxzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuc3RvcmFnZSA9PT0gJ3Nlc3Npb25TdG9yYWdlJykge1xyXG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRTdG9yYWdlKHNlc3Npb25TdG9yYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRTdG9yYWdlKGxvY2FsU3RvcmFnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wcmltZW5nQ29uZmlnLnNldFRyYW5zbGF0aW9uKHtcclxuICAgICAgICAgICAgZGF5TmFtZXM6IFsnQ2jhu6cgbmjhuq10JywgJ1Ro4bupIDInLCAnVGjhu6kgMycsICdUaOG7qSA0JywgJ1Ro4bupIDUnLCAnVGjhu6kgNicsICdUaOG7qSA3J10sXHJcbiAgICAgICAgICAgIGRheU5hbWVzU2hvcnQ6IFsnQ04nLCAnVGgyJywgJ1RoMycsICdUaDQnLCAnVGg1JywgJ1RoNicsICdUaDcnXSxcclxuICAgICAgICAgICAgZGF5TmFtZXNNaW46IFsnQ04nLCAnVGgyJywgJ1RoMycsICdUaDQnLCAnVGg1JywgJ1RoNicsICdUaDcnXSxcclxuICAgICAgICAgICAgbW9udGhOYW1lczogW1xyXG4gICAgICAgICAgICAgICAgJ1Row6FuZyAxJywgJ1Row6FuZyAyJywgJ1Row6FuZyAzJywgJ1Row6FuZyA0JywgJ1Row6FuZyA1JywgJ1Row6FuZyA2JywgJ1Row6FuZyA3JywgJ1Row6FuZyA4JywgJ1Row6FuZyA5JywgJ1Row6FuZyAxMCcsICdUaMOhbmcgMTEnLCAnVGjDoW5nIDEyJ1xyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBtb250aE5hbWVzU2hvcnQ6IFsnVDEnLCAnVDInLCAnVDMnLCAnVDQnLCAnVDUnLCAnVDYnLCAnVDcnLCAnVDgnLCAnVDknLCAnVDEwJywgJ1QxMScsICdUMTInXSxcclxuICAgICAgICAgICAgdG9kYXk6ICdIw7RtIG5heScsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIHRoaXMuX25vdGlmaWVyU2VydmljZS5zZXRTZXJ2aWNlKHtcclxuICAgICAgICAvLyAgICAgZW52OiB0aGlzLmVudmlyb25tZW50LFxyXG4gICAgICAgIC8vICAgICB0cmFuc2xhdGVTZXJ2aWNlOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgIC8vICAgICBtZXNzYWdlU2VydmljZTogX21lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIC8vICAgICBjb25maXJtU2VydmljZTogX2NvbmZpcm1TZXJ2aWNlXHJcbiAgICAgICAgLy8gfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5hZGRSb290Q29udGV4dChcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgICAgIF9hY3RpdmF0ZWRSb3V0ZSxcclxuXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGl0bGUuc2V0VGl0bGUodGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5tYWluLnRpdGxlKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ3ZuJyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKCd2bicpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRUaW55TWNlKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNmZyA9IHRoaXMuZ2V0Q29uZmlnQXV0aGVuKCk7XHJcbiAgICAgICAgLy8gQ2h1eeG7g24gc2FuZyBzZXNzaW9uIHN0b3JhZ2UsIG7hur91IOG7lW4gdGjDrCB4w7NhIGTDsm5nIG7DoHkgxJFpXHJcbiAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLnNldFN0b3JhZ2UodGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0U3RvcmFnZSgpKTtcclxuICAgICAgICB0aGlzLmluamVjdENvbmZpZyhjZmcpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZpZ3VyZVdpdGhOZXdDb25maWdBcGkoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZSA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldE9iamVjdEFueSgncGVyc29uYWxpemUnKTtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUpIHsgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZSA9IHt9OyB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnJlcGxheVN1YnNjcmliZShcclxuICAgICAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQsXHJcbiAgICAgICAgICAgIHJzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5zZXR1cFN5bmNDYWNoZUVudGl0eU1ldGFkYXRhKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLmNvbmZpZ1xyXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKHJvdXRlID0+IHRoaXMuYWRkR3VhcmQocm91dGUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maXJzdFRpbWVMb2dpbikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGzhuqduIMSR4bqndSDEkcSDbmcgbmjhuq1wIHRow6wgdsOgbyB0cmFuZyBt4bq3YyDEkeG7i25oXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMucm9vdFZlcnNpb25EZXBsb3kpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgndmVyc2lvbkRlcGxveScsIHRoaXMucm9vdFZlcnNpb25EZXBsb3kpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGjDqm0gdsOgbyDEkeG7gyDEkcOhbmggZOG6pXUgbOG6p24gZOG6p3UgbG9naW4gPT4gxJHhu4MgeOG7rSBsw71cclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2VyQSDEkWFnIOG7nyBtw6BuIGjDrG5oIDEgPT4gxJHEg25nIHh14bqldCA9PiDEkcSDbmcgbmjhuq1wIHbDoG8gdMOgaSBraG/huqNuIFVzZXJCIGtow7RuZyBjw7MgcXV54buBbiBtw6BuIGjDrG5oIDEgPT4gcmVkaXJlY3QgduG7gSBcIi9cIlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRfdXNlcl9pbmZvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnZmlyc3RUaW1lTG9naW4nLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRVcmwgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdjdXJyZW50VXJsJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRVcmwgJiYgb2xkVXJsICE9IHRvcC5sb2NhdGlvbi5ocmVmICsgJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudFVybCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IGAke29sZFVybH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50VXJsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0UmVkaXJlY3QoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgdmVyc2lvbkRlcGxveSA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3ZlcnNpb25EZXBsb3knKTtcclxuICAgICAgICAgICAgICAgIC8vIGxldCB2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uID0gdGhpcy5yb290VmVyc2lvbkRlcGxveTtcclxuICAgICAgICAgICAgICAgIC8vIGlmICh2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uICYmIHZlcnNpb25EZXBsb3kgJiYgKCt2ZXJzaW9uRGVwbG95KSA8ICgrdmVyc2lvbkZyb21BcHBsaWNhdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCd2ZXJzaW9uRGVwbG95JywgdmVyc2lvbkZyb21BcHBsaWNhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLmluaXQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2Uuc3RhcnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lzdGVuY3lIdWInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Jyb2FkY2FzdE1lc3NhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckF1dGhvcml6ZUNhY2hlLmJpbmQodGhpcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnN0YXJ0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vdGlmaWNhdGlvbkh1YicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVmcmVzaEZvclVwZGF0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5hcHBDb2RlcyAmJiBkYXRhLmFwcENvZGVzLnNvbWUoeCA9PiB4LnRvVXBwZXJDYXNlKCkgPT0gdGhpcy5hcHBDb2RlLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLkZPUkNFX1JFTE9BRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRNb2R1bGVQYWdlcyA9IHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUuZGVmYXVsdE1vZHVsZVBhZ2VzO1xyXG4gICAgICAgIGlmIChkZWZhdWx0TW9kdWxlUGFnZXMgJiYgZGVmYXVsdE1vZHVsZVBhZ2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZvckVhY2gobSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gZGVmYXVsdE1vZHVsZVBhZ2VzLmZpbmQocCA9PiBwLmNvZGUgPT0gbS5jb2RlKTtcclxuICAgICAgICAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UuZGVmYXVsdFBhZ2UpIHsgbS51cmwgPSBwYWdlLmRlZmF1bHRQYWdlOyB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgSGFtbWVyLmRlZmF1bHRzLmNzc1Byb3BzLnVzZXJTZWxlY3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ1FVSUNLX05PVEVfUE9QVVAuQ0xPU0VfUE9QVVAnLCByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZWRpdEZvcm1Nb2RlbC5zaG93UXVpY2tOb3RlRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ0dPX0hPTUUnLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKTtcclxuICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdUT0dHTEVfTEFZT1VUJywgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZGF0YSkgeyBkYXRhID0ge307IH1cclxuICAgICAgICAgICAgaWYgKGRhdGEub25seVNob3dNYWluQ29udGVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSBkYXRhLm9ubHlTaG93TWFpbkNvbnRlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdNQUlOX0NPTlRFTlRfT05MWScsIHJzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gcnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5TSE9XX1JFSkVDVF9DT05GSVJNLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVqZWN0Q29uZmlybSA9IGRhdGE7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIHRoaXMucm9vdERhdGEgPSByb290LmRhdGE7XHJcbiAgICAgICAgcm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YSA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZmluZCh4ID0+IHguY29kZS50b0xvd2VyQ2FzZSgpID09IHRoaXMuYXBwQ29kZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICByb290LmRhdGEuYXBwT3JpZ2luID0gdGhpcy5lbnZpcm9ubWVudC5lbmFibGVCYXNlSHJlZiA/IGAvJHtyb290LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLmNvZGUudG9Mb3dlckNhc2UoKX0vYCA6ICcvJztcclxuICAgICAgICByb290LmRhdGEuYWxsb3dBbm9ueW1vdXMgPSB0aGlzLmFsbG93QW5vbnltb3VzO1xyXG4gICAgICAgIC8vIGdldCBjdXJyZW50IFVzZXJcclxuICAgICAgICB0aGlzLl91c2VyU2VydmljZS5wb3B1bGF0ZUN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0FSUk9XTEVGVCwgKGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0FSUk9XUklHSFQsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuUEVSU09OQUxJWkVfVVBEQVRFRCwgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuc2hvd1F1aWNrTm90ZUJ1dHRvbk9uU2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBzZW5kIGN1cnJlbnQgdmVyc2lvbiB0byB0biBjbGllbnRcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fdG5DbGllbnRTZXJ2aWNlLnNlbmRDb21tYW5kKDxUbkNsaWVudENvbW1hbmQ+e1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLlN5bmNWZXJpb25UbkNsaWVudCxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLmVudmlyb25tZW50LnNpZ25hbHIudmVyc2lvbixcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludDogdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW4uYXBwRG9tYWluICsgJy8nICsgdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLmVuZHBvaW50VXBkYXRlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAga2V5OiB0aGlzLmVudmlyb25tZW50LnNpZ25hbHIuY2xpZW50S2V5XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG5cclxuXHJcbiAgICAgICAgLy8gdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5DT01NT04uQ0xPU0VfRURJVF9GT1JNLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNob3dBZGROb3RlRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5yZXBsYXlTdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuUVVJQ0tfTk9URV9QSU4sICgpID0+IHtcclxuICAgICAgICAgICAgLy8gc2V0IHBpbm5lZCBub3RlIGxvY2F0aW9uIGFmdGVyIGNsaWNrIHBpblxyXG4gICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSByZWN0LmhlaWdodCksIGxlZnQ6IChyZWN0LmxlZnQpLCBtaW5pbWl6ZTogdGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGlubmVkTm90ZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5yZXBsYXlTdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuUVVJQ0tfTk9URV9VTlBJTiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBzZXQgcGlubmVkIG5vdGUgbG9jYXRpb24gYWZ0ZXIgY2xpY2sgdXBwaW5cclxuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdwaW5uZWROb3Rlc0xvY2F0aW9uJywge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLCBsZWZ0OiAocmVjdC5sZWZ0KSwgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsID0gW107XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSBjaGFuZ2UgZW50aXR5IG1ldGFkYXRhXHJcbiAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLnN1YnNjcmliZUNoYW5nZWRMb2NhbFN0b3JhZ2UoJ0tFWV9FTlRJVFlfTUVUREFUQV9VUERBVEVEJywgKHJzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlbnRpdHkgbWV0YWRhdGEgY2hhbmdlZCcsIHJzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gdHJpZ2dlciB1cGRhdGUgc3RvcmFnZSBrZXlcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19XQUlUX0JPWCwgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2FpdGluZyA9IGRhdGEuc2hvdztcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlV2FpdGluZyA9IFsuLi5kYXRhLm1lc3NhZ2VdO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9vdERhdGEuaHR0cFJlcXVlc3RMaXN0ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gbuG6v3UgYWxsb3cgYW5vbnltb3VzIHRow6wgbG9hZCByYSBjw6FjIHBow6JuIGjhu4cgY2hvIHBow6lwIHbDoG8ga2jDtG5nIGPhuqduIMSRxINuZyBuaOG6rXBcclxuICAgICAgICBpZiAodGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByb290LnN1YnNjcmliZSgnTE9HSU4nLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuX2NkLmRldGFjaCgpO1xyXG4gICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBxdWlja05vdGVCdExvY2F0aW9uID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0T2JqZWN0QW55KCdxdWlja05vdGVCdExvY2F0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChxdWlja05vdGVCdExvY2F0aW9uICYmIHRoaXMucXVpY2tOb3RlQnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWlja05vdGVCdExvY2F0aW9uLmJvdHRvbSA8IHdpbmRvdy5pbm5lckhlaWdodCAtIDUwICYmIHF1aWNrTm90ZUJ0TG9jYXRpb24ucmlnaHQgPCB3aW5kb3cuaW5uZXJXaWR0aCAtIDUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmJvdHRvbSA9IHF1aWNrTm90ZUJ0TG9jYXRpb24uYm90dG9tICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSBxdWlja05vdGVCdExvY2F0aW9uLnJpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWlja05vdGVCdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUuc2hvd1F1aWNrTm90ZUJ1dHRvbk9uU2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGlubmVkTm90ZXNMb2NhdGlvbiA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldE9iamVjdEFueSgncGlubmVkTm90ZXNMb2NhdGlvbicpO1xyXG4gICAgICAgICAgICBpZiAocGlubmVkTm90ZXNMb2NhdGlvbiAmJiB0aGlzLnBpbm5lZE5vdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBpbm5lZE5vdGVzTG9jYXRpb24uYm90dG9tIDwgd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5oZWlnaHQgJiYgcGlubmVkTm90ZXNMb2NhdGlvbi5sZWZ0IDwgd2luZG93LmlubmVyV2lkdGggLSAyNTApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuc3R5bGUuYm90dG9tID0gcGlubmVkTm90ZXNMb2NhdGlvbi5ib3R0b20gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gcGlubmVkTm90ZXNMb2NhdGlvbi5sZWZ0ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPSBwaW5uZWROb3Rlc0xvY2F0aW9uLm1pbmltaXplO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLnRpdGxlUGFkZGluZ0JvdHRvbSA9ICcwcHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLmNvbnRlbnREaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLnRpdGxlUGFkZGluZ0JvdHRvbSA9ICc2cHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLmNvbnRlbnREaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBpbm5lZE5vdGVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDAwKTtcclxuXHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIHJvb3QucmVwb3J0UXVldWUgPSB0aGlzLnJlcG9ydFF1ZXVlO1xyXG4gICAgICAgIHRoaXMubWVudU1vZGVsID0gdGhpcy5fbWVudVNlcnZpY2UuZ2V0TWVudUl0ZW1zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVmYXVsdFJlZGlyZWN0KCkge1xyXG4gICAgICAgIC8vIGNoZWNrIGRlZmF1bHQgcmVkaXJlY3RcclxuICAgICAgICBpZiAodGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhcHBTZXR0aW5nID0gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGE7XHJcbiAgICAgICAgICAgIGlmICghYXBwU2V0dGluZyAmJiB0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpbi5kZWZhdWx0UmVkaXJlY3QgJiYgdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluLmRlZmF1bHRSZWRpcmVjdFxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwYXRoVG9DaGVjayA9IHRoaXMuZW52aXJvbm1lbnQuZW5hYmxlQmFzZUhyZWYgPyBgLyR7YXBwU2V0dGluZy5jb2RlLnRvTG93ZXJDYXNlKCl9L2AgOiAnLyc7XHJcblxyXG4gICAgICAgICAgICBpZiAoKGxvY2F0aW9uLnBhdGhuYW1lID09PSAnLycgfHwgbG9jYXRpb24ucGF0aG5hbWUgPT09ICcnIHx8IGxvY2F0aW9uLnBhdGhuYW1lID09PSBwYXRoVG9DaGVjaykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1c2VyIG5vdCB2YWxpZCB0b2tlbicsIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2FjY2Vzc190b2tlbicpKTtcclxuICAgICAgICAgICAgLy8gVE9ETzogTmFtTkggWOG7rSBsw70gdOG6oW0gY2hvIHRyxrDhu51uZyBo4bujcCDEkcSDbmcgbmjhuq1wIGzhuqduIMSR4bqndSBuaMawbmcgY2jhuqF5IMSR4bq/biDEkcOieSBtw6AgYWNjZXNzIHRva2VuIHbhuqtuIGtow7RuZyBo4bujcCBs4buHXHJcbiAgICAgICAgICAgIC8vIFjhu60gbMO9IHRyaeG7h3QgxJHhu4MgYuG6sW5nIGPDoWNoIHTDrG0gUEEgYuG6r3QgZXZlbnQgY+G7p2EgYW5ndWxhcjIgb2lkYyDEkeG7gyB44butIGzDvSB0csaw4bubYyBraGkgxJHhur9uIGLGsOG7m2MgZGVmYXVsdCByZWRpcmVjdFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRldGVjdENoYW5nZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NkWydkZXN0cm95ZWQnXSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2V4Y2VwdGlvbiBvbiBkZXRlY3QgY2hhbmdlJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhckF1dGhvcml6ZUNhY2hlKCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHNlc3Npb25TdG9yYWdlKVxyXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gL15BVVRIT1JJWkFUSU9OLy50ZXN0KGl0ZW0pKVxyXG4gICAgICAgICAgICAuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzVHJhcChldmVudCwgZGlyZWN0KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBpZiAoZGlyZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFRpbnlNY2UoKSB7XHJcbiAgICAgICAgdGlueW1jZS5iYXNlVVJMID0gJy9hc3NldHMvdmVuZG9yL3RpbnltY2UnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29uZmlndXJlV2l0aE5ld0NvbmZpZ0FwaSgpIHtcclxuICAgICAgICAvLyBmb3IgZmlyc3QgbG9naW5cclxuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuZXZlbnRzLnN1YnNjcmliZShldnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBldnQudHlwZSA9PSAndG9rZW5fcmVjZWl2ZWQnXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBMb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cFNlc3Npb25TdG9yYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlVXBkYXRlZFNlcnZpY2UuY2xlYW51cFN0b3JhZ2VTZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlUmVwbGF5RXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9SRUFEWSxcclxuICAgICAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQudHlwZSA9PT0gJ3Rva2VuX2V4cGlyZXMnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UudHJ5TG9naW4oKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQudHlwZSA9PT0gJ2xvZ291dCcpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNsZWFudXAgc3RvcmFnZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBTZXNzaW9uU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLmNsZWFudXBTdG9yYWdlU2VydmljZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLnJldm9rZVRva2VuQW5kTG9nb3V0KG51bGwsIHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC50eXBlID09ICdzZXNzaW9uX3Rlcm1pbmF0ZWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50X3VzZXJfaW5mbycpO1xyXG4gICAgICAgICAgICAgICAgLy8gbG9nb3V0XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC50eXBlID09ICdkaXNjb3ZlcnlfZG9jdW1lbnRfbG9hZGVkJykge1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC50eXBlID09ICd0b2tlbl9yZWZyZXNoZWQnKSB7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbG9naW4gZXZlbnQnLCBldnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnQoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZVJlcGxheUV2ZW50KFxyXG4gICAgICAgICAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9SRUFEWSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5zZXR1cEF1dG9tYXRpY1NpbGVudFJlZnJlc2goKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2N1cnJlbnRVcmwnKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnY3VycmVudFVybCcsIHRvcC5sb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdOG7lW5nIGjhu6NwIGJp4bq/biBwb3NpdGlvblxyXG4gICAgICAgIGlmICh0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdteWl0ZW0nKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoJ1BPU0lUSU9OX0xPQURFRCcsIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ215aXRlbScpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBn4buNaSBhcGkgxJHhu4MgdOG7lW5nIGjhu6NwIGThu68gbGl1ZWplLi4uXHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudCgnUE9TSVRJT05fTE9BREVEJywge30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluamVjdENvbmZpZyhjZmc6IEF1dGhDb25maWcpIHtcclxuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuY29uZmlndXJlKGNmZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb25maWdBdXRoZW4oKSB7XHJcbiAgICAgICAgY29uc3QgY2ZnID0gdGhpcy5fY29yZUNvbmZpZ1NlcnZpY2UuZ2V0QXV0aENvbmZpZygpO1xyXG4gICAgICAgIGNvbnN0IHR5cGVMb2dpbiA9IHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5hdXRoZW5UeXBlO1xyXG4gICAgICAgIGlmICh0eXBlTG9naW4gJiYgdHlwZUxvZ2luLmluY2x1ZGVzKCdpbXBsaWNpdCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjZmc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2ZnLnJlc3BvbnNlVHlwZSA9ICdjb2RlJztcclxuICAgICAgICAgICAgcmV0dXJuIGNmZztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlTWVudUFjdGl2ZSh0b3ApIHtcclxuICAgICAgICB0aGlzLnNjcm9sbEJhck1lbnUuc2Nyb2xsVG9Ub3AodG9wKTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVEcm9wcGVkKGV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdxdWlja05vdGVCdExvY2F0aW9uJywgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBib3R0b206ICh3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCAtIDUwKSwgcmlnaHQ6ICh3aW5kb3cuaW5uZXJXaWR0aCAtIHJlY3QubGVmdCAtIDUwKVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVN0YXJ0ZWQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZU1vdmluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlUHJlc3MoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZVByZXNzaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnModHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlT25jZShDb21DdHhDb25zdGFudHMuUk9PVC5CT0RZX01PVVNFX0RPV04sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVQcmVzc1VwKGV2ZW50KSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlUHJlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZUFkZE5vdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZU1vdmluZyAmJlxyXG4gICAgICAgICAgICAhdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVQcmVzc2luZykge1xyXG4gICAgICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLm5vdGVEYXRhTW9kZWwgPSA8YW55PntcclxuICAgICAgICAgICAgICAgIGVkaXRGb3JtTW9kZWw6IDxhbnk+eyBzaG93UXVpY2tOb3RlRm9ybTogdHJ1ZSwgcG9wdXBTaXplOiA8YW55Pnt9LCBkYXRhOiA8YW55Pnt9IH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsLnNob3dRdWlja05vdGVGb3JtID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlU2hvd0FsbE5vdGVzKCkge1xyXG4gICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhmYWxzZSk7XHJcbiAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSBgJHt0aGlzLmdldEFwcFN3aXRjaGVyVXJsKCd1c2VyJyl9L21haW4vcXVpY2stbm90ZWA7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlU2hvd1NldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhmYWxzZSk7XHJcbiAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSBgJHt0aGlzLmdldEFwcFN3aXRjaGVyVXJsKCd1c2VyJyl9L21haW4vcGVyc29uYWxpemVgO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoc2hvdykge1xyXG4gICAgICAgIGlmIChzaG93KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQxLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNTVweCc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Mi5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzEwMHB4JztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQxLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNjVweCc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Mi5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzEyMHB4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQxLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNXB4JztcclxuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICc1cHgnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBQaW5uZWQgTm90ZVxyXG4gICAgZ2V0UGlubmVkTm90ZXMoKSB7XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwaW5uZWROb3Rlc0Ryb3BwZWQoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLCBsZWZ0OiAocmVjdC5sZWZ0KSwgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucGlubmVkTm90ZXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHBpbm5lZE5vdGVzU3RhcnRlZChldmVudCkge1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucGlubmVkTm90ZXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBpbm5lZE5vdGVzTWluaW1pemUoZGF0YTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9ICFkYXRhO1xyXG5cclxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLCBsZWZ0OiAocmVjdC5sZWZ0KSwgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9PSB0cnVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnMHB4JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLnRpdGxlUGFkZGluZ0JvdHRvbSA9ICc2cHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5QaW5Ob3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHJvd0RhdGEuaXNQaW5uZWQgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY29tcGxldGVOb3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHJvd0RhdGEuaXNDb21wbGV0ZWQgPSB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpbkNvbXBsZXRlTm90ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICByb3dEYXRhLmlzQ29tcGxldGVkID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlVGFiV2luZG93KCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjbG9zZVRhYldpbmRvdycpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFwcFN3aXRjaGVyVXJsKGFwcENvZGUpIHtcclxuICAgICAgICBjb25zdCBhcHAgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZpbmQoeCA9PiB4LmNvZGUudG9Mb3dlckNhc2UoKSA9PSBhcHBDb2RlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIGlmIChhcHApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFwcC51cmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHVzZS1saWZlLWN5Y2xlLWludGVyZmFjZVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoKTtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5ERVNUUk9ZX1RBU0tfREVUQUlMX0NPTVBPTkVOVCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2VhcmNoIG1lbnVcclxuICAgIG9uU2VhcmNoTWVudShldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTWVudVJlc3VsdCA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5xdWVyeSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaE1lbnVSZXN1bHQgPSB0aGlzLmdldFNlYXJjaE1lbnVSZXN1bHQoZXZlbnQucXVlcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnJlZ3JvdXBTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQsIHRoaXMubWVudU1vZGVsLCByZXN1bHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVncm91cFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZDogc3RyaW5nLCBsaXN0VG9HZXQ6IGFueVtdLCBsaXN0VG9QdXNoOiBhbnlbXSkge1xyXG4gICAgICAgIGxpc3RUb0dldC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWdyb3VwU2VhcmNoTWVudVJlc3VsdChrZXl3b3JkLCBpdGVtLml0ZW1zLCBsaXN0VG9QdXNoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGl0ZW0ubGFiZWwpLmluZGV4T2YodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGtleXdvcmQpKSA+PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgbGlzdFRvUHVzaC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5vbkFjY2VudFZpZXRuYW1lc2Uoc3RyKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgLy8gICAgIFdlIGNhbiBhbHNvIHVzZSB0aGlzIGluc3RlYWQgb2YgZnJvbSBsaW5lIDExIHRvIGxpbmUgMTdcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRTB8XFx1MDBFMXxcXHUxRUExfFxcdTFFQTN8XFx1MDBFM3xcXHUwMEUyfFxcdTFFQTd8XFx1MUVBNXxcXHUxRUFEfFxcdTFFQTl8XFx1MUVBQnxcXHUwMTAzfFxcdTFFQjF8XFx1MUVBRnxcXHUxRUI3fFxcdTFFQjN8XFx1MUVCNS9nLCBcImFcIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEU4fFxcdTAwRTl8XFx1MUVCOXxcXHUxRUJCfFxcdTFFQkR8XFx1MDBFQXxcXHUxRUMxfFxcdTFFQkZ8XFx1MUVDN3xcXHUxRUMzfFxcdTFFQzUvZywgXCJlXCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBFQ3xcXHUwMEVEfFxcdTFFQ0J8XFx1MUVDOXxcXHUwMTI5L2csIFwiaVwiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRjJ8XFx1MDBGM3xcXHUxRUNEfFxcdTFFQ0Z8XFx1MDBGNXxcXHUwMEY0fFxcdTFFRDN8XFx1MUVEMXxcXHUxRUQ5fFxcdTFFRDV8XFx1MUVEN3xcXHUwMUExfFxcdTFFRER8XFx1MUVEQnxcXHUxRUUzfFxcdTFFREZ8XFx1MUVFMS9nLCBcIm9cIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEY5fFxcdTAwRkF8XFx1MUVFNXxcXHUxRUU3fFxcdTAxNjl8XFx1MDFCMHxcXHUxRUVCfFxcdTFFRTl8XFx1MUVGMXxcXHUxRUVEfFxcdTFFRUYvZywgXCJ1XCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MUVGM3xcXHUwMEZEfFxcdTFFRjV8XFx1MUVGN3xcXHUxRUY5L2csIFwieVwiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAxMTEvZywgXCJkXCIpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DoHzDoXzhuqF84bqjfMOjfMOifOG6p3zhuqV84bqtfOG6qXzhuqt8xIN84bqxfOG6r3zhurd84bqzfOG6tS9nLCAnYScpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DqHzDqXzhurl84bq7fOG6vXzDqnzhu4F84bq/fOG7h3zhu4N84buFL2csICdlJyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8OsfMOtfOG7i3zhu4l8xKkvZywgJ2knKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7J8w7N84buNfOG7j3zDtXzDtHzhu5N84buRfOG7mXzhu5V84buXfMahfOG7nXzhu5t84bujfOG7n3zhu6EvZywgJ28nKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7l8w7p84bulfOG7p3zFqXzGsHzhu6t84bupfOG7sXzhu6184buvL2csICd1Jyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL+G7s3zDvXzhu7V84bu3fOG7uS9nLCAneScpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/EkS9nLCAnZCcpO1xyXG4gICAgICAgIC8vIFNvbWUgc3lzdGVtIGVuY29kZSB2aWV0bmFtZXNlIGNvbWJpbmluZyBhY2NlbnQgYXMgaW5kaXZpZHVhbCB1dGYtOCBjaGFyYWN0ZXJzXHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAzMDB8XFx1MDMwMXxcXHUwMzAzfFxcdTAzMDl8XFx1MDMyMy9nLCAnJyk7IC8vIEh1eeG7gW4gc+G6r2MgaOG7j2kgbmfDoyBu4bq3bmdcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDJDNnxcXHUwMzA2fFxcdTAzMUIvZywgJycpOyAvLyDDgiwgw4osIMSCLCDGoCwgxq9cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0TWVudVN1Z2dlc3Rpb24obWVudUl0ZW1PYmopIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChtZW51SXRlbU9iai5yb3V0ZXJMaW5rKTtcclxuICAgICAgICB0aGlzLnNlYXJjaE1lbnVJbnB1dCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnNob3dQaW5uZWRNZW51ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVyU2VhcmNoTWVudUlucHV0KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5pc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJblBpbm5lZE1lbnUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZW51SW5wdXQgPSAnJztcclxuICAgICAgICB0aGlzLnNob3dQaW5uZWRNZW51ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb2N1c1NlYXJjaE1lbnVJbnB1dChldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXNTZWFyY2hNZW51SW5wdXRGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5cHJlc3MnLCBbJyRldmVudCddKVxyXG4gICAgaGFuZGxlU2hvd1BvcHVwUGVybWlzc2lvblV0aWxzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHNbdGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleF0gPT09IGV2ZW50LmtleSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCA9PSB0aGlzLmtleVByZXNzUGVybWlzc2lvblV0aWxzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb290RGF0YS5zaG93UGVybWlzc2lvblV0aWxzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRHdWFyZChyb3V0ZTogUm91dGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAocm91dGUucGF0aCA9PT0gJycgfHwgcm91dGUucGF0aCA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyb3V0ZS5sb2FkQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgPSByb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkID8gcm91dGUuY2FuQWN0aXZhdGVDaGlsZCA6IFtHZW5lcmljR3VhcmRDaGlsZFNlcnZpY2VdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcm91dGUuY2FuQWN0aXZhdGUgPSByb3V0ZS5jYW5BY3RpdmF0ZSA/IHJvdXRlLmNhbkFjdGl2YXRlIDogW0dlbmVyaWNHdWFyZFNlcnZpY2VdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
771
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWFwcC1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9jb21tb24tYXBwLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEosT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFTLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEtBQUssTUFBTSxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLGdDQUFnQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FB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QUN2QixTQUFTLFNBQUMsb0JBQW9COzRCQUM5QixTQUFTLFNBQUMsV0FBVzs0QkFFckIsS0FBSzs2QkFDTCxLQUFLOzZDQXl2QkwsWUFBWSxTQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEF1dGhDb25maWcsIE9BdXRoU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xyXG5pbXBvcnQgKiBhcyBIYW1tZXIgZnJvbSAnaGFtbWVyanMnO1xyXG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlLCBQcmltZU5HQ29uZmlnIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2FwcGxpY2F0aW9uLWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBDb21tYW5kVHlwZSwgVG5DbGllbnRDb21tYW5kIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RuLWNsaWVudC1jb21tYW5kJztcclxuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb3JlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJpY0d1YXJkQ2hpbGRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2VuZXJpYy1ndWFyZC1jaGlsZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJpY0d1YXJkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dlbmVyaWMtZ3VhcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaWduYWxSU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NpZ25hbHIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VVcGRhdGVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2UtdXBkYXRlZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUbkNsaWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90bi1jbGllbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0UXVldWVDb21wb25lbnQgfSBmcm9tICcuLi9yZXBvcnQtcXVldWUvcmVwb3J0LXF1ZXVlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vdG4tY3VzdG9tLXNjcm9sbGJhci90bi1jdXN0b20tc2Nyb2xsYmFyLmNvbXBvbmVudCc7XHJcblxyXG5kZWNsYXJlIHZhciB0aW55bWNlOiBhbnk7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjb21tb24tYXBwLWNvbXBvbmVudCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbW9uLWFwcC1jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb21tb24tYXBwLWNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZSwgRW50aXR5TWV0YWRhdGFTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uQXBwQ29tcG9uZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ29rQnV0dG9uJykgb2tCdXR0b246IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdjYW5jZWxCdXR0b24nKSBjYW5jZWxCdXR0b246IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdxdWlja05vdGVCdCcpIHF1aWNrTm90ZUJ0OiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncXVpY2tOb3RlQnQxJykgcXVpY2tOb3RlQnQxOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncXVpY2tOb3RlQnQyJykgcXVpY2tOb3RlQnQyOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncGlubmVkTm90ZXMnKSBwaW5uZWROb3RlczogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoUmVwb3J0UXVldWVDb21wb25lbnQpIHJlcG9ydFF1ZXVlOiBSZXBvcnRRdWV1ZUNvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbGJhcicpIHNjcm9sbEJhck1lbnU6IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50O1xyXG5cclxuICAgIEBJbnB1dCgpIHNob3dRdWlja05vdGUgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgYWxsb3dBbm9ueW1vdXMgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgLy8gcm9vdFZlcnNpb25EZXBsb3kgPSAnMS4zJztcclxuICAgIGN1cnJlbnRSb3V0ZSA9ICcnO1xyXG4gICAgcGFnZUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgZmlyc3RUaW1lTG9naW4gPSBmYWxzZTtcclxuICAgIHNob3dBZGROb3RlRm9ybSA9IGZhbHNlO1xyXG4gICAgcGlubmVkTm90ZURhdGE6IGFueTtcclxuICAgIHBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPSBmYWxzZTtcclxuICAgIHBpbm5lZE5vdGVzTWF4aW1pemVTdGF0dXMgPSBudWxsO1xyXG4gICAgZW52aXJvbm1lbnQ6IGFueTtcclxuICAgIGNhcHR1cmVNb2RlID0gZmFsc2U7XHJcbiAgICBwMDogYW55O1xyXG4gICAgcDE6IGFueTtcclxuICAgIGxvZ2dlZEluID0gZmFsc2U7XHJcbiAgICBzdWJzY3JpYmxlOiBTdWJzY3JpcHRpb247XHJcbiAgICBvbmx5U2hvd01haW5Db250ZW50ID0gZmFsc2U7XHJcblxyXG4gICAgYXBwQ29kZSA9ICcnO1xyXG5cclxuICAgIHNlYXJjaE1lbnVSZXN1bHQ6IGFueVtdO1xyXG4gICAgc2VhcmNoTWVudUlucHV0OiBzdHJpbmc7XHJcblxyXG4gICAgc2hvd1Bpbm5lZE1lbnUgPSBmYWxzZTtcclxuICAgIGlzSW5QaW5uZWRNZW51ID0gZmFsc2U7XHJcbiAgICBpc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gZmFsc2U7XHJcbiAgICBtZW51TW9kZWw6IGFueTtcclxuICAgIHdhaXRpbmcgPSBmYWxzZTtcclxuICAgIG1lc3NhZ2VXYWl0aW5nOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgc2hvd1JlamVjdENvbmZpcm0gPSB0cnVlO1xyXG5cclxuICAgIHJlYWRvbmx5IGtleVByZXNzUGVybWlzc2lvblV0aWxzID0gJ3BwcHBwcHBwcCc7XHJcbiAgICBjdXJyZW50S2V5UHJlc3NJbmRleCA9IDA7XHJcbiAgICByb290RGF0YTogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBfZ2xvYmFsU2VydmljZTogR2xvYmFsU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfdGl0bGU6IFRpdGxlLFxyXG4gICAgICAgIHByaXZhdGUgX3NpZ25hbFJTZXJ2aWNlOiBTaWduYWxSU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9zdG9yYWdlVXBkYXRlZFNlcnZpY2U6IFN0b3JhZ2VVcGRhdGVkU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jdXN0b21Sb3V0ZVNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25Db250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfY29tcG9uZW50Q29udGV4dFNlcnZpY2U6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwdWJsaWMgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jb3JlQ29uZmlnU2VydmljZTogQ29yZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbmZpcm1TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX21lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9wcmltZW5nQ29uZmlnOiBQcmltZU5HQ29uZmlnLFxyXG4gICAgICAgIHByaXZhdGUgX3N0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XHJcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gKHdpbmRvdyBhcyBhbnkpLmFwcENvZGUgfHwgdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBDb2RlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5rZXlQcmVzc1Blcm1pc3Npb25VdGlscykge1xyXG4gICAgICAgICAgICB0aGlzLmtleVByZXNzUGVybWlzc2lvblV0aWxzID0gdGhpcy5lbnZpcm9ubWVudC5rZXlQcmVzc1Blcm1pc3Npb25VdGlscztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnN0b3JhZ2UgPT09ICdzZXNzaW9uU3RvcmFnZScpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0U3RvcmFnZShzZXNzaW9uU3RvcmFnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0U3RvcmFnZShsb2NhbFN0b3JhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJpbWVuZ0NvbmZpZy5zZXRUcmFuc2xhdGlvbih7XHJcbiAgICAgICAgICAgIGRheU5hbWVzOiBbJ0No4bunIG5o4bqtdCcsICdUaOG7qSAyJywgJ1Ro4bupIDMnLCAnVGjhu6kgNCcsICdUaOG7qSA1JywgJ1Ro4bupIDYnLCAnVGjhu6kgNyddLFxyXG4gICAgICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ0NOJywgJ1RoMicsICdUaDMnLCAnVGg0JywgJ1RoNScsICdUaDYnLCAnVGg3J10sXHJcbiAgICAgICAgICAgIGRheU5hbWVzTWluOiBbJ0NOJywgJ1RoMicsICdUaDMnLCAnVGg0JywgJ1RoNScsICdUaDYnLCAnVGg3J10sXHJcbiAgICAgICAgICAgIG1vbnRoTmFtZXM6IFtcclxuICAgICAgICAgICAgICAgICdUaMOhbmcgMScsICdUaMOhbmcgMicsICdUaMOhbmcgMycsICdUaMOhbmcgNCcsICdUaMOhbmcgNScsICdUaMOhbmcgNicsICdUaMOhbmcgNycsICdUaMOhbmcgOCcsICdUaMOhbmcgOScsICdUaMOhbmcgMTAnLCAnVGjDoW5nIDExJywgJ1Row6FuZyAxMidcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ1QxJywgJ1QyJywgJ1QzJywgJ1Q0JywgJ1Q1JywgJ1Q2JywgJ1Q3JywgJ1Q4JywgJ1Q5JywgJ1QxMCcsICdUMTEnLCAnVDEyJ10sXHJcbiAgICAgICAgICAgIHRvZGF5OiAnSMO0bSBuYXknLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2V0U2VydmljZSh7XHJcbiAgICAgICAgLy8gICAgIGVudjogdGhpcy5lbnZpcm9ubWVudCxcclxuICAgICAgICAvLyAgICAgdHJhbnNsYXRlU2VydmljZTogdGhpcy5fdHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICAvLyAgICAgbWVzc2FnZVNlcnZpY2U6IF9tZXNzYWdlU2VydmljZSxcclxuICAgICAgICAvLyAgICAgY29uZmlybVNlcnZpY2U6IF9jb25maXJtU2VydmljZVxyXG4gICAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuYWRkUm9vdENvbnRleHQoXHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgICAgICBfYWN0aXZhdGVkUm91dGUsXHJcblxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RpdGxlLnNldFRpdGxlKHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi50aXRsZSk7XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKCd2bicpO1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZSgndm4nKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0VGlueU1jZSgpO1xyXG5cclxuICAgICAgICBjb25zdCBjZmcgPSB0aGlzLmdldENvbmZpZ0F1dGhlbigpO1xyXG4gICAgICAgIC8vIENodXnhu4NuIHNhbmcgc2Vzc2lvbiBzdG9yYWdlLCBu4bq/dSDhu5VuIHRow6wgeMOzYSBkw7JuZyBuw6B5IMSRaVxyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5zZXRTdG9yYWdlKHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldFN0b3JhZ2UoKSk7XHJcbiAgICAgICAgdGhpcy5pbmplY3RDb25maWcoY2ZnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVXaXRoTmV3Q29uZmlnQXBpKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRPYmplY3RBbnkoJ3BlcnNvbmFsaXplJyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplKSB7IHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUgPSB7fTsgfVxyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5yZXBsYXlTdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfTE9BREVELFxyXG4gICAgICAgICAgICBycyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2Uuc2V0dXBTeW5jQ2FjaGVFbnRpdHlNZXRhZGF0YSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlci5jb25maWdcclxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChyb3V0ZSA9PiB0aGlzLmFkZEd1YXJkKHJvdXRlKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlyc3RUaW1lTG9naW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBs4bqnbiDEkeG6p3UgxJHEg25nIG5o4bqtcCB0aMOsIHbDoG8gdHJhbmcgbeG6t2MgxJHhu4tuaFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmICh0aGlzLnJvb3RWZXJzaW9uRGVwbG95KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3ZlcnNpb25EZXBsb3knLCB0aGlzLnJvb3RWZXJzaW9uRGVwbG95KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRow6ptIHbDoG8gxJHhu4MgxJHDoW5oIGThuqV1IGzhuqduIGThuqd1IGxvZ2luID0+IMSR4buDIHjhu60gbMO9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlckEgxJFhZyDhu58gbcOgbiBow6xuaCAxID0+IMSRxINuZyB4deG6pXQgPT4gxJHEg25nIG5o4bqtcCB2w6BvIHTDoGkga2hv4bqjbiBVc2VyQiBraMO0bmcgY8OzIHF1eeG7gW4gbcOgbiBow6xuaCAxID0+IHJlZGlyZWN0IHbhu4EgXCIvXCJcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50X3VzZXJfaW5mbycpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2ZpcnN0VGltZUxvZ2luJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkVXJsID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnY3VycmVudFVybCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkVXJsICYmIG9sZFVybCAhPSB0b3AubG9jYXRpb24uaHJlZiArICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRVcmwnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSBgJHtvbGRVcmx9YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lTG9naW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudFVybCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFJlZGlyZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdmFyIHZlcnNpb25EZXBsb3kgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCd2ZXJzaW9uRGVwbG95Jyk7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgdmVyc2lvbkZyb21BcHBsaWNhdGlvbiA9IHRoaXMucm9vdFZlcnNpb25EZXBsb3k7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAodmVyc2lvbkZyb21BcHBsaWNhdGlvbiAmJiB2ZXJzaW9uRGVwbG95ICYmICgrdmVyc2lvbkRlcGxveSkgPCAoK3ZlcnNpb25Gcm9tQXBwbGljYXRpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgndmVyc2lvbkRlcGxveScsIHZlcnNpb25Gcm9tQXBwbGljYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQaW5uZWROb3RlcygpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS5pbml0KCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnN0YXJ0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNpc3RlbmN5SHViJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCcm9hZGNhc3RNZXNzYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJBdXRob3JpemVDYWNoZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS5zdGFydChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOb3RpZmljYXRpb25IdWInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZnJlc2hGb3JVcGRhdGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuYXBwQ29kZXMgJiYgZGF0YS5hcHBDb2Rlcy5zb21lKHggPT4geC50b1VwcGVyQ2FzZSgpID09IHRoaXMuYXBwQ29kZS50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5GT1JDRV9SRUxPQUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBkZWZhdWx0TW9kdWxlUGFnZXMgPSB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplLmRlZmF1bHRNb2R1bGVQYWdlcztcclxuICAgICAgICBpZiAoZGVmYXVsdE1vZHVsZVBhZ2VzICYmIGRlZmF1bHRNb2R1bGVQYWdlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5hcHBTd2l0Y2hlci5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IGRlZmF1bHRNb2R1bGVQYWdlcy5maW5kKHAgPT4gcC5jb2RlID09IG0uY29kZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFnZSAmJiBwYWdlLmRlZmF1bHRQYWdlKSB7IG0udXJsID0gcGFnZS5kZWZhdWx0UGFnZTsgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIEhhbW1lci5kZWZhdWx0cy5jc3NQcm9wcy51c2VyU2VsZWN0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdRVUlDS19OT1RFX1BPUFVQLkNMT1NFX1BPUFVQJywgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmVkaXRGb3JtTW9kZWwuc2hvd1F1aWNrTm90ZUZvcm0gPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdHT19IT01FJywgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJyk7XHJcbiAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnVE9HR0xFX0xBWU9VVCcsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEpIHsgZGF0YSA9IHt9OyB9XHJcbiAgICAgICAgICAgIGlmIChkYXRhLm9ubHlTaG93TWFpbkNvbnRlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gZGF0YS5vbmx5U2hvd01haW5Db250ZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnTUFJTl9DT05URU5UX09OTFknLCBycyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHJzO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19SRUpFQ1RfQ09ORklSTSwgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1JlamVjdENvbmZpcm0gPSBkYXRhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcclxuICAgICAgICB0aGlzLnJvb3REYXRhID0gcm9vdC5kYXRhO1xyXG4gICAgICAgIHJvb3QuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZpbmQoeCA9PiB4LmNvZGUudG9Mb3dlckNhc2UoKSA9PSB0aGlzLmFwcENvZGUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgcm9vdC5kYXRhLmFwcE9yaWdpbiA9IHRoaXMuZW52aXJvbm1lbnQuZW5hYmxlQmFzZUhyZWYgPyBgLyR7cm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5jb2RlLnRvTG93ZXJDYXNlKCl9L2AgOiAnLyc7XHJcbiAgICAgICAgcm9vdC5kYXRhLmFsbG93QW5vbnltb3VzID0gdGhpcy5hbGxvd0Fub255bW91cztcclxuICAgICAgICAvLyBnZXQgY3VycmVudCBVc2VyXHJcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UucG9wdWxhdGVDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9BUlJPV0xFRlQsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9BUlJPV1JJR0hULCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlBFUlNPTkFMSVpFX1VQREFURUQsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gc2VuZCBjdXJyZW50IHZlcnNpb24gdG8gdG4gY2xpZW50XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RuQ2xpZW50U2VydmljZS5zZW5kQ29tbWFuZCg8VG5DbGllbnRDb21tYW5kPntcclxuICAgICAgICAgICAgICAgIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5TeW5jVmVyaW9uVG5DbGllbnQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ6IHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluLmFwcERvbWFpbiArICcvJyArIHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci5lbmRwb2ludFVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGtleTogdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLmNsaWVudEtleVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuXHJcblxyXG4gICAgICAgIC8vIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuQ09NTU9OLkNMT1NFX0VESVRfRk9STSwgKGRhdGEpID0+IHtcclxuICAgICAgICAvLyAgICAgdGhpcy5zaG93QWRkTm90ZUZvcm0gPSBmYWxzZTtcclxuICAgICAgICAvLyB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UucmVwbGF5U3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlFVSUNLX05PVEVfUElOLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHNldCBwaW5uZWQgbm90ZSBsb2NhdGlvbiBhZnRlciBjbGljayBwaW5cclxuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdwaW5uZWROb3Rlc0xvY2F0aW9uJywge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLCBsZWZ0OiAocmVjdC5sZWZ0KSwgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UucmVwbGF5U3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlFVSUNLX05PVEVfVU5QSU4sICgpID0+IHtcclxuICAgICAgICAgICAgLy8gc2V0IHBpbm5lZCBub3RlIGxvY2F0aW9uIGFmdGVyIGNsaWNrIHVwcGluXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgncGlubmVkTm90ZXNMb2NhdGlvbicsIHtcclxuICAgICAgICAgICAgICAgICAgICBib3R0b206ICh3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCAtIHJlY3QuaGVpZ2h0KSwgbGVmdDogKHJlY3QubGVmdCksIG1pbmltaXplOiB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXNcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQaW5uZWROb3RlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZWRpdEZvcm1Nb2RlbCA9IFtdO1xyXG5cclxuICAgICAgICAvLyBzdWJzY3JpYmUgY2hhbmdlIGVudGl0eSBtZXRhZGF0YVxyXG4gICAgICAgIHRoaXMuX3N0b3JhZ2VVcGRhdGVkU2VydmljZS5zdWJzY3JpYmVDaGFuZ2VkTG9jYWxTdG9yYWdlKCdLRVlfRU5USVRZX01FVERBVEFfVVBEQVRFRCcsIChycykgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZW50aXR5IG1ldGFkYXRhIGNoYW5nZWQnLCBycyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIHRyaWdnZXIgdXBkYXRlIHN0b3JhZ2Uga2V5XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlNIT1dfV0FJVF9CT1gsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndhaXRpbmcgPSBkYXRhLnNob3c7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVdhaXRpbmcgPSBbLi4uZGF0YS5tZXNzYWdlXTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh4IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3REYXRhLmh0dHBSZXF1ZXN0TGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIG7hur91IGFsbG93IGFub255bW91cyB0aMOsIGxvYWQgcmEgY8OhYyBwaMOibiBo4buHIGNobyBwaMOpcCB2w6BvIGtow7RuZyBj4bqnbiDEkcSDbmcgbmjhuq1wXHJcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcm9vdC5zdWJzY3JpYmUoJ0xPR0lOJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudEFuZFRyeUxvZ2luKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9jZC5kZXRhY2goKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcXVpY2tOb3RlQnRMb2NhdGlvbiA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldE9iamVjdEFueSgncXVpY2tOb3RlQnRMb2NhdGlvbicpO1xyXG4gICAgICAgICAgICBpZiAocXVpY2tOb3RlQnRMb2NhdGlvbiAmJiB0aGlzLnF1aWNrTm90ZUJ0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVpY2tOb3RlQnRMb2NhdGlvbi5ib3R0b20gPCB3aW5kb3cuaW5uZXJIZWlnaHQgLSA1MCAmJiBxdWlja05vdGVCdExvY2F0aW9uLnJpZ2h0IDwgd2luZG93LmlubmVyV2lkdGggLSA1MCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5ib3R0b20gPSBxdWlja05vdGVCdExvY2F0aW9uLmJvdHRvbSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gcXVpY2tOb3RlQnRMb2NhdGlvbi5yaWdodCArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZS5zaG93UXVpY2tOb3RlQnV0dG9uT25TY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucXVpY2tOb3RlQnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBpbm5lZE5vdGVzTG9jYXRpb24gPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRPYmplY3RBbnkoJ3Bpbm5lZE5vdGVzTG9jYXRpb24nKTtcclxuICAgICAgICAgICAgaWYgKHBpbm5lZE5vdGVzTG9jYXRpb24gJiYgdGhpcy5waW5uZWROb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgICAgIGlmIChwaW5uZWROb3Rlc0xvY2F0aW9uLmJvdHRvbSA8IHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuaGVpZ2h0ICYmIHBpbm5lZE5vdGVzTG9jYXRpb24ubGVmdCA8IHdpbmRvdy5pbm5lcldpZHRoIC0gMjUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LnN0eWxlLmJvdHRvbSA9IHBpbm5lZE5vdGVzTG9jYXRpb24uYm90dG9tICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IHBpbm5lZE5vdGVzTG9jYXRpb24ubGVmdCArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzID0gcGlubmVkTm90ZXNMb2NhdGlvbi5taW5pbWl6ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnMHB4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnNnB4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5waW5uZWROb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcclxuICAgICAgICByb290LnJlcG9ydFF1ZXVlID0gdGhpcy5yZXBvcnRRdWV1ZTtcclxuICAgICAgICB0aGlzLm1lbnVNb2RlbCA9IHRoaXMuX21lbnVTZXJ2aWNlLmdldE1lbnVJdGVtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRSZWRpcmVjdCgpIHtcclxuICAgICAgICAvLyBjaGVjayBkZWZhdWx0IHJlZGlyZWN0XHJcbiAgICAgICAgaWYgKHRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgYXBwU2V0dGluZyA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudEFwcE1ldGFkYXRhO1xyXG4gICAgICAgICAgICBpZiAoIWFwcFNldHRpbmcgJiYgdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW4uZGVmYXVsdFJlZGlyZWN0ICYmIHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpbi5kZWZhdWx0UmVkaXJlY3RcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGF0aFRvQ2hlY2sgPSB0aGlzLmVudmlyb25tZW50LmVuYWJsZUJhc2VIcmVmID8gYC8ke2FwcFNldHRpbmcuY29kZS50b0xvd2VyQ2FzZSgpfS9gIDogJy8nO1xyXG5cclxuICAgICAgICAgICAgaWYgKChsb2NhdGlvbi5wYXRobmFtZSA9PT0gJy8nIHx8IGxvY2F0aW9uLnBhdGhuYW1lID09PSAnJyB8fCBsb2NhdGlvbi5wYXRobmFtZSA9PT0gcGF0aFRvQ2hlY2spKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndXNlciBub3QgdmFsaWQgdG9rZW4nLCB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdhY2Nlc3NfdG9rZW4nKSk7XHJcbiAgICAgICAgICAgIC8vIFRPRE86IE5hbU5IIFjhu60gbMO9IHThuqFtIGNobyB0csaw4budbmcgaOG7o3AgxJHEg25nIG5o4bqtcCBs4bqnbiDEkeG6p3UgbmjGsG5nIGNo4bqheSDEkeG6v24gxJHDonkgbcOgIGFjY2VzcyB0b2tlbiB24bqrbiBraMO0bmcgaOG7o3AgbOG7h1xyXG4gICAgICAgICAgICAvLyBY4butIGzDvSB0cmnhu4d0IMSR4buDIGLhurFuZyBjw6FjaCB0w6xtIFBBIGLhuq90IGV2ZW50IGPhu6dhIGFuZ3VsYXIyIG9pZGMgxJHhu4MgeOG7rSBsw70gdHLGsOG7m2Mga2hpIMSR4bq/biBixrDhu5tjIGRlZmF1bHQgcmVkaXJlY3RcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZXRlY3RDaGFuZ2VzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jZFsnZGVzdHJveWVkJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdleGNlcHRpb24gb24gZGV0ZWN0IGNoYW5nZScsIGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSwgMTApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xlYXJBdXRob3JpemVDYWNoZSgpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhzZXNzaW9uU3RvcmFnZSlcclxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IC9eQVVUSE9SSVpBVElPTi8udGVzdChpdGVtKSlcclxuICAgICAgICAgICAgLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb2N1c1RyYXAoZXZlbnQsIGRpcmVjdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKGRpcmVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRUaW55TWNlKCkge1xyXG4gICAgICAgIHRpbnltY2UuYmFzZVVSTCA9ICcvYXNzZXRzL3ZlbmRvci90aW55bWNlJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyZVdpdGhOZXdDb25maWdBcGkoKSB7XHJcbiAgICAgICAgLy8gZm9yIGZpcnN0IGxvZ2luXHJcbiAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmV2ZW50cy5zdWJzY3JpYmUoZXZ0ID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZXZ0LnR5cGUgPT0gJ3Rva2VuX3JlY2VpdmVkJ1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lTG9naW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBTZXNzaW9uU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLmNsZWFudXBTdG9yYWdlU2VydmljZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZVJlcGxheUV2ZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfUkVBRFksXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LnR5cGUgPT09ICd0b2tlbl9leHBpcmVzJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLnRyeUxvZ2luKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LnR5cGUgPT09ICdsb2dvdXQnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHN0b3JhZ2VcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cExvY2FsU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwU2Vzc2lvblN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VVcGRhdGVkU2VydmljZS5jbGVhbnVwU3RvcmFnZVNlcnZpY2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5yZXZva2VUb2tlbkFuZExvZ291dChudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQudHlwZSA9PSAnc2Vzc2lvbl90ZXJtaW5hdGVkJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudF91c2VyX2luZm8nKTtcclxuICAgICAgICAgICAgICAgIC8vIGxvZ291dFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5sb2dvdXQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQudHlwZSA9PSAnZGlzY292ZXJ5X2RvY3VtZW50X2xvYWRlZCcpIHtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQudHlwZSA9PSAndG9rZW5fcmVmcmVzaGVkJykge1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2xvZ2luIGV2ZW50JywgZXZ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVSZXBsYXlFdmVudChcclxuICAgICAgICAgICAgICAgIENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfUkVBRFksXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdjdXJyZW50VXJsJykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2N1cnJlbnRVcmwnLCB0b3AubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudEFuZFRyeUxvZ2luKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHThu5VuZyBo4bujcCBiaeG6v24gcG9zaXRpb25cclxuICAgICAgICBpZiAodGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnbXlpdGVtJykpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KCdQT1NJVElPTl9MT0FERUQnLCB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdteWl0ZW0nKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZ+G7jWkgYXBpIMSR4buDIHThu5VuZyBo4bujcCBk4buvIGxpdWVqZS4uLlxyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoJ1BPU0lUSU9OX0xPQURFRCcsIHt9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbmplY3RDb25maWcoY2ZnOiBBdXRoQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmNvbmZpZ3VyZShjZmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q29uZmlnQXV0aGVuKCkge1xyXG4gICAgICAgIGNvbnN0IGNmZyA9IHRoaXMuX2NvcmVDb25maWdTZXJ2aWNlLmdldEF1dGhDb25maWcoKTtcclxuICAgICAgICBjb25zdCB0eXBlTG9naW4gPSB0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuYXV0aGVuVHlwZTtcclxuICAgICAgICBpZiAodHlwZUxvZ2luICYmIHR5cGVMb2dpbi5pbmNsdWRlcygnaW1wbGljaXQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2ZnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNmZy5yZXNwb25zZVR5cGUgPSAnY29kZSc7XHJcbiAgICAgICAgICAgIHJldHVybiBjZmc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZU1lbnVBY3RpdmUodG9wKSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxCYXJNZW51LnNjcm9sbFRvVG9wKHRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlRHJvcHBlZChldmVudCkge1xyXG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgncXVpY2tOb3RlQnRMb2NhdGlvbicsIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSA1MCksIHJpZ2h0OiAod2luZG93LmlubmVyV2lkdGggLSByZWN0LmxlZnQgLSA1MClcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVTdGFydGVkKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVNb3ZpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVByZXNzKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVQcmVzc2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKHRydWUpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZU9uY2UoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQk9EWV9NT1VTRV9ET1dOLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlUHJlc3NVcChldmVudCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZVByZXNzaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVBZGROb3RlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVNb3ZpbmcgJiZcclxuICAgICAgICAgICAgIXRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlUHJlc3NpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5ub3RlRGF0YU1vZGVsID0gPGFueT57XHJcbiAgICAgICAgICAgICAgICBlZGl0Rm9ybU1vZGVsOiA8YW55Pnsgc2hvd1F1aWNrTm90ZUZvcm06IHRydWUsIHBvcHVwU2l6ZTogPGFueT57fSwgZGF0YTogPGFueT57fSB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZWRpdEZvcm1Nb2RlbC5zaG93UXVpY2tOb3RlRm9ybSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVNob3dBbGxOb3RlcygpIHtcclxuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xyXG4gICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5nZXRBcHBTd2l0Y2hlclVybCgndXNlcicpfS9tYWluL3F1aWNrLW5vdGVgO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVNob3dTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xyXG4gICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5nZXRBcHBTd2l0Y2hlclVybCgndXNlcicpfS9tYWluL3BlcnNvbmFsaXplYDtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKHNob3cpIHtcclxuICAgICAgICBpZiAoc2hvdykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0MS5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzU1cHgnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICcxMDBweCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0MS5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzY1cHgnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICcxMjBweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0MS5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzVweCc7XHJcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQyLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNXB4JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGlubmVkIE5vdGVcclxuICAgIGdldFBpbm5lZE5vdGVzKCkge1xyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcGlubmVkTm90ZXNEcm9wcGVkKGV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdwaW5uZWROb3Rlc0xvY2F0aW9uJywgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBib3R0b206ICh3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCAtIHJlY3QuaGVpZ2h0KSwgbGVmdDogKHJlY3QubGVmdCksIG1pbmltaXplOiB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXNcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnBpbm5lZE5vdGVzTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwaW5uZWROb3Rlc1N0YXJ0ZWQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnBpbm5lZE5vdGVzTW92aW5nID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwaW5uZWROb3Rlc01pbmltaXplKGRhdGE6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPSAhZGF0YTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdwaW5uZWROb3Rlc0xvY2F0aW9uJywgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBib3R0b206ICh3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCAtIHJlY3QuaGVpZ2h0KSwgbGVmdDogKHJlY3QubGVmdCksIG1pbmltaXplOiB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXNcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPT0gdHJ1ZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0udGl0bGVQYWRkaW5nQm90dG9tID0gJzBweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLmNvbnRlbnREaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnNnB4JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuUGluTm90ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICByb3dEYXRhLmlzUGlubmVkID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBsZXRlTm90ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICByb3dEYXRhLmlzQ29tcGxldGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaW5Db21wbGV0ZU5vdGUocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgcm93RGF0YS5pc0NvbXBsZXRlZCA9IGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZVRhYldpbmRvdygpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnY2xvc2VUYWJXaW5kb3cnKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBcHBTd2l0Y2hlclVybChhcHBDb2RlKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5hcHBTd2l0Y2hlci5maW5kKHggPT4geC5jb2RlLnRvTG93ZXJDYXNlKCkgPT0gYXBwQ29kZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICBpZiAoYXBwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcHAudXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB1c2UtbGlmZS1jeWNsZS1pbnRlcmZhY2VcclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuREVTVFJPWV9UQVNLX0RFVEFJTF9DT01QT05FTlQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNlYXJjaCBtZW51XHJcbiAgICBvblNlYXJjaE1lbnUoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE1lbnVSZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQucXVlcnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZW51UmVzdWx0ID0gdGhpcy5nZXRTZWFyY2hNZW51UmVzdWx0KGV2ZW50LnF1ZXJ5KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWdyb3VwU2VhcmNoTWVudVJlc3VsdChrZXl3b3JkLCB0aGlzLm1lbnVNb2RlbCwgcmVzdWx0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlZ3JvdXBTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQ6IHN0cmluZywgbGlzdFRvR2V0OiBhbnlbXSwgbGlzdFRvUHVzaDogYW55W10pIHtcclxuICAgICAgICBsaXN0VG9HZXQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVncm91cFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCwgaXRlbS5pdGVtcywgbGlzdFRvUHVzaCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRoaXMubm9uQWNjZW50VmlldG5hbWVzZShpdGVtLmxhYmVsKS5pbmRleE9mKHRoaXMubm9uQWNjZW50VmlldG5hbWVzZShrZXl3b3JkKSkgPj0gMCkpIHtcclxuICAgICAgICAgICAgICAgIGxpc3RUb1B1c2gucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBub25BY2NlbnRWaWV0bmFtZXNlKHN0cikge1xyXG4gICAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIC8vICAgICBXZSBjYW4gYWxzbyB1c2UgdGhpcyBpbnN0ZWFkIG9mIGZyb20gbGluZSAxMSB0byBsaW5lIDE3XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEUwfFxcdTAwRTF8XFx1MUVBMXxcXHUxRUEzfFxcdTAwRTN8XFx1MDBFMnxcXHUxRUE3fFxcdTFFQTV8XFx1MUVBRHxcXHUxRUE5fFxcdTFFQUJ8XFx1MDEwM3xcXHUxRUIxfFxcdTFFQUZ8XFx1MUVCN3xcXHUxRUIzfFxcdTFFQjUvZywgXCJhXCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBFOHxcXHUwMEU5fFxcdTFFQjl8XFx1MUVCQnxcXHUxRUJEfFxcdTAwRUF8XFx1MUVDMXxcXHUxRUJGfFxcdTFFQzd8XFx1MUVDM3xcXHUxRUM1L2csIFwiZVwiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRUN8XFx1MDBFRHxcXHUxRUNCfFxcdTFFQzl8XFx1MDEyOS9nLCBcImlcIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEYyfFxcdTAwRjN8XFx1MUVDRHxcXHUxRUNGfFxcdTAwRjV8XFx1MDBGNHxcXHUxRUQzfFxcdTFFRDF8XFx1MUVEOXxcXHUxRUQ1fFxcdTFFRDd8XFx1MDFBMXxcXHUxRUREfFxcdTFFREJ8XFx1MUVFM3xcXHUxRURGfFxcdTFFRTEvZywgXCJvXCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBGOXxcXHUwMEZBfFxcdTFFRTV8XFx1MUVFN3xcXHUwMTY5fFxcdTAxQjB8XFx1MUVFQnxcXHUxRUU5fFxcdTFFRjF8XFx1MUVFRHxcXHUxRUVGL2csIFwidVwiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTFFRjN8XFx1MDBGRHxcXHUxRUY1fFxcdTFFRjd8XFx1MUVGOS9nLCBcInlcIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMTExL2csIFwiZFwiKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw6B8w6F84bqhfOG6o3zDo3zDonzhuqd84bqlfOG6rXzhuql84bqrfMSDfOG6sXzhuq984bq3fOG6s3zhurUvZywgJ2EnKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw6h8w6l84bq5fOG6u3zhur18w6p84buBfOG6v3zhu4d84buDfOG7hS9nLCAnZScpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DrHzDrXzhu4t84buJfMSpL2csICdpJyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8OyfMOzfOG7jXzhu498w7V8w7R84buTfOG7kXzhu5l84buVfOG7l3zGoXzhu5184bubfOG7o3zhu5984buhL2csICdvJyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8O5fMO6fOG7pXzhu6d8xal8xrB84burfOG7qXzhu7F84butfOG7ry9nLCAndScpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/hu7N8w7184bu1fOG7t3zhu7kvZywgJ3knKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvxJEvZywgJ2QnKTtcclxuICAgICAgICAvLyBTb21lIHN5c3RlbSBlbmNvZGUgdmlldG5hbWVzZSBjb21iaW5pbmcgYWNjZW50IGFzIGluZGl2aWR1YWwgdXRmLTggY2hhcmFjdGVyc1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMzAwfFxcdTAzMDF8XFx1MDMwM3xcXHUwMzA5fFxcdTAzMjMvZywgJycpOyAvLyBIdXnhu4FuIHPhuq9jIGjhu49pIG5nw6MgbuG6t25nXHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAyQzZ8XFx1MDMwNnxcXHUwMzFCL2csICcnKTsgLy8gw4IsIMOKLCDEgiwgxqAsIMavXHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdE1lbnVTdWdnZXN0aW9uKG1lbnVJdGVtT2JqKSB7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwobWVudUl0ZW1PYmoucm91dGVyTGluayk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZW51SW5wdXQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmx1clNlYXJjaE1lbnVJbnB1dChldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXNTZWFyY2hNZW51SW5wdXRGb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5QaW5uZWRNZW51KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoTWVudUlucHV0ID0gJyc7XHJcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRm9jdXNTZWFyY2hNZW51SW5wdXQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmlzU2VhcmNoTWVudUlucHV0Rm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1Bpbm5lZE1lbnUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXByZXNzJywgWyckZXZlbnQnXSlcclxuICAgIGhhbmRsZVNob3dQb3B1cFBlcm1pc3Npb25VdGlscyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmtleVByZXNzUGVybWlzc2lvblV0aWxzW3RoaXMuY3VycmVudEtleVByZXNzSW5kZXhdID09PSBldmVudC5rZXkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEtleVByZXNzSW5kZXggPT0gdGhpcy5rZXlQcmVzc1Blcm1pc3Npb25VdGlscy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9vdERhdGEuc2hvd1Blcm1pc3Npb25VdGlscyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkR3VhcmQocm91dGU6IFJvdXRlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHJvdXRlLnBhdGggPT09ICcnIHx8IHJvdXRlLnBhdGggPT09ICcvJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocm91dGUubG9hZENoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICByb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkID0gcm91dGUuY2FuQWN0aXZhdGVDaGlsZCA/IHJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgOiBbR2VuZXJpY0d1YXJkQ2hpbGRTZXJ2aWNlXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJvdXRlLmNhbkFjdGl2YXRlID0gcm91dGUuY2FuQWN0aXZhdGUgPyByb3V0ZS5jYW5BY3RpdmF0ZSA6IFtHZW5lcmljR3VhcmRTZXJ2aWNlXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=