@posiwise/resource-module 0.0.147 → 0.0.149
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/public/components/reslease-note-card/release-note-card.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-blogs/resource-blog-top-banner/resource-blog-top-banner.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-blogs/resource-blog.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-card-list/resource-card-list.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-company-card/resource-company-card.component.mjs +1 -2
- package/esm2022/lib/public/components/resource-edit-card/resource-edit-card.component.mjs +3 -3
- package/esm2022/lib/public/components/resource-integration/integration-top-banner/integration-top-banner.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-integration/resource-integration.component.mjs +3 -4
- package/esm2022/lib/public/components/resource-post/related-resources/related-resources.component.mjs +3 -3
- package/esm2022/lib/public/components/resource-post/related-resources/resource-cards/resource-cards.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-post/resource-post-details/resource-post-details.component.mjs +62 -7
- package/esm2022/lib/public/components/resource-post/resource-post.component.mjs +1 -1
- package/esm2022/lib/public/components/resource-release-notes/resource-release-notes-top-banner/resource-release-notes-top-banner.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-vault/resource-vault.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-videos/resource-video-cards/resource-video-cards.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-videos/resource-videos-top-banner/resource-videos-top-banner.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-webinars/replay-event-cards/replay-event-cards.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-webinars/resource-webinars.component.mjs +2 -2
- package/esm2022/lib/public/components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component.mjs +2 -2
- package/esm2022/lib/public/components/resources/resources.component.mjs +1 -2
- package/esm2022/lib/public/components/testimonial-card/testimonial-card.component.mjs +2 -2
- package/esm2022/lib/public/components/white-papers/white-papers-top-banner/white-papers-top-banner.component.mjs +2 -2
- package/fesm2022/posiwise-resource-module.mjs +96 -44
- package/fesm2022/posiwise-resource-module.mjs.map +1 -1
- package/lib/public/components/resource-post/resource-post-details/resource-post-details.component.d.ts +5 -2
- package/package.json +1 -1
package/esm2022/lib/public/components/resource-integration/resource-integration.component.mjs
CHANGED
|
@@ -213,7 +213,6 @@ export class ResourceIntegrationComponent extends AppBaseComponent {
|
|
|
213
213
|
return HelperService.getEffectiveSubscriptionId(this.user, this.subscriptionId, this.masterSubscriptionId);
|
|
214
214
|
}
|
|
215
215
|
updateCanEditResourcesValue() {
|
|
216
|
-
console.log('Hris', this.user);
|
|
217
216
|
if (this.userLoggedIn && this.user) {
|
|
218
217
|
this.canEditResourcesValue = HelperService.canEditResources(this.user, this.userLoggedIn, this.permissionService);
|
|
219
218
|
}
|
|
@@ -225,13 +224,13 @@ export class ResourceIntegrationComponent extends AppBaseComponent {
|
|
|
225
224
|
return this.canEditResourcesValue;
|
|
226
225
|
}
|
|
227
226
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceIntegrationComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.ResourceService }, { token: i3.NgbModal }, { token: i4.TagService }, { token: i4.AuthService }, { token: i5.AdminService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
228
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ResourceIntegrationComponent, selector: "pw-resource-integration", viewQueries: [{ propertyName: "editIntegrationsModal", first: true, predicate: ["editIntegrationsModal"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-integration-top-banner></pw-integration-top-banner>\n<div class=\"bg-white\">\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\">\n <div class=\"container sec-container\">\n <div *ngIf=\"isLoaded && integrationCountDisplay > 0\">\n <h1 class=\"int-title mb-0\">{{ integrationCountDisplay }}+ integrations (& counting)</h1>\n <p class=\"int-text\"> Search the current list of {{companyName}} vendor and distributor integrations below. <br />\n </p>\n </div>\n <pw-resource-company-card *ngIf=\"isLoaded\" [header]=\"'integrated vendors'\"\n (getPosts)=\"getPostTags()\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n [data]=\"posts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"integrationCountDisplay === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n <div class=\"text-center pt-3 mt-4\" *ngIf=\"isLoaded && integrationCountDisplay > 0\">\n <p class=\"see-span\"> Don\u2019t see what you\u2019re after? <a [href]=\"contactUsUrl\"\n target=\"_blank\"\n class=\"int-span team-span\">Speak with our team to request a connection >\n </a>\n </p>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n <pw-resource-company-card [header]=\"'integrated Distributors'\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n *ngIf=\"isLoaded\"\n [vendor]=\"true\"\n (getPosts)=\"getPostTags()\"\n [data]=\"distributerPosts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"integrationCountDisplay === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\" *ngIf=\"integrations\">\n <div class=\"container\">\n\n <div class=\"how-it-works-wrapper\">\n <div class=\"d-flex\">\n <h1 class=\"it-works-title mb-0\">{{integrations?.title || 'How it works'}}</h1>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.enter)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.space)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n title=\"Edit Integrations Section\"></i>\n </div>\n <p class=\"pb-20\" [innerHTML]=\"integrations?.description || 'View short example videos to understand how these integrations can work for you:'\"></p>\n <div class=\"row section-row\" [ngClass]=\"{ 'justify-content-center': integrations?.items?.length === 1 }\">\n <ng-container *ngIf=\"integrations?.items?.length > 0; else noIntegrations\">\n <ng-container *ngFor=\"let integration of integrations?.items\">\n <div\n class=\"col-md-6\"\n *ngIf=\"integration?.image_url || integration?.title || integration?.description\"\n >\n <ng-container *ngIf=\"integration?.video_url && integration?.video_url.includes('https'); else noVideo\">\n <div class=\"d-flex justify-content-center cursor-pointer\">\n <img\n *ngIf=\"integration?.video_url\"\n [src]=\"integration?.image_url\"\n (click)=\"loadMicrosoftVideo(integration?.video_url)\"\n (keydown.enter)=\"loadMicrosoftVideo(integration?.video_url)\"\n class=\"how-it-works-img\"\n alt=\"Integration Video Thumbnail\"\n />\n </div>\n </ng-container>\n\n <ng-template #noVideo>\n <div class=\"d-flex justify-content-center\">\n <div class=\"w-100\">\n <pw-no-data [withImage]=\"true\" [message]=\"'No video found' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #noIntegrations>\n <div class=\"w-100 text-center\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Integration.NoDataMessage' | transloco\"></pw-no-data>\n </div>\n </ng-template>\n\n </div>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\" *ngIf=\"showIntegrations()\">\n <div class=\"container\">\n <div class=\"row align-items-start\">\n <div class=\"col-md-6 text-md-start text-center\">\n <div class=\"d-flex\">\n <h1 class=\"guide-title mb-3\">{{guideData?.items[0]?.title || '--UPDATE ME ON THE ADMIN/DOMAINS MODULE--'}}</h1>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openGuidesModal(guidesEditModal)\"\n (keydown.enter)=\"openGuidesModal(guidesEditModal)\"\n (keydown.space)=\"openGuidesModal(guidesEditModal)\"\n title=\"Edit Integrations Section\"></i>\n </div>\n <p class=\"guide-subtext\"\n [innerHTML]=\"guideData?.items[0]?.description || '--UPDATE ME ON THE ADMIN/DOMAINS MODULE--'\">\n </p>\n <a class=\"vault-btn\"\n [href]=\"guideData?.items[0]?.guide_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n {{guideData?.items[0]?.button_text || 'View the guide'}}\n </a>\n\n </div>\n\n <div class=\"col-md-6 text-center\">\n <ng-container *ngIf=\"guideData?.items[0]?.image_url && !guideData?.items[0].image_url.includes('default-photo.jpg'); else noDataTemplate\">\n <img\n [src]=\"guideData?.items[0].image_url\"\n alt=\"Guide\"\n class=\"guide-img\" />\n </ng-container>\n\n <ng-template #noDataTemplate>\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'--ADD ME ON THE ADMIN/DOMAINS MODULE--' | transloco\" />\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n<pw-resource-note-card *ngIf=\"resourcePostTag?.tag_category_id\" [categoryId]=\"resourcePostTag?.tag_category_id\" [tag]=\"resourcePostTag\" [releaseHeader]=\"true\" [resourceTitle]=\"resourcePostTag?.title\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n\n\n\n<ng-template #editIntegrationsModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Integrations Section</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-title\">Title</label>\n <input class=\"form-control\" id=\"integration-title\" [(ngModel)]=\"editingIntegrations.title\" />\n </div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-description\">Description</label>\n <textarea class=\"form-control\" id=\"integration-description\" rows=\"3\" [(ngModel)]=\"editingIntegrations.description\"></textarea>\n </div>\n\n <div cdkDropList (cdkDropListDropped)=\"dropIntegrationItems($event)\">\n <div *ngFor=\"let integration of editingIntegrations.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <label class=\"form-label mb-0\" for=\"integration-item\">Integration Item</label>\n <i class=\"fa fa-bars cursor-move in-page-bars-icon\" cdkDragHandle></i>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'integration-item-title-' + i\" [(ngModel)]=\"integration.title\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-description-' + i\">Description</label>\n <input class=\"form-control\" [id]=\"'integration-item-description-' + i\" [(ngModel)]=\"integration.description\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-blog-url-' + i\">Blog URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-blog-url-' + i\" [(ngModel)]=\"integration.blog_url\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-image-url-' + i\" [(ngModel)]=\"integration.image_url\" />\n </div>\n <div class=\"col-md-12 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-video-url-' + i\">Video URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-video-url-' + i\" [(ngModel)]=\"integration.video_url\" />\n </div>\n </div>\n\n <div class=\"d-flex justify-content-end\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeIntegrationItem(i)\" (keydown.enter)=\"removeIntegrationItem(i)\"\n (keydown.space)=\"removeIntegrationItem(i)\"></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm\" (click)=\"addIntegrationItem()\">+ Add Integration</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveIntegrations(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n<ng-template #guidesEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Guides</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Guides Section</h4>\n\n <div cdkDropList (cdkDropListDropped)=\"dropGuides($event)\">\n <div *ngFor=\"let guide of editingGuides.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'guide-title-' + i\" [(ngModel)]=\"guide.title\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-button-text-' + i\">Button Text</label>\n <input class=\"form-control\" [id]=\"'guide-button-text-' + i\" [(ngModel)]=\"guide.button_text\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'guide-image-url-' + i\" [(ngModel)]=\"guide.image_url\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-url-' + i\">Guide URL</label>\n <input class=\"form-control\" [id]=\"'guide-url-' + i\" [(ngModel)]=\"guide.guide_url\" />\n </div>\n <div class=\"col-12 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-description-' + i\">Description</label>\n <textarea class=\"form-control\" [id]=\"'guide-description-' + i\" rows=\"3\" [(ngModel)]=\"guide.description\"></textarea>\n </div>\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeGuide(i)\" (keydown.enter)=\"removeGuide(i)\" (keydown.space)=\"removeGuide(i)\"></i>\n <i class=\"fa fa-bars cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-2\" (click)=\"addGuide()\">+ Add Guide</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveGuides(modal)\">Save</button>\n </div>\n</ng-template>\n", styles: [".int-span{font-size:3rem;color:#3d8fbe}.team-span{font-size:2rem;color:#3d8fbe;font-weight:100}.see-span{font-size:2rem;font-weight:100}::ng-deep .edit-card .in-page-edit-icon{margin-left:1rem!important;margin-top:.5rem!important}::ng-deep .modal-content{margin-top:5rem!important}.how-it-works-wrapper .it-works-title{font-size:3rem;margin-bottom:2rem;color:var(--text-color, black);font-weight:200!important;padding-bottom:12px!important}.how-it-works-wrapper .how-it-works-img{width:85%!important;margin:0 auto!important}.how-it-works-wrapper p{padding-top:1rem;font-size:2rem;color:#000;font-weight:100;margin-bottom:4rem}.guide-wrapper{padding:55px 47px 220px}.guide-wrapper .horizontal{position:absolute;left:0;bottom:24%;width:100%}.guide-wrapper .pb-20{padding-bottom:20px}.guide-wrapper .flex{display:flex}.guide-wrapper .guideimg{margin:0 auto}.guide-wrapper .guide-title{font: 500 28px Montserrat-Regular,sans-serif}.guide-wrapper p{font: 400 17px Montserrat-Regular,sans-serif;color:#182527}.cloudolive-guide-section{box-shadow:0 4px 32px -14px #40576d4d!important;position:relative}.cloudolive-guide-section .integration-fadeout{position:absolute;bottom:0;left:0;width:100%;height:80px;background:linear-gradient(to bottom,#fff0,#f8f9fa);pointer-events:none}@media (width >= 768px){.cloudolive-guide-section .container-section{padding:20px 190px 20px 120px!important}}@media (width <= 768px){.cloudolive-guide-section .container-section{padding:3rem!important}.cloudolive-guide-section .guide-img{max-width:236px!important}.cloudolive-guide-section .guide-title{font-size:3.25rem!important}.cloudolive-guide-section .vault-btn{width:90%!important;margin-bottom:3rem!important}.cloudolive-guide-section .guide-subtext{padding:2rem;line-height:2rem!important}}.cloudolive-guide-section .guide-title{font-size:3rem;font-weight:200}.cloudolive-guide-section .guide-subtext{font-size:1.7rem;line-height:3rem;color:var(--text-color, black);font-weight:200;margin-bottom:2rem}.cloudolive-guide-section .guide-note{font-size:1.7rem;color:#000;font-weight:100}.cloudolive-guide-section .vault-btn{display:inline-block;background:var(--text-color, black);color:#fff;padding:1rem 2rem;border-radius:40px;font-weight:500;text-decoration:none;margin-top:1rem!important;font-size:1.4rem;border:1px solid;box-shadow:none!important;border-color:var(--text-color, textColor)}.cloudolive-guide-section .vault-btn:hover{background:#fff;color:var(--text-color, black)!important}.cloudolive-guide-section .guide-img{max-width:536px;max-height:536px!important;height:auto}.int-title{color:var(--text-color, black);font-size:4rem!important;font-weight:400}.int-text{font-size:1.3rem;font-weight:300}@media (width >= 991px){.section-outer{padding-top:7rem!important}}\n", ".bold{font-weight:700}.nce-heading{margin-bottom:2rem}.nce-note{margin-top:1rem;font-size:.85rem;color:#555}.nce-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.msp-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.msp-vault-section .vault-heading{font-size:3rem;font-weight:300}.msp-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.msp-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.msp-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.msp-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.msp-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.msp-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.msp-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.msp-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.msp-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media (width <= 1200px){.msp-vault-section .vault-heading{font-size:3.5rem}.msp-vault-section .vault-description{margin-top:1.35rem}.msp-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media (width >= 991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media (width >= 768px) and (width <= 1200px){.container{padding:0 6rem!important}}@media (width <= 768px){.video-row{gap:3rem!important}}@media (width <= 768px){.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media (width <= 1200px){.container{padding:7rem 3rem 1rem!important}}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.Trial4ContactUsComponent, selector: "pw-trial-4-contact-us", inputs: ["subscriptionId", "sourceId", "masterSubscriptionId", "experimentName", "microserviceName", "shardName", "user", "userLoggedIn"] }, { kind: "component", type: i9.ResourceHeaderComponent, selector: "pw-resource-header", inputs: ["user", "userLoggedIn"] }, { kind: "component", type: i10.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i11.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i11.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i11.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i9.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i12.LazyImgDirective, selector: "img" }, { kind: "component", type: i13.IntegrationTopBannerComponent, selector: "pw-integration-top-banner" }, { kind: "component", type: i14.ResourceNoteCardComponent, selector: "pw-resource-note-card", inputs: ["releaseHeader", "categoryId", "isReleasePress", "postSlice", "resourceTitle", "tag", "user", "userLoggedIn"] }, { kind: "component", type: i15.ResourceCompanyCardComponent, selector: "pw-resource-company-card", inputs: ["header", "data", "integrationCountDisplay", "vendor", "user", "userLoggedIn"], outputs: ["getPosts"] }, { kind: "pipe", type: i16.TranslocoPipe, name: "transloco" }] }); }
|
|
227
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ResourceIntegrationComponent, selector: "pw-resource-integration", viewQueries: [{ propertyName: "editIntegrationsModal", first: true, predicate: ["editIntegrationsModal"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-integration-top-banner></pw-integration-top-banner>\n<div class=\"bg-white\">\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\">\n <div class=\"container sec-container\">\n <div *ngIf=\"isLoaded && integrationCountDisplay > 0\">\n <h1 class=\"int-title mb-0\">{{ integrationCountDisplay }}+ integrations (& counting)</h1>\n <p class=\"int-text\"> Search the current list of {{companyName}} vendor and distributor integrations below. <br />\n </p>\n </div>\n <pw-resource-company-card *ngIf=\"isLoaded\" [header]=\"'integrated vendors'\"\n (getPosts)=\"getPostTags()\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n [data]=\"posts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"integrationCountDisplay === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n <div class=\"text-center pt-3 mt-4\" *ngIf=\"isLoaded && integrationCountDisplay > 0\">\n <p class=\"see-span\"> Don\u2019t see what you\u2019re after? <a [href]=\"contactUsUrl\"\n target=\"_blank\"\n class=\"int-span team-span\">Speak with our team to request a connection >\n </a>\n </p>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n <pw-resource-company-card [header]=\"'integrated Distributors'\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n *ngIf=\"isLoaded\"\n [vendor]=\"true\"\n (getPosts)=\"getPostTags()\"\n [data]=\"distributerPosts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"integrationCountDisplay === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\" *ngIf=\"integrations\">\n <div class=\"container\">\n\n <div class=\"how-it-works-wrapper\">\n <div class=\"d-flex\">\n <h1 class=\"it-works-title mb-0\">{{integrations?.title || 'How it works'}}</h1>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.enter)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.space)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n title=\"Edit Integrations Section\"></i>\n </div>\n <p class=\"pb-20\" [innerHTML]=\"integrations?.description || 'View short example videos to understand how these integrations can work for you:'\"></p>\n <div class=\"row section-row\" [ngClass]=\"{ 'justify-content-center': integrations?.items?.length === 1 }\">\n <ng-container *ngIf=\"integrations?.items?.length > 0; else noIntegrations\">\n <ng-container *ngFor=\"let integration of integrations?.items\">\n <div\n class=\"col-md-6\"\n *ngIf=\"integration?.image_url || integration?.title || integration?.description\"\n >\n <ng-container *ngIf=\"integration?.video_url && integration?.video_url.includes('https'); else noVideo\">\n <div class=\"d-flex justify-content-center cursor-pointer\">\n <img\n *ngIf=\"integration?.video_url\"\n [src]=\"integration?.image_url\"\n (click)=\"loadMicrosoftVideo(integration?.video_url)\"\n (keydown.enter)=\"loadMicrosoftVideo(integration?.video_url)\"\n class=\"how-it-works-img\"\n alt=\"Integration Video Thumbnail\"\n />\n </div>\n </ng-container>\n\n <ng-template #noVideo>\n <div class=\"d-flex justify-content-center\">\n <div class=\"w-100\">\n <pw-no-data [withImage]=\"true\" [message]=\"'No video found' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #noIntegrations>\n <div class=\"w-100 text-center\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Integration.NoDataMessage' | transloco\"></pw-no-data>\n </div>\n </ng-template>\n\n </div>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\" *ngIf=\"showIntegrations()\">\n <div class=\"container\">\n <div class=\"row align-items-start\">\n <div class=\"col-md-6 text-md-start text-center\">\n <div class=\"d-flex\">\n <h1 class=\"guide-title mb-3\">{{guideData?.items[0]?.title || '--UPDATE ME ON THE ADMIN/DOMAINS MODULE--'}}</h1>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openGuidesModal(guidesEditModal)\"\n (keydown.enter)=\"openGuidesModal(guidesEditModal)\"\n (keydown.space)=\"openGuidesModal(guidesEditModal)\"\n title=\"Edit Integrations Section\"></i>\n </div>\n <p class=\"guide-subtext\"\n [innerHTML]=\"guideData?.items[0]?.description || '--UPDATE ME ON THE ADMIN/DOMAINS MODULE--'\">\n </p>\n <a class=\"vault-btn\"\n [href]=\"guideData?.items[0]?.guide_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n {{guideData?.items[0]?.button_text || 'View the guide'}}\n </a>\n\n </div>\n\n <div class=\"col-md-6 text-center\">\n <ng-container *ngIf=\"guideData?.items[0]?.image_url && !guideData?.items[0].image_url.includes('default-photo.jpg'); else noDataTemplate\">\n <img\n [src]=\"guideData?.items[0].image_url\"\n alt=\"Guide\"\n class=\"guide-img\" />\n </ng-container>\n\n <ng-template #noDataTemplate>\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'--ADD ME ON THE ADMIN/DOMAINS MODULE--' | transloco\" />\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n<pw-resource-note-card *ngIf=\"resourcePostTag?.tag_category_id\" [categoryId]=\"resourcePostTag?.tag_category_id\" [tag]=\"resourcePostTag\" [releaseHeader]=\"true\" [resourceTitle]=\"resourcePostTag?.title\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n\n\n\n<ng-template #editIntegrationsModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Integrations Section</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-title\">Title</label>\n <input class=\"form-control\" id=\"integration-title\" [(ngModel)]=\"editingIntegrations.title\" />\n </div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-description\">Description</label>\n <textarea class=\"form-control\" id=\"integration-description\" rows=\"3\" [(ngModel)]=\"editingIntegrations.description\"></textarea>\n </div>\n\n <div cdkDropList (cdkDropListDropped)=\"dropIntegrationItems($event)\">\n <div *ngFor=\"let integration of editingIntegrations.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <label class=\"form-label mb-0\" for=\"integration-item\">Integration Item</label>\n <i class=\"fa fa-bars cursor-move in-page-bars-icon\" cdkDragHandle></i>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'integration-item-title-' + i\" [(ngModel)]=\"integration.title\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-description-' + i\">Description</label>\n <input class=\"form-control\" [id]=\"'integration-item-description-' + i\" [(ngModel)]=\"integration.description\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-blog-url-' + i\">Blog URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-blog-url-' + i\" [(ngModel)]=\"integration.blog_url\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-image-url-' + i\" [(ngModel)]=\"integration.image_url\" />\n </div>\n <div class=\"col-md-12 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-video-url-' + i\">Video URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-video-url-' + i\" [(ngModel)]=\"integration.video_url\" />\n </div>\n </div>\n\n <div class=\"d-flex justify-content-end\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeIntegrationItem(i)\" (keydown.enter)=\"removeIntegrationItem(i)\"\n (keydown.space)=\"removeIntegrationItem(i)\"></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm\" (click)=\"addIntegrationItem()\">+ Add Integration</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveIntegrations(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n<ng-template #guidesEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Guides</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Guides Section</h4>\n\n <div cdkDropList (cdkDropListDropped)=\"dropGuides($event)\">\n <div *ngFor=\"let guide of editingGuides.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'guide-title-' + i\" [(ngModel)]=\"guide.title\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-button-text-' + i\">Button Text</label>\n <input class=\"form-control\" [id]=\"'guide-button-text-' + i\" [(ngModel)]=\"guide.button_text\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'guide-image-url-' + i\" [(ngModel)]=\"guide.image_url\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-url-' + i\">Guide URL</label>\n <input class=\"form-control\" [id]=\"'guide-url-' + i\" [(ngModel)]=\"guide.guide_url\" />\n </div>\n <div class=\"col-12 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-description-' + i\">Description</label>\n <textarea class=\"form-control\" [id]=\"'guide-description-' + i\" rows=\"3\" [(ngModel)]=\"guide.description\"></textarea>\n </div>\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeGuide(i)\" (keydown.enter)=\"removeGuide(i)\" (keydown.space)=\"removeGuide(i)\"></i>\n <i class=\"fa fa-bars cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-2\" (click)=\"addGuide()\">+ Add Guide</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveGuides(modal)\">Save</button>\n </div>\n</ng-template>\n", styles: [".int-span{font-size:3rem;color:#3d8fbe}.team-span{font-size:2rem;color:#3d8fbe;font-weight:100}.see-span{font-size:2rem;font-weight:100}::ng-deep .edit-card .in-page-edit-icon{margin-left:1rem!important;margin-top:.5rem!important}::ng-deep .modal-content{margin-top:5rem!important}.how-it-works-wrapper .it-works-title{font-size:3rem;margin-bottom:2rem;color:var(--text-color, black);font-weight:200!important;padding-bottom:12px!important}.how-it-works-wrapper .how-it-works-img{width:85%!important;margin:0 auto!important}.how-it-works-wrapper p{padding-top:1rem;font-size:2rem;color:#000;font-weight:100;margin-bottom:4rem}.guide-wrapper{padding:55px 47px 220px}.guide-wrapper .horizontal{position:absolute;left:0;bottom:24%;width:100%}.guide-wrapper .pb-20{padding-bottom:20px}.guide-wrapper .flex{display:flex}.guide-wrapper .guideimg{margin:0 auto}.guide-wrapper .guide-title{font: 500 28px Montserrat-Regular,sans-serif}.guide-wrapper p{font: 400 17px Montserrat-Regular,sans-serif;color:#182527}.cloudolive-guide-section{box-shadow:0 4px 32px -14px #40576d4d!important;position:relative}.cloudolive-guide-section .integration-fadeout{position:absolute;bottom:0;left:0;width:100%;height:80px;background:linear-gradient(to bottom,#fff0,#f8f9fa);pointer-events:none}@media (width >= 768px){.cloudolive-guide-section .container-section{padding:20px 190px 20px 120px!important}}@media (width <= 768px){.cloudolive-guide-section .container-section{padding:3rem!important}.cloudolive-guide-section .guide-img{max-width:236px!important}.cloudolive-guide-section .guide-title{font-size:3.25rem!important}.cloudolive-guide-section .vault-btn{width:90%!important;margin-bottom:3rem!important}.cloudolive-guide-section .guide-subtext{padding:2rem;line-height:2rem!important}}.cloudolive-guide-section .guide-title{font-size:3rem;font-weight:200}.cloudolive-guide-section .guide-subtext{font-size:1.7rem;line-height:3rem;color:var(--text-color, black);font-weight:200;margin-bottom:2rem}.cloudolive-guide-section .guide-note{font-size:1.7rem;color:#000;font-weight:100}.cloudolive-guide-section .vault-btn{display:inline-block;background:var(--text-color, black);color:#fff;padding:1rem 2rem;border-radius:40px;font-weight:500;text-decoration:none;margin-top:1rem!important;font-size:1.4rem;border:1px solid;box-shadow:none!important;border-color:var(--text-color, textColor)}.cloudolive-guide-section .vault-btn:hover{background:#fff;color:var(--text-color, black)!important}.cloudolive-guide-section .guide-img{max-width:536px;max-height:536px!important;height:auto}.int-title{color:var(--text-color, black);font-size:4rem!important;font-weight:400}.int-text{font-size:1.3rem;font-weight:300}@media (width >= 991px){.section-outer{padding-top:7rem!important}}\n", ".bold{font-weight:700}.nce-heading{margin-bottom:2rem}.nce-note{margin-top:1rem;font-size:.85rem;color:#555}.nce-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.msp-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.msp-vault-section .vault-heading{font-size:3rem;font-weight:300}.msp-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.msp-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.msp-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.msp-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.msp-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.msp-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.msp-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.msp-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.msp-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media (width <= 1200px){.msp-vault-section .vault-heading{font-size:3.5rem}.msp-vault-section .vault-description{margin-top:1.35rem}.msp-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media (width >= 991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media (width >= 768px) and (width <= 1200px){.container{padding:0 6rem!important}}@media (width <= 768px){.video-row{gap:3rem!important}}@media (width <= 768px){.msp-vault-section .container{padding-top:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media (width <= 1200px){.container{padding:7rem 3rem 1rem!important}}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.Trial4ContactUsComponent, selector: "pw-trial-4-contact-us", inputs: ["subscriptionId", "sourceId", "masterSubscriptionId", "experimentName", "microserviceName", "shardName", "user", "userLoggedIn"] }, { kind: "component", type: i9.ResourceHeaderComponent, selector: "pw-resource-header", inputs: ["user", "userLoggedIn"] }, { kind: "component", type: i10.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i11.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i11.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i11.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i9.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i12.LazyImgDirective, selector: "img" }, { kind: "component", type: i13.IntegrationTopBannerComponent, selector: "pw-integration-top-banner" }, { kind: "component", type: i14.ResourceNoteCardComponent, selector: "pw-resource-note-card", inputs: ["releaseHeader", "categoryId", "isReleasePress", "postSlice", "resourceTitle", "tag", "user", "userLoggedIn"] }, { kind: "component", type: i15.ResourceCompanyCardComponent, selector: "pw-resource-company-card", inputs: ["header", "data", "integrationCountDisplay", "vendor", "user", "userLoggedIn"], outputs: ["getPosts"] }, { kind: "pipe", type: i16.TranslocoPipe, name: "transloco" }] }); }
|
|
229
228
|
}
|
|
230
229
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceIntegrationComponent, decorators: [{
|
|
231
230
|
type: Component,
|
|
232
|
-
args: [{ selector: 'pw-resource-integration', template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-integration-top-banner></pw-integration-top-banner>\n<div class=\"bg-white\">\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\">\n <div class=\"container sec-container\">\n <div *ngIf=\"isLoaded && integrationCountDisplay > 0\">\n <h1 class=\"int-title mb-0\">{{ integrationCountDisplay }}+ integrations (& counting)</h1>\n <p class=\"int-text\"> Search the current list of {{companyName}} vendor and distributor integrations below. <br />\n </p>\n </div>\n <pw-resource-company-card *ngIf=\"isLoaded\" [header]=\"'integrated vendors'\"\n (getPosts)=\"getPostTags()\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n [data]=\"posts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"integrationCountDisplay === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n <div class=\"text-center pt-3 mt-4\" *ngIf=\"isLoaded && integrationCountDisplay > 0\">\n <p class=\"see-span\"> Don\u2019t see what you\u2019re after? <a [href]=\"contactUsUrl\"\n target=\"_blank\"\n class=\"int-span team-span\">Speak with our team to request a connection >\n </a>\n </p>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n <pw-resource-company-card [header]=\"'integrated Distributors'\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n *ngIf=\"isLoaded\"\n [vendor]=\"true\"\n (getPosts)=\"getPostTags()\"\n [data]=\"distributerPosts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"integrationCountDisplay === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\" *ngIf=\"integrations\">\n <div class=\"container\">\n\n <div class=\"how-it-works-wrapper\">\n <div class=\"d-flex\">\n <h1 class=\"it-works-title mb-0\">{{integrations?.title || 'How it works'}}</h1>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.enter)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.space)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n title=\"Edit Integrations Section\"></i>\n </div>\n <p class=\"pb-20\" [innerHTML]=\"integrations?.description || 'View short example videos to understand how these integrations can work for you:'\"></p>\n <div class=\"row section-row\" [ngClass]=\"{ 'justify-content-center': integrations?.items?.length === 1 }\">\n <ng-container *ngIf=\"integrations?.items?.length > 0; else noIntegrations\">\n <ng-container *ngFor=\"let integration of integrations?.items\">\n <div\n class=\"col-md-6\"\n *ngIf=\"integration?.image_url || integration?.title || integration?.description\"\n >\n <ng-container *ngIf=\"integration?.video_url && integration?.video_url.includes('https'); else noVideo\">\n <div class=\"d-flex justify-content-center cursor-pointer\">\n <img\n *ngIf=\"integration?.video_url\"\n [src]=\"integration?.image_url\"\n (click)=\"loadMicrosoftVideo(integration?.video_url)\"\n (keydown.enter)=\"loadMicrosoftVideo(integration?.video_url)\"\n class=\"how-it-works-img\"\n alt=\"Integration Video Thumbnail\"\n />\n </div>\n </ng-container>\n\n <ng-template #noVideo>\n <div class=\"d-flex justify-content-center\">\n <div class=\"w-100\">\n <pw-no-data [withImage]=\"true\" [message]=\"'No video found' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #noIntegrations>\n <div class=\"w-100 text-center\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Integration.NoDataMessage' | transloco\"></pw-no-data>\n </div>\n </ng-template>\n\n </div>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\" *ngIf=\"showIntegrations()\">\n <div class=\"container\">\n <div class=\"row align-items-start\">\n <div class=\"col-md-6 text-md-start text-center\">\n <div class=\"d-flex\">\n <h1 class=\"guide-title mb-3\">{{guideData?.items[0]?.title || '--UPDATE ME ON THE ADMIN/DOMAINS MODULE--'}}</h1>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openGuidesModal(guidesEditModal)\"\n (keydown.enter)=\"openGuidesModal(guidesEditModal)\"\n (keydown.space)=\"openGuidesModal(guidesEditModal)\"\n title=\"Edit Integrations Section\"></i>\n </div>\n <p class=\"guide-subtext\"\n [innerHTML]=\"guideData?.items[0]?.description || '--UPDATE ME ON THE ADMIN/DOMAINS MODULE--'\">\n </p>\n <a class=\"vault-btn\"\n [href]=\"guideData?.items[0]?.guide_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n {{guideData?.items[0]?.button_text || 'View the guide'}}\n </a>\n\n </div>\n\n <div class=\"col-md-6 text-center\">\n <ng-container *ngIf=\"guideData?.items[0]?.image_url && !guideData?.items[0].image_url.includes('default-photo.jpg'); else noDataTemplate\">\n <img\n [src]=\"guideData?.items[0].image_url\"\n alt=\"Guide\"\n class=\"guide-img\" />\n </ng-container>\n\n <ng-template #noDataTemplate>\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'--ADD ME ON THE ADMIN/DOMAINS MODULE--' | transloco\" />\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n<pw-resource-note-card *ngIf=\"resourcePostTag?.tag_category_id\" [categoryId]=\"resourcePostTag?.tag_category_id\" [tag]=\"resourcePostTag\" [releaseHeader]=\"true\" [resourceTitle]=\"resourcePostTag?.title\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n\n\n\n<ng-template #editIntegrationsModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Integrations Section</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-title\">Title</label>\n <input class=\"form-control\" id=\"integration-title\" [(ngModel)]=\"editingIntegrations.title\" />\n </div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-description\">Description</label>\n <textarea class=\"form-control\" id=\"integration-description\" rows=\"3\" [(ngModel)]=\"editingIntegrations.description\"></textarea>\n </div>\n\n <div cdkDropList (cdkDropListDropped)=\"dropIntegrationItems($event)\">\n <div *ngFor=\"let integration of editingIntegrations.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <label class=\"form-label mb-0\" for=\"integration-item\">Integration Item</label>\n <i class=\"fa fa-bars cursor-move in-page-bars-icon\" cdkDragHandle></i>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'integration-item-title-' + i\" [(ngModel)]=\"integration.title\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-description-' + i\">Description</label>\n <input class=\"form-control\" [id]=\"'integration-item-description-' + i\" [(ngModel)]=\"integration.description\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-blog-url-' + i\">Blog URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-blog-url-' + i\" [(ngModel)]=\"integration.blog_url\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-image-url-' + i\" [(ngModel)]=\"integration.image_url\" />\n </div>\n <div class=\"col-md-12 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-video-url-' + i\">Video URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-video-url-' + i\" [(ngModel)]=\"integration.video_url\" />\n </div>\n </div>\n\n <div class=\"d-flex justify-content-end\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeIntegrationItem(i)\" (keydown.enter)=\"removeIntegrationItem(i)\"\n (keydown.space)=\"removeIntegrationItem(i)\"></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm\" (click)=\"addIntegrationItem()\">+ Add Integration</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveIntegrations(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n<ng-template #guidesEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Guides</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Guides Section</h4>\n\n <div cdkDropList (cdkDropListDropped)=\"dropGuides($event)\">\n <div *ngFor=\"let guide of editingGuides.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'guide-title-' + i\" [(ngModel)]=\"guide.title\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-button-text-' + i\">Button Text</label>\n <input class=\"form-control\" [id]=\"'guide-button-text-' + i\" [(ngModel)]=\"guide.button_text\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'guide-image-url-' + i\" [(ngModel)]=\"guide.image_url\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-url-' + i\">Guide URL</label>\n <input class=\"form-control\" [id]=\"'guide-url-' + i\" [(ngModel)]=\"guide.guide_url\" />\n </div>\n <div class=\"col-12 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-description-' + i\">Description</label>\n <textarea class=\"form-control\" [id]=\"'guide-description-' + i\" rows=\"3\" [(ngModel)]=\"guide.description\"></textarea>\n </div>\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeGuide(i)\" (keydown.enter)=\"removeGuide(i)\" (keydown.space)=\"removeGuide(i)\"></i>\n <i class=\"fa fa-bars cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-2\" (click)=\"addGuide()\">+ Add Guide</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveGuides(modal)\">Save</button>\n </div>\n</ng-template>\n", styles: [".int-span{font-size:3rem;color:#3d8fbe}.team-span{font-size:2rem;color:#3d8fbe;font-weight:100}.see-span{font-size:2rem;font-weight:100}::ng-deep .edit-card .in-page-edit-icon{margin-left:1rem!important;margin-top:.5rem!important}::ng-deep .modal-content{margin-top:5rem!important}.how-it-works-wrapper .it-works-title{font-size:3rem;margin-bottom:2rem;color:var(--text-color, black);font-weight:200!important;padding-bottom:12px!important}.how-it-works-wrapper .how-it-works-img{width:85%!important;margin:0 auto!important}.how-it-works-wrapper p{padding-top:1rem;font-size:2rem;color:#000;font-weight:100;margin-bottom:4rem}.guide-wrapper{padding:55px 47px 220px}.guide-wrapper .horizontal{position:absolute;left:0;bottom:24%;width:100%}.guide-wrapper .pb-20{padding-bottom:20px}.guide-wrapper .flex{display:flex}.guide-wrapper .guideimg{margin:0 auto}.guide-wrapper .guide-title{font: 500 28px Montserrat-Regular,sans-serif}.guide-wrapper p{font: 400 17px Montserrat-Regular,sans-serif;color:#182527}.cloudolive-guide-section{box-shadow:0 4px 32px -14px #40576d4d!important;position:relative}.cloudolive-guide-section .integration-fadeout{position:absolute;bottom:0;left:0;width:100%;height:80px;background:linear-gradient(to bottom,#fff0,#f8f9fa);pointer-events:none}@media (width >= 768px){.cloudolive-guide-section .container-section{padding:20px 190px 20px 120px!important}}@media (width <= 768px){.cloudolive-guide-section .container-section{padding:3rem!important}.cloudolive-guide-section .guide-img{max-width:236px!important}.cloudolive-guide-section .guide-title{font-size:3.25rem!important}.cloudolive-guide-section .vault-btn{width:90%!important;margin-bottom:3rem!important}.cloudolive-guide-section .guide-subtext{padding:2rem;line-height:2rem!important}}.cloudolive-guide-section .guide-title{font-size:3rem;font-weight:200}.cloudolive-guide-section .guide-subtext{font-size:1.7rem;line-height:3rem;color:var(--text-color, black);font-weight:200;margin-bottom:2rem}.cloudolive-guide-section .guide-note{font-size:1.7rem;color:#000;font-weight:100}.cloudolive-guide-section .vault-btn{display:inline-block;background:var(--text-color, black);color:#fff;padding:1rem 2rem;border-radius:40px;font-weight:500;text-decoration:none;margin-top:1rem!important;font-size:1.4rem;border:1px solid;box-shadow:none!important;border-color:var(--text-color, textColor)}.cloudolive-guide-section .vault-btn:hover{background:#fff;color:var(--text-color, black)!important}.cloudolive-guide-section .guide-img{max-width:536px;max-height:536px!important;height:auto}.int-title{color:var(--text-color, black);font-size:4rem!important;font-weight:400}.int-text{font-size:1.3rem;font-weight:300}@media (width >= 991px){.section-outer{padding-top:7rem!important}}\n", ".bold{font-weight:700}.nce-heading{margin-bottom:2rem}.nce-note{margin-top:1rem;font-size:.85rem;color:#555}.nce-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.msp-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.msp-vault-section .vault-heading{font-size:3rem;font-weight:300}.msp-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.msp-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.msp-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.msp-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.msp-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.msp-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.msp-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.msp-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.msp-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media (width <= 1200px){.msp-vault-section .vault-heading{font-size:3.5rem}.msp-vault-section .vault-description{margin-top:1.35rem}.msp-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media (width >= 991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media (width >= 768px) and (width <= 1200px){.container{padding:0 6rem!important}}@media (width <= 768px){.video-row{gap:3rem!important}}@media (width <= 768px){.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media (width <= 1200px){.container{padding:7rem 3rem 1rem!important}}\n"] }]
|
|
231
|
+
args: [{ selector: 'pw-resource-integration', template: "<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-integration-top-banner></pw-integration-top-banner>\n<div class=\"bg-white\">\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\">\n <div class=\"container sec-container\">\n <div *ngIf=\"isLoaded && integrationCountDisplay > 0\">\n <h1 class=\"int-title mb-0\">{{ integrationCountDisplay }}+ integrations (& counting)</h1>\n <p class=\"int-text\"> Search the current list of {{companyName}} vendor and distributor integrations below. <br />\n </p>\n </div>\n <pw-resource-company-card *ngIf=\"isLoaded\" [header]=\"'integrated vendors'\"\n (getPosts)=\"getPostTags()\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n [data]=\"posts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"integrationCountDisplay === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n <div class=\"text-center pt-3 mt-4\" *ngIf=\"isLoaded && integrationCountDisplay > 0\">\n <p class=\"see-span\"> Don\u2019t see what you\u2019re after? <a [href]=\"contactUsUrl\"\n target=\"_blank\"\n class=\"int-span team-span\">Speak with our team to request a connection >\n </a>\n </p>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n <pw-resource-company-card [header]=\"'integrated Distributors'\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n *ngIf=\"isLoaded\"\n [vendor]=\"true\"\n (getPosts)=\"getPostTags()\"\n [data]=\"distributerPosts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"integrationCountDisplay === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\" *ngIf=\"integrations\">\n <div class=\"container\">\n\n <div class=\"how-it-works-wrapper\">\n <div class=\"d-flex\">\n <h1 class=\"it-works-title mb-0\">{{integrations?.title || 'How it works'}}</h1>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.enter)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.space)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n title=\"Edit Integrations Section\"></i>\n </div>\n <p class=\"pb-20\" [innerHTML]=\"integrations?.description || 'View short example videos to understand how these integrations can work for you:'\"></p>\n <div class=\"row section-row\" [ngClass]=\"{ 'justify-content-center': integrations?.items?.length === 1 }\">\n <ng-container *ngIf=\"integrations?.items?.length > 0; else noIntegrations\">\n <ng-container *ngFor=\"let integration of integrations?.items\">\n <div\n class=\"col-md-6\"\n *ngIf=\"integration?.image_url || integration?.title || integration?.description\"\n >\n <ng-container *ngIf=\"integration?.video_url && integration?.video_url.includes('https'); else noVideo\">\n <div class=\"d-flex justify-content-center cursor-pointer\">\n <img\n *ngIf=\"integration?.video_url\"\n [src]=\"integration?.image_url\"\n (click)=\"loadMicrosoftVideo(integration?.video_url)\"\n (keydown.enter)=\"loadMicrosoftVideo(integration?.video_url)\"\n class=\"how-it-works-img\"\n alt=\"Integration Video Thumbnail\"\n />\n </div>\n </ng-container>\n\n <ng-template #noVideo>\n <div class=\"d-flex justify-content-center\">\n <div class=\"w-100\">\n <pw-no-data [withImage]=\"true\" [message]=\"'No video found' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #noIntegrations>\n <div class=\"w-100 text-center\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Integration.NoDataMessage' | transloco\"></pw-no-data>\n </div>\n </ng-template>\n\n </div>\n </div>\n </div>\n\n </section>\n <section class=\"cloudolive-guide-section bg-white py-5 section-outer\" *ngIf=\"showIntegrations()\">\n <div class=\"container\">\n <div class=\"row align-items-start\">\n <div class=\"col-md-6 text-md-start text-center\">\n <div class=\"d-flex\">\n <h1 class=\"guide-title mb-3\">{{guideData?.items[0]?.title || '--UPDATE ME ON THE ADMIN/DOMAINS MODULE--'}}</h1>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openGuidesModal(guidesEditModal)\"\n (keydown.enter)=\"openGuidesModal(guidesEditModal)\"\n (keydown.space)=\"openGuidesModal(guidesEditModal)\"\n title=\"Edit Integrations Section\"></i>\n </div>\n <p class=\"guide-subtext\"\n [innerHTML]=\"guideData?.items[0]?.description || '--UPDATE ME ON THE ADMIN/DOMAINS MODULE--'\">\n </p>\n <a class=\"vault-btn\"\n [href]=\"guideData?.items[0]?.guide_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n {{guideData?.items[0]?.button_text || 'View the guide'}}\n </a>\n\n </div>\n\n <div class=\"col-md-6 text-center\">\n <ng-container *ngIf=\"guideData?.items[0]?.image_url && !guideData?.items[0].image_url.includes('default-photo.jpg'); else noDataTemplate\">\n <img\n [src]=\"guideData?.items[0].image_url\"\n alt=\"Guide\"\n class=\"guide-img\" />\n </ng-container>\n\n <ng-template #noDataTemplate>\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'--ADD ME ON THE ADMIN/DOMAINS MODULE--' | transloco\" />\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n<pw-resource-note-card *ngIf=\"resourcePostTag?.tag_category_id\" [categoryId]=\"resourcePostTag?.tag_category_id\" [tag]=\"resourcePostTag\" [releaseHeader]=\"true\" [resourceTitle]=\"resourcePostTag?.title\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n\n\n\n<ng-template #editIntegrationsModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Integrations Section</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-title\">Title</label>\n <input class=\"form-control\" id=\"integration-title\" [(ngModel)]=\"editingIntegrations.title\" />\n </div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-description\">Description</label>\n <textarea class=\"form-control\" id=\"integration-description\" rows=\"3\" [(ngModel)]=\"editingIntegrations.description\"></textarea>\n </div>\n\n <div cdkDropList (cdkDropListDropped)=\"dropIntegrationItems($event)\">\n <div *ngFor=\"let integration of editingIntegrations.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <label class=\"form-label mb-0\" for=\"integration-item\">Integration Item</label>\n <i class=\"fa fa-bars cursor-move in-page-bars-icon\" cdkDragHandle></i>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'integration-item-title-' + i\" [(ngModel)]=\"integration.title\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-description-' + i\">Description</label>\n <input class=\"form-control\" [id]=\"'integration-item-description-' + i\" [(ngModel)]=\"integration.description\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-blog-url-' + i\">Blog URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-blog-url-' + i\" [(ngModel)]=\"integration.blog_url\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-image-url-' + i\" [(ngModel)]=\"integration.image_url\" />\n </div>\n <div class=\"col-md-12 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-video-url-' + i\">Video URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-video-url-' + i\" [(ngModel)]=\"integration.video_url\" />\n </div>\n </div>\n\n <div class=\"d-flex justify-content-end\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeIntegrationItem(i)\" (keydown.enter)=\"removeIntegrationItem(i)\"\n (keydown.space)=\"removeIntegrationItem(i)\"></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm\" (click)=\"addIntegrationItem()\">+ Add Integration</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveIntegrations(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n<ng-template #guidesEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Guides</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Guides Section</h4>\n\n <div cdkDropList (cdkDropListDropped)=\"dropGuides($event)\">\n <div *ngFor=\"let guide of editingGuides.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'guide-title-' + i\" [(ngModel)]=\"guide.title\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-button-text-' + i\">Button Text</label>\n <input class=\"form-control\" [id]=\"'guide-button-text-' + i\" [(ngModel)]=\"guide.button_text\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'guide-image-url-' + i\" [(ngModel)]=\"guide.image_url\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-url-' + i\">Guide URL</label>\n <input class=\"form-control\" [id]=\"'guide-url-' + i\" [(ngModel)]=\"guide.guide_url\" />\n </div>\n <div class=\"col-12 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-description-' + i\">Description</label>\n <textarea class=\"form-control\" [id]=\"'guide-description-' + i\" rows=\"3\" [(ngModel)]=\"guide.description\"></textarea>\n </div>\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeGuide(i)\" (keydown.enter)=\"removeGuide(i)\" (keydown.space)=\"removeGuide(i)\"></i>\n <i class=\"fa fa-bars cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-2\" (click)=\"addGuide()\">+ Add Guide</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveGuides(modal)\">Save</button>\n </div>\n</ng-template>\n", styles: [".int-span{font-size:3rem;color:#3d8fbe}.team-span{font-size:2rem;color:#3d8fbe;font-weight:100}.see-span{font-size:2rem;font-weight:100}::ng-deep .edit-card .in-page-edit-icon{margin-left:1rem!important;margin-top:.5rem!important}::ng-deep .modal-content{margin-top:5rem!important}.how-it-works-wrapper .it-works-title{font-size:3rem;margin-bottom:2rem;color:var(--text-color, black);font-weight:200!important;padding-bottom:12px!important}.how-it-works-wrapper .how-it-works-img{width:85%!important;margin:0 auto!important}.how-it-works-wrapper p{padding-top:1rem;font-size:2rem;color:#000;font-weight:100;margin-bottom:4rem}.guide-wrapper{padding:55px 47px 220px}.guide-wrapper .horizontal{position:absolute;left:0;bottom:24%;width:100%}.guide-wrapper .pb-20{padding-bottom:20px}.guide-wrapper .flex{display:flex}.guide-wrapper .guideimg{margin:0 auto}.guide-wrapper .guide-title{font: 500 28px Montserrat-Regular,sans-serif}.guide-wrapper p{font: 400 17px Montserrat-Regular,sans-serif;color:#182527}.cloudolive-guide-section{box-shadow:0 4px 32px -14px #40576d4d!important;position:relative}.cloudolive-guide-section .integration-fadeout{position:absolute;bottom:0;left:0;width:100%;height:80px;background:linear-gradient(to bottom,#fff0,#f8f9fa);pointer-events:none}@media (width >= 768px){.cloudolive-guide-section .container-section{padding:20px 190px 20px 120px!important}}@media (width <= 768px){.cloudolive-guide-section .container-section{padding:3rem!important}.cloudolive-guide-section .guide-img{max-width:236px!important}.cloudolive-guide-section .guide-title{font-size:3.25rem!important}.cloudolive-guide-section .vault-btn{width:90%!important;margin-bottom:3rem!important}.cloudolive-guide-section .guide-subtext{padding:2rem;line-height:2rem!important}}.cloudolive-guide-section .guide-title{font-size:3rem;font-weight:200}.cloudolive-guide-section .guide-subtext{font-size:1.7rem;line-height:3rem;color:var(--text-color, black);font-weight:200;margin-bottom:2rem}.cloudolive-guide-section .guide-note{font-size:1.7rem;color:#000;font-weight:100}.cloudolive-guide-section .vault-btn{display:inline-block;background:var(--text-color, black);color:#fff;padding:1rem 2rem;border-radius:40px;font-weight:500;text-decoration:none;margin-top:1rem!important;font-size:1.4rem;border:1px solid;box-shadow:none!important;border-color:var(--text-color, textColor)}.cloudolive-guide-section .vault-btn:hover{background:#fff;color:var(--text-color, black)!important}.cloudolive-guide-section .guide-img{max-width:536px;max-height:536px!important;height:auto}.int-title{color:var(--text-color, black);font-size:4rem!important;font-weight:400}.int-text{font-size:1.3rem;font-weight:300}@media (width >= 991px){.section-outer{padding-top:7rem!important}}\n", ".bold{font-weight:700}.nce-heading{margin-bottom:2rem}.nce-note{margin-top:1rem;font-size:.85rem;color:#555}.nce-divider{border:0;height:40px;width:100%;background:linear-gradient(to bottom,#0000,#00000026);margin:0}.press-release-icon{height:auto!important;margin:0 11px 1.9rem;display:block;align-self:center;width:auto!important;aspect-ratio:0!important;object-fit:cover;margin-top:auto;margin-right:0!important}.msp-vault-section{padding:60px 0;background:#fff;padding-bottom:9rem!important;padding-top:7rem!important;box-shadow:0 4px 32px -14px #40576d4d!important}.msp-vault-section .vault-heading{font-size:3rem;font-weight:300}.msp-vault-section .explore-link{color:#000;font-weight:400;text-decoration:none;font-size:1.5rem}.msp-vault-section .resource-blog-card{display:flex;flex-direction:column;justify-content:space-between;background-color:#fff;border-radius:30px;box-shadow:0 20px 40px #00000014;padding:25px;text-align:center;width:338px;height:auto!important}.msp-vault-section .resource-blog-card h5{font-size:1.5rem;font-weight:400;margin-bottom:.5rem;color:var(--text-color, black)}.msp-vault-section .resource-blog-card p{font-size:1.5rem;color:var(--text-color, black);line-height:2rem}.msp-vault-section .resource-blog-card img{width:100%;border-radius:10px;aspect-ratio:1/1;object-fit:cover;margin-top:auto;margin-right:0!important;max-width:250px!important;align-self:center!important}.msp-vault-section .resource-blog-card iframe{height:210px;border-radius:10px;object-fit:cover;margin-right:0!important;max-width:280px!important}.msp-vault-section .resource-blog-card .resource-btn{background-color:var(--text-color, black);color:#fff;margin-top:auto;padding:10px 24px;border-radius:24px;font-size:1.5rem;font-weight:500;width:100%;max-width:240px;cursor:pointer;transition:background .3s ease;display:flex;justify-content:space-between;align-self:center;align-items:center;text-align:left;text-decoration:none;border:1px solid;box-shadow:none!important;border-color:var(--text-color, black)}.msp-vault-section .resource-blog-card .resource-btn:hover{background:#fff;color:var(--text-color, black)!important}.msp-vault-section .vault-description{text-align:left;max-width:657px;color:#182527;line-height:2.3rem!important;font-size:1.65rem}@media (width <= 1200px){.msp-vault-section .vault-heading{font-size:3.5rem}.msp-vault-section .vault-description{margin-top:1.35rem}.msp-vault-section .resource-btn{margin-left:0!important}}.video-row{gap:5.5rem!important;margin-top:3rem!important}@media (width >= 991px){section.bg-white.text-center.extra-top-padding{position:relative;overflow:hidden}section.bg-white.text-center.extra-top-padding .banner-header{margin-bottom:4rem!important}}.vault-header{text-align:left}@media (width >= 768px) and (width <= 1200px){.container{padding:0 6rem!important}}@media (width <= 768px){.video-row{gap:3rem!important}}@media (width <= 768px){.msp-vault-section .container{padding-top:0rem!important}.vault-header{text-align:center!important}.vault-heading{font-size:3rem!important}}@media (width <= 1200px){.container{padding:7rem 3rem 1rem!important}}\n"] }]
|
|
233
232
|
}], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i2.ResourceService }, { type: i3.NgbModal }, { type: i4.TagService }, { type: i4.AuthService }, { type: i5.AdminService }, { type: i0.Injector }], propDecorators: { editIntegrationsModal: [{
|
|
234
233
|
type: ViewChild,
|
|
235
234
|
args: ['editIntegrationsModal']
|
|
236
235
|
}] } });
|
|
237
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtaW50ZWdyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9yZXNvdXJjZS1tb2R1bGUvc3JjL2xpYi9wdWJsaWMvY29tcG9uZW50cy9yZXNvdXJjZS1pbnRlZ3JhdGlvbi9yZXNvdXJjZS1pbnRlZ3JhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Jlc291cmNlLW1vZHVsZS9zcmMvbGliL3B1YmxpYy9jb21wb25lbnRzL3Jlc291cmNlLWludGVncmF0aW9uL3Jlc291cmNlLWludGVncmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFFMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBa0IsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVNUQs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RSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUN2RCxJQUFJLENBQUMsSUFBSSxFQUNULElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3RDLENBQUM7K0dBL1JRLDRCQUE0QjttR0FBNUIsNEJBQTRCLHNOQ3pCekMscWxhQWdSQTs7NEZEdlBhLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDSSx5QkFBeUI7Mk9BUUMscUJBQXFCO3NCQUF4RCxTQUFTO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSwgVGFnU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgQ29tcGFueURhdGEsIFJlc291cmNlLCBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21VcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9zaGFyZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG5pbXBvcnQgeyBSZXNvdXJjZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1yZXNvdXJjZS1pbnRlZ3JhdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Jlc291cmNlLWludGVncmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFtcbiAgICAgICAgJy4vcmVzb3VyY2UtaW50ZWdyYXRpb24uY29tcG9uZW50LnNjc3MnLFxuICAgICAgICAnLi4vcmVzb3VyY2VzL3Jlc291cmNlcy1zaGFyZWQuY29tcG9uZW50LnNjc3MnXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUludGVncmF0aW9uQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnZWRpdEludGVncmF0aW9uc01vZGFsJykgZWRpdEludGVncmF0aW9uc01vZGFsOiBUZW1wbGF0ZVJlZjxDdXN0b21VcGxvYWRlckNvbXBvbmVudD47XG4gICAgZWRpdGluZ0ludGVncmF0aW9ucztcbiAgICBkaXN0cmlidXRvcnNEYXRhID0gQ29tcGFueURhdGE/LmRpc3RyaWJ1dG9yc0RhdGE7XG4gICAgdmVuZG9yc0RhdGEgPSBDb21wYW55RGF0YT8udmVuZG9yc0RhdGE7XG5cbiAgICB0ZXh0Q29sb3IgPSB0aGlzLmFwcENvbmZpZz8uY29sb3JfY29kZXM/LnRleHQ7XG5cbiAgICBzdWJzY3JpcHRpb25JZDogbnVtYmVyO1xuICAgIG1hc3RlclN1YnNjcmlwdGlvbklkID0gdGhpcy5hcHBDb25maWcubWFzdGVyX3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25faWQ7XG4gICAgcG9zdHM6IFJlc291cmNlW10gPSBbXTtcbiAgICBkaXN0cmlidXRlclBvc3RzID0gW107XG4gICAgdXNlckxvZ2dlZEluOiBib29sZWFuO1xuICAgIGJsb2dQb3N0VGFnO1xuICAgIGlzTG9hZGVkID0gZmFsc2U7XG4gICAgcmVzb3VyY2VQb3N0VGFnO1xuICAgIGJsb2dQb3N0VmVuZG9yVGFnO1xuICAgIGlzTWFzdGVyU3Vic2NyaXB0aW9uO1xuXG4gICAgaW50ZWdyYXRpb25zID0gdGhpcy5hcHBDb25maWc/LnBhZ2VzX2NvbmZpZz8uaW50ZWdyYXRpb25zO1xuXG4gICAgcmVsZWFzZU5vdGVzTGluayA9ICcvcmVzb3VyY2VzL3Byb2R1Y3QtcmVsZWFzZS1ub3Rlcyc7XG4gICAgcTFOb3Rlc0xpbmsgPSAnL3Jlc291cmNlcy9wcm9kdWN0LXJlbGVhc2UtcTEtMjAyNSc7XG4gICAgcTNOb3Rlc0xpbmsgPSAnL3Jlc291cmNlcy9wcm9kdWN0LXJlbGVhc2UtcTMtMjAyNCc7XG4gICAgcTROb3Rlc0xpbmsgPSAnL3Jlc291cmNlcy9wcm9kdWN0LXJlbGVhc2UtcTQtMjAyNCc7XG4gICAgY29tcGFueU5hbWU7XG5cbiAgICB2aWRlb1dlYmluYXJMb2FkZWQgPSBmYWxzZTtcbiAgICB2aWRlb0RlbW9Mb2FkZWQgPSBmYWxzZTtcbiAgICB5b3V0dWJlVmlkZW9JZCA9ICdSN1ZrMjE5emJoQSc7XG4gICAgdmlkZW9UaXRsZSA9ICdDbG91ZE9saXZlIE92ZXJ2aWV3JztcbiAgICBzYW5pdGl6ZWRNaWNyb3NvZnRWaWRlb1VybDogU2FmZVJlc291cmNlVXJsO1xuICAgIHNhbml0aXplZEtlc3lhVmlkZW9Vcmw6IFNhZmVSZXNvdXJjZVVybDtcbiAgICBpbnRlZ3JhdGlvbkNvdW50RGlzcGxheTogbnVtYmVyO1xuICAgIGNvbnRhY3RVc1VybCA9IHRoaXMuYXBwQ29uZmlnPy5wYWdlc19jb25maWc/LmNvbnRhY3RfdXM/LnVybDtcbiAgICB0YWdDYXRlZ29yeTtcbiAgICB0b3RhbFBvc3RzOiBudW1iZXI7XG5cbiAgICBndWlkZURhdGEgPSB0aGlzLmFwcENvbmZpZz8ucGFnZXNfY29uZmlnPy5ndWlkZXM7XG4gICAgZWRpdGluZ0d1aWRlcyA9IHsgaXRlbXM6IFtdIH07XG4gICAgdXNlcjogVXNlcjtcblxuICAgIGNhbkVkaXRSZXNvdXJjZXNWYWx1ZSA9IGZhbHNlO1xuICAgIGRvbWFpbklkID0gdGhpcy5hcHBDb25maWcuZG9tYWluX2lkO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VTZXJ2aWNlOiBSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhZG1pblNlcnZpY2U6IEFkbWluU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jb21wYW55TmFtZSA9IHRoaXMuYXBwQ29uZmlnLmNvbXBhbnkubmFtZTtcblxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGV4dC1jb2xvcicsIHRoaXMudGV4dENvbG9yKTtcbiAgICAgICAgdGhpcy5nZXRVc2VyU3Vic2NyaXB0aW9uSWQoKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IHJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRUb2tlbiQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMudXNlckxvZ2dlZEluID0gISFyZXM7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VyTG9nZ2VkSW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtJCgncHJvZHVjdCcpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzID8gSlNPTi5wYXJzZShyZXMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IGRhdGE/LnN1YnNjcmlwdGlvbklkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckluZm8oKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlciA9IGRhdGE7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWdzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FuRWRpdFJlc291cmNlc1ZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFncygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRhZ3MoKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWxsVGFnQ2F0ZWdvcmllcyh7IHNlYXJjaDogJ0ludGVncmF0aW9ucycgfSwgdGhpcy5nZXRFZmZlY3RpdmVTdWJzY3JpcHRpb25JZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdDYXRlZ29yeSA9IHJlc3BvbnNlLnRhZ19jYXRlZ29yaWVzWzBdO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UG9zdFRhZ3MoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9wZW5FZGl0SW50ZWdyYXRpb25zTW9kYWwobW9kYWxSZWYpIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nSW50ZWdyYXRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmludGVncmF0aW9ucykpO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKG1vZGFsUmVmLCB7XG4gICAgICAgICAgICBzaXplOiAnbGcnLFxuICAgICAgICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICAgICAgICB3aW5kb3dDbGFzczogJ21vZGFsLWhvbGRlcidcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2hvd0ludGVncmF0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudXNlckxvZ2dlZEluKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZ3VpZGVEYXRhPy5pdGVtcykgJiYgdGhpcy5ndWlkZURhdGEuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5ndWlkZURhdGEuaXRlbXNbMF07XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICEhaXRlbT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAhIWl0ZW0/LmRlc2NyaXB0aW9uIHx8XG4gICAgICAgICAgICAgICAgISFpdGVtPy5ndWlkZV91cmwgfHxcbiAgICAgICAgICAgICAgICAoISFpdGVtPy5pbWFnZV91cmwgJiYgIWl0ZW0uaW1hZ2VfdXJsLmluY2x1ZGVzKCdkZWZhdWx0LWltYWdlLnBuZycpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBvc3RUYWdzKCkge1xuICAgICAgICB0aGlzLnRhZ1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXRUYWdzQnlUeXBlKCdwb3N0X2NhdGVnb3JpZXMnLCB7fSwgdGhpcy5nZXRFZmZlY3RpdmVTdWJzY3JpcHRpb25JZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVBvc3RUYWcgPSByZXNwb25zZS50YWdzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIHRhZyA9PiB0YWcubmFtZSA9PT0gJ1Byb2R1Y3QgUmVsZWFzZSBOb3RlcydcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvZ1Bvc3RUYWcgPSByZXNwb25zZS50YWdzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIHRhZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnLm5hbWUgPT09ICdJbnRlZ3JhdGVkIERpc3RyaWJ1dG9ycycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy50YWdfY2F0ZWdvcnlfaWQgPT09IHRoaXMudGFnQ2F0ZWdvcnk/LmlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2dQb3N0VmVuZG9yVGFnID0gcmVzcG9uc2UudGFncy5maW5kKFxuICAgICAgICAgICAgICAgICAgICB0YWcgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5uYW1lID09PSAnSW50ZWdyYXRlZCBWZW5kb3JzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnRhZ19jYXRlZ29yeV9pZCA9PT0gdGhpcy50YWdDYXRlZ29yeT8uaWRcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgLy8gdXNlIGZvcmtKb2luIHRvIGZldGNoIGJvdGggc2V0cyBvZiBwb3N0cyBpbiBwYXJhbGxlbFxuICAgICAgICAgICAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgICAgICAgICAgICAgdmVuZG9yUmVzcG9uc2U6IHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldFB1YmxpY1Bvc3RzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRFZmZlY3RpdmVTdWJzY3JpcHRpb25JZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDEwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJsb2dQb3N0VmVuZG9yVGFnPy5pZFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRvclJlc3BvbnNlOiB0aGlzLnJlc291cmNlU2VydmljZS5nZXRQdWJsaWNQb3N0cyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAxMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9nUG9zdFRhZz8uaWRcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pLnN1YnNjcmliZSgoeyB2ZW5kb3JSZXNwb25zZSwgZGlzdHJpYnV0b3JSZXNwb25zZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zdHMgPSB2ZW5kb3JSZXNwb25zZS5wb3N0cy5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYi5wdWJsaXNoZWRfYXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEucHVibGlzaGVkX2F0KS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3RyaWJ1dGVyUG9zdHMgPSBkaXN0cmlidXRvclJlc3BvbnNlLnBvc3RzLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShiLnB1Ymxpc2hlZF9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5wdWJsaXNoZWRfYXQpLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlbmRvckNvdW50ID0gdmVuZG9yUmVzcG9uc2U/Lm9iamVjdF9jb3VudCA/PyAwO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0cmlidXRvckNvdW50ID0gZGlzdHJpYnV0b3JSZXNwb25zZT8ub2JqZWN0X2NvdW50ID8/IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gdmVuZG9yQ291bnQgKyBkaXN0cmlidXRvckNvdW50O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZWdyYXRpb25Db3VudERpc3BsYXkgPSB0b3RhbCA9PT0gMCA/IDAgOiBNYXRoLmNlaWwodG90YWwgLyAxMCkgKiAxMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkTWljcm9zb2Z0VmlkZW8odmlkZW9VcmwpIHtcbiAgICAgICAgd2luZG93Lm9wZW4odmlkZW9VcmwsICdfYmxhbmsnLCAnbm9vcGVuZXIsbm9yZWZlcnJlcicpO1xuICAgIH1cblxuICAgIGxvYWRLZXNleWFWaWRlbygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IGBodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke3RoaXMueW91dHViZVZpZGVvSWR9P2F1dG9wbGF5PTFgO1xuICAgICAgICAvLyBiYXNlVXJsIGlzIGEgdHJ1c3RlZCBpbnRlcm5hbCBzb3VyY2UgKGUuZy4gWW91VHViZSBlbWJlZCBVUkwpXG4gICAgICAgIHRoaXMuc2FuaXRpemVkS2VzeWFWaWRlb1VybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChiYXNlVXJsKTsgLy8gTk9TT05BUlxuICAgICAgICB0aGlzLnZpZGVvV2ViaW5hckxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgYWRkSW50ZWdyYXRpb25JdGVtKCkge1xuICAgICAgICB0aGlzLmVkaXRpbmdJbnRlZ3JhdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICBibG9nX3VybDogJycsXG4gICAgICAgICAgICBpbWFnZV91cmw6ICcnLFxuICAgICAgICAgICAgdmlkZW9fdXJsOiAnJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVJbnRlZ3JhdGlvbkl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLmVkaXRpbmdJbnRlZ3JhdGlvbnMuaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBkcm9wSW50ZWdyYXRpb25JdGVtcyhldmVudCkge1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5lZGl0aW5nSW50ZWdyYXRpb25zLml0ZW1zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIH1cblxuICAgIHNhdmVJbnRlZ3JhdGlvbnMobW9kYWxSZWYpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEludGVncmF0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZWRpdGluZ0ludGVncmF0aW9uc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlRG9tYWluQ29uZmlnKHRoaXMuZG9tYWluSWQsIHtcbiAgICAgICAgICAgICAgICBpbnRlZ3JhdGlvbnM6IHVwZGF0ZWRJbnRlZ3JhdGlvbnMsXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVncmF0aW9ucyA9IHVwZGF0ZWRJbnRlZ3JhdGlvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdJbnRlZ3JhdGlvbnMgdXBkYXRlZCcpO1xuICAgICAgICAgICAgICAgIG1vZGFsUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzYXZlR3VpZGVzKG1vZGFsUmVmKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRHdWlkZXMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmVkaXRpbmdHdWlkZXNcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLnVwZGF0ZURvbWFpbkNvbmZpZyh0aGlzLmRvbWFpbklkLCB7XG4gICAgICAgICAgICAgICAgZ3VpZGVzOiB1cGRhdGVkR3VpZGVzLFxuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5nZXRFZmZlY3RpdmVTdWJzY3JpcHRpb25JZCgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ndWlkZURhdGEgPSB1cGRhdGVkR3VpZGVzO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnR3VpZGVzIHVwZGF0ZWQnKTtcbiAgICAgICAgICAgICAgICBtb2RhbFJlZi5jbG9zZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3Blbkd1aWRlc01vZGFsKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuZWRpdGluZ0d1aWRlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ndWlkZURhdGEgPz8geyBpdGVtczogW10gfSkpO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRlbXBsYXRlLCB7IHNpemU6ICd4bCcgfSk7XG4gICAgfVxuXG4gICAgYWRkR3VpZGUoKSB7XG4gICAgICAgIHRoaXMuZWRpdGluZ0d1aWRlcy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIGJ1dHRvbl90ZXh0OiAnJyxcbiAgICAgICAgICAgIGltYWdlX3VybDogJycsXG4gICAgICAgICAgICBndWlkZV91cmw6ICcnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZUd1aWRlKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nR3VpZGVzLml0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgZHJvcEd1aWRlcyhldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmVkaXRpbmdHdWlkZXMuaXRlbXMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqIEhlbHBlciBtZXRob2QgdG8gZ2V0IGVmZmVjdGl2ZSBzdWJzY3JpcHRpb24gSUQgKi9cbiAgICBwcml2YXRlIGdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBIZWxwZXJTZXJ2aWNlLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKFxuICAgICAgICAgICAgdGhpcy51c2VyLFxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgIHRoaXMubWFzdGVyU3Vic2NyaXB0aW9uSWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNhbkVkaXRSZXNvdXJjZXNWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0hyaXMnLCB0aGlzLnVzZXIpO1xuICAgICAgICBpZiAodGhpcy51c2VyTG9nZ2VkSW4gJiYgdGhpcy51c2VyKSB7XG4gICAgICAgICAgICB0aGlzLmNhbkVkaXRSZXNvdXJjZXNWYWx1ZSA9IEhlbHBlclNlcnZpY2UuY2FuRWRpdFJlc291cmNlcyhcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXIsXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyTG9nZ2VkSW4sXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FuRWRpdFJlc291cmNlc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5FZGl0UmVzb3VyY2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5FZGl0UmVzb3VyY2VzVmFsdWU7XG4gICAgfVxufVxuIiwiPHB3LXJlc291cmNlLWhlYWRlciBbdXNlcl09XCJ1c2VyXCIgW3VzZXJMb2dnZWRJbl09XCJ1c2VyTG9nZ2VkSW5cIj48L3B3LXJlc291cmNlLWhlYWRlcj5cbjxwdy1pbnRlZ3JhdGlvbi10b3AtYmFubmVyPjwvcHctaW50ZWdyYXRpb24tdG9wLWJhbm5lcj5cbjxkaXYgY2xhc3M9XCJiZy13aGl0ZVwiPlxuICA8c2VjdGlvbiBjbGFzcz1cImNsb3Vkb2xpdmUtZ3VpZGUtc2VjdGlvbiBiZy13aGl0ZSBweS01IHNlY3Rpb24tb3V0ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIHNlYy1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgICpuZ0lmPVwiaXNMb2FkZWQgJiYgaW50ZWdyYXRpb25Db3VudERpc3BsYXkgPiAwXCI+XG4gICAgICAgIDxoMSBjbGFzcz1cImludC10aXRsZSBtYi0wXCI+e3sgaW50ZWdyYXRpb25Db3VudERpc3BsYXkgfX0rIGludGVncmF0aW9ucyAoJiBjb3VudGluZyk8L2gxPlxuICAgICAgICA8cCBjbGFzcz1cImludC10ZXh0XCI+IFNlYXJjaCB0aGUgY3VycmVudCBsaXN0IG9mIHt7Y29tcGFueU5hbWV9fSB2ZW5kb3IgYW5kIGRpc3RyaWJ1dG9yIGludGVncmF0aW9ucyBiZWxvdy4gPGJyIC8+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPHB3LXJlc291cmNlLWNvbXBhbnktY2FyZCAqbmdJZj1cImlzTG9hZGVkXCIgW2hlYWRlcl09XCInaW50ZWdyYXRlZCB2ZW5kb3JzJ1wiXG4gICAgICAgIChnZXRQb3N0cyk9XCJnZXRQb3N0VGFncygpXCJcbiAgICAgICAgW2ludGVncmF0aW9uQ291bnREaXNwbGF5XT1cImludGVncmF0aW9uQ291bnREaXNwbGF5XCJcbiAgICAgICAgW2RhdGFdPVwicG9zdHNcIlxuICAgICAgICBbdXNlcl09XCJ1c2VyXCJcbiAgICAgICAgW3VzZXJMb2dnZWRJbl09XCJ1c2VyTG9nZ2VkSW5cIj48L3B3LXJlc291cmNlLWNvbXBhbnktY2FyZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAgICAgICAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpbnRlZ3JhdGlvbkNvdW50RGlzcGxheSA9PT0gMCAmJiBpc0xvYWRlZFwiPlxuICAgICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInUmVzb3VyY2UuTm9EYXRhTWVzc2FnZScgfCB0cmFuc2xvY29cIi8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC0zIG10LTRcIiAqbmdJZj1cImlzTG9hZGVkICYmIGludGVncmF0aW9uQ291bnREaXNwbGF5ID4gMFwiPlxuICAgICAgICA8cCBjbGFzcz1cInNlZS1zcGFuXCI+IERvbuKAmXQgc2VlIHdoYXQgeW914oCZcmUgYWZ0ZXI/IDxhIFtocmVmXT1cImNvbnRhY3RVc1VybFwiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgY2xhc3M9XCJpbnQtc3BhbiB0ZWFtLXNwYW5cIj5TcGVhayB3aXRoIG91ciB0ZWFtIHRvIHJlcXVlc3QgYSBjb25uZWN0aW9uID5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwvc2VjdGlvbj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJjbG91ZG9saXZlLWd1aWRlLXNlY3Rpb24gYmctd2hpdGUgcHktNSBzZWN0aW9uLW91dGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgPHB3LXJlc291cmNlLWNvbXBhbnktY2FyZCBbaGVhZGVyXT1cIidpbnRlZ3JhdGVkIERpc3RyaWJ1dG9ycydcIlxuICAgICAgW2ludGVncmF0aW9uQ291bnREaXNwbGF5XT1cImludGVncmF0aW9uQ291bnREaXNwbGF5XCJcbiAgICAgICpuZ0lmPVwiaXNMb2FkZWRcIlxuICAgICAgICBbdmVuZG9yXT1cInRydWVcIlxuICAgICAgICAoZ2V0UG9zdHMpPVwiZ2V0UG9zdFRhZ3MoKVwiXG4gICAgICAgIFtkYXRhXT1cImRpc3RyaWJ1dGVyUG9zdHNcIlxuICAgICAgICBbdXNlcl09XCJ1c2VyXCJcbiAgICAgICAgW3VzZXJMb2dnZWRJbl09XCJ1c2VyTG9nZ2VkSW5cIj48L3B3LXJlc291cmNlLWNvbXBhbnktY2FyZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAgICAgKm5nSWY9XCIhaXNMb2FkZWRcIj5cbiAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImludGVncmF0aW9uQ291bnREaXNwbGF5ID09PSAwICYmIGlzTG9hZGVkXCI+XG4gICAgICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ1Jlc291cmNlLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCIvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICA8L3NlY3Rpb24+XG4gIDxzZWN0aW9uIGNsYXNzPVwiY2xvdWRvbGl2ZS1ndWlkZS1zZWN0aW9uIGJnLXdoaXRlIHB5LTUgc2VjdGlvbi1vdXRlclwiICpuZ0lmPVwiaW50ZWdyYXRpb25zXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaG93LWl0LXdvcmtzLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgIDxoMSBjbGFzcz1cIml0LXdvcmtzLXRpdGxlIG1iLTBcIj57e2ludGVncmF0aW9ucz8udGl0bGUgfHwgJ0hvdyBpdCB3b3Jrcyd9fTwvaDE+XG4gICAgICAgICAgPGkgKm5nSWY9XCJjYW5FZGl0UmVzb3VyY2VzVmFsdWVcIlxuICAgICAgICAgIGNsYXNzPVwiZmEgZmEtZWRpdCBpbi1wYWdlLWVkaXQtaWNvbiB0ZXh0LWJsYWNrIG1zLTQgbXQtMyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5FZGl0SW50ZWdyYXRpb25zTW9kYWwoZWRpdEludGVncmF0aW9uc01vZGFsKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3BlbkVkaXRJbnRlZ3JhdGlvbnNNb2RhbChlZGl0SW50ZWdyYXRpb25zTW9kYWwpXCJcbiAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvcGVuRWRpdEludGVncmF0aW9uc01vZGFsKGVkaXRJbnRlZ3JhdGlvbnNNb2RhbClcIlxuICAgICAgICAgIHRpdGxlPVwiRWRpdCBJbnRlZ3JhdGlvbnMgU2VjdGlvblwiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwIGNsYXNzPVwicGItMjBcIiBbaW5uZXJIVE1MXT1cImludGVncmF0aW9ucz8uZGVzY3JpcHRpb24gfHwgJ1ZpZXcgc2hvcnQgZXhhbXBsZSB2aWRlb3MgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRpb25zIGNhbiB3b3JrIGZvciB5b3U6J1wiPjwvcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzZWN0aW9uLXJvd1wiICBbbmdDbGFzc109XCJ7ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJzogaW50ZWdyYXRpb25zPy5pdGVtcz8ubGVuZ3RoID09PSAxIH1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW50ZWdyYXRpb25zPy5pdGVtcz8ubGVuZ3RoID4gMDsgZWxzZSBub0ludGVncmF0aW9uc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW50ZWdyYXRpb24gb2YgaW50ZWdyYXRpb25zPy5pdGVtc1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpbnRlZ3JhdGlvbj8uaW1hZ2VfdXJsIHx8IGludGVncmF0aW9uPy50aXRsZSB8fCBpbnRlZ3JhdGlvbj8uZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbnRlZ3JhdGlvbj8udmlkZW9fdXJsICYmIGludGVncmF0aW9uPy52aWRlb191cmwuaW5jbHVkZXMoJ2h0dHBzJyk7IGVsc2Ugbm9WaWRlb1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImludGVncmF0aW9uPy52aWRlb191cmxcIlxuICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImludGVncmF0aW9uPy5pbWFnZV91cmxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZE1pY3Jvc29mdFZpZGVvKGludGVncmF0aW9uPy52aWRlb191cmwpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibG9hZE1pY3Jvc29mdFZpZGVvKGludGVncmF0aW9uPy52aWRlb191cmwpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJob3ctaXQtd29ya3MtaW1nXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiSW50ZWdyYXRpb24gVmlkZW8gVGh1bWJuYWlsXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9WaWRlbz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInTm8gdmlkZW8gZm91bmQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvcHctbm8tZGF0YT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbnRlZ3JhdGlvbnM+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0ludGVncmF0aW9uLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+PC9wdy1uby1kYXRhPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwvc2VjdGlvbj5cbiA8c2VjdGlvbiBjbGFzcz1cImNsb3Vkb2xpdmUtZ3VpZGUtc2VjdGlvbiBiZy13aGl0ZSBweS01IHNlY3Rpb24tb3V0ZXJcIiAqbmdJZj1cInNob3dJbnRlZ3JhdGlvbnMoKVwiPlxuICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1zdGFydFwiPlxuICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LW1kLXN0YXJ0IHRleHQtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJndWlkZS10aXRsZSBtYi0zXCI+e3tndWlkZURhdGE/Lml0ZW1zWzBdPy50aXRsZSB8fCAnLS1VUERBVEUgTUUgT04gVEhFIEFETUlOL0RPTUFJTlMgTU9EVUxFLS0nfX08L2gxPlxuICAgICAgICAgIDxpICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cImZhIGZhLWVkaXQgaW4tcGFnZS1lZGl0LWljb24gdGV4dC1ibGFjayBtcy00IG10LTMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuR3VpZGVzTW9kYWwoZ3VpZGVzRWRpdE1vZGFsKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3Blbkd1aWRlc01vZGFsKGd1aWRlc0VkaXRNb2RhbClcIlxuICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIm9wZW5HdWlkZXNNb2RhbChndWlkZXNFZGl0TW9kYWwpXCJcbiAgICAgICAgICB0aXRsZT1cIkVkaXQgSW50ZWdyYXRpb25zIFNlY3Rpb25cIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZ3VpZGUtc3VidGV4dFwiXG4gICAgICAgICAgW2lubmVySFRNTF09XCJndWlkZURhdGE/Lml0ZW1zWzBdPy5kZXNjcmlwdGlvbiB8fCAnLS1VUERBVEUgTUUgT04gVEhFIEFETUlOL0RPTUFJTlMgTU9EVUxFLS0nXCI+XG4gICAgICAgPC9wPlxuICAgICAgICAgIDxhIGNsYXNzPVwidmF1bHQtYnRuXCJcbiAgICAgICAgICAgIFtocmVmXT1cImd1aWRlRGF0YT8uaXRlbXNbMF0/Lmd1aWRlX3VybFwiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICAgICAge3tndWlkZURhdGE/Lml0ZW1zWzBdPy5idXR0b25fdGV4dCB8fCAnVmlldyB0aGUgZ3VpZGUnfX1cbiAgICAgICAgICA8L2E+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImd1aWRlRGF0YT8uaXRlbXNbMF0/LmltYWdlX3VybCAmJiAhZ3VpZGVEYXRhPy5pdGVtc1swXS5pbWFnZV91cmwuaW5jbHVkZXMoJ2RlZmF1bHQtcGhvdG8uanBnJyk7IGVsc2Ugbm9EYXRhVGVtcGxhdGVcIj5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBbc3JjXT1cImd1aWRlRGF0YT8uaXRlbXNbMF0uaW1hZ2VfdXJsXCJcbiAgICAgICAgICAgIGFsdD1cIkd1aWRlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3VpZGUtaW1nXCIgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0RhdGFUZW1wbGF0ZT5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJy0tQUREIE1FIE9OIFRIRSBBRE1JTi9ET01BSU5TIE1PRFVMRS0tJyB8IHRyYW5zbG9jb1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgPC9kaXY+XG4gICAgIDwvZGl2PlxuIDwvZGl2PlxuIDwvc2VjdGlvbj5cbjwvZGl2PlxuXG48cHctcmVzb3VyY2Utbm90ZS1jYXJkICpuZ0lmPVwicmVzb3VyY2VQb3N0VGFnPy50YWdfY2F0ZWdvcnlfaWRcIiBbY2F0ZWdvcnlJZF09XCJyZXNvdXJjZVBvc3RUYWc/LnRhZ19jYXRlZ29yeV9pZFwiIFt0YWddPVwicmVzb3VyY2VQb3N0VGFnXCIgW3JlbGVhc2VIZWFkZXJdPVwidHJ1ZVwiIFtyZXNvdXJjZVRpdGxlXT1cInJlc291cmNlUG9zdFRhZz8udGl0bGVcIiBbdXNlcl09XCJ1c2VyXCIgW3VzZXJMb2dnZWRJbl09XCJ1c2VyTG9nZ2VkSW5cIj48L3B3LXJlc291cmNlLW5vdGUtY2FyZD5cblxuPHB3LXRyaWFsLTQtY29udGFjdC11cyBbdXNlcl09XCJ1c2VyXCIgW3VzZXJMb2dnZWRJbl09XCJ1c2VyTG9nZ2VkSW5cIj48L3B3LXRyaWFsLTQtY29udGFjdC11cz5cblxuXG5cbjxuZy10ZW1wbGF0ZSAjZWRpdEludGVncmF0aW9uc01vZGFsIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RWRpdCBJbnRlZ3JhdGlvbnMgU2VjdGlvbjwvaDU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+PC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBmb3I9XCJpbnRlZ3JhdGlvbi10aXRsZVwiPlRpdGxlPC9sYWJlbD5cbiAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiaW50ZWdyYXRpb24tdGl0bGVcIiBbKG5nTW9kZWwpXT1cImVkaXRpbmdJbnRlZ3JhdGlvbnMudGl0bGVcIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBmb3I9XCJpbnRlZ3JhdGlvbi1kZXNjcmlwdGlvblwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiaW50ZWdyYXRpb24tZGVzY3JpcHRpb25cIiByb3dzPVwiM1wiIFsobmdNb2RlbCldPVwiZWRpdGluZ0ludGVncmF0aW9ucy5kZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcEludGVncmF0aW9uSXRlbXMoJGV2ZW50KVwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaW50ZWdyYXRpb24gb2YgZWRpdGluZ0ludGVncmF0aW9ucy5pdGVtczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiYm9yZGVyIHAtMyBtYi0zXCIgY2RrRHJhZz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMFwiIGZvcj1cImludGVncmF0aW9uLWl0ZW1cIj5JbnRlZ3JhdGlvbiBJdGVtPC9sYWJlbD5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJhcnMgY3Vyc29yLW1vdmUgaW4tcGFnZS1iYXJzLWljb25cIiBjZGtEcmFnSGFuZGxlPjwvaT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW2Zvcl09XCInaW50ZWdyYXRpb24taXRlbS10aXRsZS0nICsgaVwiPlRpdGxlPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtpZF09XCInaW50ZWdyYXRpb24taXRlbS10aXRsZS0nICsgaVwiIFsobmdNb2RlbCldPVwiaW50ZWdyYXRpb24udGl0bGVcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW2Zvcl09XCInaW50ZWdyYXRpb24taXRlbS1kZXNjcmlwdGlvbi0nICsgaVwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtpZF09XCInaW50ZWdyYXRpb24taXRlbS1kZXNjcmlwdGlvbi0nICsgaVwiIFsobmdNb2RlbCldPVwiaW50ZWdyYXRpb24uZGVzY3JpcHRpb25cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW2Zvcl09XCInaW50ZWdyYXRpb24taXRlbS1ibG9nLXVybC0nICsgaVwiPkJsb2cgVVJMPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtpZF09XCInaW50ZWdyYXRpb24taXRlbS1ibG9nLXVybC0nICsgaVwiIFsobmdNb2RlbCldPVwiaW50ZWdyYXRpb24uYmxvZ191cmxcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW2Zvcl09XCInaW50ZWdyYXRpb24taXRlbS1pbWFnZS11cmwtJyArIGlcIj5JbWFnZSBVUkw8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2lkXT1cIidpbnRlZ3JhdGlvbi1pdGVtLWltYWdlLXVybC0nICsgaVwiIFsobmdNb2RlbCldPVwiaW50ZWdyYXRpb24uaW1hZ2VfdXJsXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG1iLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBbZm9yXT1cIidpbnRlZ3JhdGlvbi1pdGVtLXZpZGVvLXVybC0nICsgaVwiPlZpZGVvIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbaWRdPVwiJ2ludGVncmF0aW9uLWl0ZW0tdmlkZW8tdXJsLScgKyBpXCIgWyhuZ01vZGVsKV09XCJpbnRlZ3JhdGlvbi52aWRlb191cmxcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIHRleHQtZGFuZ2VyIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInJlbW92ZUludGVncmF0aW9uSXRlbShpKVwiICAgKGtleWRvd24uZW50ZXIpPVwicmVtb3ZlSW50ZWdyYXRpb25JdGVtKGkpXCJcbiAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJyZW1vdmVJbnRlZ3JhdGlvbkl0ZW0oaSlcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLXNtXCIgKGNsaWNrKT1cImFkZEludGVncmF0aW9uSXRlbSgpXCI+KyBBZGQgSW50ZWdyYXRpb248L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInNhdmVJbnRlZ3JhdGlvbnMobW9kYWwpXCI+U2F2ZTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cblxuXG48bmctdGVtcGxhdGUgI2d1aWRlc0VkaXRNb2RhbCBsZXQtbW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPkVkaXQgR3VpZGVzPC9oNT5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj48L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8aDQgY2xhc3M9XCJtYi0zXCI+R3VpZGVzIFNlY3Rpb248L2g0PlxuXG4gICAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BHdWlkZXMoJGV2ZW50KVwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZ3VpZGUgb2YgZWRpdGluZ0d1aWRlcy5pdGVtczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiYm9yZGVyIHAtMyBtYi0zXCIgY2RrRHJhZz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW2Zvcl09XCInZ3VpZGUtdGl0bGUtJyArIGlcIj5UaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbaWRdPVwiJ2d1aWRlLXRpdGxlLScgKyBpXCIgWyhuZ01vZGVsKV09XCJndWlkZS50aXRsZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBbZm9yXT1cIidndWlkZS1idXR0b24tdGV4dC0nICsgaVwiPkJ1dHRvbiBUZXh0PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtpZF09XCInZ3VpZGUtYnV0dG9uLXRleHQtJyArIGlcIiBbKG5nTW9kZWwpXT1cImd1aWRlLmJ1dHRvbl90ZXh0XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIFtmb3JdPVwiJ2d1aWRlLWltYWdlLXVybC0nICsgaVwiPkltYWdlIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbaWRdPVwiJ2d1aWRlLWltYWdlLXVybC0nICsgaVwiIFsobmdNb2RlbCldPVwiZ3VpZGUuaW1hZ2VfdXJsXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIFtmb3JdPVwiJ2d1aWRlLXVybC0nICsgaVwiPkd1aWRlIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbaWRdPVwiJ2d1aWRlLXVybC0nICsgaVwiIFsobmdNb2RlbCldPVwiZ3VpZGUuZ3VpZGVfdXJsXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBbZm9yXT1cIidndWlkZS1kZXNjcmlwdGlvbi0nICsgaVwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtpZF09XCInZ3VpZGUtZGVzY3JpcHRpb24tJyArIGlcIiByb3dzPVwiM1wiIFsobmdNb2RlbCldPVwiZ3VpZGUuZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggdGV4dC1kYW5nZXIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVtb3ZlR3VpZGUoaSlcIiAoa2V5ZG93bi5lbnRlcik9XCJyZW1vdmVHdWlkZShpKVwiIChrZXlkb3duLnNwYWNlKT1cInJlbW92ZUd1aWRlKGkpXCI+PC9pPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXJzIGN1cnNvci1tb3ZlXCIgY2RrRHJhZ0hhbmRsZT48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTJcIiAoY2xpY2spPVwiYWRkR3VpZGUoKVwiPisgQWRkIEd1aWRlPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzYXZlR3VpZGVzKG1vZGFsKVwiPlNhdmU8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtaW50ZWdyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9yZXNvdXJjZS1tb2R1bGUvc3JjL2xpYi9wdWJsaWMvY29tcG9uZW50cy9yZXNvdXJjZS1pbnRlZ3JhdGlvbi9yZXNvdXJjZS1pbnRlZ3JhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Jlc291cmNlLW1vZHVsZS9zcmMvbGliL3B1YmxpYy9jb21wb25lbnRzL3Jlc291cmNlLWludGVncmF0aW9uL3Jlc291cmNlLWludGVncmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFFMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBa0IsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVNUQs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SSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQ3ZELElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLGlCQUFpQixDQUN6QixDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDdEMsQ0FBQzsrR0E5UlEsNEJBQTRCO21HQUE1Qiw0QkFBNEIsc05DekJ6QyxxbGFBZ1JBOzs0RkR2UGEsNEJBQTRCO2tCQVJ4QyxTQUFTOytCQUNJLHlCQUF5QjsyT0FRQyxxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBBZG1pblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvYWRtaW4tbW9kdWxlLXV0aWxzJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBUYWdTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDb21wYW55RGF0YSwgUmVzb3VyY2UsIFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL3NoYXJlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbmltcG9ydCB7IFJlc291cmNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXJlc291cmNlLWludGVncmF0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVzb3VyY2UtaW50ZWdyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogW1xuICAgICAgICAnLi9yZXNvdXJjZS1pbnRlZ3JhdGlvbi5jb21wb25lbnQuc2NzcycsXG4gICAgICAgICcuLi9yZXNvdXJjZXMvcmVzb3VyY2VzLXNoYXJlZC5jb21wb25lbnQuc2NzcydcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFJlc291cmNlSW50ZWdyYXRpb25Db21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKCdlZGl0SW50ZWdyYXRpb25zTW9kYWwnKSBlZGl0SW50ZWdyYXRpb25zTW9kYWw6IFRlbXBsYXRlUmVmPEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50PjtcbiAgICBlZGl0aW5nSW50ZWdyYXRpb25zO1xuICAgIGRpc3RyaWJ1dG9yc0RhdGEgPSBDb21wYW55RGF0YT8uZGlzdHJpYnV0b3JzRGF0YTtcbiAgICB2ZW5kb3JzRGF0YSA9IENvbXBhbnlEYXRhPy52ZW5kb3JzRGF0YTtcblxuICAgIHRleHRDb2xvciA9IHRoaXMuYXBwQ29uZmlnPy5jb2xvcl9jb2Rlcz8udGV4dDtcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgbWFzdGVyU3Vic2NyaXB0aW9uSWQgPSB0aGlzLmFwcENvbmZpZy5tYXN0ZXJfc3Vic2NyaXB0aW9uLnN1YnNjcmlwdGlvbl9pZDtcbiAgICBwb3N0czogUmVzb3VyY2VbXSA9IFtdO1xuICAgIGRpc3RyaWJ1dGVyUG9zdHMgPSBbXTtcbiAgICB1c2VyTG9nZ2VkSW46IGJvb2xlYW47XG4gICAgYmxvZ1Bvc3RUYWc7XG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcbiAgICByZXNvdXJjZVBvc3RUYWc7XG4gICAgYmxvZ1Bvc3RWZW5kb3JUYWc7XG4gICAgaXNNYXN0ZXJTdWJzY3JpcHRpb247XG5cbiAgICBpbnRlZ3JhdGlvbnMgPSB0aGlzLmFwcENvbmZpZz8ucGFnZXNfY29uZmlnPy5pbnRlZ3JhdGlvbnM7XG5cbiAgICByZWxlYXNlTm90ZXNMaW5rID0gJy9yZXNvdXJjZXMvcHJvZHVjdC1yZWxlYXNlLW5vdGVzJztcbiAgICBxMU5vdGVzTGluayA9ICcvcmVzb3VyY2VzL3Byb2R1Y3QtcmVsZWFzZS1xMS0yMDI1JztcbiAgICBxM05vdGVzTGluayA9ICcvcmVzb3VyY2VzL3Byb2R1Y3QtcmVsZWFzZS1xMy0yMDI0JztcbiAgICBxNE5vdGVzTGluayA9ICcvcmVzb3VyY2VzL3Byb2R1Y3QtcmVsZWFzZS1xNC0yMDI0JztcbiAgICBjb21wYW55TmFtZTtcblxuICAgIHZpZGVvV2ViaW5hckxvYWRlZCA9IGZhbHNlO1xuICAgIHZpZGVvRGVtb0xvYWRlZCA9IGZhbHNlO1xuICAgIHlvdXR1YmVWaWRlb0lkID0gJ1I3VmsyMTl6YmhBJztcbiAgICB2aWRlb1RpdGxlID0gJ0Nsb3VkT2xpdmUgT3ZlcnZpZXcnO1xuICAgIHNhbml0aXplZE1pY3Jvc29mdFZpZGVvVXJsOiBTYWZlUmVzb3VyY2VVcmw7XG4gICAgc2FuaXRpemVkS2VzeWFWaWRlb1VybDogU2FmZVJlc291cmNlVXJsO1xuICAgIGludGVncmF0aW9uQ291bnREaXNwbGF5OiBudW1iZXI7XG4gICAgY29udGFjdFVzVXJsID0gdGhpcy5hcHBDb25maWc/LnBhZ2VzX2NvbmZpZz8uY29udGFjdF91cz8udXJsO1xuICAgIHRhZ0NhdGVnb3J5O1xuICAgIHRvdGFsUG9zdHM6IG51bWJlcjtcblxuICAgIGd1aWRlRGF0YSA9IHRoaXMuYXBwQ29uZmlnPy5wYWdlc19jb25maWc/Lmd1aWRlcztcbiAgICBlZGl0aW5nR3VpZGVzID0geyBpdGVtczogW10gfTtcbiAgICB1c2VyOiBVc2VyO1xuXG4gICAgY2FuRWRpdFJlc291cmNlc1ZhbHVlID0gZmFsc2U7XG4gICAgZG9tYWluSWQgPSB0aGlzLmFwcENvbmZpZy5kb21haW5faWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZVNlcnZpY2U6IFJlc291cmNlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRhZ1NlcnZpY2U6IFRhZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNvbXBhbnlOYW1lID0gdGhpcy5hcHBDb25maWcuY29tcGFueS5uYW1lO1xuXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10ZXh0LWNvbG9yJywgdGhpcy50ZXh0Q29sb3IpO1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb25JZCgpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFRva2VuJCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2VyTG9nZ2VkSW4gPSAhIXJlcztcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJMb2dnZWRJbikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0kKCdwcm9kdWN0Jykuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXMgPyBKU09OLnBhcnNlKHJlcykgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gZGF0YT8uc3Vic2NyaXB0aW9uSWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VySW5mbygpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyID0gZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYW5FZGl0UmVzb3VyY2VzVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUYWdzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGFncygpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRhZ1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXRBbGxUYWdDYXRlZ29yaWVzKHsgc2VhcmNoOiAnSW50ZWdyYXRpb25zJyB9LCB0aGlzLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NhdGVnb3J5ID0gcmVzcG9uc2UudGFnX2NhdGVnb3JpZXNbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQb3N0VGFncygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3BlbkVkaXRJbnRlZ3JhdGlvbnNNb2RhbChtb2RhbFJlZikge1xuICAgICAgICB0aGlzLmVkaXRpbmdJbnRlZ3JhdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuaW50ZWdyYXRpb25zKSk7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWxSZWYsIHtcbiAgICAgICAgICAgIHNpemU6ICdsZycsXG4gICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG93SW50ZWdyYXRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy51c2VyTG9nZ2VkSW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5ndWlkZURhdGE/Lml0ZW1zKSAmJiB0aGlzLmd1aWRlRGF0YS5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmd1aWRlRGF0YS5pdGVtc1swXTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgISFpdGVtPy50aXRsZSB8fFxuICAgICAgICAgICAgICAgICEhaXRlbT8uZGVzY3JpcHRpb24gfHxcbiAgICAgICAgICAgICAgICAhIWl0ZW0/Lmd1aWRlX3VybCB8fFxuICAgICAgICAgICAgICAgICghIWl0ZW0/LmltYWdlX3VybCAmJiAhaXRlbS5pbWFnZV91cmwuaW5jbHVkZXMoJ2RlZmF1bHQtaW1hZ2UucG5nJykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9zdFRhZ3MoKSB7XG4gICAgICAgIHRoaXMudGFnU2VydmljZVxuICAgICAgICAgICAgLmdldFRhZ3NCeVR5cGUoJ3Bvc3RfY2F0ZWdvcmllcycsIHt9LCB0aGlzLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlUG9zdFRhZyA9IHJlc3BvbnNlLnRhZ3MuZmluZChcbiAgICAgICAgICAgICAgICAgICAgdGFnID0+IHRhZy5uYW1lID09PSAnUHJvZHVjdCBSZWxlYXNlIE5vdGVzJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5ibG9nUG9zdFRhZyA9IHJlc3BvbnNlLnRhZ3MuZmluZChcbiAgICAgICAgICAgICAgICAgICAgdGFnID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcubmFtZSA9PT0gJ0ludGVncmF0ZWQgRGlzdHJpYnV0b3JzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnRhZ19jYXRlZ29yeV9pZCA9PT0gdGhpcy50YWdDYXRlZ29yeT8uaWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvZ1Bvc3RWZW5kb3JUYWcgPSByZXNwb25zZS50YWdzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIHRhZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnLm5hbWUgPT09ICdJbnRlZ3JhdGVkIFZlbmRvcnMnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcudGFnX2NhdGVnb3J5X2lkID09PSB0aGlzLnRhZ0NhdGVnb3J5Py5pZFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAvLyB1c2UgZm9ya0pvaW4gdG8gZmV0Y2ggYm90aCBzZXRzIG9mIHBvc3RzIGluIHBhcmFsbGVsXG4gICAgICAgICAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgICAgICAgICB2ZW5kb3JSZXNwb25zZTogdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0UHVibGljUG9zdHMoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgMTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxvZ1Bvc3RWZW5kb3JUYWc/LmlkXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dG9yUmVzcG9uc2U6IHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldFB1YmxpY1Bvc3RzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRFZmZlY3RpdmVTdWJzY3JpcHRpb25JZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDEwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJsb2dQb3N0VGFnPy5pZFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSkuc3Vic2NyaWJlKCh7IHZlbmRvclJlc3BvbnNlLCBkaXN0cmlidXRvclJlc3BvbnNlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N0cyA9IHZlbmRvclJlc3BvbnNlLnBvc3RzLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShiLnB1Ymxpc2hlZF9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5wdWJsaXNoZWRfYXQpLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzdHJpYnV0ZXJQb3N0cyA9IGRpc3RyaWJ1dG9yUmVzcG9uc2UucG9zdHMuc29ydChcbiAgICAgICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGIucHVibGlzaGVkX2F0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLnB1Ymxpc2hlZF9hdCkuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVuZG9yQ291bnQgPSB2ZW5kb3JSZXNwb25zZT8ub2JqZWN0X2NvdW50ID8/IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RyaWJ1dG9yQ291bnQgPSBkaXN0cmlidXRvclJlc3BvbnNlPy5vYmplY3RfY291bnQgPz8gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWwgPSB2ZW5kb3JDb3VudCArIGRpc3RyaWJ1dG9yQ291bnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkNvdW50RGlzcGxheSA9IHRvdGFsID09PSAwID8gMCA6IE1hdGguY2VpbCh0b3RhbCAvIDEwKSAqIDEwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRNaWNyb3NvZnRWaWRlbyh2aWRlb1VybCkge1xuICAgICAgICB3aW5kb3cub3Blbih2aWRlb1VybCwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7XG4gICAgfVxuXG4gICAgbG9hZEtlc2V5YVZpZGVvKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBiYXNlVXJsID0gYGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dGhpcy55b3V0dWJlVmlkZW9JZH0/YXV0b3BsYXk9MWA7XG4gICAgICAgIC8vIGJhc2VVcmwgaXMgYSB0cnVzdGVkIGludGVybmFsIHNvdXJjZSAoZS5nLiBZb3VUdWJlIGVtYmVkIFVSTClcbiAgICAgICAgdGhpcy5zYW5pdGl6ZWRLZXN5YVZpZGVvVXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGJhc2VVcmwpOyAvLyBOT1NPTkFSXG4gICAgICAgIHRoaXMudmlkZW9XZWJpbmFyTG9hZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhZGRJbnRlZ3JhdGlvbkl0ZW0oKSB7XG4gICAgICAgIHRoaXMuZWRpdGluZ0ludGVncmF0aW9ucy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICAgIGJsb2dfdXJsOiAnJyxcbiAgICAgICAgICAgIGltYWdlX3VybDogJycsXG4gICAgICAgICAgICB2aWRlb191cmw6ICcnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZUludGVncmF0aW9uSXRlbShpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZWRpdGluZ0ludGVncmF0aW9ucy5pdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGRyb3BJbnRlZ3JhdGlvbkl0ZW1zKGV2ZW50KSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmVkaXRpbmdJbnRlZ3JhdGlvbnMuaXRlbXMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgfVxuXG4gICAgc2F2ZUludGVncmF0aW9ucyhtb2RhbFJlZikge1xuICAgICAgICBjb25zdCB1cGRhdGVkSW50ZWdyYXRpb25zID0ge1xuICAgICAgICAgICAgLi4udGhpcy5lZGl0aW5nSW50ZWdyYXRpb25zXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVEb21haW5Db25maWcodGhpcy5kb21haW5JZCwge1xuICAgICAgICAgICAgICAgIGludGVncmF0aW9uczogdXBkYXRlZEludGVncmF0aW9ucyxcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZWdyYXRpb25zID0gdXBkYXRlZEludGVncmF0aW9ucztcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoJ0ludGVncmF0aW9ucyB1cGRhdGVkJyk7XG4gICAgICAgICAgICAgICAgbW9kYWxSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhdmVHdWlkZXMobW9kYWxSZWYpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEd1aWRlcyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZWRpdGluZ0d1aWRlc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlRG9tYWluQ29uZmlnKHRoaXMuZG9tYWluSWQsIHtcbiAgICAgICAgICAgICAgICBndWlkZXM6IHVwZGF0ZWRHdWlkZXMsXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmdldEVmZmVjdGl2ZVN1YnNjcmlwdGlvbklkKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmd1aWRlRGF0YSA9IHVwZGF0ZWRHdWlkZXM7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdHdWlkZXMgdXBkYXRlZCcpO1xuICAgICAgICAgICAgICAgIG1vZGFsUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcGVuR3VpZGVzTW9kYWwodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nR3VpZGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmd1aWRlRGF0YSA/PyB7IGl0ZW1zOiBbXSB9KSk7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGVtcGxhdGUsIHsgc2l6ZTogJ3hsJyB9KTtcbiAgICB9XG5cbiAgICBhZGRHdWlkZSgpIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nR3VpZGVzLml0ZW1zLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgICAgYnV0dG9uX3RleHQ6ICcnLFxuICAgICAgICAgICAgaW1hZ2VfdXJsOiAnJyxcbiAgICAgICAgICAgIGd1aWRlX3VybDogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlR3VpZGUoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLmVkaXRpbmdHdWlkZXMuaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBkcm9wR3VpZGVzKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZWRpdGluZ0d1aWRlcy5pdGVtcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB9XG5cbiAgICAvKiogSGVscGVyIG1ldGhvZCB0byBnZXQgZWZmZWN0aXZlIHN1YnNjcmlwdGlvbiBJRCAqL1xuICAgIHByaXZhdGUgZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIEhlbHBlclNlcnZpY2UuZ2V0RWZmZWN0aXZlU3Vic2NyaXB0aW9uSWQoXG4gICAgICAgICAgICB0aGlzLnVzZXIsXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkLFxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJTdWJzY3JpcHRpb25JZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2FuRWRpdFJlc291cmNlc1ZhbHVlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy51c2VyTG9nZ2VkSW4gJiYgdGhpcy51c2VyKSB7XG4gICAgICAgICAgICB0aGlzLmNhbkVkaXRSZXNvdXJjZXNWYWx1ZSA9IEhlbHBlclNlcnZpY2UuY2FuRWRpdFJlc291cmNlcyhcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXIsXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyTG9nZ2VkSW4sXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FuRWRpdFJlc291cmNlc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5FZGl0UmVzb3VyY2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5FZGl0UmVzb3VyY2VzVmFsdWU7XG4gICAgfVxufVxuIiwiPHB3LXJlc291cmNlLWhlYWRlciBbdXNlcl09XCJ1c2VyXCIgW3VzZXJMb2dnZWRJbl09XCJ1c2VyTG9nZ2VkSW5cIj48L3B3LXJlc291cmNlLWhlYWRlcj5cbjxwdy1pbnRlZ3JhdGlvbi10b3AtYmFubmVyPjwvcHctaW50ZWdyYXRpb24tdG9wLWJhbm5lcj5cbjxkaXYgY2xhc3M9XCJiZy13aGl0ZVwiPlxuICA8c2VjdGlvbiBjbGFzcz1cImNsb3Vkb2xpdmUtZ3VpZGUtc2VjdGlvbiBiZy13aGl0ZSBweS01IHNlY3Rpb24tb3V0ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIHNlYy1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgICpuZ0lmPVwiaXNMb2FkZWQgJiYgaW50ZWdyYXRpb25Db3VudERpc3BsYXkgPiAwXCI+XG4gICAgICAgIDxoMSBjbGFzcz1cImludC10aXRsZSBtYi0wXCI+e3sgaW50ZWdyYXRpb25Db3VudERpc3BsYXkgfX0rIGludGVncmF0aW9ucyAoJiBjb3VudGluZyk8L2gxPlxuICAgICAgICA8cCBjbGFzcz1cImludC10ZXh0XCI+IFNlYXJjaCB0aGUgY3VycmVudCBsaXN0IG9mIHt7Y29tcGFueU5hbWV9fSB2ZW5kb3IgYW5kIGRpc3RyaWJ1dG9yIGludGVncmF0aW9ucyBiZWxvdy4gPGJyIC8+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPHB3LXJlc291cmNlLWNvbXBhbnktY2FyZCAqbmdJZj1cImlzTG9hZGVkXCIgW2hlYWRlcl09XCInaW50ZWdyYXRlZCB2ZW5kb3JzJ1wiXG4gICAgICAgIChnZXRQb3N0cyk9XCJnZXRQb3N0VGFncygpXCJcbiAgICAgICAgW2ludGVncmF0aW9uQ291bnREaXNwbGF5XT1cImludGVncmF0aW9uQ291bnREaXNwbGF5XCJcbiAgICAgICAgW2RhdGFdPVwicG9zdHNcIlxuICAgICAgICBbdXNlcl09XCJ1c2VyXCJcbiAgICAgICAgW3VzZXJMb2dnZWRJbl09XCJ1c2VyTG9nZ2VkSW5cIj48L3B3LXJlc291cmNlLWNvbXBhbnktY2FyZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAgICAgICAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpbnRlZ3JhdGlvbkNvdW50RGlzcGxheSA9PT0gMCAmJiBpc0xvYWRlZFwiPlxuICAgICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInUmVzb3VyY2UuTm9EYXRhTWVzc2FnZScgfCB0cmFuc2xvY29cIi8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC0zIG10LTRcIiAqbmdJZj1cImlzTG9hZGVkICYmIGludGVncmF0aW9uQ291bnREaXNwbGF5ID4gMFwiPlxuICAgICAgICA8cCBjbGFzcz1cInNlZS1zcGFuXCI+IERvbuKAmXQgc2VlIHdoYXQgeW914oCZcmUgYWZ0ZXI/IDxhIFtocmVmXT1cImNvbnRhY3RVc1VybFwiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgY2xhc3M9XCJpbnQtc3BhbiB0ZWFtLXNwYW5cIj5TcGVhayB3aXRoIG91ciB0ZWFtIHRvIHJlcXVlc3QgYSBjb25uZWN0aW9uID5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwvc2VjdGlvbj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJjbG91ZG9saXZlLWd1aWRlLXNlY3Rpb24gYmctd2hpdGUgcHktNSBzZWN0aW9uLW91dGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgPHB3LXJlc291cmNlLWNvbXBhbnktY2FyZCBbaGVhZGVyXT1cIidpbnRlZ3JhdGVkIERpc3RyaWJ1dG9ycydcIlxuICAgICAgW2ludGVncmF0aW9uQ291bnREaXNwbGF5XT1cImludGVncmF0aW9uQ291bnREaXNwbGF5XCJcbiAgICAgICpuZ0lmPVwiaXNMb2FkZWRcIlxuICAgICAgICBbdmVuZG9yXT1cInRydWVcIlxuICAgICAgICAoZ2V0UG9zdHMpPVwiZ2V0UG9zdFRhZ3MoKVwiXG4gICAgICAgIFtkYXRhXT1cImRpc3RyaWJ1dGVyUG9zdHNcIlxuICAgICAgICBbdXNlcl09XCJ1c2VyXCJcbiAgICAgICAgW3VzZXJMb2dnZWRJbl09XCJ1c2VyTG9nZ2VkSW5cIj48L3B3LXJlc291cmNlLWNvbXBhbnktY2FyZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAgICAgKm5nSWY9XCIhaXNMb2FkZWRcIj5cbiAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImludGVncmF0aW9uQ291bnREaXNwbGF5ID09PSAwICYmIGlzTG9hZGVkXCI+XG4gICAgICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ1Jlc291cmNlLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCIvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICA8L3NlY3Rpb24+XG4gIDxzZWN0aW9uIGNsYXNzPVwiY2xvdWRvbGl2ZS1ndWlkZS1zZWN0aW9uIGJnLXdoaXRlIHB5LTUgc2VjdGlvbi1vdXRlclwiICpuZ0lmPVwiaW50ZWdyYXRpb25zXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaG93LWl0LXdvcmtzLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgIDxoMSBjbGFzcz1cIml0LXdvcmtzLXRpdGxlIG1iLTBcIj57e2ludGVncmF0aW9ucz8udGl0bGUgfHwgJ0hvdyBpdCB3b3Jrcyd9fTwvaDE+XG4gICAgICAgICAgPGkgKm5nSWY9XCJjYW5FZGl0UmVzb3VyY2VzVmFsdWVcIlxuICAgICAgICAgIGNsYXNzPVwiZmEgZmEtZWRpdCBpbi1wYWdlLWVkaXQtaWNvbiB0ZXh0LWJsYWNrIG1zLTQgbXQtMyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5FZGl0SW50ZWdyYXRpb25zTW9kYWwoZWRpdEludGVncmF0aW9uc01vZGFsKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3BlbkVkaXRJbnRlZ3JhdGlvbnNNb2RhbChlZGl0SW50ZWdyYXRpb25zTW9kYWwpXCJcbiAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvcGVuRWRpdEludGVncmF0aW9uc01vZGFsKGVkaXRJbnRlZ3JhdGlvbnNNb2RhbClcIlxuICAgICAgICAgIHRpdGxlPVwiRWRpdCBJbnRlZ3JhdGlvbnMgU2VjdGlvblwiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwIGNsYXNzPVwicGItMjBcIiBbaW5uZXJIVE1MXT1cImludGVncmF0aW9ucz8uZGVzY3JpcHRpb24gfHwgJ1ZpZXcgc2hvcnQgZXhhbXBsZSB2aWRlb3MgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRpb25zIGNhbiB3b3JrIGZvciB5b3U6J1wiPjwvcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzZWN0aW9uLXJvd1wiICBbbmdDbGFzc109XCJ7ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJzogaW50ZWdyYXRpb25zPy5pdGVtcz8ubGVuZ3RoID09PSAxIH1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW50ZWdyYXRpb25zPy5pdGVtcz8ubGVuZ3RoID4gMDsgZWxzZSBub0ludGVncmF0aW9uc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW50ZWdyYXRpb24gb2YgaW50ZWdyYXRpb25zPy5pdGVtc1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpbnRlZ3JhdGlvbj8uaW1hZ2VfdXJsIHx8IGludGVncmF0aW9uPy50aXRsZSB8fCBpbnRlZ3JhdGlvbj8uZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbnRlZ3JhdGlvbj8udmlkZW9fdXJsICYmIGludGVncmF0aW9uPy52aWRlb191cmwuaW5jbHVkZXMoJ2h0dHBzJyk7IGVsc2Ugbm9WaWRlb1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImludGVncmF0aW9uPy52aWRlb191cmxcIlxuICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImludGVncmF0aW9uPy5pbWFnZV91cmxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZE1pY3Jvc29mdFZpZGVvKGludGVncmF0aW9uPy52aWRlb191cmwpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibG9hZE1pY3Jvc29mdFZpZGVvKGludGVncmF0aW9uPy52aWRlb191cmwpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJob3ctaXQtd29ya3MtaW1nXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiSW50ZWdyYXRpb24gVmlkZW8gVGh1bWJuYWlsXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9WaWRlbz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInTm8gdmlkZW8gZm91bmQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvcHctbm8tZGF0YT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbnRlZ3JhdGlvbnM+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0ludGVncmF0aW9uLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+PC9wdy1uby1kYXRhPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwvc2VjdGlvbj5cbiA8c2VjdGlvbiBjbGFzcz1cImNsb3Vkb2xpdmUtZ3VpZGUtc2VjdGlvbiBiZy13aGl0ZSBweS01IHNlY3Rpb24tb3V0ZXJcIiAqbmdJZj1cInNob3dJbnRlZ3JhdGlvbnMoKVwiPlxuICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1zdGFydFwiPlxuICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LW1kLXN0YXJ0IHRleHQtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJndWlkZS10aXRsZSBtYi0zXCI+e3tndWlkZURhdGE/Lml0ZW1zWzBdPy50aXRsZSB8fCAnLS1VUERBVEUgTUUgT04gVEhFIEFETUlOL0RPTUFJTlMgTU9EVUxFLS0nfX08L2gxPlxuICAgICAgICAgIDxpICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cImZhIGZhLWVkaXQgaW4tcGFnZS1lZGl0LWljb24gdGV4dC1ibGFjayBtcy00IG10LTMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuR3VpZGVzTW9kYWwoZ3VpZGVzRWRpdE1vZGFsKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3Blbkd1aWRlc01vZGFsKGd1aWRlc0VkaXRNb2RhbClcIlxuICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIm9wZW5HdWlkZXNNb2RhbChndWlkZXNFZGl0TW9kYWwpXCJcbiAgICAgICAgICB0aXRsZT1cIkVkaXQgSW50ZWdyYXRpb25zIFNlY3Rpb25cIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZ3VpZGUtc3VidGV4dFwiXG4gICAgICAgICAgW2lubmVySFRNTF09XCJndWlkZURhdGE/Lml0ZW1zWzBdPy5kZXNjcmlwdGlvbiB8fCAnLS1VUERBVEUgTUUgT04gVEhFIEFETUlOL0RPTUFJTlMgTU9EVUxFLS0nXCI+XG4gICAgICAgPC9wPlxuICAgICAgICAgIDxhIGNsYXNzPVwidmF1bHQtYnRuXCJcbiAgICAgICAgICAgIFtocmVmXT1cImd1aWRlRGF0YT8uaXRlbXNbMF0/Lmd1aWRlX3VybFwiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICAgICAge3tndWlkZURhdGE/Lml0ZW1zWzBdPy5idXR0b25fdGV4dCB8fCAnVmlldyB0aGUgZ3VpZGUnfX1cbiAgICAgICAgICA8L2E+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImd1aWRlRGF0YT8uaXRlbXNbMF0/LmltYWdlX3VybCAmJiAhZ3VpZGVEYXRhPy5pdGVtc1swXS5pbWFnZV91cmwuaW5jbHVkZXMoJ2RlZmF1bHQtcGhvdG8uanBnJyk7IGVsc2Ugbm9EYXRhVGVtcGxhdGVcIj5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBbc3JjXT1cImd1aWRlRGF0YT8uaXRlbXNbMF0uaW1hZ2VfdXJsXCJcbiAgICAgICAgICAgIGFsdD1cIkd1aWRlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3VpZGUtaW1nXCIgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0RhdGFUZW1wbGF0ZT5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJy0tQUREIE1FIE9OIFRIRSBBRE1JTi9ET01BSU5TIE1PRFVMRS0tJyB8IHRyYW5zbG9jb1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgPC9kaXY+XG4gICAgIDwvZGl2PlxuIDwvZGl2PlxuIDwvc2VjdGlvbj5cbjwvZGl2PlxuXG48cHctcmVzb3VyY2Utbm90ZS1jYXJkICpuZ0lmPVwicmVzb3VyY2VQb3N0VGFnPy50YWdfY2F0ZWdvcnlfaWRcIiBbY2F0ZWdvcnlJZF09XCJyZXNvdXJjZVBvc3RUYWc/LnRhZ19jYXRlZ29yeV9pZFwiIFt0YWddPVwicmVzb3VyY2VQb3N0VGFnXCIgW3JlbGVhc2VIZWFkZXJdPVwidHJ1ZVwiIFtyZXNvdXJjZVRpdGxlXT1cInJlc291cmNlUG9zdFRhZz8udGl0bGVcIiBbdXNlcl09XCJ1c2VyXCIgW3VzZXJMb2dnZWRJbl09XCJ1c2VyTG9nZ2VkSW5cIj48L3B3LXJlc291cmNlLW5vdGUtY2FyZD5cblxuPHB3LXRyaWFsLTQtY29udGFjdC11cyBbdXNlcl09XCJ1c2VyXCIgW3VzZXJMb2dnZWRJbl09XCJ1c2VyTG9nZ2VkSW5cIj48L3B3LXRyaWFsLTQtY29udGFjdC11cz5cblxuXG5cbjxuZy10ZW1wbGF0ZSAjZWRpdEludGVncmF0aW9uc01vZGFsIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RWRpdCBJbnRlZ3JhdGlvbnMgU2VjdGlvbjwvaDU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+PC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBmb3I9XCJpbnRlZ3JhdGlvbi10aXRsZVwiPlRpdGxlPC9sYWJlbD5cbiAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiaW50ZWdyYXRpb24tdGl0bGVcIiBbKG5nTW9kZWwpXT1cImVkaXRpbmdJbnRlZ3JhdGlvbnMudGl0bGVcIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBmb3I9XCJpbnRlZ3JhdGlvbi1kZXNjcmlwdGlvblwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiaW50ZWdyYXRpb24tZGVzY3JpcHRpb25cIiByb3dzPVwiM1wiIFsobmdNb2RlbCldPVwiZWRpdGluZ0ludGVncmF0aW9ucy5kZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcEludGVncmF0aW9uSXRlbXMoJGV2ZW50KVwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaW50ZWdyYXRpb24gb2YgZWRpdGluZ0ludGVncmF0aW9ucy5pdGVtczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiYm9yZGVyIHAtMyBtYi0zXCIgY2RrRHJhZz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMFwiIGZvcj1cImludGVncmF0aW9uLWl0ZW1cIj5JbnRlZ3JhdGlvbiBJdGVtPC9sYWJlbD5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJhcnMgY3Vyc29yLW1vdmUgaW4tcGFnZS1iYXJzLWljb25cIiBjZGtEcmFnSGFuZGxlPjwvaT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW2Zvcl09XCInaW50ZWdyYXRpb24taXRlbS10aXRsZS0nICsgaVwiPlRpdGxlPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtpZF09XCInaW50ZWdyYXRpb24taXRlbS10aXRsZS0nICsgaVwiIFsobmdNb2RlbCldPVwiaW50ZWdyYXRpb24udGl0bGVcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW2Zvcl09XCInaW50ZWdyYXRpb24taXRlbS1kZXNjcmlwdGlvbi0nICsgaVwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtpZF09XCInaW50ZWdyYXRpb24taXRlbS1kZXNjcmlwdGlvbi0nICsgaVwiIFsobmdNb2RlbCldPVwiaW50ZWdyYXRpb24uZGVzY3JpcHRpb25cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW2Zvcl09XCInaW50ZWdyYXRpb24taXRlbS1ibG9nLXVybC0nICsgaVwiPkJsb2cgVVJMPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtpZF09XCInaW50ZWdyYXRpb24taXRlbS1ibG9nLXVybC0nICsgaVwiIFsobmdNb2RlbCldPVwiaW50ZWdyYXRpb24uYmxvZ191cmxcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW2Zvcl09XCInaW50ZWdyYXRpb24taXRlbS1pbWFnZS11cmwtJyArIGlcIj5JbWFnZSBVUkw8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2lkXT1cIidpbnRlZ3JhdGlvbi1pdGVtLWltYWdlLXVybC0nICsgaVwiIFsobmdNb2RlbCldPVwiaW50ZWdyYXRpb24uaW1hZ2VfdXJsXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG1iLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBbZm9yXT1cIidpbnRlZ3JhdGlvbi1pdGVtLXZpZGVvLXVybC0nICsgaVwiPlZpZGVvIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbaWRdPVwiJ2ludGVncmF0aW9uLWl0ZW0tdmlkZW8tdXJsLScgKyBpXCIgWyhuZ01vZGVsKV09XCJpbnRlZ3JhdGlvbi52aWRlb191cmxcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIHRleHQtZGFuZ2VyIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInJlbW92ZUludGVncmF0aW9uSXRlbShpKVwiICAgKGtleWRvd24uZW50ZXIpPVwicmVtb3ZlSW50ZWdyYXRpb25JdGVtKGkpXCJcbiAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJyZW1vdmVJbnRlZ3JhdGlvbkl0ZW0oaSlcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLXNtXCIgKGNsaWNrKT1cImFkZEludGVncmF0aW9uSXRlbSgpXCI+KyBBZGQgSW50ZWdyYXRpb248L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInNhdmVJbnRlZ3JhdGlvbnMobW9kYWwpXCI+U2F2ZTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cblxuXG48bmctdGVtcGxhdGUgI2d1aWRlc0VkaXRNb2RhbCBsZXQtbW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPkVkaXQgR3VpZGVzPC9oNT5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj48L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8aDQgY2xhc3M9XCJtYi0zXCI+R3VpZGVzIFNlY3Rpb248L2g0PlxuXG4gICAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BHdWlkZXMoJGV2ZW50KVwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZ3VpZGUgb2YgZWRpdGluZ0d1aWRlcy5pdGVtczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiYm9yZGVyIHAtMyBtYi0zXCIgY2RrRHJhZz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW2Zvcl09XCInZ3VpZGUtdGl0bGUtJyArIGlcIj5UaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbaWRdPVwiJ2d1aWRlLXRpdGxlLScgKyBpXCIgWyhuZ01vZGVsKV09XCJndWlkZS50aXRsZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBbZm9yXT1cIidndWlkZS1idXR0b24tdGV4dC0nICsgaVwiPkJ1dHRvbiBUZXh0PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtpZF09XCInZ3VpZGUtYnV0dG9uLXRleHQtJyArIGlcIiBbKG5nTW9kZWwpXT1cImd1aWRlLmJ1dHRvbl90ZXh0XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIFtmb3JdPVwiJ2d1aWRlLWltYWdlLXVybC0nICsgaVwiPkltYWdlIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbaWRdPVwiJ2d1aWRlLWltYWdlLXVybC0nICsgaVwiIFsobmdNb2RlbCldPVwiZ3VpZGUuaW1hZ2VfdXJsXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIFtmb3JdPVwiJ2d1aWRlLXVybC0nICsgaVwiPkd1aWRlIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbaWRdPVwiJ2d1aWRlLXVybC0nICsgaVwiIFsobmdNb2RlbCldPVwiZ3VpZGUuZ3VpZGVfdXJsXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBbZm9yXT1cIidndWlkZS1kZXNjcmlwdGlvbi0nICsgaVwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtpZF09XCInZ3VpZGUtZGVzY3JpcHRpb24tJyArIGlcIiByb3dzPVwiM1wiIFsobmdNb2RlbCldPVwiZ3VpZGUuZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggdGV4dC1kYW5nZXIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVtb3ZlR3VpZGUoaSlcIiAoa2V5ZG93bi5lbnRlcik9XCJyZW1vdmVHdWlkZShpKVwiIChrZXlkb3duLnNwYWNlKT1cInJlbW92ZUd1aWRlKGkpXCI+PC9pPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXJzIGN1cnNvci1tb3ZlXCIgY2RrRHJhZ0hhbmRsZT48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTJcIiAoY2xpY2spPVwiYWRkR3VpZGUoKVwiPisgQWRkIEd1aWRlPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzYXZlR3VpZGVzKG1vZGFsKVwiPlNhdmU8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|