@posiwise/smart-crm 0.0.37 → 0.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.mjs +10 -10
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.mjs +8 -8
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.mjs +23 -23
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-invoices/smart-crm-account-invoices.component.mjs +10 -10
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.mjs +9 -9
- package/esm2022/lib/private/components/smart-crm-actions/smart-crm-actions.component.mjs +20 -18
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.mjs +5 -5
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.mjs +5 -5
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-configuration.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.mjs +6 -6
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.mjs +9 -9
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.mjs +9 -9
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.mjs +8 -8
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.mjs +8 -8
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.mjs +17 -17
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.mjs +13 -13
- package/esm2022/lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-account-insight/smart-crm-account-insight.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-analysis-insight/smart-crm-analysis.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-contact-insight/smart-crm-contact-insight.component.mjs +7 -7
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-insight.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-marketing-insight/smart-crm-marketing-insight.component.mjs +5 -5
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-opportunities-insight/smart-crm-opportunities-insight.component.mjs +10 -10
- package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.mjs +6 -6
- package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads.component.mjs +7 -7
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.mjs +7 -7
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.mjs +6 -6
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.mjs +10 -10
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.mjs +9 -9
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.mjs +17 -17
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.mjs +13 -11
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.mjs +10 -10
- package/esm2022/lib/private/components/smart-crm-tabs/smart-crm-tabs.component.mjs +3 -3
- package/esm2022/lib/private/smart-crm-private.module.mjs +33 -33
- package/esm2022/lib/private/smart-crm-private.routing.module.mjs +8 -8
- package/esm2022/lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component.mjs +1 -1
- package/esm2022/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.mjs +3 -3
- package/esm2022/lib/public/components/smart-crm-signup/smart-crm-signup.component.mjs +2 -2
- package/esm2022/lib/public/smart-crm-public.module.mjs +4 -4
- package/esm2022/lib/public/smart-crm-public.routing.module.mjs +1 -1
- package/fesm2022/posiwise-smart-crm.mjs +162 -159
- package/fesm2022/posiwise-smart-crm.mjs.map +1 -1
- package/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.d.ts +16 -16
- package/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.d.ts +12 -12
- package/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.d.ts +46 -47
- package/lib/private/components/smart-crm-accounts/smart-crm-account-invoices/smart-crm-account-invoices.component.d.ts +10 -10
- package/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.d.ts +12 -12
- package/lib/private/components/smart-crm-actions/smart-crm-actions.component.d.ts +15 -15
- package/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.d.ts +8 -8
- package/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.d.ts +5 -5
- package/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.d.ts +4 -4
- package/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.d.ts +7 -7
- package/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.d.ts +1 -1
- package/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.d.ts +6 -6
- package/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.d.ts +5 -5
- package/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.d.ts +8 -8
- package/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.d.ts +7 -7
- package/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.d.ts +9 -9
- package/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.d.ts +11 -11
- package/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.d.ts +27 -27
- package/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.d.ts +19 -19
- package/lib/private/components/smart-crm-insight/smart-crm-account-insight/smart-crm-account-insight.component.d.ts +19 -19
- package/lib/private/components/smart-crm-insight/smart-crm-analysis-insight/smart-crm-analysis.component.d.ts +7 -7
- package/lib/private/components/smart-crm-insight/smart-crm-contact-insight/smart-crm-contact-insight.component.d.ts +13 -13
- package/lib/private/components/smart-crm-insight/smart-crm-marketing-insight/smart-crm-marketing-insight.component.d.ts +8 -8
- package/lib/private/components/smart-crm-insight/smart-crm-opportunities-insight/smart-crm-opportunities-insight.component.d.ts +18 -18
- package/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.d.ts +6 -6
- package/lib/private/components/smart-crm-leads/smart-crm-leads.component.d.ts +9 -9
- package/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.d.ts +7 -7
- package/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.d.ts +10 -10
- package/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.d.ts +8 -8
- package/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.d.ts +3 -3
- package/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.d.ts +10 -10
- package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.d.ts +23 -23
- package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.d.ts +27 -27
- package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.d.ts +12 -12
- package/lib/private/components/smart-crm-tabs/smart-crm-tabs.component.d.ts +1 -1
- package/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -2,18 +2,18 @@ import { __decorate, __metadata } from "tslib";
|
|
|
2
2
|
import { DOCUMENT } from '@angular/common';
|
|
3
3
|
import { Component, EventEmitter, Inject, Injector } from '@angular/core';
|
|
4
4
|
import { Validators } from '@angular/forms';
|
|
5
|
-
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
|
6
|
-
import { CRM_ACCOUNT_FILES_PATH, CrmService } from '@posiwise/smart-crm-shared';
|
|
7
|
-
import { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';
|
|
8
|
-
import { ROUTERS } from '../../../../../shared/routers/routers';
|
|
9
|
-
import { UploadStatus } from 'ngx-uploader';
|
|
10
|
-
import swal from 'sweetalert2';
|
|
11
|
-
import { DOCUMENT_TYPE_EXT, TOKEN_HEADER_KEY } from '@posiwise/common-utilities';
|
|
12
5
|
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
13
6
|
import { AuthService } from '@posiwise/common-services';
|
|
7
|
+
import { DOCUMENT_TYPE_EXT, TOKEN_HEADER_KEY } from '@posiwise/common-utilities';
|
|
14
8
|
import { HelperService } from '@posiwise/helper-service';
|
|
9
|
+
import { CRM_ACCOUNT_FILES_PATH, CrmService } from '@posiwise/smart-crm-shared';
|
|
15
10
|
import { ValidateForm } from '@posiwise/utils';
|
|
16
11
|
import moment from 'moment';
|
|
12
|
+
import { UploadStatus } from 'ngx-uploader';
|
|
13
|
+
import swal from 'sweetalert2';
|
|
14
|
+
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
|
15
|
+
import { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';
|
|
16
|
+
import { ROUTERS } from '../../../../../shared/routers/routers';
|
|
17
17
|
import * as i0 from "@angular/core";
|
|
18
18
|
import * as i1 from "@posiwise/smart-crm-shared";
|
|
19
19
|
import * as i2 from "@ng-bootstrap/ng-bootstrap";
|
|
@@ -37,15 +37,17 @@ export class SmartCrmOpportunitiesInfoComponent extends AppBaseComponent {
|
|
|
37
37
|
this.modalService = modalService;
|
|
38
38
|
this.authService = authService;
|
|
39
39
|
this.document = document;
|
|
40
|
+
this.filteredAccounts = [];
|
|
40
41
|
this.isLoaded = false;
|
|
41
42
|
this.isFormEdit = true;
|
|
42
|
-
this.submitted = false;
|
|
43
|
-
this.buttonBusy = false;
|
|
44
|
-
this.filteredAccounts = [];
|
|
45
43
|
this.isDisabled = false;
|
|
46
44
|
this.updating = false;
|
|
47
45
|
this.showFullComment = false;
|
|
48
46
|
this.submitAction = false;
|
|
47
|
+
this.buttonBusy = false;
|
|
48
|
+
this.submitted = false;
|
|
49
|
+
this.dangerColor = false;
|
|
50
|
+
this.dragOver = false;
|
|
49
51
|
this.routers = ROUTERS;
|
|
50
52
|
this.options = { concurrency: 1, maxUploads: 3 };
|
|
51
53
|
this.uploadInput = new EventEmitter();
|
|
@@ -478,4 +480,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
478
480
|
type: Inject,
|
|
479
481
|
args: [DOCUMENT]
|
|
480
482
|
}] }], propDecorators: { onCommentSave: [] } });
|
|
481
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWluZm8vc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWluZm8vc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBb0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hFLE9BQU8sRUFBeUMsWUFBWSxFQUFtQixNQUFNLGNBQWMsQ0FBQztB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VTtnQkFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsTUFBTTtZQUNWLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxNQUFNO2dCQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixNQUFNO1lBQ1YsS0FBSyxNQUFNO2dCQUNQLE1BQU07WUFDVixRQUFRO1FBQ1osQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILHFDQUFxQztRQUNyQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0EvaEJRLGtDQUFrQyx1SEE4RS9CLFFBQVE7bUdBOUVYLGtDQUFrQyw4RkM5Qi9DLHl4c0JBNGVBOztBRDlSSTtJQURDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozt1RUFrQjlCOzRGQWpNUSxrQ0FBa0M7a0JBTDlDLFNBQVM7K0JBQ0ksaUNBQWlDOzswQkFrRnRDLE1BQU07MkJBQUMsUUFBUTt5Q0FrR3BCLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IENSTV9BQ0NPVU5UX0ZJTEVTX1BBVEgsIENybVNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2Uvc21hcnQtY3JtLXNoYXJlZCc7XG5pbXBvcnQgeyBBcHBTbWFydENybSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvc21hcnQtY3JtLm1vZGVsJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcbmltcG9ydCB7IFVwbG9hZEZpbGUsIFVwbG9hZElucHV0LCBVcGxvYWRPdXRwdXQsIFVwbG9hZFN0YXR1cywgVXBsb2FkZXJPcHRpb25zIH0gZnJvbSAnbmd4LXVwbG9hZGVyJztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcblxuaW1wb3J0IHsgRE9DVU1FTlRfVFlQRV9FWFQsIFRPS0VOX0hFQURFUl9LRVksIFN1YnNjcmlwdGlvbiB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IENybUFjY291bnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL2NybS1hY2NvdW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDcm1BY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL2NybS1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IENybVZlcnNpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL2NybS1vcHBvcnR1bml0eS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGVGb3JtIH0gZnJvbSAnQHBvc2l3aXNlL3V0aWxzJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gICAgT3Bwb3J0dW5pdHlDb21tZW50LFxuICAgIE9wcG9ydHVuaXR5Q29udGFjdCxcbiAgICBPcHBvcnR1bml0eURhdGFcbn0gZnJvbSAnbGlicy9zbWFydC1jcm0vc3JjL2xpYi9zaGFyZWQvaW50ZXJmYWNlL3NtYXJ0LWNybS1tb2R1bGUuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1pbmZvJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mby5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mby5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Q3JtT3Bwb3J0dW5pdGllc0luZm9Db21wb25lbnRcbiAgICBleHRlbmRzIEFwcEJhc2VDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIGlzRm9ybUVkaXQgPSB0cnVlO1xuXG4gICAgb3Bwb3J0dW5pdGllc0lkOiBudW1iZXI7XG5cbiAgICBkYXRhOiBPcHBvcnR1bml0eURhdGE7XG5cbiAgICBhYm91dENvbnRyb2xzOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG4gICAgYnV0dG9uQnVzeSA9IGZhbHNlO1xuXG4gICAgYWNjb3VudHM6IENybUFjY291bnRbXTtcblxuICAgIGZpbHRlcmVkQWNjb3VudHM6IENybUFjY291bnRbXSA9IFtdO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGFjdGlvbnM6IENybUFjdGlvbltdO1xuXG4gICAgYnV0dG9uRGlzYWJsZTogYm9vbGVhbjtcblxuICAgIGhhc0FjY2VzczogYm9vbGVhbjtcblxuICAgIG9wdGlvbnM6IFVwbG9hZGVyT3B0aW9ucztcblxuICAgIHVwbG9hZElucHV0OiBFdmVudEVtaXR0ZXI8VXBsb2FkSW5wdXQ+O1xuXG4gICAgZmlsZXM6IFVwbG9hZEZpbGVbXTtcblxuICAgIHRva2VuOiBzdHJpbmc7XG5cbiAgICBkcmFnT3ZlcjogYm9vbGVhbjtcblxuICAgIGNvbnRhY3RJZDogbnVtYmVyO1xuXG4gICAgYWNjb3VudElkOiBudW1iZXI7XG5cbiAgICB1c2VySWQ6IG51bWJlcjtcblxuICAgIGFjdGlvbkNvbnRyb2xzOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgaXNEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgdXBkYXRpbmcgPSBmYWxzZTtcblxuICAgIGFjdGlvbklkOiBudW1iZXI7XG5cbiAgICBzaG93RnVsbENvbW1lbnQgPSBmYWxzZTtcblxuICAgIGNvbW1lbnRJZDogbnVtYmVyO1xuXG4gICAgb3Bwb3J0dW5pdGllc0NvbW1lbnRzOiBPcHBvcnR1bml0eUNvbW1lbnRbXTtcblxuICAgIGRhbmdlckNvbG9yOiBib29sZWFuO1xuXG4gICAgYWxsQ29udGFjdHM6IE9wcG9ydHVuaXR5Q29udGFjdFtdO1xuXG4gICAgZmlsdGVyZWRDb250YWN0czogT3Bwb3J0dW5pdHlDb250YWN0W107XG5cbiAgICBvcHBvcnR1bml0aWVzVmVyc2lvbmluZzogQ3JtVmVyc2lvbltdO1xuXG4gICAgc3VibWl0QWN0aW9uID0gZmFsc2U7XG5cbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjcm1TZXJ2aWNlOiBDcm1TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudFxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHsgY29uY3VycmVuY3k6IDEsIG1heFVwbG9hZHM6IDMgfTtcbiAgICAgICAgdGhpcy51cGxvYWRJbnB1dCA9IG5ldyBFdmVudEVtaXR0ZXI8VXBsb2FkSW5wdXQ+KCk7XG4gICAgICAgIHRoaXMudG9rZW4gPSBidG9hKHRoaXMuYXV0aFNlcnZpY2UuZ2V0VG9rZW4oKSk7XG4gICAgICAgIHRoaXMuZmlsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5hY3Rpb25Db250cm9scyA9IEFwcFNtYXJ0Q3JtLmdldE9wcG9ydHVuaXR5QWN0aW9uc0Zvcm0odGhpcy5pc0Rpc2FibGVkKTtcbiAgICAgICAgdGhpcy5hYm91dENvbnRyb2xzID0gQXBwU21hcnRDcm0uZ2V0T3Bwb3J0dW5pdGllc0Zvcm0oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRVc2VyU3Vic2NyaXB0aW9uKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBY3Rpb25zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRPcHBvcnR1bml0aWVzQ29tbWVudHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0lkID0gTnVtYmVyKGRhdGFbJ2lkJ10pO1xuICAgICAgICAgICAgaWYgKHRoaXMub3Bwb3J0dW5pdGllc0lkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRPcHBvcnR1bml0eURldGFpbHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmdldCgnY3JtX29wcG9ydHVuaXR5X2lkJykuc2V0VmFsdWUodGhpcy5vcHBvcnR1bml0aWVzSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbkRhdGVTZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLmdldENvbnRhY3RWZXJzaW9uKCk7XG4gICAgICAgIHRoaXMudXNlckluZm8oKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCB1c2VyIGluZm8gKi9cbiAgICBwcml2YXRlIHVzZXJJbmZvKCkge1xuICAgICAgICB0aGlzLnVzZXJTdG9yZSgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlcklkID0gcmVzLmlkO1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uQ29udHJvbHMuZ2V0KCdvd25lcl9pZCcpLnNldFZhbHVlKHJlcy5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgb3Bwb3J0dW5pdGllcyBkZXRhaWxzICovXG4gICAgZ2V0T3Bwb3J0dW5pdHlEZXRhaWxzKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRPcHBvcnR1bml0eURldGFpbHModGhpcy5zdWJzY3JpcHRpb24/LmlkLCB0aGlzLm9wcG9ydHVuaXRpZXNJZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuY3JtX2NvbnRhY3RfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmNybV9jb250YWN0LmRpc3BsYXlOYW1lID0gYCR7cmVzcG9uc2UuY3JtX2NvbnRhY3QuZmlyc3RfbmFtZX0gJHtyZXNwb25zZS5jcm1fY29udGFjdC5sYXN0X25hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9wZXJhdG9yLWFzc2lnbm1lbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLm1vbnRobHlfYW1vdW50ID0gdGhpcy5kYXRhLm1vbnRobHlfYW1vdW50IC8gMTAwO1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb3BlcmF0b3ItYXNzaWdubWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEub25lX3RpbWVfYW1vdW50ID0gdGhpcy5kYXRhLm9uZV90aW1lX2Ftb3VudCAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWN0SWQgPSByZXNwb25zZS5jcm1fY29udGFjdF9pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2NvdW50SWQgPSByZXNwb25zZS5jcm1fYWNjb3VudF9pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYm91dENvbnRyb2xzLnBhdGNoVmFsdWUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3V0Q29udHJvbHMuZ2V0KCdjcm1fY29udGFjdF9pZCcpLnBhdGNoVmFsdWUocmVzcG9uc2UuY3JtX2NvbnRhY3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3V0Q29udHJvbHMuZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnBhdGNoVmFsdWUocmVzcG9uc2UuY3JtX2FjY291bnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5zZXRWYWx1ZSh0aGlzLmNvbnRhY3RJZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uQ29udHJvbHMuZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnNldFZhbHVlKHRoaXMuYWNjb3VudElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gdXBkYXRlIG9wcG9ydHVuaXRpZXMgKi9cbiAgICB1cGRhdGVPcHBvcnR1bml0aWVzKCkge1xuICAgICAgICBpZiAodGhpcy5hYm91dENvbnRyb2xzLmludmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5hYm91dENvbnRyb2xzO1xuICAgICAgICAgICAgY29uc3QgZGF0YU9iamVjdCA9IHtcbiAgICAgICAgICAgICAgICBjcm1fYWNjb3VudF9pZDogZm9ybURhdGEuZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnZhbHVlPy5pZCxcbiAgICAgICAgICAgICAgICBjcm1fY29udGFjdF9pZDogZm9ybURhdGEuZ2V0KCdjcm1fY29udGFjdF9pZCcpLnZhbHVlPy5pZCxcbiAgICAgICAgICAgICAgICBvbmVfdGltZV9hbW91bnQ6IGZvcm1EYXRhLmdldCgnb25lX3RpbWVfYW1vdW50JykudmFsdWUgKiAxMDAsXG4gICAgICAgICAgICAgICAgbW9udGhseV9hbW91bnQ6IGZvcm1EYXRhLmdldCgnbW9udGhseV9hbW91bnQnKS52YWx1ZSAqIDEwMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgICAgIC51cGRhdGVPcHBvcnR1bml0aWVzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgdGhpcy5vcHBvcnR1bml0aWVzSWQsIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZm9ybURhdGEudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIC4uLmRhdGFPYmplY3RcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlVwZGF0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Zvcm1FZGl0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHBvcnR1bml0eURldGFpbHMoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIHNhdmUgY29tbWVudCAqL1xuICAgIEBWYWxpZGF0ZUZvcm0oJ2FjdGlvbkNvbnRyb2xzJylcbiAgICBvbkNvbW1lbnRTYXZlKCkge1xuICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSB0cnVlO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5hY3Rpb25Db250cm9scy52YWx1ZTtcbiAgICAgICAgZGF0YS53aGVuID0gSGVscGVyU2VydmljZS5kYXRlRm9ybWF0KGRhdGE/LndoZW4pO1xuICAgICAgICB0aGlzLmNybVNlcnZpY2VcbiAgICAgICAgICAgIC5wb3N0QWNjb3VudENvbW1lbnQodGhpcy5zdWJzY3JpcHRpb24/LmlkLCBkYXRhKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25Db250cm9scy5nZXQoJ2NvbW1lbnQnKS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3Bwb3J0dW5pdGllc0NvbW1lbnRzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLkNvbW1lbnRTdWJtaXR0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0QWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG93RGF0ZVBpY2tlcihldmVudCwgaWQpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25Db250cm9scy5nZXQoJ3doZW4nKS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgIGNvbnN0IGFjdGlvbkJ1dHRvbnMgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgICAgICAnYWN0aW9uLWJ0bidcbiAgICAgICAgKSBhcyBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+ICYgSXRlcmFibGU8RWxlbWVudD47XG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIGFjdGlvbkJ1dHRvbnMpIHtcbiAgICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICAgIHRoaXMuYWN0aW9uQ29udHJvbHMuZ2V0KCdjcm1fYWN0aW9uX2lkJykuc2V0VmFsdWUoaWQpO1xuICAgIH1cblxuICAgIG9uRGF0ZVNlbGVjdGVkKCkge1xuICAgICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmdldCgnd2hlbicpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2hlbicpPy5bJ3ZhbHVlJ107XG4gICAgICAgICAgICBjb25zdCB0b2RheURhdGUgPSBtb21lbnQobmV3IERhdGUoKSkuZm9ybWF0KCdERC1NTU0tWVlZWScpO1xuICAgICAgICAgICAgaWYgKHRvZGF5RGF0ZSA8IHNlbGVjdGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25Db250cm9scy5nZXQoJ2NvbXBsZXRlZCcpLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmdldCgnY29tcGxldGVkJykuc2V0VmFsdWUoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmdldCgnY29tcGxldGVkJykuZW5hYmxlKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgYWxsIGNvbW1lbnRzICovXG4gICAgcHJpdmF0ZSBnZXRPcHBvcnR1bml0aWVzQ29tbWVudHMoKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgLmdldE9wcG9ydHVuaXRpZXNDb21tZW50cyh0aGlzLm9wcG9ydHVuaXRpZXNJZCwgdGhpcy5zdWJzY3JpcHRpb24/LmlkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcD8uY3JtX2FjY291bnRfYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0NvbW1lbnRzID0gcmVzcC5jcm1fYWNjb3VudF9hY3Rpb25zO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0NvbW1lbnRzLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLndoZW5fc2hvcnRfZGF0ZSA9IG1vbWVudChkYXRhLndoZW4pLmZvcm1hdCgnREQtTU1NLVlZWVknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBtb21lbnQobmV3IERhdGUoZGF0YS53aGVuKSkuZGlmZihtb21lbnQobmV3IERhdGUoKSksICdkYXlzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9tZW50KG5ldyBEYXRlKGRhdGEud2hlbikpIDwgbW9tZW50KG5ldyBEYXRlKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZHVlJ10gPSBgT3ZlcmR1ZSBieSAke01hdGguYWJzKGRpZmYpfSBkYXlzYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydjb2xvciddID0gdGhpcy5kYW5nZXJDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZHVlJ10gPSBgSW4gJHtkaWZmfSBkYXlzYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydjb2xvciddID0gIXRoaXMuZGFuZ2VyQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0NvbW1lbnRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShhLndoZW4pLmdldFRpbWUoKSAtIG5ldyBEYXRlKGIud2hlbikuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzQ29tbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bJ3doZW4nXSA9IG1vbWVudChpdGVtWyd3aGVuJ10pLmZvcm1hdCgnREQtTU1NLVlZWVknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bJ3llYXInXSA9IG1vbWVudChpdGVtWyd3aGVuJ10sICdERC1NTU0tWVlZWScpLmZvcm1hdCgnWVlZWScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVsnbW9udGgnXSA9IG1vbWVudChpdGVtWyd3aGVuJ10sICdERC1NTU0tWVlZWScpLmZvcm1hdCgnTU0nKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlZENhbmNlbGxlZEFjdGlvbnM6IE9wcG9ydHVuaXR5Q29tbWVudFtdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0NvbW1lbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPT4gYWN0aW9uLmNvbXBsZXRlZCA9PT0gdHJ1ZSB8fCBhY3Rpb24uY2FuY2VsbGVkID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRDYW5jZWxsZWRBY3Rpb25zLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90Q29tcGxldGVkQ2FuY2VsbGVkQWN0aW9uczogT3Bwb3J0dW5pdHlDb21tZW50W10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzQ29tbWVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9PiBhY3Rpb24uY29tcGxldGVkID09PSBmYWxzZSAmJiBhY3Rpb24uY2FuY2VsbGVkID09PSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzQ29tbWVudHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbm90Q29tcGxldGVkQ2FuY2VsbGVkQWN0aW9ucy5jb25jYXQoY29tcGxldGVkQ2FuY2VsbGVkQWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hYm91dENvbnRyb2xzLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIGdldCBhY3Rpb25Gb3JtQ29udHJvbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGlvbkNvbnRyb2xzLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgdGhlIGxpc3Qgb2YgYWNjb3VudHMgYnkgc3Vic2NyaXB0aW9uSWQgKi9cbiAgICBnZXRBY2NvdW50c0J5U3Vic2NyaXB0aW9uKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0QWNjb3VudHNCeVN1YnNjcmlwdGlvbih0aGlzLnN1YnNjcmlwdGlvbj8uaWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50cyA9IHJlcy5hY2NvdW50cztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBhbmQgc2hvdyBhbGwgdGhlIGFjdGlvbnMgKi9cbiAgICBwcml2YXRlIGdldEFjdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZS5nZXRBbGxBY3Rpb25zKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3A/LmNybV9hY3Rpb25zICYmIHJlc3AuY3JtX2FjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9ucyA9IHJlc3AuY3JtX2FjdGlvbnMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gdGhpcy5hY3Rpb25zLmV2ZXJ5KFxuICAgICAgICAgICAgICAgICAgICB4ID0+IHgudmlzaWJsZSA9PT0gZmFsc2UgfHwgeC52aXNpYmxlID09PSBudWxsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGFzQWNjZXNzID0gdGhpcy5oYXNBZG1pbkFjY2Vzcyh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpO1xuICAgIH1cblxuICAgIHNob3dFZGl0Q29udHJvbHMoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgY29tbWVudHMgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgICAgICAnY2FyZC1oZWFkZXInXG4gICAgICAgICkgYXMgSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50PiAmIEl0ZXJhYmxlPEVsZW1lbnQ+O1xuICAgICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgY29tbWVudHMpIHtcbiAgICAgICAgICAgIGNvbW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdy1jb250cm9scycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudCAmJiBldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBldmVudC50YXJnZXQuY2xvc2VzdCgnLmNhcmQtaGVhZGVyJykuY2xhc3NMaXN0LmFkZCgnc2hvdy1jb250cm9scycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgZGF0ZSAqL1xuICAgIG9uRGF0ZVNlbGVjdChldmVudCwgYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRPYmogPSB7XG4gICAgICAgICAgICB3aGVuOiBIZWxwZXJTZXJ2aWNlLmRhdGVGb3JtYXQoZXZlbnQpLFxuICAgICAgICAgICAgY29tbWVudDogYWN0aW9uLmNvbW1lbnQsXG4gICAgICAgICAgICBjb21wbGV0ZWQ6IGFjdGlvbi5jb21wbGV0ZWQsXG4gICAgICAgICAgICBjYW5jZWxsZWQ6IGFjdGlvbi5jYW5jZWxsZWQsXG4gICAgICAgICAgICBjcm1fYWNjb3VudF9pZDogYWN0aW9uLmNybV9hY2NvdW50X2lkXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgLnVwZGF0ZUFjY291bnRDb21tZW50KHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgYWN0aW9uLmlkLCBjb21tZW50T2JqKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdkYXRlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRPcHBvcnR1bml0aWVzQ29tbWVudHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gc2hvdyBEYXRlUGlja2VyICovXG4gICAgc2hvd0RhdGVQaWNrZXJVcGRhdGUoYWN0aW9uSWQpIHtcbiAgICAgICAgdGhpcy51cGRhdGluZyA9ICF0aGlzLnVwZGF0aW5nO1xuICAgICAgICB0aGlzLmFjdGlvbklkID0gYWN0aW9uSWQ7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIHNldCB0aGUgYWN0aW9uIGFzIGNvbXBsZXRlZCAqL1xuICAgIHNldEFzQ29tcGxldGVkT3JVbmNvbXBsZXRlZChpZCwgYWN0aW9uLCBjb21wbGV0ZWRPclVuY29tcGxldGVkKSB7XG4gICAgICAgIGNvbnN0IGFsZXJ0VGl0bGUgPSBjb21wbGV0ZWRPclVuY29tcGxldGVkID8gJ0luQ29tcGxldGVkJyA6ICdDb21wbGV0ZWQnO1xuXG4gICAgICAgIHJldHVybiBzd2FsXG4gICAgICAgICAgICAuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGFsZXJ0VGl0bGUsXG4gICAgICAgICAgICAgICAgaHRtbDogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzZXQgYXMgJHthbGVydFRpdGxlfT9gLFxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXG4gICAgICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbk9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ6IGFjdGlvbi5jb21tZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkOiAhY29tcGxldGVkT3JVbmNvbXBsZXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZDogYWN0aW9uLmNhbmNlbGxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNybV9hY2NvdW50X2lkOiBhY3Rpb24uY3JtX2FjY291bnRfaWRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlQWNjb3VudENvbW1lbnQodGhpcy5zdWJzY3JpcHRpb24/LmlkLCBpZCwgYWN0aW9uT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQ3JtLlNldHRpbmdzLlVwZGF0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UoYWN0aW9uLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFjdGlvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9wcG9ydHVuaXRpZXNDb21tZW50cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIHVwZGF0ZSBjb21tZW50ICovXG4gICAgdXBkYXRlQ29tbWVudChpdGVtKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRPYmogPSB7XG4gICAgICAgICAgICBjb21tZW50OiBpdGVtLmNvbW1lbnQsXG4gICAgICAgICAgICBjb21wbGV0ZWQ6IGl0ZW0uY29tcGxldGVkLFxuICAgICAgICAgICAgY2FuY2VsbGVkOiBpdGVtLmNhbmNlbGxlZCxcbiAgICAgICAgICAgIGNybV9hY2NvdW50X2lkOiBpdGVtLmNybV9hY2NvdW50X2lkXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgLnVwZGF0ZUFjY291bnRDb21tZW50KHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgaXRlbS5pZCwgY29tbWVudE9iailcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnY29tbWVudCB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0VkaXRDb250cm9scyh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3Bwb3J0dW5pdGllc0NvbW1lbnRzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gc2V0IHRoZSBhY3Rpb24gYXMgY2FuY2VsbGVkICovXG4gICAgc2V0QXNDYW5jZWxsZWQoaWQsIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gc3dhbFxuICAgICAgICAgICAgLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQ2FuY2VsJyxcbiAgICAgICAgICAgICAgICBodG1sOiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHNldCBhcyBjYW5jZWxsZWQ/YCxcbiAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxuICAgICAgICAgICAgICAgIGljb246ICd3YXJuaW5nJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25PYmogPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50OiBhY3Rpb24uY29tbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogYWN0aW9uLmNvbXBsZXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNybV9hY2NvdW50X2lkOiBhY3Rpb24uY3JtX2FjY291bnRfaWRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlQWNjb3VudENvbW1lbnQodGhpcy5zdWJzY3JpcHRpb24/LmlkLCBpZCwgYWN0aW9uT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQ3JtLlNldHRpbmdzLlVwZGF0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UoYWN0aW9uLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFjdGlvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9wcG9ydHVuaXR5RGV0YWlscygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgY29udGFjdHMgKi9cbiAgICBnZXRBbGxDb250YWN0cygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldEFsbENvbnRhY3RzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgJycpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsbENvbnRhY3RzID0gcmVzcG9uc2UuY29udGFjdHM7XG4gICAgICAgICAgICB0aGlzLmFsbENvbnRhY3RzLmZvckVhY2gobWVtYmVyID0+IHtcbiAgICAgICAgICAgICAgICBtZW1iZXIuZGlzcGxheU5hbWUgPSBgJHttZW1iZXIuZmlyc3RfbmFtZSB8fCAnJ30gJHttZW1iZXIubGFzdF9uYW1lIHx8ICcnfSAtICR7XG4gICAgICAgICAgICAgICAgICAgIG1lbWJlci5lbWFpbFxuICAgICAgICAgICAgICAgIH1gLnRyaW0oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogc2VhcmNoIGFjY291bnRzICovXG4gICAgYWNjb3VudFNlYXJjaChldmVudCkge1xuICAgICAgICBsZXQgZGF0YSA9IFtdO1xuICAgICAgICBpZiAoZXZlbnQucXVlcnkpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmFjY291bnRzLmZpbHRlcigoeDogQ3JtQWNjb3VudCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB4Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGEucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRDb250YWN0cyA9IGRhdGE7XG4gICAgfVxuXG4gICAgb25Db250YWN0U2VhcmNoKGV2ZW50KSB7XG4gICAgICAgIGxldCBkYXRhID0gW107XG4gICAgICAgIGlmIChldmVudC5xdWVyeSkge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuYWxsQ29udGFjdHMuZmlsdGVyKCh4OiBPcHBvcnR1bml0eUNvbnRhY3QpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsbENvbnRhY3RzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RzID0gZGF0YTtcbiAgICB9XG5cbiAgICBvcGVuTW9kYWwoY29udGVudCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGNvbnRlbnQsIHsgY2VudGVyZWQ6IHRydWUsIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJyB9KTtcbiAgICB9XG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBvcHBvcnR1bml0aWVzIHZlcnNpb25zICovXG4gICAgcHJpdmF0ZSBnZXRDb250YWN0VmVyc2lvbigpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0Q29udGFjdFZlcnNpb24odGhpcy5zdWJzY3JpcHRpb24/LmlkLCB0aGlzLm9wcG9ydHVuaXRpZXNJZCwgJ0NybU9wcG9ydHVuaXR5JylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc1ZlcnNpb25pbmcgPSByZXNwb25zZS52ZXJzaW9ucztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVXBsb2FkT3V0cHV0KG91dHB1dDogVXBsb2FkT3V0cHV0KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAob3V0cHV0LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FsbEFkZGVkVG9RdWV1ZSc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudDogVXBsb2FkSW5wdXQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndXBsb2FkQWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogQ1JNX0FDQ09VTlRfRklMRVNfUEFUSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyX2lkOiBgJHt0aGlzLnVzZXJJZH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNybV9hY2NvdW50X2lkOiBgJHt0aGlzLmFjY291bnRJZH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNybV9jb250YWN0X2lkOiBgJHt0aGlzLmNvbnRhY3RJZH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNybV9vcHBvcnR1bml0eV9pZDogYCR7dGhpcy5vcHBvcnR1bml0aWVzSWR9YFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVE9LRU5fSEVBREVSX0tFWV06IHRoaXMudG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRJbnB1dC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FkZGVkVG9RdWV1ZSc6XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXQuZmlsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gb3V0cHV0LmZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoRE9DVU1FTlRfVFlQRV9FWFQuaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKG91dHB1dC5maWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ2ZpbGUgZm9ybWF0cyBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndXBsb2FkaW5nJzpcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG91dHB1dC5maWxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9PiB0eXBlb2Ygb3V0cHV0LmZpbGUgIT09ICd1bmRlZmluZWQnICYmIGZpbGUuaWQgPT09IG91dHB1dC5maWxlLmlkXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbaW5kZXhdID0gb3V0cHV0LmZpbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVtb3ZlZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlcyA9IHRoaXMuZmlsZXMuZmlsdGVyKChmaWxlOiBVcGxvYWRGaWxlKSA9PiBmaWxlICE9PSBvdXRwdXQuZmlsZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkcmFnT3Zlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnT3ZlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkcmFnT3V0JzpcbiAgICAgICAgICAgIGNhc2UgJ2Ryb3AnOlxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ092ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RvbmUnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgICAgIGlmIChmaWxlLnByb2dyZXNzLnN0YXR1cyA9PT0gVXBsb2FkU3RhdHVzLkRvbmUpIHtcbiAgICAgICAgICAgICAgICBmaWxlWyd1cGxvYWRlZCddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHdhaXQgZm9yIDUwMG1zIGJlZm9yZSBmaWx0ZXIgZmlsZXNcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoZmlsZSA9PiBmaWxlLnByb2dyZXNzLnN0YXR1cyAhPT0gVXBsb2FkU3RhdHVzLkRvbmUpO1xuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0wXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1lLWF1dG8gbWItMFwiPlxuICAgICAgPGgyIGNsYXNzPVwibWItMFwiPlxuICAgICAgICA8YSBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgdG8gVGFyZ2V0XCJcbiAgICAgICAgICAoY2xpY2spPVwiYmFjaygpXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpb3VzXCI+PGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgICBPcHBvcnR1bml0eSBJbmZvXG4gICAgICA8L2gyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWluZm8gcC0zIGNhcmQgcGItMCBoLWF1dG9cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIHRleHQtY2VudGVyXCI+XG4gICAgICAgIDxhIGNsYXNzPVwicHJvZmlsZS1pbWFnZVwiPlxuICAgICAgICAgIDxpbWcgd2lkdGg9XCIxMDBcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMTAwXCJcbiAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1jaXJjbGUgaW1nLWJvcmRlciB3aWR0aC0xMDBcIlxuICAgICAgICAgICAgYWx0PVwidXNlclwiXG4gICAgICAgICAgICBzcmM9XCJhc3NldHMvaW1nL2ljb25zL21hbGUucG5nXCIgLz5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxoNCBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgQWJvdXQgPHNwYW4gKm5nSWY9XCJkYXRhPy5pZFwiPnt7IGRhdGEudGl0bGUgfX08L3NwYW4+XG4gICAgICAgIDwvaDQ+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAqbmdJZj1cImlzRm9ybUVkaXRcIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IGZsb2F0LWVuZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNGb3JtRWRpdCA9ICFpc0Zvcm1FZGl0OyBnZXRBY2NvdW50c0J5U3Vic2NyaXB0aW9uKCk7IGdldEFsbENvbnRhY3RzKClcbiAgICAgICAgICAgICAgICAgICAgXCI+RWRpdDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJhYm91dENvbnRyb2xzXCJcbiAgICAgICAgW2NsYXNzLmlzRGlzYWJsZWRdPVwiaXNGb3JtRWRpdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIG1iLTBcIiBmb3I9XCJUaXRsZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRpdGxlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMCBwcy0xIHVzZXItdmFsdWVcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0aXRsZSddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHVpLWZsdWlkIHNraWxscy1tb2RhbFwiXG4gICAgICAgICAgKm5nSWY9XCJkYXRhPy5jcm1fY29udGFjdF9pZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIG1iLTJcIiBmb3I9XCJDb250YWN0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuQ29udGFjdCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLmNvbnRhY3RJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY3JtX2NvbnRhY3RfaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1ibG9jayBwYi0yIHBzLTEgdXNlci12YWx1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzRm9ybUVkaXQgJiYgZGF0YT8uY3JtX2NvbnRhY3RfaWRcIj57eyBkYXRhPy5jcm1fY29udGFjdD8uZmlyc3RfbmFtZSB9fSB7eyBkYXRhPy5jcm1fY29udGFjdD8ubGFzdF9uYW1lIH19PC9hPlxuICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSAqbmdJZj1cIiFpc0Zvcm1FZGl0IHx8ICFkYXRhPy5jcm1fY29udGFjdF9pZFwiXG4gICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRDb250YWN0c1wiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fY29udGFjdF9pZFwiXG4gICAgICAgICAgICBkYXRhS2V5PVwiaWRcIlxuICAgICAgICAgICAgZmllbGQ9XCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwib25Db250YWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbnRhY3RzXCJcbiAgICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiPlxuICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyB1aS1mbHVpZCBza2lsbHMtbW9kYWxcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBtYi0yXCIgZm9yPVwiQWNjb3VudFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLkFjY291bnQnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8nICsgc3Vic2NyaXB0aW9uPy5zbHVnICsgcm91dGVycy5hY2NvdW50SW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNybV9hY2NvdW50X2lkXG4gICAgICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGQtYmxvY2sgcGItMiBwcy0xIHVzZXItdmFsdWVcIlxuICAgICAgICAgICAgKm5nSWY9XCJpc0Zvcm1FZGl0ICYmIGRhdGE/LmNybV9hY2NvdW50X2lkXCI+e3sgZGF0YT8uY3JtX2FjY291bnQ/Lm5hbWUgfX08L2E+XG4gICAgICAgICAgPHAtYXV0b0NvbXBsZXRlICpuZ0lmPVwiIWlzRm9ybUVkaXQgfHwgIWRhdGE/LmNybV9hY2NvdW50X2lkXCJcbiAgICAgICAgICAgIFtzdWdnZXN0aW9uc109XCJmaWx0ZXJlZEFjY291bnRzXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNybV9hY2NvdW50X2lkXCJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgICAgICAgICBmaWVsZD1cIm5hbWVcIlxuICAgICAgICAgICAgW2Ryb3Bkb3duXT1cInRydWVcIlxuICAgICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cImFjY291bnRTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYWNjb3VudHNcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCI+XG4gICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbWItMFwiIGZvcj1cIk9uZVRpbWVBbW91bnRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5PbmVUaW1lQW1vdW50JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1ibG9jayBwYi0yIHBzLTEgdXNlci12YWx1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzRm9ybUVkaXQgJiYgZGF0YT8ub25lX3RpbWVfYW1vdW50XCI+e3sgZGF0YT8ub25lX3RpbWVfYW1vdW50IHwgY3VycmVuY3kgfX08L3NwYW4+XG4gICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWlzRm9ybUVkaXQgfHwgIWRhdGE/Lm9uZV90aW1lX2Ftb3VudFwiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIG51bWJlcnNPbmx5XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCByb3VuZGVkLTAgcHMtMSB1c2VyLXZhbHVlXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9uZV90aW1lX2Ftb3VudFwiXG4gICAgICAgICAgICBpZD1cIm9uZV90aW1lX2Ftb3VudFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ29uZV90aW1lX2Ftb3VudCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbWItMFwiIGZvcj1cIm1vbnRobHlBbW91bnRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Nb250aGx5QW1vdW50JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1ibG9jayBwYi0yIHBzLTEgdXNlci12YWx1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzRm9ybUVkaXQgJiYgZGF0YT8ubW9udGhseV9hbW91bnRcIj57eyBkYXRhPy5tb250aGx5X2Ftb3VudCB8IGN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFpc0Zvcm1FZGl0IHx8ICFkYXRhPy5tb250aGx5X2Ftb3VudFwiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIG51bWJlcnNPbmx5XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCByb3VuZGVkLTAgcHMtMSB1c2VyLXZhbHVlXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1vbnRobHlfYW1vdW50XCJcbiAgICAgICAgICAgIGlkPVwibW9udGhseV9hbW91bnRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydtb250aGx5X2Ftb3VudCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNGb3JtRWRpdFwiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVuZCBmb3JtLWFjdGlvbi1idXR0b25zXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaXNGb3JtRWRpdCA9ICFpc0Zvcm1FZGl0OyBnZXRPcHBvcnR1bml0eURldGFpbHMoKVwiXG4gICAgICAgICAgICB2YWx1ZT1cIkNhbmNlbFwiIC8+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXMtM1wiXG4gICAgICAgICAgICB2YWx1ZT1cIlN1Ym1pdFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlT3Bwb3J0dW5pdGllcygpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC04XCI+XG4gICAgPHVsIG5nYk5hdlxuICAgICAgI25hdj1cIm5nYk5hdlwiXG4gICAgICBjbGFzcz1cIm5hdi10YWJzXCI+XG4gICAgICA8bGkgW25nYk5hdkl0ZW1dPVwiMVwiPlxuICAgICAgICA8YSBuZ2JOYXZMaW5rPk5vdGVzPC9hPlxuICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cbiAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImFjdGlvbkNvbnRyb2xzXCJcbiAgICAgICAgICAgIChuZ1N1Ym1pdCk9XCJvbkNvbW1lbnRTYXZlKClcIj5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRcIlxuICAgICAgICAgICAgICByb3dzPVwiNlwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtZGFuZ2VyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uQ29udHJvbHMuZ2V0KCdjb21tZW50JykudG91Y2hlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db250cm9scy5nZXQoJ2NvbW1lbnQnKS5pbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIE5vdGUgUmVxdWlyZWRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25zPy5sZW5ndGhcIlxuICAgICAgICAgICAgICBjbGFzcz1cImQtYmxvY2sgY2xlYXItYm90aCBwdC0zXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGlvbi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIG1lLTIgYnRuLW91dGxpbmUtcHJpbWFyeSBtYi0yIGFjdGlvbi1idG5cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEYXRlUGlja2VyKCRldmVudCwgYWN0aW9uLmlkKTsgZC50b2dnbGUoKVwiPlxuICAgICAgICAgICAgICAgICAge3sgYWN0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJtaXRBY3Rpb24gJiYgYWN0aW9uRm9ybUNvbnRyb2xzLmNybV9hY3Rpb25faWQuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYW4gYWN0aW9uXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImRkLW1tbS15eXl5XCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3aGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICBuZ2JEYXRlcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgI2Q9XCJuZ2JEYXRlcGlja2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZC50b2dnbGUoKVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTQgcGUtMCBjb21wbGV0ZWQtdG9nZ2xlXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8dWktc3dpdGNoIGNoZWNrZWRMYWJlbD1cImNvbXBsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgdW5jaGVja2VkTGFiZWw9XCJvcGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb21wbGV0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjb21wbGV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1lbmRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgW2J1dHRvbkJ1c3ldPVwiYnV0dG9uQnVzeVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTIgbWItMiBmbG9hdC1lbmRcIlxuICAgICAgICAgICAgICAgID5TdWJtaXQgTm90ZTwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IG10LTIgbWItMiBtZS0wIG1lLXNtLTIgZmxvYXQtZW5kXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1vZGFsKGNvbnRlbnQpXCI+e3sgJ1VwbG9hZCBmaWxlJyB8IHRyYW5zbG9jbyB9fTwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1dHRvbkRpc2FibGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm5vLWFjdGlvbnMgcHQtNFwiPlxuICAgICAgICAgICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuTm9BY3Rpb25zSW5PcHBvcnR1bml0aWVzSW5mb01lc3NhZ2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIDwvcHctbm8tZGF0YT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICAgICAgICAgICAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhb3Bwb3J0dW5pdGllc0NvbW1lbnRzPy5sZW5ndGggJiYgaXNMb2FkZWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJuby1hY3Rpb25zIHB0LTNcIj5cbiAgICAgICAgICAgIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuTm9BY3Rpb25zTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgIDwvcHctbm8tZGF0YT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3Bwb3J0dW5pdGllc0NvbW1lbnRzPy5sZW5ndGhcIlxuICAgICAgICAgICAgaWQ9XCJ0aW1lbGluZVwiXG4gICAgICAgICAgICBjbGFzcz1cInB0LTMgY2xlYXItYm90aCB0aW1lbGluZS1jZW50ZXIgdGltZWxpbmUtd3JhcHBlclwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwidGltZWxpbmVcIj5cbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGltZWxpbmUtbGluZVwiPjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwidGltZWxpbmVcIj5cbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGltZWxpbmUtbGluZVwiPjwvbGk+XG4gICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRpbWVsaW5lLWl0ZW1cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ210LTUnOiBvZGQgfVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiBvcHBvcnR1bml0aWVzQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBhcyBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9kZCA9IG9kZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBldmVuID0gZXZlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZWxpbmUtYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmctcmVkIGJnLWxpZ2h0ZW4tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWVsaW5lLXllYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtYmxvY2sgZGF0ZS15ZWFyXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ud2hlbiB8IGRhdGU6ICdtZWRpdW0nIHwgc2xpY2U6IDA6M1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnllYXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZWxpbmUtY2FyZCBzaGFkb3cgY2FyZCBwYi0wIHJvdW5kZWQgYm9yZGVyLWdyZXkgYm9yZGVyLWxpZ2h0ZW4tMiBwb3NpdGlvbi1zdGF0aWNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0wIGNsZWFyZml4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29tbWVudC1maWVsZCBmb3JtLWNvbnRyb2wgcC0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5jb21tZW50XCI+e3sgaXRlbS5jb21tZW50IH19PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZsb2F0LXN0YXJ0IG1iLTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhc2hvd0Z1bGxDb21tZW50IHx8IGl0ZW0uaWQgIT09IGNvbW1lbnRJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5jb21tZW50IHwgc2xpY2U6IDA6MTcwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxhICpuZ0lmPVwiaXRlbS5jb21tZW50Lmxlbmd0aCA+IDE3MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGdWxsQ29tbWVudCA9IHRydWU7IGNvbW1lbnRJZCA9IGl0ZW0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj4uLi5zaG93IG1vcmU8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmxvYXQtc3RhcnQgbWItMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGdWxsQ29tbWVudCAmJiBpdGVtLmlkID09PSBjb21tZW50SWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uY29tbWVudCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb21tZW50Lmxlbmd0aCA+IDE3MCAmJiBzaG93RnVsbENvbW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0Z1bGxDb21tZW50ID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+Li4uc2hvdyBsZXNzPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZCBlZGl0LWJ0biBmbG9hdC1lbmQgcHktMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRDb250cm9scygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidXNlcklkID09PSBpdGVtLm93bmVyX2lkIHx8IGhhc0FjY2Vzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXN1YnRpdGxlIHRleHQtbXV0ZWQgbXktMCBjbGVhcmZpeFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1zdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdXBkYXRpbmcgfHwgYWN0aW9uSWQgIT09IGl0ZW0uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtc21hbGwtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLndoZW4gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJ1cGRhdGluZyAmJiBhY3Rpb25JZCA9PT0gaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZGQtbW1tLXl5eXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IGl0ZW0ud2hlbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI2Q9XCJuZ2JEYXRlcGlja2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImQudG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZVNlbGVjdCk9XCJvbkRhdGVTZWxlY3QoJGV2ZW50LCBpdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiIGJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gZmxvYXQtZW5kIHdoZW4tYnRuIHB5LTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1c2VySWQgPT09IGl0ZW0ub3duZXJfaWQgfHwgaGFzQWNjZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGF0ZVBpY2tlclVwZGF0ZShpdGVtLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwIFtjbGFzcy50ZXh0LWRhbmdlcl09XCIhaXRlbS5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXRlbS5jYW5jZWxsZWQgJiYgIWl0ZW0uY29tcGxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmR1ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5vd25lcj8uZmlyc3RfbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5vd25lcj8ubGFzdF9uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1wcmltYXJ5XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY3JtX2FjdGlvbj8ubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWl0ZW0uY29tcGxldGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlcklkID09PSBpdGVtLm93bmVyX2lkIHx8IGhhc0FjY2VzcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJnLXN1Y2Nlc3MgbXMtMlwiPk9wZW48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXRlbS5jb21wbGV0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VySWQgPT09IGl0ZW0ub3duZXJfaWQgfHwgaGFzQWNjZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJTZXQgYXMgY29tcGxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2V0IGFzIGNvbXBsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0zIG1zLTNcIlxuICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBc0NvbXBsZXRlZE9yVW5jb21wbGV0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tcGxldGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGFza3MgY29tcGxldGVkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXRlbS5jYW5jZWxsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpdGVtLmNvbXBsZXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXJJZCA9PT0gaXRlbS5vd25lcl9pZCB8fCBoYXNBY2Nlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIlNldCBhcyBjYW5jZWxsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZXQgYXMgY2FuY2VsbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEFzQ2FuY2VsbGVkKGl0ZW0uaWQsIGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdGltZXMgZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb21wbGV0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VySWQgPT09IGl0ZW0ub3duZXJfaWQgfHwgaGFzQWNjZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJTZXQgYXMgVW5Db21wbGV0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZXQgYXMgVW5Db21wbGV0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBc0NvbXBsZXRlZE9yVW5jb21wbGV0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tcGxldGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtcy0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtd2luZG93LWNsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWJ0bnMgbXQtMyB0ZXh0LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtZGVmYXVsdCBtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdENvbnRyb2xzKHVuZGVmaW5lZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUNvbW1lbnQoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFN1Ym1pdFxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgW25nYk5hdkl0ZW1dPVwiMlwiPlxuICAgICAgICA8YSBuZ2JOYXZMaW5rPlZlcnNpb25pbmc8L2E+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHZlcnNpb24gb2Ygb3Bwb3J0dW5pdGllc1ZlcnNpb25pbmdcIj5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Ryb25nPkV2ZW50OiA8L3N0cm9uZz57eyB2ZXJzaW9uLmV2ZW50IH19IHwgPHN0cm9uZz5BdXRob3I6IDwvc3Ryb25nPjxhICpuZ0lmPVwidmVyc2lvbj8uYXV0aG9yXCJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9tZW1iZXJzJywgdmVyc2lvbj8uYXV0aG9yPy5zbHVnXVwiPnt7IHZlcnNpb24/LmF1dGhvciB8IGlmTmFtZU51bGxTaG93RW1haWwgfX08L2E+XG4gICAgICAgICAgICAgIHwgPHN0cm9uZz5DcmVhdGVkIGF0OiA8L3N0cm9uZz57eyB2ZXJzaW9uLmNyZWF0ZWRfYXQgfX08YnIgLz5cbiAgICAgICAgICAgICAgPHN0cm9uZz5PYmplY3Q6IDwvc3Ryb25nPnt7IHZlcnNpb24ub2JqZWN0IHwganNvbiB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGhyIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm9wcG9ydHVuaXRpZXNWZXJzaW9uaW5nPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuTm9WZXJzaW9uc01lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICA8L3B3LW5vLWRhdGE+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIFtuZ2JOYXZJdGVtXT1cIjNcIj5cbiAgICAgICAgPGEgbmdiTmF2TGluaz5GaWxlczwvYT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XG4gICAgICAgICAgPHB3LXNtYXJ0LWNybS1jb21wYW55LWZpbGVzIFtjb250YWN0SWRdPVwiY29udGFjdElkXCJcbiAgICAgICAgICAgIFthY2NvdW50SWRdPVwiYWNjb3VudElkXCJcbiAgICAgICAgICAgIFtvcHBvcnR1bml0eUlkXT1cIm9wcG9ydHVuaXRpZXNJZFwiPlxuICAgICAgICAgIDwvcHctc21hcnQtY3JtLWNvbXBhbnktZmlsZXM+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8ZGl2IFtuZ2JOYXZPdXRsZXRdPVwibmF2XCI+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudFxuICBsZXQtbW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICA8aDMgY2xhc3M9XCJtb2RhbC10aXRsZSBtYi0wIHAtMFwiPnt7ICdVcGxvYWQgRmlsZScgfCB0cmFuc2xvY28gfX08L2gzPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0bi1jbG9zZSBmbG9hdC1lbmRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cblxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8c21hbGw+IHt7ICdVc2VyLlByb2ZpbGUuUGljdHVyZU1lc3NhZ2UnIHwgdHJhbnNsb2NvIH19PC9zbWFsbD5cbiAgICA8ZGl2IGNsYXNzPVwicm93IHAtMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWJveFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtYm94LWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgIG5nRmlsZURyb3BcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgICAgICh1cGxvYWRPdXRwdXQpPVwib25VcGxvYWRPdXRwdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFt1cGxvYWRJbnB1dF09XCJ1cGxvYWRJbnB1dFwiPlxuICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICBEcmFnIGZpbGVzIGhlcmUgb3JcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ1cGxvYWQtYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICBuZ0ZpbGVTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICh1cGxvYWRPdXRwdXQpPVwib25VcGxvYWRPdXRwdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFt1cGxvYWRJbnB1dF09XCJ1cGxvYWRJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIC8+XG4gICAgICAgICAgICAgICAgICBicm93c2VcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIHRvIHVwbG9hZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWl0ZW1cIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZiBvZiBmaWxlczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWl0ZW0tY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpb25pY29uIGlvbi1pb3MtY29weVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImY/LnByb2dyZXNzPy5kYXRhPy5wZXJjZW50YWdlICsgJyUnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZG9uZV09XCJmWyd1cGxvYWRlZCddXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLXRleHQtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9ncmVzcy10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWRvbmVdPVwiZlsndXBsb2FkZWQnXVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmWyd1cGxvYWRlZCddXCI+e3sgZi5wcm9ncmVzcz8uZGF0YT8ucGVyY2VudGFnZSAtIDEgfX0lXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmWyd1cGxvYWRlZCddXCI+MTAwICU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZbJ3VwbG9hZGVkJ11cIj5VcGxvYWRpbmcuLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZlsndXBsb2FkZWQnXVwiPkRvbmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwZWVkLWFuZC1ldGEtdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZi5wcm9ncmVzcz8uZGF0YT8ucGVyY2VudGFnZSAhPT0gMCAmJiAhZlsndXBsb2FkZWQnXVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBmLnByb2dyZXNzPy5kYXRhPy5zcGVlZEh1bWFuIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+RVRBIHt7IGYucHJvZ3Jlc3M/LmRhdGE/LmV0YUh1bWFuIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
483
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWluZm8vc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWluZm8vc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBb0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBZ0IsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxN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fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgRE9DVU1FTlRfVFlQRV9FWFQsIFN1YnNjcmlwdGlvbiwgVE9LRU5fSEVBREVSX0tFWSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ1JNX0FDQ09VTlRfRklMRVNfUEFUSCwgQ3JtU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9zbWFydC1jcm0tc2hhcmVkJztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbmltcG9ydCB7XG4gICAgT3Bwb3J0dW5pdHlDb21tZW50LFxuICAgIE9wcG9ydHVuaXR5Q29udGFjdCxcbiAgICBPcHBvcnR1bml0eURhdGFcbn0gZnJvbSAnbGlicy9zbWFydC1jcm0vc3JjL2xpYi9zaGFyZWQvaW50ZXJmYWNlL3NtYXJ0LWNybS1tb2R1bGUuaW50ZXJmYWNlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFVwbG9hZGVyT3B0aW9ucywgVXBsb2FkRmlsZSwgVXBsb2FkSW5wdXQsIFVwbG9hZE91dHB1dCwgVXBsb2FkU3RhdHVzIH0gZnJvbSAnbmd4LXVwbG9hZGVyJztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcblxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbmltcG9ydCB7IENybUFjY291bnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL2NybS1hY2NvdW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDcm1BY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL2NybS1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IENybVZlcnNpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL2NybS1vcHBvcnR1bml0eS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBwU21hcnRDcm0gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvbW9kZWxzL3NtYXJ0LWNybS5tb2RlbCc7XG5pbXBvcnQgeyBST1VURVJTIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkL3JvdXRlcnMvcm91dGVycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mbycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWluZm8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWluZm8uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTbWFydENybU9wcG9ydHVuaXRpZXNJbmZvQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgdXNlcklkOiBudW1iZXI7XG5cbiAgICBvcHBvcnR1bml0aWVzSWQ6IG51bWJlcjtcbiAgICBkYXRhOiBPcHBvcnR1bml0eURhdGE7XG5cbiAgICBhY2NvdW50czogQ3JtQWNjb3VudFtdO1xuICAgIGZpbHRlcmVkQWNjb3VudHM6IENybUFjY291bnRbXSA9IFtdO1xuXG4gICAgYWN0aW9uczogQ3JtQWN0aW9uW107XG4gICAgYWN0aW9uSWQ6IG51bWJlcjtcblxuICAgIGFsbENvbnRhY3RzOiBPcHBvcnR1bml0eUNvbnRhY3RbXTtcbiAgICBmaWx0ZXJlZENvbnRhY3RzOiBPcHBvcnR1bml0eUNvbnRhY3RbXTtcblxuICAgIG9wcG9ydHVuaXRpZXNDb21tZW50czogT3Bwb3J0dW5pdHlDb21tZW50W107XG4gICAgb3Bwb3J0dW5pdGllc1ZlcnNpb25pbmc6IENybVZlcnNpb25bXTtcblxuICAgIGNvbnRhY3RJZDogbnVtYmVyO1xuICAgIGFjY291bnRJZDogbnVtYmVyO1xuXG4gICAgYWJvdXRDb250cm9sczogVW50eXBlZEZvcm1Hcm91cDtcbiAgICBhY3Rpb25Db250cm9sczogVW50eXBlZEZvcm1Hcm91cDtcblxuICAgIG9wdGlvbnM6IFVwbG9hZGVyT3B0aW9ucztcbiAgICB1cGxvYWRJbnB1dDogRXZlbnRFbWl0dGVyPFVwbG9hZElucHV0PjtcbiAgICBmaWxlczogVXBsb2FkRmlsZVtdO1xuICAgIHRva2VuOiBzdHJpbmc7XG5cbiAgICBpc0xvYWRlZCA9IGZhbHNlO1xuICAgIGlzRm9ybUVkaXQgPSB0cnVlO1xuICAgIGhhc0FjY2VzczogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgdXBkYXRpbmcgPSBmYWxzZTtcbiAgICBzaG93RnVsbENvbW1lbnQgPSBmYWxzZTtcbiAgICBzdWJtaXRBY3Rpb24gPSBmYWxzZTtcbiAgICBidXR0b25EaXNhYmxlOiBib29sZWFuO1xuICAgIGJ1dHRvbkJ1c3kgPSBmYWxzZTtcbiAgICBzdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICBkYW5nZXJDb2xvciA9IGZhbHNlO1xuICAgIGRyYWdPdmVyID0gZmFsc2U7XG5cbiAgICBjb21tZW50SWQ6IG51bWJlcjtcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjcm1TZXJ2aWNlOiBDcm1TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudFxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHsgY29uY3VycmVuY3k6IDEsIG1heFVwbG9hZHM6IDMgfTtcbiAgICAgICAgdGhpcy51cGxvYWRJbnB1dCA9IG5ldyBFdmVudEVtaXR0ZXI8VXBsb2FkSW5wdXQ+KCk7XG4gICAgICAgIHRoaXMudG9rZW4gPSBidG9hKHRoaXMuYXV0aFNlcnZpY2UuZ2V0VG9rZW4oKSk7XG4gICAgICAgIHRoaXMuZmlsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5hY3Rpb25Db250cm9scyA9IEFwcFNtYXJ0Q3JtLmdldE9wcG9ydHVuaXR5QWN0aW9uc0Zvcm0odGhpcy5pc0Rpc2FibGVkKTtcbiAgICAgICAgdGhpcy5hYm91dENvbnRyb2xzID0gQXBwU21hcnRDcm0uZ2V0T3Bwb3J0dW5pdGllc0Zvcm0oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRVc2VyU3Vic2NyaXB0aW9uKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBY3Rpb25zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRPcHBvcnR1bml0aWVzQ29tbWVudHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0lkID0gTnVtYmVyKGRhdGFbJ2lkJ10pO1xuICAgICAgICAgICAgaWYgKHRoaXMub3Bwb3J0dW5pdGllc0lkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRPcHBvcnR1bml0eURldGFpbHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmdldCgnY3JtX29wcG9ydHVuaXR5X2lkJykuc2V0VmFsdWUodGhpcy5vcHBvcnR1bml0aWVzSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbkRhdGVTZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLmdldENvbnRhY3RWZXJzaW9uKCk7XG4gICAgICAgIHRoaXMudXNlckluZm8oKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCB1c2VyIGluZm8gKi9cbiAgICBwcml2YXRlIHVzZXJJbmZvKCkge1xuICAgICAgICB0aGlzLnVzZXJTdG9yZSgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlcklkID0gcmVzLmlkO1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uQ29udHJvbHMuZ2V0KCdvd25lcl9pZCcpLnNldFZhbHVlKHJlcy5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgb3Bwb3J0dW5pdGllcyBkZXRhaWxzICovXG4gICAgZ2V0T3Bwb3J0dW5pdHlEZXRhaWxzKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRPcHBvcnR1bml0eURldGFpbHModGhpcy5zdWJzY3JpcHRpb24/LmlkLCB0aGlzLm9wcG9ydHVuaXRpZXNJZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuY3JtX2NvbnRhY3RfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmNybV9jb250YWN0LmRpc3BsYXlOYW1lID0gYCR7cmVzcG9uc2UuY3JtX2NvbnRhY3QuZmlyc3RfbmFtZX0gJHtyZXNwb25zZS5jcm1fY29udGFjdC5sYXN0X25hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9wZXJhdG9yLWFzc2lnbm1lbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLm1vbnRobHlfYW1vdW50ID0gdGhpcy5kYXRhLm1vbnRobHlfYW1vdW50IC8gMTAwO1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb3BlcmF0b3ItYXNzaWdubWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEub25lX3RpbWVfYW1vdW50ID0gdGhpcy5kYXRhLm9uZV90aW1lX2Ftb3VudCAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWN0SWQgPSByZXNwb25zZS5jcm1fY29udGFjdF9pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2NvdW50SWQgPSByZXNwb25zZS5jcm1fYWNjb3VudF9pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYm91dENvbnRyb2xzLnBhdGNoVmFsdWUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3V0Q29udHJvbHMuZ2V0KCdjcm1fY29udGFjdF9pZCcpLnBhdGNoVmFsdWUocmVzcG9uc2UuY3JtX2NvbnRhY3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3V0Q29udHJvbHMuZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnBhdGNoVmFsdWUocmVzcG9uc2UuY3JtX2FjY291bnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5zZXRWYWx1ZSh0aGlzLmNvbnRhY3RJZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uQ29udHJvbHMuZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnNldFZhbHVlKHRoaXMuYWNjb3VudElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gdXBkYXRlIG9wcG9ydHVuaXRpZXMgKi9cbiAgICB1cGRhdGVPcHBvcnR1bml0aWVzKCkge1xuICAgICAgICBpZiAodGhpcy5hYm91dENvbnRyb2xzLmludmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5hYm91dENvbnRyb2xzO1xuICAgICAgICAgICAgY29uc3QgZGF0YU9iamVjdCA9IHtcbiAgICAgICAgICAgICAgICBjcm1fYWNjb3VudF9pZDogZm9ybURhdGEuZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnZhbHVlPy5pZCxcbiAgICAgICAgICAgICAgICBjcm1fY29udGFjdF9pZDogZm9ybURhdGEuZ2V0KCdjcm1fY29udGFjdF9pZCcpLnZhbHVlPy5pZCxcbiAgICAgICAgICAgICAgICBvbmVfdGltZV9hbW91bnQ6IGZvcm1EYXRhLmdldCgnb25lX3RpbWVfYW1vdW50JykudmFsdWUgKiAxMDAsXG4gICAgICAgICAgICAgICAgbW9udGhseV9hbW91bnQ6IGZvcm1EYXRhLmdldCgnbW9udGhseV9hbW91bnQnKS52YWx1ZSAqIDEwMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgICAgIC51cGRhdGVPcHBvcnR1bml0aWVzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgdGhpcy5vcHBvcnR1bml0aWVzSWQsIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZm9ybURhdGEudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIC4uLmRhdGFPYmplY3RcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlVwZGF0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Zvcm1FZGl0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHBvcnR1bml0eURldGFpbHMoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIHNhdmUgY29tbWVudCAqL1xuICAgIEBWYWxpZGF0ZUZvcm0oJ2FjdGlvbkNvbnRyb2xzJylcbiAgICBvbkNvbW1lbnRTYXZlKCkge1xuICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSB0cnVlO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5hY3Rpb25Db250cm9scy52YWx1ZTtcbiAgICAgICAgZGF0YS53aGVuID0gSGVscGVyU2VydmljZS5kYXRlRm9ybWF0KGRhdGE/LndoZW4pO1xuICAgICAgICB0aGlzLmNybVNlcnZpY2VcbiAgICAgICAgICAgIC5wb3N0QWNjb3VudENvbW1lbnQodGhpcy5zdWJzY3JpcHRpb24/LmlkLCBkYXRhKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25Db250cm9scy5nZXQoJ2NvbW1lbnQnKS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3Bwb3J0dW5pdGllc0NvbW1lbnRzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLkNvbW1lbnRTdWJtaXR0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0QWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG93RGF0ZVBpY2tlcihldmVudCwgaWQpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25Db250cm9scy5nZXQoJ3doZW4nKS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgIGNvbnN0IGFjdGlvbkJ1dHRvbnMgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgICAgICAnYWN0aW9uLWJ0bidcbiAgICAgICAgKSBhcyBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+ICYgSXRlcmFibGU8RWxlbWVudD47XG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIGFjdGlvbkJ1dHRvbnMpIHtcbiAgICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICAgIHRoaXMuYWN0aW9uQ29udHJvbHMuZ2V0KCdjcm1fYWN0aW9uX2lkJykuc2V0VmFsdWUoaWQpO1xuICAgIH1cblxuICAgIG9uRGF0ZVNlbGVjdGVkKCkge1xuICAgICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmdldCgnd2hlbicpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2hlbicpPy5bJ3ZhbHVlJ107XG4gICAgICAgICAgICBjb25zdCB0b2RheURhdGUgPSBtb21lbnQobmV3IERhdGUoKSkuZm9ybWF0KCdERC1NTU0tWVlZWScpO1xuICAgICAgICAgICAgaWYgKHRvZGF5RGF0ZSA8IHNlbGVjdGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25Db250cm9scy5nZXQoJ2NvbXBsZXRlZCcpLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmdldCgnY29tcGxldGVkJykuc2V0VmFsdWUoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmdldCgnY29tcGxldGVkJykuZW5hYmxlKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgYWxsIGNvbW1lbnRzICovXG4gICAgcHJpdmF0ZSBnZXRPcHBvcnR1bml0aWVzQ29tbWVudHMoKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgLmdldE9wcG9ydHVuaXRpZXNDb21tZW50cyh0aGlzLm9wcG9ydHVuaXRpZXNJZCwgdGhpcy5zdWJzY3JpcHRpb24/LmlkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcD8uY3JtX2FjY291bnRfYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0NvbW1lbnRzID0gcmVzcC5jcm1fYWNjb3VudF9hY3Rpb25zO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0NvbW1lbnRzLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLndoZW5fc2hvcnRfZGF0ZSA9IG1vbWVudChkYXRhLndoZW4pLmZvcm1hdCgnREQtTU1NLVlZWVknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBtb21lbnQobmV3IERhdGUoZGF0YS53aGVuKSkuZGlmZihtb21lbnQobmV3IERhdGUoKSksICdkYXlzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9tZW50KG5ldyBEYXRlKGRhdGEud2hlbikpIDwgbW9tZW50KG5ldyBEYXRlKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZHVlJ10gPSBgT3ZlcmR1ZSBieSAke01hdGguYWJzKGRpZmYpfSBkYXlzYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydjb2xvciddID0gdGhpcy5kYW5nZXJDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZHVlJ10gPSBgSW4gJHtkaWZmfSBkYXlzYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydjb2xvciddID0gIXRoaXMuZGFuZ2VyQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0NvbW1lbnRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShhLndoZW4pLmdldFRpbWUoKSAtIG5ldyBEYXRlKGIud2hlbikuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzQ29tbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bJ3doZW4nXSA9IG1vbWVudChpdGVtWyd3aGVuJ10pLmZvcm1hdCgnREQtTU1NLVlZWVknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bJ3llYXInXSA9IG1vbWVudChpdGVtWyd3aGVuJ10sICdERC1NTU0tWVlZWScpLmZvcm1hdCgnWVlZWScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVsnbW9udGgnXSA9IG1vbWVudChpdGVtWyd3aGVuJ10sICdERC1NTU0tWVlZWScpLmZvcm1hdCgnTU0nKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlZENhbmNlbGxlZEFjdGlvbnM6IE9wcG9ydHVuaXR5Q29tbWVudFtdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc0NvbW1lbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPT4gYWN0aW9uLmNvbXBsZXRlZCA9PT0gdHJ1ZSB8fCBhY3Rpb24uY2FuY2VsbGVkID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRDYW5jZWxsZWRBY3Rpb25zLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90Q29tcGxldGVkQ2FuY2VsbGVkQWN0aW9uczogT3Bwb3J0dW5pdHlDb21tZW50W10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzQ29tbWVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9PiBhY3Rpb24uY29tcGxldGVkID09PSBmYWxzZSAmJiBhY3Rpb24uY2FuY2VsbGVkID09PSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzQ29tbWVudHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbm90Q29tcGxldGVkQ2FuY2VsbGVkQWN0aW9ucy5jb25jYXQoY29tcGxldGVkQ2FuY2VsbGVkQWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hYm91dENvbnRyb2xzLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIGdldCBhY3Rpb25Gb3JtQ29udHJvbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGlvbkNvbnRyb2xzLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgdGhlIGxpc3Qgb2YgYWNjb3VudHMgYnkgc3Vic2NyaXB0aW9uSWQgKi9cbiAgICBnZXRBY2NvdW50c0J5U3Vic2NyaXB0aW9uKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0QWNjb3VudHNCeVN1YnNjcmlwdGlvbih0aGlzLnN1YnNjcmlwdGlvbj8uaWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50cyA9IHJlcy5hY2NvdW50cztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBhbmQgc2hvdyBhbGwgdGhlIGFjdGlvbnMgKi9cbiAgICBwcml2YXRlIGdldEFjdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZS5nZXRBbGxBY3Rpb25zKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3A/LmNybV9hY3Rpb25zICYmIHJlc3AuY3JtX2FjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9ucyA9IHJlc3AuY3JtX2FjdGlvbnMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gdGhpcy5hY3Rpb25zLmV2ZXJ5KFxuICAgICAgICAgICAgICAgICAgICB4ID0+IHgudmlzaWJsZSA9PT0gZmFsc2UgfHwgeC52aXNpYmxlID09PSBudWxsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGFzQWNjZXNzID0gdGhpcy5oYXNBZG1pbkFjY2Vzcyh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpO1xuICAgIH1cblxuICAgIHNob3dFZGl0Q29udHJvbHMoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgY29tbWVudHMgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgICAgICAnY2FyZC1oZWFkZXInXG4gICAgICAgICkgYXMgSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50PiAmIEl0ZXJhYmxlPEVsZW1lbnQ+O1xuICAgICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgY29tbWVudHMpIHtcbiAgICAgICAgICAgIGNvbW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdy1jb250cm9scycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudCAmJiBldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBldmVudC50YXJnZXQuY2xvc2VzdCgnLmNhcmQtaGVhZGVyJykuY2xhc3NMaXN0LmFkZCgnc2hvdy1jb250cm9scycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgZGF0ZSAqL1xuICAgIG9uRGF0ZVNlbGVjdChldmVudCwgYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRPYmogPSB7XG4gICAgICAgICAgICB3aGVuOiBIZWxwZXJTZXJ2aWNlLmRhdGVGb3JtYXQoZXZlbnQpLFxuICAgICAgICAgICAgY29tbWVudDogYWN0aW9uLmNvbW1lbnQsXG4gICAgICAgICAgICBjb21wbGV0ZWQ6IGFjdGlvbi5jb21wbGV0ZWQsXG4gICAgICAgICAgICBjYW5jZWxsZWQ6IGFjdGlvbi5jYW5jZWxsZWQsXG4gICAgICAgICAgICBjcm1fYWNjb3VudF9pZDogYWN0aW9uLmNybV9hY2NvdW50X2lkXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgLnVwZGF0ZUFjY291bnRDb21tZW50KHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgYWN0aW9uLmlkLCBjb21tZW50T2JqKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdkYXRlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRPcHBvcnR1bml0aWVzQ29tbWVudHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gc2hvdyBEYXRlUGlja2VyICovXG4gICAgc2hvd0RhdGVQaWNrZXJVcGRhdGUoYWN0aW9uSWQpIHtcbiAgICAgICAgdGhpcy51cGRhdGluZyA9ICF0aGlzLnVwZGF0aW5nO1xuICAgICAgICB0aGlzLmFjdGlvbklkID0gYWN0aW9uSWQ7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIHNldCB0aGUgYWN0aW9uIGFzIGNvbXBsZXRlZCAqL1xuICAgIHNldEFzQ29tcGxldGVkT3JVbmNvbXBsZXRlZChpZCwgYWN0aW9uLCBjb21wbGV0ZWRPclVuY29tcGxldGVkKSB7XG4gICAgICAgIGNvbnN0IGFsZXJ0VGl0bGUgPSBjb21wbGV0ZWRPclVuY29tcGxldGVkID8gJ0luQ29tcGxldGVkJyA6ICdDb21wbGV0ZWQnO1xuXG4gICAgICAgIHJldHVybiBzd2FsXG4gICAgICAgICAgICAuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGFsZXJ0VGl0bGUsXG4gICAgICAgICAgICAgICAgaHRtbDogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzZXQgYXMgJHthbGVydFRpdGxlfT9gLFxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXG4gICAgICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbk9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ6IGFjdGlvbi5jb21tZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkOiAhY29tcGxldGVkT3JVbmNvbXBsZXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZDogYWN0aW9uLmNhbmNlbGxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNybV9hY2NvdW50X2lkOiBhY3Rpb24uY3JtX2FjY291bnRfaWRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlQWNjb3VudENvbW1lbnQodGhpcy5zdWJzY3JpcHRpb24/LmlkLCBpZCwgYWN0aW9uT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQ3JtLlNldHRpbmdzLlVwZGF0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UoYWN0aW9uLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFjdGlvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9wcG9ydHVuaXRpZXNDb21tZW50cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIHVwZGF0ZSBjb21tZW50ICovXG4gICAgdXBkYXRlQ29tbWVudChpdGVtKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRPYmogPSB7XG4gICAgICAgICAgICBjb21tZW50OiBpdGVtLmNvbW1lbnQsXG4gICAgICAgICAgICBjb21wbGV0ZWQ6IGl0ZW0uY29tcGxldGVkLFxuICAgICAgICAgICAgY2FuY2VsbGVkOiBpdGVtLmNhbmNlbGxlZCxcbiAgICAgICAgICAgIGNybV9hY2NvdW50X2lkOiBpdGVtLmNybV9hY2NvdW50X2lkXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgLnVwZGF0ZUFjY291bnRDb21tZW50KHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgaXRlbS5pZCwgY29tbWVudE9iailcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnY29tbWVudCB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0VkaXRDb250cm9scyh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3Bwb3J0dW5pdGllc0NvbW1lbnRzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gc2V0IHRoZSBhY3Rpb24gYXMgY2FuY2VsbGVkICovXG4gICAgc2V0QXNDYW5jZWxsZWQoaWQsIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gc3dhbFxuICAgICAgICAgICAgLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQ2FuY2VsJyxcbiAgICAgICAgICAgICAgICBodG1sOiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHNldCBhcyBjYW5jZWxsZWQ/YCxcbiAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxuICAgICAgICAgICAgICAgIGljb246ICd3YXJuaW5nJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25PYmogPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50OiBhY3Rpb24uY29tbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogYWN0aW9uLmNvbXBsZXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNybV9hY2NvdW50X2lkOiBhY3Rpb24uY3JtX2FjY291bnRfaWRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlQWNjb3VudENvbW1lbnQodGhpcy5zdWJzY3JpcHRpb24/LmlkLCBpZCwgYWN0aW9uT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQ3JtLlNldHRpbmdzLlVwZGF0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UoYWN0aW9uLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFjdGlvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9wcG9ydHVuaXR5RGV0YWlscygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgY29udGFjdHMgKi9cbiAgICBnZXRBbGxDb250YWN0cygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldEFsbENvbnRhY3RzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgJycpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsbENvbnRhY3RzID0gcmVzcG9uc2UuY29udGFjdHM7XG4gICAgICAgICAgICB0aGlzLmFsbENvbnRhY3RzLmZvckVhY2gobWVtYmVyID0+IHtcbiAgICAgICAgICAgICAgICBtZW1iZXIuZGlzcGxheU5hbWUgPSBgJHttZW1iZXIuZmlyc3RfbmFtZSB8fCAnJ30gJHttZW1iZXIubGFzdF9uYW1lIHx8ICcnfSAtICR7XG4gICAgICAgICAgICAgICAgICAgIG1lbWJlci5lbWFpbFxuICAgICAgICAgICAgICAgIH1gLnRyaW0oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogc2VhcmNoIGFjY291bnRzICovXG4gICAgYWNjb3VudFNlYXJjaChldmVudCkge1xuICAgICAgICBsZXQgZGF0YSA9IFtdO1xuICAgICAgICBpZiAoZXZlbnQucXVlcnkpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmFjY291bnRzLmZpbHRlcigoeDogQ3JtQWNjb3VudCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB4Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGEucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRDb250YWN0cyA9IGRhdGE7XG4gICAgfVxuXG4gICAgb25Db250YWN0U2VhcmNoKGV2ZW50KSB7XG4gICAgICAgIGxldCBkYXRhID0gW107XG4gICAgICAgIGlmIChldmVudC5xdWVyeSkge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuYWxsQ29udGFjdHMuZmlsdGVyKCh4OiBPcHBvcnR1bml0eUNvbnRhY3QpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsbENvbnRhY3RzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RzID0gZGF0YTtcbiAgICB9XG5cbiAgICBvcGVuTW9kYWwoY29udGVudCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGNvbnRlbnQsIHsgY2VudGVyZWQ6IHRydWUsIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJyB9KTtcbiAgICB9XG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBvcHBvcnR1bml0aWVzIHZlcnNpb25zICovXG4gICAgcHJpdmF0ZSBnZXRDb250YWN0VmVyc2lvbigpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0Q29udGFjdFZlcnNpb24odGhpcy5zdWJzY3JpcHRpb24/LmlkLCB0aGlzLm9wcG9ydHVuaXRpZXNJZCwgJ0NybU9wcG9ydHVuaXR5JylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3Bwb3J0dW5pdGllc1ZlcnNpb25pbmcgPSByZXNwb25zZS52ZXJzaW9ucztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVXBsb2FkT3V0cHV0KG91dHB1dDogVXBsb2FkT3V0cHV0KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAob3V0cHV0LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FsbEFkZGVkVG9RdWV1ZSc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudDogVXBsb2FkSW5wdXQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndXBsb2FkQWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogQ1JNX0FDQ09VTlRfRklMRVNfUEFUSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyX2lkOiBgJHt0aGlzLnVzZXJJZH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNybV9hY2NvdW50X2lkOiBgJHt0aGlzLmFjY291bnRJZH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNybV9jb250YWN0X2lkOiBgJHt0aGlzLmNvbnRhY3RJZH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNybV9vcHBvcnR1bml0eV9pZDogYCR7dGhpcy5vcHBvcnR1bml0aWVzSWR9YFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVE9LRU5fSEVBREVSX0tFWV06IHRoaXMudG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRJbnB1dC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FkZGVkVG9RdWV1ZSc6XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXQuZmlsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gb3V0cHV0LmZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoRE9DVU1FTlRfVFlQRV9FWFQuaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKG91dHB1dC5maWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ2ZpbGUgZm9ybWF0cyBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndXBsb2FkaW5nJzpcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG91dHB1dC5maWxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9PiB0eXBlb2Ygb3V0cHV0LmZpbGUgIT09ICd1bmRlZmluZWQnICYmIGZpbGUuaWQgPT09IG91dHB1dC5maWxlLmlkXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbaW5kZXhdID0gb3V0cHV0LmZpbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVtb3ZlZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlcyA9IHRoaXMuZmlsZXMuZmlsdGVyKChmaWxlOiBVcGxvYWRGaWxlKSA9PiBmaWxlICE9PSBvdXRwdXQuZmlsZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkcmFnT3Zlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnT3ZlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkcmFnT3V0JzpcbiAgICAgICAgICAgIGNhc2UgJ2Ryb3AnOlxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ092ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RvbmUnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgICAgIGlmIChmaWxlLnByb2dyZXNzLnN0YXR1cyA9PT0gVXBsb2FkU3RhdHVzLkRvbmUpIHtcbiAgICAgICAgICAgICAgICBmaWxlWyd1cGxvYWRlZCddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHdhaXQgZm9yIDUwMG1zIGJlZm9yZSBmaWx0ZXIgZmlsZXNcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoZmlsZSA9PiBmaWxlLnByb2dyZXNzLnN0YXR1cyAhPT0gVXBsb2FkU3RhdHVzLkRvbmUpO1xuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0wXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1lLWF1dG8gbWItMFwiPlxuICAgICAgPGgyIGNsYXNzPVwibWItMFwiPlxuICAgICAgICA8YSBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgdG8gVGFyZ2V0XCJcbiAgICAgICAgICAoY2xpY2spPVwiYmFjaygpXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpb3VzXCI+PGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgICBPcHBvcnR1bml0eSBJbmZvXG4gICAgICA8L2gyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWluZm8gcC0zIGNhcmQgcGItMCBoLWF1dG9cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIHRleHQtY2VudGVyXCI+XG4gICAgICAgIDxhIGNsYXNzPVwicHJvZmlsZS1pbWFnZVwiPlxuICAgICAgICAgIDxpbWcgd2lkdGg9XCIxMDBcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMTAwXCJcbiAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1jaXJjbGUgaW1nLWJvcmRlciB3aWR0aC0xMDBcIlxuICAgICAgICAgICAgYWx0PVwidXNlclwiXG4gICAgICAgICAgICBzcmM9XCJhc3NldHMvaW1nL2ljb25zL21hbGUucG5nXCIgLz5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxoNCBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgQWJvdXQgPHNwYW4gKm5nSWY9XCJkYXRhPy5pZFwiPnt7IGRhdGEudGl0bGUgfX08L3NwYW4+XG4gICAgICAgIDwvaDQ+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAqbmdJZj1cImlzRm9ybUVkaXRcIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IGZsb2F0LWVuZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNGb3JtRWRpdCA9ICFpc0Zvcm1FZGl0OyBnZXRBY2NvdW50c0J5U3Vic2NyaXB0aW9uKCk7IGdldEFsbENvbnRhY3RzKClcbiAgICAgICAgICAgICAgICAgICAgXCI+RWRpdDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJhYm91dENvbnRyb2xzXCJcbiAgICAgICAgW2NsYXNzLmlzRGlzYWJsZWRdPVwiaXNGb3JtRWRpdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIG1iLTBcIiBmb3I9XCJUaXRsZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRpdGxlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMCBwcy0xIHVzZXItdmFsdWVcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0aXRsZSddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHVpLWZsdWlkIHNraWxscy1tb2RhbFwiXG4gICAgICAgICAgKm5nSWY9XCJkYXRhPy5jcm1fY29udGFjdF9pZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIG1iLTJcIiBmb3I9XCJDb250YWN0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuQ29udGFjdCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLmNvbnRhY3RJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY3JtX2NvbnRhY3RfaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1ibG9jayBwYi0yIHBzLTEgdXNlci12YWx1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzRm9ybUVkaXQgJiYgZGF0YT8uY3JtX2NvbnRhY3RfaWRcIj57eyBkYXRhPy5jcm1fY29udGFjdD8uZmlyc3RfbmFtZSB9fSB7eyBkYXRhPy5jcm1fY29udGFjdD8ubGFzdF9uYW1lIH19PC9hPlxuICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSAqbmdJZj1cIiFpc0Zvcm1FZGl0IHx8ICFkYXRhPy5jcm1fY29udGFjdF9pZFwiXG4gICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRDb250YWN0c1wiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fY29udGFjdF9pZFwiXG4gICAgICAgICAgICBkYXRhS2V5PVwiaWRcIlxuICAgICAgICAgICAgZmllbGQ9XCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwib25Db250YWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbnRhY3RzXCJcbiAgICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiPlxuICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyB1aS1mbHVpZCBza2lsbHMtbW9kYWxcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBtYi0yXCIgZm9yPVwiQWNjb3VudFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLkFjY291bnQnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8nICsgc3Vic2NyaXB0aW9uPy5zbHVnICsgcm91dGVycy5hY2NvdW50SW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNybV9hY2NvdW50X2lkXG4gICAgICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGQtYmxvY2sgcGItMiBwcy0xIHVzZXItdmFsdWVcIlxuICAgICAgICAgICAgKm5nSWY9XCJpc0Zvcm1FZGl0ICYmIGRhdGE/LmNybV9hY2NvdW50X2lkXCI+e3sgZGF0YT8uY3JtX2FjY291bnQ/Lm5hbWUgfX08L2E+XG4gICAgICAgICAgPHAtYXV0b0NvbXBsZXRlICpuZ0lmPVwiIWlzRm9ybUVkaXQgfHwgIWRhdGE/LmNybV9hY2NvdW50X2lkXCJcbiAgICAgICAgICAgIFtzdWdnZXN0aW9uc109XCJmaWx0ZXJlZEFjY291bnRzXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNybV9hY2NvdW50X2lkXCJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgICAgICAgICBmaWVsZD1cIm5hbWVcIlxuICAgICAgICAgICAgW2Ryb3Bkb3duXT1cInRydWVcIlxuICAgICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cImFjY291bnRTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYWNjb3VudHNcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCI+XG4gICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbWItMFwiIGZvcj1cIk9uZVRpbWVBbW91bnRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5PbmVUaW1lQW1vdW50JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1ibG9jayBwYi0yIHBzLTEgdXNlci12YWx1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzRm9ybUVkaXQgJiYgZGF0YT8ub25lX3RpbWVfYW1vdW50XCI+e3sgZGF0YT8ub25lX3RpbWVfYW1vdW50IHwgY3VycmVuY3kgfX08L3NwYW4+XG4gICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWlzRm9ybUVkaXQgfHwgIWRhdGE/Lm9uZV90aW1lX2Ftb3VudFwiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIG51bWJlcnNPbmx5XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCByb3VuZGVkLTAgcHMtMSB1c2VyLXZhbHVlXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9uZV90aW1lX2Ftb3VudFwiXG4gICAgICAgICAgICBpZD1cIm9uZV90aW1lX2Ftb3VudFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ29uZV90aW1lX2Ftb3VudCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbWItMFwiIGZvcj1cIm1vbnRobHlBbW91bnRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Nb250aGx5QW1vdW50JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1ibG9jayBwYi0yIHBzLTEgdXNlci12YWx1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzRm9ybUVkaXQgJiYgZGF0YT8ubW9udGhseV9hbW91bnRcIj57eyBkYXRhPy5tb250aGx5X2Ftb3VudCB8IGN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFpc0Zvcm1FZGl0IHx8ICFkYXRhPy5tb250aGx5X2Ftb3VudFwiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIG51bWJlcnNPbmx5XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCByb3VuZGVkLTAgcHMtMSB1c2VyLXZhbHVlXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1vbnRobHlfYW1vdW50XCJcbiAgICAgICAgICAgIGlkPVwibW9udGhseV9hbW91bnRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydtb250aGx5X2Ftb3VudCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNGb3JtRWRpdFwiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVuZCBmb3JtLWFjdGlvbi1idXR0b25zXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaXNGb3JtRWRpdCA9ICFpc0Zvcm1FZGl0OyBnZXRPcHBvcnR1bml0eURldGFpbHMoKVwiXG4gICAgICAgICAgICB2YWx1ZT1cIkNhbmNlbFwiIC8+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXMtM1wiXG4gICAgICAgICAgICB2YWx1ZT1cIlN1Ym1pdFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlT3Bwb3J0dW5pdGllcygpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC04XCI+XG4gICAgPHVsIG5nYk5hdlxuICAgICAgI25hdj1cIm5nYk5hdlwiXG4gICAgICBjbGFzcz1cIm5hdi10YWJzXCI+XG4gICAgICA8bGkgW25nYk5hdkl0ZW1dPVwiMVwiPlxuICAgICAgICA8YSBuZ2JOYXZMaW5rPk5vdGVzPC9hPlxuICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cbiAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImFjdGlvbkNvbnRyb2xzXCJcbiAgICAgICAgICAgIChuZ1N1Ym1pdCk9XCJvbkNvbW1lbnRTYXZlKClcIj5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRcIlxuICAgICAgICAgICAgICByb3dzPVwiNlwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtZGFuZ2VyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uQ29udHJvbHMuZ2V0KCdjb21tZW50JykudG91Y2hlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db250cm9scy5nZXQoJ2NvbW1lbnQnKS5pbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIE5vdGUgUmVxdWlyZWRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25zPy5sZW5ndGhcIlxuICAgICAgICAgICAgICBjbGFzcz1cImQtYmxvY2sgY2xlYXItYm90aCBwdC0zXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGlvbi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIG1lLTIgYnRuLW91dGxpbmUtcHJpbWFyeSBtYi0yIGFjdGlvbi1idG5cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEYXRlUGlja2VyKCRldmVudCwgYWN0aW9uLmlkKTsgZC50b2dnbGUoKVwiPlxuICAgICAgICAgICAgICAgICAge3sgYWN0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJtaXRBY3Rpb24gJiYgYWN0aW9uRm9ybUNvbnRyb2xzLmNybV9hY3Rpb25faWQuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYW4gYWN0aW9uXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImRkLW1tbS15eXl5XCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3aGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICBuZ2JEYXRlcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgI2Q9XCJuZ2JEYXRlcGlja2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZC50b2dnbGUoKVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTQgcGUtMCBjb21wbGV0ZWQtdG9nZ2xlXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8dWktc3dpdGNoIGNoZWNrZWRMYWJlbD1cImNvbXBsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgdW5jaGVja2VkTGFiZWw9XCJvcGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb21wbGV0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjb21wbGV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1lbmRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgW2J1dHRvbkJ1c3ldPVwiYnV0dG9uQnVzeVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTIgbWItMiBmbG9hdC1lbmRcIlxuICAgICAgICAgICAgICAgID5TdWJtaXQgTm90ZTwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IG10LTIgbWItMiBtZS0wIG1lLXNtLTIgZmxvYXQtZW5kXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1vZGFsKGNvbnRlbnQpXCI+e3sgJ1VwbG9hZCBmaWxlJyB8IHRyYW5zbG9jbyB9fTwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1dHRvbkRpc2FibGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm5vLWFjdGlvbnMgcHQtNFwiPlxuICAgICAgICAgICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuTm9BY3Rpb25zSW5PcHBvcnR1bml0aWVzSW5mb01lc3NhZ2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIDwvcHctbm8tZGF0YT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICAgICAgICAgICAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhb3Bwb3J0dW5pdGllc0NvbW1lbnRzPy5sZW5ndGggJiYgaXNMb2FkZWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJuby1hY3Rpb25zIHB0LTNcIj5cbiAgICAgICAgICAgIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuTm9BY3Rpb25zTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgIDwvcHctbm8tZGF0YT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3Bwb3J0dW5pdGllc0NvbW1lbnRzPy5sZW5ndGhcIlxuICAgICAgICAgICAgaWQ9XCJ0aW1lbGluZVwiXG4gICAgICAgICAgICBjbGFzcz1cInB0LTMgY2xlYXItYm90aCB0aW1lbGluZS1jZW50ZXIgdGltZWxpbmUtd3JhcHBlclwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwidGltZWxpbmVcIj5cbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGltZWxpbmUtbGluZVwiPjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwidGltZWxpbmVcIj5cbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGltZWxpbmUtbGluZVwiPjwvbGk+XG4gICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRpbWVsaW5lLWl0ZW1cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ210LTUnOiBvZGQgfVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiBvcHBvcnR1bml0aWVzQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBhcyBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9kZCA9IG9kZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBldmVuID0gZXZlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZWxpbmUtYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmctcmVkIGJnLWxpZ2h0ZW4tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWVsaW5lLXllYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtYmxvY2sgZGF0ZS15ZWFyXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ud2hlbiB8IGRhdGU6ICdtZWRpdW0nIHwgc2xpY2U6IDA6M1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnllYXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZWxpbmUtY2FyZCBzaGFkb3cgY2FyZCBwYi0wIHJvdW5kZWQgYm9yZGVyLWdyZXkgYm9yZGVyLWxpZ2h0ZW4tMiBwb3NpdGlvbi1zdGF0aWNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0wIGNsZWFyZml4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29tbWVudC1maWVsZCBmb3JtLWNvbnRyb2wgcC0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5jb21tZW50XCI+e3sgaXRlbS5jb21tZW50IH19PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZsb2F0LXN0YXJ0IG1iLTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhc2hvd0Z1bGxDb21tZW50IHx8IGl0ZW0uaWQgIT09IGNvbW1lbnRJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5jb21tZW50IHwgc2xpY2U6IDA6MTcwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxhICpuZ0lmPVwiaXRlbS5jb21tZW50Lmxlbmd0aCA+IDE3MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGdWxsQ29tbWVudCA9IHRydWU7IGNvbW1lbnRJZCA9IGl0ZW0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj4uLi5zaG93IG1vcmU8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmxvYXQtc3RhcnQgbWItMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGdWxsQ29tbWVudCAmJiBpdGVtLmlkID09PSBjb21tZW50SWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uY29tbWVudCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb21tZW50Lmxlbmd0aCA+IDE3MCAmJiBzaG93RnVsbENvbW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0Z1bGxDb21tZW50ID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+Li4uc2hvdyBsZXNzPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZCBlZGl0LWJ0biBmbG9hdC1lbmQgcHktMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRDb250cm9scygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidXNlcklkID09PSBpdGVtLm93bmVyX2lkIHx8IGhhc0FjY2Vzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXN1YnRpdGxlIHRleHQtbXV0ZWQgbXktMCBjbGVhcmZpeFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1zdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdXBkYXRpbmcgfHwgYWN0aW9uSWQgIT09IGl0ZW0uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtc21hbGwtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLndoZW4gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJ1cGRhdGluZyAmJiBhY3Rpb25JZCA9PT0gaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZGQtbW1tLXl5eXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IGl0ZW0ud2hlbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI2Q9XCJuZ2JEYXRlcGlja2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImQudG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZVNlbGVjdCk9XCJvbkRhdGVTZWxlY3QoJGV2ZW50LCBpdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiIGJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gZmxvYXQtZW5kIHdoZW4tYnRuIHB5LTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1c2VySWQgPT09IGl0ZW0ub3duZXJfaWQgfHwgaGFzQWNjZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGF0ZVBpY2tlclVwZGF0ZShpdGVtLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwIFtjbGFzcy50ZXh0LWRhbmdlcl09XCIhaXRlbS5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXRlbS5jYW5jZWxsZWQgJiYgIWl0ZW0uY29tcGxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmR1ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5vd25lcj8uZmlyc3RfbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5vd25lcj8ubGFzdF9uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1wcmltYXJ5XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY3JtX2FjdGlvbj8ubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWl0ZW0uY29tcGxldGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlcklkID09PSBpdGVtLm93bmVyX2lkIHx8IGhhc0FjY2VzcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJnLXN1Y2Nlc3MgbXMtMlwiPk9wZW48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXRlbS5jb21wbGV0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VySWQgPT09IGl0ZW0ub3duZXJfaWQgfHwgaGFzQWNjZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJTZXQgYXMgY29tcGxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2V0IGFzIGNvbXBsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0zIG1zLTNcIlxuICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBc0NvbXBsZXRlZE9yVW5jb21wbGV0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tcGxldGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGFza3MgY29tcGxldGVkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXRlbS5jYW5jZWxsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpdGVtLmNvbXBsZXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXJJZCA9PT0gaXRlbS5vd25lcl9pZCB8fCBoYXNBY2Nlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIlNldCBhcyBjYW5jZWxsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZXQgYXMgY2FuY2VsbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEFzQ2FuY2VsbGVkKGl0ZW0uaWQsIGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdGltZXMgZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb21wbGV0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VySWQgPT09IGl0ZW0ub3duZXJfaWQgfHwgaGFzQWNjZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJTZXQgYXMgVW5Db21wbGV0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZXQgYXMgVW5Db21wbGV0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBc0NvbXBsZXRlZE9yVW5jb21wbGV0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tcGxldGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtcy0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtd2luZG93LWNsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWJ0bnMgbXQtMyB0ZXh0LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtZGVmYXVsdCBtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdENvbnRyb2xzKHVuZGVmaW5lZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUNvbW1lbnQoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFN1Ym1pdFxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgW25nYk5hdkl0ZW1dPVwiMlwiPlxuICAgICAgICA8YSBuZ2JOYXZMaW5rPlZlcnNpb25pbmc8L2E+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHZlcnNpb24gb2Ygb3Bwb3J0dW5pdGllc1ZlcnNpb25pbmdcIj5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Ryb25nPkV2ZW50OiA8L3N0cm9uZz57eyB2ZXJzaW9uLmV2ZW50IH19IHwgPHN0cm9uZz5BdXRob3I6IDwvc3Ryb25nPjxhICpuZ0lmPVwidmVyc2lvbj8uYXV0aG9yXCJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9tZW1iZXJzJywgdmVyc2lvbj8uYXV0aG9yPy5zbHVnXVwiPnt7IHZlcnNpb24/LmF1dGhvciB8IGlmTmFtZU51bGxTaG93RW1haWwgfX08L2E+XG4gICAgICAgICAgICAgIHwgPHN0cm9uZz5DcmVhdGVkIGF0OiA8L3N0cm9uZz57eyB2ZXJzaW9uLmNyZWF0ZWRfYXQgfX08YnIgLz5cbiAgICAgICAgICAgICAgPHN0cm9uZz5PYmplY3Q6IDwvc3Ryb25nPnt7IHZlcnNpb24ub2JqZWN0IHwganNvbiB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGhyIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm9wcG9ydHVuaXRpZXNWZXJzaW9uaW5nPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuTm9WZXJzaW9uc01lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICA8L3B3LW5vLWRhdGE+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIFtuZ2JOYXZJdGVtXT1cIjNcIj5cbiAgICAgICAgPGEgbmdiTmF2TGluaz5GaWxlczwvYT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XG4gICAgICAgICAgPHB3LXNtYXJ0LWNybS1jb21wYW55LWZpbGVzIFtjb250YWN0SWRdPVwiY29udGFjdElkXCJcbiAgICAgICAgICAgIFthY2NvdW50SWRdPVwiYWNjb3VudElkXCJcbiAgICAgICAgICAgIFtvcHBvcnR1bml0eUlkXT1cIm9wcG9ydHVuaXRpZXNJZFwiPlxuICAgICAgICAgIDwvcHctc21hcnQtY3JtLWNvbXBhbnktZmlsZXM+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8ZGl2IFtuZ2JOYXZPdXRsZXRdPVwibmF2XCI+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudFxuICBsZXQtbW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICA8aDMgY2xhc3M9XCJtb2RhbC10aXRsZSBtYi0wIHAtMFwiPnt7ICdVcGxvYWQgRmlsZScgfCB0cmFuc2xvY28gfX08L2gzPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0bi1jbG9zZSBmbG9hdC1lbmRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cblxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8c21hbGw+IHt7ICdVc2VyLlByb2ZpbGUuUGljdHVyZU1lc3NhZ2UnIHwgdHJhbnNsb2NvIH19PC9zbWFsbD5cbiAgICA8ZGl2IGNsYXNzPVwicm93IHAtMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWJveFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtYm94LWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgIG5nRmlsZURyb3BcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgICAgICh1cGxvYWRPdXRwdXQpPVwib25VcGxvYWRPdXRwdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFt1cGxvYWRJbnB1dF09XCJ1cGxvYWRJbnB1dFwiPlxuICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICBEcmFnIGZpbGVzIGhlcmUgb3JcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ1cGxvYWQtYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICBuZ0ZpbGVTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICh1cGxvYWRPdXRwdXQpPVwib25VcGxvYWRPdXRwdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFt1cGxvYWRJbnB1dF09XCJ1cGxvYWRJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIC8+XG4gICAgICAgICAgICAgICAgICBicm93c2VcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIHRvIHVwbG9hZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWl0ZW1cIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZiBvZiBmaWxlczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWl0ZW0tY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpb25pY29uIGlvbi1pb3MtY29weVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImY/LnByb2dyZXNzPy5kYXRhPy5wZXJjZW50YWdlICsgJyUnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZG9uZV09XCJmWyd1cGxvYWRlZCddXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLXRleHQtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9ncmVzcy10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWRvbmVdPVwiZlsndXBsb2FkZWQnXVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmWyd1cGxvYWRlZCddXCI+e3sgZi5wcm9ncmVzcz8uZGF0YT8ucGVyY2VudGFnZSAtIDEgfX0lXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmWyd1cGxvYWRlZCddXCI+MTAwICU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZbJ3VwbG9hZGVkJ11cIj5VcGxvYWRpbmcuLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZlsndXBsb2FkZWQnXVwiPkRvbmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwZWVkLWFuZC1ldGEtdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZi5wcm9ncmVzcz8uZGF0YT8ucGVyY2VudGFnZSAhPT0gMCAmJiAhZlsndXBsb2FkZWQnXVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBmLnByb2dyZXNzPy5kYXRhPy5zcGVlZEh1bWFuIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+RVRBIHt7IGYucHJvZ3Jlc3M/LmRhdGE/LmV0YUh1bWFuIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|