@dereekb/dbx-firebase 12.4.5 → 12.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/auth/login/login.button.component.mjs +1 -1
- package/esm2022/lib/auth/login/login.email.content.component.mjs +2 -2
- package/esm2022/lib/development/development.scheduler.list.component.mjs +1 -1
- package/esm2022/lib/firestore/firebase.firestore.providers.mjs +21 -2
- package/esm2022/lib/model/loader/collection.loader.instance.mjs +65 -5
- package/esm2022/lib/model/modules/store/index.mjs +2 -1
- package/esm2022/lib/model/modules/store/store.collection.crud.mjs +28 -0
- package/esm2022/lib/model/modules/store/store.collection.directive.mjs +20 -2
- package/esm2022/lib/model/modules/store/store.collection.mjs +14 -1
- package/esm2022/lib/modules/index.mjs +2 -1
- package/esm2022/lib/modules/storagefile/container/index.mjs +7 -0
- package/esm2022/lib/modules/storagefile/container/storagefile.upload.action.handler.directive.mjs +118 -0
- package/esm2022/lib/modules/storagefile/container/storagefile.upload.error.mjs +12 -0
- package/esm2022/lib/modules/storagefile/container/storagefile.upload.handler.mjs +254 -0
- package/esm2022/lib/modules/storagefile/container/storagefile.upload.initialize.document.directive.mjs +39 -0
- package/esm2022/lib/modules/storagefile/container/storagefile.upload.store.directive.mjs +38 -0
- package/esm2022/lib/modules/storagefile/container/storagefile.upload.sync.directive.mjs +36 -0
- package/esm2022/lib/modules/storagefile/index.mjs +4 -0
- package/esm2022/lib/modules/storagefile/storagefile.upload.module.mjs +83 -0
- package/esm2022/lib/modules/storagefile/store/index.mjs +6 -0
- package/esm2022/lib/modules/storagefile/store/storagefile.collection.store.directive.mjs +22 -0
- package/esm2022/lib/modules/storagefile/store/storagefile.collection.store.mjs +18 -0
- package/esm2022/lib/modules/storagefile/store/storagefile.document.store.directive.mjs +21 -0
- package/esm2022/lib/modules/storagefile/store/storagefile.document.store.mjs +22 -0
- package/esm2022/lib/modules/storagefile/store/storagefile.upload.store.mjs +63 -0
- package/esm2022/lib/storage/firebase.storage.module.mjs +2 -2
- package/fesm2022/dereekb-dbx-firebase.mjs +833 -30
- package/fesm2022/dereekb-dbx-firebase.mjs.map +1 -1
- package/lib/firestore/firebase.firestore.providers.d.ts +14 -1
- package/lib/model/loader/collection.loader.instance.d.ts +26 -1
- package/lib/model/modules/store/index.d.ts +1 -0
- package/lib/model/modules/store/store.collection.crud.d.ts +21 -0
- package/lib/model/modules/store/store.collection.d.ts +19 -2
- package/lib/model/modules/store/store.collection.directive.d.ts +12 -2
- package/lib/modules/index.d.ts +1 -0
- package/lib/modules/storagefile/container/index.d.ts +6 -0
- package/lib/modules/storagefile/container/storagefile.upload.action.handler.directive.d.ts +47 -0
- package/lib/modules/storagefile/container/storagefile.upload.error.d.ts +9 -0
- package/lib/modules/storagefile/container/storagefile.upload.handler.d.ts +183 -0
- package/lib/modules/storagefile/container/storagefile.upload.initialize.document.directive.d.ts +14 -0
- package/lib/modules/storagefile/container/storagefile.upload.store.directive.d.ts +20 -0
- package/lib/modules/storagefile/container/storagefile.upload.sync.directive.d.ts +18 -0
- package/lib/modules/storagefile/index.d.ts +3 -0
- package/lib/modules/storagefile/storagefile.upload.module.d.ts +29 -0
- package/lib/modules/storagefile/store/index.d.ts +5 -0
- package/lib/modules/storagefile/store/storagefile.collection.store.d.ts +10 -0
- package/lib/modules/storagefile/store/storagefile.collection.store.directive.d.ts +9 -0
- package/lib/modules/storagefile/store/storagefile.document.store.d.ts +15 -0
- package/lib/modules/storagefile/store/storagefile.document.store.directive.d.ts +9 -0
- package/lib/modules/storagefile/store/storagefile.upload.store.d.ts +166 -0
- package/lib/storage/firebase.storage.module.d.ts +1 -1
- package/package.json +1 -1
|
@@ -51,7 +51,7 @@ export class DbxFirebaseLoginButtonComponent {
|
|
|
51
51
|
</div>
|
|
52
52
|
</dbx-button>
|
|
53
53
|
</ng-container>
|
|
54
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i2.DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "ngmodule", type: DbxButtonModule }, { kind: "component", type: i3.DbxButtonComponent, selector: "dbx-button", inputs: ["type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
54
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i2.DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "ngmodule", type: DbxButtonModule }, { kind: "component", type: i3.DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
55
55
|
}
|
|
56
56
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseLoginButtonComponent, decorators: [{
|
|
57
57
|
type: Component,
|
|
@@ -93,10 +93,10 @@ export class DbxFirebaseLoginEmailContentComponent {
|
|
|
93
93
|
this.doneOrCancelled.next(false);
|
|
94
94
|
}
|
|
95
95
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseLoginEmailContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
96
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFirebaseLoginEmailContentComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div class=\"dbx-firebase-login-email-content\">\n @switch (emailModeSignal()) {\n @case ('login') {\n <ng-container *ngTemplateOutlet=\"loginView\"></ng-container>\n }\n @case ('recover') {\n <ng-container *ngTemplateOutlet=\"resetPassword\"></ng-container>\n }\n @case ('recoversent') {\n <ng-container *ngTemplateOutlet=\"resetPasswordSent\"></ng-container>\n }\n }\n</div>\n\n<!-- Login View -->\n<ng-template #loginView>\n <ng-container dbxAction [dbxActionHandler]=\"handleLoginAction\">\n <dbx-firebase-email-form [config]=\"formConfig\" dbxActionForm [dbxFormSource]=\"emailFormValueSignal()\"></dbx-firebase-email-form>\n @if (isLoginMode) {\n <div class=\"dbx-firebase-login-email-forgot-prompt\">\n <dbx-link [anchor]=\"forgotAnchor\">Forgot Password?</dbx-link>\n </div>\n }\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-button-wide\" [text]=\"buttonText\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancel()\">Cancel</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </ng-container>\n</ng-template>\n\n<!-- Reset Password View -->\n<ng-template #resetPassword>\n <div class=\"dbx-firebase-login-email-content-recovery\" dbxAction [dbxActionHandler]=\"handleRecoveryAction\" [dbxActionSuccessHandler]=\"handleRecoverySuccess\">\n <dbx-firebase-email-recovery-form dbxActionForm [dbxFormSource]=\"recoveryFormValueSignal()\"></dbx-firebase-email-recovery-form>\n <p class=\"dbx-hint\">An email will be sent to the above address to help you reset your password.</p>\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-button-wide\" text=\"Send Recovery Email\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancelReset()\">Cancel Recovery</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </div>\n</ng-template>\n\n<!-- Reset Password Sent -->\n<ng-template #resetPasswordSent>\n <div class=\"dbx-firebase-login-email-content-recovery-sent\">\n <p class=\"dbx-hint\">A recovery email was sent to the specified address. Please check your email for next steps.</p>\n <button mat-raised-button (click)=\"clickedRecoveryAcknowledged()\">Ok</button>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DbxErrorComponent, selector: "dbx-error", inputs: ["error", "iconOnly"], outputs: ["popoverOpened"] }, { kind: "component", type: DbxLinkComponent, selector: "dbx-link", inputs: ["ref", "href", "anchor"] }, { kind: "directive", type: DbxActionErrorDirective, selector: "[dbxActionError]" }, { kind: "directive", type: DbxActionFormDirective, selector: "[dbxActionForm]", inputs: ["dbxActionFormDisabledOnWorking", "dbxActionFormIsValid", "dbxActionFormIsEqual", "dbxActionFormIsModified", "dbxActionFormMapValue"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: DbxFirebaseEmailFormComponent, selector: "dbx-firebase-email-form" }, { kind: "component", type: DbxFirebaseEmailRecoveryFormComponent, selector: "dbx-firebase-email-recovery-form" }, { kind: "directive", type: DbxFormSourceDirective, selector: "[dbxFormSource]", inputs: ["dbxFormSourceMode", "dbxFormSource"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
96
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFirebaseLoginEmailContentComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div class=\"dbx-firebase-login-email-content\">\n @switch (emailModeSignal()) {\n @case ('login') {\n <ng-container *ngTemplateOutlet=\"loginView\"></ng-container>\n }\n @case ('recover') {\n <ng-container *ngTemplateOutlet=\"resetPassword\"></ng-container>\n }\n @case ('recoversent') {\n <ng-container *ngTemplateOutlet=\"resetPasswordSent\"></ng-container>\n }\n }\n</div>\n\n<!-- Login View -->\n<ng-template #loginView>\n <ng-container dbxAction [dbxActionHandler]=\"handleLoginAction\">\n <dbx-firebase-email-form [config]=\"formConfig\" dbxActionForm [dbxFormSource]=\"emailFormValueSignal()\"></dbx-firebase-email-form>\n @if (isLoginMode) {\n <div class=\"dbx-firebase-login-email-forgot-prompt\">\n <dbx-link [anchor]=\"forgotAnchor\">Forgot Password?</dbx-link>\n </div>\n }\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-button-wide\" [text]=\"buttonText\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancel()\">Cancel</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </ng-container>\n</ng-template>\n\n<!-- Reset Password View -->\n<ng-template #resetPassword>\n <div class=\"dbx-firebase-login-email-content-recovery\" dbxAction [dbxActionHandler]=\"handleRecoveryAction\" [dbxActionSuccessHandler]=\"handleRecoverySuccess\">\n <dbx-firebase-email-recovery-form dbxActionForm [dbxFormSource]=\"recoveryFormValueSignal()\"></dbx-firebase-email-recovery-form>\n <p class=\"dbx-hint\">An email will be sent to the above address to help you reset your password.</p>\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-button-wide\" text=\"Send Recovery Email\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancelReset()\">Cancel Recovery</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </div>\n</ng-template>\n\n<!-- Reset Password Sent -->\n<ng-template #resetPasswordSent>\n <div class=\"dbx-firebase-login-email-content-recovery-sent\">\n <p class=\"dbx-hint\">A recovery email was sent to the specified address. Please check your email for next steps.</p>\n <button mat-raised-button (click)=\"clickedRecoveryAcknowledged()\">Ok</button>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DbxErrorComponent, selector: "dbx-error", inputs: ["error", "iconOnly"], outputs: ["popoverOpened"] }, { kind: "component", type: DbxLinkComponent, selector: "dbx-link", inputs: ["ref", "href", "anchor"] }, { kind: "directive", type: DbxActionErrorDirective, selector: "[dbxActionError]" }, { kind: "directive", type: DbxActionFormDirective, selector: "[dbxActionForm]", inputs: ["dbxActionFormDisabledOnWorking", "dbxActionFormIsValid", "dbxActionFormIsEqual", "dbxActionFormIsModified", "dbxActionFormMapValue"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: DbxFirebaseEmailFormComponent, selector: "dbx-firebase-email-form" }, { kind: "component", type: DbxFirebaseEmailRecoveryFormComponent, selector: "dbx-firebase-email-recovery-form" }, { kind: "directive", type: DbxFormSourceDirective, selector: "[dbxFormSource]", inputs: ["dbxFormSourceMode", "dbxFormSource"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
97
97
|
}
|
|
98
98
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseLoginEmailContentComponent, decorators: [{
|
|
99
99
|
type: Component,
|
|
100
100
|
args: [{ imports: [NgTemplateOutlet, DbxErrorComponent, DbxLinkComponent, DbxActionErrorDirective, DbxActionFormDirective, MatButtonModule, DbxActionModule, DbxButtonComponent, DbxButtonSpacerDirective, DbxFirebaseEmailFormComponent, DbxFirebaseEmailRecoveryFormComponent, DbxFormSourceDirective], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<div class=\"dbx-firebase-login-email-content\">\n @switch (emailModeSignal()) {\n @case ('login') {\n <ng-container *ngTemplateOutlet=\"loginView\"></ng-container>\n }\n @case ('recover') {\n <ng-container *ngTemplateOutlet=\"resetPassword\"></ng-container>\n }\n @case ('recoversent') {\n <ng-container *ngTemplateOutlet=\"resetPasswordSent\"></ng-container>\n }\n }\n</div>\n\n<!-- Login View -->\n<ng-template #loginView>\n <ng-container dbxAction [dbxActionHandler]=\"handleLoginAction\">\n <dbx-firebase-email-form [config]=\"formConfig\" dbxActionForm [dbxFormSource]=\"emailFormValueSignal()\"></dbx-firebase-email-form>\n @if (isLoginMode) {\n <div class=\"dbx-firebase-login-email-forgot-prompt\">\n <dbx-link [anchor]=\"forgotAnchor\">Forgot Password?</dbx-link>\n </div>\n }\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-button-wide\" [text]=\"buttonText\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancel()\">Cancel</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </ng-container>\n</ng-template>\n\n<!-- Reset Password View -->\n<ng-template #resetPassword>\n <div class=\"dbx-firebase-login-email-content-recovery\" dbxAction [dbxActionHandler]=\"handleRecoveryAction\" [dbxActionSuccessHandler]=\"handleRecoverySuccess\">\n <dbx-firebase-email-recovery-form dbxActionForm [dbxFormSource]=\"recoveryFormValueSignal()\"></dbx-firebase-email-recovery-form>\n <p class=\"dbx-hint\">An email will be sent to the above address to help you reset your password.</p>\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-button-wide\" text=\"Send Recovery Email\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancelReset()\">Cancel Recovery</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </div>\n</ng-template>\n\n<!-- Reset Password Sent -->\n<ng-template #resetPasswordSent>\n <div class=\"dbx-firebase-login-email-content-recovery-sent\">\n <p class=\"dbx-hint\">A recovery email was sent to the specified address. Please check your email for next steps.</p>\n <button mat-raised-button (click)=\"clickedRecoveryAcknowledged()\">Ok</button>\n </div>\n</ng-template>\n" }]
|
|
101
101
|
}] });
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uZW1haWwuY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9hdXRoL2xvZ2luL2xvZ2luLmVtYWlsLmNvbnRlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZpcmViYXNlL3NyYy9saWIvYXV0aC9sb2dpbi9sb2dpbi5lbWFpbC5jb250ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUMscUNBQXFDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqSSxPQUFPLEVBQUUsNEJBQTRCLEVBQW9ELE1BQU0sbUJBQW1CLENBQUM7QUFFbkgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakcsT0FBTyxFQUF5RCw2QkFBNkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXBJLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0osT0FBTyxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixF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QUFDO3dHQXJHVSxxQ0FBcUM7NEZBQXJDLHFDQUFxQyx3RUM1QmxELGc3RUFzREEsNENEOUJZLGdCQUFnQixvSkFBRSxpQkFBaUIsaUhBQUUsZ0JBQWdCLHdGQUFFLHVCQUF1Qiw2REFBRSxzQkFBc0IsMk1BQUUsZUFBZSwyTkFBRSxlQUFlLGdpQkFBRSxrQkFBa0Isd09BQUUsd0JBQXdCLGdGQUFFLDZCQUE2QixvRUFBRSxxQ0FBcUMsNkVBQUUsc0JBQXNCOzs0RkFJblIscUNBQXFDO2tCQU5qRCxTQUFTOzhCQUVDLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSx3QkFBd0IsRUFBRSw2QkFBNkIsRUFBRSxxQ0FBcUMsRUFBRSxzQkFBc0IsQ0FBQyxtQkFDOVEsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGJ4RmlyZWJhc2VFbWFpbFJlY292ZXJ5Rm9ybVZhbHVlLCBEYnhGaXJlYmFzZUVtYWlsUmVjb3ZlcnlGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9sb2dpbi5lbWFpbC5yZWNvdmVyeS5mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEQlhfSU5KRUNUSU9OX0NPTVBPTkVOVF9EQVRBLCBDbGlja2FibGVBbmNob3IsIERieEFjdGlvblN1Y2Nlc3NIYW5kbGVyRnVuY3Rpb24gfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBXb3JrVXNpbmdPYnNlcnZhYmxlLCBXb3JrVXNpbmdDb250ZXh0IH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi8uLi9zZXJ2aWNlL2ZpcmViYXNlLmF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgZnJvbSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBzaWduYWwsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZUxvZ2luQ29udGV4dCB9IGZyb20gJy4vbG9naW4uY29udGV4dCc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZUVtYWlsRm9ybVZhbHVlLCBEYnhGaXJlYmFzZUVtYWlsRm9ybUNvbmZpZywgRGJ4RmlyZWJhc2VFbWFpbEZvcm1Db21wb25lbnQgfSBmcm9tICcuL2xvZ2luLmVtYWlsLmZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IERieEZpcmViYXNlTG9naW5Nb2RlIH0gZnJvbSAnLi9sb2dpbic7XG5pbXBvcnQgeyBmaXJlYmFzZUF1dGhFcnJvclRvUmVhZGFibGVFcnJvciB9IGZyb20gJ0BkZXJlZWtiL2ZpcmViYXNlJztcbmltcG9ydCB7IHR5cGUgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IERieEFjdGlvbkVycm9yRGlyZWN0aXZlLCBEYnhBY3Rpb25Nb2R1bGUsIERieExpbmtDb21wb25lbnQsIERieEJ1dHRvbkNvbXBvbmVudCwgRGJ4QnV0dG9uU3BhY2VyRGlyZWN0aXZlLCBEYnhFcnJvckNvbXBvbmVudCB9IGZyb20gJ0BkZXJlZWtiL2RieC13ZWInO1xuaW1wb3J0IHsgRGJ4QWN0aW9uRm9ybURpcmVjdGl2ZSwgRGJ4Rm9ybVNvdXJjZURpcmVjdGl2ZSB9IGZyb20gJ0BkZXJlZWtiL2RieC1mb3JtJztcblxuZXhwb3J0IGludGVyZmFjZSBEYnhGaXJlYmFzZUxvZ2luRW1haWxDb250ZW50Q29tcG9uZW50Q29uZmlnIGV4dGVuZHMgRGJ4RmlyZWJhc2VFbWFpbEZvcm1Db25maWcge1xuICByZWFkb25seSBsb2dpbk1vZGU6IERieEZpcmViYXNlTG9naW5Nb2RlO1xufVxuXG5leHBvcnQgdHlwZSBEYnhGaXJlYmFzZUxvZ2luRW1haWxDb250ZW50TW9kZSA9ICdsb2dpbicgfCAncmVjb3ZlcicgfCAncmVjb3ZlcnNlbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmVtYWlsLmNvbnRlbnQuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgRGJ4RXJyb3JDb21wb25lbnQsIERieExpbmtDb21wb25lbnQsIERieEFjdGlvbkVycm9yRGlyZWN0aXZlLCBEYnhBY3Rpb25Gb3JtRGlyZWN0aXZlLCBNYXRCdXR0b25Nb2R1bGUsIERieEFjdGlvbk1vZHVsZSwgRGJ4QnV0dG9uQ29tcG9uZW50LCBEYnhCdXR0b25TcGFjZXJEaXJlY3RpdmUsIERieEZpcmViYXNlRW1haWxGb3JtQ29tcG9uZW50LCBEYnhGaXJlYmFzZUVtYWlsUmVjb3ZlcnlGb3JtQ29tcG9uZW50LCBEYnhGb3JtU291cmNlRGlyZWN0aXZlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4RmlyZWJhc2VMb2dpbkVtYWlsQ29udGVudENvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGRieEZpcmViYXNlQXV0aFNlcnZpY2UgPSBpbmplY3QoRGJ4RmlyZWJhc2VBdXRoU2VydmljZSk7XG4gIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdDxEYnhGaXJlYmFzZUxvZ2luRW1haWxDb250ZW50Q29tcG9uZW50Q29uZmlnPihEQlhfSU5KRUNUSU9OX0NPTVBPTkVOVF9EQVRBKTtcblxuICByZWFkb25seSBmb3JtQ29uZmlnOiBEYnhGaXJlYmFzZUVtYWlsRm9ybUNvbmZpZyA9IHtcbiAgICBsb2dpbk1vZGU6IHRoaXMuY29uZmlnLmxvZ2luTW9kZSxcbiAgICBwYXNzd29yZENvbmZpZzogdGhpcy5jb25maWcucGFzc3dvcmRDb25maWdcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9lbWFpbEZvcm1WYWx1ZVNpZ25hbCA9IHNpZ25hbDxNYXliZTxEYnhGaXJlYmFzZUVtYWlsRm9ybVZhbHVlPj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVjb3ZlcnlGb3JtVmFsdWVTaWduYWwgPSBzaWduYWw8TWF5YmU8RGJ4RmlyZWJhc2VFbWFpbFJlY292ZXJ5Rm9ybVZhbHVlPj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW1haWxNb2RlU2lnbmFsID0gc2lnbmFsPERieEZpcmViYXNlTG9naW5FbWFpbENvbnRlbnRNb2RlPignbG9naW4nKTtcblxuICByZWFkb25seSBlbWFpbEZvcm1WYWx1ZVNpZ25hbCA9IHRoaXMuX2VtYWlsRm9ybVZhbHVlU2lnbmFsLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgcmVjb3ZlcnlGb3JtVmFsdWVTaWduYWwgPSB0aGlzLl9yZWNvdmVyeUZvcm1WYWx1ZVNpZ25hbC5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGVtYWlsTW9kZVNpZ25hbCA9IHRoaXMuX2VtYWlsTW9kZVNpZ25hbC5hc1JlYWRvbmx5KCk7XG5cbiAgcmVhZG9ubHkgZm9yZ290QW5jaG9yOiBDbGlja2FibGVBbmNob3IgPSB7XG4gICAgb25DbGljazogKCkgPT4ge1xuICAgICAgdGhpcy5vcGVuUmVjb3ZlcnkoKTtcbiAgICB9XG4gIH07XG5cbiAgcmVhZG9ubHkgZG9uZU9yQ2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHN0YXRpYyBvcGVuRW1haWxMb2dpbkNvbnRleHQoZGJ4RmlyZWJhc2VMb2dpbkNvbnRleHQ6IERieEZpcmViYXNlTG9naW5Db250ZXh0LCBjb25maWc6IERieEZpcmViYXNlTG9naW5FbWFpbENvbnRlbnRDb21wb25lbnRDb25maWcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gZGJ4RmlyZWJhc2VMb2dpbkNvbnRleHQuc2hvd0NvbnRleHQoe1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGNvbXBvbmVudENsYXNzOiBEYnhGaXJlYmFzZUxvZ2luRW1haWxDb250ZW50Q29tcG9uZW50LFxuICAgICAgICBkYXRhOiBjb25maWdcbiAgICAgIH0sXG4gICAgICB1c2U6IChpbnN0YW5jZSkgPT4gZmlyc3RWYWx1ZUZyb20oaW5zdGFuY2UuZG9uZU9yQ2FuY2VsbGVkKVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGxvZ2luTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubG9naW5Nb2RlO1xuICB9XG5cbiAgZ2V0IGlzTG9naW5Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmxvZ2luTW9kZSA9PT0gJ2xvZ2luJztcbiAgfVxuXG4gIGdldCBpc1JlZ2lzdGVyTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpbk1vZGUgPT09ICdyZWdpc3Rlcic7XG4gIH1cblxuICBnZXQgYnV0dG9uVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubG9naW5Nb2RlID09PSAncmVnaXN0ZXInID8gJ1JlZ2lzdGVyJyA6ICdMb2cgSW4nO1xuICB9XG5cbiAgcmVhZG9ubHkgaGFuZGxlTG9naW5BY3Rpb246IFdvcmtVc2luZ09ic2VydmFibGU8RGJ4RmlyZWJhc2VFbWFpbEZvcm1WYWx1ZT4gPSAodmFsdWU6IERieEZpcmViYXNlRW1haWxGb3JtVmFsdWUpID0+IHtcbiAgICAvLyBUT0RPKHNpZ25hbHMpOiBkb3VibGUgY2hlY2sgdGhhdCB0aGlzIHBlcmZvcm1zIGFzIHdlIHdhbnQgdG8uXG5cbiAgICB0aGlzLl9lbWFpbEZvcm1WYWx1ZVNpZ25hbC5zZXQodmFsdWUpO1xuICAgIHRoaXMuX3JlY292ZXJ5Rm9ybVZhbHVlU2lnbmFsLnNldCh7IGVtYWlsOiB2YWx1ZS51c2VybmFtZSB9KTsgLy8gY2FjaGUgdmFsdWUgZm9yIHJlY292ZXJ5XG5cbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgaWYgKHRoaXMubG9naW5Nb2RlID09PSAncmVnaXN0ZXInKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLmRieEZpcmViYXNlQXV0aFNlcnZpY2UucmVnaXN0ZXJXaXRoRW1haWxBbmRQYXNzd29yZCh2YWx1ZS51c2VybmFtZSwgdmFsdWUucGFzc3dvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLmRieEZpcmViYXNlQXV0aFNlcnZpY2UubG9nSW5XaXRoRW1haWxBbmRQYXNzd29yZCh2YWx1ZS51c2VybmFtZSwgdmFsdWUucGFzc3dvcmQpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBmaXJlYmFzZUF1dGhFcnJvclRvUmVhZGFibGVFcnJvcihlcnJvcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbShyZXN1bHQpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvbmVPckNhbmNlbGxlZC5uZXh0KHRydWUpO1xuICAgICAgfSlcbiAgICApO1xuICB9O1xuXG4gIC8vIE1BUks6IFJlY292ZXJ5XG4gIG9wZW5SZWNvdmVyeSgpIHtcbiAgICB0aGlzLl9lbWFpbE1vZGVTaWduYWwuc2V0KCdyZWNvdmVyJyk7XG4gIH1cblxuICByZWFkb25seSBoYW5kbGVSZWNvdmVyeUFjdGlvbjogV29ya1VzaW5nQ29udGV4dDxEYnhGaXJlYmFzZUVtYWlsUmVjb3ZlcnlGb3JtVmFsdWU+ID0gKHZhbHVlOiBEYnhGaXJlYmFzZUVtYWlsUmVjb3ZlcnlGb3JtVmFsdWUsIGNvbnRleHQpID0+IHtcbiAgICB0aGlzLl9yZWNvdmVyeUZvcm1WYWx1ZVNpZ25hbC5zZXQodmFsdWUpO1xuICAgIHRoaXMuX2VtYWlsRm9ybVZhbHVlU2lnbmFsLnNldCh7IHVzZXJuYW1lOiB2YWx1ZS5lbWFpbCwgcGFzc3dvcmQ6ICcnIH0pO1xuICAgIGNvbnRleHQuc3RhcnRXb3JraW5nV2l0aFByb21pc2UodGhpcy5kYnhGaXJlYmFzZUF1dGhTZXJ2aWNlLnNlbmRQYXNzd29yZFJlc2V0RW1haWwodmFsdWUuZW1haWwpKTtcbiAgfTtcblxuICAvLyBNQVJLOiBSZWNvdmVyaW5nXG4gIHJlYWRvbmx5IGhhbmRsZVJlY292ZXJ5U3VjY2VzczogRGJ4QWN0aW9uU3VjY2Vzc0hhbmRsZXJGdW5jdGlvbiA9ICh4KSA9PiB7XG4gICAgdGhpcy5fZW1haWxNb2RlU2lnbmFsLnNldCgncmVjb3ZlcnNlbnQnKTtcbiAgfTtcblxuICBjbGlja2VkUmVjb3ZlcnlBY2tub3dsZWRnZWQoKSB7XG4gICAgdGhpcy5fZW1haWxNb2RlU2lnbmFsLnNldCgnbG9naW4nKTtcbiAgfVxuXG4gIC8vIE1BUks6IENhbmNlbFxuICBvbkNhbmNlbCgpIHtcbiAgICB0aGlzLmRvbmVPckNhbmNlbGxlZC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIG9uQ2FuY2VsUmVzZXQoKSB7XG4gICAgdGhpcy5kb25lT3JDYW5jZWxsZWQubmV4dChmYWxzZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYngtZmlyZWJhc2UtbG9naW4tZW1haWwtY29udGVudFwiPlxuICBAc3dpdGNoIChlbWFpbE1vZGVTaWduYWwoKSkge1xuICAgIEBjYXNlICgnbG9naW4nKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9naW5WaWV3XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBjYXNlICgncmVjb3ZlcicpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZXNldFBhc3N3b3JkXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBjYXNlICgncmVjb3ZlcnNlbnQnKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVzZXRQYXNzd29yZFNlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIH1cbjwvZGl2PlxuXG48IS0tIExvZ2luIFZpZXcgLS0+XG48bmctdGVtcGxhdGUgI2xvZ2luVmlldz5cbiAgPG5nLWNvbnRhaW5lciBkYnhBY3Rpb24gW2RieEFjdGlvbkhhbmRsZXJdPVwiaGFuZGxlTG9naW5BY3Rpb25cIj5cbiAgICA8ZGJ4LWZpcmViYXNlLWVtYWlsLWZvcm0gW2NvbmZpZ109XCJmb3JtQ29uZmlnXCIgZGJ4QWN0aW9uRm9ybSBbZGJ4Rm9ybVNvdXJjZV09XCJlbWFpbEZvcm1WYWx1ZVNpZ25hbCgpXCI+PC9kYngtZmlyZWJhc2UtZW1haWwtZm9ybT5cbiAgICBAaWYgKGlzTG9naW5Nb2RlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZGJ4LWZpcmViYXNlLWxvZ2luLWVtYWlsLWZvcmdvdC1wcm9tcHRcIj5cbiAgICAgICAgPGRieC1saW5rIFthbmNob3JdPVwiZm9yZ290QW5jaG9yXCI+Rm9yZ290IFBhc3N3b3JkPzwvZGJ4LWxpbms+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImRieC1mbGV4XCI+XG4gICAgICA8ZGJ4LWJ1dHRvbiBjbGFzcz1cImRieC1idXR0b24td2lkZVwiIFt0ZXh0XT1cImJ1dHRvblRleHRcIiBbcmFpc2VkXT1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIiBkYnhBY3Rpb25CdXR0b24+PC9kYngtYnV0dG9uPlxuICAgICAgPGRieC1idXR0b24tc3BhY2VyPjwvZGJ4LWJ1dHRvbi1zcGFjZXI+XG4gICAgICA8c3BhbiBjbGFzcz1cImRieC1zcGFjZXJcIj48L3NwYW4+XG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkYngtZXJyb3IgZGJ4QWN0aW9uRXJyb3I+PC9kYngtZXJyb3I+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBSZXNldCBQYXNzd29yZCBWaWV3IC0tPlxuPG5nLXRlbXBsYXRlICNyZXNldFBhc3N3b3JkPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWZpcmViYXNlLWxvZ2luLWVtYWlsLWNvbnRlbnQtcmVjb3ZlcnlcIiBkYnhBY3Rpb24gW2RieEFjdGlvbkhhbmRsZXJdPVwiaGFuZGxlUmVjb3ZlcnlBY3Rpb25cIiBbZGJ4QWN0aW9uU3VjY2Vzc0hhbmRsZXJdPVwiaGFuZGxlUmVjb3ZlcnlTdWNjZXNzXCI+XG4gICAgPGRieC1maXJlYmFzZS1lbWFpbC1yZWNvdmVyeS1mb3JtIGRieEFjdGlvbkZvcm0gW2RieEZvcm1Tb3VyY2VdPVwicmVjb3ZlcnlGb3JtVmFsdWVTaWduYWwoKVwiPjwvZGJ4LWZpcmViYXNlLWVtYWlsLXJlY292ZXJ5LWZvcm0+XG4gICAgPHAgY2xhc3M9XCJkYngtaGludFwiPkFuIGVtYWlsIHdpbGwgYmUgc2VudCB0byB0aGUgYWJvdmUgYWRkcmVzcyB0byBoZWxwIHlvdSByZXNldCB5b3VyIHBhc3N3b3JkLjwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiZGJ4LWZsZXhcIj5cbiAgICAgIDxkYngtYnV0dG9uIGNsYXNzPVwiZGJ4LWJ1dHRvbi13aWRlXCIgdGV4dD1cIlNlbmQgUmVjb3ZlcnkgRW1haWxcIiBbcmFpc2VkXT1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIiBkYnhBY3Rpb25CdXR0b24+PC9kYngtYnV0dG9uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJkYngtc3BhY2VyXCI+PC9zcGFuPlxuICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cIm9uQ2FuY2VsUmVzZXQoKVwiPkNhbmNlbCBSZWNvdmVyeTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkYngtZXJyb3IgZGJ4QWN0aW9uRXJyb3I+PC9kYngtZXJyb3I+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBSZXNldCBQYXNzd29yZCBTZW50IC0tPlxuPG5nLXRlbXBsYXRlICNyZXNldFBhc3N3b3JkU2VudD5cbiAgPGRpdiBjbGFzcz1cImRieC1maXJlYmFzZS1sb2dpbi1lbWFpbC1jb250ZW50LXJlY292ZXJ5LXNlbnRcIj5cbiAgICA8cCBjbGFzcz1cImRieC1oaW50XCI+QSByZWNvdmVyeSBlbWFpbCB3YXMgc2VudCB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuIFBsZWFzZSBjaGVjayB5b3VyIGVtYWlsIGZvciBuZXh0IHN0ZXBzLjwvcD5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJjbGlja2VkUmVjb3ZlcnlBY2tub3dsZWRnZWQoKVwiPk9rPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uZW1haWwuY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9hdXRoL2xvZ2luL2xvZ2luLmVtYWlsLmNvbnRlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZpcmViYXNlL3NyYy9saWIvYXV0aC9sb2dpbi9sb2dpbi5lbWFpbC5jb250ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUMscUNBQXFDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqSSxPQUFPLEVBQUUsNEJBQTRCLEVBQW9ELE1BQU0sbUJBQW1CLENBQUM7QUFFbkgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakcsT0FBTyxFQUF5RCw2QkFBNkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXBJLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0osT0FBTyxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixF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QUFDO3dHQXJHVSxxQ0FBcUM7NEZBQXJDLHFDQUFxQyx3RUM1QmxELGc3RUFzREEsNENEOUJZLGdCQUFnQixvSkFBRSxpQkFBaUIsaUhBQUUsZ0JBQWdCLHdGQUFFLHVCQUF1Qiw2REFBRSxzQkFBc0IsMk1BQUUsZUFBZSwyTkFBRSxlQUFlLGdpQkFBRSxrQkFBa0IsdVBBQUUsd0JBQXdCLGdGQUFFLDZCQUE2QixvRUFBRSxxQ0FBcUMsNkVBQUUsc0JBQXNCOzs0RkFJblIscUNBQXFDO2tCQU5qRCxTQUFTOzhCQUVDLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSx3QkFBd0IsRUFBRSw2QkFBNkIsRUFBRSxxQ0FBcUMsRUFBRSxzQkFBc0IsQ0FBQyxtQkFDOVEsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGJ4RmlyZWJhc2VFbWFpbFJlY292ZXJ5Rm9ybVZhbHVlLCBEYnhGaXJlYmFzZUVtYWlsUmVjb3ZlcnlGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9sb2dpbi5lbWFpbC5yZWNvdmVyeS5mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEQlhfSU5KRUNUSU9OX0NPTVBPTkVOVF9EQVRBLCBDbGlja2FibGVBbmNob3IsIERieEFjdGlvblN1Y2Nlc3NIYW5kbGVyRnVuY3Rpb24gfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBXb3JrVXNpbmdPYnNlcnZhYmxlLCBXb3JrVXNpbmdDb250ZXh0IH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi8uLi9zZXJ2aWNlL2ZpcmViYXNlLmF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgZnJvbSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBzaWduYWwsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZUxvZ2luQ29udGV4dCB9IGZyb20gJy4vbG9naW4uY29udGV4dCc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZUVtYWlsRm9ybVZhbHVlLCBEYnhGaXJlYmFzZUVtYWlsRm9ybUNvbmZpZywgRGJ4RmlyZWJhc2VFbWFpbEZvcm1Db21wb25lbnQgfSBmcm9tICcuL2xvZ2luLmVtYWlsLmZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IERieEZpcmViYXNlTG9naW5Nb2RlIH0gZnJvbSAnLi9sb2dpbic7XG5pbXBvcnQgeyBmaXJlYmFzZUF1dGhFcnJvclRvUmVhZGFibGVFcnJvciB9IGZyb20gJ0BkZXJlZWtiL2ZpcmViYXNlJztcbmltcG9ydCB7IHR5cGUgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IERieEFjdGlvbkVycm9yRGlyZWN0aXZlLCBEYnhBY3Rpb25Nb2R1bGUsIERieExpbmtDb21wb25lbnQsIERieEJ1dHRvbkNvbXBvbmVudCwgRGJ4QnV0dG9uU3BhY2VyRGlyZWN0aXZlLCBEYnhFcnJvckNvbXBvbmVudCB9IGZyb20gJ0BkZXJlZWtiL2RieC13ZWInO1xuaW1wb3J0IHsgRGJ4QWN0aW9uRm9ybURpcmVjdGl2ZSwgRGJ4Rm9ybVNvdXJjZURpcmVjdGl2ZSB9IGZyb20gJ0BkZXJlZWtiL2RieC1mb3JtJztcblxuZXhwb3J0IGludGVyZmFjZSBEYnhGaXJlYmFzZUxvZ2luRW1haWxDb250ZW50Q29tcG9uZW50Q29uZmlnIGV4dGVuZHMgRGJ4RmlyZWJhc2VFbWFpbEZvcm1Db25maWcge1xuICByZWFkb25seSBsb2dpbk1vZGU6IERieEZpcmViYXNlTG9naW5Nb2RlO1xufVxuXG5leHBvcnQgdHlwZSBEYnhGaXJlYmFzZUxvZ2luRW1haWxDb250ZW50TW9kZSA9ICdsb2dpbicgfCAncmVjb3ZlcicgfCAncmVjb3ZlcnNlbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmVtYWlsLmNvbnRlbnQuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgRGJ4RXJyb3JDb21wb25lbnQsIERieExpbmtDb21wb25lbnQsIERieEFjdGlvbkVycm9yRGlyZWN0aXZlLCBEYnhBY3Rpb25Gb3JtRGlyZWN0aXZlLCBNYXRCdXR0b25Nb2R1bGUsIERieEFjdGlvbk1vZHVsZSwgRGJ4QnV0dG9uQ29tcG9uZW50LCBEYnhCdXR0b25TcGFjZXJEaXJlY3RpdmUsIERieEZpcmViYXNlRW1haWxGb3JtQ29tcG9uZW50LCBEYnhGaXJlYmFzZUVtYWlsUmVjb3ZlcnlGb3JtQ29tcG9uZW50LCBEYnhGb3JtU291cmNlRGlyZWN0aXZlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4RmlyZWJhc2VMb2dpbkVtYWlsQ29udGVudENvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGRieEZpcmViYXNlQXV0aFNlcnZpY2UgPSBpbmplY3QoRGJ4RmlyZWJhc2VBdXRoU2VydmljZSk7XG4gIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdDxEYnhGaXJlYmFzZUxvZ2luRW1haWxDb250ZW50Q29tcG9uZW50Q29uZmlnPihEQlhfSU5KRUNUSU9OX0NPTVBPTkVOVF9EQVRBKTtcblxuICByZWFkb25seSBmb3JtQ29uZmlnOiBEYnhGaXJlYmFzZUVtYWlsRm9ybUNvbmZpZyA9IHtcbiAgICBsb2dpbk1vZGU6IHRoaXMuY29uZmlnLmxvZ2luTW9kZSxcbiAgICBwYXNzd29yZENvbmZpZzogdGhpcy5jb25maWcucGFzc3dvcmRDb25maWdcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9lbWFpbEZvcm1WYWx1ZVNpZ25hbCA9IHNpZ25hbDxNYXliZTxEYnhGaXJlYmFzZUVtYWlsRm9ybVZhbHVlPj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVjb3ZlcnlGb3JtVmFsdWVTaWduYWwgPSBzaWduYWw8TWF5YmU8RGJ4RmlyZWJhc2VFbWFpbFJlY292ZXJ5Rm9ybVZhbHVlPj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW1haWxNb2RlU2lnbmFsID0gc2lnbmFsPERieEZpcmViYXNlTG9naW5FbWFpbENvbnRlbnRNb2RlPignbG9naW4nKTtcblxuICByZWFkb25seSBlbWFpbEZvcm1WYWx1ZVNpZ25hbCA9IHRoaXMuX2VtYWlsRm9ybVZhbHVlU2lnbmFsLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgcmVjb3ZlcnlGb3JtVmFsdWVTaWduYWwgPSB0aGlzLl9yZWNvdmVyeUZvcm1WYWx1ZVNpZ25hbC5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGVtYWlsTW9kZVNpZ25hbCA9IHRoaXMuX2VtYWlsTW9kZVNpZ25hbC5hc1JlYWRvbmx5KCk7XG5cbiAgcmVhZG9ubHkgZm9yZ290QW5jaG9yOiBDbGlja2FibGVBbmNob3IgPSB7XG4gICAgb25DbGljazogKCkgPT4ge1xuICAgICAgdGhpcy5vcGVuUmVjb3ZlcnkoKTtcbiAgICB9XG4gIH07XG5cbiAgcmVhZG9ubHkgZG9uZU9yQ2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHN0YXRpYyBvcGVuRW1haWxMb2dpbkNvbnRleHQoZGJ4RmlyZWJhc2VMb2dpbkNvbnRleHQ6IERieEZpcmViYXNlTG9naW5Db250ZXh0LCBjb25maWc6IERieEZpcmViYXNlTG9naW5FbWFpbENvbnRlbnRDb21wb25lbnRDb25maWcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gZGJ4RmlyZWJhc2VMb2dpbkNvbnRleHQuc2hvd0NvbnRleHQoe1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGNvbXBvbmVudENsYXNzOiBEYnhGaXJlYmFzZUxvZ2luRW1haWxDb250ZW50Q29tcG9uZW50LFxuICAgICAgICBkYXRhOiBjb25maWdcbiAgICAgIH0sXG4gICAgICB1c2U6IChpbnN0YW5jZSkgPT4gZmlyc3RWYWx1ZUZyb20oaW5zdGFuY2UuZG9uZU9yQ2FuY2VsbGVkKVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGxvZ2luTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubG9naW5Nb2RlO1xuICB9XG5cbiAgZ2V0IGlzTG9naW5Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmxvZ2luTW9kZSA9PT0gJ2xvZ2luJztcbiAgfVxuXG4gIGdldCBpc1JlZ2lzdGVyTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpbk1vZGUgPT09ICdyZWdpc3Rlcic7XG4gIH1cblxuICBnZXQgYnV0dG9uVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubG9naW5Nb2RlID09PSAncmVnaXN0ZXInID8gJ1JlZ2lzdGVyJyA6ICdMb2cgSW4nO1xuICB9XG5cbiAgcmVhZG9ubHkgaGFuZGxlTG9naW5BY3Rpb246IFdvcmtVc2luZ09ic2VydmFibGU8RGJ4RmlyZWJhc2VFbWFpbEZvcm1WYWx1ZT4gPSAodmFsdWU6IERieEZpcmViYXNlRW1haWxGb3JtVmFsdWUpID0+IHtcbiAgICAvLyBUT0RPKHNpZ25hbHMpOiBkb3VibGUgY2hlY2sgdGhhdCB0aGlzIHBlcmZvcm1zIGFzIHdlIHdhbnQgdG8uXG5cbiAgICB0aGlzLl9lbWFpbEZvcm1WYWx1ZVNpZ25hbC5zZXQodmFsdWUpO1xuICAgIHRoaXMuX3JlY292ZXJ5Rm9ybVZhbHVlU2lnbmFsLnNldCh7IGVtYWlsOiB2YWx1ZS51c2VybmFtZSB9KTsgLy8gY2FjaGUgdmFsdWUgZm9yIHJlY292ZXJ5XG5cbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgaWYgKHRoaXMubG9naW5Nb2RlID09PSAncmVnaXN0ZXInKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLmRieEZpcmViYXNlQXV0aFNlcnZpY2UucmVnaXN0ZXJXaXRoRW1haWxBbmRQYXNzd29yZCh2YWx1ZS51c2VybmFtZSwgdmFsdWUucGFzc3dvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLmRieEZpcmViYXNlQXV0aFNlcnZpY2UubG9nSW5XaXRoRW1haWxBbmRQYXNzd29yZCh2YWx1ZS51c2VybmFtZSwgdmFsdWUucGFzc3dvcmQpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBmaXJlYmFzZUF1dGhFcnJvclRvUmVhZGFibGVFcnJvcihlcnJvcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbShyZXN1bHQpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvbmVPckNhbmNlbGxlZC5uZXh0KHRydWUpO1xuICAgICAgfSlcbiAgICApO1xuICB9O1xuXG4gIC8vIE1BUks6IFJlY292ZXJ5XG4gIG9wZW5SZWNvdmVyeSgpIHtcbiAgICB0aGlzLl9lbWFpbE1vZGVTaWduYWwuc2V0KCdyZWNvdmVyJyk7XG4gIH1cblxuICByZWFkb25seSBoYW5kbGVSZWNvdmVyeUFjdGlvbjogV29ya1VzaW5nQ29udGV4dDxEYnhGaXJlYmFzZUVtYWlsUmVjb3ZlcnlGb3JtVmFsdWU+ID0gKHZhbHVlOiBEYnhGaXJlYmFzZUVtYWlsUmVjb3ZlcnlGb3JtVmFsdWUsIGNvbnRleHQpID0+IHtcbiAgICB0aGlzLl9yZWNvdmVyeUZvcm1WYWx1ZVNpZ25hbC5zZXQodmFsdWUpO1xuICAgIHRoaXMuX2VtYWlsRm9ybVZhbHVlU2lnbmFsLnNldCh7IHVzZXJuYW1lOiB2YWx1ZS5lbWFpbCwgcGFzc3dvcmQ6ICcnIH0pO1xuICAgIGNvbnRleHQuc3RhcnRXb3JraW5nV2l0aFByb21pc2UodGhpcy5kYnhGaXJlYmFzZUF1dGhTZXJ2aWNlLnNlbmRQYXNzd29yZFJlc2V0RW1haWwodmFsdWUuZW1haWwpKTtcbiAgfTtcblxuICAvLyBNQVJLOiBSZWNvdmVyaW5nXG4gIHJlYWRvbmx5IGhhbmRsZVJlY292ZXJ5U3VjY2VzczogRGJ4QWN0aW9uU3VjY2Vzc0hhbmRsZXJGdW5jdGlvbiA9ICh4KSA9PiB7XG4gICAgdGhpcy5fZW1haWxNb2RlU2lnbmFsLnNldCgncmVjb3ZlcnNlbnQnKTtcbiAgfTtcblxuICBjbGlja2VkUmVjb3ZlcnlBY2tub3dsZWRnZWQoKSB7XG4gICAgdGhpcy5fZW1haWxNb2RlU2lnbmFsLnNldCgnbG9naW4nKTtcbiAgfVxuXG4gIC8vIE1BUks6IENhbmNlbFxuICBvbkNhbmNlbCgpIHtcbiAgICB0aGlzLmRvbmVPckNhbmNlbGxlZC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIG9uQ2FuY2VsUmVzZXQoKSB7XG4gICAgdGhpcy5kb25lT3JDYW5jZWxsZWQubmV4dChmYWxzZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYngtZmlyZWJhc2UtbG9naW4tZW1haWwtY29udGVudFwiPlxuICBAc3dpdGNoIChlbWFpbE1vZGVTaWduYWwoKSkge1xuICAgIEBjYXNlICgnbG9naW4nKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9naW5WaWV3XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBjYXNlICgncmVjb3ZlcicpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZXNldFBhc3N3b3JkXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBjYXNlICgncmVjb3ZlcnNlbnQnKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVzZXRQYXNzd29yZFNlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIH1cbjwvZGl2PlxuXG48IS0tIExvZ2luIFZpZXcgLS0+XG48bmctdGVtcGxhdGUgI2xvZ2luVmlldz5cbiAgPG5nLWNvbnRhaW5lciBkYnhBY3Rpb24gW2RieEFjdGlvbkhhbmRsZXJdPVwiaGFuZGxlTG9naW5BY3Rpb25cIj5cbiAgICA8ZGJ4LWZpcmViYXNlLWVtYWlsLWZvcm0gW2NvbmZpZ109XCJmb3JtQ29uZmlnXCIgZGJ4QWN0aW9uRm9ybSBbZGJ4Rm9ybVNvdXJjZV09XCJlbWFpbEZvcm1WYWx1ZVNpZ25hbCgpXCI+PC9kYngtZmlyZWJhc2UtZW1haWwtZm9ybT5cbiAgICBAaWYgKGlzTG9naW5Nb2RlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZGJ4LWZpcmViYXNlLWxvZ2luLWVtYWlsLWZvcmdvdC1wcm9tcHRcIj5cbiAgICAgICAgPGRieC1saW5rIFthbmNob3JdPVwiZm9yZ290QW5jaG9yXCI+Rm9yZ290IFBhc3N3b3JkPzwvZGJ4LWxpbms+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImRieC1mbGV4XCI+XG4gICAgICA8ZGJ4LWJ1dHRvbiBjbGFzcz1cImRieC1idXR0b24td2lkZVwiIFt0ZXh0XT1cImJ1dHRvblRleHRcIiBbcmFpc2VkXT1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIiBkYnhBY3Rpb25CdXR0b24+PC9kYngtYnV0dG9uPlxuICAgICAgPGRieC1idXR0b24tc3BhY2VyPjwvZGJ4LWJ1dHRvbi1zcGFjZXI+XG4gICAgICA8c3BhbiBjbGFzcz1cImRieC1zcGFjZXJcIj48L3NwYW4+XG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkYngtZXJyb3IgZGJ4QWN0aW9uRXJyb3I+PC9kYngtZXJyb3I+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBSZXNldCBQYXNzd29yZCBWaWV3IC0tPlxuPG5nLXRlbXBsYXRlICNyZXNldFBhc3N3b3JkPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWZpcmViYXNlLWxvZ2luLWVtYWlsLWNvbnRlbnQtcmVjb3ZlcnlcIiBkYnhBY3Rpb24gW2RieEFjdGlvbkhhbmRsZXJdPVwiaGFuZGxlUmVjb3ZlcnlBY3Rpb25cIiBbZGJ4QWN0aW9uU3VjY2Vzc0hhbmRsZXJdPVwiaGFuZGxlUmVjb3ZlcnlTdWNjZXNzXCI+XG4gICAgPGRieC1maXJlYmFzZS1lbWFpbC1yZWNvdmVyeS1mb3JtIGRieEFjdGlvbkZvcm0gW2RieEZvcm1Tb3VyY2VdPVwicmVjb3ZlcnlGb3JtVmFsdWVTaWduYWwoKVwiPjwvZGJ4LWZpcmViYXNlLWVtYWlsLXJlY292ZXJ5LWZvcm0+XG4gICAgPHAgY2xhc3M9XCJkYngtaGludFwiPkFuIGVtYWlsIHdpbGwgYmUgc2VudCB0byB0aGUgYWJvdmUgYWRkcmVzcyB0byBoZWxwIHlvdSByZXNldCB5b3VyIHBhc3N3b3JkLjwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiZGJ4LWZsZXhcIj5cbiAgICAgIDxkYngtYnV0dG9uIGNsYXNzPVwiZGJ4LWJ1dHRvbi13aWRlXCIgdGV4dD1cIlNlbmQgUmVjb3ZlcnkgRW1haWxcIiBbcmFpc2VkXT1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIiBkYnhBY3Rpb25CdXR0b24+PC9kYngtYnV0dG9uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJkYngtc3BhY2VyXCI+PC9zcGFuPlxuICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cIm9uQ2FuY2VsUmVzZXQoKVwiPkNhbmNlbCBSZWNvdmVyeTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkYngtZXJyb3IgZGJ4QWN0aW9uRXJyb3I+PC9kYngtZXJyb3I+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBSZXNldCBQYXNzd29yZCBTZW50IC0tPlxuPG5nLXRlbXBsYXRlICNyZXNldFBhc3N3b3JkU2VudD5cbiAgPGRpdiBjbGFzcz1cImRieC1maXJlYmFzZS1sb2dpbi1lbWFpbC1jb250ZW50LXJlY292ZXJ5LXNlbnRcIj5cbiAgICA8cCBjbGFzcz1cImRieC1oaW50XCI+QSByZWNvdmVyeSBlbWFpbCB3YXMgc2VudCB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuIFBsZWFzZSBjaGVjayB5b3VyIGVtYWlsIGZvciBuZXh0IHN0ZXBzLjwvcD5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJjbGlja2VkUmVjb3ZlcnlBY2tub3dsZWRnZWQoKVwiPk9rPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -60,7 +60,7 @@ export class DbxFirebaseDevelopmentSchedulerListViewItemComponent extends Abstra
|
|
|
60
60
|
<dbx-button dbxActionButton [text]="'Run ' + name"></dbx-button>
|
|
61
61
|
<div *dbxActionHasSuccess="3000" class="dbx-success">Success</div>
|
|
62
62
|
</div>
|
|
63
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i2.DbxActionHasSuccessDirective, selector: "[dbxActionHasSuccess]", inputs: ["dbxActionHasSuccess"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
63
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i2.DbxActionHasSuccessDirective, selector: "[dbxActionHasSuccess]", inputs: ["dbxActionHasSuccess"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
64
64
|
}
|
|
65
65
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseDevelopmentSchedulerListViewItemComponent, decorators: [{
|
|
66
66
|
type: Component,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { makeEnvironmentProviders } from '@angular/core';
|
|
2
|
-
import { clientFirebaseFirestoreContextFactory, NotificationFirestoreCollections, SystemStateFirestoreCollections } from '@dereekb/firebase';
|
|
2
|
+
import { clientFirebaseFirestoreContextFactory, NotificationFirestoreCollections, StorageFileFirestoreCollections, SystemStateFirestoreCollections } from '@dereekb/firebase';
|
|
3
3
|
import { DBX_FIRESTORE_CONTEXT_TOKEN } from './firebase.firestore';
|
|
4
4
|
import { Firestore } from '@angular/fire/firestore';
|
|
5
5
|
/**
|
|
@@ -26,6 +26,18 @@ export function provideNotificationFirestoreCollections(appCollection) {
|
|
|
26
26
|
}
|
|
27
27
|
return appCollection;
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Provider factory for the StorageFileFirestoreCollections.
|
|
31
|
+
*
|
|
32
|
+
* @param appCollection The app collection class to use.
|
|
33
|
+
* @returns Provider factory for the StorageFileFirestoreCollections.
|
|
34
|
+
*/
|
|
35
|
+
export function provideStorageFileFirestoreCollections(appCollection) {
|
|
36
|
+
if (!appCollection.storageFileCollection) {
|
|
37
|
+
throw new Error(`StorageFileFirestoreCollections could not be provided using the app's app collection. Set provideStorageFileFirestoreCollections to false in DbxFirebaseFirestoreCollectionModuleConfig to prevent auto-initialization, or update your app's collection class to implement StorageFileFirestoreCollections.`);
|
|
38
|
+
}
|
|
39
|
+
return appCollection;
|
|
40
|
+
}
|
|
29
41
|
/**
|
|
30
42
|
* Creates EnvironmentProviders for the DBX_FIRESTORE_CONTEXT_TOKEN, appCollectionClass, and optionally the SystemStateFirestoreCollections and NotificationFirestoreCollections.
|
|
31
43
|
*
|
|
@@ -62,6 +74,13 @@ export function provideDbxFirestoreCollection(config) {
|
|
|
62
74
|
deps: [config.appCollectionClass]
|
|
63
75
|
});
|
|
64
76
|
}
|
|
77
|
+
if (config.provideStorageFileFirestoreCollections) {
|
|
78
|
+
providers.push({
|
|
79
|
+
provide: StorageFileFirestoreCollections,
|
|
80
|
+
useFactory: provideStorageFileFirestoreCollections,
|
|
81
|
+
deps: [config.appCollectionClass]
|
|
82
|
+
});
|
|
83
|
+
}
|
|
65
84
|
return makeEnvironmentProviders(providers);
|
|
66
85
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2UuZmlyZXN0b3JlLnByb3ZpZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL2ZpcmVzdG9yZS9maXJlYmFzZS5maXJlc3RvcmUucHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0Isd0JBQXdCLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLHFDQUFxQyxFQUFvQixnQ0FBZ0MsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hNLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdwRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxzQ0FBc0MsQ0FBQyxhQUE4QztJQUNuRyxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2U0FBNlMsQ0FBQyxDQUFDO0lBQ2pVLENBQUM7SUFFRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsdUNBQXVDLENBQUMsYUFBK0M7SUFDckcsSUFBSSxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMsZ1RBQWdULENBQUMsQ0FBQztJQUNwVSxDQUFDO0lBRUQsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHNDQUFzQyxDQUFDLGFBQThDO0lBQ25HLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLDZTQUE2UyxDQUFDLENBQUM7SUFDalUsQ0FBQztJQUVELE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUM7QUFrQ0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQUksTUFBc0Q7SUFDckcsTUFBTSxTQUFTLEdBQWU7UUFDNUI7WUFDRSxPQUFPLEVBQUUsMkJBQTJCO1lBQ3BDLFVBQVUsRUFBRSxxQ0FBcUM7WUFDakQsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO1NBQ2xCO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtZQUNsQyxVQUFVLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtZQUNwQyxJQUFJLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztTQUNwQztLQUNGLENBQUM7SUFFRixJQUFJLE1BQU0sQ0FBQyxzQ0FBc0MsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUM1RCxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2I7O2VBRUc7WUFDSCxPQUFPLEVBQUUsK0JBQStCO1lBQ3hDLFVBQVUsRUFBRSxzQ0FBc0M7WUFDbEQsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDO1FBQ25ELFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDYixPQUFPLEVBQUUsZ0NBQWdDO1lBQ3pDLFVBQVUsRUFBRSx1Q0FBdUM7WUFDbkQsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxzQ0FBc0MsRUFBRSxDQUFDO1FBQ2xELFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDYixPQUFPLEVBQUUsK0JBQStCO1lBQ3hDLFVBQVUsRUFBRSxzQ0FBc0M7WUFDbEQsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xpZW50RmlyZWJhc2VGaXJlc3RvcmVDb250ZXh0RmFjdG9yeSwgRmlyZXN0b3JlQ29udGV4dCwgTm90aWZpY2F0aW9uRmlyZXN0b3JlQ29sbGVjdGlvbnMsIFN0b3JhZ2VGaWxlRmlyZXN0b3JlQ29sbGVjdGlvbnMsIFN5c3RlbVN0YXRlRmlyZXN0b3JlQ29sbGVjdGlvbnMgfSBmcm9tICdAZGVyZWVrYi9maXJlYmFzZSc7XG5pbXBvcnQgeyBEQlhfRklSRVNUT1JFX0NPTlRFWFRfVE9LRU4gfSBmcm9tICcuL2ZpcmViYXNlLmZpcmVzdG9yZSc7XG5pbXBvcnQgeyBGaXJlc3RvcmUgfSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XG5pbXBvcnQgeyBDbGFzc0xpa2VUeXBlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5cbi8qKlxuICogUHJvdmlkZXIgZmFjdG9yeSBmb3IgdGhlIFN5c3RlbVN0YXRlRmlyZXN0b3JlQ29sbGVjdGlvbnMuXG4gKlxuICogQHBhcmFtIGFwcENvbGxlY3Rpb24gVGhlIGFwcCBjb2xsZWN0aW9uIGNsYXNzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFByb3ZpZGVyIGZhY3RvcnkgZm9yIHRoZSBTeXN0ZW1TdGF0ZUZpcmVzdG9yZUNvbGxlY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVN5c3RlbVN0YXRlRmlyZXN0b3JlQ29sbGVjdGlvbnMoYXBwQ29sbGVjdGlvbjogU3lzdGVtU3RhdGVGaXJlc3RvcmVDb2xsZWN0aW9ucyk6IFN5c3RlbVN0YXRlRmlyZXN0b3JlQ29sbGVjdGlvbnMge1xuICBpZiAoIWFwcENvbGxlY3Rpb24uc3lzdGVtU3RhdGVDb2xsZWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTeXN0ZW1TdGF0ZUZpcmVzdG9yZUNvbGxlY3Rpb25zIGNvdWxkIG5vdCBiZSBwcm92aWRlZCB1c2luZyB0aGUgYXBwJ3MgYXBwIGNvbGxlY3Rpb24uIFNldCBwcm92aWRlU3lzdGVtU3RhdGVGaXJlc3RvcmVDb2xsZWN0aW9ucyB0byBmYWxzZSBpbiBEYnhGaXJlYmFzZUZpcmVzdG9yZUNvbGxlY3Rpb25Nb2R1bGVDb25maWcgdG8gcHJldmVudCBhdXRvLWluaXRpYWxpemF0aW9uLCBvciB1cGRhdGUgeW91ciBhcHAncyBjb2xsZWN0aW9uIGNsYXNzIHRvIGltcGxlbWVudCBTeXN0ZW1TdGF0ZUZpcmVzdG9yZUNvbGxlY3Rpb25zLmApO1xuICB9XG5cbiAgcmV0dXJuIGFwcENvbGxlY3Rpb247XG59XG5cbi8qKlxuICogUHJvdmlkZXIgZmFjdG9yeSBmb3IgdGhlIE5vdGlmaWNhdGlvbkZpcmVzdG9yZUNvbGxlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBhcHBDb2xsZWN0aW9uIFRoZSBhcHAgY29sbGVjdGlvbiBjbGFzcyB0byB1c2UuXG4gKiBAcmV0dXJucyBQcm92aWRlciBmYWN0b3J5IGZvciB0aGUgTm90aWZpY2F0aW9uRmlyZXN0b3JlQ29sbGVjdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTm90aWZpY2F0aW9uRmlyZXN0b3JlQ29sbGVjdGlvbnMoYXBwQ29sbGVjdGlvbjogTm90aWZpY2F0aW9uRmlyZXN0b3JlQ29sbGVjdGlvbnMpOiBOb3RpZmljYXRpb25GaXJlc3RvcmVDb2xsZWN0aW9ucyB7XG4gIGlmICghYXBwQ29sbGVjdGlvbi5ub3RpZmljYXRpb25TdW1tYXJ5Q29sbGVjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm90aWZpY2F0aW9uRmlyZXN0b3JlQ29sbGVjdGlvbnMgY291bGQgbm90IGJlIHByb3ZpZGVkIHVzaW5nIHRoZSBhcHAncyBhcHAgY29sbGVjdGlvbi4gU2V0IHByb3ZpZGVOb3RpZmljYXRpb25GaXJlc3RvcmVDb2xsZWN0aW9ucyB0byBmYWxzZSBpbiBEYnhGaXJlYmFzZUZpcmVzdG9yZUNvbGxlY3Rpb25Nb2R1bGVDb25maWcgdG8gcHJldmVudCBhdXRvLWluaXRpYWxpemF0aW9uLCBvciB1cGRhdGUgeW91ciBhcHAncyBjb2xsZWN0aW9uIGNsYXNzIHRvIGltcGxlbWVudCBOb3RpZmljYXRpb25GaXJlc3RvcmVDb2xsZWN0aW9ucy5gKTtcbiAgfVxuXG4gIHJldHVybiBhcHBDb2xsZWN0aW9uO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIGZhY3RvcnkgZm9yIHRoZSBTdG9yYWdlRmlsZUZpcmVzdG9yZUNvbGxlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBhcHBDb2xsZWN0aW9uIFRoZSBhcHAgY29sbGVjdGlvbiBjbGFzcyB0byB1c2UuXG4gKiBAcmV0dXJucyBQcm92aWRlciBmYWN0b3J5IGZvciB0aGUgU3RvcmFnZUZpbGVGaXJlc3RvcmVDb2xsZWN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVTdG9yYWdlRmlsZUZpcmVzdG9yZUNvbGxlY3Rpb25zKGFwcENvbGxlY3Rpb246IFN0b3JhZ2VGaWxlRmlyZXN0b3JlQ29sbGVjdGlvbnMpOiBTdG9yYWdlRmlsZUZpcmVzdG9yZUNvbGxlY3Rpb25zIHtcbiAgaWYgKCFhcHBDb2xsZWN0aW9uLnN0b3JhZ2VGaWxlQ29sbGVjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RvcmFnZUZpbGVGaXJlc3RvcmVDb2xsZWN0aW9ucyBjb3VsZCBub3QgYmUgcHJvdmlkZWQgdXNpbmcgdGhlIGFwcCdzIGFwcCBjb2xsZWN0aW9uLiBTZXQgcHJvdmlkZVN0b3JhZ2VGaWxlRmlyZXN0b3JlQ29sbGVjdGlvbnMgdG8gZmFsc2UgaW4gRGJ4RmlyZWJhc2VGaXJlc3RvcmVDb2xsZWN0aW9uTW9kdWxlQ29uZmlnIHRvIHByZXZlbnQgYXV0by1pbml0aWFsaXphdGlvbiwgb3IgdXBkYXRlIHlvdXIgYXBwJ3MgY29sbGVjdGlvbiBjbGFzcyB0byBpbXBsZW1lbnQgU3RvcmFnZUZpbGVGaXJlc3RvcmVDb2xsZWN0aW9ucy5gKTtcbiAgfVxuXG4gIHJldHVybiBhcHBDb2xsZWN0aW9uO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHByb3ZpZGVEYnhGaXJlc3RvcmVDb2xsZWN0aW9uKCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZURieEZpcmViYXNlRmlyZXN0b3JlQ29sbGVjdGlvbkNvbmZpZzxUPiB7XG4gIC8qKlxuICAgKiBUaGUgYXBwIGNvbGxlY3Rpb24gY2xhc3MgdG8gdXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwQ29sbGVjdGlvbkNsYXNzOiBDbGFzc0xpa2VUeXBlPFQ+O1xuICAvKipcbiAgICogVGhlIGNvbGxlY3Rpb24gZmFjdG9yeSB0byB1c2UuXG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0aW9uRmFjdG9yeTogKGNvbnRleHQ6IEZpcmVzdG9yZUNvbnRleHQpID0+IFQ7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBwcm92aWRlIHRoZSBTeXN0ZW1TdGF0ZUZpcmVzdG9yZUNvbGxlY3Rpb25zLlxuICAgKlxuICAgKiBUcnVlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlU3lzdGVtU3RhdGVGaXJlc3RvcmVDb2xsZWN0aW9ucz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBwcm92aWRlIHRoZSBOb3RpZmljYXRpb25GaXJlc3RvcmVDb2xsZWN0aW9ucy5cbiAgICpcbiAgICogRmFsc2UgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVOb3RpZmljYXRpb25GaXJlc3RvcmVDb2xsZWN0aW9ucz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBwcm92aWRlIHRoZSBTdG9yYWdlRmlsZUZpcmVzdG9yZUNvbGxlY3Rpb25zLlxuICAgKlxuICAgKiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZVN0b3JhZ2VGaWxlRmlyZXN0b3JlQ29sbGVjdGlvbnM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgRW52aXJvbm1lbnRQcm92aWRlcnMgZm9yIHRoZSBEQlhfRklSRVNUT1JFX0NPTlRFWFRfVE9LRU4sIGFwcENvbGxlY3Rpb25DbGFzcywgYW5kIG9wdGlvbmFsbHkgdGhlIFN5c3RlbVN0YXRlRmlyZXN0b3JlQ29sbGVjdGlvbnMgYW5kIE5vdGlmaWNhdGlvbkZpcmVzdG9yZUNvbGxlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgdGhlIHByb3ZpZGVycy5cbiAqIEByZXR1cm5zIEVudmlyb25tZW50UHJvdmlkZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRGJ4RmlyZXN0b3JlQ29sbGVjdGlvbjxUPihjb25maWc6IFByb3ZpZGVEYnhGaXJlYmFzZUZpcmVzdG9yZUNvbGxlY3Rpb25Db25maWc8VD4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIGNvbnN0IHByb3ZpZGVyczogUHJvdmlkZXJbXSA9IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBEQlhfRklSRVNUT1JFX0NPTlRFWFRfVE9LRU4sXG4gICAgICB1c2VGYWN0b3J5OiBjbGllbnRGaXJlYmFzZUZpcmVzdG9yZUNvbnRleHRGYWN0b3J5LFxuICAgICAgZGVwczogW0ZpcmVzdG9yZV1cbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IGNvbmZpZy5hcHBDb2xsZWN0aW9uQ2xhc3MsXG4gICAgICB1c2VGYWN0b3J5OiBjb25maWcuY29sbGVjdGlvbkZhY3RvcnksXG4gICAgICBkZXBzOiBbREJYX0ZJUkVTVE9SRV9DT05URVhUX1RPS0VOXVxuICAgIH1cbiAgXTtcblxuICBpZiAoY29uZmlnLnByb3ZpZGVTeXN0ZW1TdGF0ZUZpcmVzdG9yZUNvbGxlY3Rpb25zICE9PSBmYWxzZSkge1xuICAgIHByb3ZpZGVycy5wdXNoKHtcbiAgICAgIC8qKlxuICAgICAgICogUHJvdmlkZSBTeXN0ZW1TdGF0ZUZpcmVzdG9yZUNvbGxlY3Rpb25zIHZpYSB0aGUgYXBwIGNvbGxlY3Rpb25zIGNsYXNzIGFuZCB1c2luZyBTeXN0ZW1TdGF0ZUZpcmVzdG9yZUNvbGxlY3Rpb25zLlxuICAgICAgICovXG4gICAgICBwcm92aWRlOiBTeXN0ZW1TdGF0ZUZpcmVzdG9yZUNvbGxlY3Rpb25zLFxuICAgICAgdXNlRmFjdG9yeTogcHJvdmlkZVN5c3RlbVN0YXRlRmlyZXN0b3JlQ29sbGVjdGlvbnMsXG4gICAgICBkZXBzOiBbY29uZmlnLmFwcENvbGxlY3Rpb25DbGFzc11cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjb25maWcucHJvdmlkZU5vdGlmaWNhdGlvbkZpcmVzdG9yZUNvbGxlY3Rpb25zKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goe1xuICAgICAgcHJvdmlkZTogTm90aWZpY2F0aW9uRmlyZXN0b3JlQ29sbGVjdGlvbnMsXG4gICAgICB1c2VGYWN0b3J5OiBwcm92aWRlTm90aWZpY2F0aW9uRmlyZXN0b3JlQ29sbGVjdGlvbnMsXG4gICAgICBkZXBzOiBbY29uZmlnLmFwcENvbGxlY3Rpb25DbGFzc11cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjb25maWcucHJvdmlkZVN0b3JhZ2VGaWxlRmlyZXN0b3JlQ29sbGVjdGlvbnMpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7XG4gICAgICBwcm92aWRlOiBTdG9yYWdlRmlsZUZpcmVzdG9yZUNvbGxlY3Rpb25zLFxuICAgICAgdXNlRmFjdG9yeTogcHJvdmlkZVN0b3JhZ2VGaWxlRmlyZXN0b3JlQ29sbGVjdGlvbnMsXG4gICAgICBkZXBzOiBbY29uZmlnLmFwcENvbGxlY3Rpb25DbGFzc11cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { cleanupDestroyable, filterMaybe, useFirst, SubscriptionObject, accumulatorFlattenPageListLoadingState, itemAccumulatorNextPageUntilResultsCount, iteratorNextPageUntilPage, iteratorNextPageUntilMaxPageLoadLimit, pageItemAccumulatorCurrentPage, iterationHasNextAndCanLoadMore } from '@dereekb/rxjs';
|
|
2
|
-
import { BehaviorSubject, combineLatest, map, shareReplay, distinctUntilChanged, Subject, throttleTime, switchMap, tap, startWith, NEVER } from 'rxjs';
|
|
1
|
+
import { cleanupDestroyable, filterMaybe, useFirst, SubscriptionObject, accumulatorFlattenPageListLoadingState, itemAccumulatorNextPageUntilResultsCount, iteratorNextPageUntilPage, iteratorNextPageUntilMaxPageLoadLimit, pageItemAccumulatorCurrentPage, iterationHasNextAndCanLoadMore, distinctUntilKeysChange } from '@dereekb/rxjs';
|
|
2
|
+
import { BehaviorSubject, combineLatest, map, shareReplay, distinctUntilChanged, Subject, throttleTime, switchMap, tap, startWith, NEVER, of } from 'rxjs';
|
|
3
3
|
import { firebaseQueryItemAccumulator, firebaseQuerySnapshotAccumulator, iterationQueryDocChangeWatcher } from '@dereekb/firebase';
|
|
4
4
|
import { countAllInNestedArray } from '@dereekb/util';
|
|
5
5
|
/**
|
|
@@ -8,12 +8,18 @@ import { countAllInNestedArray } from '@dereekb/util';
|
|
|
8
8
|
export class DbxFirebaseCollectionLoaderInstance {
|
|
9
9
|
_maxPagesSub = new SubscriptionObject();
|
|
10
10
|
_collection = new BehaviorSubject(undefined);
|
|
11
|
+
_collectionMode = new BehaviorSubject('query');
|
|
12
|
+
_collectionRefs = new BehaviorSubject(undefined);
|
|
11
13
|
_maxPages = new BehaviorSubject(undefined);
|
|
12
14
|
_itemsPerPage = new BehaviorSubject(undefined);
|
|
13
15
|
_constraints = new BehaviorSubject(undefined);
|
|
14
16
|
_waitForNonNullConstraints = new BehaviorSubject(undefined);
|
|
15
17
|
_restart = new Subject();
|
|
16
18
|
collection$ = this._collection.pipe(distinctUntilChanged());
|
|
19
|
+
collectionMode$ = this._collectionMode.pipe(distinctUntilChanged(), shareReplay(1));
|
|
20
|
+
currentCollectionRefs$ = this._collectionRefs.pipe(distinctUntilChanged(), shareReplay(1));
|
|
21
|
+
collectionRefs$ = this.currentCollectionRefs$.pipe(filterMaybe(), distinctUntilKeysChange((x) => x.path), shareReplay(1));
|
|
22
|
+
collectionKeys$ = this.collectionRefs$.pipe(map((x) => x.map((y) => y.path)), shareReplay(1));
|
|
17
23
|
currentConstraints$ = this._constraints.pipe(distinctUntilChanged());
|
|
18
24
|
constraints$ = this._waitForNonNullConstraints.pipe(switchMap((waitForNonNullConstraints) => {
|
|
19
25
|
let obs = this.currentConstraints$;
|
|
@@ -26,8 +32,15 @@ export class DbxFirebaseCollectionLoaderInstance {
|
|
|
26
32
|
iteratorFilter$ = combineLatest([this._itemsPerPage.pipe(distinctUntilChanged()), this.constraints$]).pipe(map(([limit, constraints]) => ({ limit, constraints, maxPageLoadLimit: this.maxPages })), shareReplay(1));
|
|
27
33
|
firestoreIteration$ = this.collection$.pipe(switchMap((collection) => {
|
|
28
34
|
if (collection) {
|
|
29
|
-
return combineLatest([this.iteratorFilter$, this._restart.pipe(startWith(undefined))]).pipe(throttleTime(100, undefined, { trailing: true }), // prevent rapid changes and executing filters too quickly.
|
|
30
|
-
|
|
35
|
+
return combineLatest([this.collectionMode$, this.iteratorFilter$, this._restart.pipe(startWith(undefined))]).pipe(throttleTime(100, undefined, { trailing: true }), // prevent rapid changes and executing filters too quickly.
|
|
36
|
+
switchMap(([mode, filter]) => {
|
|
37
|
+
if (mode === 'query') {
|
|
38
|
+
return of(collection.firestoreIteration(filter));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
return this.collectionRefs$.pipe(map((refs) => collection.firestoreFixedIteration(refs, filter)));
|
|
42
|
+
}
|
|
43
|
+
}), cleanupDestroyable(), // cleanup the iteration
|
|
31
44
|
shareReplay(1));
|
|
32
45
|
}
|
|
33
46
|
else {
|
|
@@ -64,6 +77,13 @@ export class DbxFirebaseCollectionLoaderInstance {
|
|
|
64
77
|
allDocumentData$ = this.accumulatorItems$.pipe(map((x) => x.flat()), shareReplay(1));
|
|
65
78
|
pageLoadingState$ = this.accumulator$.pipe(switchMap((x) => accumulatorFlattenPageListLoadingState(x)), shareReplay(1));
|
|
66
79
|
constructor(initConfig) {
|
|
80
|
+
this._collectionMode.next(initConfig?.collectionMode ?? 'query');
|
|
81
|
+
if (initConfig?.collectionKeys) {
|
|
82
|
+
this.collectionKeys = initConfig?.collectionKeys;
|
|
83
|
+
}
|
|
84
|
+
else if (initConfig?.collectionRefs) {
|
|
85
|
+
this.collectionRefs = initConfig?.collectionRefs;
|
|
86
|
+
}
|
|
67
87
|
this._collection.next(initConfig?.collection);
|
|
68
88
|
this._maxPages.next(initConfig?.maxPages);
|
|
69
89
|
this._itemsPerPage.next(initConfig?.itemsPerPage);
|
|
@@ -79,6 +99,8 @@ export class DbxFirebaseCollectionLoaderInstance {
|
|
|
79
99
|
.subscribe();
|
|
80
100
|
}
|
|
81
101
|
destroy() {
|
|
102
|
+
this._collectionMode.complete();
|
|
103
|
+
this._collectionRefs.complete();
|
|
82
104
|
this._maxPages.complete();
|
|
83
105
|
this._collection.complete();
|
|
84
106
|
this._constraints.complete();
|
|
@@ -87,6 +109,33 @@ export class DbxFirebaseCollectionLoaderInstance {
|
|
|
87
109
|
this._maxPagesSub.destroy();
|
|
88
110
|
}
|
|
89
111
|
// MARK: Inputs
|
|
112
|
+
get collectionMode() {
|
|
113
|
+
return this._collectionMode.value;
|
|
114
|
+
}
|
|
115
|
+
set collectionMode(mode) {
|
|
116
|
+
if (this.collectionMode != mode) {
|
|
117
|
+
this._collectionMode.next(mode);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
get collectionKeys() {
|
|
121
|
+
const refs = this.collectionRefs;
|
|
122
|
+
return refs?.map((x) => x.path);
|
|
123
|
+
}
|
|
124
|
+
set collectionKeys(keys) {
|
|
125
|
+
let refs = undefined;
|
|
126
|
+
const { collection } = this;
|
|
127
|
+
if (keys && collection) {
|
|
128
|
+
const accessor = collection.documentAccessor();
|
|
129
|
+
refs = keys.map((x) => accessor.documentRefForKey(x));
|
|
130
|
+
}
|
|
131
|
+
this.collectionRefs = refs;
|
|
132
|
+
}
|
|
133
|
+
get collectionRefs() {
|
|
134
|
+
return this._collectionRefs.value;
|
|
135
|
+
}
|
|
136
|
+
set collectionRefs(refs) {
|
|
137
|
+
this._collectionRefs.next(refs);
|
|
138
|
+
}
|
|
90
139
|
get maxPages() {
|
|
91
140
|
return this._maxPages.value;
|
|
92
141
|
}
|
|
@@ -128,6 +177,17 @@ export class DbxFirebaseCollectionLoaderInstance {
|
|
|
128
177
|
restart() {
|
|
129
178
|
this._restart.next();
|
|
130
179
|
}
|
|
180
|
+
setCollectionMode(mode) {
|
|
181
|
+
this.collectionMode = mode;
|
|
182
|
+
}
|
|
183
|
+
// References Mode
|
|
184
|
+
setCollectionKeys(keys) {
|
|
185
|
+
this.collectionKeys = keys;
|
|
186
|
+
}
|
|
187
|
+
setCollectionRefs(refs) {
|
|
188
|
+
this.collectionRefs = refs;
|
|
189
|
+
}
|
|
190
|
+
// Query Mode
|
|
131
191
|
setMaxPages(maxPages) {
|
|
132
192
|
this.maxPages = maxPages;
|
|
133
193
|
}
|
|
@@ -164,4 +224,4 @@ export function dbxFirebaseCollectionLoaderInstance(config) {
|
|
|
164
224
|
export function dbxFirebaseCollectionLoaderInstanceWithCollection(collection) {
|
|
165
225
|
return new DbxFirebaseCollectionLoaderInstance({ collection });
|
|
166
226
|
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5sb2FkZXIuaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2RlbC9sb2FkZXIvY29sbGVjdGlvbi5sb2FkZXIuaW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixrQkFBa0IsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLHNDQUFzQyxFQUFvRCx3Q0FBd0MsRUFBRSx5QkFBeUIsRUFBRSxxQ0FBcUMsRUFBRSw4QkFBOEIsRUFBa0QsOEJBQThCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMWEsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBYyxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuSyxPQUFPLEVBQTZFLDRCQUE0QixFQUFtRyxnQ0FBZ0MsRUFBNkssOEJBQThCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxZCxPQUFPLEVBQTRFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBa0JoSTs7R0FFRztBQUNILE1BQU0sT0FBTyxtQ0FBbUM7SUFDN0IsWUFBWSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQUV0QyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQXVDLFNBQVMsQ0FBQyxDQUFDO0lBRW5GLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsU0FBUyxDQUFDLENBQUM7SUFDMUQsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFnQixTQUFTLENBQUMsQ0FBQztJQUM5RCxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQWdELFNBQVMsQ0FBQyxDQUFDO0lBQzdGLDBCQUEwQixHQUFHLElBQUksZUFBZSxDQUFp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QUMsQ0FBQyxDQUFDLENBQUM7SUFDOUgsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLG1DQUFtQyxDQUEyRCxNQUEyRDtJQUN2SyxPQUFPLElBQUksbUNBQW1DLENBQU8sTUFBTSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELE1BQU0sVUFBVSxpREFBaUQsQ0FBMkQsVUFBZ0Q7SUFDMUssT0FBTyxJQUFJLG1DQUFtQyxDQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFnZUxpc3RMb2FkaW5nU3RhdGUsIGNsZWFudXBEZXN0cm95YWJsZSwgZmlsdGVyTWF5YmUsIHVzZUZpcnN0LCBTdWJzY3JpcHRpb25PYmplY3QsIGFjY3VtdWxhdG9yRmxhdHRlblBhZ2VMaXN0TG9hZGluZ1N0YXRlLCBJdGVtQWNjdW11bGF0b3JOZXh0UGFnZVVudGlsUmVzdWx0c0NvdW50RnVuY3Rpb24sIGl0ZW1BY2N1bXVsYXRvck5leHRQYWdlVW50aWxSZXN1bHRzQ291bnQsIGl0ZXJhdG9yTmV4dFBhZ2VVbnRpbFBhZ2UsIGl0ZXJhdG9yTmV4dFBhZ2VVbnRpbE1heFBhZ2VMb2FkTGltaXQsIHBhZ2VJdGVtQWNjdW11bGF0b3JDdXJyZW50UGFnZSwgSXRlbUFjY3VtdWxhdG9yTmV4dFBhZ2VVbnRpbFJlc3VsdHNDb3VudFJlc3VsdCwgaXRlcmF0aW9uSGFzTmV4dEFuZENhbkxvYWRNb3JlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgc2hhcmVSZXBsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBTdWJqZWN0LCB0aHJvdHRsZVRpbWUsIHN3aXRjaE1hcCwgT2JzZXJ2YWJsZSwgdGFwLCBzdGFydFdpdGgsIE5FVkVSIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEb2N1bWVudERhdGFXaXRoSWRBbmRLZXksIERvY3VtZW50UmVmZXJlbmNlLCBGaXJlYmFzZVF1ZXJ5SXRlbUFjY3VtdWxhdG9yLCBmaXJlYmFzZVF1ZXJ5SXRlbUFjY3VtdWxhdG9yLCBGaXJlYmFzZVF1ZXJ5SXRlbUFjY3VtdWxhdG9yTmV4dFBhZ2VVbnRpbFJlc3VsdHNDb3VudEZ1bmN0aW9uLCBGaXJlYmFzZVF1ZXJ5U25hcHNob3RBY2N1bXVsYXRvciwgZmlyZWJhc2VRdWVyeVNuYXBzaG90QWNjdW11bGF0b3IsIEZpcmVzdG9yZUNvbGxlY3Rpb25MaWtlLCBGaXJlc3RvcmVEb2N1bWVudCwgRmlyZXN0b3JlSXRlbVBhZ2VJdGVyYXRpb25JbnN0YW5jZSwgRmlyZXN0b3JlSXRlbVBhZ2VJdGVyYXRvckZpbHRlciwgRmlyZXN0b3JlUXVlcnlDb25zdHJhaW50LCBJdGVyYXRpb25RdWVyeURvY0NoYW5nZVdhdGNoZXIsIGl0ZXJhdGlvblF1ZXJ5RG9jQ2hhbmdlV2F0Y2hlciB9IGZyb20gJ0BkZXJlZWtiL2ZpcmViYXNlJztcbmltcG9ydCB7IEFycmF5T3JWYWx1ZSwgRGVzdHJveWFibGUsIEdldHRlck9yVmFsdWUsIEluaXRpYWxpemVkLCBNYXliZSwgUGFnZU51bWJlciwgY291bnRBbGxJbk5lc3RlZEFycmF5IH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZUNvbGxlY3Rpb25Mb2FkZXJBY2Nlc3NvciwgRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVyV2l0aEFjY3VtdWxhdG9yIH0gZnJvbSAnLi9jb2xsZWN0aW9uLmxvYWRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVySW5zdGFuY2VJbml0Q29uZmlnPFQsIEQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudDxUPiA9IEZpcmVzdG9yZURvY3VtZW50PFQ+PiB7XG4gIHJlYWRvbmx5IGNvbGxlY3Rpb24/OiBNYXliZTxGaXJlc3RvcmVDb2xsZWN0aW9uTGlrZTxULCBEPj47XG4gIHJlYWRvbmx5IG1heFBhZ2VzPzogTWF5YmU8bnVtYmVyPjtcbiAgcmVhZG9ubHkgaXRlbXNQZXJQYWdlPzogTWF5YmU8bnVtYmVyPjtcbiAgcmVhZG9ubHkgY29uc3RyYWludHM/OiBNYXliZTxBcnJheU9yVmFsdWU8RmlyZXN0b3JlUXVlcnlDb25zdHJhaW50Pj47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byB3YWl0IGZvciBub24tbnVsbCBjb25zdHJhaW50cyBiZWZvcmUgYmVnaW5uaW5nIHRoZSBpdGVyYXRpb24uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSB3YWl0Rm9yTm9uTnVsbENvbnN0cmFpbnRzPzogTWF5YmU8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCB0eXBlIERieEZpcmViYXNlQ29sbGVjdGlvbkxvYWRlckluc3RhbmNlRGF0YTxULCBEIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ8VD4gPSBGaXJlc3RvcmVEb2N1bWVudDxUPj4gPSBEYnhGaXJlYmFzZUNvbGxlY3Rpb25Mb2FkZXJBY2Nlc3NvcjxUPjtcblxuLyoqXG4gKiBEYnhGaXJlYmFzZU1vZGVsTG9hZGVyIGltcGxlbWVudGF0aW9uIHdpdGhpbiBhbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERieEZpcmViYXNlQ29sbGVjdGlvbkxvYWRlckluc3RhbmNlPFQgPSB1bmtub3duLCBEIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ8VD4gPSBGaXJlc3RvcmVEb2N1bWVudDxUPj4gaW1wbGVtZW50cyBEYnhGaXJlYmFzZUNvbGxlY3Rpb25Mb2FkZXJXaXRoQWNjdW11bGF0b3I8VD4sIERieEZpcmViYXNlQ29sbGVjdGlvbkxvYWRlckluc3RhbmNlRGF0YTxULCBEPiwgSW5pdGlhbGl6ZWQsIERlc3Ryb3lhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4UGFnZXNTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jb2xsZWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxGaXJlc3RvcmVDb2xsZWN0aW9uTGlrZTxULCBEPj4+KHVuZGVmaW5lZCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tYXhQYWdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8bnVtYmVyPj4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pdGVtc1BlclBhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPG51bWJlcj4+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfY29uc3RyYWludHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPEFycmF5T3JWYWx1ZTxGaXJlc3RvcmVRdWVyeUNvbnN0cmFpbnQ+Pj4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF93YWl0Rm9yTm9uTnVsbENvbnN0cmFpbnRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxib29sZWFuPj4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9yZXN0YXJ0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICByZWFkb25seSBjb2xsZWN0aW9uJCA9IHRoaXMuX2NvbGxlY3Rpb24ucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgcmVhZG9ubHkgY3VycmVudENvbnN0cmFpbnRzJCA9IHRoaXMuX2NvbnN0cmFpbnRzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgcmVhZG9ubHkgY29uc3RyYWludHMkID0gdGhpcy5fd2FpdEZvck5vbk51bGxDb25zdHJhaW50cy5waXBlKFxuICAgIHN3aXRjaE1hcCgod2FpdEZvck5vbk51bGxDb25zdHJhaW50cykgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxNYXliZTxBcnJheU9yVmFsdWU8RmlyZXN0b3JlUXVlcnlDb25zdHJhaW50Pj4+ID0gdGhpcy5jdXJyZW50Q29uc3RyYWludHMkO1xuXG4gICAgICAvLyBkZWZhdWx0cyB0byB0cnVlXG4gICAgICBpZiAod2FpdEZvck5vbk51bGxDb25zdHJhaW50cyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb2JzID0gdGhpcy5jdXJyZW50Q29uc3RyYWludHMkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYnM7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpdGVyYXRvckZpbHRlciQ6IE9ic2VydmFibGU8RmlyZXN0b3JlSXRlbVBhZ2VJdGVyYXRvckZpbHRlcj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9pdGVtc1BlclBhZ2UucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSwgdGhpcy5jb25zdHJhaW50cyRdKS5waXBlKFxuICAgIG1hcCgoW2xpbWl0LCBjb25zdHJhaW50c10pID0+ICh7IGxpbWl0LCBjb25zdHJhaW50cywgbWF4UGFnZUxvYWRMaW1pdDogdGhpcy5tYXhQYWdlcyB9KSBhcyBGaXJlc3RvcmVJdGVtUGFnZUl0ZXJhdG9yRmlsdGVyKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGZpcmVzdG9yZUl0ZXJhdGlvbiQ6IE9ic2VydmFibGU8RmlyZXN0b3JlSXRlbVBhZ2VJdGVyYXRpb25JbnN0YW5jZTxUPj4gPSB0aGlzLmNvbGxlY3Rpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb2xsZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5pdGVyYXRvckZpbHRlciQsIHRoaXMuX3Jlc3RhcnQucGlwZShzdGFydFdpdGgodW5kZWZpbmVkKSldKS5waXBlKFxuICAgICAgICAgIHRocm90dGxlVGltZSgxMDAsIHVuZGVmaW5lZCwgeyB0cmFpbGluZzogdHJ1ZSB9KSwgLy8gcHJldmVudCByYXBpZCBjaGFuZ2VzIGFuZCBleGVjdXRpbmcgZmlsdGVycyB0b28gcXVpY2tseS5cbiAgICAgICAgICBtYXAoKFtpdGVyYXRvckZpbHRlcl0pID0+IGNvbGxlY3Rpb24uZmlyZXN0b3JlSXRlcmF0aW9uKGl0ZXJhdG9yRmlsdGVyKSksXG4gICAgICAgICAgY2xlYW51cERlc3Ryb3lhYmxlKCksIC8vIGNsZWFudXAgdGhlIGl0ZXJhdGlvblxuICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gTkVWRVI7IC8vIGRvbid0IGVtaXQgYW55dGhpbmcgdW50aWwgY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cbiAgICAgIH1cbiAgICB9KSxcbiAgICBjbGVhbnVwRGVzdHJveWFibGUoKSwgLy8gY2xlYW51cCB0aGUgaXRlcmF0aW9uXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBxdWVyeUNoYW5nZVdhdGNoZXIkOiBPYnNlcnZhYmxlPEl0ZXJhdGlvblF1ZXJ5RG9jQ2hhbmdlV2F0Y2hlcjxUPj4gPSB0aGlzLmZpcmVzdG9yZUl0ZXJhdGlvbiQucGlwZShcbiAgICBtYXAoKGluc3RhbmNlKSA9PiBpdGVyYXRpb25RdWVyeURvY0NoYW5nZVdhdGNoZXIoeyBpbnN0YW5jZSB9KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzbmFwc2hvdEFjY3VtdWxhdG9yJDogT2JzZXJ2YWJsZTxGaXJlYmFzZVF1ZXJ5U25hcHNob3RBY2N1bXVsYXRvcjxUPj4gPSB0aGlzLmZpcmVzdG9yZUl0ZXJhdGlvbiQucGlwZShcbiAgICBtYXAoKHgpID0+IGZpcmViYXNlUXVlcnlTbmFwc2hvdEFjY3VtdWxhdG9yPFQ+KHgpKSxcbiAgICBjbGVhbnVwRGVzdHJveWFibGUoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGhhc05leHQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5maXJlc3RvcmVJdGVyYXRpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB4Lmhhc05leHQkKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGNhbkxvYWRNb3JlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZmlyZXN0b3JlSXRlcmF0aW9uJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4geC5jYW5Mb2FkTW9yZSQpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzTmV4dEFuZENhbkxvYWRNb3JlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZmlyZXN0b3JlSXRlcmF0aW9uJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4gaXRlcmF0aW9uSGFzTmV4dEFuZENhbkxvYWRNb3JlKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHNuYXBzaG90QWNjdW11bGF0b3JEb2N1bWVudFJlZnMkOiBPYnNlcnZhYmxlPERvY3VtZW50UmVmZXJlbmNlPFQ+W11bXT4gPSB0aGlzLnNuYXBzaG90QWNjdW11bGF0b3IkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB4LmFsbEl0ZW1zJC5waXBlKG1hcCgoeSkgPT4geS5tYXAoKHopID0+IHoubWFwKCh6eikgPT4genoucmVmKSkpKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzbmFwc2hvdEFjY3VtdWxhdG9yRG9jdW1lbnRzJDogT2JzZXJ2YWJsZTxEW11bXT4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmNvbGxlY3Rpb24kLnBpcGUoZmlsdGVyTWF5YmUoKSksIHRoaXMuc25hcHNob3RBY2N1bXVsYXRvckRvY3VtZW50UmVmcyRdKS5waXBlKFxuICAgIG1hcCgoW2NvbGxlY3Rpb24sIGRvY3VtZW50UmVmc10pID0+IHtcbiAgICAgIGNvbnN0IGFjY2Vzc29yID0gY29sbGVjdGlvbi5kb2N1bWVudEFjY2Vzc29yKCk7XG4gICAgICByZXR1cm4gZG9jdW1lbnRSZWZzLm1hcCgoeSkgPT4geS5tYXAoKHopID0+IGFjY2Vzc29yLmxvYWREb2N1bWVudCh6KSkpO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgYWNjdW11bGF0b3IkOiBPYnNlcnZhYmxlPEZpcmViYXNlUXVlcnlJdGVtQWNjdW11bGF0b3I8VD4+ID0gdGhpcy5maXJlc3RvcmVJdGVyYXRpb24kLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBmaXJlYmFzZVF1ZXJ5SXRlbUFjY3VtdWxhdG9yPFQ+KHgpKSxcbiAgICBjbGVhbnVwRGVzdHJveWFibGUoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGFjY3VtdWxhdG9yUGFnZSQ6IE9ic2VydmFibGU8UGFnZU51bWJlcj4gPSB0aGlzLmFjY3VtdWxhdG9yJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4gcGFnZUl0ZW1BY2N1bXVsYXRvckN1cnJlbnRQYWdlKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8qKlxuICAgKiBQYXNzdGhyb3VnaCBmb3IgY3VycmVudEFsbEl0ZW1zJCBmcm9tIHRoZSBhY2N1bXVsYXRvci5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRBY2N1bXVsYXRvckl0ZW1zJDogT2JzZXJ2YWJsZTxEb2N1bWVudERhdGFXaXRoSWRBbmRLZXk8VD5bXVtdPiA9IHRoaXMuYWNjdW11bGF0b3IkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB4LmN1cnJlbnRBbGxJdGVtcyQpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqXG4gICAqIFBhc3N0aHJvdWdoIGZvciBhbGxJdGVtcyQgZnJvbSB0aGUgYWNjdW11bGF0b3IuXG4gICAqL1xuICByZWFkb25seSBhY2N1bXVsYXRvckl0ZW1zJDogT2JzZXJ2YWJsZTxEb2N1bWVudERhdGFXaXRoSWRBbmRLZXk8VD5bXVtdPiA9IHRoaXMuYWNjdW11bGF0b3IkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB4LmFsbEl0ZW1zJCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBmaXJzdCBwYWdlIHJlc3VsdCBoYXMgb25lIG9yIG1vcmUgZG9jdW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFzRG9jdW1lbnRzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZmlyZXN0b3JlSXRlcmF0aW9uJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4geC5maXJzdFN0YXRlJC5waXBlKG1hcCgoeCkgPT4gQm9vbGVhbih4LnZhbHVlPy5sZW5ndGgpKSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgYWxsRG9jdW1lbnRSZWZzJDogT2JzZXJ2YWJsZTxEb2N1bWVudFJlZmVyZW5jZTxUPltdPiA9IHRoaXMuc25hcHNob3RBY2N1bXVsYXRvckRvY3VtZW50UmVmcyQucGlwZShcbiAgICBtYXAoKHgpID0+IHguZmxhdCgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGFsbERvY3VtZW50cyQ6IE9ic2VydmFibGU8RFtdPiA9IHRoaXMuc25hcHNob3RBY2N1bXVsYXRvckRvY3VtZW50cyQucGlwZShcbiAgICBtYXAoKHgpID0+IHguZmxhdCgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGFsbERvY3VtZW50RGF0YSQ6IE9ic2VydmFibGU8RG9jdW1lbnREYXRhV2l0aElkQW5kS2V5PFQ+W10+ID0gdGhpcy5hY2N1bXVsYXRvckl0ZW1zJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5mbGF0KCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcGFnZUxvYWRpbmdTdGF0ZSQ6IE9ic2VydmFibGU8UGFnZUxpc3RMb2FkaW5nU3RhdGU8RG9jdW1lbnREYXRhV2l0aElkQW5kS2V5PFQ+Pj4gPSB0aGlzLmFjY3VtdWxhdG9yJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4gYWNjdW11bGF0b3JGbGF0dGVuUGFnZUxpc3RMb2FkaW5nU3RhdGUoeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgY29uc3RydWN0b3IoaW5pdENvbmZpZz86IERieEZpcmViYXNlQ29sbGVjdGlvbkxvYWRlckluc3RhbmNlSW5pdENvbmZpZzxULCBEPikge1xuICAgIHRoaXMuX2NvbGxlY3Rpb24ubmV4dChpbml0Q29uZmlnPy5jb2xsZWN0aW9uKTtcbiAgICB0aGlzLl9tYXhQYWdlcy5uZXh0KGluaXRDb25maWc/Lm1heFBhZ2VzKTtcbiAgICB0aGlzLl9pdGVtc1BlclBhZ2UubmV4dChpbml0Q29uZmlnPy5pdGVtc1BlclBhZ2UpO1xuICAgIHRoaXMuX2NvbnN0cmFpbnRzLm5leHQoaW5pdENvbmZpZz8uY29uc3RyYWludHMpO1xuICB9XG5cbiAgaW5pdCgpOiB2b2lkIHtcbiAgICAvLyBXaGVuIG1heCBwYWdlcyBjaGFuZ2VzLCB1cGRhdGUgdGhlIGl0ZXJhdGlvbidzIG1heCBwYWdlIGxpbWl0LlxuICAgIHRoaXMuX21heFBhZ2VzU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuX21heFBhZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgZmlsdGVyTWF5YmUoKSwgLy8gZG8gbm90IHBhc3MgbnVsbC91bmRlZmluZWQgdmFsdWVzXG4gICAgICAgIHN3aXRjaE1hcCgobWF4UGFnZUxvYWRMaW1pdCkgPT5cbiAgICAgICAgICB0aGlzLmZpcmVzdG9yZUl0ZXJhdGlvbiQucGlwZShcbiAgICAgICAgICAgIHRhcCgoaXRlcmF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGl0ZXJhdGlvbi5zZXRNYXhQYWdlTG9hZExpbWl0KG1heFBhZ2VMb2FkTGltaXQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fbWF4UGFnZXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9jb2xsZWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY29uc3RyYWludHMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9pdGVtc1BlclBhZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl9yZXN0YXJ0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fbWF4UGFnZXNTdWIuZGVzdHJveSgpO1xuICB9XG5cbiAgLy8gTUFSSzogSW5wdXRzXG4gIGdldCBtYXhQYWdlcygpOiBNYXliZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fbWF4UGFnZXMudmFsdWU7XG4gIH1cblxuICBzZXQgbWF4UGFnZXMobWF4UGFnZXM6IE1heWJlPG51bWJlcj4pIHtcbiAgICBpZiAodGhpcy5tYXhQYWdlcyAhPSBtYXhQYWdlcykge1xuICAgICAgdGhpcy5fbWF4UGFnZXMubmV4dChtYXhQYWdlcyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBNYXliZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlLnZhbHVlO1xuICB9XG5cbiAgc2V0IGl0ZW1zUGVyUGFnZShpdGVtc1BlclBhZ2U6IE1heWJlPG51bWJlcj4pIHtcbiAgICBpZiAodGhpcy5pdGVtc1BlclBhZ2UgIT0gaXRlbXNQZXJQYWdlKSB7XG4gICAgICB0aGlzLl9pdGVtc1BlclBhZ2UubmV4dChpdGVtc1BlclBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjb25zdHJhaW50cygpOiBNYXliZTxBcnJheU9yVmFsdWU8RmlyZXN0b3JlUXVlcnlDb25zdHJhaW50Pj4ge1xuICAgIHJldHVybiB0aGlzLl9jb25zdHJhaW50cy52YWx1ZTtcbiAgfVxuXG4gIHNldCBjb25zdHJhaW50cyhjb25zdHJhaW50czogTWF5YmU8QXJyYXlPclZhbHVlPEZpcmVzdG9yZVF1ZXJ5Q29uc3RyYWludD4+KSB7XG4gICAgdGhpcy5fY29uc3RyYWludHMubmV4dChjb25zdHJhaW50cyk7XG4gIH1cblxuICBnZXQgd2FpdEZvck5vbk51bGxDb25zdHJhaW50cygpOiBNYXliZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dhaXRGb3JOb25OdWxsQ29uc3RyYWludHMudmFsdWU7XG4gIH1cblxuICBzZXQgd2FpdEZvck5vbk51bGxDb25zdHJhaW50cyh3YWl0Rm9yTm9uTnVsbENvbnN0cmFpbnRzOiBNYXliZTxib29sZWFuPikge1xuICAgIHRoaXMuX3dhaXRGb3JOb25OdWxsQ29uc3RyYWludHMubmV4dCh3YWl0Rm9yTm9uTnVsbENvbnN0cmFpbnRzKTtcbiAgfVxuXG4gIGdldCBjb2xsZWN0aW9uKCk6IE1heWJlPEZpcmVzdG9yZUNvbGxlY3Rpb25MaWtlPFQsIEQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb24udmFsdWU7XG4gIH1cblxuICBzZXQgY29sbGVjdGlvbihjb2xsZWN0aW9uOiBNYXliZTxGaXJlc3RvcmVDb2xsZWN0aW9uTGlrZTxULCBEPj4pIHtcbiAgICB0aGlzLl9jb2xsZWN0aW9uLm5leHQoY29sbGVjdGlvbik7XG4gIH1cblxuICAvLyBNQVJLOiBEYnhGaXJlYmFzZUNvbGxlY3Rpb25Mb2FkZXJcbiAgbmV4dCgpIHtcbiAgICB1c2VGaXJzdCh0aGlzLmZpcmVzdG9yZUl0ZXJhdGlvbiQsICh4KSA9PiB4Lm5leHQoKSk7XG4gIH1cblxuICByZXN0YXJ0KCkge1xuICAgIHRoaXMuX3Jlc3RhcnQubmV4dCgpO1xuICB9XG5cbiAgc2V0TWF4UGFnZXMobWF4UGFnZXM6IE1heWJlPG51bWJlcj4pIHtcbiAgICB0aGlzLm1heFBhZ2VzID0gbWF4UGFnZXM7XG4gIH1cblxuICBzZXRJdGVtc1BlclBhZ2UoaXRlbXNQZXJQYWdlOiBNYXliZTxudW1iZXI+KSB7XG4gICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBpdGVtc1BlclBhZ2U7XG4gIH1cblxuICBzZXRDb25zdHJhaW50cyhjb25zdHJhaW50czogTWF5YmU8QXJyYXlPclZhbHVlPEZpcmVzdG9yZVF1ZXJ5Q29uc3RyYWludD4+KSB7XG4gICAgdGhpcy5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzO1xuICB9XG5cbiAgc2V0V2FpdEZvck5vbk51bGxDb25zdHJhaW50cyh3YWl0Rm9yTm9uTnVsbENvbnN0cmFpbnRzOiBNYXliZTxib29sZWFuPikge1xuICAgIHRoaXMud2FpdEZvck5vbk51bGxDb25zdHJhaW50cyA9IHdhaXRGb3JOb25OdWxsQ29uc3RyYWludHM7XG4gIH1cblxuICBzZXRDb2xsZWN0aW9uKGZpcmVzdG9yZUNvbGxlY3Rpb246IE1heWJlPEZpcmVzdG9yZUNvbGxlY3Rpb25MaWtlPFQsIEQ+Pikge1xuICAgIHRoaXMuY29sbGVjdGlvbiA9IGZpcmVzdG9yZUNvbGxlY3Rpb247XG4gIH1cblxuICBsb2FkUGFnZXNVbnRpbFJlc3VsdHNDb3VudChtYXhSZXN1bHRzTGltaXQ6IEdldHRlck9yVmFsdWU8bnVtYmVyPiwgY291bnRSZXN1bHRzRnVuY3Rpb24/OiBGaXJlYmFzZVF1ZXJ5SXRlbUFjY3VtdWxhdG9yTmV4dFBhZ2VVbnRpbFJlc3VsdHNDb3VudEZ1bmN0aW9uPFQ+IHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxJdGVtQWNjdW11bGF0b3JOZXh0UGFnZVVudGlsUmVzdWx0c0NvdW50UmVzdWx0PiB7XG4gICAgY29uc3QgZGVmYXVsdEZuOiBJdGVtQWNjdW11bGF0b3JOZXh0UGFnZVVudGlsUmVzdWx0c0NvdW50RnVuY3Rpb248RG9jdW1lbnREYXRhV2l0aElkQW5kS2V5PFQ+W10+ID0gY291bnRBbGxJbk5lc3RlZEFycmF5O1xuICAgIHJldHVybiB0aGlzLmFjY3VtdWxhdG9yJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChhY2N1bXVsYXRvcikgPT5cbiAgICAgICAgaXRlbUFjY3VtdWxhdG9yTmV4dFBhZ2VVbnRpbFJlc3VsdHNDb3VudCh7XG4gICAgICAgICAgYWNjdW11bGF0b3IsXG4gICAgICAgICAgbWF4UmVzdWx0c0xpbWl0LFxuICAgICAgICAgIGNvdW50UmVzdWx0c0Z1bmN0aW9uOiBjb3VudFJlc3VsdHNGdW5jdGlvbiA/PyBkZWZhdWx0Rm5cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbG9hZFRvUGFnZShwYWdlOiBQYWdlTnVtYmVyKTogT2JzZXJ2YWJsZTxQYWdlTnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjdW11bGF0b3IkLnBpcGUoc3dpdGNoTWFwKChhY2N1bXVsYXRvcikgPT4gaXRlcmF0b3JOZXh0UGFnZVVudGlsUGFnZShhY2N1bXVsYXRvci5pdGVtSXRlcmF0aW9uLCBwYWdlKSkpO1xuICB9XG5cbiAgbG9hZEFsbFJlc3VsdHMoKTogT2JzZXJ2YWJsZTxQYWdlTnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjdW11bGF0b3IkLnBpcGUoc3dpdGNoTWFwKChhY2N1bXVsYXRvcikgPT4gaXRlcmF0b3JOZXh0UGFnZVVudGlsTWF4UGFnZUxvYWRMaW1pdChhY2N1bXVsYXRvci5pdGVtSXRlcmF0aW9uKSkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYnhGaXJlYmFzZUNvbGxlY3Rpb25Mb2FkZXJJbnN0YW5jZTxULCBEIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ8VD4gPSBGaXJlc3RvcmVEb2N1bWVudDxUPj4oY29uZmlnOiBEYnhGaXJlYmFzZUNvbGxlY3Rpb25Mb2FkZXJJbnN0YW5jZUluaXRDb25maWc8VCwgRD4pOiBEYnhGaXJlYmFzZUNvbGxlY3Rpb25Mb2FkZXJJbnN0YW5jZTxULCBEPiB7XG4gIHJldHVybiBuZXcgRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVySW5zdGFuY2U8VCwgRD4oY29uZmlnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRieEZpcmViYXNlQ29sbGVjdGlvbkxvYWRlckluc3RhbmNlV2l0aENvbGxlY3Rpb248VCwgRCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PFQ+ID0gRmlyZXN0b3JlRG9jdW1lbnQ8VD4+KGNvbGxlY3Rpb246IE1heWJlPEZpcmVzdG9yZUNvbGxlY3Rpb25MaWtlPFQsIEQ+Pik6IERieEZpcmViYXNlQ29sbGVjdGlvbkxvYWRlckluc3RhbmNlPFQsIEQ+IHtcbiAgcmV0dXJuIG5ldyBEYnhGaXJlYmFzZUNvbGxlY3Rpb25Mb2FkZXJJbnN0YW5jZTxULCBEPih7IGNvbGxlY3Rpb24gfSk7XG59XG4iXX0=
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5sb2FkZXIuaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2RlbC9sb2FkZXIvY29sbGVjdGlvbi5sb2FkZXIuaW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixrQkFBa0IsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLHNDQUFzQyxFQUFvRCx3Q0FBd0MsRUFBRSx5QkFBeUIsRUFBRSxxQ0FBcUMsRUFBRSw4QkFBOEIsRUFBa0QsOEJBQThCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbmMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBYyxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkssT0FBTyxFQUE2RSw0QkFBNEIsRUFBbUcsZ0NBQWdDLEVBQWdNLDhCQUE4QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN2UsT0FBTyxFQUE0RSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTZCaEk7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUNBQW1DO0lBQzdCLFlBQVksR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFFdEMsV0FBVyxHQUFHLElBQUksZUFBZSxDQUF1QyxTQUFTLENBQUMsQ0FBQztJQUVuRixlQUFlLEdBQUcsSUFBSSxlQUFlLENBQTRCLE9BQU8sQ0FBQyxDQUFDO0lBQzFFLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBZ0MsU0FBUyxDQUFDLENBQUM7SUFDaEYsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFnQixTQUFTLENBQUMsQ0FBQztJQUMxRCxhQUFh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Q0FBQztJQUN4QyxDQUFDO0lBRUQsMEJBQTBCLENBQUMsZUFBc0MsRUFBRSxvQkFBbUc7UUFDcEssTUFBTSxTQUFTLEdBQW9GLHFCQUFxQixDQUFDO1FBQ3pILE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzNCLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQ3hCLHdDQUF3QyxDQUFDO1lBQ3ZDLFdBQVc7WUFDWCxlQUFlO1lBQ2Ysb0JBQW9CLEVBQUUsb0JBQW9CLElBQUksU0FBUztTQUN4RCxDQUFDLENBQ0gsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMseUJBQXlCLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEgsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMscUNBQXFDLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5SCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsbUNBQW1DLENBQTJELE1BQTJEO0lBQ3ZLLE9BQU8sSUFBSSxtQ0FBbUMsQ0FBTyxNQUFNLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlEQUFpRCxDQUEyRCxVQUFnRDtJQUMxSyxPQUFPLElBQUksbUNBQW1DLENBQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYWdlTGlzdExvYWRpbmdTdGF0ZSwgY2xlYW51cERlc3Ryb3lhYmxlLCBmaWx0ZXJNYXliZSwgdXNlRmlyc3QsIFN1YnNjcmlwdGlvbk9iamVjdCwgYWNjdW11bGF0b3JGbGF0dGVuUGFnZUxpc3RMb2FkaW5nU3RhdGUsIEl0ZW1BY2N1bXVsYXRvck5leHRQYWdlVW50aWxSZXN1bHRzQ291bnRGdW5jdGlvbiwgaXRlbUFjY3VtdWxhdG9yTmV4dFBhZ2VVbnRpbFJlc3VsdHNDb3VudCwgaXRlcmF0b3JOZXh0UGFnZVVudGlsUGFnZSwgaXRlcmF0b3JOZXh0UGFnZVVudGlsTWF4UGFnZUxvYWRMaW1pdCwgcGFnZUl0ZW1BY2N1bXVsYXRvckN1cnJlbnRQYWdlLCBJdGVtQWNjdW11bGF0b3JOZXh0UGFnZVVudGlsUmVzdWx0c0NvdW50UmVzdWx0LCBpdGVyYXRpb25IYXNOZXh0QW5kQ2FuTG9hZE1vcmUsIGRpc3RpbmN0VW50aWxLZXlzQ2hhbmdlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgc2hhcmVSZXBsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBTdWJqZWN0LCB0aHJvdHRsZVRpbWUsIHN3aXRjaE1hcCwgT2JzZXJ2YWJsZSwgdGFwLCBzdGFydFdpdGgsIE5FVkVSLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRG9jdW1lbnREYXRhV2l0aElkQW5kS2V5LCBEb2N1bWVudFJlZmVyZW5jZSwgRmlyZWJhc2VRdWVyeUl0ZW1BY2N1bXVsYXRvciwgZmlyZWJhc2VRdWVyeUl0ZW1BY2N1bXVsYXRvciwgRmlyZWJhc2VRdWVyeUl0ZW1BY2N1bXVsYXRvck5leHRQYWdlVW50aWxSZXN1bHRzQ291bnRGdW5jdGlvbiwgRmlyZWJhc2VRdWVyeVNuYXBzaG90QWNjdW11bGF0b3IsIGZpcmViYXNlUXVlcnlTbmFwc2hvdEFjY3VtdWxhdG9yLCBGaXJlc3RvcmVDb2xsZWN0aW9uTGlrZSwgRmlyZXN0b3JlRG9jdW1lbnQsIEZpcmVzdG9yZUl0ZW1QYWdlSXRlcmF0aW9uSW5zdGFuY2UsIEZpcmVzdG9yZUl0ZW1QYWdlSXRlcmF0b3JGaWx0ZXIsIEZpcmVzdG9yZU1vZGVsS2V5LCBGaXJlc3RvcmVRdWVyeUNvbnN0cmFpbnQsIEl0ZXJhdGlvblF1ZXJ5RG9jQ2hhbmdlV2F0Y2hlciwgaXRlcmF0aW9uUXVlcnlEb2NDaGFuZ2VXYXRjaGVyIH0gZnJvbSAnQGRlcmVla2IvZmlyZWJhc2UnO1xuaW1wb3J0IHsgQXJyYXlPclZhbHVlLCBEZXN0cm95YWJsZSwgR2V0dGVyT3JWYWx1ZSwgSW5pdGlhbGl6ZWQsIE1heWJlLCBQYWdlTnVtYmVyLCBjb3VudEFsbEluTmVzdGVkQXJyYXkgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IERieEZpcmViYXNlQ29sbGVjdGlvbkxvYWRlckFjY2Vzc29yLCBEYnhGaXJlYmFzZUNvbGxlY3Rpb25Mb2FkZXJXaXRoQWNjdW11bGF0b3IgfSBmcm9tICcuL2NvbGxlY3Rpb24ubG9hZGVyJztcblxuLyoqXG4gKiBUaGUgc3RvcmUgbW9kZS5cbiAqXG4gKiAtIHF1ZXJ5OiBUaGUgc3RvcmUgd2lsbCBsb2FkIGRvY3VtZW50cyBmcm9tIGEgcXVlcnksIHVzaW5nIHRoZSBnaXZlbiBjb2xsZWN0aW9uLlxuICogLSByZWZlcmVuY2VzOiBUaGUgc3RvcmUgd2lsbCBsb2FkIGRvY3VtZW50cyBmcm9tIHRoZSBpbnB1dCByZWZlcmVuY2VzIChrZXlzLCByZWZzLCBldGMuKS5cbiAqL1xuZXhwb3J0IHR5cGUgRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTW9kZSA9ICdxdWVyeScgfCAncmVmZXJlbmNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVySW5zdGFuY2VJbml0Q29uZmlnPFQsIEQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudDxUPiA9IEZpcmVzdG9yZURvY3VtZW50PFQ+PiB7XG4gIHJlYWRvbmx5IGNvbGxlY3Rpb24/OiBNYXliZTxGaXJlc3RvcmVDb2xsZWN0aW9uTGlrZTxULCBEPj47XG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25Nb2RlPzogRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTW9kZTtcbiAgcmVhZG9ubHkgY29sbGVjdGlvbktleXM/OiBNYXliZTxGaXJlc3RvcmVNb2RlbEtleVtdPjtcbiAgcmVhZG9ubHkgY29sbGVjdGlvblJlZnM/OiBNYXliZTxEb2N1bWVudFJlZmVyZW5jZTxUPltdPjtcbiAgcmVhZG9ubHkgbWF4UGFnZXM/OiBNYXliZTxudW1iZXI+O1xuICByZWFkb25seSBpdGVtc1BlclBhZ2U/OiBNYXliZTxudW1iZXI+O1xuICByZWFkb25seSBjb25zdHJhaW50cz86IE1heWJlPEFycmF5T3JWYWx1ZTxGaXJlc3RvcmVRdWVyeUNvbnN0cmFpbnQ+PjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHdhaXQgZm9yIG5vbi1udWxsIGNvbnN0cmFpbnRzIGJlZm9yZSBiZWdpbm5pbmcgdGhlIGl0ZXJhdGlvbi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHdhaXRGb3JOb25OdWxsQ29uc3RyYWludHM/OiBNYXliZTxib29sZWFuPjtcbn1cblxuZXhwb3J0IHR5cGUgRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVySW5zdGFuY2VEYXRhPFQsIEQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudDxUPiA9IEZpcmVzdG9yZURvY3VtZW50PFQ+PiA9IERieEZpcmViYXNlQ29sbGVjdGlvbkxvYWRlckFjY2Vzc29yPFQ+O1xuXG4vKipcbiAqIERieEZpcmViYXNlTW9kZWxMb2FkZXIgaW1wbGVtZW50YXRpb24gd2l0aGluIGFuIGluc3RhbmNlLlxuICovXG5leHBvcnQgY2xhc3MgRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVySW5zdGFuY2U8VCA9IHVua25vd24sIEQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudDxUPiA9IEZpcmVzdG9yZURvY3VtZW50PFQ+PiBpbXBsZW1lbnRzIERieEZpcmViYXNlQ29sbGVjdGlvbkxvYWRlcldpdGhBY2N1bXVsYXRvcjxUPiwgRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVySW5zdGFuY2VEYXRhPFQsIEQ+LCBJbml0aWFsaXplZCwgRGVzdHJveWFibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhQYWdlc1N1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvbGxlY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPEZpcmVzdG9yZUNvbGxlY3Rpb25MaWtlPFQsIEQ+Pj4odW5kZWZpbmVkKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvbGxlY3Rpb25Nb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYnhGaXJlYmFzZUNvbGxlY3Rpb25Nb2RlPigncXVlcnknKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jb2xsZWN0aW9uUmVmcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8RG9jdW1lbnRSZWZlcmVuY2U8VD5bXT4+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfbWF4UGFnZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPG51bWJlcj4+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfaXRlbXNQZXJQYWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxudW1iZXI+Pih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvbnN0cmFpbnRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxBcnJheU9yVmFsdWU8RmlyZXN0b3JlUXVlcnlDb25zdHJhaW50Pj4+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfd2FpdEZvck5vbk51bGxDb25zdHJhaW50cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8Ym9vbGVhbj4+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfcmVzdGFydCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgY29sbGVjdGlvbiQgPSB0aGlzLl9jb2xsZWN0aW9uLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgcmVhZG9ubHkgY29sbGVjdGlvbk1vZGUkID0gdGhpcy5fY29sbGVjdGlvbk1vZGUucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzaGFyZVJlcGxheSgxKSk7XG4gIHJlYWRvbmx5IGN1cnJlbnRDb2xsZWN0aW9uUmVmcyQgPSB0aGlzLl9jb2xsZWN0aW9uUmVmcy5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHNoYXJlUmVwbGF5KDEpKTtcbiAgcmVhZG9ubHkgY29sbGVjdGlvblJlZnMkID0gdGhpcy5jdXJyZW50Q29sbGVjdGlvblJlZnMkLnBpcGUoXG4gICAgZmlsdGVyTWF5YmUoKSxcbiAgICBkaXN0aW5jdFVudGlsS2V5c0NoYW5nZSgoeCkgPT4geC5wYXRoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICByZWFkb25seSBjb2xsZWN0aW9uS2V5cyQgPSB0aGlzLmNvbGxlY3Rpb25SZWZzJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXAoKHkpID0+IHkucGF0aCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudENvbnN0cmFpbnRzJCA9IHRoaXMuX2NvbnN0cmFpbnRzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgcmVhZG9ubHkgY29uc3RyYWludHMkID0gdGhpcy5fd2FpdEZvck5vbk51bGxDb25zdHJhaW50cy5waXBlKFxuICAgIHN3aXRjaE1hcCgod2FpdEZvck5vbk51bGxDb25zdHJhaW50cykgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxNYXliZTxBcnJheU9yVmFsdWU8RmlyZXN0b3JlUXVlcnlDb25zdHJhaW50Pj4+ID0gdGhpcy5jdXJyZW50Q29uc3RyYWludHMkO1xuXG4gICAgICAvLyBkZWZhdWx0cyB0byB0cnVlXG4gICAgICBpZiAod2FpdEZvck5vbk51bGxDb25zdHJhaW50cyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb2JzID0gdGhpcy5jdXJyZW50Q29uc3RyYWludHMkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYnM7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpdGVyYXRvckZpbHRlciQ6IE9ic2VydmFibGU8RmlyZXN0b3JlSXRlbVBhZ2VJdGVyYXRvckZpbHRlcj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9pdGVtc1BlclBhZ2UucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSwgdGhpcy5jb25zdHJhaW50cyRdKS5waXBlKFxuICAgIG1hcCgoW2xpbWl0LCBjb25zdHJhaW50c10pID0+ICh7IGxpbWl0LCBjb25zdHJhaW50cywgbWF4UGFnZUxvYWRMaW1pdDogdGhpcy5tYXhQYWdlcyB9KSBhcyBGaXJlc3RvcmVJdGVtUGFnZUl0ZXJhdG9yRmlsdGVyKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGZpcmVzdG9yZUl0ZXJhdGlvbiQ6IE9ic2VydmFibGU8RmlyZXN0b3JlSXRlbVBhZ2VJdGVyYXRpb25JbnN0YW5jZTxUPj4gPSB0aGlzLmNvbGxlY3Rpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb2xsZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5jb2xsZWN0aW9uTW9kZSQsIHRoaXMuaXRlcmF0b3JGaWx0ZXIkLCB0aGlzLl9yZXN0YXJ0LnBpcGUoc3RhcnRXaXRoKHVuZGVmaW5lZCkpXSkucGlwZShcbiAgICAgICAgICB0aHJvdHRsZVRpbWUoMTAwLCB1bmRlZmluZWQsIHsgdHJhaWxpbmc6IHRydWUgfSksIC8vIHByZXZlbnQgcmFwaWQgY2hhbmdlcyBhbmQgZXhlY3V0aW5nIGZpbHRlcnMgdG9vIHF1aWNrbHkuXG4gICAgICAgICAgc3dpdGNoTWFwKChbbW9kZSwgZmlsdGVyXSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdxdWVyeScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKGNvbGxlY3Rpb24uZmlyZXN0b3JlSXRlcmF0aW9uKGZpbHRlcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvblJlZnMkLnBpcGUobWFwKChyZWZzKSA9PiBjb2xsZWN0aW9uLmZpcmVzdG9yZUZpeGVkSXRlcmF0aW9uKHJlZnMsIGZpbHRlcikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjbGVhbnVwRGVzdHJveWFibGUoKSwgLy8gY2xlYW51cCB0aGUgaXRlcmF0aW9uXG4gICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBORVZFUjsgLy8gZG9uJ3QgZW1pdCBhbnl0aGluZyB1bnRpbCBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlxuICAgICAgfVxuICAgIH0pLFxuICAgIGNsZWFudXBEZXN0cm95YWJsZSgpLCAvLyBjbGVhbnVwIHRoZSBpdGVyYXRpb25cbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHF1ZXJ5Q2hhbmdlV2F0Y2hlciQ6IE9ic2VydmFibGU8SXRlcmF0aW9uUXVlcnlEb2NDaGFuZ2VXYXRjaGVyPFQ+PiA9IHRoaXMuZmlyZXN0b3JlSXRlcmF0aW9uJC5waXBlKFxuICAgIG1hcCgoaW5zdGFuY2UpID0+IGl0ZXJhdGlvblF1ZXJ5RG9jQ2hhbmdlV2F0Y2hlcih7IGluc3RhbmNlIH0pKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHNuYXBzaG90QWNjdW11bGF0b3IkOiBPYnNlcnZhYmxlPEZpcmViYXNlUXVlcnlTbmFwc2hvdEFjY3VtdWxhdG9yPFQ+PiA9IHRoaXMuZmlyZXN0b3JlSXRlcmF0aW9uJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gZmlyZWJhc2VRdWVyeVNuYXBzaG90QWNjdW11bGF0b3I8VD4oeCkpLFxuICAgIGNsZWFudXBEZXN0cm95YWJsZSgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzTmV4dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmZpcmVzdG9yZUl0ZXJhdGlvbiQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHguaGFzTmV4dCQpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY2FuTG9hZE1vcmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5maXJlc3RvcmVJdGVyYXRpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB4LmNhbkxvYWRNb3JlJCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBoYXNOZXh0QW5kQ2FuTG9hZE1vcmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5maXJlc3RvcmVJdGVyYXRpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiBpdGVyYXRpb25IYXNOZXh0QW5kQ2FuTG9hZE1vcmUoeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc25hcHNob3RBY2N1bXVsYXRvckRvY3VtZW50UmVmcyQ6IE9ic2VydmFibGU8RG9jdW1lbnRSZWZlcmVuY2U8VD5bXVtdPiA9IHRoaXMuc25hcHNob3RBY2N1bXVsYXRvciQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHguYWxsSXRlbXMkLnBpcGUobWFwKCh5KSA9PiB5Lm1hcCgoeikgPT4gei5tYXAoKHp6KSA9PiB6ei5yZWYpKSkpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHNuYXBzaG90QWNjdW11bGF0b3JEb2N1bWVudHMkOiBPYnNlcnZhYmxlPERbXVtdPiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY29sbGVjdGlvbiQucGlwZShmaWx0ZXJNYXliZSgpKSwgdGhpcy5zbmFwc2hvdEFjY3VtdWxhdG9yRG9jdW1lbnRSZWZzJF0pLnBpcGUoXG4gICAgbWFwKChbY29sbGVjdGlvbiwgZG9jdW1lbnRSZWZzXSkgPT4ge1xuICAgICAgY29uc3QgYWNjZXNzb3IgPSBjb2xsZWN0aW9uLmRvY3VtZW50QWNjZXNzb3IoKTtcbiAgICAgIHJldHVybiBkb2N1bWVudFJlZnMubWFwKCh5KSA9PiB5Lm1hcCgoeikgPT4gYWNjZXNzb3IubG9hZERvY3VtZW50KHopKSk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBhY2N1bXVsYXRvciQ6IE9ic2VydmFibGU8RmlyZWJhc2VRdWVyeUl0ZW1BY2N1bXVsYXRvcjxUPj4gPSB0aGlzLmZpcmVzdG9yZUl0ZXJhdGlvbiQucGlwZShcbiAgICBtYXAoKHgpID0+IGZpcmViYXNlUXVlcnlJdGVtQWNjdW11bGF0b3I8VD4oeCkpLFxuICAgIGNsZWFudXBEZXN0cm95YWJsZSgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgYWNjdW11bGF0b3JQYWdlJDogT2JzZXJ2YWJsZTxQYWdlTnVtYmVyPiA9IHRoaXMuYWNjdW11bGF0b3IkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiBwYWdlSXRlbUFjY3VtdWxhdG9yQ3VycmVudFBhZ2UoeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqXG4gICAqIFBhc3N0aHJvdWdoIGZvciBjdXJyZW50QWxsSXRlbXMkIGZyb20gdGhlIGFjY3VtdWxhdG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudEFjY3VtdWxhdG9ySXRlbXMkOiBPYnNlcnZhYmxlPERvY3VtZW50RGF0YVdpdGhJZEFuZEtleTxUPltdW10+ID0gdGhpcy5hY2N1bXVsYXRvciQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHguY3VycmVudEFsbEl0ZW1zJCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvKipcbiAgICogUGFzc3Rocm91Z2ggZm9yIGFsbEl0ZW1zJCBmcm9tIHRoZSBhY2N1bXVsYXRvci5cbiAgICovXG4gIHJlYWRvbmx5IGFjY3VtdWxhdG9ySXRlbXMkOiBPYnNlcnZhYmxlPERvY3VtZW50RGF0YVdpdGhJZEFuZEtleTxUPltdW10+ID0gdGhpcy5hY2N1bXVsYXRvciQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHguYWxsSXRlbXMkKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZpcnN0IHBhZ2UgcmVzdWx0IGhhcyBvbmUgb3IgbW9yZSBkb2N1bWVudHMuXG4gICAqL1xuICByZWFkb25seSBoYXNEb2N1bWVudHMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5maXJlc3RvcmVJdGVyYXRpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB4LmZpcnN0U3RhdGUkLnBpcGUobWFwKCh4KSA9PiBCb29sZWFuKHgudmFsdWU/Lmxlbmd0aCkpKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBhbGxEb2N1bWVudFJlZnMkOiBPYnNlcnZhYmxlPERvY3VtZW50UmVmZXJlbmNlPFQ+W10+ID0gdGhpcy5zbmFwc2hvdEFjY3VtdWxhdG9yRG9jdW1lbnRSZWZzJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5mbGF0KCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgYWxsRG9jdW1lbnRzJDogT2JzZXJ2YWJsZTxEW10+ID0gdGhpcy5zbmFwc2hvdEFjY3VtdWxhdG9yRG9jdW1lbnRzJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5mbGF0KCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgYWxsRG9jdW1lbnREYXRhJDogT2JzZXJ2YWJsZTxEb2N1bWVudERhdGFXaXRoSWRBbmRLZXk8VD5bXT4gPSB0aGlzLmFjY3VtdWxhdG9ySXRlbXMkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmZsYXQoKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBwYWdlTG9hZGluZ1N0YXRlJDogT2JzZXJ2YWJsZTxQYWdlTGlzdExvYWRpbmdTdGF0ZTxEb2N1bWVudERhdGFXaXRoSWRBbmRLZXk8VD4+PiA9IHRoaXMuYWNjdW11bGF0b3IkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiBhY2N1bXVsYXRvckZsYXR0ZW5QYWdlTGlzdExvYWRpbmdTdGF0ZSh4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBjb25zdHJ1Y3Rvcihpbml0Q29uZmlnPzogRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVySW5zdGFuY2VJbml0Q29uZmlnPFQsIEQ+KSB7XG4gICAgdGhpcy5fY29sbGVjdGlvbk1vZGUubmV4dChpbml0Q29uZmlnPy5jb2xsZWN0aW9uTW9kZSA/PyAncXVlcnknKTtcblxuICAgIGlmIChpbml0Q29uZmlnPy5jb2xsZWN0aW9uS2V5cykge1xuICAgICAgdGhpcy5jb2xsZWN0aW9uS2V5cyA9IGluaXRDb25maWc/LmNvbGxlY3Rpb25LZXlzO1xuICAgIH0gZWxzZSBpZiAoaW5pdENvbmZpZz8uY29sbGVjdGlvblJlZnMpIHtcbiAgICAgIHRoaXMuY29sbGVjdGlvblJlZnMgPSBpbml0Q29uZmlnPy5jb2xsZWN0aW9uUmVmcztcbiAgICB9XG5cbiAgICB0aGlzLl9jb2xsZWN0aW9uLm5leHQoaW5pdENvbmZpZz8uY29sbGVjdGlvbik7XG4gICAgdGhpcy5fbWF4UGFnZXMubmV4dChpbml0Q29uZmlnPy5tYXhQYWdlcyk7XG4gICAgdGhpcy5faXRlbXNQZXJQYWdlLm5leHQoaW5pdENvbmZpZz8uaXRlbXNQZXJQYWdlKTtcbiAgICB0aGlzLl9jb25zdHJhaW50cy5uZXh0KGluaXRDb25maWc/LmNvbnN0cmFpbnRzKTtcbiAgfVxuXG4gIGluaXQoKTogdm9pZCB7XG4gICAgLy8gV2hlbiBtYXggcGFnZXMgY2hhbmdlcywgdXBkYXRlIHRoZSBpdGVyYXRpb24ncyBtYXggcGFnZSBsaW1pdC5cbiAgICB0aGlzLl9tYXhQYWdlc1N1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLl9tYXhQYWdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIGZpbHRlck1heWJlKCksIC8vIGRvIG5vdCBwYXNzIG51bGwvdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgICBzd2l0Y2hNYXAoKG1heFBhZ2VMb2FkTGltaXQpID0+XG4gICAgICAgICAgdGhpcy5maXJlc3RvcmVJdGVyYXRpb24kLnBpcGUoXG4gICAgICAgICAgICB0YXAoKGl0ZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgICBpdGVyYXRpb24uc2V0TWF4UGFnZUxvYWRMaW1pdChtYXhQYWdlTG9hZExpbWl0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbGxlY3Rpb25Nb2RlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY29sbGVjdGlvblJlZnMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9tYXhQYWdlcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2NvbGxlY3Rpb24uY29tcGxldGUoKTtcbiAgICB0aGlzLl9jb25zdHJhaW50cy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2l0ZW1zUGVyUGFnZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3Jlc3RhcnQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9tYXhQYWdlc1N1Yi5kZXN0cm95KCk7XG4gIH1cblxuICAvLyBNQVJLOiBJbnB1dHNcbiAgZ2V0IGNvbGxlY3Rpb25Nb2RlKCk6IERieEZpcmViYXNlQ29sbGVjdGlvbk1vZGUge1xuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0aW9uTW9kZS52YWx1ZTtcbiAgfVxuXG4gIHNldCBjb2xsZWN0aW9uTW9kZShtb2RlOiBEYnhGaXJlYmFzZUNvbGxlY3Rpb25Nb2RlKSB7XG4gICAgaWYgKHRoaXMuY29sbGVjdGlvbk1vZGUgIT0gbW9kZSkge1xuICAgICAgdGhpcy5fY29sbGVjdGlvbk1vZGUubmV4dChtb2RlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29sbGVjdGlvbktleXMoKTogTWF5YmU8RmlyZXN0b3JlTW9kZWxLZXlbXT4ge1xuICAgIGNvbnN0IHJlZnMgPSB0aGlzLmNvbGxlY3Rpb25SZWZzO1xuICAgIHJldHVybiByZWZzPy5tYXAoKHgpID0+IHgucGF0aCk7XG4gIH1cblxuICBzZXQgY29sbGVjdGlvbktleXMoa2V5czogTWF5YmU8RmlyZXN0b3JlTW9kZWxLZXlbXT4pIHtcbiAgICBsZXQgcmVmczogTWF5YmU8RG9jdW1lbnRSZWZlcmVuY2U8VD5bXT4gPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgeyBjb2xsZWN0aW9uIH0gPSB0aGlzO1xuXG4gICAgaWYgKGtleXMgJiYgY29sbGVjdGlvbikge1xuICAgICAgY29uc3QgYWNjZXNzb3IgPSBjb2xsZWN0aW9uLmRvY3VtZW50QWNjZXNzb3IoKTtcbiAgICAgIHJlZnMgPSBrZXlzLm1hcCgoeCkgPT4gYWNjZXNzb3IuZG9jdW1lbnRSZWZGb3JLZXkoeCkpO1xuICAgIH1cblxuICAgIHRoaXMuY29sbGVjdGlvblJlZnMgPSByZWZzO1xuICB9XG5cbiAgZ2V0IGNvbGxlY3Rpb25SZWZzKCk6IE1heWJlPERvY3VtZW50UmVmZXJlbmNlPFQ+W10+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvblJlZnMudmFsdWU7XG4gIH1cblxuICBzZXQgY29sbGVjdGlvblJlZnMocmVmczogTWF5YmU8RG9jdW1lbnRSZWZlcmVuY2U8VD5bXT4pIHtcbiAgICB0aGlzLl9jb2xsZWN0aW9uUmVmcy5uZXh0KHJlZnMpO1xuICB9XG5cbiAgZ2V0IG1heFBhZ2VzKCk6IE1heWJlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9tYXhQYWdlcy52YWx1ZTtcbiAgfVxuXG4gIHNldCBtYXhQYWdlcyhtYXhQYWdlczogTWF5YmU8bnVtYmVyPikge1xuICAgIGlmICh0aGlzLm1heFBhZ2VzICE9IG1heFBhZ2VzKSB7XG4gICAgICB0aGlzLl9tYXhQYWdlcy5uZXh0KG1heFBhZ2VzKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXRlbXNQZXJQYWdlKCk6IE1heWJlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2UudmFsdWU7XG4gIH1cblxuICBzZXQgaXRlbXNQZXJQYWdlKGl0ZW1zUGVyUGFnZTogTWF5YmU8bnVtYmVyPikge1xuICAgIGlmICh0aGlzLml0ZW1zUGVyUGFnZSAhPSBpdGVtc1BlclBhZ2UpIHtcbiAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZS5uZXh0KGl0ZW1zUGVyUGFnZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbnN0cmFpbnRzKCk6IE1heWJlPEFycmF5T3JWYWx1ZTxGaXJlc3RvcmVRdWVyeUNvbnN0cmFpbnQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnN0cmFpbnRzLnZhbHVlO1xuICB9XG5cbiAgc2V0IGNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzOiBNYXliZTxBcnJheU9yVmFsdWU8RmlyZXN0b3JlUXVlcnlDb25zdHJhaW50Pj4pIHtcbiAgICB0aGlzLl9jb25zdHJhaW50cy5uZXh0KGNvbnN0cmFpbnRzKTtcbiAgfVxuXG4gIGdldCB3YWl0Rm9yTm9uTnVsbENvbnN0cmFpbnRzKCk6IE1heWJlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fd2FpdEZvck5vbk51bGxDb25zdHJhaW50cy52YWx1ZTtcbiAgfVxuXG4gIHNldCB3YWl0Rm9yTm9uTnVsbENvbnN0cmFpbnRzKHdhaXRGb3JOb25OdWxsQ29uc3RyYWludHM6IE1heWJlPGJvb2xlYW4+KSB7XG4gICAgdGhpcy5fd2FpdEZvck5vbk51bGxDb25zdHJhaW50cy5uZXh0KHdhaXRGb3JOb25OdWxsQ29uc3RyYWludHMpO1xuICB9XG5cbiAgZ2V0IGNvbGxlY3Rpb24oKTogTWF5YmU8RmlyZXN0b3JlQ29sbGVjdGlvbkxpa2U8VCwgRD4+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvbi52YWx1ZTtcbiAgfVxuXG4gIHNldCBjb2xsZWN0aW9uKGNvbGxlY3Rpb246IE1heWJlPEZpcmVzdG9yZUNvbGxlY3Rpb25MaWtlPFQsIEQ+Pikge1xuICAgIHRoaXMuX2NvbGxlY3Rpb24ubmV4dChjb2xsZWN0aW9uKTtcbiAgfVxuXG4gIC8vIE1BUks6IERieEZpcmViYXNlQ29sbGVjdGlvbkxvYWRlclxuICBuZXh0KCkge1xuICAgIHVzZUZpcnN0KHRoaXMuZmlyZXN0b3JlSXRlcmF0aW9uJCwgKHgpID0+IHgubmV4dCgpKTtcbiAgfVxuXG4gIHJlc3RhcnQoKSB7XG4gICAgdGhpcy5fcmVzdGFydC5uZXh0KCk7XG4gIH1cblxuICBzZXRDb2xsZWN0aW9uTW9kZShtb2RlOiBEYnhGaXJlYmFzZUNvbGxlY3Rpb25Nb2RlKSB7XG4gICAgdGhpcy5jb2xsZWN0aW9uTW9kZSA9IG1vZGU7XG4gIH1cblxuICAvLyBSZWZlcmVuY2VzIE1vZGVcbiAgc2V0Q29sbGVjdGlvbktleXMoa2V5czogTWF5YmU8RmlyZXN0b3JlTW9kZWxLZXlbXT4pOiB2b2lkIHtcbiAgICB0aGlzLmNvbGxlY3Rpb25LZXlzID0ga2V5cztcbiAgfVxuXG4gIHNldENvbGxlY3Rpb25SZWZzKHJlZnM6IE1heWJlPERvY3VtZW50UmVmZXJlbmNlPFQ+W10+KTogdm9pZCB7XG4gICAgdGhpcy5jb2xsZWN0aW9uUmVmcyA9IHJlZnM7XG4gIH1cblxuICAvLyBRdWVyeSBNb2RlXG4gIHNldE1heFBhZ2VzKG1heFBhZ2VzOiBNYXliZTxudW1iZXI+KSB7XG4gICAgdGhpcy5tYXhQYWdlcyA9IG1heFBhZ2VzO1xuICB9XG5cbiAgc2V0SXRlbXNQZXJQYWdlKGl0ZW1zUGVyUGFnZTogTWF5YmU8bnVtYmVyPikge1xuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gaXRlbXNQZXJQYWdlO1xuICB9XG5cbiAgc2V0Q29uc3RyYWludHMoY29uc3RyYWludHM6IE1heWJlPEFycmF5T3JWYWx1ZTxGaXJlc3RvcmVRdWVyeUNvbnN0cmFpbnQ+Pikge1xuICAgIHRoaXMuY29uc3RyYWludHMgPSBjb25zdHJhaW50cztcbiAgfVxuXG4gIHNldFdhaXRGb3JOb25OdWxsQ29uc3RyYWludHMod2FpdEZvck5vbk51bGxDb25zdHJhaW50czogTWF5YmU8Ym9vbGVhbj4pIHtcbiAgICB0aGlzLndhaXRGb3JOb25OdWxsQ29uc3RyYWludHMgPSB3YWl0Rm9yTm9uTnVsbENvbnN0cmFpbnRzO1xuICB9XG5cbiAgc2V0Q29sbGVjdGlvbihmaXJlc3RvcmVDb2xsZWN0aW9uOiBNYXliZTxGaXJlc3RvcmVDb2xsZWN0aW9uTGlrZTxULCBEPj4pIHtcbiAgICB0aGlzLmNvbGxlY3Rpb24gPSBmaXJlc3RvcmVDb2xsZWN0aW9uO1xuICB9XG5cbiAgbG9hZFBhZ2VzVW50aWxSZXN1bHRzQ291bnQobWF4UmVzdWx0c0xpbWl0OiBHZXR0ZXJPclZhbHVlPG51bWJlcj4sIGNvdW50UmVzdWx0c0Z1bmN0aW9uPzogRmlyZWJhc2VRdWVyeUl0ZW1BY2N1bXVsYXRvck5leHRQYWdlVW50aWxSZXN1bHRzQ291bnRGdW5jdGlvbjxUPiB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8SXRlbUFjY3VtdWxhdG9yTmV4dFBhZ2VVbnRpbFJlc3VsdHNDb3VudFJlc3VsdD4ge1xuICAgIGNvbnN0IGRlZmF1bHRGbjogSXRlbUFjY3VtdWxhdG9yTmV4dFBhZ2VVbnRpbFJlc3VsdHNDb3VudEZ1bmN0aW9uPERvY3VtZW50RGF0YVdpdGhJZEFuZEtleTxUPltdPiA9IGNvdW50QWxsSW5OZXN0ZWRBcnJheTtcbiAgICByZXR1cm4gdGhpcy5hY2N1bXVsYXRvciQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoYWNjdW11bGF0b3IpID0+XG4gICAgICAgIGl0ZW1BY2N1bXVsYXRvck5leHRQYWdlVW50aWxSZXN1bHRzQ291bnQoe1xuICAgICAgICAgIGFjY3VtdWxhdG9yLFxuICAgICAgICAgIG1heFJlc3VsdHNMaW1pdCxcbiAgICAgICAgICBjb3VudFJlc3VsdHNGdW5jdGlvbjogY291bnRSZXN1bHRzRnVuY3Rpb24gPz8gZGVmYXVsdEZuXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGxvYWRUb1BhZ2UocGFnZTogUGFnZU51bWJlcik6IE9ic2VydmFibGU8UGFnZU51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmFjY3VtdWxhdG9yJC5waXBlKHN3aXRjaE1hcCgoYWNjdW11bGF0b3IpID0+IGl0ZXJhdG9yTmV4dFBhZ2VVbnRpbFBhZ2UoYWNjdW11bGF0b3IuaXRlbUl0ZXJhdGlvbiwgcGFnZSkpKTtcbiAgfVxuXG4gIGxvYWRBbGxSZXN1bHRzKCk6IE9ic2VydmFibGU8UGFnZU51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmFjY3VtdWxhdG9yJC5waXBlKHN3aXRjaE1hcCgoYWNjdW11bGF0b3IpID0+IGl0ZXJhdG9yTmV4dFBhZ2VVbnRpbE1heFBhZ2VMb2FkTGltaXQoYWNjdW11bGF0b3IuaXRlbUl0ZXJhdGlvbikpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVySW5zdGFuY2U8VCwgRCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PFQ+ID0gRmlyZXN0b3JlRG9jdW1lbnQ8VD4+KGNvbmZpZzogRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVySW5zdGFuY2VJbml0Q29uZmlnPFQsIEQ+KTogRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVySW5zdGFuY2U8VCwgRD4ge1xuICByZXR1cm4gbmV3IERieEZpcmViYXNlQ29sbGVjdGlvbkxvYWRlckluc3RhbmNlPFQsIEQ+KGNvbmZpZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYnhGaXJlYmFzZUNvbGxlY3Rpb25Mb2FkZXJJbnN0YW5jZVdpdGhDb2xsZWN0aW9uPFQsIEQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudDxUPiA9IEZpcmVzdG9yZURvY3VtZW50PFQ+Pihjb2xsZWN0aW9uOiBNYXliZTxGaXJlc3RvcmVDb2xsZWN0aW9uTGlrZTxULCBEPj4pOiBEYnhGaXJlYmFzZUNvbGxlY3Rpb25Mb2FkZXJJbnN0YW5jZTxULCBEPiB7XG4gIHJldHVybiBuZXcgRGJ4RmlyZWJhc2VDb2xsZWN0aW9uTG9hZGVySW5zdGFuY2U8VCwgRD4oeyBjb2xsZWN0aW9uIH0pO1xufVxuIl19
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from './model.store.module';
|
|
2
2
|
export * from './store.collection';
|
|
3
|
+
export * from './store.collection.crud';
|
|
3
4
|
export * from './store.collection.change.directive';
|
|
4
5
|
export * from './store.collection.change.if.directive';
|
|
5
6
|
export * from './store.collection.directive';
|
|
@@ -14,4 +15,4 @@ export * from './store.subcollection';
|
|
|
14
15
|
export * from './store.subcollection.document';
|
|
15
16
|
export * from './store.subcollection.directive';
|
|
16
17
|
export * from './store.subcollection.rxjs';
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2RlbC9tb2R1bGVzL3N0b3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbW9kZWwuc3RvcmUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmUuY29sbGVjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JlLmNvbGxlY3Rpb24uY3J1ZCc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JlLmNvbGxlY3Rpb24uY2hhbmdlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JlLmNvbGxlY3Rpb24uY2hhbmdlLmlmLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JlLmNvbGxlY3Rpb24uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmUuY29sbGVjdGlvbi5saXN0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JlLmRvY3VtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmUuZG9jdW1lbnQuY3J1ZCc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JlLmRvY3VtZW50LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JlLmRvY3VtZW50LnR3b3dheS5rZXkuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmUuZG9jdW1lbnQudHdvd2F5LmtleS5zb3VyY2UuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmUuZG9jdW1lbnQudHdvd2F5LmtleS5zb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zdG9yZS5zdWJjb2xsZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmUuc3ViY29sbGVjdGlvbi5kb2N1bWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JlLnN1YmNvbGxlY3Rpb24uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmUuc3ViY29sbGVjdGlvbi5yeGpzJztcbiJdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { loadingStateFromObs, lazyFrom } from '@dereekb/rxjs';
|
|
2
|
+
import { asArray } from '@dereekb/util';
|
|
3
|
+
import { from, shareReplay } from 'rxjs';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a function for a store that DbxFirebaseDocumentStore captures the ModelFirebaseCreateFunction result and sets the key of the created value.
|
|
6
|
+
*
|
|
7
|
+
* @param store
|
|
8
|
+
* @param fn
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
export function firebaseCollectionStoreCreateFunction(store, fn) {
|
|
12
|
+
return (params) => loadingStateFromObs(lazyFrom(() => fn(params).then((result) => {
|
|
13
|
+
const modelKeys = asArray(result.modelKeys);
|
|
14
|
+
store.setCollectionKeys(modelKeys);
|
|
15
|
+
store.setCollectionMode('references'); // switch mode to references if not yet set
|
|
16
|
+
return result;
|
|
17
|
+
})));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a DbxfirebaseDocumentStoreCrudFunction from the input ModelFirebaseCrudFunction.
|
|
21
|
+
*
|
|
22
|
+
* @param fn
|
|
23
|
+
* @returns
|
|
24
|
+
*/
|
|
25
|
+
export function firebaseCollectionStoreCrudFunction(fn) {
|
|
26
|
+
return (params) => loadingStateFromObs(from(fn(params)).pipe(shareReplay(1)));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuY29sbGVjdGlvbi5jcnVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZpcmViYXNlL3NyYy9saWIvbW9kZWwvbW9kdWxlcy9zdG9yZS9zdG9yZS5jb2xsZWN0aW9uLmNydWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFnQixtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQWMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU1yRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUscUNBQXFDLENBQWlFLEtBQTJDLEVBQUUsRUFBcUM7SUFDdE0sT0FBTyxDQUFDLE1BQVMsRUFBRSxFQUFFLENBQ25CLG1CQUFtQixDQUNqQixRQUFRLENBQUMsR0FBRyxFQUFFLENBQ1osRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFNUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLDJDQUEyQztRQUVsRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FDSCxDQUNGLENBQUM7QUFDTixDQUFDO0FBSUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsbUNBQW1DLENBQWMsRUFBbUM7SUFDbEcsT0FBTyxDQUFDLE1BQVMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25GLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbEZpcmViYXNlQ3JlYXRlRnVuY3Rpb24sIE1vZGVsRmlyZWJhc2VDcnVkRnVuY3Rpb24sIE9uQ2FsbENyZWF0ZU1vZGVsUmVzdWx0IH0gZnJvbSAnQGRlcmVla2IvZmlyZWJhc2UnO1xuaW1wb3J0IHsgTG9hZGluZ1N0YXRlLCBsb2FkaW5nU3RhdGVGcm9tT2JzLCBsYXp5RnJvbSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERieEZpcmViYXNlQ29sbGVjdGlvblN0b3JlIH0gZnJvbSAnLi9zdG9yZS5jb2xsZWN0aW9uJztcblxuLy8gTUFSSzogQ3JlYXRlXG5leHBvcnQgdHlwZSBEYnhGaXJlYmFzZUNvbGxlY3Rpb25TdG9yZUNyZWF0ZUZ1bmN0aW9uPEksIE8gZXh0ZW5kcyBPbkNhbGxDcmVhdGVNb2RlbFJlc3VsdCA9IE9uQ2FsbENyZWF0ZU1vZGVsUmVzdWx0PiA9IChwYXJhbXM6IEkpID0+IE9ic2VydmFibGU8TG9hZGluZ1N0YXRlPE8+PjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gZm9yIGEgc3RvcmUgdGhhdCBEYnhGaXJlYmFzZURvY3VtZW50U3RvcmUgY2FwdHVyZXMgdGhlIE1vZGVsRmlyZWJhc2VDcmVhdGVGdW5jdGlvbiByZXN1bHQgYW5kIHNldHMgdGhlIGtleSBvZiB0aGUgY3JlYXRlZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gc3RvcmVcbiAqIEBwYXJhbSBmblxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpcmViYXNlQ29sbGVjdGlvblN0b3JlQ3JlYXRlRnVuY3Rpb248SSwgTyBleHRlbmRzIE9uQ2FsbENyZWF0ZU1vZGVsUmVzdWx0ID0gT25DYWxsQ3JlYXRlTW9kZWxSZXN1bHQ+KHN0b3JlOiBEYnhGaXJlYmFzZUNvbGxlY3Rpb25TdG9yZTxhbnksIGFueT4sIGZuOiBNb2RlbEZpcmViYXNlQ3JlYXRlRnVuY3Rpb248SSwgTz4pOiBEYnhGaXJlYmFzZUNvbGxlY3Rpb25TdG9yZUNyZWF0ZUZ1bmN0aW9uPEksIE8+IHtcbiAgcmV0dXJuIChwYXJhbXM6IEkpID0+XG4gICAgbG9hZGluZ1N0YXRlRnJvbU9icyhcbiAgICAgIGxhenlGcm9tKCgpID0+XG4gICAgICAgIGZuKHBhcmFtcykudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgY29uc3QgbW9kZWxLZXlzID0gYXNBcnJheShyZXN1bHQubW9kZWxLZXlzKTtcblxuICAgICAgICAgIHN0b3JlLnNldENvbGxlY3Rpb25LZXlzKG1vZGVsS2V5cyk7XG4gICAgICAgICAgc3RvcmUuc2V0Q29sbGVjdGlvbk1vZGUoJ3JlZmVyZW5jZXMnKTsgLy8gc3dpdGNoIG1vZGUgdG8gcmVmZXJlbmNlcyBpZiBub3QgeWV0IHNldFxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xufVxuXG5leHBvcnQgdHlwZSBEYnhGaXJlYmFzZUNvbGxlY3Rpb25TdG9yZUNydWRGdW5jdGlvbjxJLCBPID0gdm9pZD4gPSAoaW5wdXQ6IEkpID0+IE9ic2VydmFibGU8TG9hZGluZ1N0YXRlPE8+PjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgRGJ4ZmlyZWJhc2VEb2N1bWVudFN0b3JlQ3J1ZEZ1bmN0aW9uIGZyb20gdGhlIGlucHV0IE1vZGVsRmlyZWJhc2VDcnVkRnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGZuXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmlyZWJhc2VDb2xsZWN0aW9uU3RvcmVDcnVkRnVuY3Rpb248SSwgTyA9IHZvaWQ+KGZuOiBNb2RlbEZpcmViYXNlQ3J1ZEZ1bmN0aW9uPEksIE8+KTogRGJ4RmlyZWJhc2VDb2xsZWN0aW9uU3RvcmVDcnVkRnVuY3Rpb248SSwgTz4ge1xuICByZXR1cm4gKHBhcmFtczogSSkgPT4gbG9hZGluZ1N0YXRlRnJvbU9icyhmcm9tKGZuKHBhcmFtcykpLnBpcGUoc2hhcmVSZXBsYXkoMSkpKTtcbn1cbiJdfQ==
|