simpo-component-library 3.6.729 → 3.6.731
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/ecommerce/sections/authentication-required/authentication-required.component.mjs +6 -4
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +2 -2
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +29 -25
- package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +9 -9
- package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +3 -3
- package/esm2022/lib/ecommerce/styles/product.modal.mjs +2 -1
- package/esm2022/lib/sections/contact-us/contact-us.component.mjs +3 -3
- package/esm2022/lib/sections/faq-columns-cards/faq-columns-cards.component.mjs +3 -3
- package/esm2022/lib/services/rest.service.mjs +14 -2
- package/fesm2022/simpo-component-library.mjs +204 -185
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/ecommerce/sections/featured-category/featured-category.component.d.ts +1 -1
- package/lib/ecommerce/sections/featured-category/featured-collection.component.d.ts +1 -1
- package/lib/ecommerce/sections/new-collection/new-collection.component.d.ts +1 -1
- package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +1 -3
- package/lib/ecommerce/sections/product-list/product-list.component.d.ts +1 -1
- package/lib/ecommerce/styles/product.modal.d.ts +1 -0
- package/lib/sections/image-grid-hotspot/image-grid-hotspot.component.d.ts +1 -1
- package/lib/sections/image-grid-section/image-grid-section.component.d.ts +1 -1
- package/lib/services/rest.service.d.ts +1 -0
- package/package.json +1 -1
- package/simpo-component-library-3.6.731.tgz +0 -0
- package/simpo-component-library-3.6.729.tgz +0 -0
package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs
CHANGED
|
@@ -530,7 +530,9 @@ export class AuthenticationRequiredComponent extends BaseSection {
|
|
|
530
530
|
isEmailValid() {
|
|
531
531
|
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
|
532
532
|
this.emailCheck = !emailRegex.test(this.email);
|
|
533
|
-
|
|
533
|
+
const mobileRegex = /^[6-9]\d{9}$/;
|
|
534
|
+
this.mobileCheck = !mobileRegex.test(this.mobile);
|
|
535
|
+
return emailRegex.test(this.email) || mobileRegex.test(this.mobile);
|
|
534
536
|
}
|
|
535
537
|
onPasswordChange() {
|
|
536
538
|
clearTimeout(this.passwordDebounceTimer);
|
|
@@ -611,7 +613,7 @@ export class AuthenticationRequiredComponent extends BaseSection {
|
|
|
611
613
|
});
|
|
612
614
|
}
|
|
613
615
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthenticationRequiredComponent, deps: [{ token: i1.RestService }, { token: i2.Router }, { token: i3.MessageService }, { token: i4.StorageServiceService }, { token: i5.MatDialog }, { token: i2.ActivatedRoute }, { token: i0.ElementRef }, { token: i5.MatDialogRef, optional: true }, { token: i6.MatBottomSheetRef, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
614
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AuthenticationRequiredComponent, isStandalone: true, selector: "simpo-authentication-required", inputs: { data: "data", index: "index", edit: "edit", delete: "delete" }, providers: [MessageService], viewQueries: [{ propertyName: "inputs", predicate: ["otpInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div [spacingAround]=\"stylesLayout\">\r\n <div [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"area w-100\">\r\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n </ul>\r\n </div>\r\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [simpoCorner]=\"styles?.corners\" [style.maxHeight.px]=\"\r\n currentPage === 'LOGIN' ? 450 : 600\">\r\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\r\n <div class=\"tabs\">\r\n <button class=\"tab\" id=\"tab-signup\" (click)=\"currentPage = 'SIGNUP'\"\r\n [ngStyle]=\"{'background':currentPage === 'SIGNUP' ? accentBackground : ''}\" [style.color]=\"fontColor\">Sign\r\n up</button>\r\n <button class=\"tab\" id=\"tab-login\" (click)=\"currentPage = 'LOGIN'\"\r\n [ngStyle]=\"{'background':currentPage === 'LOGIN' ? accentBackground : ''}\" [style.color]=\"fontColor\">Log\r\n in</button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"currentPage === 'LOGIN' ? loginTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"currentPage === 'SIGNUP' ? signInTemplate : null\"></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"currentPage === 'FORGOT_PASSWORD' ? forgotPasswordTemplate : null\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n\r\n</section>\r\n\r\n<ng-template #loginTemplate>\r\n <div class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\">\r\n <p class=\"mb-0 clr-black login-text\">{{loginType === 'OTP' ? 'Login via OTP' : 'Login'}}</p>\r\n </div>\r\n <div class=\"login-input-section\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Email</label>\r\n <input type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\" required=\"\" placeholder=\"janedoe@gmail.com\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <!-- <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid Email*</span> -->\r\n </div>\r\n <div class=\"input-box mb-4\">\r\n <div class=\"w-100\">\r\n <div class=\"w-100 d-flex justify-content-between password-text-container\" *ngIf=\"loginType==='PASSWORD'\">\r\n Password\r\n <div *ngIf=\"!showPassword\" class=\"password-config d-flex align-items-center cursor-pointer\"\r\n (click)=\"showPassword = true\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/181720c1762866309854Icon_(3).svg\" alt=\"\"> Show\r\n </div>\r\n <div class=\"password-config d-flex align-items-center cursor-pointer\" (click)=\"showPassword = false\"\r\n *ngIf=\"showPassword\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/994914c1762805529071Eye_off.svg\" alt=\"\"> Hide\r\n </div>\r\n </div>\r\n <div class=\"d-flex w-100 align-items-center justify-content-between mb-1 text-dark\"\r\n *ngIf=\"loginType==='OTP' && !generateOtp\" style=\"font-size:12px\">OTP <span class=\"cursor-pointer text-nowrap\"\r\n *ngIf=\"loginType==='OTP' && generateOtp === false\" (click)=\"resendOtp()\" style=\"font-size:11px\">Resend\r\n Otp</span></div>\r\n <ng-container *ngIf=\"loginType==='PASSWORD'\">\r\n <div class=\"w-100 password-input-container\" [style.borderColor]=\"!passwordCheck ? '' : 'red'\">\r\n <input [type]=\"showPassword ? 'text' : 'password'\" required=\"\" [(ngModel)]=\"password\"\r\n (ngModelChange)=\"onPasswordChange()\" class=\"w-90 b-none clr-black\" placeholder=\"Johndoe@1234\">\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"loginType==='OTP'\">\r\n <div class=\"d-flex align-items-center justify-content-between otp_input\" [ngClass]=\"{'gap-1': loginType==='OTP' &&\r\n generateOtp===false}\" *ngIf=\"!generateOtp\">\r\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\r\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\r\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\r\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\r\n </div>\r\n <!-- <input class=\"w-100\" placeholder=\"1234\" [(ngModel)]=\"oneTimePassword\" type=\"number\"> -->\r\n </div>\r\n </ng-container>\r\n </div>\r\n <span *ngIf=\"passwordCheck && currentPage === 'SIGNUP'\" class=\"f-12\" [style.color]=\"'red'\">Your password must\r\n contain 1 Uppercase , 1\r\n Lowercase , 1 Special\r\n Character , 1 Digit and Minimum 8 Characters*</span>\r\n </div>\r\n <!-- <div class=\"forgot-pwd w-100 text-end mb-2\" [style.color]=\"accentColor\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">\r\n Forgot Password?</div> -->\r\n <!-- <button class=\"button\" *ngIf=\"!buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n (click)=\"login()\">Login</button> -->\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content: {\r\n 'label': 'Login' } \" (click)=\" login()\" *ngIf=\"!generateOtp\" [buttonStyle]=\"data?.action?.buttons[1]?.styles\"\r\n [buttonId]=\"data?.action?.buttons[1]?.id\" [sectionId]=\"data?.id\" [edit]=\"edit\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [loading]=\"buttonLoading\" [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading && !generateOtp\" [buttonData]=\"button?.content\"\r\n [buttonStyle]=\"button?.styles\" simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\" (click)=\"login()\">Login</button> -->\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content: {\r\n 'label': 'Generate Otp'} \" (click)=\"getOTP()\" *ngIf=\"generateOtp\"\r\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" [buttonId]=\"data?.action?.buttons[2]?.id\" [sectionId]=\"data?.id\"\r\n [edit]=\"edit\" [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [loading]=\"buttonLoading\" [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading && generateOtp\" [buttonData]=\"button?.content\"\r\n [buttonStyle]=\"button?.styles\" simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\" (click)=\"getOTP()\">Generate Otp</button> -->\r\n <!-- <button class=\"button\" *ngIf=\"buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\"\r\n [color]=\"styles?.background?.accentColor\">Loading...</button> -->\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Loading...</button> -->\r\n\r\n\r\n <div class=\"sign-up mt-3 d-flex align-items-center justify-content-end fs-13\" *ngIf=\"signUpEnabled\">\r\n <span class=\"cursor-pointer text-dark\" (click)=\"loginAuthentication('OTP')\"\r\n *ngIf=\"loginType==='PASSWORD';else loginWithPassword\">Login with\r\n OTP</span>\r\n </div>\r\n <ng-template #loginWithPassword>\r\n <span class=\"cursor-pointer text-dark\" (click)=\"loginAuthentication('PASSWORD')\">Login with\r\n Password</span>\r\n </ng-template>\r\n <!-- <div class=\"text-center mt-20\">\r\n <div class=\"or-divider\">\r\n <span class=\"or-text\">or</span>\r\n </div>\r\n <div class=\"sign-up\">Login with <span [style.color]=\"accentColor\">OTP</span></div>\r\n </div> -->\r\n </div>\r\n</ng-template>\r\n<ng-template #signInTemplate>\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">Sign up</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Name</label>\r\n <input type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\" placeholder=\"Jane Doe\">\r\n </div>\r\n <div class=\"input-box\">\r\n <label for=\"\">Email</label>\r\n <input type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\" placeholder=\"janedoe@gmail.com\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\r\n </div>\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Phone Number</label>\r\n <input type=\"number\" class=\"clr-black\" [(ngModel)]=\"mobile\" (ngModelChange)=\"onMobileChange()\"\r\n placeholder=\"9876543219\" [style.borderColor]=\"!mobileCheck ? '' : 'red'\" class=\"no-arrows\">\r\n <span class=\"f-12\" *ngIf=\"mobileCheck\" [style.color]=\"'red'\">Please Enter valid Mobile number*</span>\r\n </div>\r\n <div class=\" input-box position-relative\">\r\n <div class=\"d-flex align-items-center justify-content-between password-text-container\"><label\r\n for=\"\">Password</label>\r\n <div *ngIf=\"!showPassword\" class=\"password-config d-flex align-items-center cursor-pointer\"\r\n (click)=\"showPassword = true\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/181720c1762866309854Icon_(3).svg\" alt=\"\"> Show\r\n </div>\r\n <div class=\"password-config d-flex align-items-center cursor-pointer\" (click)=\"showPassword = false\"\r\n *ngIf=\"showPassword\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/994914c1762805529071Eye_off.svg\" alt=\"\"> Hide\r\n </div>\r\n </div>\r\n <div class=\"w-100 d-flex align-items-center\">\r\n <input [type]=\"showPassword ? 'text' : 'password'\" required=\"\" [(ngModel)]=\"password\" class=\"w-90 clr-black\"\r\n placeholder=\"Janedoe@1234\" [style.borderColor]=\"!passwordCheck ? '' : 'red'\"\r\n (ngModelChange)=\"onPasswordChange()\">\r\n </div>\r\n <span *ngIf=\"passwordCheck\" class=\"f-12\" [style.color]=\"'red'\">Your password must contain 1 Uppercase , 1\r\n Lowercase , 1 Special\r\n Character , 1 Digit and Minimum 8 Characters*</span>\r\n <!-- <div class=\"strength-bar-container\">\r\n <div *ngFor=\"let strength of passwordStrength; let idx = index\" class=\"strength-bar\"\r\n [style.backgroundColor]=\"getStrengthColor(idx)\"></div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content: {\r\n 'label': 'Create Account' } \" (click)=\"createAccount()\" [buttonStyle]=\"data?.action?.buttons[0]?.styles\"\r\n [buttonId]=\"data?.action?.buttons[0]?.id\" [sectionId]=\"data?.id\" [edit]=\"edit\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [disabled]=\"!isEmailValid || !isPasswordValid || !userName\" [loading]=\"buttonLoading\"\r\n [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"button\" *ngIf=\"!buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n (click)=\"createAccount()\" [disabled]=\"!isEmailValid || !isPasswordValid || !userName\">Create Account</button> -->\r\n <!-- <button class=\"button\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n *ngIf=\"buttonLoading\">Loading...</button> -->\r\n\r\n\r\n <div class=\"sign-up text-secondary d-flex align-items-center justify-content-end \r\n mt-3 fs-14 w-100 text-center \">Already have an account? <span (click)=\"currentPage = 'LOGIN'\"\r\n class=\"cursor-pointer text-dark\">Login</span></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #forgotPasswordTemplate>\r\n <div>\r\n <div class=\"input-box\">\r\n <label for=\"\">Email or Phone number</label>\r\n <input type=\"email\" [(ngModel)]=\"email\" required=\"\" placeholder=\"janedoe@gmail.com\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n </div>\r\n <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Submit</button>\r\n <button class=\"send-btn p-2\" *ngIf=\"buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Loading...</button>\r\n </div>\r\n</ng-template>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:450px;margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0 0 2rem;position:relative;transition:all .4s ease;margin:unset!important}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:#ffffff1a;box-shadow:0 8px 32px #1f268733;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:80px;border:1px solid rgba(255,255,255,.18);animation:animate 25s linear infinite;bottom:-150px}.circles li:nth-child(1){left:25%;width:80px;height:80px;animation-delay:0s}.circles li:nth-child(2){left:10%;width:20px;height:20px;animation-delay:2s;animation-duration:12s}.circles li:nth-child(3){left:70%;width:20px;height:20px;animation-delay:4s}.circles li:nth-child(4){left:40%;width:60px;height:60px;animation-delay:0s;animation-duration:18s}.circles li:nth-child(5){left:65%;width:20px;height:20px;animation-delay:0s}.circles li:nth-child(6){left:75%;width:110px;height:110px;animation-delay:3s}.circles li:nth-child(7){left:35%;width:150px;height:150px;animation-delay:7s}.circles li:nth-child(8){left:50%;width:25px;height:25px;animation-delay:15s;animation-duration:45s}.circles li:nth-child(9){left:20%;width:15px;height:15px;animation-delay:2s;animation-duration:35s}.circles li:nth-child(15){left:10%;width:20px;height:20px;animation-delay:2s;animation-duration:12s}@keyframes animate{0%{transform:translateY(0) rotate(0);opacity:1;border-radius:0}to{transform:translateY(-1000px) rotate(720deg);opacity:0;border-radius:50%}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.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: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i9.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i10.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i11.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId", "edit", "backgroundInfo", "disabled", "loading", "isFullWidth"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: SpacingAroundDirective, selector: "[spacingAround]", inputs: ["spacingAround", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId"] }] }); }
|
|
616
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AuthenticationRequiredComponent, isStandalone: true, selector: "simpo-authentication-required", inputs: { data: "data", index: "index", edit: "edit", delete: "delete" }, providers: [MessageService], viewQueries: [{ propertyName: "inputs", predicate: ["otpInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div [spacingAround]=\"stylesLayout\">\r\n <div [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"area w-100\">\r\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n </ul>\r\n </div>\r\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [simpoCorner]=\"styles?.corners\" [style.maxHeight.px]=\"\r\n currentPage === 'LOGIN' ? 450 : 600\">\r\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\r\n <div class=\"tabs\">\r\n <button class=\"tab\" id=\"tab-signup\" (click)=\"currentPage = 'SIGNUP'\"\r\n [ngStyle]=\"{'background':currentPage === 'SIGNUP' ? accentBackground : ''}\" [style.color]=\"fontColor\">Sign\r\n up</button>\r\n <button class=\"tab\" id=\"tab-login\" (click)=\"currentPage = 'LOGIN'\"\r\n [ngStyle]=\"{'background':currentPage === 'LOGIN' ? accentBackground : ''}\" [style.color]=\"fontColor\">Log\r\n in</button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"currentPage === 'LOGIN' ? loginTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"currentPage === 'SIGNUP' ? signInTemplate : null\"></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"currentPage === 'FORGOT_PASSWORD' ? forgotPasswordTemplate : null\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n\r\n</section>\r\n\r\n<ng-template #loginTemplate>\r\n <div class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\">\r\n <p class=\"mb-0 clr-black login-text\">{{loginType === 'OTP' ? 'Login via OTP' : 'Login'}}</p>\r\n </div>\r\n <div class=\"login-input-section\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Email/Mobile</label>\r\n <input type=\"text\" class=\"clr-black\" [(ngModel)]=\"email\" required=\"\" placeholder=\"janedoe@gmail.com / 9876543210\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <!-- <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid Email*</span> -->\r\n </div>\r\n <div class=\"input-box mb-4\">\r\n <div class=\"w-100\">\r\n <div class=\"w-100 d-flex justify-content-between password-text-container\" *ngIf=\"loginType==='PASSWORD'\">\r\n Password\r\n <div *ngIf=\"!showPassword\" class=\"password-config d-flex align-items-center cursor-pointer\"\r\n (click)=\"showPassword = true\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/181720c1762866309854Icon_(3).svg\" alt=\"\"> Show\r\n </div>\r\n <div class=\"password-config d-flex align-items-center cursor-pointer\" (click)=\"showPassword = false\"\r\n *ngIf=\"showPassword\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/994914c1762805529071Eye_off.svg\" alt=\"\"> Hide\r\n </div>\r\n </div>\r\n <div class=\"d-flex w-100 align-items-center justify-content-between mb-1 text-dark\"\r\n *ngIf=\"loginType==='OTP' && !generateOtp\" style=\"font-size:12px\">OTP <span class=\"cursor-pointer text-nowrap\"\r\n *ngIf=\"loginType==='OTP' && generateOtp === false\" (click)=\"resendOtp()\" style=\"font-size:11px\">Resend\r\n Otp</span></div>\r\n <ng-container *ngIf=\"loginType==='PASSWORD'\">\r\n <div class=\"w-100 password-input-container\" [style.borderColor]=\"!passwordCheck ? '' : 'red'\">\r\n <input [type]=\"showPassword ? 'text' : 'password'\" required=\"\" [(ngModel)]=\"password\"\r\n (ngModelChange)=\"onPasswordChange()\" class=\"w-90 b-none clr-black\" placeholder=\"Johndoe@1234\">\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"loginType==='OTP'\">\r\n <div class=\"d-flex align-items-center justify-content-between otp_input\" [ngClass]=\"{'gap-1': loginType==='OTP' &&\r\n generateOtp===false}\" *ngIf=\"!generateOtp\">\r\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\r\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\r\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\r\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\r\n </div>\r\n <!-- <input class=\"w-100\" placeholder=\"1234\" [(ngModel)]=\"oneTimePassword\" type=\"number\"> -->\r\n </div>\r\n </ng-container>\r\n </div>\r\n <span *ngIf=\"passwordCheck && currentPage === 'SIGNUP'\" class=\"f-12\" [style.color]=\"'red'\">Your password must\r\n contain 1 Uppercase , 1\r\n Lowercase , 1 Special\r\n Character , 1 Digit and Minimum 8 Characters*</span>\r\n </div>\r\n <!-- <div class=\"forgot-pwd w-100 text-end mb-2\" [style.color]=\"accentColor\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">\r\n Forgot Password?</div> -->\r\n <!-- <button class=\"button\" *ngIf=\"!buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n (click)=\"login()\">Login</button> -->\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content: {\r\n 'label': 'Login' } \" (click)=\" login()\" *ngIf=\"!generateOtp\" [buttonStyle]=\"data?.action?.buttons[1]?.styles\"\r\n [buttonId]=\"data?.action?.buttons[1]?.id\" [sectionId]=\"data?.id\" [edit]=\"edit\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [loading]=\"buttonLoading\" [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading && !generateOtp\" [buttonData]=\"button?.content\"\r\n [buttonStyle]=\"button?.styles\" simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\" (click)=\"login()\">Login</button> -->\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content: {\r\n 'label': 'Generate Otp'} \" (click)=\"getOTP()\" *ngIf=\"generateOtp\"\r\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" [buttonId]=\"data?.action?.buttons[2]?.id\" [sectionId]=\"data?.id\"\r\n [edit]=\"edit\" [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [loading]=\"buttonLoading\" [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading && generateOtp\" [buttonData]=\"button?.content\"\r\n [buttonStyle]=\"button?.styles\" simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\" (click)=\"getOTP()\">Generate Otp</button> -->\r\n <!-- <button class=\"button\" *ngIf=\"buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\"\r\n [color]=\"styles?.background?.accentColor\">Loading...</button> -->\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Loading...</button> -->\r\n\r\n\r\n <div class=\"sign-up mt-3 d-flex align-items-center justify-content-end fs-13\" *ngIf=\"signUpEnabled\">\r\n <span class=\"cursor-pointer text-dark\" (click)=\"loginAuthentication('OTP')\"\r\n *ngIf=\"loginType==='PASSWORD';else loginWithPassword\">Login with\r\n OTP</span>\r\n </div>\r\n <ng-template #loginWithPassword>\r\n <span class=\"cursor-pointer text-dark\" (click)=\"loginAuthentication('PASSWORD')\">Login with\r\n Password</span>\r\n </ng-template>\r\n <!-- <div class=\"text-center mt-20\">\r\n <div class=\"or-divider\">\r\n <span class=\"or-text\">or</span>\r\n </div>\r\n <div class=\"sign-up\">Login with <span [style.color]=\"accentColor\">OTP</span></div>\r\n </div> -->\r\n </div>\r\n</ng-template>\r\n<ng-template #signInTemplate>\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">Sign up</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Name</label>\r\n <input type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\" placeholder=\"Jane Doe\">\r\n </div>\r\n <div class=\"input-box\">\r\n <label for=\"\">Email</label>\r\n <input type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\" placeholder=\"janedoe@gmail.com\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\r\n </div>\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Phone Number</label>\r\n <input type=\"number\" class=\"clr-black\" [(ngModel)]=\"mobile\" (ngModelChange)=\"onMobileChange()\"\r\n placeholder=\"9876543219\" [style.borderColor]=\"!mobileCheck ? '' : 'red'\" class=\"no-arrows\">\r\n <span class=\"f-12\" *ngIf=\"mobileCheck\" [style.color]=\"'red'\">Please Enter valid Mobile number*</span>\r\n </div>\r\n <div class=\" input-box position-relative\">\r\n <div class=\"d-flex align-items-center justify-content-between password-text-container\"><label\r\n for=\"\">Password</label>\r\n <div *ngIf=\"!showPassword\" class=\"password-config d-flex align-items-center cursor-pointer\"\r\n (click)=\"showPassword = true\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/181720c1762866309854Icon_(3).svg\" alt=\"\"> Show\r\n </div>\r\n <div class=\"password-config d-flex align-items-center cursor-pointer\" (click)=\"showPassword = false\"\r\n *ngIf=\"showPassword\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/994914c1762805529071Eye_off.svg\" alt=\"\"> Hide\r\n </div>\r\n </div>\r\n <div class=\"w-100 d-flex align-items-center\">\r\n <input [type]=\"showPassword ? 'text' : 'password'\" required=\"\" [(ngModel)]=\"password\" class=\"w-90 clr-black\"\r\n placeholder=\"Janedoe@1234\" [style.borderColor]=\"!passwordCheck ? '' : 'red'\"\r\n (ngModelChange)=\"onPasswordChange()\">\r\n </div>\r\n <span *ngIf=\"passwordCheck\" class=\"f-12\" [style.color]=\"'red'\">Your password must contain 1 Uppercase , 1\r\n Lowercase , 1 Special\r\n Character , 1 Digit and Minimum 8 Characters*</span>\r\n <!-- <div class=\"strength-bar-container\">\r\n <div *ngFor=\"let strength of passwordStrength; let idx = index\" class=\"strength-bar\"\r\n [style.backgroundColor]=\"getStrengthColor(idx)\"></div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content: {\r\n 'label': 'Create Account' } \" (click)=\"createAccount()\" [buttonStyle]=\"data?.action?.buttons[0]?.styles\"\r\n [buttonId]=\"data?.action?.buttons[0]?.id\" [sectionId]=\"data?.id\" [edit]=\"edit\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [disabled]=\"!isEmailValid || !isPasswordValid || !userName\" [loading]=\"buttonLoading\"\r\n [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"button\" *ngIf=\"!buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n (click)=\"createAccount()\" [disabled]=\"!isEmailValid || !isPasswordValid || !userName\">Create Account</button> -->\r\n <!-- <button class=\"button\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n *ngIf=\"buttonLoading\">Loading...</button> -->\r\n\r\n\r\n <div class=\"sign-up text-secondary d-flex align-items-center justify-content-end \r\n mt-3 fs-14 w-100 text-center \">Already have an account? <span (click)=\"currentPage = 'LOGIN'\"\r\n class=\"cursor-pointer text-dark\">Login</span></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #forgotPasswordTemplate>\r\n <div>\r\n <div class=\"input-box\">\r\n <label for=\"\">Email or Phone number</label>\r\n <input type=\"email\" [(ngModel)]=\"email\" required=\"\" placeholder=\"janedoe@gmail.com\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n </div>\r\n <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Submit</button>\r\n <button class=\"send-btn p-2\" *ngIf=\"buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Loading...</button>\r\n </div>\r\n</ng-template>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:450px;margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0 0 2rem;position:relative;transition:all .4s ease;margin:unset!important}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:#ffffff1a;box-shadow:0 8px 32px #1f268733;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:80px;border:1px solid rgba(255,255,255,.18);animation:animate 25s linear infinite;bottom:-150px}.circles li:nth-child(1){left:25%;width:80px;height:80px;animation-delay:0s}.circles li:nth-child(2){left:10%;width:20px;height:20px;animation-delay:2s;animation-duration:12s}.circles li:nth-child(3){left:70%;width:20px;height:20px;animation-delay:4s}.circles li:nth-child(4){left:40%;width:60px;height:60px;animation-delay:0s;animation-duration:18s}.circles li:nth-child(5){left:65%;width:20px;height:20px;animation-delay:0s}.circles li:nth-child(6){left:75%;width:110px;height:110px;animation-delay:3s}.circles li:nth-child(7){left:35%;width:150px;height:150px;animation-delay:7s}.circles li:nth-child(8){left:50%;width:25px;height:25px;animation-delay:15s;animation-duration:45s}.circles li:nth-child(9){left:20%;width:15px;height:15px;animation-delay:2s;animation-duration:35s}.circles li:nth-child(15){left:10%;width:20px;height:20px;animation-delay:2s;animation-duration:12s}@keyframes animate{0%{transform:translateY(0) rotate(0);opacity:1;border-radius:0}to{transform:translateY(-1000px) rotate(720deg);opacity:0;border-radius:50%}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.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: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i9.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i10.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i11.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId", "edit", "backgroundInfo", "disabled", "loading", "isFullWidth"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: SpacingAroundDirective, selector: "[spacingAround]", inputs: ["spacingAround", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId"] }] }); }
|
|
615
617
|
}
|
|
616
618
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthenticationRequiredComponent, decorators: [{
|
|
617
619
|
type: Component,
|
|
@@ -633,7 +635,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
633
635
|
OverlayDirective,
|
|
634
636
|
SpacingAroundDirective,
|
|
635
637
|
ButtonEditorDirective
|
|
636
|
-
], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div [spacingAround]=\"stylesLayout\">\r\n <div [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"area w-100\">\r\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n </ul>\r\n </div>\r\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [simpoCorner]=\"styles?.corners\" [style.maxHeight.px]=\"\r\n currentPage === 'LOGIN' ? 450 : 600\">\r\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\r\n <div class=\"tabs\">\r\n <button class=\"tab\" id=\"tab-signup\" (click)=\"currentPage = 'SIGNUP'\"\r\n [ngStyle]=\"{'background':currentPage === 'SIGNUP' ? accentBackground : ''}\" [style.color]=\"fontColor\">Sign\r\n up</button>\r\n <button class=\"tab\" id=\"tab-login\" (click)=\"currentPage = 'LOGIN'\"\r\n [ngStyle]=\"{'background':currentPage === 'LOGIN' ? accentBackground : ''}\" [style.color]=\"fontColor\">Log\r\n in</button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"currentPage === 'LOGIN' ? loginTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"currentPage === 'SIGNUP' ? signInTemplate : null\"></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"currentPage === 'FORGOT_PASSWORD' ? forgotPasswordTemplate : null\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n\r\n</section>\r\n\r\n<ng-template #loginTemplate>\r\n <div class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\">\r\n <p class=\"mb-0 clr-black login-text\">{{loginType === 'OTP' ? 'Login via OTP' : 'Login'}}</p>\r\n </div>\r\n <div class=\"login-input-section\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Email</label>\r\n <input type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\" required=\"\" placeholder=\"janedoe@gmail.com\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <!-- <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid Email*</span> -->\r\n </div>\r\n <div class=\"input-box mb-4\">\r\n <div class=\"w-100\">\r\n <div class=\"w-100 d-flex justify-content-between password-text-container\" *ngIf=\"loginType==='PASSWORD'\">\r\n Password\r\n <div *ngIf=\"!showPassword\" class=\"password-config d-flex align-items-center cursor-pointer\"\r\n (click)=\"showPassword = true\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/181720c1762866309854Icon_(3).svg\" alt=\"\"> Show\r\n </div>\r\n <div class=\"password-config d-flex align-items-center cursor-pointer\" (click)=\"showPassword = false\"\r\n *ngIf=\"showPassword\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/994914c1762805529071Eye_off.svg\" alt=\"\"> Hide\r\n </div>\r\n </div>\r\n <div class=\"d-flex w-100 align-items-center justify-content-between mb-1 text-dark\"\r\n *ngIf=\"loginType==='OTP' && !generateOtp\" style=\"font-size:12px\">OTP <span class=\"cursor-pointer text-nowrap\"\r\n *ngIf=\"loginType==='OTP' && generateOtp === false\" (click)=\"resendOtp()\" style=\"font-size:11px\">Resend\r\n Otp</span></div>\r\n <ng-container *ngIf=\"loginType==='PASSWORD'\">\r\n <div class=\"w-100 password-input-container\" [style.borderColor]=\"!passwordCheck ? '' : 'red'\">\r\n <input [type]=\"showPassword ? 'text' : 'password'\" required=\"\" [(ngModel)]=\"password\"\r\n (ngModelChange)=\"onPasswordChange()\" class=\"w-90 b-none clr-black\" placeholder=\"Johndoe@1234\">\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"loginType==='OTP'\">\r\n <div class=\"d-flex align-items-center justify-content-between otp_input\" [ngClass]=\"{'gap-1': loginType==='OTP' &&\r\n generateOtp===false}\" *ngIf=\"!generateOtp\">\r\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\r\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\r\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\r\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\r\n </div>\r\n <!-- <input class=\"w-100\" placeholder=\"1234\" [(ngModel)]=\"oneTimePassword\" type=\"number\"> -->\r\n </div>\r\n </ng-container>\r\n </div>\r\n <span *ngIf=\"passwordCheck && currentPage === 'SIGNUP'\" class=\"f-12\" [style.color]=\"'red'\">Your password must\r\n contain 1 Uppercase , 1\r\n Lowercase , 1 Special\r\n Character , 1 Digit and Minimum 8 Characters*</span>\r\n </div>\r\n <!-- <div class=\"forgot-pwd w-100 text-end mb-2\" [style.color]=\"accentColor\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">\r\n Forgot Password?</div> -->\r\n <!-- <button class=\"button\" *ngIf=\"!buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n (click)=\"login()\">Login</button> -->\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content: {\r\n 'label': 'Login' } \" (click)=\" login()\" *ngIf=\"!generateOtp\" [buttonStyle]=\"data?.action?.buttons[1]?.styles\"\r\n [buttonId]=\"data?.action?.buttons[1]?.id\" [sectionId]=\"data?.id\" [edit]=\"edit\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [loading]=\"buttonLoading\" [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading && !generateOtp\" [buttonData]=\"button?.content\"\r\n [buttonStyle]=\"button?.styles\" simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\" (click)=\"login()\">Login</button> -->\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content: {\r\n 'label': 'Generate Otp'} \" (click)=\"getOTP()\" *ngIf=\"generateOtp\"\r\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" [buttonId]=\"data?.action?.buttons[2]?.id\" [sectionId]=\"data?.id\"\r\n [edit]=\"edit\" [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [loading]=\"buttonLoading\" [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading && generateOtp\" [buttonData]=\"button?.content\"\r\n [buttonStyle]=\"button?.styles\" simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\" (click)=\"getOTP()\">Generate Otp</button> -->\r\n <!-- <button class=\"button\" *ngIf=\"buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\"\r\n [color]=\"styles?.background?.accentColor\">Loading...</button> -->\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Loading...</button> -->\r\n\r\n\r\n <div class=\"sign-up mt-3 d-flex align-items-center justify-content-end fs-13\" *ngIf=\"signUpEnabled\">\r\n <span class=\"cursor-pointer text-dark\" (click)=\"loginAuthentication('OTP')\"\r\n *ngIf=\"loginType==='PASSWORD';else loginWithPassword\">Login with\r\n OTP</span>\r\n </div>\r\n <ng-template #loginWithPassword>\r\n <span class=\"cursor-pointer text-dark\" (click)=\"loginAuthentication('PASSWORD')\">Login with\r\n Password</span>\r\n </ng-template>\r\n <!-- <div class=\"text-center mt-20\">\r\n <div class=\"or-divider\">\r\n <span class=\"or-text\">or</span>\r\n </div>\r\n <div class=\"sign-up\">Login with <span [style.color]=\"accentColor\">OTP</span></div>\r\n </div> -->\r\n </div>\r\n</ng-template>\r\n<ng-template #signInTemplate>\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">Sign up</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Name</label>\r\n <input type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\" placeholder=\"Jane Doe\">\r\n </div>\r\n <div class=\"input-box\">\r\n <label for=\"\">Email</label>\r\n <input type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\" placeholder=\"janedoe@gmail.com\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\r\n </div>\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Phone Number</label>\r\n <input type=\"number\" class=\"clr-black\" [(ngModel)]=\"mobile\" (ngModelChange)=\"onMobileChange()\"\r\n placeholder=\"9876543219\" [style.borderColor]=\"!mobileCheck ? '' : 'red'\" class=\"no-arrows\">\r\n <span class=\"f-12\" *ngIf=\"mobileCheck\" [style.color]=\"'red'\">Please Enter valid Mobile number*</span>\r\n </div>\r\n <div class=\" input-box position-relative\">\r\n <div class=\"d-flex align-items-center justify-content-between password-text-container\"><label\r\n for=\"\">Password</label>\r\n <div *ngIf=\"!showPassword\" class=\"password-config d-flex align-items-center cursor-pointer\"\r\n (click)=\"showPassword = true\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/181720c1762866309854Icon_(3).svg\" alt=\"\"> Show\r\n </div>\r\n <div class=\"password-config d-flex align-items-center cursor-pointer\" (click)=\"showPassword = false\"\r\n *ngIf=\"showPassword\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/994914c1762805529071Eye_off.svg\" alt=\"\"> Hide\r\n </div>\r\n </div>\r\n <div class=\"w-100 d-flex align-items-center\">\r\n <input [type]=\"showPassword ? 'text' : 'password'\" required=\"\" [(ngModel)]=\"password\" class=\"w-90 clr-black\"\r\n placeholder=\"Janedoe@1234\" [style.borderColor]=\"!passwordCheck ? '' : 'red'\"\r\n (ngModelChange)=\"onPasswordChange()\">\r\n </div>\r\n <span *ngIf=\"passwordCheck\" class=\"f-12\" [style.color]=\"'red'\">Your password must contain 1 Uppercase , 1\r\n Lowercase , 1 Special\r\n Character , 1 Digit and Minimum 8 Characters*</span>\r\n <!-- <div class=\"strength-bar-container\">\r\n <div *ngFor=\"let strength of passwordStrength; let idx = index\" class=\"strength-bar\"\r\n [style.backgroundColor]=\"getStrengthColor(idx)\"></div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content: {\r\n 'label': 'Create Account' } \" (click)=\"createAccount()\" [buttonStyle]=\"data?.action?.buttons[0]?.styles\"\r\n [buttonId]=\"data?.action?.buttons[0]?.id\" [sectionId]=\"data?.id\" [edit]=\"edit\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [disabled]=\"!isEmailValid || !isPasswordValid || !userName\" [loading]=\"buttonLoading\"\r\n [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"button\" *ngIf=\"!buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n (click)=\"createAccount()\" [disabled]=\"!isEmailValid || !isPasswordValid || !userName\">Create Account</button> -->\r\n <!-- <button class=\"button\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n *ngIf=\"buttonLoading\">Loading...</button> -->\r\n\r\n\r\n <div class=\"sign-up text-secondary d-flex align-items-center justify-content-end \r\n mt-3 fs-14 w-100 text-center \">Already have an account? <span (click)=\"currentPage = 'LOGIN'\"\r\n class=\"cursor-pointer text-dark\">Login</span></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #forgotPasswordTemplate>\r\n <div>\r\n <div class=\"input-box\">\r\n <label for=\"\">Email or Phone number</label>\r\n <input type=\"email\" [(ngModel)]=\"email\" required=\"\" placeholder=\"janedoe@gmail.com\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n </div>\r\n <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Submit</button>\r\n <button class=\"send-btn p-2\" *ngIf=\"buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Loading...</button>\r\n </div>\r\n</ng-template>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:450px;margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0 0 2rem;position:relative;transition:all .4s ease;margin:unset!important}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:#ffffff1a;box-shadow:0 8px 32px #1f268733;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:80px;border:1px solid rgba(255,255,255,.18);animation:animate 25s linear infinite;bottom:-150px}.circles li:nth-child(1){left:25%;width:80px;height:80px;animation-delay:0s}.circles li:nth-child(2){left:10%;width:20px;height:20px;animation-delay:2s;animation-duration:12s}.circles li:nth-child(3){left:70%;width:20px;height:20px;animation-delay:4s}.circles li:nth-child(4){left:40%;width:60px;height:60px;animation-delay:0s;animation-duration:18s}.circles li:nth-child(5){left:65%;width:20px;height:20px;animation-delay:0s}.circles li:nth-child(6){left:75%;width:110px;height:110px;animation-delay:3s}.circles li:nth-child(7){left:35%;width:150px;height:150px;animation-delay:7s}.circles li:nth-child(8){left:50%;width:25px;height:25px;animation-delay:15s;animation-duration:45s}.circles li:nth-child(9){left:20%;width:15px;height:15px;animation-delay:2s;animation-duration:35s}.circles li:nth-child(15){left:10%;width:20px;height:20px;animation-delay:2s;animation-duration:12s}@keyframes animate{0%{transform:translateY(0) rotate(0);opacity:1;border-radius:0}to{transform:translateY(-1000px) rotate(720deg);opacity:0;border-radius:50%}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}\n"] }]
|
|
638
|
+
], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div [spacingAround]=\"stylesLayout\">\r\n <div [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"area w-100\">\r\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n </ul>\r\n </div>\r\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [simpoCorner]=\"styles?.corners\" [style.maxHeight.px]=\"\r\n currentPage === 'LOGIN' ? 450 : 600\">\r\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\r\n <div class=\"tabs\">\r\n <button class=\"tab\" id=\"tab-signup\" (click)=\"currentPage = 'SIGNUP'\"\r\n [ngStyle]=\"{'background':currentPage === 'SIGNUP' ? accentBackground : ''}\" [style.color]=\"fontColor\">Sign\r\n up</button>\r\n <button class=\"tab\" id=\"tab-login\" (click)=\"currentPage = 'LOGIN'\"\r\n [ngStyle]=\"{'background':currentPage === 'LOGIN' ? accentBackground : ''}\" [style.color]=\"fontColor\">Log\r\n in</button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"currentPage === 'LOGIN' ? loginTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"currentPage === 'SIGNUP' ? signInTemplate : null\"></ng-container>\r\n <ng-container\r\n *ngTemplateOutlet=\"currentPage === 'FORGOT_PASSWORD' ? forgotPasswordTemplate : null\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n\r\n</section>\r\n\r\n<ng-template #loginTemplate>\r\n <div class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\">\r\n <p class=\"mb-0 clr-black login-text\">{{loginType === 'OTP' ? 'Login via OTP' : 'Login'}}</p>\r\n </div>\r\n <div class=\"login-input-section\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Email/Mobile</label>\r\n <input type=\"text\" class=\"clr-black\" [(ngModel)]=\"email\" required=\"\" placeholder=\"janedoe@gmail.com / 9876543210\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <!-- <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid Email*</span> -->\r\n </div>\r\n <div class=\"input-box mb-4\">\r\n <div class=\"w-100\">\r\n <div class=\"w-100 d-flex justify-content-between password-text-container\" *ngIf=\"loginType==='PASSWORD'\">\r\n Password\r\n <div *ngIf=\"!showPassword\" class=\"password-config d-flex align-items-center cursor-pointer\"\r\n (click)=\"showPassword = true\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/181720c1762866309854Icon_(3).svg\" alt=\"\"> Show\r\n </div>\r\n <div class=\"password-config d-flex align-items-center cursor-pointer\" (click)=\"showPassword = false\"\r\n *ngIf=\"showPassword\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/994914c1762805529071Eye_off.svg\" alt=\"\"> Hide\r\n </div>\r\n </div>\r\n <div class=\"d-flex w-100 align-items-center justify-content-between mb-1 text-dark\"\r\n *ngIf=\"loginType==='OTP' && !generateOtp\" style=\"font-size:12px\">OTP <span class=\"cursor-pointer text-nowrap\"\r\n *ngIf=\"loginType==='OTP' && generateOtp === false\" (click)=\"resendOtp()\" style=\"font-size:11px\">Resend\r\n Otp</span></div>\r\n <ng-container *ngIf=\"loginType==='PASSWORD'\">\r\n <div class=\"w-100 password-input-container\" [style.borderColor]=\"!passwordCheck ? '' : 'red'\">\r\n <input [type]=\"showPassword ? 'text' : 'password'\" required=\"\" [(ngModel)]=\"password\"\r\n (ngModelChange)=\"onPasswordChange()\" class=\"w-90 b-none clr-black\" placeholder=\"Johndoe@1234\">\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"loginType==='OTP'\">\r\n <div class=\"d-flex align-items-center justify-content-between otp_input\" [ngClass]=\"{'gap-1': loginType==='OTP' &&\r\n generateOtp===false}\" *ngIf=\"!generateOtp\">\r\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\r\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\r\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\r\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\r\n </div>\r\n <!-- <input class=\"w-100\" placeholder=\"1234\" [(ngModel)]=\"oneTimePassword\" type=\"number\"> -->\r\n </div>\r\n </ng-container>\r\n </div>\r\n <span *ngIf=\"passwordCheck && currentPage === 'SIGNUP'\" class=\"f-12\" [style.color]=\"'red'\">Your password must\r\n contain 1 Uppercase , 1\r\n Lowercase , 1 Special\r\n Character , 1 Digit and Minimum 8 Characters*</span>\r\n </div>\r\n <!-- <div class=\"forgot-pwd w-100 text-end mb-2\" [style.color]=\"accentColor\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">\r\n Forgot Password?</div> -->\r\n <!-- <button class=\"button\" *ngIf=\"!buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n (click)=\"login()\">Login</button> -->\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content: {\r\n 'label': 'Login' } \" (click)=\" login()\" *ngIf=\"!generateOtp\" [buttonStyle]=\"data?.action?.buttons[1]?.styles\"\r\n [buttonId]=\"data?.action?.buttons[1]?.id\" [sectionId]=\"data?.id\" [edit]=\"edit\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [loading]=\"buttonLoading\" [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading && !generateOtp\" [buttonData]=\"button?.content\"\r\n [buttonStyle]=\"button?.styles\" simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\" (click)=\"login()\">Login</button> -->\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content: {\r\n 'label': 'Generate Otp'} \" (click)=\"getOTP()\" *ngIf=\"generateOtp\"\r\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" [buttonId]=\"data?.action?.buttons[2]?.id\" [sectionId]=\"data?.id\"\r\n [edit]=\"edit\" [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [loading]=\"buttonLoading\" [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading && generateOtp\" [buttonData]=\"button?.content\"\r\n [buttonStyle]=\"button?.styles\" simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\" (click)=\"getOTP()\">Generate Otp</button> -->\r\n <!-- <button class=\"button\" *ngIf=\"buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\"\r\n [color]=\"styles?.background?.accentColor\">Loading...</button> -->\r\n <!-- <button class=\"send-btn p-2\" *ngIf=\"buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Loading...</button> -->\r\n\r\n\r\n <div class=\"sign-up mt-3 d-flex align-items-center justify-content-end fs-13\" *ngIf=\"signUpEnabled\">\r\n <span class=\"cursor-pointer text-dark\" (click)=\"loginAuthentication('OTP')\"\r\n *ngIf=\"loginType==='PASSWORD';else loginWithPassword\">Login with\r\n OTP</span>\r\n </div>\r\n <ng-template #loginWithPassword>\r\n <span class=\"cursor-pointer text-dark\" (click)=\"loginAuthentication('PASSWORD')\">Login with\r\n Password</span>\r\n </ng-template>\r\n <!-- <div class=\"text-center mt-20\">\r\n <div class=\"or-divider\">\r\n <span class=\"or-text\">or</span>\r\n </div>\r\n <div class=\"sign-up\">Login with <span [style.color]=\"accentColor\">OTP</span></div>\r\n </div> -->\r\n </div>\r\n</ng-template>\r\n<ng-template #signInTemplate>\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">Sign up</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Name</label>\r\n <input type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\" placeholder=\"Jane Doe\">\r\n </div>\r\n <div class=\"input-box\">\r\n <label for=\"\">Email</label>\r\n <input type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\" placeholder=\"janedoe@gmail.com\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\r\n </div>\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"\">Phone Number</label>\r\n <input type=\"number\" class=\"clr-black\" [(ngModel)]=\"mobile\" (ngModelChange)=\"onMobileChange()\"\r\n placeholder=\"9876543219\" [style.borderColor]=\"!mobileCheck ? '' : 'red'\" class=\"no-arrows\">\r\n <span class=\"f-12\" *ngIf=\"mobileCheck\" [style.color]=\"'red'\">Please Enter valid Mobile number*</span>\r\n </div>\r\n <div class=\" input-box position-relative\">\r\n <div class=\"d-flex align-items-center justify-content-between password-text-container\"><label\r\n for=\"\">Password</label>\r\n <div *ngIf=\"!showPassword\" class=\"password-config d-flex align-items-center cursor-pointer\"\r\n (click)=\"showPassword = true\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/181720c1762866309854Icon_(3).svg\" alt=\"\"> Show\r\n </div>\r\n <div class=\"password-config d-flex align-items-center cursor-pointer\" (click)=\"showPassword = false\"\r\n *ngIf=\"showPassword\"><img\r\n src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/994914c1762805529071Eye_off.svg\" alt=\"\"> Hide\r\n </div>\r\n </div>\r\n <div class=\"w-100 d-flex align-items-center\">\r\n <input [type]=\"showPassword ? 'text' : 'password'\" required=\"\" [(ngModel)]=\"password\" class=\"w-90 clr-black\"\r\n placeholder=\"Janedoe@1234\" [style.borderColor]=\"!passwordCheck ? '' : 'red'\"\r\n (ngModelChange)=\"onPasswordChange()\">\r\n </div>\r\n <span *ngIf=\"passwordCheck\" class=\"f-12\" [style.color]=\"'red'\">Your password must contain 1 Uppercase , 1\r\n Lowercase , 1 Special\r\n Character , 1 Digit and Minimum 8 Characters*</span>\r\n <!-- <div class=\"strength-bar-container\">\r\n <div *ngFor=\"let strength of passwordStrength; let idx = index\" class=\"strength-bar\"\r\n [style.backgroundColor]=\"getStrengthColor(idx)\"></div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <app-button-element [buttonContent]=\"data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content: {\r\n 'label': 'Create Account' } \" (click)=\"createAccount()\" [buttonStyle]=\"data?.action?.buttons[0]?.styles\"\r\n [buttonId]=\"data?.action?.buttons[0]?.id\" [sectionId]=\"data?.id\" [edit]=\"edit\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [disabled]=\"!isEmailValid || !isPasswordValid || !userName\" [loading]=\"buttonLoading\"\r\n [isFullWidth]=\"true\"></app-button-element>\r\n <!-- <button class=\"button\" *ngIf=\"!buttonLoading\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n (click)=\"createAccount()\" [disabled]=\"!isEmailValid || !isPasswordValid || !userName\">Create Account</button> -->\r\n <!-- <button class=\"button\" simpoButtonDirective [id]=\"buttonId\" [buttonStyle]=\"button?.styles\"\r\n [backgroundInfo]=\"styles?.background\" [simpoCorner]=\"styles?.corners\" [color]=\"styles?.background?.accentColor\"\r\n *ngIf=\"buttonLoading\">Loading...</button> -->\r\n\r\n\r\n <div class=\"sign-up text-secondary d-flex align-items-center justify-content-end \r\n mt-3 fs-14 w-100 text-center \">Already have an account? <span (click)=\"currentPage = 'LOGIN'\"\r\n class=\"cursor-pointer text-dark\">Login</span></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #forgotPasswordTemplate>\r\n <div>\r\n <div class=\"input-box\">\r\n <label for=\"\">Email or Phone number</label>\r\n <input type=\"email\" [(ngModel)]=\"email\" required=\"\" placeholder=\"janedoe@gmail.com\"\r\n (ngModelChange)=\"onEmailChange()\" [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n </div>\r\n <button class=\"send-btn p-2\" *ngIf=\"!buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Submit</button>\r\n <button class=\"send-btn p-2\" *ngIf=\"buttonLoading\" [buttonData]=\"button?.content\" [buttonStyle]=\"button?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(button?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"button?.id ?? ''\">Loading...</button>\r\n </div>\r\n</ng-template>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:450px;margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0 0 2rem;position:relative;transition:all .4s ease;margin:unset!important}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:#ffffff1a;box-shadow:0 8px 32px #1f268733;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:80px;border:1px solid rgba(255,255,255,.18);animation:animate 25s linear infinite;bottom:-150px}.circles li:nth-child(1){left:25%;width:80px;height:80px;animation-delay:0s}.circles li:nth-child(2){left:10%;width:20px;height:20px;animation-delay:2s;animation-duration:12s}.circles li:nth-child(3){left:70%;width:20px;height:20px;animation-delay:4s}.circles li:nth-child(4){left:40%;width:60px;height:60px;animation-delay:0s;animation-duration:18s}.circles li:nth-child(5){left:65%;width:20px;height:20px;animation-delay:0s}.circles li:nth-child(6){left:75%;width:110px;height:110px;animation-delay:3s}.circles li:nth-child(7){left:35%;width:150px;height:150px;animation-delay:7s}.circles li:nth-child(8){left:50%;width:25px;height:25px;animation-delay:15s;animation-duration:45s}.circles li:nth-child(9){left:20%;width:15px;height:15px;animation-delay:2s;animation-duration:35s}.circles li:nth-child(15){left:10%;width:20px;height:20px;animation-delay:2s;animation-duration:12s}@keyframes animate{0%{transform:translateY(0) rotate(0);opacity:1;border-radius:0}to{transform:translateY(-1000px) rotate(720deg);opacity:0;border-radius:50%}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}\n"] }]
|
|
637
639
|
}], ctorParameters: () => [{ type: i1.RestService }, { type: i2.Router }, { type: i3.MessageService }, { type: i4.StorageServiceService }, { type: i5.MatDialog }, { type: i2.ActivatedRoute }, { type: i0.ElementRef }, { type: i5.MatDialogRef, decorators: [{
|
|
638
640
|
type: Optional
|
|
639
641
|
}] }, { type: i6.MatBottomSheetRef, decorators: [{
|
|
@@ -650,4 +652,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
650
652
|
type: ViewChildren,
|
|
651
653
|
args: ['otpInput']
|
|
652
654
|
}] } });
|
|
653
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFFBQVEsRUFBYSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMv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QW9CLDJNQUVwQixrQkFBa0IseUZBQ2xCLG1CQUFtQiwwR0FDbkIsd0JBQXdCLHNJQUN4QixtQkFBbUIsbUZBQ25CLGVBQWUsbUZBQ2YsY0FBYyxnRkFDZCxnQkFBZ0IscUZBQ2hCLHNCQUFzQix5R0FDdEIscUJBQXFCOzs0RkFNWiwrQkFBK0I7a0JBM0IzQyxTQUFTOytCQUNFLCtCQUErQixjQUM3QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBRXBCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQix3QkFBd0I7d0JBQ3hCLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3dCQUN0QixxQkFBcUI7cUJBQ3RCLGFBQ1UsQ0FBQyxjQUFjLENBQUM7OzBCQW1EeEIsUUFBUTs7MEJBQ1IsUUFBUTt5Q0E5Q0YsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQXNEb0IsTUFBTTtzQkFBL0IsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT3B0aW9uYWwsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuaW1wb3J0IHsgRGV2aWNlSW5mbyB9IGZyb20gJy4uLy4uL3N0eWxlcy91c2VyLm1vZGFsJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldFJlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uTW9kZWwsIEF1dGhlbnRpY2F0aW9uU3R5bGVzTW9kZWwgfSBmcm9tICcuL2F1dGhlbnRpY2F0aW9uLXJlcXVpcmVkLm1vZGVsJztcclxuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcclxuaW1wb3J0IHsgQW5pbWF0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2FuaW1hdGlvbi1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb3JuZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvY29ybmVyLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgT3ZlcmxheURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9vdmVybGF5LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNwYWNpbmdBcm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvc3BhY2luZy1hcm91bmQuZGlyZWN0aXZlJztcclxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uLy4uLy4uL3NlY3Rpb25zL0Jhc2VTZWN0aW9uJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kZWwsIExheU91dE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgQnV0dG9uRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1lZGl0b3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9zaW1wby1idXR0b24vc2ltcG8tYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi9lY29tbWVyY2Uvc3R5bGVzL3Byb2R1Y3QubW9kYWwnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1hdXRoZW50aWNhdGlvbi1yZXF1aXJlZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFRvYXN0TW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIFNpbXBvQnV0dG9uQ29tcG9uZW50LFxyXG5cclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBPdmVybGF5RGlyZWN0aXZlLFxyXG4gICAgU3BhY2luZ0Fyb3VuZERpcmVjdGl2ZSxcclxuICAgIEJ1dHRvbkVkaXRvckRpcmVjdGl2ZVxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoZW50aWNhdGlvbi1yZXF1aXJlZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2F1dGhlbnRpY2F0aW9uLXJlcXVpcmVkLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvblJlcXVpcmVkQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24ge1xyXG4gIC8vIHByaXZhdGUgZW1haWxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBkYXRhPzogQXV0aGVudGljYXRpb25Nb2RlbCB8IGFueTtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIHN0eWxlcz86IEF1dGhlbnRpY2F0aW9uU3R5bGVzTW9kZWw7XHJcbiAgYnV0dG9uPzogQnV0dG9uTW9kZWxcclxuICBidXR0b25JZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIGN1cnJlbnRQYWdlOiAnTE9HSU4nIHwgJ1NJR05VUCcgfCAnRk9SR09UX1BBU1NXT1JEJyA9ICdMT0dJTic7XHJcbiAgcHJpdmF0ZSBtb2JpbGVUaW1lcjogYW55O1xyXG4gIHB1YmxpYyBlbWFpbDogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgbW9iaWxlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyBvdHA6IHN0cmluZyA9IFwiXCI7XHJcbiAgb3RwQ29udHJvbHMgPSBuZXcgRm9ybUFycmF5KFtcclxuICAgIG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKSxcclxuICAgIG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKVxyXG4gIF0pO1xyXG4gIHB1YmxpYyBwYXNzd29yZDogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgY29uZlBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyB1c2VyTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgYnV0dG9uTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBidXNpbmVzc0lkOiBzdHJpbmcgfCBudWxsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpO1xyXG4gIHB1YmxpYyBpc09UUFZlcmlmaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHBhc3N3b3JkSGlkZGVuOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aENvdW50OiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBwYXNzd29yZFN0cmVuZ3RoID0gW1xyXG4gICAgeyB0eXBlOiBcIm1pbmltdW0gOCBjaGFyYWN0ZXJcIiwgYWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIFVQUEVSQ0FTRVwiLCBhY3RpdmU6IGZhbHNlIH0sXHJcbiAgICB7IHR5cGU6IFwiYXRsZWFzdCBvbmUgbG93ZXJjYXNlXCIsIGFjdGl2ZTogZmFsc2UgfSxcclxuICAgIHsgdHlwZTogXCJhdGxlYXN0IG9uZSBudW1iZXJcIiwgYWN0aXZlOiBmYWxzZSB9LFxyXG4gIF1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF0RGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEF1dGhlbnRpY2F0aW9uUmVxdWlyZWRDb21wb25lbnQ+LFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBib3R0b21zaGVldFJlZjogTWF0Qm90dG9tU2hlZXRSZWY8QXV0aGVudGljYXRpb25SZXF1aXJlZENvbXBvbmVudD4sXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJ1c2VyIGF1dGhlbnRpY2F0aW5nIGJhY2tcIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSlcclxuICB9XHJcblxyXG4gIHNpZ25VcEVuYWJsZWQ6IGFueSA9IHRydWU7XHJcbiAgcHJvY2VlZFRvQ2hlY2tvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm9jZWVkVG9FbnJvbGxtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgdHJ5QXRIb21lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbmF2aWdhdGVUb1NjaGVtZURldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkcmVuKCdvdHBJbnB1dCcpIGlucHV0cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ2NhcnQnXSlcclxuICAgICAgICB0aGlzLnByb2NlZWRUb0NoZWNrb3V0ID0gdHJ1ZTtcclxuICAgICAgaWYgKHBhcmFtICYmIHBhcmFtWydyZWRpcmVjdFRvJ10pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyYW1bJ3JlZGlyZWN0VG8nXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3NjaGVtZXMnXSkge1xyXG4gICAgICAgIHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcmFtICYmIHBhcmFtWyd0cnlBdEhvbWUnXSkge1xyXG4gICAgICAgIHRoaXMudHJ5QXRIb21lID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwYXJhbSAmJiBwYXJhbVsnc2NoZW1lRGV0YWlsJ10pIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9TY2hlbWVEZXRhaWxzID0gdHJ1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XHJcbiAgICB0aGlzLmJ1dHRvbiA9IHRoaXMuZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdO1xyXG4gICAgdGhpcy5idXR0b25JZCA9ICh0aGlzLmRhdGEgPyB0aGlzLmRhdGEuaWQgOiAnJykgKyAodGhpcy5idXR0b24gPyB0aGlzLmJ1dHRvbi5pZCA6ICcnKTtcclxuXHJcbiAgICBsZXQgZW5hYmxlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzaWduVXBFbmFibGVkJyk7XHJcbiAgICBpZiAoZW5hYmxlZCAhPSBudWxsKVxyXG4gICAgICB0aGlzLnNpZ25VcEVuYWJsZWQgPSBlbmFibGVkID09PSAndHJ1ZSc7XHJcblxyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyB0aGlzLnNldHVwM0RFZmZlY3RzKCk7XHJcbiAgfVxyXG4gIG9uSW5wdXQoaW5kZXg6IG51bWJlcikge1xyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5vdHBDb250cm9scy5hdChpbmRleCkudmFsdWUgfHwgJyc7XHJcblxyXG4gICAgaWYgKCEvXlswLTldJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5vdHBDb250cm9scy5hdChpbmRleCkuc2V0VmFsdWUoJycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluZGV4IDwgNSkge1xyXG4gICAgICB0aGlzLmlucHV0cy50b0FycmF5KClbaW5kZXggKyAxXS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcclxuXHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiAhdGhpcy5vdHBDb250cm9scy5hdChpbmRleCkudmFsdWUgJiYgaW5kZXggPiAwKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRzLnRvQXJyYXkoKVtpbmRleCAtIDFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGdldEdyYWRpZW50RGlyZWN0aW9uKGRpcmVjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ0RPV04nOlxyXG4gICAgICAgIHJldHVybiAnJzsgLy8gZGVmYXVsdCB0b3Ag4oaSIGJvdHRvbSAobm8gYW5nbGUgbmVlZGVkKVxyXG5cclxuICAgICAgY2FzZSAnUklHSFQnOlxyXG4gICAgICAgIHJldHVybiAnOTBkZWcnO1xyXG5cclxuICAgICAgY2FzZSAnRElBR09OQUxfUklHSFQnOlxyXG4gICAgICAgIHJldHVybiAnNDVkZWcnO1xyXG5cclxuICAgICAgY2FzZSAnRElBR09OQUxfTEVGVCc6XHJcbiAgICAgICAgcmV0dXJuICcxMzVkZWcnO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7IC8vIGZhbGxiYWNrXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBmb250Q29sb3IoKTogc3RyaW5nIHtcclxuICAgIGxldCBjb2xvciA9IHRoaXMuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvcjtcclxuICAgIGlmICghY29sb3IpIHJldHVybiAnIzAwMCc7XHJcblxyXG4gICAgLy8gaWYgZ3JhZGllbnQsIGV4dHJhY3QgZmlyc3QgaGV4IGNvbG9yXHJcbiAgICBjb25zdCBncmFkaWVudE1hdGNoID0gY29sb3IubWF0Y2goLyMoWzAtOWEtZkEtRl17Nn0pLyk7XHJcbiAgICBpZiAoZ3JhZGllbnRNYXRjaCkge1xyXG4gICAgICBjb2xvciA9IGdyYWRpZW50TWF0Y2hbMF07XHJcbiAgICB9XHJcblxyXG4gICAgY29sb3IgPSBjb2xvci5yZXBsYWNlKCcjJywgJycpO1xyXG5cclxuICAgIGNvbnN0IHIgPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoMCwgMiksIDE2KTtcclxuICAgIGNvbnN0IGcgPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGNvbnN0IGIgPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoNCwgNiksIDE2KTtcclxuXHJcbiAgICBjb25zdCBicmlnaHRuZXNzID0gKHIgKiAyOTkgKyBnICogNTg3ICsgYiAqIDExNCkgLyAxMDAwO1xyXG5cclxuICAgIHJldHVybiBicmlnaHRuZXNzID4gMTI4ID8gJyMwMDAnIDogJyNmZmYnO1xyXG4gIH1cclxuICBnZXQgYWNjZW50QmFja2dyb3VuZCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYmcgPSB0aGlzLnN0eWxlcz8uYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIWJnKSByZXR1cm4gJyc7XHJcblxyXG4gICAgaWYgKGJnLmFjY2VudEJhY2tncm91bmRUeXBlID09PSAnU29saWQnKSB7XHJcbiAgICAgIHJldHVybiBiZy5hY2NlbnRDb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhbmdsZSA9IHRoaXMuZ2V0R3JhZGllbnREaXJlY3Rpb24oYmcuZ3JhZGllbnREaXJlY3Rpb24pO1xyXG5cclxuICAgIHJldHVybiBhbmdsZVxyXG4gICAgICA/IGBsaW5lYXItZ3JhZGllbnQoJHthbmdsZX0sICR7YmcuYWNjZW50Q29sb3J9LCAke2JnLnNlY29uZGFyeUFjY2VudENvbG9yfSlgXHJcbiAgICAgIDogYGxpbmVhci1ncmFkaWVudCgke2JnLmFjY2VudENvbG9yfSwgJHtiZy5zZWNvbmRhcnlBY2NlbnRDb2xvcn0pYDtcclxuICB9XHJcbiAgZ2V0Rm9ybU90cCgpIHtcclxuICAgIHJldHVybiB0aGlzLm90cENvbnRyb2xzLnZhbHVlLmpvaW4oJycpO1xyXG4gIH1cclxuICBsb2dpblR5cGU6IFwiUEFTU1dPUkRcIiB8IFwiT1RQXCIgPSBcIk9UUFwiO1xyXG4gIGdlbmVyYXRlT3RwOiBib29sZWFuID0gdHJ1ZTtcclxuICBsb2dpbkF1dGhlbnRpY2F0aW9uKGxvZ2luVHlwZTogXCJQQVNTV09SRFwiIHwgXCJPVFBcIikge1xyXG4gICAgdGhpcy5sb2dpblR5cGUgPSBsb2dpblR5cGU7XHJcbiAgICBpZiAodGhpcy5sb2dpblR5cGUgPT0gXCJPVFBcIikge1xyXG4gICAgICB0aGlzLmdlbmVyYXRlT3RwID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubG9naW5UeXBlID09IFwiUEFTU1dPUkRcIikge1xyXG4gICAgICB0aGlzLmdlbmVyYXRlT3RwID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdlbmVyYXRlZE90cDogYW55ID0gbnVsbDtcclxuICBvbmVUaW1lUGFzc3dvcmQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgb3RwUGF5bG9hZDogYW55ID0ge1xyXG4gICAgXCJidXNpbmVzc0lkXCI6IHRoaXMuYnVzaW5lc3NJZCA/PyBcIlwiLFxyXG4gICAgXCJlbWFpbFwiOiB0aGlzLmVtYWlsID8/IFwiXCJcclxuICB9XHJcbiAgZ2V0T1RQKCkge1xyXG4gICAgaWYgKCF0aGlzLmVkaXQpIHtcclxuICAgICAgaWYgKHRoaXMuZW1haWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVPdHAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm90cFBheWxvYWQuZW1haWwgPSB0aGlzLmVtYWlsO1xyXG4gICAgICAgIHRoaXMucmVnZW5lcmF0ZU90cCh0aGlzLm90cFBheWxvYWQpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0xvZ2luIHJlcXVlc3QnLCBkZXRhaWw6IFwiRW50ZXIgeW91ciBsb2dpbiBlbWFpbFwiIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlZ2VuZXJhdGVPdHAocGF5bG9hZDogYW55KSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldE90cEZvckxvZ2luKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmdlbmVyYXRlZE90cCA9IHJlc3BvbnNlO1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdPdHAgU2VudCcsIGRldGFpbDogJ090cCBzZW50IHRvIHlvdXIgZW1haWwnIH0pO1xyXG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0xvZ2luIHJlcXVlc3QnLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcclxuICAgIH0pXHJcbiAgfVxyXG4gIHJlc2VuZE90cCgpIHtcclxuICAgIHRoaXMucmVnZW5lcmF0ZU90cCh0aGlzLm90cFBheWxvYWQpXHJcbiAgfVxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcbiAgbG9naW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdCkge1xyXG4gICAgICBpZiAodGhpcy5sb2dpblR5cGUgPT0gXCJPVFBcIikge1xyXG4gICAgICAgIHRoaXMudmVyaWZ5T1RQKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52ZXJpZnlQYXNzd29yZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHVzZXJJZDogYW55LCByZWZlcnJhbFVuaXF1ZUlkOiBhbnkpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZW5kVXNlclJlZmZlcmFsRGV0YWlscyh1c2VySWQsIHJlZmVycmFsVW5pcXVlSWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInJlc3BvbnNlXCIsIHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKVxyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFJlZmVycmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnJlZmVycmFsRGV0YWlscyk7XHJcbiAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKVxyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnTG9naW4gcmVxdWVzdCcsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHZlcmlmeVBhc3N3b3JkKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5pc0VtYWlsVmFsaWQpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgRW1haWwnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc1Bhc3N3b3JkVmFsaWQpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgUGFzc3dvcmQnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBwYXNzd29yZCcgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQgPz8gXCIxZjEyNTBiMS00NjdlLTY3YmMtYWQ4OS04MTNhNDRlZDBlMGZcIixcclxuICAgICAgZW1haWw6IHRoaXMuZW1haWwudG9Mb3dlckNhc2UoKSxcclxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXHJcbiAgICAgIHJlcXVlc3RUeXBlOiBcIlBBU1NXT1JEXCJcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5zaWduaW5QYXNzd29yZChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VG9rZW4ocmVzcG9uc2UuZGF0YS5wYXNzYm9va1Rva2VuKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0UmVmZXJyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKTtcclxuICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpIHtcclxuICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN5bmNUcmlhbENhcnRUb1NlcnZlckRCKHVzZXJEZXRhaWxzLnVzZXJJZClcclxuICAgICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3N1Y2Nlc3MnKTtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnTG9nZ2VkIEluJywgZGV0YWlsOiAnTG9nZ2VkIGluIFN1Y2Nlc3NmdWxseScgfSk7XHJcbiAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KVxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSwgeyBxdWVyeVBhcmFtczogeyBjaGVja291dDogdHJ1ZSB9IH0pO1xyXG4gICAgICBlbHNlIGlmICh0aGlzLnByb2NlZWRUb0Vucm9sbG1lbnQpXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvc2NoZW1lcyddKTtcclxuICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaG9tZS1hcHBvaW50bWVudCddKTtcclxuICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2NoZW1lLWRldGFpbCddKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcclxuICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiByZXF1ZXN0JywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG4gIHZlcmlmeU9UUCgpIHtcclxuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuaXNFbWFpbFZhbGlkKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdJbnZhbGlkIEVtYWlsJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcycgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMub25lVGltZVBhc3N3b3JkID0gdGhpcy5vdHBDb250cm9scz8udmFsdWU/LmpvaW4oJycpIHx8ICcnO1xyXG4gICAgaWYgKHRoaXMub25lVGltZVBhc3N3b3JkLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkID8/IFwiMWYwN2NkMDktY2Y2MS02MDA4LTk4NTQtMDU0Yjk4YTE2MjdhXCIsXHJcbiAgICAgICAgZW1haWw6IHRoaXMuZW1haWwudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICBlbnRlcmVkT3RwOiB0aGlzLm9uZVRpbWVQYXNzd29yZCxcclxuICAgICAgICByZXF1ZXN0VHlwZTogXCJPVFBcIlxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2Uuc2lnbmluUGFzc3dvcmQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlQWxsRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0UmVmZXJyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKTtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xyXG4gICAgICAgICAgdGhpcy5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEudXNlcklkLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpXHJcbiAgICAgICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0xvZ2dlZCBJbicsIGRldGFpbDogJ0xvZ2dlZCBpbiBTdWNjZXNzZnVsbHknIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KVxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGNoZWNrb3V0OiB0cnVlIH0gfSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZWVkVG9FbnJvbGxtZW50KVxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvc2NoZW1lcyddKTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSlcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2hvbWUtYXBwb2ludG1lbnQnXSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzY2hlbWUtZGV0YWlsJ10pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xyXG4gICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnTG9naW4gcmVxdWVzdCcsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiByZXF1ZXN0JywgZGV0YWlsOiBcIlBsZWFzZSBlbnRlciBPVFBcIiB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZW5kU2lnbnVwT1RQKCkge1xyXG4gICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNPVFBWZXJpZmllZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMubW9iaWxlVGltZXIpXHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vYmlsZVRpbWVyKTtcclxuICAgIHRoaXMubW9iaWxlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMubW9iaWxlLmxlbmd0aCAhPSAxMClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQsXHJcbiAgICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcclxuICAgICAgICBlbWFpbDogdGhpcy5lbWFpbCxcclxuICAgICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCxcclxuICAgICAgICBjb3VudHJ5Q29kZTogJzkxJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2Uuc2VuZFNpZ251cE9UUChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc09UUFZlcmlmaWVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdPVFAnLCBkZXRhaWw6ICdPVFAgU2VudCcgfSk7XHJcbiAgICAgIH0sIChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnT1RQIFJlcXVlc3QnLCBkZXRhaWw6IGVyci5lcnJvci5tZXNzYWdlIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG4gICAgfSwgODAwKTtcclxuICB9XHJcbiAgY3JlYXRlQWNjb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5lZGl0KSB7XHJcbiAgICAgIGlmICghdGhpcy5pc0VtYWlsVmFsaWQpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBFbWFpbCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuaXNQYXNzd29yZFZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgUGFzc3dvcmQnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBwYXNzd29yZCcgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5tb2JpbGVOdW1iZXJWYWxpZCkge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdJbnZhbGlkIE1vYmlsZSBOdW1iZXInLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBtb2JpbGUgbnVtYmVyJyB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGRldmljZUluZm86IERldmljZUluZm8gfCBudWxsID0ge1xyXG4gICAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBsZXQgdmVyaWZ5U2lnbkRhdGEgPSB7XHJcbiAgICAgICAgbmFtZTogdGhpcy51c2VyTmFtZSxcclxuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQsXHJcbiAgICAgICAgYnVzaW5lc3NOYW1lOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYk5hbWUnKSxcclxuICAgICAgICBtb2JpbGU6IHRoaXMubW9iaWxlLFxyXG4gICAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXHJcbiAgICAgICAgY291bnRyeUNvZGU6IFwiKzkxXCIsXHJcbiAgICAgICAgZW50ZXJlZE90cDogdGhpcy5vdHAsXHJcbiAgICAgICAgcmVmZXJyYWxJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSA/PyBcIlwiXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXN0U2VydmljZS52ZXJpZnlTaWdudXBPVFAodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5zZXRVc2VyKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VG9rZW4ocmVzcG9uc2UuZGF0YS5wYXNzYm9va1Rva2VuKTtcclxuICAgICAgICAvLyB0aGlzLnJlc3RTZXJ2aWNlLmdlbmVyYXRlVG9rZW4obG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JJZCcpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIC8vICAgbmV4dDogKHRva2VuUmVzcG9uc2U6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAvLyAgIH0sXHJcbiAgICAgICAgLy8gICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdlbmVyYXRpbmcgdG9rZW46JywgZXJyb3IpO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0pXHJcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpIHtcclxuICAgICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlQWxsRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKVxyXG5cclxuICAgICAgICAvLyB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc3VjY2VzcycpO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ1NpZ24gVXAnLCBkZXRhaWw6ICdZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQnIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KVxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGNoZWNrb3V0OiB0cnVlIH0gfSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9ob21lLWFwcG9pbnRtZW50J10pO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pOyAgICAgIC8vIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgLy8gICBpY29uOiBcInN1Y2Nlc3NcIixcclxuICAgICAgICAvLyAgIHRpdGxlOiBcIkh1cnJheVwiLFxyXG4gICAgICAgIC8vICAgdGV4dDogXCJZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIixcclxuICAgICAgICAvLyAgIHNob3dDYW5jZWxCdXR0b246ICEodXNlckRldGFpbHMuY29udGFjdD8ubmFtZT8ubGVuZ3RoID4gMCksXHJcbiAgICAgICAgLy8gICBjb25maXJtQnV0dG9uVGV4dDogXCJJIGxvdmVkIGl0XCIsXHJcbiAgICAgICAgLy8gICBjYW5jZWxCdXR0b25UZXh0OiBcIkZpbGwgb3RoZXIgYmFzaWMgZGV0YWlsc1wiLFxyXG4gICAgICAgIC8vICAgY2FuY2VsQnV0dG9uQ29sb3I6IFwiIzkyOGM4Y1wiLFxyXG4gICAgICAgIC8vIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgICAvLyAgIGlmIChyZXN1bHQuaXNEaXNtaXNzZWQpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5tYXREaWFsb2cub3BlbihVc2VyQmFzaWNJbmZvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgLy8gICAgICAgaGVpZ2h0OiAnNTB2aCcsXHJcbiAgICAgICAgLy8gICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoID4gNDc1ID8gJzQwdncnIDogJzk1dncnLFxyXG4gICAgICAgIC8vICAgICAgIG1heFdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCA+IDQ3NSA/ICcxMDB2dycgOiAnODB2dycsXHJcbiAgICAgICAgLy8gICAgICAgZGF0YToge31cclxuICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfSlcclxuICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnU2lnbnVwIGVycm9yJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnU2lnbnVwIGVycm9yJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICB2ZXJpZnlTaWdudXBPVFAoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMub3RwLmxlbmd0aCAhPSA2KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZGV2aWNlSW5mbzogRGV2aWNlSW5mbyB8IG51bGwgPSB7XHJcbiAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgdmVyaWZ5U2lnbkRhdGEgPSB7XHJcbiAgICAgIGJ1c2luZXNzSWQ6IHRoaXMuYnVzaW5lc3NJZCxcclxuICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcclxuICAgICAgZW1haWw6IHRoaXMuZW1haWwsXHJcbiAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxyXG4gICAgICBjb3VudHJ5Q29kZTogXCI5MVwiLFxyXG4gICAgICBlbnRlcmVkT3RwOiB0aGlzLm90cCxcclxuICAgICAgcmVmZXJyYWxJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSA/PyBcIlwiXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnZlcmlmeVNpZ251cE9UUCh2ZXJpZnlTaWduRGF0YSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcblxyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xyXG4gICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQJywgZGV0YWlsOiAnT1RQIFZlcmlmaWVkJyB9KTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1VzZXIgYWxyZWFkeSBleGlzdHMnIH0pXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgT1RQJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIHZhbGlkIG90cCcgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGVudGVyTW9iaWxlKCkge1xyXG5cclxuICAgIGlmICh0aGlzLm1vYmlsZVRpbWVyKVxyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5tb2JpbGVUaW1lcik7XHJcbiAgICB0aGlzLm1vYmlsZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLm1vYmlsZS5sZW5ndGggIT0gMTApXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlT1RQKCk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVPVFAoKSB7XHJcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZW5lcmF0ZU9UUCh0aGlzLm1vYmlsZSA/PyBcIlwiLCBcIjkxXCIpLnN1YnNjcmliZShcclxuICAgICAgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAgU2VudCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdPVFAgc2VudCB0byBtb2JpbGUuIFZhbGlkIGZvciAzIG1pbnMnLFxyXG4gICAgICAgICAgbGlmZTogMTAwMDBcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/LmVycm9yPy5tZXNzYWdlO1xyXG5cclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAgUmVxdWVzdCcsXHJcbiAgICAgICAgICBkZXRhaWw6IGVycm9yTWVzc2FnZSxcclxuICAgICAgICAgIGxpZmU6IDEwMDAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZU51bWJlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hhckNvZGUgPSBldmVudC5jaGFyQ29kZTtcclxuICAgIGlmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYXRlT1RQKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vdHAubGVuZ3RoID09IDYpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgY2hlY2tTdHJlbmd0aCgpIHtcclxuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ID0gMDtcclxuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ICs9ICgvW0EtWl0vLnRlc3QodGhpcy5wYXNzd29yZCkpID8gMSA6IDA7XHJcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCArPSAoL1thLXpdLy50ZXN0KHRoaXMucGFzc3dvcmQpKSA/IDEgOiAwO1xyXG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgKz0gKC9cXGQvLnRlc3QodGhpcy5wYXNzd29yZCkpID8gMSA6IDA7XHJcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCArPSAodGhpcy5wYXNzd29yZC5sZW5ndGggPiA4ID8gMSA6IDApO1xyXG4gIH1cclxuICBnZXRTdHJlbmd0aENvbG9yKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHN3aXRjaCAodGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQpIHtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwidG9tYXRvXCIgOiBcIiNkM2QzZDNiYVwiKTtcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwib3JhbmdlXCIgOiBcIiNkM2QzZDNiYVwiKTtcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwieWVsbG93XCIgOiBcIiNkM2QzZDNiYVwiKTtcclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwibGlnaHRncmVlblwiIDogXCIjZDNkM2QzYmFcIik7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIFwiI2QzZDNkM2JhXCI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGVtYWlsRGVib3VuY2VUaW1lcjogYW55O1xyXG4gIG9uRW1haWxDaGFuZ2UoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5lbWFpbERlYm91bmNlVGltZXIpO1xyXG4gICAgdGhpcy5lbWFpbERlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc0VtYWlsVmFsaWQoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG4gIGVtYWlsQ2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0VtYWlsVmFsaWQoKSB7XHJcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xyXG4gICAgdGhpcy5lbWFpbENoZWNrID0gIWVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsKTtcclxuICAgIHJldHVybiBlbWFpbFJlZ2V4LnRlc3QodGhpcy5lbWFpbCk7XHJcbiAgfVxyXG4gIHBhc3N3b3JkRGVib3VuY2VUaW1lcjogYW55O1xyXG4gIG9uUGFzc3dvcmRDaGFuZ2UoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5wYXNzd29yZERlYm91bmNlVGltZXIpO1xyXG4gICAgdGhpcy5wYXNzd29yZERlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc1Bhc3N3b3JkVmFsaWQoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG4gIHBhc3N3b3JkQ2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1Bhc3N3b3JkVmFsaWQoKSB7XHJcbiAgICBjb25zdCBwYXNzd29yZFJlZ2V4ID0gL14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXGQpKD89LipbXkEtWmEtelxcZF0pLns4LH0kLztcclxuXHJcbiAgICBjb25zdCBpc1ZhbGlkID0gcGFzc3dvcmRSZWdleC50ZXN0KHRoaXMucGFzc3dvcmQpO1xyXG5cclxuICAgIC8vIFlvdSB3YW50IEZBTFNFIHdoZW4gdmFsaWRcclxuICAgIHRoaXMucGFzc3dvcmRDaGVjayA9ICFpc1ZhbGlkO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkQ2hlY2s7XHJcbiAgfVxyXG5cclxuICBtb2JpbGVEZWJvdW5jZVRpbWVyOiBhbnk7XHJcbiAgb25Nb2JpbGVDaGFuZ2UoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5tb2JpbGVEZWJvdW5jZVRpbWVyKTtcclxuICAgIHRoaXMubW9iaWxlRGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm1vYmlsZU51bWJlclZhbGlkKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuICBtb2JpbGVDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1vYmlsZU51bWJlclZhbGlkKCkge1xyXG4gICAgY29uc3QgbW9iaWxlUmVnZXggPSAvXls2LTldXFxkezl9JC87XHJcbiAgICB0aGlzLm1vYmlsZUNoZWNrID0gIW1vYmlsZVJlZ2V4LnRlc3QodGhpcy5tb2JpbGUpO1xyXG4gICAgcmV0dXJuIG1vYmlsZVJlZ2V4LnRlc3QodGhpcy5tb2JpbGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcblxyXG4gIGdldCBzdHlsZXNMYXlvdXQoKSB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlcz8ubGF5b3V0IH0gYXMgTGF5T3V0TW9kZWw7XHJcbiAgfVxyXG5cclxuICBnZXQgYWNjZW50Q29sb3IoKSB7XHJcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvciA/IHRoaXMuc3R5bGVzLmJhY2tncm91bmQ/LmFjY2VudENvbG9yIDogJyM2NjdlZWEnO1xyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWFjY2VudC1jb2xvcicsIGNvbG9yKTtcclxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY2NlbnQtc2hhZG93JywgdGhpcy5oZXhUb1JnYmEoY29sb3IsIDAuNCkpO1xyXG4gICAgcmV0dXJuIGNvbG9yO1xyXG4gIH1cclxuICBwcml2YXRlIGhleFRvUmdiYShoZXg6IHN0cmluZywgYWxwaGE6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnNsaWNlKDEsIDMpLCAxNik7XHJcbiAgICBjb25zdCBnID0gcGFyc2VJbnQoaGV4LnNsaWNlKDMsIDUpLCAxNik7XHJcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNik7XHJcbiAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthbHBoYX0pYDtcclxuICB9XHJcbiAgc2V0dXAzREVmZmVjdHMoKSB7XHJcbiAgICBjb25zdCBtYWluUGFuZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWFpbi1wYW5lbCcpO1xyXG5cclxuICAgIGlmIChtYWluUGFuZWwpIHtcclxuICAgICAgbWFpblBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIChlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pc01vYmlsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCByZWN0ID0gbWFpblBhbmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGNvbnN0IHggPSBlLmNsaWVudFggLSByZWN0LmxlZnQ7XHJcbiAgICAgICAgY29uc3QgeSA9IGUuY2xpZW50WSAtIHJlY3QudG9wO1xyXG5cclxuICAgICAgICBjb25zdCBjZW50ZXJYID0gcmVjdC53aWR0aCAvIDI7XHJcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IHJlY3QuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICAgICAgY29uc3Qgcm90YXRlWCA9ICh5IC0gY2VudGVyWSkgLyAyMDtcclxuICAgICAgICBjb25zdCByb3RhdGVZID0gKGNlbnRlclggLSB4KSAvIDIwO1xyXG5cclxuICAgICAgICAobWFpblBhbmVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS50cmFuc2Zvcm0gPSBgcGVyc3BlY3RpdmUoMTIwMHB4KSByb3RhdGVYKCR7cm90YXRlWH1kZWcpIHJvdGF0ZVkoJHtyb3RhdGVZfWRlZykgdHJhbnNsYXRlWigwKWA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbWFpblBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAobWFpblBhbmVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS50cmFuc2Zvcm0gPSAncm90YXRlWCgwZGVnKSByb3RhdGVZKDBkZWcpJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBzaG93UGFzc3dvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlcklkOiBzdHJpbmcpIHtcclxuICAgIGxldCB0cmlhbENhcnRJdGVtOiBhbnlbXSA9IFtdXHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFRyaWFsQ2FydCgpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHJlc3BvbnNlLm9uc3VjY2VzcyA9ICh1c2VyVHJpYWxDYXJ0UmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyaWFsQ2FydEl0ZW0gPSB1c2VyVHJpYWxDYXJ0UmVzcG9uc2UudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBpZiAodHJpYWxDYXJ0SXRlbT8ubGVuZ3RoID09IDApXHJcbiAgICAgICAgICByZXR1cm5cclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3Q6IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QgPSBuZXcgc3luY0l0ZW1Ub1NlcnZlckRCUmVxdWVzdCh1c2VySWQsICdUUklBTF9DQVJUJywgdHJpYWxDYXJ0SXRlbSlcclxuICAgICAgICB0aGlzLnJlc3RTZXJ2aWNlLmFkZFRyaWFsSXRlbShyZXF1ZXN0KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmNsZWFyVHJpYWxDYXJ0KCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG59XHJcbiIsIjxwLXRvYXN0IHBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCIgW2Jhc2VaSW5kZXhdPVwiMTAwMDAwMDAwMDBcIiBbYXV0b1pJbmRleF09XCJ0cnVlXCJcclxuICBbc2hvd1RyYW5zZm9ybU9wdGlvbnNdPVwiaXNNb2JpbGUgPyAndHJhbnNsYXRlWSgtMTAwJSknIDogJydcIj48L3AtdG9hc3Q+XHJcblxyXG48c2VjdGlvbiBbaWRdPVwiZGF0YT8uaWRcIiBjbGFzcz1cInRvdGFsLWNvbnRhaW5lclwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCI+XHJcbiAgPGRpdiBbc3BhY2luZ0Fyb3VuZF09XCJzdHlsZXNMYXlvdXRcIj5cclxuICAgIDxkaXYgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9MYXlvdXRdPVwic3R5bGVzPy5sYXlvdXRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImFyZWEgdy0xMDBcIj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJjaXJjbGVzXCIgW3NpbXBvT3ZlcmxheV09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBbaWRdPVwiZGF0YT8uaWRcIj5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IFtpZF09XCJkYXRhPy5pZFwiIGNsYXNzPVwibWFpbi1wYW5lbCBkLWZsZXggZ2FwLTJcIiBbc2ltcG9Db3JuZXJdPVwic3R5bGVzPy5jb3JuZXJzXCIgW3N0eWxlLm1heEhlaWdodC5weF09XCJcclxuICAgICAgICBjdXJyZW50UGFnZSA9PT0gJ0xPR0lOJyA/IDQ1MCA6IDYwMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbCB3LTEwMFwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZXM/LmFuaW1hdGlvblwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0YWJcIiBpZD1cInRhYi1zaWdudXBcIiAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnU0lHTlVQJ1wiXHJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJzpjdXJyZW50UGFnZSA9PT0gJ1NJR05VUCcgPyBhY2NlbnRCYWNrZ3JvdW5kIDogJyd9XCIgW3N0eWxlLmNvbG9yXT1cImZvbnRDb2xvclwiPlNpZ25cclxuICAgICAgICAgICAgICB1cDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGFiXCIgaWQ9XCJ0YWItbG9naW5cIiAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnTE9HSU4nXCJcclxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnOmN1cnJlbnRQYWdlID09PSAnTE9HSU4nID8gYWNjZW50QmFja2dyb3VuZCA6ICcnfVwiIFtzdHlsZS5jb2xvcl09XCJmb250Q29sb3JcIj5Mb2dcclxuICAgICAgICAgICAgICBpbjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VycmVudFBhZ2UgPT09ICdMT0dJTicgPyBsb2dpblRlbXBsYXRlIDogbnVsbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1cnJlbnRQYWdlID09PSAnU0lHTlVQJyA/IHNpZ25JblRlbXBsYXRlIDogbnVsbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImN1cnJlbnRQYWdlID09PSAnRk9SR09UX1BBU1NXT1JEJyA/IGZvcmdvdFBhc3N3b3JkVGVtcGxhdGUgOiBudWxsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgPC9kaXY+XHJcblxyXG48L3NlY3Rpb24+XHJcblxyXG48bmctdGVtcGxhdGUgI2xvZ2luVGVtcGxhdGU+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCB0ZXh0LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtYi0yIGxvZ2luLW1haW4tc2VjdGlvblwiPlxyXG4gICAgPHAgY2xhc3M9XCJtYi0wIGNsci1ibGFjayBsb2dpbi10ZXh0XCI+e3tsb2dpblR5cGUgPT09ICdPVFAnID8gJ0xvZ2luIHZpYSBPVFAnIDogJ0xvZ2luJ319PC9wPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJsb2dpbi1pbnB1dC1zZWN0aW9uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgIDxsYWJlbCBmb3I9XCJcIj5FbWFpbDwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBjbGFzcz1cImNsci1ibGFja1wiIFsobmdNb2RlbCldPVwiZW1haWxcIiByZXF1aXJlZD1cIlwiIHBsYWNlaG9sZGVyPVwiamFuZWRvZUBnbWFpbC5jb21cIlxyXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRW1haWxDaGFuZ2UoKVwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCIhZW1haWxDaGVjayA/ICcnIDogJ3JlZCdcIj5cclxuICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImYtMTJcIiAqbmdJZj1cImVtYWlsQ2hlY2tcIiBbc3R5bGUuY29sb3JdPVwiJ3JlZCdcIj5QbGVhc2UgRW50ZXIgdmFsaWQgRW1haWwqPC9zcGFuPiAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWJveCBtYi00XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gcGFzc3dvcmQtdGV4dC1jb250YWluZXJcIiAqbmdJZj1cImxvZ2luVHlwZT09PSdQQVNTV09SRCdcIj5cclxuICAgICAgICAgIFBhc3N3b3JkXHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dQYXNzd29yZFwiIGNsYXNzPVwicGFzc3dvcmQtY29uZmlnIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd1Bhc3N3b3JkID0gdHJ1ZVwiPjxpbWdcclxuICAgICAgICAgICAgICBzcmM9XCJodHRwczovL2Qyejk0OTd4cDh4YjEyLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzE4MTcyMGMxNzYyODY2MzA5ODU0SWNvbl8oMykuc3ZnXCIgYWx0PVwiXCI+Jm5ic3A7U2hvd1xyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFzc3dvcmQtY29uZmlnIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic2hvd1Bhc3N3b3JkID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInNob3dQYXNzd29yZFwiPjxpbWdcclxuICAgICAgICAgICAgICBzcmM9XCJodHRwczovL2Qyejk0OTd4cDh4YjEyLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzk5NDkxNGMxNzYyODA1NTI5MDcxRXllX29mZi5zdmdcIiBhbHQ9XCJcIj4mbmJzcDtIaWRlXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHctMTAwIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0xIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAqbmdJZj1cImxvZ2luVHlwZT09PSdPVFAnICYmICFnZW5lcmF0ZU90cFwiIHN0eWxlPVwiZm9udC1zaXplOjEycHhcIj5PVFAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwibG9naW5UeXBlPT09J09UUCcgJiYgZ2VuZXJhdGVPdHAgPT09IGZhbHNlXCIgKGNsaWNrKT1cInJlc2VuZE90cCgpXCIgc3R5bGU9XCJmb250LXNpemU6MTFweFwiPlJlc2VuZFxyXG4gICAgICAgICAgICBPdHA8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvZ2luVHlwZT09PSdQQVNTV09SRCdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBwYXNzd29yZC1pbnB1dC1jb250YWluZXJcIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiIXBhc3N3b3JkQ2hlY2sgPyAnJyA6ICdyZWQnXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbdHlwZV09XCJzaG93UGFzc3dvcmQgPyAndGV4dCcgOiAncGFzc3dvcmQnXCIgcmVxdWlyZWQ9XCJcIiBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblBhc3N3b3JkQ2hhbmdlKClcIiBjbGFzcz1cInctOTAgYi1ub25lIGNsci1ibGFja1wiIHBsYWNlaG9sZGVyPVwiSm9obmRvZUAxMjM0XCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9naW5UeXBlPT09J09UUCdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG90cF9pbnB1dFwiIFtuZ0NsYXNzXT1cInsnZ2FwLTEnOiBsb2dpblR5cGU9PT0nT1RQJyAmJlxyXG4gICAgICAgICAgICAgIGdlbmVyYXRlT3RwPT09ZmFsc2V9XCIgKm5nSWY9XCIhZ2VuZXJhdGVPdHBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiB3LTEwMCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCAqbmdGb3I9XCJsZXQgY29udHJvbCBvZiBvdHBDb250cm9scy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiICNvdHBJbnB1dFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1jZW50ZXIgb3RwLWJveCBjbHItYmxhY2tcIiBtYXhsZW5ndGg9XCIxXCIgaW5wdXRtb2RlPVwibnVtZXJpY1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIChpbnB1dCk9XCJvbklucHV0KGkpXCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgaSlcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSA8aW5wdXQgY2xhc3M9XCJ3LTEwMFwiIHBsYWNlaG9sZGVyPVwiMTIzNFwiIFsobmdNb2RlbCldPVwib25lVGltZVBhc3N3b3JkXCIgdHlwZT1cIm51bWJlclwiPiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJwYXNzd29yZENoZWNrICYmIGN1cnJlbnRQYWdlID09PSAnU0lHTlVQJ1wiIGNsYXNzPVwiZi0xMlwiIFtzdHlsZS5jb2xvcl09XCIncmVkJ1wiPllvdXIgcGFzc3dvcmQgbXVzdFxyXG4gICAgICAgIGNvbnRhaW4gMSBVcHBlcmNhc2UgLCAxXHJcbiAgICAgICAgTG93ZXJjYXNlICwgMSBTcGVjaWFsXHJcbiAgICAgICAgQ2hhcmFjdGVyICwgMSBEaWdpdCBhbmQgTWluaW11bSA4IENoYXJhY3RlcnMqPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJmb3Jnb3QtcHdkIHctMTAwIHRleHQtZW5kIG1iLTJcIiBbc3R5bGUuY29sb3JdPVwiYWNjZW50Q29sb3JcIiAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnRk9SR09UX1BBU1NXT1JEJ1wiPlxyXG4gICAgICBGb3Jnb3QgUGFzc3dvcmQ/PC9kaXY+IC0tPlxyXG4gICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKm5nSWY9XCIhYnV0dG9uTG9hZGluZ1wiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtpZF09XCJidXR0b25JZFwiIFtidXR0b25TdHlsZV09XCJidXR0b24/LnN0eWxlc1wiXHJcbiAgICAgIFtiYWNrZ3JvdW5kSW5mb109XCJzdHlsZXM/LmJhY2tncm91bmRcIiBbc2ltcG9Db3JuZXJdPVwic3R5bGVzPy5jb3JuZXJzXCIgW2NvbG9yXT1cInN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAoY2xpY2spPVwibG9naW4oKVwiPkxvZ2luPC9idXR0b24+IC0tPlxyXG4gICAgPGFwcC1idXR0b24tZWxlbWVudCBbYnV0dG9uQ29udGVudF09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMV0/LmNvbnRlbnQ/LmxhYmVsPy5sZW5ndGggPiAwID8gZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5jb250ZW50OiB7XHJcbiAgICAgICAgICAnbGFiZWwnOiAnTG9naW4nIH0gXCIgKGNsaWNrKT1cIiBsb2dpbigpXCIgKm5nSWY9XCIhZ2VuZXJhdGVPdHBcIiBbYnV0dG9uU3R5bGVdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5zdHlsZXNcIlxyXG4gICAgICBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5pZFwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIiBbZWRpdF09XCJlZGl0XCJcclxuICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcclxuICAgICAgW2xvYWRpbmddPVwiYnV0dG9uTG9hZGluZ1wiIFtpc0Z1bGxXaWR0aF09XCJ0cnVlXCI+PC9hcHAtYnV0dG9uLWVsZW1lbnQ+XHJcbiAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBwLTJcIiAqbmdJZj1cIiFidXR0b25Mb2FkaW5nICYmICFnZW5lcmF0ZU90cFwiIFtidXR0b25EYXRhXT1cImJ1dHRvbj8uY29udGVudFwiXHJcbiAgICAgIFtidXR0b25TdHlsZV09XCJidXR0b24/LnN0eWxlc1wiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtpZF09XCJkYXRhPy5pZCsoYnV0dG9uPy5pZCB8fCAnJylcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcclxuICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcclxuICAgICAgW2FwcEJ1dHRvbkVkaXRvcl09XCJlZGl0ID8/IGZhbHNlXCIgW2J1dHRvbklkXT1cImJ1dHRvbj8uaWQgPz8gJydcIiAoY2xpY2spPVwibG9naW4oKVwiPkxvZ2luPC9idXR0b24+IC0tPlxyXG4gICAgPGFwcC1idXR0b24tZWxlbWVudCBbYnV0dG9uQ29udGVudF09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmNvbnRlbnQ/LmxhYmVsPy5sZW5ndGggPiAwID8gZGF0YT8uYWN0aW9uPy5idXR0b25zWzJdPy5jb250ZW50OiB7XHJcbiAgICAgICAgICAnbGFiZWwnOiAnR2VuZXJhdGUgT3RwJ30gXCIgKGNsaWNrKT1cImdldE9UUCgpXCIgKm5nSWY9XCJnZW5lcmF0ZU90cFwiXHJcbiAgICAgIFtidXR0b25TdHlsZV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LnN0eWxlc1wiIFtidXR0b25JZF09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmlkXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgIFtlZGl0XT1cImVkaXRcIiBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIlxyXG4gICAgICBbbG9hZGluZ109XCJidXR0b25Mb2FkaW5nXCIgW2lzRnVsbFdpZHRoXT1cInRydWVcIj48L2FwcC1idXR0b24tZWxlbWVudD5cclxuICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cInNlbmQtYnRuIHAtMlwiICpuZ0lmPVwiIWJ1dHRvbkxvYWRpbmcgJiYgZ2VuZXJhdGVPdHBcIiBbYnV0dG9uRGF0YV09XCJidXR0b24/LmNvbnRlbnRcIlxyXG4gICAgICBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uPy5zdHlsZXNcIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbaWRdPVwiZGF0YT8uaWQrKGJ1dHRvbj8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIFtidXR0b25JZF09XCJidXR0b24/LmlkID8/ICcnXCIgKGNsaWNrKT1cImdldE9UUCgpXCI+R2VuZXJhdGUgT3RwPC9idXR0b24+IC0tPlxyXG4gICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImJ1dHRvbklkXCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbj8uc3R5bGVzXCJcclxuICAgICAgW2JhY2tncm91bmRJbmZvXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIlxyXG4gICAgICBbY29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkxvYWRpbmcuLi48L2J1dHRvbj4gLS0+XHJcbiAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBwLTJcIiAqbmdJZj1cImJ1dHRvbkxvYWRpbmdcIiBbYnV0dG9uRGF0YV09XCJidXR0b24/LmNvbnRlbnRcIiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uPy5zdHlsZXNcIlxyXG4gICAgICBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbaWRdPVwiZGF0YT8uaWQrKGJ1dHRvbj8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIFtidXR0b25JZF09XCJidXR0b24/LmlkID8/ICcnXCI+TG9hZGluZy4uLjwvYnV0dG9uPiAtLT5cclxuXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNpZ24tdXAgbXQtMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmQgZnMtMTNcIiAqbmdJZj1cInNpZ25VcEVuYWJsZWRcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhcmtcIiAoY2xpY2spPVwibG9naW5BdXRoZW50aWNhdGlvbignT1RQJylcIlxyXG4gICAgICAgICpuZ0lmPVwibG9naW5UeXBlPT09J1BBU1NXT1JEJztlbHNlIGxvZ2luV2l0aFBhc3N3b3JkXCI+TG9naW4gd2l0aFxyXG4gICAgICAgIE9UUDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlICNsb2dpbldpdGhQYXNzd29yZD5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhcmtcIiAoY2xpY2spPVwibG9naW5BdXRoZW50aWNhdGlvbignUEFTU1dPUkQnKVwiPkxvZ2luIHdpdGhcclxuICAgICAgICBQYXNzd29yZDwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC0yMFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwib3ItZGl2aWRlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwib3ItdGV4dFwiPm9yPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNpZ24tdXBcIj5Mb2dpbiB3aXRoIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJhY2NlbnRDb2xvclwiPk9UUDwvc3Bhbj48L2Rpdj5cclxuICAgIDwvZGl2PiAtLT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNzaWduSW5UZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTNcIj5cclxuICAgIDxwIGNsYXNzPVwibWItMCBmcy0yMC1mdy02MDAgY2xyLWJsYWNrXCI+U2lnbiB1cDwvcD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCB3LTEwMCBzaWdudXAtaW5wdXQtY29udGFpbmVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgIDxsYWJlbCBmb3I9XCJcIj5OYW1lPC9sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJjbHItYmxhY2tcIiBbKG5nTW9kZWwpXT1cInVzZXJOYW1lXCIgcGxhY2Vob2xkZXI9XCJKYW5lIERvZVwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgIDxsYWJlbCBmb3I9XCJcIj5FbWFpbDwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBjbGFzcz1cImNsci1ibGFja1wiIFsobmdNb2RlbCldPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cImphbmVkb2VAZ21haWwuY29tXCJcclxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkVtYWlsQ2hhbmdlKClcIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiIWVtYWlsQ2hlY2sgPyAnJyA6ICdyZWQnXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiICpuZ0lmPVwiZW1haWxDaGVja1wiIFtzdHlsZS5jb2xvcl09XCIncmVkJ1wiPlBsZWFzZSBFbnRlciB2YWxpZCBlbWFpbCo8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxyXG4gICAgICAgIDxsYWJlbCBmb3I9XCJcIj5QaG9uZSBOdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJjbHItYmxhY2tcIiBbKG5nTW9kZWwpXT1cIm1vYmlsZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9iaWxlQ2hhbmdlKClcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCI5ODc2NTQzMjE5XCIgW3N0eWxlLmJvcmRlckNvbG9yXT1cIiFtb2JpbGVDaGVjayA/ICcnIDogJ3JlZCdcIiBjbGFzcz1cIm5vLWFycm93c1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiICpuZ0lmPVwibW9iaWxlQ2hlY2tcIiBbc3R5bGUuY29sb3JdPVwiJ3JlZCdcIj5QbGVhc2UgRW50ZXIgdmFsaWQgTW9iaWxlIG51bWJlcio8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiIGlucHV0LWJveCBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHBhc3N3b3JkLXRleHQtY29udGFpbmVyXCI+PGxhYmVsXHJcbiAgICAgICAgICAgIGZvcj1cIlwiPlBhc3N3b3JkPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1Bhc3N3b3JkXCIgY2xhc3M9XCJwYXNzd29yZC1jb25maWcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzaG93UGFzc3dvcmQgPSB0cnVlXCI+PGltZ1xyXG4gICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvMTgxNzIwYzE3NjI4NjYzMDk4NTRJY29uXygzKS5zdmdcIiBhbHQ9XCJcIj4mbmJzcDtTaG93XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1jb25maWcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzaG93UGFzc3dvcmQgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd1Bhc3N3b3JkXCI+PGltZ1xyXG4gICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvOTk0OTE0YzE3NjI4MDU1MjkwNzFFeWVfb2ZmLnN2Z1wiIGFsdD1cIlwiPiZuYnNwO0hpZGVcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8aW5wdXQgW3R5cGVdPVwic2hvd1Bhc3N3b3JkID8gJ3RleHQnIDogJ3Bhc3N3b3JkJ1wiIHJlcXVpcmVkPVwiXCIgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiIGNsYXNzPVwidy05MCBjbHItYmxhY2tcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkphbmVkb2VAMTIzNFwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCIhcGFzc3dvcmRDaGVjayA/ICcnIDogJ3JlZCdcIlxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblBhc3N3b3JkQ2hhbmdlKClcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cInBhc3N3b3JkQ2hlY2tcIiBjbGFzcz1cImYtMTJcIiBbc3R5bGUuY29sb3JdPVwiJ3JlZCdcIj5Zb3VyIHBhc3N3b3JkIG11c3QgY29udGFpbiAxIFVwcGVyY2FzZSAsIDFcclxuICAgICAgICAgIExvd2VyY2FzZSAsIDEgU3BlY2lhbFxyXG4gICAgICAgICAgQ2hhcmFjdGVyICwgMSBEaWdpdCBhbmQgTWluaW11bSA4IENoYXJhY3RlcnMqPC9zcGFuPlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN0cmVuZ3RoLWJhci1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdHJlbmd0aCBvZiBwYXNzd29yZFN0cmVuZ3RoOyBsZXQgaWR4ID0gaW5kZXhcIiBjbGFzcz1cInN0cmVuZ3RoLWJhclwiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImdldFN0cmVuZ3RoQ29sb3IoaWR4KVwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YXBwLWJ1dHRvbi1lbGVtZW50IFtidXR0b25Db250ZW50XT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudD8ubGFiZWw/Lmxlbmd0aCA+IDAgPyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmNvbnRlbnQ6IHtcclxuICAgICAgICAgICdsYWJlbCc6ICdDcmVhdGUgQWNjb3VudCcgfSBcIiAoY2xpY2spPVwiY3JlYXRlQWNjb3VudCgpXCIgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uc3R5bGVzXCJcclxuICAgICAgW2J1dHRvbklkXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uaWRcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCIgW2VkaXRdPVwiZWRpdFwiXHJcbiAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNFbWFpbFZhbGlkIHx8ICFpc1Bhc3N3b3JkVmFsaWQgfHwgIXVzZXJOYW1lXCIgW2xvYWRpbmddPVwiYnV0dG9uTG9hZGluZ1wiXHJcbiAgICAgIFtpc0Z1bGxXaWR0aF09XCJ0cnVlXCI+PC9hcHAtYnV0dG9uLWVsZW1lbnQ+XHJcbiAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAqbmdJZj1cIiFidXR0b25Mb2FkaW5nXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImJ1dHRvbklkXCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbj8uc3R5bGVzXCJcclxuICAgICAgW2JhY2tncm91bmRJbmZvXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIiBbY29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgIChjbGljayk9XCJjcmVhdGVBY2NvdW50KClcIiBbZGlzYWJsZWRdPVwiIWlzRW1haWxWYWxpZCB8fCAhaXNQYXNzd29yZFZhbGlkIHx8ICF1c2VyTmFtZVwiPkNyZWF0ZSBBY2NvdW50PC9idXR0b24+IC0tPlxyXG4gICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImJ1dHRvbklkXCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbj8uc3R5bGVzXCJcclxuICAgICAgW2JhY2tncm91bmRJbmZvXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIiBbY29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgICpuZ0lmPVwiYnV0dG9uTG9hZGluZ1wiPkxvYWRpbmcuLi48L2J1dHRvbj4gLS0+XHJcblxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzaWduLXVwIHRleHQtc2Vjb25kYXJ5IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBcclxuICAgIG10LTMgZnMtMTQgdy0xMDAgdGV4dC1jZW50ZXIgXCI+QWxyZWFkeSBoYXZlIGFuIGFjY291bnQ/Jm5ic3A7PHNwYW4gKGNsaWNrKT1cImN1cnJlbnRQYWdlID0gJ0xPR0lOJ1wiXHJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhcmtcIj5Mb2dpbjwvc3Bhbj48L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZm9yZ290UGFzc3dvcmRUZW1wbGF0ZT5cclxuICA8ZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxyXG4gICAgICA8bGFiZWwgZm9yPVwiXCI+RW1haWwgb3IgUGhvbmUgbnVtYmVyPC9sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIFsobmdNb2RlbCldPVwiZW1haWxcIiByZXF1aXJlZD1cIlwiIHBsYWNlaG9sZGVyPVwiamFuZWRvZUBnbWFpbC5jb21cIlxyXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRW1haWxDaGFuZ2UoKVwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCIhZW1haWxDaGVjayA/ICcnIDogJ3JlZCdcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInNlbmQtYnRuIHAtMlwiICpuZ0lmPVwiIWJ1dHRvbkxvYWRpbmdcIiBbYnV0dG9uRGF0YV09XCJidXR0b24/LmNvbnRlbnRcIiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uPy5zdHlsZXNcIlxyXG4gICAgICBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbaWRdPVwiZGF0YT8uaWQrKGJ1dHRvbj8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIFtidXR0b25JZF09XCJidXR0b24/LmlkID8/ICcnXCI+U3VibWl0PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwic2VuZC1idG4gcC0yXCIgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCIgW2J1dHRvbkRhdGFdPVwiYnV0dG9uPy5jb250ZW50XCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbj8uc3R5bGVzXCJcclxuICAgICAgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImRhdGE/LmlkKyhidXR0b24/LmlkIHx8ICcnKVwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIlxyXG4gICAgICBbYXBwQnV0dG9uRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIiBbYnV0dG9uSWRdPVwiYnV0dG9uPy5pZCA/PyAnJ1wiPkxvYWRpbmcuLi48L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
655
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFFBQVEsRUFBYSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMv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QjttR0FBL0IsK0JBQStCLHNKQUovQixDQUFDLGNBQWMsQ0FBQyx3SUNyRDdCLG1pZkEwT2MsbTFMRHhNVixZQUFZLHlsQkFDWixXQUFXLGdwQ0FDWCxXQUFXLHVXQUNYLGFBQWEsOEJBQ2Isd0JBQXdCLDhCQUN4QixvQkFBb0IscVdBQ3BCLG1CQUFtQixrTkFDbkIsb0JBQW9CLDJNQUVwQixrQkFBa0IseUZBQ2xCLG1CQUFtQiwwR0FDbkIsd0JBQXdCLHNJQUN4QixtQkFBbUIsbUZBQ25CLGVBQWUsbUZBQ2YsY0FBYyxnRkFDZCxnQkFBZ0IscUZBQ2hCLHNCQUFzQix5R0FDdEIscUJBQXFCOzs0RkFNWiwrQkFBK0I7a0JBM0IzQyxTQUFTOytCQUNFLCtCQUErQixjQUM3QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBRXBCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQix3QkFBd0I7d0JBQ3hCLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3dCQUN0QixxQkFBcUI7cUJBQ3RCLGFBQ1UsQ0FBQyxjQUFjLENBQUM7OzBCQW1EeEIsUUFBUTs7MEJBQ1IsUUFBUTt5Q0E5Q0YsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQXNEb0IsTUFBTTtzQkFBL0IsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT3B0aW9uYWwsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuaW1wb3J0IHsgRGV2aWNlSW5mbyB9IGZyb20gJy4uLy4uL3N0eWxlcy91c2VyLm1vZGFsJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldFJlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uTW9kZWwsIEF1dGhlbnRpY2F0aW9uU3R5bGVzTW9kZWwgfSBmcm9tICcuL2F1dGhlbnRpY2F0aW9uLXJlcXVpcmVkLm1vZGVsJztcclxuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcclxuaW1wb3J0IHsgQW5pbWF0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2FuaW1hdGlvbi1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb3JuZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvY29ybmVyLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgT3ZlcmxheURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9vdmVybGF5LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNwYWNpbmdBcm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvc3BhY2luZy1hcm91bmQuZGlyZWN0aXZlJztcclxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uLy4uLy4uL3NlY3Rpb25zL0Jhc2VTZWN0aW9uJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kZWwsIExheU91dE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgQnV0dG9uRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1lZGl0b3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9zaW1wby1idXR0b24vc2ltcG8tYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi9lY29tbWVyY2Uvc3R5bGVzL3Byb2R1Y3QubW9kYWwnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1hdXRoZW50aWNhdGlvbi1yZXF1aXJlZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFRvYXN0TW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIFNpbXBvQnV0dG9uQ29tcG9uZW50LFxyXG5cclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBPdmVybGF5RGlyZWN0aXZlLFxyXG4gICAgU3BhY2luZ0Fyb3VuZERpcmVjdGl2ZSxcclxuICAgIEJ1dHRvbkVkaXRvckRpcmVjdGl2ZVxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoZW50aWNhdGlvbi1yZXF1aXJlZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2F1dGhlbnRpY2F0aW9uLXJlcXVpcmVkLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvblJlcXVpcmVkQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24ge1xyXG4gIC8vIHByaXZhdGUgZW1haWxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBkYXRhPzogQXV0aGVudGljYXRpb25Nb2RlbCB8IGFueTtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIHN0eWxlcz86IEF1dGhlbnRpY2F0aW9uU3R5bGVzTW9kZWw7XHJcbiAgYnV0dG9uPzogQnV0dG9uTW9kZWxcclxuICBidXR0b25JZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIGN1cnJlbnRQYWdlOiAnTE9HSU4nIHwgJ1NJR05VUCcgfCAnRk9SR09UX1BBU1NXT1JEJyA9ICdMT0dJTic7XHJcbiAgcHJpdmF0ZSBtb2JpbGVUaW1lcjogYW55O1xyXG4gIHB1YmxpYyBlbWFpbDogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgbW9iaWxlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyBvdHA6IHN0cmluZyA9IFwiXCI7XHJcbiAgb3RwQ29udHJvbHMgPSBuZXcgRm9ybUFycmF5KFtcclxuICAgIG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKSxcclxuICAgIG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKVxyXG4gIF0pO1xyXG4gIHB1YmxpYyBwYXNzd29yZDogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgY29uZlBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyB1c2VyTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgYnV0dG9uTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBidXNpbmVzc0lkOiBzdHJpbmcgfCBudWxsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpO1xyXG4gIHB1YmxpYyBpc09UUFZlcmlmaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHBhc3N3b3JkSGlkZGVuOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aENvdW50OiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBwYXNzd29yZFN0cmVuZ3RoID0gW1xyXG4gICAgeyB0eXBlOiBcIm1pbmltdW0gOCBjaGFyYWN0ZXJcIiwgYWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIFVQUEVSQ0FTRVwiLCBhY3RpdmU6IGZhbHNlIH0sXHJcbiAgICB7IHR5cGU6IFwiYXRsZWFzdCBvbmUgbG93ZXJjYXNlXCIsIGFjdGl2ZTogZmFsc2UgfSxcclxuICAgIHsgdHlwZTogXCJhdGxlYXN0IG9uZSBudW1iZXJcIiwgYWN0aXZlOiBmYWxzZSB9LFxyXG4gIF1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF0RGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEF1dGhlbnRpY2F0aW9uUmVxdWlyZWRDb21wb25lbnQ+LFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBib3R0b21zaGVldFJlZjogTWF0Qm90dG9tU2hlZXRSZWY8QXV0aGVudGljYXRpb25SZXF1aXJlZENvbXBvbmVudD4sXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJ1c2VyIGF1dGhlbnRpY2F0aW5nIGJhY2tcIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSlcclxuICB9XHJcblxyXG4gIHNpZ25VcEVuYWJsZWQ6IGFueSA9IHRydWU7XHJcbiAgcHJvY2VlZFRvQ2hlY2tvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm9jZWVkVG9FbnJvbGxtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgdHJ5QXRIb21lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbmF2aWdhdGVUb1NjaGVtZURldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkcmVuKCdvdHBJbnB1dCcpIGlucHV0cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ2NhcnQnXSlcclxuICAgICAgICB0aGlzLnByb2NlZWRUb0NoZWNrb3V0ID0gdHJ1ZTtcclxuICAgICAgaWYgKHBhcmFtICYmIHBhcmFtWydyZWRpcmVjdFRvJ10pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyYW1bJ3JlZGlyZWN0VG8nXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3NjaGVtZXMnXSkge1xyXG4gICAgICAgIHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcmFtICYmIHBhcmFtWyd0cnlBdEhvbWUnXSkge1xyXG4gICAgICAgIHRoaXMudHJ5QXRIb21lID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwYXJhbSAmJiBwYXJhbVsnc2NoZW1lRGV0YWlsJ10pIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9TY2hlbWVEZXRhaWxzID0gdHJ1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XHJcbiAgICB0aGlzLmJ1dHRvbiA9IHRoaXMuZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdO1xyXG4gICAgdGhpcy5idXR0b25JZCA9ICh0aGlzLmRhdGEgPyB0aGlzLmRhdGEuaWQgOiAnJykgKyAodGhpcy5idXR0b24gPyB0aGlzLmJ1dHRvbi5pZCA6ICcnKTtcclxuXHJcbiAgICBsZXQgZW5hYmxlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzaWduVXBFbmFibGVkJyk7XHJcbiAgICBpZiAoZW5hYmxlZCAhPSBudWxsKVxyXG4gICAgICB0aGlzLnNpZ25VcEVuYWJsZWQgPSBlbmFibGVkID09PSAndHJ1ZSc7XHJcblxyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyB0aGlzLnNldHVwM0RFZmZlY3RzKCk7XHJcbiAgfVxyXG4gIG9uSW5wdXQoaW5kZXg6IG51bWJlcikge1xyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5vdHBDb250cm9scy5hdChpbmRleCkudmFsdWUgfHwgJyc7XHJcblxyXG4gICAgaWYgKCEvXlswLTldJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5vdHBDb250cm9scy5hdChpbmRleCkuc2V0VmFsdWUoJycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluZGV4IDwgNSkge1xyXG4gICAgICB0aGlzLmlucHV0cy50b0FycmF5KClbaW5kZXggKyAxXS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcclxuXHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiAhdGhpcy5vdHBDb250cm9scy5hdChpbmRleCkudmFsdWUgJiYgaW5kZXggPiAwKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRzLnRvQXJyYXkoKVtpbmRleCAtIDFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGdldEdyYWRpZW50RGlyZWN0aW9uKGRpcmVjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ0RPV04nOlxyXG4gICAgICAgIHJldHVybiAnJzsgLy8gZGVmYXVsdCB0b3Ag4oaSIGJvdHRvbSAobm8gYW5nbGUgbmVlZGVkKVxyXG5cclxuICAgICAgY2FzZSAnUklHSFQnOlxyXG4gICAgICAgIHJldHVybiAnOTBkZWcnO1xyXG5cclxuICAgICAgY2FzZSAnRElBR09OQUxfUklHSFQnOlxyXG4gICAgICAgIHJldHVybiAnNDVkZWcnO1xyXG5cclxuICAgICAgY2FzZSAnRElBR09OQUxfTEVGVCc6XHJcbiAgICAgICAgcmV0dXJuICcxMzVkZWcnO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7IC8vIGZhbGxiYWNrXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBmb250Q29sb3IoKTogc3RyaW5nIHtcclxuICAgIGxldCBjb2xvciA9IHRoaXMuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvcjtcclxuICAgIGlmICghY29sb3IpIHJldHVybiAnIzAwMCc7XHJcblxyXG4gICAgLy8gaWYgZ3JhZGllbnQsIGV4dHJhY3QgZmlyc3QgaGV4IGNvbG9yXHJcbiAgICBjb25zdCBncmFkaWVudE1hdGNoID0gY29sb3IubWF0Y2goLyMoWzAtOWEtZkEtRl17Nn0pLyk7XHJcbiAgICBpZiAoZ3JhZGllbnRNYXRjaCkge1xyXG4gICAgICBjb2xvciA9IGdyYWRpZW50TWF0Y2hbMF07XHJcbiAgICB9XHJcblxyXG4gICAgY29sb3IgPSBjb2xvci5yZXBsYWNlKCcjJywgJycpO1xyXG5cclxuICAgIGNvbnN0IHIgPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoMCwgMiksIDE2KTtcclxuICAgIGNvbnN0IGcgPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGNvbnN0IGIgPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoNCwgNiksIDE2KTtcclxuXHJcbiAgICBjb25zdCBicmlnaHRuZXNzID0gKHIgKiAyOTkgKyBnICogNTg3ICsgYiAqIDExNCkgLyAxMDAwO1xyXG5cclxuICAgIHJldHVybiBicmlnaHRuZXNzID4gMTI4ID8gJyMwMDAnIDogJyNmZmYnO1xyXG4gIH1cclxuICBnZXQgYWNjZW50QmFja2dyb3VuZCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYmcgPSB0aGlzLnN0eWxlcz8uYmFja2dyb3VuZDtcclxuXHJcbiAgICBpZiAoIWJnKSByZXR1cm4gJyc7XHJcblxyXG4gICAgaWYgKGJnLmFjY2VudEJhY2tncm91bmRUeXBlID09PSAnU29saWQnKSB7XHJcbiAgICAgIHJldHVybiBiZy5hY2NlbnRDb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhbmdsZSA9IHRoaXMuZ2V0R3JhZGllbnREaXJlY3Rpb24oYmcuZ3JhZGllbnREaXJlY3Rpb24pO1xyXG5cclxuICAgIHJldHVybiBhbmdsZVxyXG4gICAgICA/IGBsaW5lYXItZ3JhZGllbnQoJHthbmdsZX0sICR7YmcuYWNjZW50Q29sb3J9LCAke2JnLnNlY29uZGFyeUFjY2VudENvbG9yfSlgXHJcbiAgICAgIDogYGxpbmVhci1ncmFkaWVudCgke2JnLmFjY2VudENvbG9yfSwgJHtiZy5zZWNvbmRhcnlBY2NlbnRDb2xvcn0pYDtcclxuICB9XHJcbiAgZ2V0Rm9ybU90cCgpIHtcclxuICAgIHJldHVybiB0aGlzLm90cENvbnRyb2xzLnZhbHVlLmpvaW4oJycpO1xyXG4gIH1cclxuICBsb2dpblR5cGU6IFwiUEFTU1dPUkRcIiB8IFwiT1RQXCIgPSBcIk9UUFwiO1xyXG4gIGdlbmVyYXRlT3RwOiBib29sZWFuID0gdHJ1ZTtcclxuICBsb2dpbkF1dGhlbnRpY2F0aW9uKGxvZ2luVHlwZTogXCJQQVNTV09SRFwiIHwgXCJPVFBcIikge1xyXG4gICAgdGhpcy5sb2dpblR5cGUgPSBsb2dpblR5cGU7XHJcbiAgICBpZiAodGhpcy5sb2dpblR5cGUgPT0gXCJPVFBcIikge1xyXG4gICAgICB0aGlzLmdlbmVyYXRlT3RwID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubG9naW5UeXBlID09IFwiUEFTU1dPUkRcIikge1xyXG4gICAgICB0aGlzLmdlbmVyYXRlT3RwID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdlbmVyYXRlZE90cDogYW55ID0gbnVsbDtcclxuICBvbmVUaW1lUGFzc3dvcmQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgb3RwUGF5bG9hZDogYW55ID0ge1xyXG4gICAgXCJidXNpbmVzc0lkXCI6IHRoaXMuYnVzaW5lc3NJZCA/PyBcIlwiLFxyXG4gICAgXCJlbWFpbFwiOiB0aGlzLmVtYWlsID8/IFwiXCJcclxuICB9XHJcbiAgZ2V0T1RQKCkge1xyXG4gICAgaWYgKCF0aGlzLmVkaXQpIHtcclxuICAgICAgaWYgKHRoaXMuZW1haWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVPdHAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm90cFBheWxvYWQuZW1haWwgPSB0aGlzLmVtYWlsO1xyXG4gICAgICAgIHRoaXMucmVnZW5lcmF0ZU90cCh0aGlzLm90cFBheWxvYWQpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0xvZ2luIHJlcXVlc3QnLCBkZXRhaWw6IFwiRW50ZXIgeW91ciBsb2dpbiBlbWFpbFwiIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlZ2VuZXJhdGVPdHAocGF5bG9hZDogYW55KSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldE90cEZvckxvZ2luKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmdlbmVyYXRlZE90cCA9IHJlc3BvbnNlO1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdPdHAgU2VudCcsIGRldGFpbDogJ090cCBzZW50IHRvIHlvdXIgZW1haWwnIH0pO1xyXG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0xvZ2luIHJlcXVlc3QnLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcclxuICAgIH0pXHJcbiAgfVxyXG4gIHJlc2VuZE90cCgpIHtcclxuICAgIHRoaXMucmVnZW5lcmF0ZU90cCh0aGlzLm90cFBheWxvYWQpXHJcbiAgfVxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcbiAgbG9naW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdCkge1xyXG4gICAgICBpZiAodGhpcy5sb2dpblR5cGUgPT0gXCJPVFBcIikge1xyXG4gICAgICAgIHRoaXMudmVyaWZ5T1RQKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52ZXJpZnlQYXNzd29yZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHVzZXJJZDogYW55LCByZWZlcnJhbFVuaXF1ZUlkOiBhbnkpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZW5kVXNlclJlZmZlcmFsRGV0YWlscyh1c2VySWQsIHJlZmVycmFsVW5pcXVlSWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInJlc3BvbnNlXCIsIHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKVxyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFJlZmVycmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnJlZmVycmFsRGV0YWlscyk7XHJcbiAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKVxyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnTG9naW4gcmVxdWVzdCcsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHZlcmlmeVBhc3N3b3JkKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5pc0VtYWlsVmFsaWQpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgRW1haWwnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc1Bhc3N3b3JkVmFsaWQpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgUGFzc3dvcmQnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBwYXNzd29yZCcgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQgPz8gXCIxZjEyNTBiMS00NjdlLTY3YmMtYWQ4OS04MTNhNDRlZDBlMGZcIixcclxuICAgICAgZW1haWw6IHRoaXMuZW1haWwudG9Mb3dlckNhc2UoKSxcclxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXHJcbiAgICAgIHJlcXVlc3RUeXBlOiBcIlBBU1NXT1JEXCJcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5zaWduaW5QYXNzd29yZChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VG9rZW4ocmVzcG9uc2UuZGF0YS5wYXNzYm9va1Rva2VuKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0UmVmZXJyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKTtcclxuICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpIHtcclxuICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN5bmNUcmlhbENhcnRUb1NlcnZlckRCKHVzZXJEZXRhaWxzLnVzZXJJZClcclxuICAgICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3N1Y2Nlc3MnKTtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnTG9nZ2VkIEluJywgZGV0YWlsOiAnTG9nZ2VkIGluIFN1Y2Nlc3NmdWxseScgfSk7XHJcbiAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KVxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSwgeyBxdWVyeVBhcmFtczogeyBjaGVja291dDogdHJ1ZSB9IH0pO1xyXG4gICAgICBlbHNlIGlmICh0aGlzLnByb2NlZWRUb0Vucm9sbG1lbnQpXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvc2NoZW1lcyddKTtcclxuICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaG9tZS1hcHBvaW50bWVudCddKTtcclxuICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2NoZW1lLWRldGFpbCddKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcclxuICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiByZXF1ZXN0JywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG4gIHZlcmlmeU9UUCgpIHtcclxuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuaXNFbWFpbFZhbGlkKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdJbnZhbGlkIEVtYWlsJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcycgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMub25lVGltZVBhc3N3b3JkID0gdGhpcy5vdHBDb250cm9scz8udmFsdWU/LmpvaW4oJycpIHx8ICcnO1xyXG4gICAgaWYgKHRoaXMub25lVGltZVBhc3N3b3JkLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkID8/IFwiMWYwN2NkMDktY2Y2MS02MDA4LTk4NTQtMDU0Yjk4YTE2MjdhXCIsXHJcbiAgICAgICAgZW1haWw6IHRoaXMuZW1haWwudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICBlbnRlcmVkT3RwOiB0aGlzLm9uZVRpbWVQYXNzd29yZCxcclxuICAgICAgICByZXF1ZXN0VHlwZTogXCJPVFBcIlxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2Uuc2lnbmluUGFzc3dvcmQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlQWxsRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0UmVmZXJyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKTtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xyXG4gICAgICAgICAgdGhpcy5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEudXNlcklkLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpXHJcbiAgICAgICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0xvZ2dlZCBJbicsIGRldGFpbDogJ0xvZ2dlZCBpbiBTdWNjZXNzZnVsbHknIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KVxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGNoZWNrb3V0OiB0cnVlIH0gfSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZWVkVG9FbnJvbGxtZW50KVxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvc2NoZW1lcyddKTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSlcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2hvbWUtYXBwb2ludG1lbnQnXSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzY2hlbWUtZGV0YWlsJ10pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xyXG4gICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnTG9naW4gcmVxdWVzdCcsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiByZXF1ZXN0JywgZGV0YWlsOiBcIlBsZWFzZSBlbnRlciBPVFBcIiB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZW5kU2lnbnVwT1RQKCkge1xyXG4gICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNPVFBWZXJpZmllZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMubW9iaWxlVGltZXIpXHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vYmlsZVRpbWVyKTtcclxuICAgIHRoaXMubW9iaWxlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMubW9iaWxlLmxlbmd0aCAhPSAxMClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQsXHJcbiAgICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcclxuICAgICAgICBlbWFpbDogdGhpcy5lbWFpbCxcclxuICAgICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCxcclxuICAgICAgICBjb3VudHJ5Q29kZTogJzkxJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2Uuc2VuZFNpZ251cE9UUChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc09UUFZlcmlmaWVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdPVFAnLCBkZXRhaWw6ICdPVFAgU2VudCcgfSk7XHJcbiAgICAgIH0sIChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnT1RQIFJlcXVlc3QnLCBkZXRhaWw6IGVyci5lcnJvci5tZXNzYWdlIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG4gICAgfSwgODAwKTtcclxuICB9XHJcbiAgY3JlYXRlQWNjb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5lZGl0KSB7XHJcbiAgICAgIGlmICghdGhpcy5pc0VtYWlsVmFsaWQpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBFbWFpbCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuaXNQYXNzd29yZFZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgUGFzc3dvcmQnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBwYXNzd29yZCcgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5tb2JpbGVOdW1iZXJWYWxpZCkge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdJbnZhbGlkIE1vYmlsZSBOdW1iZXInLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBtb2JpbGUgbnVtYmVyJyB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGRldmljZUluZm86IERldmljZUluZm8gfCBudWxsID0ge1xyXG4gICAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBsZXQgdmVyaWZ5U2lnbkRhdGEgPSB7XHJcbiAgICAgICAgbmFtZTogdGhpcy51c2VyTmFtZSxcclxuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQsXHJcbiAgICAgICAgYnVzaW5lc3NOYW1lOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYk5hbWUnKSxcclxuICAgICAgICBtb2JpbGU6IHRoaXMubW9iaWxlLFxyXG4gICAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXHJcbiAgICAgICAgY291bnRyeUNvZGU6IFwiKzkxXCIsXHJcbiAgICAgICAgZW50ZXJlZE90cDogdGhpcy5vdHAsXHJcbiAgICAgICAgcmVmZXJyYWxJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSA/PyBcIlwiXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXN0U2VydmljZS52ZXJpZnlTaWdudXBPVFAodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5zZXRVc2VyKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VG9rZW4ocmVzcG9uc2UuZGF0YS5wYXNzYm9va1Rva2VuKTtcclxuICAgICAgICAvLyB0aGlzLnJlc3RTZXJ2aWNlLmdlbmVyYXRlVG9rZW4obG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JJZCcpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIC8vICAgbmV4dDogKHRva2VuUmVzcG9uc2U6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAvLyAgIH0sXHJcbiAgICAgICAgLy8gICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdlbmVyYXRpbmcgdG9rZW46JywgZXJyb3IpO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0pXHJcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpIHtcclxuICAgICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlQWxsRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKVxyXG5cclxuICAgICAgICAvLyB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc3VjY2VzcycpO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ1NpZ24gVXAnLCBkZXRhaWw6ICdZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQnIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KVxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGNoZWNrb3V0OiB0cnVlIH0gfSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9ob21lLWFwcG9pbnRtZW50J10pO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pOyAgICAgIC8vIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgLy8gICBpY29uOiBcInN1Y2Nlc3NcIixcclxuICAgICAgICAvLyAgIHRpdGxlOiBcIkh1cnJheVwiLFxyXG4gICAgICAgIC8vICAgdGV4dDogXCJZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIixcclxuICAgICAgICAvLyAgIHNob3dDYW5jZWxCdXR0b246ICEodXNlckRldGFpbHMuY29udGFjdD8ubmFtZT8ubGVuZ3RoID4gMCksXHJcbiAgICAgICAgLy8gICBjb25maXJtQnV0dG9uVGV4dDogXCJJIGxvdmVkIGl0XCIsXHJcbiAgICAgICAgLy8gICBjYW5jZWxCdXR0b25UZXh0OiBcIkZpbGwgb3RoZXIgYmFzaWMgZGV0YWlsc1wiLFxyXG4gICAgICAgIC8vICAgY2FuY2VsQnV0dG9uQ29sb3I6IFwiIzkyOGM4Y1wiLFxyXG4gICAgICAgIC8vIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgICAvLyAgIGlmIChyZXN1bHQuaXNEaXNtaXNzZWQpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5tYXREaWFsb2cub3BlbihVc2VyQmFzaWNJbmZvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgLy8gICAgICAgaGVpZ2h0OiAnNTB2aCcsXHJcbiAgICAgICAgLy8gICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoID4gNDc1ID8gJzQwdncnIDogJzk1dncnLFxyXG4gICAgICAgIC8vICAgICAgIG1heFdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCA+IDQ3NSA/ICcxMDB2dycgOiAnODB2dycsXHJcbiAgICAgICAgLy8gICAgICAgZGF0YToge31cclxuICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfSlcclxuICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnU2lnbnVwIGVycm9yJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnU2lnbnVwIGVycm9yJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICB2ZXJpZnlTaWdudXBPVFAoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMub3RwLmxlbmd0aCAhPSA2KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZGV2aWNlSW5mbzogRGV2aWNlSW5mbyB8IG51bGwgPSB7XHJcbiAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgdmVyaWZ5U2lnbkRhdGEgPSB7XHJcbiAgICAgIGJ1c2luZXNzSWQ6IHRoaXMuYnVzaW5lc3NJZCxcclxuICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcclxuICAgICAgZW1haWw6IHRoaXMuZW1haWwsXHJcbiAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxyXG4gICAgICBjb3VudHJ5Q29kZTogXCI5MVwiLFxyXG4gICAgICBlbnRlcmVkT3RwOiB0aGlzLm90cCxcclxuICAgICAgcmVmZXJyYWxJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSA/PyBcIlwiXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnZlcmlmeVNpZ251cE9UUCh2ZXJpZnlTaWduRGF0YSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcblxyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xyXG4gICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQJywgZGV0YWlsOiAnT1RQIFZlcmlmaWVkJyB9KTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1VzZXIgYWxyZWFkeSBleGlzdHMnIH0pXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgT1RQJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIHZhbGlkIG90cCcgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGVudGVyTW9iaWxlKCkge1xyXG5cclxuICAgIGlmICh0aGlzLm1vYmlsZVRpbWVyKVxyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5tb2JpbGVUaW1lcik7XHJcbiAgICB0aGlzLm1vYmlsZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLm1vYmlsZS5sZW5ndGggIT0gMTApXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlT1RQKCk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVPVFAoKSB7XHJcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZW5lcmF0ZU9UUCh0aGlzLm1vYmlsZSA/PyBcIlwiLCBcIjkxXCIpLnN1YnNjcmliZShcclxuICAgICAgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAgU2VudCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdPVFAgc2VudCB0byBtb2JpbGUuIFZhbGlkIGZvciAzIG1pbnMnLFxyXG4gICAgICAgICAgbGlmZTogMTAwMDBcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/LmVycm9yPy5tZXNzYWdlO1xyXG5cclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAgUmVxdWVzdCcsXHJcbiAgICAgICAgICBkZXRhaWw6IGVycm9yTWVzc2FnZSxcclxuICAgICAgICAgIGxpZmU6IDEwMDAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZU51bWJlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hhckNvZGUgPSBldmVudC5jaGFyQ29kZTtcclxuICAgIGlmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYXRlT1RQKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vdHAubGVuZ3RoID09IDYpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgY2hlY2tTdHJlbmd0aCgpIHtcclxuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ID0gMDtcclxuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ICs9ICgvW0EtWl0vLnRlc3QodGhpcy5wYXNzd29yZCkpID8gMSA6IDA7XHJcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCArPSAoL1thLXpdLy50ZXN0KHRoaXMucGFzc3dvcmQpKSA/IDEgOiAwO1xyXG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgKz0gKC9cXGQvLnRlc3QodGhpcy5wYXNzd29yZCkpID8gMSA6IDA7XHJcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCArPSAodGhpcy5wYXNzd29yZC5sZW5ndGggPiA4ID8gMSA6IDApO1xyXG4gIH1cclxuICBnZXRTdHJlbmd0aENvbG9yKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHN3aXRjaCAodGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQpIHtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwidG9tYXRvXCIgOiBcIiNkM2QzZDNiYVwiKTtcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwib3JhbmdlXCIgOiBcIiNkM2QzZDNiYVwiKTtcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwieWVsbG93XCIgOiBcIiNkM2QzZDNiYVwiKTtcclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwibGlnaHRncmVlblwiIDogXCIjZDNkM2QzYmFcIik7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIFwiI2QzZDNkM2JhXCI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGVtYWlsRGVib3VuY2VUaW1lcjogYW55O1xyXG4gIG9uRW1haWxDaGFuZ2UoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5lbWFpbERlYm91bmNlVGltZXIpO1xyXG4gICAgdGhpcy5lbWFpbERlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc0VtYWlsVmFsaWQoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG4gIGVtYWlsQ2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0VtYWlsVmFsaWQoKSB7XHJcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xyXG4gICAgdGhpcy5lbWFpbENoZWNrID0gIWVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsKTtcclxuXHJcbiAgICBjb25zdCBtb2JpbGVSZWdleCA9IC9eWzYtOV1cXGR7OX0kLztcclxuICAgIHRoaXMubW9iaWxlQ2hlY2sgPSAhbW9iaWxlUmVnZXgudGVzdCh0aGlzLm1vYmlsZSk7XHJcblxyXG4gICAgcmV0dXJuIGVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsKSB8fCBtb2JpbGVSZWdleC50ZXN0KHRoaXMubW9iaWxlKTtcclxuICB9XHJcbiAgcGFzc3dvcmREZWJvdW5jZVRpbWVyOiBhbnk7XHJcbiAgb25QYXNzd29yZENoYW5nZSgpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnBhc3N3b3JkRGVib3VuY2VUaW1lcik7XHJcbiAgICB0aGlzLnBhc3N3b3JkRGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzUGFzc3dvcmRWYWxpZCgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcbiAgcGFzc3dvcmRDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzUGFzc3dvcmRWYWxpZCgpIHtcclxuICAgIGNvbnN0IHBhc3N3b3JkUmVnZXggPSAvXig/PS4qW2Etel0pKD89LipbQS1aXSkoPz0uKlxcZCkoPz0uKlteQS1aYS16XFxkXSkuezgsfSQvO1xyXG5cclxuICAgIGNvbnN0IGlzVmFsaWQgPSBwYXNzd29yZFJlZ2V4LnRlc3QodGhpcy5wYXNzd29yZCk7XHJcblxyXG4gICAgLy8gWW91IHdhbnQgRkFMU0Ugd2hlbiB2YWxpZFxyXG4gICAgdGhpcy5wYXNzd29yZENoZWNrID0gIWlzVmFsaWQ7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucGFzc3dvcmRDaGVjaztcclxuICB9XHJcblxyXG4gIG1vYmlsZURlYm91bmNlVGltZXI6IGFueTtcclxuICBvbk1vYmlsZUNoYW5nZSgpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLm1vYmlsZURlYm91bmNlVGltZXIpO1xyXG4gICAgdGhpcy5tb2JpbGVEZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubW9iaWxlTnVtYmVyVmFsaWQoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG4gIG1vYmlsZUNoZWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbW9iaWxlTnVtYmVyVmFsaWQoKSB7XHJcbiAgICBjb25zdCBtb2JpbGVSZWdleCA9IC9eWzYtOV1cXGR7OX0kLztcclxuICAgIHRoaXMubW9iaWxlQ2hlY2sgPSAhbW9iaWxlUmVnZXgudGVzdCh0aGlzLm1vYmlsZSk7XHJcbiAgICByZXR1cm4gbW9iaWxlUmVnZXgudGVzdCh0aGlzLm1vYmlsZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNNb2JpbGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNDc1O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGVzPy5sYXlvdXQgfSBhcyBMYXlPdXRNb2RlbDtcclxuICB9XHJcblxyXG4gIGdldCBhY2NlbnRDb2xvcigpIHtcclxuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yID8gdGhpcy5zdHlsZXMuYmFja2dyb3VuZD8uYWNjZW50Q29sb3IgOiAnIzY2N2VlYSc7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWNjZW50LWNvbG9yJywgY29sb3IpO1xyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWFjY2VudC1zaGFkb3cnLCB0aGlzLmhleFRvUmdiYShjb2xvciwgMC40KSk7XHJcbiAgICByZXR1cm4gY29sb3I7XHJcbiAgfVxyXG4gIHByaXZhdGUgaGV4VG9SZ2JhKGhleDogc3RyaW5nLCBhbHBoYTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHIgPSBwYXJzZUludChoZXguc2xpY2UoMSwgMyksIDE2KTtcclxuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXguc2xpY2UoMywgNSksIDE2KTtcclxuICAgIGNvbnN0IGIgPSBwYXJzZUludChoZXguc2xpY2UoNSwgNyksIDE2KTtcclxuICAgIHJldHVybiBgcmdiYSgke3J9LCAke2d9LCAke2J9LCAke2FscGhhfSlgO1xyXG4gIH1cclxuICBzZXR1cDNERWZmZWN0cygpIHtcclxuICAgIGNvbnN0IG1haW5QYW5lbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYWluLXBhbmVsJyk7XHJcblxyXG4gICAgaWYgKG1haW5QYW5lbCkge1xyXG4gICAgICBtYWluUGFuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHJlY3QgPSBtYWluUGFuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgY29uc3QgeCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdDtcclxuICAgICAgICBjb25zdCB5ID0gZS5jbGllbnRZIC0gcmVjdC50b3A7XHJcblxyXG4gICAgICAgIGNvbnN0IGNlbnRlclggPSByZWN0LndpZHRoIC8gMjtcclxuICAgICAgICBjb25zdCBjZW50ZXJZID0gcmVjdC5oZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICBjb25zdCByb3RhdGVYID0gKHkgLSBjZW50ZXJZKSAvIDIwO1xyXG4gICAgICAgIGNvbnN0IHJvdGF0ZVkgPSAoY2VudGVyWCAtIHgpIC8gMjA7XHJcblxyXG4gICAgICAgIChtYWluUGFuZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnRyYW5zZm9ybSA9IGBwZXJzcGVjdGl2ZSgxMjAwcHgpIHJvdGF0ZVgoJHtyb3RhdGVYfWRlZykgcm90YXRlWSgke3JvdGF0ZVl9ZGVnKSB0cmFuc2xhdGVaKDApYDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBtYWluUGFuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGUpIHtcclxuICAgICAgICAgIChtYWluUGFuZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnRyYW5zZm9ybSA9ICdyb3RhdGVYKDBkZWcpIHJvdGF0ZVkoMGRlZyknO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNob3dQYXNzd29yZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VySWQ6IHN0cmluZykge1xyXG4gICAgbGV0IHRyaWFsQ2FydEl0ZW06IGFueVtdID0gW11cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VHJpYWxDYXJ0KCkudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgcmVzcG9uc2Uub25zdWNjZXNzID0gKHVzZXJUcmlhbENhcnRSZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdHJpYWxDYXJ0SXRlbSA9IHVzZXJUcmlhbENhcnRSZXNwb25zZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgIGlmICh0cmlhbENhcnRJdGVtPy5sZW5ndGggPT0gMClcclxuICAgICAgICAgIHJldHVyblxyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdDogc3luY0l0ZW1Ub1NlcnZlckRCUmVxdWVzdCA9IG5ldyBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0KHVzZXJJZCwgJ1RSSUFMX0NBUlQnLCB0cmlhbENhcnRJdGVtKVxyXG4gICAgICAgIHRoaXMucmVzdFNlcnZpY2UuYWRkVHJpYWxJdGVtKHJlcXVlc3QpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuY2xlYXJUcmlhbENhcnQoKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcbn1cclxuIiwiPHAtdG9hc3QgcG9zaXRpb249XCJib3R0b20tcmlnaHRcIiBbYmFzZVpJbmRleF09XCIxMDAwMDAwMDAwMFwiIFthdXRvWkluZGV4XT1cInRydWVcIlxyXG4gIFtzaG93VHJhbnNmb3JtT3B0aW9uc109XCJpc01vYmlsZSA/ICd0cmFuc2xhdGVZKC0xMDAlKScgOiAnJ1wiPjwvcC10b2FzdD5cclxuXHJcbjxzZWN0aW9uIFtpZF09XCJkYXRhPy5pZFwiIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIj5cclxuICA8ZGl2IFtzcGFjaW5nQXJvdW5kXT1cInN0eWxlc0xheW91dFwiPlxyXG4gICAgPGRpdiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0xheW91dF09XCJzdHlsZXM/LmxheW91dFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXJlYSB3LTEwMFwiPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cImNpcmNsZXNcIiBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtpZF09XCJkYXRhPy5pZFwiPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgW2lkXT1cImRhdGE/LmlkXCIgY2xhc3M9XCJtYWluLXBhbmVsIGQtZmxleCBnYXAtMlwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIiBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cIlxyXG4gICAgICAgIGN1cnJlbnRQYWdlID09PSAnTE9HSU4nID8gNDUwIDogNjAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHctMTAwXCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQW5pbWF0aW9uXT1cInN0eWxlcz8uYW5pbWF0aW9uXCIgW3NpbXBvQ29ybmVyXT1cInN0eWxlcz8uY29ybmVyc1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYnNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYlwiIGlkPVwidGFiLXNpZ251cFwiIChjbGljayk9XCJjdXJyZW50UGFnZSA9ICdTSUdOVVAnXCJcclxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnOmN1cnJlbnRQYWdlID09PSAnU0lHTlVQJyA/IGFjY2VudEJhY2tncm91bmQgOiAnJ31cIiBbc3R5bGUuY29sb3JdPVwiZm9udENvbG9yXCI+U2lnblxyXG4gICAgICAgICAgICAgIHVwPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0YWJcIiBpZD1cInRhYi1sb2dpblwiIChjbGljayk9XCJjdXJyZW50UGFnZSA9ICdMT0dJTidcIlxyXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZCc6Y3VycmVudFBhZ2UgPT09ICdMT0dJTicgPyBhY2NlbnRCYWNrZ3JvdW5kIDogJyd9XCIgW3N0eWxlLmNvbG9yXT1cImZvbnRDb2xvclwiPkxvZ1xyXG4gICAgICAgICAgICAgIGluPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXJyZW50UGFnZSA9PT0gJ0xPR0lOJyA/IGxvZ2luVGVtcGxhdGUgOiBudWxsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VycmVudFBhZ2UgPT09ICdTSUdOVVAnID8gc2lnbkluVGVtcGxhdGUgOiBudWxsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VycmVudFBhZ2UgPT09ICdGT1JHT1RfUEFTU1dPUkQnID8gZm9yZ290UGFzc3dvcmRUZW1wbGF0ZSA6IG51bGxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGVkaXR9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxyXG4gICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVcIiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGRlbGV0ZX1cIj5cclxuICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cclxuICA8L2Rpdj5cclxuXHJcbjwvc2VjdGlvbj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbG9naW5UZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHRleHQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTIgbG9naW4tbWFpbi1zZWN0aW9uXCI+XHJcbiAgICA8cCBjbGFzcz1cIm1iLTAgY2xyLWJsYWNrIGxvZ2luLXRleHRcIj57e2xvZ2luVHlwZSA9PT0gJ09UUCcgPyAnTG9naW4gdmlhIE9UUCcgOiAnTG9naW4nfX08L3A+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImxvZ2luLWlucHV0LXNlY3Rpb25cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cclxuICAgICAgPGxhYmVsIGZvcj1cIlwiPkVtYWlsL01vYmlsZTwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiY2xyLWJsYWNrXCIgWyhuZ01vZGVsKV09XCJlbWFpbFwiIHJlcXVpcmVkPVwiXCIgcGxhY2Vob2xkZXI9XCJqYW5lZG9lQGdtYWlsLmNvbSAvIDk4NzY1NDMyMTBcIlxyXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRW1haWxDaGFuZ2UoKVwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCIhZW1haWxDaGVjayA/ICcnIDogJ3JlZCdcIj5cclxuICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImYtMTJcIiAqbmdJZj1cImVtYWlsQ2hlY2tcIiBbc3R5bGUuY29sb3JdPVwiJ3JlZCdcIj5QbGVhc2UgRW50ZXIgdmFsaWQgRW1haWwqPC9zcGFuPiAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWJveCBtYi00XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gcGFzc3dvcmQtdGV4dC1jb250YWluZXJcIiAqbmdJZj1cImxvZ2luVHlwZT09PSdQQVNTV09SRCdcIj5cclxuICAgICAgICAgIFBhc3N3b3JkXHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dQYXNzd29yZFwiIGNsYXNzPVwicGFzc3dvcmQtY29uZmlnIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd1Bhc3N3b3JkID0gdHJ1ZVwiPjxpbWdcclxuICAgICAgICAgICAgICBzcmM9XCJodHRwczovL2Qyejk0OTd4cDh4YjEyLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzE4MTcyMGMxNzYyODY2MzA5ODU0SWNvbl8oMykuc3ZnXCIgYWx0PVwiXCI+Jm5ic3A7U2hvd1xyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFzc3dvcmQtY29uZmlnIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic2hvd1Bhc3N3b3JkID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInNob3dQYXNzd29yZFwiPjxpbWdcclxuICAgICAgICAgICAgICBzcmM9XCJodHRwczovL2Qyejk0OTd4cDh4YjEyLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzk5NDkxNGMxNzYyODA1NTI5MDcxRXllX29mZi5zdmdcIiBhbHQ9XCJcIj4mbmJzcDtIaWRlXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHctMTAwIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0xIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAqbmdJZj1cImxvZ2luVHlwZT09PSdPVFAnICYmICFnZW5lcmF0ZU90cFwiIHN0eWxlPVwiZm9udC1zaXplOjEycHhcIj5PVFAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwibG9naW5UeXBlPT09J09UUCcgJiYgZ2VuZXJhdGVPdHAgPT09IGZhbHNlXCIgKGNsaWNrKT1cInJlc2VuZE90cCgpXCIgc3R5bGU9XCJmb250LXNpemU6MTFweFwiPlJlc2VuZFxyXG4gICAgICAgICAgICBPdHA8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvZ2luVHlwZT09PSdQQVNTV09SRCdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBwYXNzd29yZC1pbnB1dC1jb250YWluZXJcIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiIXBhc3N3b3JkQ2hlY2sgPyAnJyA6ICdyZWQnXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbdHlwZV09XCJzaG93UGFzc3dvcmQgPyAndGV4dCcgOiAncGFzc3dvcmQnXCIgcmVxdWlyZWQ9XCJcIiBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblBhc3N3b3JkQ2hhbmdlKClcIiBjbGFzcz1cInctOTAgYi1ub25lIGNsci1ibGFja1wiIHBsYWNlaG9sZGVyPVwiSm9obmRvZUAxMjM0XCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9naW5UeXBlPT09J09UUCdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG90cF9pbnB1dFwiIFtuZ0NsYXNzXT1cInsnZ2FwLTEnOiBsb2dpblR5cGU9PT0nT1RQJyAmJlxyXG4gICAgICAgICAgICAgIGdlbmVyYXRlT3RwPT09ZmFsc2V9XCIgKm5nSWY9XCIhZ2VuZXJhdGVPdHBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiB3LTEwMCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCAqbmdGb3I9XCJsZXQgY29udHJvbCBvZiBvdHBDb250cm9scy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiICNvdHBJbnB1dFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1jZW50ZXIgb3RwLWJveCBjbHItYmxhY2tcIiBtYXhsZW5ndGg9XCIxXCIgaW5wdXRtb2RlPVwibnVtZXJpY1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIChpbnB1dCk9XCJvbklucHV0KGkpXCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgaSlcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSA8aW5wdXQgY2xhc3M9XCJ3LTEwMFwiIHBsYWNlaG9sZGVyPVwiMTIzNFwiIFsobmdNb2RlbCldPVwib25lVGltZVBhc3N3b3JkXCIgdHlwZT1cIm51bWJlclwiPiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJwYXNzd29yZENoZWNrICYmIGN1cnJlbnRQYWdlID09PSAnU0lHTlVQJ1wiIGNsYXNzPVwiZi0xMlwiIFtzdHlsZS5jb2xvcl09XCIncmVkJ1wiPllvdXIgcGFzc3dvcmQgbXVzdFxyXG4gICAgICAgIGNvbnRhaW4gMSBVcHBlcmNhc2UgLCAxXHJcbiAgICAgICAgTG93ZXJjYXNlICwgMSBTcGVjaWFsXHJcbiAgICAgICAgQ2hhcmFjdGVyICwgMSBEaWdpdCBhbmQgTWluaW11bSA4IENoYXJhY3RlcnMqPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJmb3Jnb3QtcHdkIHctMTAwIHRleHQtZW5kIG1iLTJcIiBbc3R5bGUuY29sb3JdPVwiYWNjZW50Q29sb3JcIiAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnRk9SR09UX1BBU1NXT1JEJ1wiPlxyXG4gICAgICBGb3Jnb3QgUGFzc3dvcmQ/PC9kaXY+IC0tPlxyXG4gICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKm5nSWY9XCIhYnV0dG9uTG9hZGluZ1wiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtpZF09XCJidXR0b25JZFwiIFtidXR0b25TdHlsZV09XCJidXR0b24/LnN0eWxlc1wiXHJcbiAgICAgIFtiYWNrZ3JvdW5kSW5mb109XCJzdHlsZXM/LmJhY2tncm91bmRcIiBbc2ltcG9Db3JuZXJdPVwic3R5bGVzPy5jb3JuZXJzXCIgW2NvbG9yXT1cInN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAoY2xpY2spPVwibG9naW4oKVwiPkxvZ2luPC9idXR0b24+IC0tPlxyXG4gICAgPGFwcC1idXR0b24tZWxlbWVudCBbYnV0dG9uQ29udGVudF09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMV0/LmNvbnRlbnQ/LmxhYmVsPy5sZW5ndGggPiAwID8gZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5jb250ZW50OiB7XHJcbiAgICAgICAgICAnbGFiZWwnOiAnTG9naW4nIH0gXCIgKGNsaWNrKT1cIiBsb2dpbigpXCIgKm5nSWY9XCIhZ2VuZXJhdGVPdHBcIiBbYnV0dG9uU3R5bGVdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5zdHlsZXNcIlxyXG4gICAgICBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5pZFwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIiBbZWRpdF09XCJlZGl0XCJcclxuICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcclxuICAgICAgW2xvYWRpbmddPVwiYnV0dG9uTG9hZGluZ1wiIFtpc0Z1bGxXaWR0aF09XCJ0cnVlXCI+PC9hcHAtYnV0dG9uLWVsZW1lbnQ+XHJcbiAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBwLTJcIiAqbmdJZj1cIiFidXR0b25Mb2FkaW5nICYmICFnZW5lcmF0ZU90cFwiIFtidXR0b25EYXRhXT1cImJ1dHRvbj8uY29udGVudFwiXHJcbiAgICAgIFtidXR0b25TdHlsZV09XCJidXR0b24/LnN0eWxlc1wiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtpZF09XCJkYXRhPy5pZCsoYnV0dG9uPy5pZCB8fCAnJylcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcclxuICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcclxuICAgICAgW2FwcEJ1dHRvbkVkaXRvcl09XCJlZGl0ID8/IGZhbHNlXCIgW2J1dHRvbklkXT1cImJ1dHRvbj8uaWQgPz8gJydcIiAoY2xpY2spPVwibG9naW4oKVwiPkxvZ2luPC9idXR0b24+IC0tPlxyXG4gICAgPGFwcC1idXR0b24tZWxlbWVudCBbYnV0dG9uQ29udGVudF09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmNvbnRlbnQ/LmxhYmVsPy5sZW5ndGggPiAwID8gZGF0YT8uYWN0aW9uPy5idXR0b25zWzJdPy5jb250ZW50OiB7XHJcbiAgICAgICAgICAnbGFiZWwnOiAnR2VuZXJhdGUgT3RwJ30gXCIgKGNsaWNrKT1cImdldE9UUCgpXCIgKm5nSWY9XCJnZW5lcmF0ZU90cFwiXHJcbiAgICAgIFtidXR0b25TdHlsZV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LnN0eWxlc1wiIFtidXR0b25JZF09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmlkXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgIFtlZGl0XT1cImVkaXRcIiBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIlxyXG4gICAgICBbbG9hZGluZ109XCJidXR0b25Mb2FkaW5nXCIgW2lzRnVsbFdpZHRoXT1cInRydWVcIj48L2FwcC1idXR0b24tZWxlbWVudD5cclxuICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cInNlbmQtYnRuIHAtMlwiICpuZ0lmPVwiIWJ1dHRvbkxvYWRpbmcgJiYgZ2VuZXJhdGVPdHBcIiBbYnV0dG9uRGF0YV09XCJidXR0b24/LmNvbnRlbnRcIlxyXG4gICAgICBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uPy5zdHlsZXNcIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbaWRdPVwiZGF0YT8uaWQrKGJ1dHRvbj8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIFtidXR0b25JZF09XCJidXR0b24/LmlkID8/ICcnXCIgKGNsaWNrKT1cImdldE9UUCgpXCI+R2VuZXJhdGUgT3RwPC9idXR0b24+IC0tPlxyXG4gICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImJ1dHRvbklkXCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbj8uc3R5bGVzXCJcclxuICAgICAgW2JhY2tncm91bmRJbmZvXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIlxyXG4gICAgICBbY29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkxvYWRpbmcuLi48L2J1dHRvbj4gLS0+XHJcbiAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBwLTJcIiAqbmdJZj1cImJ1dHRvbkxvYWRpbmdcIiBbYnV0dG9uRGF0YV09XCJidXR0b24/LmNvbnRlbnRcIiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uPy5zdHlsZXNcIlxyXG4gICAgICBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbaWRdPVwiZGF0YT8uaWQrKGJ1dHRvbj8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIFtidXR0b25JZF09XCJidXR0b24/LmlkID8/ICcnXCI+TG9hZGluZy4uLjwvYnV0dG9uPiAtLT5cclxuXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNpZ24tdXAgbXQtMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmQgZnMtMTNcIiAqbmdJZj1cInNpZ25VcEVuYWJsZWRcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhcmtcIiAoY2xpY2spPVwibG9naW5BdXRoZW50aWNhdGlvbignT1RQJylcIlxyXG4gICAgICAgICpuZ0lmPVwibG9naW5UeXBlPT09J1BBU1NXT1JEJztlbHNlIGxvZ2luV2l0aFBhc3N3b3JkXCI+TG9naW4gd2l0aFxyXG4gICAgICAgIE9UUDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlICNsb2dpbldpdGhQYXNzd29yZD5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhcmtcIiAoY2xpY2spPVwibG9naW5BdXRoZW50aWNhdGlvbignUEFTU1dPUkQnKVwiPkxvZ2luIHdpdGhcclxuICAgICAgICBQYXNzd29yZDwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC0yMFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwib3ItZGl2aWRlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwib3ItdGV4dFwiPm9yPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNpZ24tdXBcIj5Mb2dpbiB3aXRoIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJhY2NlbnRDb2xvclwiPk9UUDwvc3Bhbj48L2Rpdj5cclxuICAgIDwvZGl2PiAtLT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNzaWduSW5UZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTNcIj5cclxuICAgIDxwIGNsYXNzPVwibWItMCBmcy0yMC1mdy02MDAgY2xyLWJsYWNrXCI+U2lnbiB1cDwvcD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCB3LTEwMCBzaWdudXAtaW5wdXQtY29udGFpbmVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgIDxsYWJlbCBmb3I9XCJcIj5OYW1lPC9sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJjbHItYmxhY2tcIiBbKG5nTW9kZWwpXT1cInVzZXJOYW1lXCIgcGxhY2Vob2xkZXI9XCJKYW5lIERvZVwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgIDxsYWJlbCBmb3I9XCJcIj5FbWFpbDwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBjbGFzcz1cImNsci1ibGFja1wiIFsobmdNb2RlbCldPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cImphbmVkb2VAZ21haWwuY29tXCJcclxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkVtYWlsQ2hhbmdlKClcIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiIWVtYWlsQ2hlY2sgPyAnJyA6ICdyZWQnXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiICpuZ0lmPVwiZW1haWxDaGVja1wiIFtzdHlsZS5jb2xvcl09XCIncmVkJ1wiPlBsZWFzZSBFbnRlciB2YWxpZCBlbWFpbCo8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxyXG4gICAgICAgIDxsYWJlbCBmb3I9XCJcIj5QaG9uZSBOdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJjbHItYmxhY2tcIiBbKG5nTW9kZWwpXT1cIm1vYmlsZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9iaWxlQ2hhbmdlKClcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCI5ODc2NTQzMjE5XCIgW3N0eWxlLmJvcmRlckNvbG9yXT1cIiFtb2JpbGVDaGVjayA/ICcnIDogJ3JlZCdcIiBjbGFzcz1cIm5vLWFycm93c1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiICpuZ0lmPVwibW9iaWxlQ2hlY2tcIiBbc3R5bGUuY29sb3JdPVwiJ3JlZCdcIj5QbGVhc2UgRW50ZXIgdmFsaWQgTW9iaWxlIG51bWJlcio8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiIGlucHV0LWJveCBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHBhc3N3b3JkLXRleHQtY29udGFpbmVyXCI+PGxhYmVsXHJcbiAgICAgICAgICAgIGZvcj1cIlwiPlBhc3N3b3JkPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1Bhc3N3b3JkXCIgY2xhc3M9XCJwYXNzd29yZC1jb25maWcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzaG93UGFzc3dvcmQgPSB0cnVlXCI+PGltZ1xyXG4gICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvMTgxNzIwYzE3NjI4NjYzMDk4NTRJY29uXygzKS5zdmdcIiBhbHQ9XCJcIj4mbmJzcDtTaG93XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1jb25maWcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzaG93UGFzc3dvcmQgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd1Bhc3N3b3JkXCI+PGltZ1xyXG4gICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvOTk0OTE0YzE3NjI4MDU1MjkwNzFFeWVfb2ZmLnN2Z1wiIGFsdD1cIlwiPiZuYnNwO0hpZGVcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8aW5wdXQgW3R5cGVdPVwic2hvd1Bhc3N3b3JkID8gJ3RleHQnIDogJ3Bhc3N3b3JkJ1wiIHJlcXVpcmVkPVwiXCIgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiIGNsYXNzPVwidy05MCBjbHItYmxhY2tcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkphbmVkb2VAMTIzNFwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCIhcGFzc3dvcmRDaGVjayA/ICcnIDogJ3JlZCdcIlxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblBhc3N3b3JkQ2hhbmdlKClcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cInBhc3N3b3JkQ2hlY2tcIiBjbGFzcz1cImYtMTJcIiBbc3R5bGUuY29sb3JdPVwiJ3JlZCdcIj5Zb3VyIHBhc3N3b3JkIG11c3QgY29udGFpbiAxIFVwcGVyY2FzZSAsIDFcclxuICAgICAgICAgIExvd2VyY2FzZSAsIDEgU3BlY2lhbFxyXG4gICAgICAgICAgQ2hhcmFjdGVyICwgMSBEaWdpdCBhbmQgTWluaW11bSA4IENoYXJhY3RlcnMqPC9zcGFuPlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN0cmVuZ3RoLWJhci1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdHJlbmd0aCBvZiBwYXNzd29yZFN0cmVuZ3RoOyBsZXQgaWR4ID0gaW5kZXhcIiBjbGFzcz1cInN0cmVuZ3RoLWJhclwiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImdldFN0cmVuZ3RoQ29sb3IoaWR4KVwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YXBwLWJ1dHRvbi1lbGVtZW50IFtidXR0b25Db250ZW50XT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudD8ubGFiZWw/Lmxlbmd0aCA+IDAgPyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmNvbnRlbnQ6IHtcclxuICAgICAgICAgICdsYWJlbCc6ICdDcmVhdGUgQWNjb3VudCcgfSBcIiAoY2xpY2spPVwiY3JlYXRlQWNjb3VudCgpXCIgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uc3R5bGVzXCJcclxuICAgICAgW2J1dHRvbklkXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uaWRcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCIgW2VkaXRdPVwiZWRpdFwiXHJcbiAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNFbWFpbFZhbGlkIHx8ICFpc1Bhc3N3b3JkVmFsaWQgfHwgIXVzZXJOYW1lXCIgW2xvYWRpbmddPVwiYnV0dG9uTG9hZGluZ1wiXHJcbiAgICAgIFtpc0Z1bGxXaWR0aF09XCJ0cnVlXCI+PC9hcHAtYnV0dG9uLWVsZW1lbnQ+XHJcbiAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAqbmdJZj1cIiFidXR0b25Mb2FkaW5nXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImJ1dHRvbklkXCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbj8uc3R5bGVzXCJcclxuICAgICAgW2JhY2tncm91bmRJbmZvXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIiBbY29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgIChjbGljayk9XCJjcmVhdGVBY2NvdW50KClcIiBbZGlzYWJsZWRdPVwiIWlzRW1haWxWYWxpZCB8fCAhaXNQYXNzd29yZFZhbGlkIHx8ICF1c2VyTmFtZVwiPkNyZWF0ZSBBY2NvdW50PC9idXR0b24+IC0tPlxyXG4gICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImJ1dHRvbklkXCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbj8uc3R5bGVzXCJcclxuICAgICAgW2JhY2tncm91bmRJbmZvXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIiBbY29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgICpuZ0lmPVwiYnV0dG9uTG9hZGluZ1wiPkxvYWRpbmcuLi48L2J1dHRvbj4gLS0+XHJcblxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzaWduLXVwIHRleHQtc2Vjb25kYXJ5IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBcclxuICAgIG10LTMgZnMtMTQgdy0xMDAgdGV4dC1jZW50ZXIgXCI+QWxyZWFkeSBoYXZlIGFuIGFjY291bnQ/Jm5ic3A7PHNwYW4gKGNsaWNrKT1cImN1cnJlbnRQYWdlID0gJ0xPR0lOJ1wiXHJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhcmtcIj5Mb2dpbjwvc3Bhbj48L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZm9yZ290UGFzc3dvcmRUZW1wbGF0ZT5cclxuICA8ZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxyXG4gICAgICA8bGFiZWwgZm9yPVwiXCI+RW1haWwgb3IgUGhvbmUgbnVtYmVyPC9sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIFsobmdNb2RlbCldPVwiZW1haWxcIiByZXF1aXJlZD1cIlwiIHBsYWNlaG9sZGVyPVwiamFuZWRvZUBnbWFpbC5jb21cIlxyXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRW1haWxDaGFuZ2UoKVwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCIhZW1haWxDaGVjayA/ICcnIDogJ3JlZCdcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInNlbmQtYnRuIHAtMlwiICpuZ0lmPVwiIWJ1dHRvbkxvYWRpbmdcIiBbYnV0dG9uRGF0YV09XCJidXR0b24/LmNvbnRlbnRcIiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uPy5zdHlsZXNcIlxyXG4gICAgICBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbaWRdPVwiZGF0YT8uaWQrKGJ1dHRvbj8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIFtidXR0b25JZF09XCJidXR0b24/LmlkID8/ICcnXCI+U3VibWl0PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwic2VuZC1idG4gcC0yXCIgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCIgW2J1dHRvbkRhdGFdPVwiYnV0dG9uPy5jb250ZW50XCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbj8uc3R5bGVzXCJcclxuICAgICAgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImRhdGE/LmlkKyhidXR0b24/LmlkIHx8ICcnKVwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIlxyXG4gICAgICBbYXBwQnV0dG9uRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIiBbYnV0dG9uSWRdPVwiYnV0dG9uPy5pZCA/PyAnJ1wiPkxvYWRpbmcuLi48L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|