@dsivd/prestations-ng 16.1.0-beta.2 → 16.1.0-beta.3
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/CHANGELOG.md +32 -2
- package/dsivd-prestations-ng-v16.1.0-beta.3.tgz +0 -0
- package/esm2020/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.service.mjs +64 -23
- package/esm2020/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.component.mjs +9 -9
- package/esm2020/foehn-upload/foehn-multi-upload/multi-upload.service.mjs +65 -26
- package/esm2020/foehn-upload/foehn-upload-progress-bar/foehn-upload-progress-bar.component.mjs +14 -7
- package/esm2020/foehn-upload/foehn-upload-progress-bar/upload-progress.service.mjs +8 -4
- package/esm2020/foehn-upload/foehn-upload-progress-bar/upload-progress.type.mjs +5 -1
- package/esm2020/gesdem-action-recovery/gesdem-action-recovery-registration/gesdem-action-recovery-registration.component.mjs +14 -7
- package/esm2020/gesdem-action-recovery/gesdem-action-recovery.module.mjs +12 -4
- package/esm2020/sdk-dictionary/default-dictionary.mjs +20 -1
- package/fesm2015/dsivd-prestations-ng.mjs +202 -76
- package/fesm2015/dsivd-prestations-ng.mjs.map +1 -1
- package/fesm2020/dsivd-prestations-ng.mjs +200 -76
- package/fesm2020/dsivd-prestations-ng.mjs.map +1 -1
- package/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.service.d.ts +3 -0
- package/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.component.d.ts +1 -1
- package/foehn-upload/foehn-multi-upload/multi-upload.service.d.ts +3 -0
- package/foehn-upload/foehn-upload-progress-bar/foehn-upload-progress-bar.component.d.ts +3 -0
- package/foehn-upload/foehn-upload-progress-bar/upload-progress.service.d.ts +5 -5
- package/foehn-upload/foehn-upload-progress-bar/upload-progress.type.d.ts +2 -0
- package/gesdem-action-recovery/gesdem-action-recovery.module.d.ts +3 -1
- package/package.json +1 -1
- package/dsivd-prestations-ng-v16.1.0-beta.2.tgz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -39,12 +39,42 @@ A change is considered **breaking** if you have to change your code or update yo
|
|
|
39
39
|
- added field `cantonCode: string`
|
|
40
40
|
|
|
41
41
|
- [foehn-menu-item-transmit.component.ts](projects/prestations-ng/src/foehn-menu-prestation/foehn-menu-items/foehn-menu-item-transmit/foehn-menu-item-transmit.component.ts)
|
|
42
|
-
|
|
42
|
+
|
|
43
|
+
- added `@Ouput() clickedWithRemainingErrors = new EventEmitter<number>();` to be able to react to a click on the button when the form still has errors
|
|
44
|
+
|
|
45
|
+
- [default-dictionary.ts](projects/prestations-ng/src/sdk-dictionary/default-dictionary.ts)
|
|
46
|
+
- added keys:
|
|
47
|
+
- `foehn-uploader.files-saved-success-message` (default message: `{successfulDocumentsCount} fichier(s) sauvegardé(s) avec succès`)
|
|
48
|
+
- `foehn-uploader.transmission-error-message` (default message: `Une erreur est survenue lors de la transmission de vos documents`)
|
|
49
|
+
- `foehn-uploader.files-deleted-success-message` (default message: `Suppression du fichier {filename} réussie`)
|
|
50
|
+
- `foehn-uploader.delete-error-message` (default message: `Une erreur est survenue lors de la suppression de votre document`)
|
|
51
|
+
- `foehn-upload-progress-bar.group.upload` (default message: `Lot {packageIndex}/{nbPackages}: Enregistrement en cours...`)
|
|
52
|
+
- `foehn-upload-progress-bar.group.analysis` (default message: `Lot {packageIndex}/{nbPackages}: Analyse en cours... Merci de patienter.`)
|
|
53
|
+
- `foehn-upload-progress-bar.group.info` (default message: `Le téléchargement se fait en plusieurs lots en fonction du nombre de fichiers chargés`)
|
|
43
54
|
|
|
44
55
|
### Fixed
|
|
45
56
|
|
|
46
57
|
- [uploader.helper.ts](projects/prestations-ng/src/foehn-upload/uploader.helper.ts)
|
|
47
|
-
- handle `applicationInfo.configuration.document.fileMaxSizeInBytesByFormKey` correctly if the key is a regex
|
|
58
|
+
- handle `applicationInfo.configuration.document.fileMaxSizeInBytesByFormKey` correctly if the key is a regex
|
|
59
|
+
|
|
60
|
+
### Updated
|
|
61
|
+
|
|
62
|
+
- [multi-upload.service.ts](projects/prestations-ng/src/foehn-upload/foehn-multi-upload/multi-upload.service.ts)
|
|
63
|
+
- [bo-multi-upload.service.ts](projects/prestations-ng/src/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.service.ts)
|
|
64
|
+
|
|
65
|
+
- multiple document uploads are now done by packages of 3 files maximum
|
|
66
|
+
|
|
67
|
+
- [upload-progress.service.ts](projects/prestations-ng/src/foehn-upload/foehn-upload-progress-bar/upload-progress.service.ts)
|
|
68
|
+
|
|
69
|
+
- Function `manageUploadEventFilter` has two more parameters `packageIndex: number` (default: 0) and `nbPackages: number` (default: 1)
|
|
70
|
+
|
|
71
|
+
- [foehn-upload-progress-bar.component.html](projects/prestations-ng/src/foehn-upload/foehn-upload-progress-bar/foehn-upload-progress-bar.component.html)
|
|
72
|
+
|
|
73
|
+
- Upload and analysis messages have been updated to take into account packages upload
|
|
74
|
+
|
|
75
|
+
- [gesdem-action-recovery-registration.component.ts](projects/prestations-ng/src/gesdem-action-recovery/gesdem-action-recovery-registration/gesdem-action-recovery-registration.component.ts)
|
|
76
|
+
- reload form from the backend after a successfull registration
|
|
77
|
+
- added default labels in [default-dictionary.ts](projects/prestations-ng/src/sdk-dictionary/default-dictionary.ts)
|
|
48
78
|
|
|
49
79
|
## [16.0.7]
|
|
50
80
|
|
|
Binary file
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { throwError } from 'rxjs';
|
|
2
|
+
import { concat, throwError, toArray } from 'rxjs';
|
|
3
3
|
import { catchError, filter, map, tap } from 'rxjs/operators';
|
|
4
4
|
import { GrowlType } from '../../foehn-growl/growl-types';
|
|
5
5
|
import { UploaderHelper } from '../uploader.helper';
|
|
6
|
+
import { BoDocumentsWithErrors } from './bo-multi-upload.type';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "@angular/common/http";
|
|
8
9
|
import * as i2 from "../../foehn-growl/growl-broker.service";
|
|
@@ -18,46 +19,86 @@ export class BoMultiUploadService {
|
|
|
18
19
|
this.uploadProgressService = uploadProgressService;
|
|
19
20
|
// A way to have a unique Id per file
|
|
20
21
|
this.globalSequence = 0;
|
|
22
|
+
this.NB_CONCURRENT_FILES_TO_UPLOAD = 3;
|
|
23
|
+
this.mergeDocumentsWithErrors = (arrayOfDocumentsWithErrors) => {
|
|
24
|
+
const mergedResponse = new BoDocumentsWithErrors();
|
|
25
|
+
arrayOfDocumentsWithErrors.forEach(item => {
|
|
26
|
+
if (!!item.documents?.length) {
|
|
27
|
+
if (!mergedResponse.documents) {
|
|
28
|
+
mergedResponse.documents = [];
|
|
29
|
+
}
|
|
30
|
+
mergedResponse.documents = mergedResponse.documents.concat(item.documents);
|
|
31
|
+
}
|
|
32
|
+
if (!!item.errors?.length) {
|
|
33
|
+
if (!mergedResponse.errors) {
|
|
34
|
+
mergedResponse.errors = [];
|
|
35
|
+
}
|
|
36
|
+
mergedResponse.errors = mergedResponse.errors.concat(item.errors);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return mergedResponse;
|
|
40
|
+
};
|
|
21
41
|
this.uploaderHelper = new UploaderHelper(dictionaryService, applicationInfoService);
|
|
22
42
|
}
|
|
23
43
|
uploadDocuments(url, formKey, label, files, key, isMultiple, language, shouldDisplayFileSavedConfirmation) {
|
|
24
|
-
const
|
|
25
|
-
const
|
|
44
|
+
const filesToGroup = [...files];
|
|
45
|
+
const groupsOfFiles = [];
|
|
46
|
+
while (!!filesToGroup.length) {
|
|
47
|
+
groupsOfFiles.push(filesToGroup.splice(0, this.NB_CONCURRENT_FILES_TO_UPLOAD));
|
|
48
|
+
}
|
|
49
|
+
const arrayOfDocumentsWithErrorsObservable = groupsOfFiles.map((groupOfFile, index) => {
|
|
50
|
+
const documents = groupOfFile.map(file => this.uploaderHelper.mapToDocumentReference(file, label, key, isMultiple, new Date().getTime(), this.globalSequence++));
|
|
51
|
+
const formData = this.uploaderHelper.mapToFormData(documents, formKey, language);
|
|
52
|
+
return this.getDocumentsWithErrorsObservable(url, formData, shouldDisplayFileSavedConfirmation, index, groupsOfFiles.length);
|
|
53
|
+
});
|
|
54
|
+
if (arrayOfDocumentsWithErrorsObservable.length === 1) {
|
|
55
|
+
return arrayOfDocumentsWithErrorsObservable[0];
|
|
56
|
+
}
|
|
57
|
+
// concat() operator sequentially emits all values from the given Observable and then proceed to the next one.
|
|
58
|
+
return concat(...arrayOfDocumentsWithErrorsObservable).pipe(
|
|
59
|
+
// toArray() operator collects all the values emitted by the source observable into an array and sends it to the observer
|
|
60
|
+
toArray(), map(this.mergeDocumentsWithErrors.bind(this)));
|
|
61
|
+
}
|
|
62
|
+
deleteDocument(baseUrl, document) {
|
|
63
|
+
const url = `${baseUrl}/${document.reference}`;
|
|
64
|
+
return this.httpClient.delete(url).pipe(
|
|
65
|
+
// Reflect the document once the update is done to ease chaining observables.
|
|
66
|
+
map(() => document), tap(() => {
|
|
67
|
+
const message = this.dictionaryService.getKeySync('foehn-uploader.files-deleted-success-message', { filename: document.filename });
|
|
68
|
+
this.growlService.addWithType(GrowlType.SUCCESS, message);
|
|
69
|
+
}), catchError((e) => {
|
|
70
|
+
const message = this.dictionaryService.getKeySync('foehn-uploader.delete-error-message');
|
|
71
|
+
this.growlService.addWithType(GrowlType.DANGER, message);
|
|
72
|
+
return throwError(() => e);
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
getDownloadUrl(baseUrl, document) {
|
|
76
|
+
return `${baseUrl}/${document.reference}`;
|
|
77
|
+
}
|
|
78
|
+
getDocumentsWithErrorsObservable(url, formData, shouldDisplayFileSavedConfirmation, packageIndex = 0, nbPackages = 1) {
|
|
26
79
|
return this.httpClient
|
|
27
80
|
.post(url, formData, {
|
|
28
81
|
reportProgress: true,
|
|
29
82
|
observe: 'events',
|
|
30
83
|
responseType: 'json'
|
|
31
84
|
})
|
|
32
|
-
.pipe(filter((e) => this.uploadProgressService.manageUploadEventFilter(e)), map((e) => e.body), tap(result => {
|
|
85
|
+
.pipe(filter((e) => this.uploadProgressService.manageUploadEventFilter(e, packageIndex, nbPackages)), map((e) => e.body), tap(result => {
|
|
33
86
|
const successfulDocumentsCount = result.documents && result.documents.length;
|
|
34
87
|
if (successfulDocumentsCount &&
|
|
35
88
|
shouldDisplayFileSavedConfirmation) {
|
|
36
|
-
const message =
|
|
89
|
+
const message = this.dictionaryService.getKeySync('foehn-uploader.files-saved-success-message', {
|
|
90
|
+
successfulDocumentsCount: successfulDocumentsCount.toString()
|
|
91
|
+
});
|
|
37
92
|
this.growlService.addWithType(GrowlType.SUCCESS, message);
|
|
38
93
|
}
|
|
39
94
|
}), catchError((e) => {
|
|
40
|
-
|
|
95
|
+
this.uploadProgressService.analysisProgress.next(false);
|
|
96
|
+
this.uploadProgressService.showProgress.next(false);
|
|
97
|
+
const message = this.dictionaryService.getKeySync('foehn-uploader.transmission-error-message');
|
|
41
98
|
this.growlService.addWithType(GrowlType.DANGER, message);
|
|
42
99
|
return throwError(() => e);
|
|
43
100
|
}));
|
|
44
101
|
}
|
|
45
|
-
deleteDocument(baseUrl, document) {
|
|
46
|
-
const url = `${baseUrl}/${document.reference}`;
|
|
47
|
-
return this.httpClient.delete(url).pipe(
|
|
48
|
-
// Reflect the document once the update is done to ease chaining observables.
|
|
49
|
-
map(() => document), tap(() => {
|
|
50
|
-
const message = `Suppression du fichier ${document.filename} réussie`;
|
|
51
|
-
this.growlService.addWithType(GrowlType.SUCCESS, message);
|
|
52
|
-
}), catchError((e) => {
|
|
53
|
-
const message = 'Une erreur est survenue lors de la suppression de votre document';
|
|
54
|
-
this.growlService.addWithType(GrowlType.DANGER, message);
|
|
55
|
-
return throwError(() => e);
|
|
56
|
-
}));
|
|
57
|
-
}
|
|
58
|
-
getDownloadUrl(baseUrl, document) {
|
|
59
|
-
return `${baseUrl}/${document.reference}`;
|
|
60
|
-
}
|
|
61
102
|
}
|
|
62
103
|
BoMultiUploadService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BoMultiUploadService, deps: [{ token: i1.HttpClient }, { token: i2.GrowlBrokerService }, { token: i3.ApplicationInfoService }, { token: i4.SdkDictionaryService }, { token: i5.UploadProgressService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
63
104
|
BoMultiUploadService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BoMultiUploadService, providedIn: 'root' });
|
|
@@ -67,4 +108,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
67
108
|
providedIn: 'root'
|
|
68
109
|
}]
|
|
69
110
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.GrowlBrokerService }, { type: i3.ApplicationInfoService }, { type: i4.SdkDictionaryService }, { type: i5.UploadProgressService }]; } });
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm8tbXVsdGktdXBsb2FkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tdXBsb2FkL2ZvZWhuLWJvLW11bHRpLXVwbG9hZC9iby1tdWx0aS11cGxvYWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUsxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7QUFNcEQsTUFBTSxPQUFPLG9CQUFvQjtJQUs3QixZQUNZLFVBQXNCLEVBQ3RCLFlBQWdDLEVBQ2hDLHNCQUE4QyxFQUM5QyxpQkFBdUMsRUFDdkMscUJBQTRDO1FBSjVDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ2hDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBVHhELHFDQUFxQztRQUM3QixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQVV2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUNwQyxpQkFBaUIsRUFDakIsc0JBQXNCLENBQ3pCLENBQUM7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUNYLEdBQVcsRUFDWCxPQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQWEsRUFDYixHQUFXLEVBQ1gsVUFBbUIsRUFDbkIsUUFBZ0Is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Q0FBQzs7aUhBeEdRLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRmpCLE1BQU07MkZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFdmVudCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgR3Jvd2xCcm9rZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZm9laG4tZ3Jvd2wvZ3Jvd2wtYnJva2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3Jvd2xUeXBlIH0gZnJvbSAnLi4vLi4vZm9laG4tZ3Jvd2wvZ3Jvd2wtdHlwZXMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25JbmZvU2VydmljZSB9IGZyb20gJy4uLy4uL3Nkay1hcHBpbmZvL2FwcGxpY2F0aW9uLWluZm8uc2VydmljZSc7XG5pbXBvcnQgeyBTZGtEaWN0aW9uYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3Nkay1kaWN0aW9uYXJ5L3Nkay1kaWN0aW9uYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRG9jdW1lbnRSZWZlcmVuY2UgfSBmcm9tICcuLi9kb2N1bWVudC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgVXBsb2FkUHJvZ3Jlc3NTZXJ2aWNlIH0gZnJvbSAnLi4vZm9laG4tdXBsb2FkLXByb2dyZXNzLWJhci91cGxvYWQtcHJvZ3Jlc3Muc2VydmljZSc7XG5pbXBvcnQgeyBVcGxvYWRlckhlbHBlciB9IGZyb20gJy4uL3VwbG9hZGVyLmhlbHBlcic7XG5pbXBvcnQgeyBCb0RvY3VtZW50c1dpdGhFcnJvcnMgfSBmcm9tICcuL2JvLW11bHRpLXVwbG9hZC50eXBlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCb011bHRpVXBsb2FkU2VydmljZSB7XG4gICAgLy8gQSB3YXkgdG8gaGF2ZSBhIHVuaXF1ZSBJZCBwZXIgZmlsZVxuICAgIHByaXZhdGUgZ2xvYmFsU2VxdWVuY2UgPSAwO1xuICAgIHByaXZhdGUgdXBsb2FkZXJIZWxwZXI6IFVwbG9hZGVySGVscGVyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSBncm93bFNlcnZpY2U6IEdyb3dsQnJva2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBsaWNhdGlvbkluZm9TZXJ2aWNlOiBBcHBsaWNhdGlvbkluZm9TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpY3Rpb25hcnlTZXJ2aWNlOiBTZGtEaWN0aW9uYXJ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1cGxvYWRQcm9ncmVzc1NlcnZpY2U6IFVwbG9hZFByb2dyZXNzU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLnVwbG9hZGVySGVscGVyID0gbmV3IFVwbG9hZGVySGVscGVyKFxuICAgICAgICAgICAgZGljdGlvbmFyeVNlcnZpY2UsXG4gICAgICAgICAgICBhcHBsaWNhdGlvbkluZm9TZXJ2aWNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBsb2FkRG9jdW1lbnRzKFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgZm9ybUtleTogc3RyaW5nLFxuICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICBmaWxlczogRmlsZVtdLFxuICAgICAgICBrZXk6IHN0cmluZyxcbiAgICAgICAgaXNNdWx0aXBsZTogYm9vbGVhbixcbiAgICAgICAgbGFuZ3VhZ2U6IHN0cmluZyxcbiAgICAgICAgc2hvdWxkRGlzcGxheUZpbGVTYXZlZENvbmZpcm1hdGlvbjogYm9vbGVhblxuICAgICk6IE9ic2VydmFibGU8Qm9Eb2N1bWVudHNXaXRoRXJyb3JzPiB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50cyA9IGZpbGVzLm1hcChmaWxlID0+XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVySGVscGVyLm1hcFRvRG9jdW1lbnRSZWZlcmVuY2UoXG4gICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgaXNNdWx0aXBsZSxcbiAgICAgICAgICAgICAgICBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbFNlcXVlbmNlKytcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLnVwbG9hZGVySGVscGVyLm1hcFRvRm9ybURhdGEoXG4gICAgICAgICAgICBkb2N1bWVudHMsXG4gICAgICAgICAgICBmb3JtS2V5LFxuICAgICAgICAgICAgbGFuZ3VhZ2VcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3Q8Qm9Eb2N1bWVudHNXaXRoRXJyb3JzPih1cmwsIGZvcm1EYXRhLCB7XG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2V2ZW50cycsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbidcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGU6IEh0dHBFdmVudDxCb0RvY3VtZW50c1dpdGhFcnJvcnM+KSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzU2VydmljZS5tYW5hZ2VVcGxvYWRFdmVudEZpbHRlcihlKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWFwKFxuICAgICAgICAgICAgICAgICAgICAoZTogSHR0cEV2ZW50PEJvRG9jdW1lbnRzV2l0aEVycm9ycz4pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoZSBhcyBIdHRwUmVzcG9uc2U8Qm9Eb2N1bWVudHNXaXRoRXJyb3JzPikuYm9keVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NmdWxEb2N1bWVudHNDb3VudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZG9jdW1lbnRzICYmIHJlc3VsdC5kb2N1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsRG9jdW1lbnRzQ291bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZERpc3BsYXlGaWxlU2F2ZWRDb25maXJtYXRpb25cbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYCR7c3VjY2Vzc2Z1bERvY3VtZW50c0NvdW50fSBmaWNoaWVyKHMpIHNhdXZlZ2FyZMOpKHMpIGF2ZWMgc3VjY8Ooc2A7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3dsU2VydmljZS5hZGRXaXRoVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm93bFR5cGUuU1VDQ0VTUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSBsb3JzIGRlIGxhIHRyYW5zbWlzc2lvbiBkZSB2b3MgZG9jdW1lbnRzJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm93bFNlcnZpY2UuYWRkV2l0aFR5cGUoR3Jvd2xUeXBlLkRBTkdFUiwgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGRlbGV0ZURvY3VtZW50KFxuICAgICAgICBiYXNlVXJsOiBzdHJpbmcsXG4gICAgICAgIGRvY3VtZW50OiBEb2N1bWVudFJlZmVyZW5jZVxuICAgICk6IE9ic2VydmFibGU8RG9jdW1lbnRSZWZlcmVuY2U+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vJHtkb2N1bWVudC5yZWZlcmVuY2V9YDtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlbGV0ZSh1cmwpLnBpcGUoXG4gICAgICAgICAgICAvLyBSZWZsZWN0IHRoZSBkb2N1bWVudCBvbmNlIHRoZSB1cGRhdGUgaXMgZG9uZSB0byBlYXNlIGNoYWluaW5nIG9ic2VydmFibGVzLlxuICAgICAgICAgICAgbWFwKCgpID0+IGRvY3VtZW50KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBTdXBwcmVzc2lvbiBkdSBmaWNoaWVyICR7ZG9jdW1lbnQuZmlsZW5hbWV9IHLDqXVzc2llYDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3dsU2VydmljZS5hZGRXaXRoVHlwZShHcm93bFR5cGUuU1VDQ0VTUywgbWVzc2FnZSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGU6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgJ1VuZSBlcnJldXIgZXN0IHN1cnZlbnVlIGxvcnMgZGUgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgZG9jdW1lbnQnO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xTZXJ2aWNlLmFkZFdpdGhUeXBlKEdyb3dsVHlwZS5EQU5HRVIsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXREb3dubG9hZFVybChiYXNlVXJsOiBzdHJpbmcsIGRvY3VtZW50OiBEb2N1bWVudFJlZmVyZW5jZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke2RvY3VtZW50LnJlZmVyZW5jZX1gO1xuICAgIH1cbn1cbiJdfQ==
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm8tbXVsdGktdXBsb2FkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tdXBsb2FkL2ZvZWhuLWJvLW11bHRpLXVwbG9hZC9iby1tdWx0aS11cGxvYWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQWMsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQUsvRCxNQUFNLE9BQU8sb0JBQW9CO0lBTTdCLFlBQ1ksVUFBc0IsRUFDdEIsWUFBZ0MsRUFDaEMsc0JBQThDLEVBQzlDLGlCQUF1QyxFQUN2QyxxQkFBNEM7UUFKNUMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDaEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFWeEQscUNBQXFDO1FBQzdCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBRVYsa0NBQTZCLEdBQUcsQ0FBQyxDQUFDO1FBZ0szQyw2QkFBd0IsR0FBRyxDQUMvQiwwQkFBbUQsRUFDOUIsRUFBRTtZQUN2QixNQUFNLGNBQWMsR0FBMEIsSUFBSSxxQkFB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Qy9CLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDVixDQUFDOztpSEFsS1Esb0JBQW9CO3FIQUFwQixvQkFBb0IsY0FGakIsTUFBTTsyRkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEV2ZW50LCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb25jYXQsIE9ic2VydmFibGUsIHRocm93RXJyb3IsIHRvQXJyYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEdyb3dsQnJva2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2ZvZWhuLWdyb3dsL2dyb3dsLWJyb2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IEdyb3dsVHlwZSB9IGZyb20gJy4uLy4uL2ZvZWhuLWdyb3dsL2dyb3dsLXR5cGVzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZGstYXBwaW5mby9hcHBsaWNhdGlvbi1pbmZvLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2RrRGljdGlvbmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZGstZGljdGlvbmFyeS9zZGstZGljdGlvbmFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IERvY3VtZW50UmVmZXJlbmNlIH0gZnJvbSAnLi4vZG9jdW1lbnQtcmVmZXJlbmNlJztcbmltcG9ydCB7IFVwbG9hZFByb2dyZXNzU2VydmljZSB9IGZyb20gJy4uL2ZvZWhuLXVwbG9hZC1wcm9ncmVzcy1iYXIvdXBsb2FkLXByb2dyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXBsb2FkZXJIZWxwZXIgfSBmcm9tICcuLi91cGxvYWRlci5oZWxwZXInO1xuaW1wb3J0IHsgQm9Eb2N1bWVudHNXaXRoRXJyb3JzIH0gZnJvbSAnLi9iby1tdWx0aS11cGxvYWQudHlwZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQm9NdWx0aVVwbG9hZFNlcnZpY2Uge1xuICAgIC8vIEEgd2F5IHRvIGhhdmUgYSB1bmlxdWUgSWQgcGVyIGZpbGVcbiAgICBwcml2YXRlIGdsb2JhbFNlcXVlbmNlID0gMDtcbiAgICBwcml2YXRlIHVwbG9hZGVySGVscGVyOiBVcGxvYWRlckhlbHBlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE5CX0NPTkNVUlJFTlRfRklMRVNfVE9fVVBMT0FEID0gMztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgIHByaXZhdGUgZ3Jvd2xTZXJ2aWNlOiBHcm93bEJyb2tlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBwbGljYXRpb25JbmZvU2VydmljZTogQXBwbGljYXRpb25JbmZvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWN0aW9uYXJ5U2VydmljZTogU2RrRGljdGlvbmFyeVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXBsb2FkUHJvZ3Jlc3NTZXJ2aWNlOiBVcGxvYWRQcm9ncmVzc1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy51cGxvYWRlckhlbHBlciA9IG5ldyBVcGxvYWRlckhlbHBlcihcbiAgICAgICAgICAgIGRpY3Rpb25hcnlTZXJ2aWNlLFxuICAgICAgICAgICAgYXBwbGljYXRpb25JbmZvU2VydmljZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHVwbG9hZERvY3VtZW50cyhcbiAgICAgICAgdXJsOiBzdHJpbmcsXG4gICAgICAgIGZvcm1LZXk6IHN0cmluZyxcbiAgICAgICAgbGFiZWw6IHN0cmluZyxcbiAgICAgICAgZmlsZXM6IEZpbGVbXSxcbiAgICAgICAga2V5OiBzdHJpbmcsXG4gICAgICAgIGlzTXVsdGlwbGU6IGJvb2xlYW4sXG4gICAgICAgIGxhbmd1YWdlOiBzdHJpbmcsXG4gICAgICAgIHNob3VsZERpc3BsYXlGaWxlU2F2ZWRDb25maXJtYXRpb246IGJvb2xlYW5cbiAgICApOiBPYnNlcnZhYmxlPEJvRG9jdW1lbnRzV2l0aEVycm9ycz4ge1xuICAgICAgICBjb25zdCBmaWxlc1RvR3JvdXAgPSBbLi4uZmlsZXNdO1xuICAgICAgICBjb25zdCBncm91cHNPZkZpbGVzOiBGaWxlW11bXSA9IFtdO1xuXG4gICAgICAgIHdoaWxlICghIWZpbGVzVG9Hcm91cC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGdyb3Vwc09mRmlsZXMucHVzaChcbiAgICAgICAgICAgICAgICBmaWxlc1RvR3JvdXAuc3BsaWNlKDAsIHRoaXMuTkJfQ09OQ1VSUkVOVF9GSUxFU19UT19VUExPQUQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyYXlPZkRvY3VtZW50c1dpdGhFcnJvcnNPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPEJvRG9jdW1lbnRzV2l0aEVycm9ycz5bXSA9IGdyb3Vwc09mRmlsZXMubWFwKFxuICAgICAgICAgICAgKGdyb3VwT2ZGaWxlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50cyA9IGdyb3VwT2ZGaWxlLm1hcChmaWxlID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZXJIZWxwZXIubWFwVG9Eb2N1bWVudFJlZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTXVsdGlwbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2xvYmFsU2VxdWVuY2UrK1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMudXBsb2FkZXJIZWxwZXIubWFwVG9Gb3JtRGF0YShcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICBmb3JtS2V5LFxuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RG9jdW1lbnRzV2l0aEVycm9yc09ic2VydmFibGUoXG4gICAgICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZERpc3BsYXlGaWxlU2F2ZWRDb25maXJtYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBncm91cHNPZkZpbGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFycmF5T2ZEb2N1bWVudHNXaXRoRXJyb3JzT2JzZXJ2YWJsZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheU9mRG9jdW1lbnRzV2l0aEVycm9yc09ic2VydmFibGVbMF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyAgY29uY2F0KCkgb3BlcmF0b3Igc2VxdWVudGlhbGx5IGVtaXRzIGFsbCB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gT2JzZXJ2YWJsZSBhbmQgdGhlbiBwcm9jZWVkIHRvIHRoZSBuZXh0IG9uZS5cbiAgICAgICAgcmV0dXJuIGNvbmNhdCguLi5hcnJheU9mRG9jdW1lbnRzV2l0aEVycm9yc09ic2VydmFibGUpLnBpcGUoXG4gICAgICAgICAgICAvLyAgdG9BcnJheSgpIG9wZXJhdG9yIGNvbGxlY3RzIGFsbCB0aGUgdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBvYnNlcnZhYmxlIGludG8gYW4gYXJyYXkgYW5kIHNlbmRzIGl0IHRvIHRoZSBvYnNlcnZlclxuICAgICAgICAgICAgdG9BcnJheSgpLFxuICAgICAgICAgICAgbWFwKHRoaXMubWVyZ2VEb2N1bWVudHNXaXRoRXJyb3JzLmJpbmQodGhpcykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZGVsZXRlRG9jdW1lbnQoXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgZG9jdW1lbnQ6IERvY3VtZW50UmVmZXJlbmNlXG4gICAgKTogT2JzZXJ2YWJsZTxEb2N1bWVudFJlZmVyZW5jZT4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHtiYXNlVXJsfS8ke2RvY3VtZW50LnJlZmVyZW5jZX1gO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZGVsZXRlKHVybCkucGlwZShcbiAgICAgICAgICAgIC8vIFJlZmxlY3QgdGhlIGRvY3VtZW50IG9uY2UgdGhlIHVwZGF0ZSBpcyBkb25lIHRvIGVhc2UgY2hhaW5pbmcgb2JzZXJ2YWJsZXMuXG4gICAgICAgICAgICBtYXAoKCkgPT4gZG9jdW1lbnQpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXRLZXlTeW5jKFxuICAgICAgICAgICAgICAgICAgICAnZm9laG4tdXBsb2FkZXIuZmlsZXMtZGVsZXRlZC1zdWNjZXNzLW1lc3NhZ2UnLFxuICAgICAgICAgICAgICAgICAgICB7IGZpbGVuYW1lOiBkb2N1bWVudC5maWxlbmFtZSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3dsU2VydmljZS5hZGRXaXRoVHlwZShHcm93bFR5cGUuU1VDQ0VTUywgbWVzc2FnZSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGU6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXRLZXlTeW5jKFxuICAgICAgICAgICAgICAgICAgICAnZm9laG4tdXBsb2FkZXIuZGVsZXRlLWVycm9yLW1lc3NhZ2UnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3dsU2VydmljZS5hZGRXaXRoVHlwZShHcm93bFR5cGUuREFOR0VSLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0RG93bmxvYWRVcmwoYmFzZVVybDogc3RyaW5nLCBkb2N1bWVudDogRG9jdW1lbnRSZWZlcmVuY2UpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7YmFzZVVybH0vJHtkb2N1bWVudC5yZWZlcmVuY2V9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERvY3VtZW50c1dpdGhFcnJvcnNPYnNlcnZhYmxlKFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgZm9ybURhdGE6IEZvcm1EYXRhLFxuICAgICAgICBzaG91bGREaXNwbGF5RmlsZVNhdmVkQ29uZmlybWF0aW9uOiBib29sZWFuLFxuICAgICAgICBwYWNrYWdlSW5kZXg6IG51bWJlciA9IDAsXG4gICAgICAgIG5iUGFja2FnZXM6IG51bWJlciA9IDFcbiAgICApOiBPYnNlcnZhYmxlPEJvRG9jdW1lbnRzV2l0aEVycm9ycz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdDxCb0RvY3VtZW50c1dpdGhFcnJvcnM+KHVybCwgZm9ybURhdGEsIHtcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiAnZXZlbnRzJyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZTogSHR0cEV2ZW50PEJvRG9jdW1lbnRzV2l0aEVycm9ycz4pID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3NTZXJ2aWNlLm1hbmFnZVVwbG9hZEV2ZW50RmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5iUGFja2FnZXNcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWFwKFxuICAgICAgICAgICAgICAgICAgICAoZTogSHR0cEV2ZW50PEJvRG9jdW1lbnRzV2l0aEVycm9ycz4pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoZSBhcyBIdHRwUmVzcG9uc2U8Qm9Eb2N1bWVudHNXaXRoRXJyb3JzPikuYm9keVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NmdWxEb2N1bWVudHNDb3VudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZG9jdW1lbnRzICYmIHJlc3VsdC5kb2N1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsRG9jdW1lbnRzQ291bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZERpc3BsYXlGaWxlU2F2ZWRDb25maXJtYXRpb25cbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXRLZXlTeW5jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb2Vobi11cGxvYWRlci5maWxlcy1zYXZlZC1zdWNjZXNzLW1lc3NhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bERvY3VtZW50c0NvdW50OiBzdWNjZXNzZnVsRG9jdW1lbnRzQ291bnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3dsU2VydmljZS5hZGRXaXRoVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm93bFR5cGUuU1VDQ0VTUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzU2VydmljZS5hbmFseXNpc1Byb2dyZXNzLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzU2VydmljZS5zaG93UHJvZ3Jlc3MubmV4dChmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5U3luYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb2Vobi11cGxvYWRlci50cmFuc21pc3Npb24tZXJyb3ItbWVzc2FnZSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm93bFNlcnZpY2UuYWRkV2l0aFR5cGUoR3Jvd2xUeXBlLkRBTkdFUiwgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VEb2N1bWVudHNXaXRoRXJyb3JzID0gKFxuICAgICAgICBhcnJheU9mRG9jdW1lbnRzV2l0aEVycm9yczogQm9Eb2N1bWVudHNXaXRoRXJyb3JzW11cbiAgICApOiBCb0RvY3VtZW50c1dpdGhFcnJvcnMgPT4ge1xuICAgICAgICBjb25zdCBtZXJnZWRSZXNwb25zZTogQm9Eb2N1bWVudHNXaXRoRXJyb3JzID0gbmV3IEJvRG9jdW1lbnRzV2l0aEVycm9ycygpO1xuICAgICAgICBhcnJheU9mRG9jdW1lbnRzV2l0aEVycm9ycy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKCEhaXRlbS5kb2N1bWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkUmVzcG9uc2UuZG9jdW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lcmdlZFJlc3BvbnNlLmRvY3VtZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtZXJnZWRSZXNwb25zZS5kb2N1bWVudHMgPSBtZXJnZWRSZXNwb25zZS5kb2N1bWVudHMuY29uY2F0KFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRvY3VtZW50c1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFpdGVtLmVycm9ycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRSZXNwb25zZS5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkUmVzcG9uc2UuZXJyb3JzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1lcmdlZFJlc3BvbnNlLmVycm9ycyA9IG1lcmdlZFJlc3BvbnNlLmVycm9ycy5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZXJyb3JzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZXJnZWRSZXNwb25zZTtcbiAgICB9O1xufVxuIl19
|
|
@@ -112,6 +112,14 @@ export class FoehnBoMultiUploadComponent extends AbstractFoehnUploaderComponent
|
|
|
112
112
|
this.model = [...this.model, ...(documents || [])];
|
|
113
113
|
this.triggerUserInput(this.model);
|
|
114
114
|
}
|
|
115
|
+
removeDocumentFromModel(document) {
|
|
116
|
+
const index = this.model.indexOf(document);
|
|
117
|
+
if (index > -1) {
|
|
118
|
+
this.model.splice(index, 1);
|
|
119
|
+
this.model = [...this.model];
|
|
120
|
+
this.triggerUserInput(this.model);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
115
123
|
displayErrorsFromServer(errors) {
|
|
116
124
|
if (!errors || !errors.length) {
|
|
117
125
|
// PRESTAKIT-309: Simulate user interaction with component
|
|
@@ -123,14 +131,6 @@ export class FoehnBoMultiUploadComponent extends AbstractFoehnUploaderComponent
|
|
|
123
131
|
errors.forEach(error => this.uploaderHelper.addCustomErrorOrDefault(this.name, newErrors, `${error.errorCode}`, error.label, this.customErrors, this.overrideAcceptedExtensions, this.overrideMaxFileNameLength, this.overrideIllegalCharacters));
|
|
124
132
|
this.refreshErrors([newErrors, true]);
|
|
125
133
|
}
|
|
126
|
-
removeDocumentFromModel(document) {
|
|
127
|
-
const index = this.model.indexOf(document);
|
|
128
|
-
if (index > -1) {
|
|
129
|
-
this.model.splice(index, 1);
|
|
130
|
-
this.model = [...this.model];
|
|
131
|
-
this.triggerUserInput(this.model);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
134
|
manageSingleFile(files) {
|
|
135
135
|
// Edge browser lets you drop files from dialog box when selecting a file.
|
|
136
136
|
// We need to make sure we only keep last selected file from user
|
|
@@ -175,4 +175,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
175
175
|
}], documentDeleted: [{
|
|
176
176
|
type: Output
|
|
177
177
|
}] } });
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tYm8tbXVsdGktdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi11cGxvYWQvZm9laG4tYm8tbXVsdGktdXBsb2FkL2ZvZWhuLWJvLW11bHRpLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tdXBsb2FkL2ZvZWhuLWJvLW11bHRpLXVwbG9hZC9mb2Vobi1iby1tdWx0aS11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQ0gsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUNILFlBQVksRUFDZixNQUFNLGdCQUFnQixDQUFDO0FBSXhCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBSTlFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBaUJqRSxNQUFNLE9BQU8sMkJBQ1QsU0FBUSw4QkFBbUQ7SUFtQjNELFlBQ0ksb0JBQTBDLEVBQ2hDLHNCQUE4QyxFQUM5QyxtQkFBNkMsRUFDN0MsaUJBQXVDLEVBQ3ZDLFlBQWdDO1FBRTFDLEtBQUssQ0FDRCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixZQUFZ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QyxDQUFDO0lBQzdCLENBQUM7O3dIQTVOUSwyQkFBMkI7NEdBQTNCLDJCQUEyQixtUUFWekI7UUFDUDtZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztZQUMxRCxLQUFLLEVBQUUsSUFBSTtTQUNkO1FBQ0QsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFO1FBQ2pFLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRTtLQUN0RSxpREMxQ0wsK25JQStIQTsyRkRuRmEsMkJBQTJCO2tCQWR2QyxTQUFTOytCQUNJLHVCQUF1QixhQUd0Qjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQzs0QkFDMUQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7d0JBQ0QsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFO3dCQUNqRSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUU7cUJBQ3RFOzJQQU1ELFNBQVM7c0JBRFIsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLGtDQUFrQztzQkFEakMsS0FBSztnQkFJTixlQUFlO3NCQURkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIGNhdGNoRXJyb3IsXG4gICAgZmlsdGVyLFxuICAgIG1lcmdlTWFwLFxuICAgIHRhcCxcbiAgICB0aHJvdHRsZVRpbWVcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGb2VobkNvbmZpcm1Nb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9mb2Vobi1jb25maXJtLW1vZGFsL2ZvZWhuLWNvbmZpcm0tbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBHcm93bEJyb2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9mb2Vobi1ncm93bC9ncm93bC1icm9rZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGb2VobklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9laG4taW5wdXQvZm9laG4taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1FcnJvciB9IGZyb20gJy4uLy4uL2Zvcm0tZXJyb3InO1xuaW1wb3J0IHsgQXBwbGljYXRpb25JbmZvU2VydmljZSB9IGZyb20gJy4uLy4uL3Nkay1hcHBpbmZvL2FwcGxpY2F0aW9uLWluZm8uc2VydmljZSc7XG5pbXBvcnQgeyBTZGtEaWN0aW9uYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3Nkay1kaWN0aW9uYXJ5L3Nkay1kaWN0aW9uYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RGb2VoblVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vYWJzdHJhY3QtZm9laG4tdXBsb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERvY3VtZW50UmVmZXJlbmNlIH0gZnJvbSAnLi4vZG9jdW1lbnQtcmVmZXJlbmNlJztcbmltcG9ydCB7IFVwbG9hZFByb2dyZXNzU2VydmljZSB9IGZyb20gJy4uL2ZvZWhuLXVwbG9hZC1wcm9ncmVzcy1iYXIvdXBsb2FkLXByb2dyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQm9NdWx0aVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuL2JvLW11bHRpLXVwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IEJvRG9jdW1lbnRFcnJvciB9IGZyb20gJy4vYm8tbXVsdGktdXBsb2FkLnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZvZWhuLWJvLW11bHRpLXVwbG9hZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZvZWhuLWJvLW11bHRpLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4uL2ZvZWhuLXVwbG9hZC5jb21wb25lbnQuY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZvZWhuSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb2VobkJvTXVsdGlVcGxvYWRDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgeyBwcm92aWRlOiBCb011bHRpVXBsb2FkU2VydmljZSwgdXNlQ2xhc3M6IEJvTXVsdGlVcGxvYWRTZXJ2aWNlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogVXBsb2FkUHJvZ3Jlc3NTZXJ2aWNlLCB1c2VDbGFzczogVXBsb2FkUHJvZ3Jlc3NTZXJ2aWNlIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvZWhuQm9NdWx0aVVwbG9hZENvbXBvbmVudFxuICAgIGV4dGVuZHMgQWJzdHJhY3RGb2VoblVwbG9hZGVyQ29tcG9uZW50PERvY3VtZW50UmVmZXJlbmNlW10+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KClcbiAgICB1cGxvYWRVcmw6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgZGVsZXRlVXJsOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIGRvd25sb2FkVXJsOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHNob3VsZERpc3BsYXlGaWxlU2F2ZWRDb25maXJtYXRpb24gPSB0cnVlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgZG9jdW1lbnREZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEb2N1bWVudFJlZmVyZW5jZT4oKTtcblxuICAgIGJvTXVsdGlVcGxvYWRTZXJ2aWNlOiBCb011bHRpVXBsb2FkU2VydmljZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBib011bHRpVXBsb2FkU2VydmljZTogQm9NdWx0aVVwbG9hZFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBhcHBsaWNhdGlvbkluZm9TZXJ2aWNlOiBBcHBsaWNhdGlvbkluZm9TZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgY29uZmlybU1vZGFsU2VydmljZTogRm9laG5Db25maXJtTW9kYWxTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgZGljdGlvbmFyeVNlcnZpY2U6IFNka0RpY3Rpb25hcnlTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgZ3Jvd2xTZXJ2aWNlOiBHcm93bEJyb2tlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBhcHBsaWNhdGlvbkluZm9TZXJ2aWNlLFxuICAgICAgICAgICAgY29uZmlybU1vZGFsU2VydmljZSxcbiAgICAgICAgICAgIGRpY3Rpb25hcnlTZXJ2aWNlLFxuICAgICAgICAgICAgZ3Jvd2xTZXJ2aWNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYm9NdWx0aVVwbG9hZFNlcnZpY2UgPSBib011bHRpVXBsb2FkU2VydmljZTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICAvLyBBZGQgZmlsZXMgbG9naWNcbiAgICAgICAgdGhpcy51cGxvYWRGaWxlc1N1YnNjcmlwdGlvbiA9IHRoaXMudXBsb2FkRmlsZXNTdWJqZWN0XG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZmlsZXMgPT4gISFmaWxlcyAmJiB0aGlzLmlzTWF4U2VsZWN0aW9uUmVhY2hlZChmaWxlcykpLFxuICAgICAgICAgICAgICAgIC8vIE9ubHkgb25lIGNhbGwgZXZlcnkgMzAwbXMgdG8gc3RvcCBjb25jdXJyZW50IGFjY2Vzc1xuICAgICAgICAgICAgICAgIHRocm90dGxlVGltZSgzMDApLFxuICAgICAgICAgICAgICAgIC8vIE9ubHkgb25lIGNvbmN1cnJlbnQgY2FsbCBhdCB0aGUgdGltZVxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKFxuICAgICAgICAgICAgICAgICAgICBmaWxlcyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib011bHRpVXBsb2FkU2VydmljZS51cGxvYWREb2N1bWVudHMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aXBsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlGaWxlU2F2ZWRDb25maXJtYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yczogRm9ybUVycm9yW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzdGF0dXMgfTogYW55ID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZXJIZWxwZXIuYWRkQ3VzdG9tRXJyb3JPckRlZmF1bHQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtzdGF0dXN9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21FcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlQWNjZXB0ZWRFeHRlbnNpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZU1heEZpbGVOYW1lTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZUlsbGVnYWxDaGFyYWN0ZXJzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEVycm9ycyhbZXJyb3JzLCB0cnVlXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBkb2N1bWVudHMsIGVycm9ycyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5UmVzdWx0RnJvbVNlcnZlcihkb2N1bWVudHMsIGVycm9ycyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBEZWxldGUgZG9jdW1lbnQgbG9naWNcbiAgICAgICAgdGhpcy5kZWxldGVEb2N1bWVudFN1YnNjcmlwdGlvbiA9IHRoaXMuZGVsZXRlRG9jdW1lbnRTdWJqZWN0XG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZG9jdW1lbnQgPT4gISFkb2N1bWVudCksXG4gICAgICAgICAgICAgICAgLy8gT25seSBvbmUgY2FsbCBldmVyeSAzMDAgbXMgdG8gc3RvcCBjb25jdXJyZW50IGFjY2Vzc1xuICAgICAgICAgICAgICAgIHRocm90dGxlVGltZSgzMDApLFxuICAgICAgICAgICAgICAgIC8vIE9ubHkgb25lIGNvbmN1cnJlbnQgY2FsbCBhdCB0aGUgdGltZVxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib011bHRpVXBsb2FkU2VydmljZS5kZWxldGVEb2N1bWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgLy8gU2lkZSBlZmZlY3Qgb25jZSB0aGUgZG9jdW1lbnQgaGFzIGJlZW4gZGVsZXRlZC5cbiAgICAgICAgICAgICAgICB0YXAoZG9jdW1lbnQgPT4gdGhpcy5kb2N1bWVudERlbGV0ZWQubmV4dChkb2N1bWVudCkpLFxuICAgICAgICAgICAgICAgIHRhcChkb2N1bWVudCA9PiB0aGlzLnJlbW92ZURvY3VtZW50RnJvbU1vZGVsKGRvY3VtZW50KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBjYW5BZGRNb3JlRmlsZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISh0aGlzLm1vZGVsICYmICEhdGhpcy5tb2RlbC5sZW5ndGgpO1xuICAgIH1cblxuICAgIG9uRmlsZUNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gUFJFU1RBS0lULTMwOTogTWFyayBhcyBwcmlzdGluZSBzbyBlcnJvcnMgY2FuIGJlIHNob3duIGRpcmVjdGx5IHRvIHVzZXIgd2hlbiB1cGxvYWRpbmcgZmlsZVxuICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0OiBIVE1MSW5wdXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIHRoaXMucG9wdWxhdGVGaWxlSXRlbUxpc3QodGFyZ2V0LmZpbGVzKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gbnVsbDsgLy8gcmVzZXQgaGlkZGVuIGZpbGUgaW5wdXQgdmFsdWVzXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBvbkRyb3AoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwbG9hZGVySGVscGVyLnByZXZlbnRBbmRTdG9wKGV2ZW50KTtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0FuZERyb3ApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVMaXN0OiBGaWxlTGlzdCA9IHRoaXMudXBsb2FkZXJIZWxwZXIuZ2V0VHJhbnNmZXIoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGZpbGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUZpbGVJdGVtTGlzdChmaWxlTGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBvcHVsYXRlRmlsZUl0ZW1MaXN0KGZpbGVMaXN0OiBGaWxlTGlzdCk6IHZvaWQge1xuICAgICAgICBsZXQgZmlsZXMgPSBBcnJheS5mcm9tKGZpbGVMaXN0KTtcblxuICAgICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2hlbiBkcmFnL2Ryb3AgYW5kIGFza2VkIGZvciBzaW5nbGUgdXBsb2FkLCB3ZSBlbnN1cmUgd2Ugc3RvcmUgb25seSBvbmUgZmlsZSBmb3IgdXBsb2FkXG4gICAgICAgIGlmICh0aGlzLmRyYWdBbmREcm9wICYmICF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBmaWxlcyA9IHRoaXMubWFuYWdlU2luZ2xlRmlsZShmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEaXNwbGF5IGxvY2FsIGVycm9ycyBhbmQgc3RvcCBwcm9jZXNzaW5nXG4gICAgICAgIGNvbnN0IGZpbGVzRXJyb3JzID0gdGhpcy5kaXNwbGF5TG9jYWxFcnJvcnMoZmlsZXMpO1xuICAgICAgICBpZiAoZmlsZXNFcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0aWFsaXplIG1vZGVsIGlmIGVtcHR5XG4gICAgICAgIGlmICghdGhpcy5tb2RlbCB8fCAhdGhpcy5tb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIHNlbmQgZmlsZXMgdG8gc2VydmVyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZXNTdWJqZWN0Lm5leHQoZmlsZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzcGxheVJlc3VsdEZyb21TZXJ2ZXIoXG4gICAgICAgIGRvY3VtZW50czogRG9jdW1lbnRSZWZlcmVuY2VbXSxcbiAgICAgICAgZXJyb3JzOiBCb0RvY3VtZW50RXJyb3JbXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXlFcnJvcnNGcm9tU2VydmVyKGVycm9ycyk7XG4gICAgICAgIHRoaXMubW9kZWwgPSBbLi4udGhpcy5tb2RlbCwgLi4uKGRvY3VtZW50cyB8fCBbXSldO1xuICAgICAgICB0aGlzLnRyaWdnZXJVc2VySW5wdXQodGhpcy5tb2RlbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNwbGF5RXJyb3JzRnJvbVNlcnZlcihlcnJvcnM6IEJvRG9jdW1lbnRFcnJvcltdKTogdm9pZCB7XG4gICAgICAgIGlmICghZXJyb3JzIHx8ICFlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBQUkVTVEFLSVQtMzA5OiBTaW11bGF0ZSB1c2VyIGludGVyYWN0aW9uIHdpdGggY29tcG9uZW50XG4gICAgICAgICAgICAvLyBvbmx5IHdoZW4gbm8gZXJyb3Igc28gaXNQcmlzdGluZSBpcyBzZXQgdG8gZmFsc2UgZm9yIHZhbGlkYXRpb24gcHVycG9zZVxuICAgICAgICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3RXJyb3JzOiBGb3JtRXJyb3JbXSA9IFtdO1xuICAgICAgICBlcnJvcnMuZm9yRWFjaChlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy51cGxvYWRlckhlbHBlci5hZGRDdXN0b21FcnJvck9yRGVmYXVsdChcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgbmV3RXJyb3JzLFxuICAgICAgICAgICAgICAgIGAke2Vycm9yLmVycm9yQ29kZX1gLFxuICAgICAgICAgICAgICAgIGVycm9yLmxhYmVsLFxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRXJyb3JzLFxuICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVBY2NlcHRlZEV4dGVuc2lvbnMsXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZU1heEZpbGVOYW1lTGVuZ3RoLFxuICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVJbGxlZ2FsQ2hhcmFjdGVyc1xuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVmcmVzaEVycm9ycyhbbmV3RXJyb3JzLCB0cnVlXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVEb2N1bWVudEZyb21Nb2RlbChkb2N1bWVudDogRG9jdW1lbnRSZWZlcmVuY2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1vZGVsLmluZGV4T2YoZG9jdW1lbnQpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IFsuLi50aGlzLm1vZGVsXTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlclVzZXJJbnB1dCh0aGlzLm1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWFuYWdlU2luZ2xlRmlsZShmaWxlczogRmlsZVtdKTogRmlsZVtdIHtcbiAgICAgICAgLy8gRWRnZSBicm93c2VyIGxldHMgeW91IGRyb3AgZmlsZXMgZnJvbSBkaWFsb2cgYm94IHdoZW4gc2VsZWN0aW5nIGEgZmlsZS5cbiAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgd2Ugb25seSBrZWVwIGxhc3Qgc2VsZWN0ZWQgZmlsZSBmcm9tIHVzZXJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TW9kZWxGaWxlcyA9IFsuLi50aGlzLm1vZGVsXTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBjdXJyZW50TW9kZWxGaWxlcy5mb3JFYWNoKChkb2M6IGFueSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGVPbkNvbmZpcm1hdGlvbihkb2MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZW4gd2UgZW5zdXJlIHdlIHRha2Ugb25seSBvbmUgZmlsZSBmcm9tIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgIHJldHVybiBmaWxlcy5zbGljZSgwLCAxKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICBbY2xhc3MuaGFzLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgW2NsYXNzLnZkLWZvcm0tZ3JvdXAtZGFuZ2VyXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpXCJcbiAgICBbY2xhc3MuZHJvcC16b25lLWhpZ2hsaWdodF09XCJzaG93RHJvcFpvbmVcIlxuICAgIFthdHRyLmlkXT1cImJ1aWxkSWQoJ0NvbnRhaW5lcicpXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgKGRyYWdlbnRlcik9XCJvbkRyYWdlbnRlcigkZXZlbnQpXCJcbiAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ2xlYXZlKCRldmVudClcIlxuICAgIChkcmFnb3Zlcik9XCJvbkRyYWdvdmVyKCRldmVudClcIlxuICAgICNmYWxsQmFja1RyaWdnZXJcbj5cbiAgICA8bGFiZWxcbiAgICAgICAgW2F0dHIuZm9yXT1cImJ1aWxkQ2hpbGRJZCgpXCJcbiAgICAgICAgKm5nSWY9XCIhIWxhYmVsXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiaXNMYWJlbFNyT25seSA/ICdzci1vbmx5JyA6IGxhYmVsU3R5bGVNb2RpZmllclwiXG4gICAgPlxuICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImxhYmVsXCI+PC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCIhcmVxdWlyZWQgJiYgIWhpZGVOb3RSZXF1aXJlZEV4dHJhTGFiZWxcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgJ2ZvZWhuLWlucHV0Lm9wdGlvbmFsJyB8IGZyb21EaWN0aW9uYXJ5IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuXG4gICAgPGZvZWhuLXZhbGlkYXRpb24tYWxlcnRzXG4gICAgICAgIFtjb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgIFtzaG91bGRFcnJvcnNCZUxpdmVdPVwiaGFzTGl2ZVVwbG9hZEVycm9ycygpXCJcbiAgICA+PC9mb2Vobi12YWxpZGF0aW9uLWFsZXJ0cz5cblxuICAgIDxzbWFsbFxuICAgICAgICAqbmdJZj1cImhlbHBUZXh0XCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnSGVscCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiaGVscFRleHRcIlxuICAgID48L3NtYWxsPlxuXG4gICAgPCEtLSBQUkVTVEFLSVQtMzA5OiBGYWtlIGlucHV0IHdpdGggTmdNb2RlbCB0byBiZSByZWdpc3RlcmVkIGludG8gRm9ybSBjb250cm9scyAtLT5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIFtuYW1lXT1cIm5hbWUgfHwgbGFiZWxcIiBbbmdNb2RlbF09XCJtb2RlbFwiIC8+XG5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBkb2N1bWVudCBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeURvY3VtZW50XCJcbiAgICAgICAgY2xhc3M9XCJmaWxlIGZpbGUtdXBsb2FkZWRcIlxuICAgID5cbiAgICAgICAgPCEtLSBwcmV0dGllci1pZ25vcmUgLS0+XG4gICAgICAgIDxhIFtocmVmXT1cImJvTXVsdGlVcGxvYWRTZXJ2aWNlLmdldERvd25sb2FkVXJsKGRvd25sb2FkVXJsLCBkb2N1bWVudClcIj57eyBkb2N1bWVudC5maWxlbmFtZSB9fTwvYT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0xIG1yLTFcIj5cbiAgICAgICAgICAgICh7eyB0b01lZ2FPY3RldHMoZG9jdW1lbnQuZmlsZVNpemUpIH19XG4gICAgICAgICAgICA8YWJiclxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInZm9laG4tdXBsb2FkZXIuYWJici1tZWdhb2N0ZXQtdGl0bGUnIHwgZnJvbURpY3Rpb25hcnlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdmb2Vobi11cGxvYWRlci5hYmJyLW1lZ2FvY3RldCcgfCBmcm9tRGljdGlvbmFyeSB9fVxuICAgICAgICAgICAgPC9hYmJyPlxuICAgICAgICAgICAgKVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiIXJlYWRvbmx5XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gaWNvbi1idXR0b24gZGVsZXRlLXVwbG9hZGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWxlKGRvY3VtZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxmb2Vobi1pY29uLXRpbWVzXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAnZm9laG4tdXBsb2FkZXIuZGVsZXRlLWljb24tdGl0bGUnXG4gICAgICAgICAgICAgICAgICAgICAgICB8IGZyb21EaWN0aW9uYXJ5OiB7IGRvY05hbWU6IGRvY3VtZW50LmZpbGVuYW1lIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvZm9laG4taWNvbi10aW1lcz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8c21hbGxcbiAgICAgICAgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1zZWNvbmRhcnkgdXBsb2FkZWQtZ2xvYmFsLWluZm9cIlxuICAgICAgICAqbmdJZj1cInNob3dHbG9iYWxJbmZvcyhtb2RlbClcIlxuICAgICAgICBbaW5uZXJIVE1MXT1cImdldEdsb2JhbEluZm9zKG1vZGVsKVwiXG4gICAgPjwvc21hbGw+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuQWRkTW9yZUZpbGVzKClcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbC1maWxlIGFjdHVhbC1pbnB1dFwiXG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICBbbmFtZV09XCJuYW1lIHx8IGxhYmVsXCJcbiAgICAgICAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICBbYXR0ci5hY2NlcHRdPVwiXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVBY2NlcHRlZEV4dGVuc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgPyBvdmVycmlkZUFjY2VwdGVkRXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgICAgICA6IHVwbG9hZGVySGVscGVyLmFjY2VwdFxuICAgICAgICAgICAgICAgICAgICA/IHVwbG9hZGVySGVscGVyLmFjY2VwdFxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICNpbnB1dEZpbGVcbiAgICAgICAgLz5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NyLW9ubHknOiAhc2hvd1VwbG9hZEJ1dHRvbiB9XCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKSB8fCBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYnVpbGRJZCgnRXJyb3JzQ29udGFpbmVyJylcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImlucHV0RmlsZS5jbGljaygpXCJcbiAgICAgICAgICAgICNlbnRyeUNvbXBvbmVudFxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBtdWx0aXBsZSA/IGNob29zZUJ1dHRvbkxhYmVsTXVsdGlwbGUgOiBjaG9vc2VCdXR0b25MYWJlbCB9fVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImRyYWdBbmREcm9wXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3BmaWxlXCJcbiAgICAgICAgICAgIFtjbGFzcy5kcm9wZmlsZS1ib3JkZXItdHJhbnNwYXJlbnRdPVwic2hvd0Ryb3Bab25lXCJcbiAgICAgICAgICAgIChjbGljayk9XCJpbnB1dEZpbGUuY2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IG11bHRpcGxlID8gZHJvcFpvbmVMYWJlbE11bHRpcGxlIDogZHJvcFpvbmVMYWJlbCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxmb2Vobi11cGxvYWQtcHJvZ3Jlc3MtYmFyXG4gICAgICAgIFtwcm9ncmVzc0JhclRyaWdnZXJIdG1sRWxlbWVudF09XCJcbiAgICAgICAgICAgIGlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCB8fCBmYWxsQmFja1RyaWdnZXJcbiAgICAgICAgXCJcbiAgICA+PC9mb2Vobi11cGxvYWQtcHJvZ3Jlc3MtYmFyPlxuPC9kaXY+XG4iXX0=
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tYm8tbXVsdGktdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi11cGxvYWQvZm9laG4tYm8tbXVsdGktdXBsb2FkL2ZvZWhuLWJvLW11bHRpLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tdXBsb2FkL2ZvZWhuLWJvLW11bHRpLXVwbG9hZC9mb2Vobi1iby1tdWx0aS11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQ0gsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUNILFlBQVksRUFDZixNQUFNLGdCQUFnQixDQUFDO0FBSXhCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBSTlFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBaUJqRSxNQUFNLE9BQU8sMkJBQ1QsU0FBUSw4QkFBbUQ7SUFtQjNELFlBQ0ksb0JBQTBDLEVBQ2hDLHNCQUE4QyxFQUM5QyxtQkFBNkMsRUFDN0MsaUJBQXVDLEVBQ3ZDLFlBQWdDO1FBRTFDLEtBQUssQ0FDRCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixZQUFZ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QyxDQUFDO0lBQzdCLENBQUM7O3dIQTVOUSwyQkFBMkI7NEdBQTNCLDJCQUEyQixtUUFWekI7UUFDUDtZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztZQUMxRCxLQUFLLEVBQUUsSUFBSTtTQUNkO1FBQ0QsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFO1FBQ2pFLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRTtLQUN0RSxpREMxQ0wsK25JQStIQTsyRkRuRmEsMkJBQTJCO2tCQWR2QyxTQUFTOytCQUNJLHVCQUF1QixhQUd0Qjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQzs0QkFDMUQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7d0JBQ0QsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFO3dCQUNqRSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUU7cUJBQ3RFOzJQQU1ELFNBQVM7c0JBRFIsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLGtDQUFrQztzQkFEakMsS0FBSztnQkFJTixlQUFlO3NCQURkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIGNhdGNoRXJyb3IsXG4gICAgZmlsdGVyLFxuICAgIG1lcmdlTWFwLFxuICAgIHRhcCxcbiAgICB0aHJvdHRsZVRpbWVcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGb2VobkNvbmZpcm1Nb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9mb2Vobi1jb25maXJtLW1vZGFsL2ZvZWhuLWNvbmZpcm0tbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBHcm93bEJyb2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9mb2Vobi1ncm93bC9ncm93bC1icm9rZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGb2VobklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9laG4taW5wdXQvZm9laG4taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1FcnJvciB9IGZyb20gJy4uLy4uL2Zvcm0tZXJyb3InO1xuaW1wb3J0IHsgQXBwbGljYXRpb25JbmZvU2VydmljZSB9IGZyb20gJy4uLy4uL3Nkay1hcHBpbmZvL2FwcGxpY2F0aW9uLWluZm8uc2VydmljZSc7XG5pbXBvcnQgeyBTZGtEaWN0aW9uYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3Nkay1kaWN0aW9uYXJ5L3Nkay1kaWN0aW9uYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RGb2VoblVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vYWJzdHJhY3QtZm9laG4tdXBsb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERvY3VtZW50UmVmZXJlbmNlIH0gZnJvbSAnLi4vZG9jdW1lbnQtcmVmZXJlbmNlJztcbmltcG9ydCB7IFVwbG9hZFByb2dyZXNzU2VydmljZSB9IGZyb20gJy4uL2ZvZWhuLXVwbG9hZC1wcm9ncmVzcy1iYXIvdXBsb2FkLXByb2dyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQm9NdWx0aVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuL2JvLW11bHRpLXVwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IEJvRG9jdW1lbnRFcnJvciB9IGZyb20gJy4vYm8tbXVsdGktdXBsb2FkLnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZvZWhuLWJvLW11bHRpLXVwbG9hZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZvZWhuLWJvLW11bHRpLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4uL2ZvZWhuLXVwbG9hZC5jb21wb25lbnQuY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZvZWhuSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb2VobkJvTXVsdGlVcGxvYWRDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgeyBwcm92aWRlOiBCb011bHRpVXBsb2FkU2VydmljZSwgdXNlQ2xhc3M6IEJvTXVsdGlVcGxvYWRTZXJ2aWNlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogVXBsb2FkUHJvZ3Jlc3NTZXJ2aWNlLCB1c2VDbGFzczogVXBsb2FkUHJvZ3Jlc3NTZXJ2aWNlIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvZWhuQm9NdWx0aVVwbG9hZENvbXBvbmVudFxuICAgIGV4dGVuZHMgQWJzdHJhY3RGb2VoblVwbG9hZGVyQ29tcG9uZW50PERvY3VtZW50UmVmZXJlbmNlW10+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KClcbiAgICB1cGxvYWRVcmw6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgZGVsZXRlVXJsOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIGRvd25sb2FkVXJsOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHNob3VsZERpc3BsYXlGaWxlU2F2ZWRDb25maXJtYXRpb24gPSB0cnVlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgZG9jdW1lbnREZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEb2N1bWVudFJlZmVyZW5jZT4oKTtcblxuICAgIGJvTXVsdGlVcGxvYWRTZXJ2aWNlOiBCb011bHRpVXBsb2FkU2VydmljZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBib011bHRpVXBsb2FkU2VydmljZTogQm9NdWx0aVVwbG9hZFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBhcHBsaWNhdGlvbkluZm9TZXJ2aWNlOiBBcHBsaWNhdGlvbkluZm9TZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgY29uZmlybU1vZGFsU2VydmljZTogRm9laG5Db25maXJtTW9kYWxTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgZGljdGlvbmFyeVNlcnZpY2U6IFNka0RpY3Rpb25hcnlTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgZ3Jvd2xTZXJ2aWNlOiBHcm93bEJyb2tlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBhcHBsaWNhdGlvbkluZm9TZXJ2aWNlLFxuICAgICAgICAgICAgY29uZmlybU1vZGFsU2VydmljZSxcbiAgICAgICAgICAgIGRpY3Rpb25hcnlTZXJ2aWNlLFxuICAgICAgICAgICAgZ3Jvd2xTZXJ2aWNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYm9NdWx0aVVwbG9hZFNlcnZpY2UgPSBib011bHRpVXBsb2FkU2VydmljZTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICAvLyBBZGQgZmlsZXMgbG9naWNcbiAgICAgICAgdGhpcy51cGxvYWRGaWxlc1N1YnNjcmlwdGlvbiA9IHRoaXMudXBsb2FkRmlsZXNTdWJqZWN0XG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZmlsZXMgPT4gISFmaWxlcyAmJiB0aGlzLmlzTWF4U2VsZWN0aW9uUmVhY2hlZChmaWxlcykpLFxuICAgICAgICAgICAgICAgIC8vIE9ubHkgb25lIGNhbGwgZXZlcnkgMzAwbXMgdG8gc3RvcCBjb25jdXJyZW50IGFjY2Vzc1xuICAgICAgICAgICAgICAgIHRocm90dGxlVGltZSgzMDApLFxuICAgICAgICAgICAgICAgIC8vIE9ubHkgb25lIGNvbmN1cnJlbnQgY2FsbCBhdCB0aGUgdGltZVxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKFxuICAgICAgICAgICAgICAgICAgICBmaWxlcyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib011bHRpVXBsb2FkU2VydmljZS51cGxvYWREb2N1bWVudHMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aXBsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlGaWxlU2F2ZWRDb25maXJtYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yczogRm9ybUVycm9yW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzdGF0dXMgfTogYW55ID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZXJIZWxwZXIuYWRkQ3VzdG9tRXJyb3JPckRlZmF1bHQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtzdGF0dXN9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21FcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlQWNjZXB0ZWRFeHRlbnNpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZU1heEZpbGVOYW1lTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkZUlsbGVnYWxDaGFyYWN0ZXJzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEVycm9ycyhbZXJyb3JzLCB0cnVlXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBkb2N1bWVudHMsIGVycm9ycyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5UmVzdWx0RnJvbVNlcnZlcihkb2N1bWVudHMsIGVycm9ycyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBEZWxldGUgZG9jdW1lbnQgbG9naWNcbiAgICAgICAgdGhpcy5kZWxldGVEb2N1bWVudFN1YnNjcmlwdGlvbiA9IHRoaXMuZGVsZXRlRG9jdW1lbnRTdWJqZWN0XG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZG9jdW1lbnQgPT4gISFkb2N1bWVudCksXG4gICAgICAgICAgICAgICAgLy8gT25seSBvbmUgY2FsbCBldmVyeSAzMDAgbXMgdG8gc3RvcCBjb25jdXJyZW50IGFjY2Vzc1xuICAgICAgICAgICAgICAgIHRocm90dGxlVGltZSgzMDApLFxuICAgICAgICAgICAgICAgIC8vIE9ubHkgb25lIGNvbmN1cnJlbnQgY2FsbCBhdCB0aGUgdGltZVxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib011bHRpVXBsb2FkU2VydmljZS5kZWxldGVEb2N1bWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgLy8gU2lkZSBlZmZlY3Qgb25jZSB0aGUgZG9jdW1lbnQgaGFzIGJlZW4gZGVsZXRlZC5cbiAgICAgICAgICAgICAgICB0YXAoZG9jdW1lbnQgPT4gdGhpcy5kb2N1bWVudERlbGV0ZWQubmV4dChkb2N1bWVudCkpLFxuICAgICAgICAgICAgICAgIHRhcChkb2N1bWVudCA9PiB0aGlzLnJlbW92ZURvY3VtZW50RnJvbU1vZGVsKGRvY3VtZW50KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBjYW5BZGRNb3JlRmlsZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISh0aGlzLm1vZGVsICYmICEhdGhpcy5tb2RlbC5sZW5ndGgpO1xuICAgIH1cblxuICAgIG9uRmlsZUNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gUFJFU1RBS0lULTMwOTogTWFyayBhcyBwcmlzdGluZSBzbyBlcnJvcnMgY2FuIGJlIHNob3duIGRpcmVjdGx5IHRvIHVzZXIgd2hlbiB1cGxvYWRpbmcgZmlsZVxuICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0OiBIVE1MSW5wdXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIHRoaXMucG9wdWxhdGVGaWxlSXRlbUxpc3QodGFyZ2V0LmZpbGVzKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gbnVsbDsgLy8gcmVzZXQgaGlkZGVuIGZpbGUgaW5wdXQgdmFsdWVzXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBvbkRyb3AoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwbG9hZGVySGVscGVyLnByZXZlbnRBbmRTdG9wKGV2ZW50KTtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0FuZERyb3ApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVMaXN0OiBGaWxlTGlzdCA9IHRoaXMudXBsb2FkZXJIZWxwZXIuZ2V0VHJhbnNmZXIoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGZpbGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUZpbGVJdGVtTGlzdChmaWxlTGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBvcHVsYXRlRmlsZUl0ZW1MaXN0KGZpbGVMaXN0OiBGaWxlTGlzdCk6IHZvaWQge1xuICAgICAgICBsZXQgZmlsZXMgPSBBcnJheS5mcm9tKGZpbGVMaXN0KTtcblxuICAgICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2hlbiBkcmFnL2Ryb3AgYW5kIGFza2VkIGZvciBzaW5nbGUgdXBsb2FkLCB3ZSBlbnN1cmUgd2Ugc3RvcmUgb25seSBvbmUgZmlsZSBmb3IgdXBsb2FkXG4gICAgICAgIGlmICh0aGlzLmRyYWdBbmREcm9wICYmICF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBmaWxlcyA9IHRoaXMubWFuYWdlU2luZ2xlRmlsZShmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEaXNwbGF5IGxvY2FsIGVycm9ycyBhbmQgc3RvcCBwcm9jZXNzaW5nXG4gICAgICAgIGNvbnN0IGZpbGVzRXJyb3JzID0gdGhpcy5kaXNwbGF5TG9jYWxFcnJvcnMoZmlsZXMpO1xuICAgICAgICBpZiAoZmlsZXNFcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0aWFsaXplIG1vZGVsIGlmIGVtcHR5XG4gICAgICAgIGlmICghdGhpcy5tb2RlbCB8fCAhdGhpcy5tb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIHNlbmQgZmlsZXMgdG8gc2VydmVyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZXNTdWJqZWN0Lm5leHQoZmlsZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzcGxheVJlc3VsdEZyb21TZXJ2ZXIoXG4gICAgICAgIGRvY3VtZW50czogRG9jdW1lbnRSZWZlcmVuY2VbXSxcbiAgICAgICAgZXJyb3JzOiBCb0RvY3VtZW50RXJyb3JbXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXlFcnJvcnNGcm9tU2VydmVyKGVycm9ycyk7XG4gICAgICAgIHRoaXMubW9kZWwgPSBbLi4udGhpcy5tb2RlbCwgLi4uKGRvY3VtZW50cyB8fCBbXSldO1xuICAgICAgICB0aGlzLnRyaWdnZXJVc2VySW5wdXQodGhpcy5tb2RlbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVEb2N1bWVudEZyb21Nb2RlbChkb2N1bWVudDogRG9jdW1lbnRSZWZlcmVuY2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1vZGVsLmluZGV4T2YoZG9jdW1lbnQpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IFsuLi50aGlzLm1vZGVsXTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlclVzZXJJbnB1dCh0aGlzLm1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGlzcGxheUVycm9yc0Zyb21TZXJ2ZXIoZXJyb3JzOiBCb0RvY3VtZW50RXJyb3JbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIWVycm9ycyB8fCAhZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gUFJFU1RBS0lULTMwOTogU2ltdWxhdGUgdXNlciBpbnRlcmFjdGlvbiB3aXRoIGNvbXBvbmVudFxuICAgICAgICAgICAgLy8gb25seSB3aGVuIG5vIGVycm9yIHNvIGlzUHJpc3RpbmUgaXMgc2V0IHRvIGZhbHNlIGZvciB2YWxpZGF0aW9uIHB1cnBvc2VcbiAgICAgICAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld0Vycm9yczogRm9ybUVycm9yW10gPSBbXTtcbiAgICAgICAgZXJyb3JzLmZvckVhY2goZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMudXBsb2FkZXJIZWxwZXIuYWRkQ3VzdG9tRXJyb3JPckRlZmF1bHQoXG4gICAgICAgICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgIG5ld0Vycm9ycyxcbiAgICAgICAgICAgICAgICBgJHtlcnJvci5lcnJvckNvZGV9YCxcbiAgICAgICAgICAgICAgICBlcnJvci5sYWJlbCxcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUVycm9ycyxcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlQWNjZXB0ZWRFeHRlbnNpb25zLFxuICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVNYXhGaWxlTmFtZUxlbmd0aCxcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRlSWxsZWdhbENoYXJhY3RlcnNcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnJlZnJlc2hFcnJvcnMoW25ld0Vycm9ycywgdHJ1ZV0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFuYWdlU2luZ2xlRmlsZShmaWxlczogRmlsZVtdKTogRmlsZVtdIHtcbiAgICAgICAgLy8gRWRnZSBicm93c2VyIGxldHMgeW91IGRyb3AgZmlsZXMgZnJvbSBkaWFsb2cgYm94IHdoZW4gc2VsZWN0aW5nIGEgZmlsZS5cbiAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgd2Ugb25seSBrZWVwIGxhc3Qgc2VsZWN0ZWQgZmlsZSBmcm9tIHVzZXJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TW9kZWxGaWxlcyA9IFsuLi50aGlzLm1vZGVsXTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBjdXJyZW50TW9kZWxGaWxlcy5mb3JFYWNoKChkb2M6IGFueSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGVPbkNvbmZpcm1hdGlvbihkb2MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZW4gd2UgZW5zdXJlIHdlIHRha2Ugb25seSBvbmUgZmlsZSBmcm9tIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgIHJldHVybiBmaWxlcy5zbGljZSgwLCAxKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICBbY2xhc3MuaGFzLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgW2NsYXNzLnZkLWZvcm0tZ3JvdXAtZGFuZ2VyXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpXCJcbiAgICBbY2xhc3MuZHJvcC16b25lLWhpZ2hsaWdodF09XCJzaG93RHJvcFpvbmVcIlxuICAgIFthdHRyLmlkXT1cImJ1aWxkSWQoJ0NvbnRhaW5lcicpXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgKGRyYWdlbnRlcik9XCJvbkRyYWdlbnRlcigkZXZlbnQpXCJcbiAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ2xlYXZlKCRldmVudClcIlxuICAgIChkcmFnb3Zlcik9XCJvbkRyYWdvdmVyKCRldmVudClcIlxuICAgICNmYWxsQmFja1RyaWdnZXJcbj5cbiAgICA8bGFiZWxcbiAgICAgICAgW2F0dHIuZm9yXT1cImJ1aWxkQ2hpbGRJZCgpXCJcbiAgICAgICAgKm5nSWY9XCIhIWxhYmVsXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiaXNMYWJlbFNyT25seSA/ICdzci1vbmx5JyA6IGxhYmVsU3R5bGVNb2RpZmllclwiXG4gICAgPlxuICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImxhYmVsXCI+PC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCIhcmVxdWlyZWQgJiYgIWhpZGVOb3RSZXF1aXJlZEV4dHJhTGFiZWxcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgJ2ZvZWhuLWlucHV0Lm9wdGlvbmFsJyB8IGZyb21EaWN0aW9uYXJ5IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuXG4gICAgPGZvZWhuLXZhbGlkYXRpb24tYWxlcnRzXG4gICAgICAgIFtjb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgIFtzaG91bGRFcnJvcnNCZUxpdmVdPVwiaGFzTGl2ZVVwbG9hZEVycm9ycygpXCJcbiAgICA+PC9mb2Vobi12YWxpZGF0aW9uLWFsZXJ0cz5cblxuICAgIDxzbWFsbFxuICAgICAgICAqbmdJZj1cImhlbHBUZXh0XCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnSGVscCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiaGVscFRleHRcIlxuICAgID48L3NtYWxsPlxuXG4gICAgPCEtLSBQUkVTVEFLSVQtMzA5OiBGYWtlIGlucHV0IHdpdGggTmdNb2RlbCB0byBiZSByZWdpc3RlcmVkIGludG8gRm9ybSBjb250cm9scyAtLT5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIFtuYW1lXT1cIm5hbWUgfHwgbGFiZWxcIiBbbmdNb2RlbF09XCJtb2RlbFwiIC8+XG5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBkb2N1bWVudCBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeURvY3VtZW50XCJcbiAgICAgICAgY2xhc3M9XCJmaWxlIGZpbGUtdXBsb2FkZWRcIlxuICAgID5cbiAgICAgICAgPCEtLSBwcmV0dGllci1pZ25vcmUgLS0+XG4gICAgICAgIDxhIFtocmVmXT1cImJvTXVsdGlVcGxvYWRTZXJ2aWNlLmdldERvd25sb2FkVXJsKGRvd25sb2FkVXJsLCBkb2N1bWVudClcIj57eyBkb2N1bWVudC5maWxlbmFtZSB9fTwvYT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0xIG1yLTFcIj5cbiAgICAgICAgICAgICh7eyB0b01lZ2FPY3RldHMoZG9jdW1lbnQuZmlsZVNpemUpIH19XG4gICAgICAgICAgICA8YWJiclxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInZm9laG4tdXBsb2FkZXIuYWJici1tZWdhb2N0ZXQtdGl0bGUnIHwgZnJvbURpY3Rpb25hcnlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdmb2Vobi11cGxvYWRlci5hYmJyLW1lZ2FvY3RldCcgfCBmcm9tRGljdGlvbmFyeSB9fVxuICAgICAgICAgICAgPC9hYmJyPlxuICAgICAgICAgICAgKVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiIXJlYWRvbmx5XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gaWNvbi1idXR0b24gZGVsZXRlLXVwbG9hZGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWxlKGRvY3VtZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxmb2Vobi1pY29uLXRpbWVzXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAnZm9laG4tdXBsb2FkZXIuZGVsZXRlLWljb24tdGl0bGUnXG4gICAgICAgICAgICAgICAgICAgICAgICB8IGZyb21EaWN0aW9uYXJ5OiB7IGRvY05hbWU6IGRvY3VtZW50LmZpbGVuYW1lIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvZm9laG4taWNvbi10aW1lcz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8c21hbGxcbiAgICAgICAgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1zZWNvbmRhcnkgdXBsb2FkZWQtZ2xvYmFsLWluZm9cIlxuICAgICAgICAqbmdJZj1cInNob3dHbG9iYWxJbmZvcyhtb2RlbClcIlxuICAgICAgICBbaW5uZXJIVE1MXT1cImdldEdsb2JhbEluZm9zKG1vZGVsKVwiXG4gICAgPjwvc21hbGw+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuQWRkTW9yZUZpbGVzKClcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbC1maWxlIGFjdHVhbC1pbnB1dFwiXG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICBbbmFtZV09XCJuYW1lIHx8IGxhYmVsXCJcbiAgICAgICAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICBbYXR0ci5hY2NlcHRdPVwiXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVBY2NlcHRlZEV4dGVuc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgPyBvdmVycmlkZUFjY2VwdGVkRXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgICAgICA6IHVwbG9hZGVySGVscGVyLmFjY2VwdFxuICAgICAgICAgICAgICAgICAgICA/IHVwbG9hZGVySGVscGVyLmFjY2VwdFxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICNpbnB1dEZpbGVcbiAgICAgICAgLz5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NyLW9ubHknOiAhc2hvd1VwbG9hZEJ1dHRvbiB9XCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKSB8fCBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYnVpbGRJZCgnRXJyb3JzQ29udGFpbmVyJylcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImlucHV0RmlsZS5jbGljaygpXCJcbiAgICAgICAgICAgICNlbnRyeUNvbXBvbmVudFxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBtdWx0aXBsZSA/IGNob29zZUJ1dHRvbkxhYmVsTXVsdGlwbGUgOiBjaG9vc2VCdXR0b25MYWJlbCB9fVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImRyYWdBbmREcm9wXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3BmaWxlXCJcbiAgICAgICAgICAgIFtjbGFzcy5kcm9wZmlsZS1ib3JkZXItdHJhbnNwYXJlbnRdPVwic2hvd0Ryb3Bab25lXCJcbiAgICAgICAgICAgIChjbGljayk9XCJpbnB1dEZpbGUuY2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IG11bHRpcGxlID8gZHJvcFpvbmVMYWJlbE11bHRpcGxlIDogZHJvcFpvbmVMYWJlbCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxmb2Vobi11cGxvYWQtcHJvZ3Jlc3MtYmFyXG4gICAgICAgIFtwcm9ncmVzc0JhclRyaWdnZXJIdG1sRWxlbWVudF09XCJcbiAgICAgICAgICAgIGlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCB8fCBmYWxsQmFja1RyaWdnZXJcbiAgICAgICAgXCJcbiAgICA+PC9mb2Vobi11cGxvYWQtcHJvZ3Jlc3MtYmFyPlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { EMPTY, throwError } from 'rxjs';
|
|
2
|
+
import { concat, EMPTY, throwError, toArray } from 'rxjs';
|
|
3
3
|
import { catchError, filter, map, tap } from 'rxjs/operators';
|
|
4
4
|
import { GrowlType } from '../../foehn-growl/growl-types';
|
|
5
5
|
import { UploaderHelper } from '../uploader.helper';
|
|
6
|
+
import { DocumentsWithErrors } from './multi-upload.type';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "@angular/common/http";
|
|
8
9
|
import * as i2 from "../../foehn-growl/growl-broker.service";
|
|
@@ -20,34 +21,48 @@ export class MultiUploadService {
|
|
|
20
21
|
this.uploadProgressService = uploadProgressService;
|
|
21
22
|
// A way to have a unique Id per file
|
|
22
23
|
this.globalSequence = 0;
|
|
24
|
+
this.NB_CONCURRENT_FILES_TO_UPLOAD = 3;
|
|
25
|
+
this.mergeDocumentsWithErrors = (arrayOfDocumentsWithErrors) => {
|
|
26
|
+
const mergedResponse = new DocumentsWithErrors();
|
|
27
|
+
arrayOfDocumentsWithErrors.forEach(item => {
|
|
28
|
+
if (!!item.documents?.length) {
|
|
29
|
+
if (!mergedResponse.documents) {
|
|
30
|
+
mergedResponse.documents = [];
|
|
31
|
+
}
|
|
32
|
+
mergedResponse.documents = mergedResponse.documents.concat(item.documents);
|
|
33
|
+
}
|
|
34
|
+
if (!!item.errors?.length) {
|
|
35
|
+
if (!mergedResponse.errors) {
|
|
36
|
+
mergedResponse.errors = [];
|
|
37
|
+
}
|
|
38
|
+
mergedResponse.errors = mergedResponse.errors.concat(item.errors);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return mergedResponse;
|
|
42
|
+
};
|
|
23
43
|
this.uploaderHelper = new UploaderHelper(dictionaryService, applicationInfoService);
|
|
24
44
|
}
|
|
25
45
|
uploadDocuments(baseUrl, formKey, label, files, key, isMultiple, language, shouldDisplayFileSavedConfirmation) {
|
|
26
46
|
const reference = this.gesdemHandlerService.lastResponse.meta.reference;
|
|
27
47
|
if (!!reference?.length) {
|
|
28
|
-
const documents = files.map(file => this.uploaderHelper.mapToDocumentReference(file, label, key, isMultiple, new Date().getTime(), this.globalSequence++));
|
|
29
|
-
const formData = this.uploaderHelper.mapToFormData(documents, formKey, language);
|
|
30
48
|
const url = `${baseUrl}/upload/${reference}`;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
.
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.growlService.addWithType(GrowlType.DANGER, message);
|
|
49
|
-
return throwError(() => e);
|
|
50
|
-
}));
|
|
49
|
+
const filesToGroup = [...files];
|
|
50
|
+
const groupsOfFiles = [];
|
|
51
|
+
while (!!filesToGroup.length) {
|
|
52
|
+
groupsOfFiles.push(filesToGroup.splice(0, this.NB_CONCURRENT_FILES_TO_UPLOAD));
|
|
53
|
+
}
|
|
54
|
+
const arrayOfDocumentsWithErrorsObservable = groupsOfFiles.map((groupOfFile, index) => {
|
|
55
|
+
const documents = groupOfFile.map(file => this.uploaderHelper.mapToDocumentReference(file, label, key, isMultiple, new Date().getTime(), this.globalSequence++));
|
|
56
|
+
const formData = this.uploaderHelper.mapToFormData(documents, formKey, language);
|
|
57
|
+
return this.getDocumentsWithErrorsObservable(url, formData, shouldDisplayFileSavedConfirmation, index, groupsOfFiles.length);
|
|
58
|
+
});
|
|
59
|
+
if (arrayOfDocumentsWithErrorsObservable.length === 1) {
|
|
60
|
+
return arrayOfDocumentsWithErrorsObservable[0];
|
|
61
|
+
}
|
|
62
|
+
// concat() operator sequentially emits all values from the given Observable and then proceed to the next one.
|
|
63
|
+
return concat(...arrayOfDocumentsWithErrorsObservable).pipe(
|
|
64
|
+
// toArray() operator collects all the values emitted by the source observable into an array and sends it to the observer
|
|
65
|
+
toArray(), map(this.mergeDocumentsWithErrors.bind(this)));
|
|
51
66
|
}
|
|
52
67
|
return EMPTY;
|
|
53
68
|
}
|
|
@@ -57,10 +72,10 @@ export class MultiUploadService {
|
|
|
57
72
|
return this.httpClient.delete(url).pipe(
|
|
58
73
|
// Reflect the document once the update is done to ease chaining observables.
|
|
59
74
|
map(() => document), tap(() => {
|
|
60
|
-
const message =
|
|
75
|
+
const message = this.dictionaryService.getKeySync('foehn-uploader.files-deleted-success-message', { filename: document.filename });
|
|
61
76
|
this.growlService.addWithType(GrowlType.SUCCESS, message);
|
|
62
77
|
}), catchError((e) => {
|
|
63
|
-
const message = '
|
|
78
|
+
const message = this.dictionaryService.getKeySync('foehn-uploader.delete-error-message');
|
|
64
79
|
this.growlService.addWithType(GrowlType.DANGER, message);
|
|
65
80
|
return throwError(() => e);
|
|
66
81
|
}));
|
|
@@ -69,6 +84,30 @@ export class MultiUploadService {
|
|
|
69
84
|
const reference = this.gesdemHandlerService.lastResponse.meta.reference;
|
|
70
85
|
return `${baseUrl}/download/${reference}/doc/${document.reference}`;
|
|
71
86
|
}
|
|
87
|
+
getDocumentsWithErrorsObservable(url, formData, shouldDisplayFileSavedConfirmation, packageIndex = 0, nbPackages = 1) {
|
|
88
|
+
return this.httpClient
|
|
89
|
+
.post(url, formData, {
|
|
90
|
+
reportProgress: true,
|
|
91
|
+
observe: 'events',
|
|
92
|
+
responseType: 'json'
|
|
93
|
+
})
|
|
94
|
+
.pipe(filter((e) => this.uploadProgressService.manageUploadEventFilter(e, packageIndex, nbPackages)), map((e) => e.body), tap(result => {
|
|
95
|
+
const successfulDocumentsCount = result.documents && result.documents.length;
|
|
96
|
+
if (successfulDocumentsCount &&
|
|
97
|
+
shouldDisplayFileSavedConfirmation) {
|
|
98
|
+
const message = this.dictionaryService.getKeySync('foehn-uploader.files-saved-success-message', {
|
|
99
|
+
successfulDocumentsCount: successfulDocumentsCount.toString()
|
|
100
|
+
});
|
|
101
|
+
this.growlService.addWithType(GrowlType.SUCCESS, message);
|
|
102
|
+
}
|
|
103
|
+
}), catchError((e) => {
|
|
104
|
+
this.uploadProgressService.analysisProgress.next(false);
|
|
105
|
+
this.uploadProgressService.showProgress.next(false);
|
|
106
|
+
const message = this.dictionaryService.getKeySync('foehn-uploader.transmission-error-message');
|
|
107
|
+
this.growlService.addWithType(GrowlType.DANGER, message);
|
|
108
|
+
return throwError(() => e);
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
72
111
|
}
|
|
73
112
|
MultiUploadService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MultiUploadService, deps: [{ token: i1.HttpClient }, { token: i2.GrowlBrokerService }, { token: i3.GesdemHandlerService }, { token: i4.ApplicationInfoService }, { token: i5.SdkDictionaryService }, { token: i6.UploadProgressService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
74
113
|
MultiUploadService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MultiUploadService, providedIn: 'root' });
|
|
@@ -78,4 +117,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
78
117
|
providedIn: 'root'
|
|
79
118
|
}]
|
|
80
119
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.GrowlBrokerService }, { type: i3.GesdemHandlerService }, { type: i4.ApplicationInfoService }, { type: i5.SdkDictionaryService }, { type: i6.UploadProgressService }]; } });
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktdXBsb2FkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tdXBsb2FkL2ZvZWhuLW11bHRpLXVwbG9hZC9tdWx0aS11cGxvYWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFNMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7OztBQU1wRCxNQUFNLE9BQU8sa0JBQWtCO0lBSzNCLFlBQ1ksVUFBc0IsRUFDdEIsWUFBZ0MsRUFDaEMsb0JBQTBDLEVBQzFDLHNCQUE4QyxFQUM5QyxpQkFBdUMsRUFDdkMscUJBQTRDO1FBTDVDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ2hDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFWeEQscUNBQXFDO1FBQzdCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBV3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQ3BDLGlCQUFpQixFQUNqQixzQkFBc0IsQ0FDekIsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlLENBQ1gsT0FBZSxFQUNmLE9BQWUsRUFDZixL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R0FBRyxFQUFFO1lBQ0wsTUFBTSxPQUFPLEdBQUcsMEJBQTBCLFFBQVEsQ0FBQyxRQUFRLFVBQVUsQ0FBQztZQUN0RSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLENBQVUsRUFBRSxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUNULGtFQUFrRSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDekQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZSxFQUFFLFFBQTJCO1FBQ3ZELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4RSxPQUFPLEdBQUcsT0FBTyxhQUFhLFNBQVMsUUFBUSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDeEUsQ0FBQzs7K0dBdkhRLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmYsTUFBTTsyRkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEV2ZW50LCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgR3Jvd2xCcm9rZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZm9laG4tZ3Jvd2wvZ3Jvd2wtYnJva2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3Jvd2xUeXBlIH0gZnJvbSAnLi4vLi4vZm9laG4tZ3Jvd2wvZ3Jvd2wtdHlwZXMnO1xuaW1wb3J0IHsgR2VzZGVtSGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9nZXNkZW0vZ2VzZGVtLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2RrLWFwcGluZm8vYXBwbGljYXRpb24taW5mby5zZXJ2aWNlJztcbmltcG9ydCB7IFNka0RpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2RrLWRpY3Rpb25hcnkvc2RrLWRpY3Rpb25hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBEb2N1bWVudFJlZmVyZW5jZSB9IGZyb20gJy4uL2RvY3VtZW50LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBVcGxvYWRQcm9ncmVzc1NlcnZpY2UgfSBmcm9tICcuLi9mb2Vobi11cGxvYWQtcHJvZ3Jlc3MtYmFyL3VwbG9hZC1wcm9ncmVzcy5zZXJ2aWNlJztcbmltcG9ydCB7IFVwbG9hZGVySGVscGVyIH0gZnJvbSAnLi4vdXBsb2FkZXIuaGVscGVyJztcbmltcG9ydCB7IERvY3VtZW50c1dpdGhFcnJvcnMgfSBmcm9tICcuL211bHRpLXVwbG9hZC50eXBlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNdWx0aVVwbG9hZFNlcnZpY2Uge1xuICAgIC8vIEEgd2F5IHRvIGhhdmUgYSB1bmlxdWUgSWQgcGVyIGZpbGVcbiAgICBwcml2YXRlIGdsb2JhbFNlcXVlbmNlID0gMDtcbiAgICBwcml2YXRlIHVwbG9hZGVySGVscGVyOiBVcGxvYWRlckhlbHBlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgIHByaXZhdGUgZ3Jvd2xTZXJ2aWNlOiBHcm93bEJyb2tlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZ2VzZGVtSGFuZGxlclNlcnZpY2U6IEdlc2RlbUhhbmRsZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwcGxpY2F0aW9uSW5mb1NlcnZpY2U6IEFwcGxpY2F0aW9uSW5mb1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGljdGlvbmFyeVNlcnZpY2U6IFNka0RpY3Rpb25hcnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVwbG9hZFByb2dyZXNzU2VydmljZTogVXBsb2FkUHJvZ3Jlc3NTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMudXBsb2FkZXJIZWxwZXIgPSBuZXcgVXBsb2FkZXJIZWxwZXIoXG4gICAgICAgICAgICBkaWN0aW9uYXJ5U2VydmljZSxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uSW5mb1NlcnZpY2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGxvYWREb2N1bWVudHMoXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgZm9ybUtleTogc3RyaW5nLFxuICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICBmaWxlczogRmlsZVtdLFxuICAgICAgICBrZXk6IHN0cmluZyxcbiAgICAgICAgaXNNdWx0aXBsZTogYm9vbGVhbixcbiAgICAgICAgbGFuZ3VhZ2U6IHN0cmluZyxcbiAgICAgICAgc2hvdWxkRGlzcGxheUZpbGVTYXZlZENvbmZpcm1hdGlvbjogYm9vbGVhblxuICAgICk6IE9ic2VydmFibGU8RG9jdW1lbnRzV2l0aEVycm9ycz4ge1xuICAgICAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLmdlc2RlbUhhbmRsZXJTZXJ2aWNlLmxhc3RSZXNwb25zZS5tZXRhLnJlZmVyZW5jZTtcbiAgICAgICAgaWYgKCEhcmVmZXJlbmNlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50cyA9IGZpbGVzLm1hcChmaWxlID0+XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlckhlbHBlci5tYXBUb0RvY3VtZW50UmVmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBpc011bHRpcGxlLFxuICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbG9iYWxTZXF1ZW5jZSsrXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy51cGxvYWRlckhlbHBlci5tYXBUb0Zvcm1EYXRhKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50cyxcbiAgICAgICAgICAgICAgICBmb3JtS2V5LFxuICAgICAgICAgICAgICAgIGxhbmd1YWdlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vdXBsb2FkLyR7cmVmZXJlbmNlfWA7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3Q8RG9jdW1lbnRzV2l0aEVycm9ycz4odXJsLCBmb3JtRGF0YSwge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2V2ZW50cycsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChlOiBIdHRwRXZlbnQ8RG9jdW1lbnRzV2l0aEVycm9ycz4pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzU2VydmljZS5tYW5hZ2VVcGxvYWRFdmVudEZpbHRlcihlKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZTogSHR0cEV2ZW50PERvY3VtZW50c1dpdGhFcnJvcnM+KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlIGFzIEh0dHBSZXNwb25zZTxEb2N1bWVudHNXaXRoRXJyb3JzPikuYm9keVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB0YXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NmdWxEb2N1bWVudHNDb3VudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRvY3VtZW50cyAmJiByZXN1bHQuZG9jdW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsRG9jdW1lbnRzQ291bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGREaXNwbGF5RmlsZVNhdmVkQ29uZmlybWF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYCR7c3VjY2Vzc2Z1bERvY3VtZW50c0NvdW50fSBmaWNoaWVyKHMpIHNhdXZlZ2FyZMOpKHMpIGF2ZWMgc3VjY8Ooc2A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm93bFNlcnZpY2UuYWRkV2l0aFR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3dsVHlwZS5TVUNDRVNTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGU6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3NTZXJ2aWNlLmFuYWx5c2lzUHJvZ3Jlc3MubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzU2VydmljZS5zaG93UHJvZ3Jlc3MubmV4dChmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSBsb3JzIGRlIGxhIHRyYW5zbWlzc2lvbiBkZSB2b3MgZG9jdW1lbnRzJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xTZXJ2aWNlLmFkZFdpdGhUeXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3dsVHlwZS5EQU5HRVIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgZGVsZXRlRG9jdW1lbnQoXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgZG9jdW1lbnQ6IERvY3VtZW50UmVmZXJlbmNlXG4gICAgKTogT2JzZXJ2YWJsZTxEb2N1bWVudFJlZmVyZW5jZT4ge1xuICAgICAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLmdlc2RlbUhhbmRsZXJTZXJ2aWNlLmxhc3RSZXNwb25zZS5tZXRhLnJlZmVyZW5jZTtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vZGVsZXRlLyR7cmVmZXJlbmNlfS9kb2MvJHtkb2N1bWVudC5yZWZlcmVuY2V9YDtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlbGV0ZSh1cmwpLnBpcGUoXG4gICAgICAgICAgICAvLyBSZWZsZWN0IHRoZSBkb2N1bWVudCBvbmNlIHRoZSB1cGRhdGUgaXMgZG9uZSB0byBlYXNlIGNoYWluaW5nIG9ic2VydmFibGVzLlxuICAgICAgICAgICAgbWFwKCgpID0+IGRvY3VtZW50KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBTdXBwcmVzc2lvbiBkdSBmaWNoaWVyICR7ZG9jdW1lbnQuZmlsZW5hbWV9IHLDqXVzc2llYDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3dsU2VydmljZS5hZGRXaXRoVHlwZShHcm93bFR5cGUuU1VDQ0VTUywgbWVzc2FnZSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGU6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgJ1VuZSBlcnJldXIgZXN0IHN1cnZlbnVlIGxvcnMgZGUgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgZG9jdW1lbnQnO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xTZXJ2aWNlLmFkZFdpdGhUeXBlKEdyb3dsVHlwZS5EQU5HRVIsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXREb3dubG9hZFVybChiYXNlVXJsOiBzdHJpbmcsIGRvY3VtZW50OiBEb2N1bWVudFJlZmVyZW5jZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMuZ2VzZGVtSGFuZGxlclNlcnZpY2UubGFzdFJlc3BvbnNlLm1ldGEucmVmZXJlbmNlO1xuICAgICAgICByZXR1cm4gYCR7YmFzZVVybH0vZG93bmxvYWQvJHtyZWZlcmVuY2V9L2RvYy8ke2RvY3VtZW50LnJlZmVyZW5jZX1gO1xuICAgIH1cbn1cbiJdfQ==
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktdXBsb2FkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tdXBsb2FkL2ZvZWhuLW11bHRpLXVwbG9hZC9tdWx0aS11cGxvYWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFjLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU0xRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBSzFELE1BQU0sT0FBTyxrQkFBa0I7SUFNM0IsWUFDWSxVQUFzQixFQUN0QixZQUFnQyxFQUNoQyxvQkFBMEMsRUFDMUMsc0JBQThDLEVBQzlDLGlCQUF1QyxFQUN2QyxxQkFBNEM7UUFMNUMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDaEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQVh4RCxxQ0FBcUM7UUFDN0IsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFFVixrQ0FBNkIsR0FBRyxDQUFDLENBQUM7UUF5SzNDLDZCQUF3QixHQUFHLENBQy9CLDBC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Q0FBQyxPQUFPLEVBQ2pCLE9BQU8sQ0FDVixDQUFDO2FBQ0w7UUFDTCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXBELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQzdDLDJDQUEyQyxDQUM5QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6RCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ1YsQ0FBQzs7K0dBM0tRLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmYsTUFBTTsyRkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEV2ZW50LCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb25jYXQsIEVNUFRZLCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCB0b0FycmF5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBHcm93bEJyb2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9mb2Vobi1ncm93bC9ncm93bC1icm9rZXIuc2VydmljZSc7XG5pbXBvcnQgeyBHcm93bFR5cGUgfSBmcm9tICcuLi8uLi9mb2Vobi1ncm93bC9ncm93bC10eXBlcyc7XG5pbXBvcnQgeyBHZXNkZW1IYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2dlc2RlbS9nZXNkZW0taGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZGstYXBwaW5mby9hcHBsaWNhdGlvbi1pbmZvLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2RrRGljdGlvbmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZGstZGljdGlvbmFyeS9zZGstZGljdGlvbmFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IERvY3VtZW50UmVmZXJlbmNlIH0gZnJvbSAnLi4vZG9jdW1lbnQtcmVmZXJlbmNlJztcbmltcG9ydCB7IFVwbG9hZFByb2dyZXNzU2VydmljZSB9IGZyb20gJy4uL2ZvZWhuLXVwbG9hZC1wcm9ncmVzcy1iYXIvdXBsb2FkLXByb2dyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXBsb2FkZXJIZWxwZXIgfSBmcm9tICcuLi91cGxvYWRlci5oZWxwZXInO1xuaW1wb3J0IHsgRG9jdW1lbnRzV2l0aEVycm9ycyB9IGZyb20gJy4vbXVsdGktdXBsb2FkLnR5cGUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpVXBsb2FkU2VydmljZSB7XG4gICAgLy8gQSB3YXkgdG8gaGF2ZSBhIHVuaXF1ZSBJZCBwZXIgZmlsZVxuICAgIHByaXZhdGUgZ2xvYmFsU2VxdWVuY2UgPSAwO1xuICAgIHByaXZhdGUgdXBsb2FkZXJIZWxwZXI6IFVwbG9hZGVySGVscGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgTkJfQ09OQ1VSUkVOVF9GSUxFU19UT19VUExPQUQgPSAzO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSBncm93bFNlcnZpY2U6IEdyb3dsQnJva2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBnZXNkZW1IYW5kbGVyU2VydmljZTogR2VzZGVtSGFuZGxlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBwbGljYXRpb25JbmZvU2VydmljZTogQXBwbGljYXRpb25JbmZvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWN0aW9uYXJ5U2VydmljZTogU2RrRGljdGlvbmFyeVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXBsb2FkUHJvZ3Jlc3NTZXJ2aWNlOiBVcGxvYWRQcm9ncmVzc1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy51cGxvYWRlckhlbHBlciA9IG5ldyBVcGxvYWRlckhlbHBlcihcbiAgICAgICAgICAgIGRpY3Rpb25hcnlTZXJ2aWNlLFxuICAgICAgICAgICAgYXBwbGljYXRpb25JbmZvU2VydmljZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHVwbG9hZERvY3VtZW50cyhcbiAgICAgICAgYmFzZVVybDogc3RyaW5nLFxuICAgICAgICBmb3JtS2V5OiBzdHJpbmcsXG4gICAgICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgICAgIGZpbGVzOiBGaWxlW10sXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICBpc011bHRpcGxlOiBib29sZWFuLFxuICAgICAgICBsYW5ndWFnZTogc3RyaW5nLFxuICAgICAgICBzaG91bGREaXNwbGF5RmlsZVNhdmVkQ29uZmlybWF0aW9uOiBib29sZWFuXG4gICAgKTogT2JzZXJ2YWJsZTxEb2N1bWVudHNXaXRoRXJyb3JzPiB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMuZ2VzZGVtSGFuZGxlclNlcnZpY2UubGFzdFJlc3BvbnNlLm1ldGEucmVmZXJlbmNlO1xuICAgICAgICBpZiAoISFyZWZlcmVuY2U/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vdXBsb2FkLyR7cmVmZXJlbmNlfWA7XG4gICAgICAgICAgICBjb25zdCBmaWxlc1RvR3JvdXAgPSBbLi4uZmlsZXNdO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBzT2ZGaWxlczogRmlsZVtdW10gPSBbXTtcblxuICAgICAgICAgICAgd2hpbGUgKCEhZmlsZXNUb0dyb3VwLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGdyb3Vwc09mRmlsZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNUb0dyb3VwLnNwbGljZSgwLCB0aGlzLk5CX0NPTkNVUlJFTlRfRklMRVNfVE9fVVBMT0FEKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFycmF5T2ZEb2N1bWVudHNXaXRoRXJyb3JzT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxEb2N1bWVudHNXaXRoRXJyb3JzPltdID0gZ3JvdXBzT2ZGaWxlcy5tYXAoXG4gICAgICAgICAgICAgICAgKGdyb3VwT2ZGaWxlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudHMgPSBncm91cE9mRmlsZS5tYXAoZmlsZSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlckhlbHBlci5tYXBUb0RvY3VtZW50UmVmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTXVsdGlwbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nbG9iYWxTZXF1ZW5jZSsrXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy51cGxvYWRlckhlbHBlci5tYXBUb0Zvcm1EYXRhKFxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERvY3VtZW50c1dpdGhFcnJvcnNPYnNlcnZhYmxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGREaXNwbGF5RmlsZVNhdmVkQ29uZmlybWF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cHNPZkZpbGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChhcnJheU9mRG9jdW1lbnRzV2l0aEVycm9yc09ic2VydmFibGUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5T2ZEb2N1bWVudHNXaXRoRXJyb3JzT2JzZXJ2YWJsZVswXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gIGNvbmNhdCgpIG9wZXJhdG9yIHNlcXVlbnRpYWxseSBlbWl0cyBhbGwgdmFsdWVzIGZyb20gdGhlIGdpdmVuIE9ic2VydmFibGUgYW5kIHRoZW4gcHJvY2VlZCB0byB0aGUgbmV4dCBvbmUuXG4gICAgICAgICAgICByZXR1cm4gY29uY2F0KC4uLmFycmF5T2ZEb2N1bWVudHNXaXRoRXJyb3JzT2JzZXJ2YWJsZSkucGlwZShcbiAgICAgICAgICAgICAgICAvLyAgdG9BcnJheSgpIG9wZXJhdG9yIGNvbGxlY3RzIGFsbCB0aGUgdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBvYnNlcnZhYmxlIGludG8gYW4gYXJyYXkgYW5kIHNlbmRzIGl0IHRvIHRoZSBvYnNlcnZlclxuICAgICAgICAgICAgICAgIHRvQXJyYXkoKSxcbiAgICAgICAgICAgICAgICBtYXAodGhpcy5tZXJnZURvY3VtZW50c1dpdGhFcnJvcnMuYmluZCh0aGlzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgZGVsZXRlRG9jdW1lbnQoXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgZG9jdW1lbnQ6IERvY3VtZW50UmVmZXJlbmNlXG4gICAgKTogT2JzZXJ2YWJsZTxEb2N1bWVudFJlZmVyZW5jZT4ge1xuICAgICAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLmdlc2RlbUhhbmRsZXJTZXJ2aWNlLmxhc3RSZXNwb25zZS5tZXRhLnJlZmVyZW5jZTtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vZGVsZXRlLyR7cmVmZXJlbmNlfS9kb2MvJHtkb2N1bWVudC5yZWZlcmVuY2V9YDtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlbGV0ZSh1cmwpLnBpcGUoXG4gICAgICAgICAgICAvLyBSZWZsZWN0IHRoZSBkb2N1bWVudCBvbmNlIHRoZSB1cGRhdGUgaXMgZG9uZSB0byBlYXNlIGNoYWluaW5nIG9ic2VydmFibGVzLlxuICAgICAgICAgICAgbWFwKCgpID0+IGRvY3VtZW50KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5U3luYyhcbiAgICAgICAgICAgICAgICAgICAgJ2ZvZWhuLXVwbG9hZGVyLmZpbGVzLWRlbGV0ZWQtc3VjY2Vzcy1tZXNzYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgeyBmaWxlbmFtZTogZG9jdW1lbnQuZmlsZW5hbWUgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm93bFNlcnZpY2UuYWRkV2l0aFR5cGUoR3Jvd2xUeXBlLlNVQ0NFU1MsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5U3luYyhcbiAgICAgICAgICAgICAgICAgICAgJ2ZvZWhuLXVwbG9hZGVyLmRlbGV0ZS1lcnJvci1tZXNzYWdlJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm93bFNlcnZpY2UuYWRkV2l0aFR5cGUoR3Jvd2xUeXBlLkRBTkdFUiwgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldERvd25sb2FkVXJsKGJhc2VVcmw6IHN0cmluZywgZG9jdW1lbnQ6IERvY3VtZW50UmVmZXJlbmNlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy5nZXNkZW1IYW5kbGVyU2VydmljZS5sYXN0UmVzcG9uc2UubWV0YS5yZWZlcmVuY2U7XG4gICAgICAgIHJldHVybiBgJHtiYXNlVXJsfS9kb3dubG9hZC8ke3JlZmVyZW5jZX0vZG9jLyR7ZG9jdW1lbnQucmVmZXJlbmNlfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREb2N1bWVudHNXaXRoRXJyb3JzT2JzZXJ2YWJsZShcbiAgICAgICAgdXJsOiBzdHJpbmcsXG4gICAgICAgIGZvcm1EYXRhOiBGb3JtRGF0YSxcbiAgICAgICAgc2hvdWxkRGlzcGxheUZpbGVTYXZlZENvbmZpcm1hdGlvbjogYm9vbGVhbixcbiAgICAgICAgcGFja2FnZUluZGV4OiBudW1iZXIgPSAwLFxuICAgICAgICBuYlBhY2thZ2VzOiBudW1iZXIgPSAxXG4gICAgKTogT2JzZXJ2YWJsZTxEb2N1bWVudHNXaXRoRXJyb3JzPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0PERvY3VtZW50c1dpdGhFcnJvcnM+KHVybCwgZm9ybURhdGEsIHtcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiAnZXZlbnRzJyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZTogSHR0cEV2ZW50PERvY3VtZW50c1dpdGhFcnJvcnM+KSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzU2VydmljZS5tYW5hZ2VVcGxvYWRFdmVudEZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYlBhY2thZ2VzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAgICAgKGU6IEh0dHBFdmVudDxEb2N1bWVudHNXaXRoRXJyb3JzPikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIChlIGFzIEh0dHBSZXNwb25zZTxEb2N1bWVudHNXaXRoRXJyb3JzPikuYm9keVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NmdWxEb2N1bWVudHNDb3VudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZG9jdW1lbnRzICYmIHJlc3VsdC5kb2N1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsRG9jdW1lbnRzQ291bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZERpc3BsYXlGaWxlU2F2ZWRDb25maXJtYXRpb25cbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXRLZXlTeW5jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb2Vobi11cGxvYWRlci5maWxlcy1zYXZlZC1zdWNjZXNzLW1lc3NhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bERvY3VtZW50c0NvdW50OiBzdWNjZXNzZnVsRG9jdW1lbnRzQ291bnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3dsU2VydmljZS5hZGRXaXRoVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm93bFR5cGUuU1VDQ0VTUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzU2VydmljZS5hbmFseXNpc1Byb2dyZXNzLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzU2VydmljZS5zaG93UHJvZ3Jlc3MubmV4dChmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5U3luYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb2Vobi11cGxvYWRlci50cmFuc21pc3Npb24tZXJyb3ItbWVzc2FnZSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm93bFNlcnZpY2UuYWRkV2l0aFR5cGUoR3Jvd2xUeXBlLkRBTkdFUiwgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VEb2N1bWVudHNXaXRoRXJyb3JzID0gKFxuICAgICAgICBhcnJheU9mRG9jdW1lbnRzV2l0aEVycm9yczogRG9jdW1lbnRzV2l0aEVycm9yc1tdXG4gICAgKTogRG9jdW1lbnRzV2l0aEVycm9ycyA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlZFJlc3BvbnNlOiBEb2N1bWVudHNXaXRoRXJyb3JzID0gbmV3IERvY3VtZW50c1dpdGhFcnJvcnMoKTtcbiAgICAgICAgYXJyYXlPZkRvY3VtZW50c1dpdGhFcnJvcnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmICghIWl0ZW0uZG9jdW1lbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZFJlc3BvbnNlLmRvY3VtZW50cykge1xuICAgICAgICAgICAgICAgICAgICBtZXJnZWRSZXNwb25zZS5kb2N1bWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWVyZ2VkUmVzcG9uc2UuZG9jdW1lbnRzID0gbWVyZ2VkUmVzcG9uc2UuZG9jdW1lbnRzLmNvbmNhdChcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kb2N1bWVudHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhaXRlbS5lcnJvcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkUmVzcG9uc2UuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lcmdlZFJlc3BvbnNlLmVycm9ycyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtZXJnZWRSZXNwb25zZS5lcnJvcnMgPSBtZXJnZWRSZXNwb25zZS5lcnJvcnMuY29uY2F0KFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmVycm9yc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVyZ2VkUmVzcG9uc2U7XG4gICAgfTtcbn1cbiJdfQ==
|