@csmart/ngc-smart-victim 0.1.3 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- package/bundles/csmart-ngc-smart-victim.umd.js +146 -93
- package/bundles/csmart-ngc-smart-victim.umd.js.map +1 -1
- package/bundles/csmart-ngc-smart-victim.umd.min.js +2 -2
- package/bundles/csmart-ngc-smart-victim.umd.min.js.map +1 -1
- package/csmart-ngc-smart-victim.metadata.json +1 -1
- package/esm2015/lib/contact/contact.component.js +8 -4
- package/esm2015/lib/smart-victim-detail/smart-victim-detail.component.js +53 -53
- package/esm2015/lib/smart-victim.component.js +85 -37
- package/esm2015/lib/smart-victim.module.js +3 -2
- package/esm5/lib/contact/contact.component.js +8 -4
- package/esm5/lib/smart-victim-detail/smart-victim-detail.component.js +53 -53
- package/esm5/lib/smart-victim.component.js +86 -35
- package/esm5/lib/smart-victim.module.js +3 -2
- package/fesm2015/csmart-ngc-smart-victim.js +142 -92
- package/fesm2015/csmart-ngc-smart-victim.js.map +1 -1
- package/fesm5/csmart-ngc-smart-victim.js +143 -90
- package/fesm5/csmart-ngc-smart-victim.js.map +1 -1
- package/lib/smart-victim.component.d.ts +9 -2
- package/package.json +1 -1
@@ -153,14 +153,8 @@ var SmartVictimDetailComponent = /** @class */ (function () {
|
|
153
153
|
email: new FormControl('', Validators.compose([Validators.pattern(this.emailPattern)])),
|
154
154
|
minorFlag: new FormControl('', Validators.compose([Validators.required])),
|
155
155
|
victimAdvocateFlag: new FormControl('', Validators.compose([Validators.required])),
|
156
|
-
guardianLastName: new FormControl('',
|
157
|
-
|
158
|
-
*/
|
159
|
-
function () { return _this.victimForm.get('minorFlag').value; }), Validators.required, 'illuminatiError')),
|
160
|
-
guardianFirstName: new FormControl('', conditionalValidator((/**
|
161
|
-
* @return {?}
|
162
|
-
*/
|
163
|
-
function () { return _this.victimForm.get('minorFlag').value; }), Validators.required, 'illuminatiError')),
|
156
|
+
guardianLastName: new FormControl(''),
|
157
|
+
guardianFirstName: new FormControl(''),
|
164
158
|
guardianPrefixId: new FormControl(''),
|
165
159
|
guardianSuffixId: new FormControl(''),
|
166
160
|
//guardianGender:new FormControl('', ),
|
@@ -544,8 +538,8 @@ var SmartVictimDetailComponent = /** @class */ (function () {
|
|
544
538
|
* @return {?}
|
545
539
|
*/
|
546
540
|
function (value) {
|
547
|
-
|
548
|
-
|
541
|
+
// this.victimForm.get('guardianFirstName').updateValueAndValidity();
|
542
|
+
// this.victimForm.get('guardianLastName').updateValueAndValidity();
|
549
543
|
_this.victimForm.get('guardianWorkPhone').updateValueAndValidity();
|
550
544
|
_this.victimForm.get('guardianHomePhone').updateValueAndValidity();
|
551
545
|
_this.victimForm.get('guardianCellPhone').updateValueAndValidity();
|
@@ -570,7 +564,8 @@ var SmartVictimDetailComponent = /** @class */ (function () {
|
|
570
564
|
* @return {?}
|
571
565
|
*/
|
572
566
|
function () {
|
573
|
-
this.onSave.emit(this.victimDetail);
|
567
|
+
//this.onSave.emit(this.victimDetail);
|
568
|
+
this.router.navigate(['victimList']);
|
574
569
|
};
|
575
570
|
/**
|
576
571
|
* @return {?}
|
@@ -613,23 +608,21 @@ var SmartVictimDetailComponent = /** @class */ (function () {
|
|
613
608
|
* @return {?}
|
614
609
|
*/
|
615
610
|
function ($event) {
|
616
|
-
|
617
|
-
|
618
|
-
/** @type {?} */
|
619
|
-
var guardianFirstNameControl = this.victimForm.get('guardianFirstName');
|
611
|
+
// const guardianLastNameControl = this.victimForm.get('guardianLastName');
|
612
|
+
//const guardianFirstNameControl = this.victimForm.get('guardianFirstName');
|
620
613
|
if ($event.value === true) {
|
621
614
|
this.guardianTabFlag = true;
|
622
|
-
guardianLastNameControl.setValidators(Validators.required);
|
623
|
-
guardianFirstNameControl.setValidators(Validators.required);
|
615
|
+
// guardianLastNameControl.setValidators(Validators.required);
|
616
|
+
// guardianFirstNameControl.setValidators(Validators.required);
|
624
617
|
//this.victimForm.value.guardianNoPhoneFlag = true;
|
625
618
|
}
|
626
619
|
else {
|
627
620
|
this.guardianTabFlag = false;
|
628
|
-
guardianLastNameControl.clearValidators();
|
629
|
-
guardianFirstNameControl.clearValidators();
|
621
|
+
// guardianLastNameControl.clearValidators();
|
622
|
+
// guardianFirstNameControl.clearValidators();
|
630
623
|
}
|
631
|
-
guardianLastNameControl.updateValueAndValidity();
|
632
|
-
guardianFirstNameControl.updateValueAndValidity();
|
624
|
+
//guardianLastNameControl.updateValueAndValidity();
|
625
|
+
// guardianFirstNameControl.updateValueAndValidity();
|
633
626
|
};
|
634
627
|
/**
|
635
628
|
* @param {?} $event
|
@@ -779,13 +772,11 @@ var SmartVictimDetailComponent = /** @class */ (function () {
|
|
779
772
|
/** @type {?} */
|
780
773
|
var minorControl = this.victimForm.get('minorFlag');
|
781
774
|
minorControl.setValue(true);
|
782
|
-
|
783
|
-
|
784
|
-
/** @type {?} */
|
785
|
-
var guardianFirstNameControl = this.victimForm.get('guardianFirstName');
|
775
|
+
// const guardianLastNameControl = this.victimForm.get('guardianLastName');
|
776
|
+
// const guardianFirstNameControl = this.victimForm.get('guardianFirstName');
|
786
777
|
this.guardianTabFlag = true;
|
787
|
-
guardianLastNameControl.setValidators(Validators.required);
|
788
|
-
guardianFirstNameControl.setValidators(Validators.required);
|
778
|
+
// guardianLastNameControl.setValidators(Validators.required);
|
779
|
+
// guardianFirstNameControl.setValidators(Validators.required);
|
789
780
|
}
|
790
781
|
};
|
791
782
|
/**
|
@@ -1127,8 +1118,6 @@ var SmartVictimDetailComponent = /** @class */ (function () {
|
|
1127
1118
|
}
|
1128
1119
|
else {
|
1129
1120
|
//update victim
|
1130
|
-
console.log(' this.victimForm.value.victimOffenderRelationshipTypeId');
|
1131
|
-
console.log(this.victimForm.value.victimOffenderRelationshipTypeId);
|
1132
1121
|
this.victimDetail.underSupervisionFlag = this.victimForm.value.underSupervisionFlag;
|
1133
1122
|
this.victimDetail.victimOffenderRelationshipTypeId = this.victimForm.value.victimOffenderRelationshipTypeId;
|
1134
1123
|
this.victimDetail.lastName = this.victimForm.value.lastName;
|
@@ -1155,7 +1144,7 @@ var SmartVictimDetailComponent = /** @class */ (function () {
|
|
1155
1144
|
this.victimDetail.drugUseFlag = this.victimForm.value.drugUseFlag;
|
1156
1145
|
this.victimDetail.alcoholUseFlag = this.victimForm.value.alcoholUseFlag;
|
1157
1146
|
this.victimDetail.accessRisk = this.victimForm.value.accessRisk;
|
1158
|
-
this.victimDetail.addressId = this.
|
1147
|
+
this.victimDetail.addressId = this.addressId;
|
1159
1148
|
this.victimDetail.allowCsosaContactFlag = this.victimForm.value.allowCsosaContactFlag;
|
1160
1149
|
this.victimDetail.victimSupports = [];
|
1161
1150
|
this.victimForm.value.victimSupports.forEach((/**
|
@@ -1250,17 +1239,23 @@ var SmartVictimDetailComponent = /** @class */ (function () {
|
|
1250
1239
|
_this.victimAdvocate.cellPhone = _this.victimForm.value.advocateCellPhone ? _this.victimForm.value.advocateCellPhone : null;
|
1251
1240
|
_this.victimAdvocate.email = _this.victimForm.value.advocateEmail ? _this.victimForm.value.advocateEmail : null;
|
1252
1241
|
_this.victimAdvocate.modifiedBy = _this.staffId;
|
1253
|
-
|
1254
|
-
|
1255
|
-
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1263
|
-
|
1242
|
+
console.log('work on advocate part');
|
1243
|
+
if (_this.victimDetail.victimAdvocateFlag == 'YS') {
|
1244
|
+
console.log('work on advocate flag is YS ');
|
1245
|
+
if (_this.victimDetail.advocateFirstName != null) {
|
1246
|
+
console.log('check advocate fisrt name ');
|
1247
|
+
console.log(_this.victimDetail.advocateFirstName);
|
1248
|
+
_this.victimService.putVictimAdvocate(_this.victimDetail.victimId, _this.victimAdvocate).subscribe((/**
|
1249
|
+
* @param {?} resp
|
1250
|
+
* @return {?}
|
1251
|
+
*/
|
1252
|
+
function (resp) { }));
|
1253
|
+
}
|
1254
|
+
else {
|
1255
|
+
console.log('add advocate');
|
1256
|
+
console.log(_this.victimAdvocate);
|
1257
|
+
_this.victimService.postVictimAdvocate(_this.victimDetail.victimId, _this.victimAdvocate).subscribe();
|
1258
|
+
}
|
1264
1259
|
}
|
1265
1260
|
// guardian section
|
1266
1261
|
_this.victimGuardian.victimGuardianId = _this.victimDetail.victimId;
|
@@ -1275,20 +1270,25 @@ var SmartVictimDetailComponent = /** @class */ (function () {
|
|
1275
1270
|
_this.victimGuardian.cellPhone = _this.victimForm.value.guardianCellPhone ? _this.victimForm.value.guardianCellPhone : null;
|
1276
1271
|
_this.victimGuardian.email = _this.victimForm.value.guardianEmail ? _this.victimForm.value.guardianEmail : null;
|
1277
1272
|
_this.victimGuardian.modifiedBy = _this.staffId;
|
1278
|
-
if (_this.victimDetail.minorFlag == true
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1273
|
+
if (_this.victimDetail.minorFlag == true) {
|
1274
|
+
if (_this.victimDetail.guardianFirstName != null)
|
1275
|
+
_this.victimService.putVictimGuardian(_this.victimDetail.victimId, _this.victimGuardian).subscribe((/**
|
1276
|
+
* @param {?} resp
|
1277
|
+
* @return {?}
|
1278
|
+
*/
|
1279
|
+
function (resp) {
|
1280
|
+
}));
|
1281
|
+
else {
|
1282
|
+
console.log('add gurdian');
|
1283
|
+
console.log(_this.victimGuardian);
|
1284
|
+
_this.victimService.postVictimGuardian(_this.victimDetail.victimId, _this.victimGuardian).subscribe();
|
1285
|
+
}
|
1288
1286
|
}
|
1289
1287
|
}));
|
1290
1288
|
}
|
1291
1289
|
} //end of this.phoneValidationFlag = false
|
1290
|
+
console.log('this.victimDetail');
|
1291
|
+
console.log(this.victimDetail);
|
1292
1292
|
this.onSave.emit(this.victimDetail);
|
1293
1293
|
};
|
1294
1294
|
//#endregion "save victim"
|
@@ -1318,7 +1318,7 @@ var SmartVictimDetailComponent = /** @class */ (function () {
|
|
1318
1318
|
SmartVictimDetailComponent.decorators = [
|
1319
1319
|
{ type: Component, args: [{
|
1320
1320
|
selector: 'csmart-victim-detail',
|
1321
|
-
template: "<mat-card>\r\n <mat-card-content>\r\n\r\n <div [formGroup]=\"victimForm\">\r\n\r\n <mat-tab-group dynamicHeight mat-stretch-tabs>\r\n <mat-tab label=\"Victim Detail\" >\r\n <div class='container'>\r\n\r\n <mat-form-field>\r\n <mat-label>Is victim a minor?<font color=\"red\">* </font></mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"minorFlag\" (change)=\"radioMinorChange($event)\" [(ngModel)]=\"editVictim.minorFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors \r\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\r\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Does the Victim have a Victim Advocate or Social Worker with <br>whom CSOSA should maintain contact?<font color=\"red\">* </font></mat-label>\r\n <br>\r\n <br>\r\n <mat-radio-group class = \"tp-radio-group\" formControlName=\"victimAdvocateFlag\" (change)=\"radioAdvocateChange($event)\" [(ngModel)]=\"editVictim.victimAdvocateFlag\">\r\n <mat-radio-button color=\"primary\" *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\">{{item.name}} </mat-radio-button> \r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors \r\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\r\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Victim Currently Under Supervision:</mat-label>\r\n <mat-select formControlName=\"underSupervisionFlag\" name=\"supervision\" [(ngModel)]=\"editVictim.underSupervisionFlag\" >\r\n <mat-option *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\" >\r\n {{item.name}}</mat-option>\r\n </mat-select>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors \r\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\r\n <mat-error>under supervision field is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Relationship to Offender:</mat-label>\r\n <mat-select formControlName=\"victimOffenderRelationshipTypeId\" [(ngModel)]=\"editVictim.victimOffenderRelationshipTypeId\" >\r\n <mat-option *ngFor=\"let item of relationshipTypes\" [value]=\"item.relationshipTypeId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors \r\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\r\n <mat-error>relationship is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Victim Last Name:</mat-label>\r\n <input matInput formControlName=\"lastName\" [(ngModel)]=\"editVictim.lastName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors \r\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\r\n <mat-error>victim last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim First Name: </mat-label>\r\n <input matInput formControlName=\"firstName\" [(ngModel)]=\"editVictim.firstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors \r\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\r\n <mat-error>victim first name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Middle Name:</mat-label>\r\n <input matInput formControlName=\"middleName\" [(ngModel)]=\"editVictim.middleName\">\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim Prefix:</mat-label>\r\n <mat-select formControlName=\"prefixId\" [(ngModel)]=\"editVictim.prefixId\">\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Suffix:</mat-label>\r\n <mat-select formControlName=\"suffixId\" [(ngModel)]=\"editVictim.suffixId\">\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim Gender:</mat-label>\r\n <mat-select formControlName=\"genderCode\" [(ngModel)]=\"editVictim.genderCode\">\r\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Date of Birth:</mat-label>\r\n <input matInput \r\n [matDatepicker]=\"victimBirthRef\" \r\n formControlName=\"birthDate\"\r\n [(ngModel)]=\"editVictim.birthDate\"\r\n (click)=\"victimBirthRef.open()\"\r\n (dateChange)=\"handleDOBChange($event)\" \r\n >\r\n <mat-datepicker-toggle [for]=\"victimBirthRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #victimBirthRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Home Phone:</mat-label>\r\n <input \r\n matInput \r\n formControlName=\"homePhone\" \r\n [(ngModel)]=\"editVictim.homePhone\" \r\n phoneMask\r\n maxlength=\"14\"/>\r\n\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('homePhone').errors\r\n && (victimForm.get('homePhone').dirty || victimForm.get('homePhone').touched)\">\r\n\r\n\r\n <mat-error><strong>Home phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Victim Cell Phone:</mat-label>\r\n <input matInput formControlName=\"cellPhone\" [(ngModel)]=\"editVictim.cellPhone\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('cellPhone').errors \r\n && (victimForm.get('cellPhone').dirty || victimForm.get('cellPhone').touched)\">\r\n <mat-error><strong>Cell phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n \r\n <mat-form-field >\r\n <mat-label>Victim Work Phone:</mat-label>\r\n <input matInput formControlName=\"workPhone\" [(ngModel)]=\"editVictim.workPhone\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('workPhone').errors \r\n && (victimForm.get('workPhone').dirty || victimForm.get('workPhone').touched)\">\r\n <mat-error><strong>Work phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Victim Email:</mat-label>\r\n <input matInput formControlName=\"email\" [(ngModel)]=\"editVictim.email\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('email').errors \r\n && (victimForm.get('email').dirty || victimForm.get('email').touched)\">\r\n <mat-error><strong>victim email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n \r\n <div></div>\r\n \r\n <app-smart-address \r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"addressId\"\r\n (addressIdChange)=\"onAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #addressComponent\r\n >\r\n </app-smart-address>\r\n \r\n \r\n <!-- Docket: \r\n <div>\r\n <div *ngFor=\"let docket of docketlist; let i=index\">\r\n <mat-checkbox >{{docket.docketNumber}}</mat-checkbox>\r\n </div>\r\n </div> -->\r\n\r\n <mat-checkbox color=\"primary\" formControlName=\"allowCsosaContactFlag\" name=\"allowCsosaContactFlag\" [(ngModel)]=\"editVictim.allowCsosaContactFlag\">victim wants to be contacted by CSOSA</mat-checkbox>\r\n \r\n </div> \r\n\r\n <mat-card>\r\n <mat-form-field>\r\n <mat-label> Children in Common</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"commonChildrenFlag\" [(ngModel)]=\"editVictim.commonChildrenFlag\" (change)=\"radioCicChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n\r\n <div *ngIf=\"commonChildrenDivFlag\">\r\n \r\n <mat-form-field >\r\n <mat-label>\r\n Children number\r\n </mat-label>\r\n <input matInput formControlName=\"commonChildrenNumber\" [(ngModel)]=\"editVictim.commonChildrenNumber\" >\r\n </mat-form-field>\r\n \r\n </div>\r\n \r\n <mat-form-field>\r\n <mat-label>CPO: </mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"cpoExpirationFlag\" [(ngModel)]=\"editVictim.cpoExpirationFlag\" (change)=\"radioCpoChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"cpoExpirationDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Expiration Date: </mat-label>\r\n <input matInput \r\n [matDatepicker]=\"cpoDateRef\" \r\n formControlName=\"cpoExpirationDate\" \r\n (click)=\"cpoDateRef.open()\" \r\n [(ngModel)]=\"editVictim.cpoExpirationDate\" >\r\n <mat-datepicker-toggle [for]=\"cpoDateRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #cpoDateRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n </div>\r\n \r\n <br>\r\n <br>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim has a Support System in Place? </mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"supportInPlaceFlag\" [(ngModel)]=\"editVictim.supportInPlaceFlag\" (change)=\"radioSupportChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"supportInPlaceDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Support type? </mat-label>\r\n <mat-select #supportSel formControlName=\"victimSupports\" [(ngModel)]=\"editVictim.victimSupports\" multiple>\r\n <div (mouseleave)=\"supportSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of victimSupportTypes\" [value]=\"item.victimSupportTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n\r\n </div>\r\n \r\n <br>\r\n <br>\r\n\r\n <mat-form-field>\r\n <mat-label>Weapons Involved?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"weaponInvolvedFlag\" (change)=\"radioWeaponChange($event)\" [(ngModel)]=\"editVictim.weaponInvolvedFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n \r\n <div *ngIf=\"weaponInvolvedDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Weapon Type</mat-label>\r\n <mat-select #weaponSel formControlName=\"victimWeaponUses\" multiple [(ngModel)]=\"editVictim.victimWeaponUses\" (selectionChange)=\"checkOtherWeapon($event.value)\" >\r\n <div (mouseleave)=\"weaponSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of weaponTypes\" [value]=\"item.weaponTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"otherWeaponFlag\"> \r\n <mat-form-field>\r\n <mat-label>Other Weapon:* </mat-label>\r\n <input matInput formControlName=\"otherWeapon\" >\r\n </mat-form-field>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors \r\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\r\n <mat-error><strong>Other weapon is required.</strong></mat-error>\r\n </div>\r\n </div>\r\n\r\n \r\n <br>\r\n <br>\r\n \r\n <mat-form-field>\r\n <mat-label>Was Offender under the influence of alcohol at the time of the offense?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"alcoholUseFlag\" [(ngModel)]=\"editVictim.alcoholUseFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <br>\r\n <br>\r\n\r\n <mat-form-field>\r\n <mat-label>Was Offender under the influence of drugs at the time of the offense?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"drugUseFlag\" (change)=\"radioDrugChange($event)\" [(ngModel)]=\"editVictim.drugUseFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"drugUseDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Drug:</mat-label>\r\n <mat-select #drugSel formControlName=\"victimDrugUses\" multiple (selectionChange)=\"checkOtherDrug($event.value)\" >\r\n <div (mouseleave)=\"drugSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of drugs\" [value]=\"item.drugTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n \r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n </div>\r\n\r\n <div *ngIf=\"otherDrugFlag\"> \r\n <mat-form-field>\r\n <mat-label>Other Drug:* </mat-label>\r\n <input matInput formControlName=\"otherDrug\" >\r\n </mat-form-field>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors \r\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\r\n <mat-error><strong>Other drug is required.</strong></mat-error>\r\n </div>\r\n </div>\r\n <br>\r\n <br>\r\n\r\n <div>\r\n <div>\r\n <mat-label>\r\n Access Risk: 1 thru 10 (10 greatest risk): <b> {{editVictim.accessRisk}}</b>\r\n </mat-label>\r\n </div>\r\n <div>\r\n \r\n <mat-slider\r\n formControlName=\"accessRisk\"\r\n thumbLabel=\"true\"\r\n [displayWith]=\"formatLabel\"\r\n min=\"1\"\r\n max=\"10\"\r\n [(ngModel)]=\"editVictim.accessRisk\" \r\n ></mat-slider>\r\n \r\n </div>\r\n\r\n </div>\r\n\r\n </mat-card> \r\n\r\n \r\n <br><br><br> \r\n </mat-tab>\r\n \r\n <mat-tab *ngIf=\"guardianTabFlag\" label=\"Legal Guardian\">\r\n <div class='container'>\r\n <mat-form-field>\r\n <mat-label>Guardian Last Name:</mat-label>\r\n <input matInput formControlName=\"guardianLastName\" [(ngModel)]=\"editVictim.guardianLastName\" > \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors \">\r\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian First Name:</mat-label>\r\n <input matInput formControlName=\"guardianFirstName\" [(ngModel)]=\"editVictim.guardianFirstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \">\r\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Guardian Prefix:</mat-label>\r\n <mat-select formControlName=\"guardianPrefixId\" [(ngModel)]=\"editVictim.guardianPrefixId\" >\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian Suffix:</mat-label>\r\n <mat-select formControlName=\"guardianSuffixId\" [(ngModel)]=\"editVictim.guardianSuffixId\" >\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n \r\n <!-- <mat-form-field>\r\n <mat-select placeholder=\"Choose\" formControlName=\"guardianGender\" [(ngModel)]=\"editVictim.guardianGender\">\r\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field> -->\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Date of Birth:</mat-label>\r\n <input matInput \r\n [matDatepicker]=\"guardianDateRef\" \r\n formControlName=\"guardianBirthDate\"\r\n [(ngModel)]=\"editVictim.guardianBirthDate\" \r\n (click)=\"guardianDateRef.open()\" \r\n >\r\n <mat-datepicker-toggle [for]=\"guardianDateRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #guardianDateRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n <mat-form-field >\r\n <mat-checkbox \r\n color = \"primary\" \r\n formControlName=\"guardianNoPhoneFlag\" \r\n \r\n >\r\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\r\n <input matInput placeholder=\"\" style=\"display: none;\">\r\n </mat-form-field>\r\n\r\n\r\n <div></div>\r\n <mat-card>\r\n <mat-form-field >\r\n <mat-label>Guardian Home Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianHomePhone\" \r\n [(ngModel)]=\"editVictim.guardianHomePhone\" \r\n phoneMask\r\n maxlength=\"14\" >\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianHomePhone').errors \r\n && (victimForm.get('guardianHomePhone').dirty || victimForm.get('guardianHomePhone').touched)\">\r\n <mat-error><strong>Guardian home phone number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Guardian Cell Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianCellPhone\" \r\n [(ngModel)]=\"editVictim.guardianCellPhone\" \r\n phoneMask\r\n maxlength=\"14\" \r\n >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianCellPhone').errors \r\n && (victimForm.get('guardianCellPhone').dirty || victimForm.get('guardianCellPhone').touched)\">\r\n <mat-error><strong>Guardian Cell phone number format is not correct.</strong></mat-error>\r\n </div>\r\n\r\n \r\n\r\n \r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Guardian Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianWorkPhone\" \r\n [(ngModel)]=\"editVictim.guardianWorkPhone\" \r\n phoneMask\r\n maxlength=\"14\" >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianWorkPhone').errors \r\n && (victimForm.get('guardianWorkPhone').dirty || victimForm.get('guardianWorkPhone').touched)\">\r\n <mat-error><strong>Guardian work phone number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n \r\n </mat-form-field>\r\n </mat-card>\r\n \r\n <div></div>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian Email:</mat-label>\r\n <input matInput formControlName=\"guardianEmail\" [(ngModel)]=\"editVictim.guardianEmail\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianEmail').errors \r\n && (victimForm.get('guardianEmail').dirty || victimForm.get('guardianEmail').touched)\">\r\n <mat-error><strong>Guardian email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n \r\n <div>\r\n <app-smart-address \r\n\r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"guardianAddressId\"\r\n (addressIdChange)=\"onGuardianAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #guardianAddressComponent\r\n >\r\n </app-smart-address>\r\n </div>\r\n </div>\r\n \r\n <br><br><br> \r\n </mat-tab>\r\n \r\n <!--advocate-->\r\n \r\n <mat-tab *ngIf=\"advocateTabFlag\" label=\"Advocate\" > \r\n <div class='container'>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Last Name:</mat-label>\r\n <input matInput formControlName=\"advocateLastName\" [(ngModel)]=\"editVictim.advocateLastName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors \">\r\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate First Name:</mat-label>\r\n <input matInput formControlName=\"advocateFirstName\" [(ngModel)]=\"editVictim.advocateFirstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors \">\r\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Prefix:</mat-label>\r\n <mat-select formControlName=\"advocatePrefixId\" [(ngModel)]=\"editVictim.advocatePrefixId\" >\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Suffix:</mat-label>\r\n <mat-select formControlName=\"advocateSuffixId\" [(ngModel)]=\"editVictim.advocateSuffixId\" >\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n \r\n <mat-form-field>\r\n <mat-checkbox \r\n color = \"primary\" \r\n formControlName=\"advocateNoPhoneFlag\" \r\n \r\n [(ngModel)]=\"editVictim.advocateNoPhoneFlag\" >\r\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\r\n <input matInput placeholder=\"\" style=\"display: none;\">\r\n </mat-form-field>\r\n\r\n <div></div> \r\n <mat-card> \r\n <mat-form-field >\r\n <mat-label>Advocate Home Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateHomePhone\" \r\n [(ngModel)]=\"editVictim.advocateHomePhone\"\r\n phoneMask\r\n maxlength=\"14\" >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateHomePhone').errors \r\n && (victimForm.get('advocateHomePhone').dirty || victimForm.get('advocateHomePhone').touched)\">\r\n <mat-error><strong>Advocate home number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Cell Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateCellPhone\" \r\n [(ngModel)]=\"editVictim.advocateCellPhone\" \r\n phoneMask\r\n maxlength=\"14\">\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateCellPhone').errors \r\n && (victimForm.get('advocateCellPhone').dirty || victimForm.get('advocateCellPhone').touched)\">\r\n <mat-error><strong>Advocate cell number format is not correct.</strong></mat-error>\r\n </div>\r\n\r\n \r\n </mat-form-field> \r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateWorkPhone\" \r\n [(ngModel)]=\"editVictim.advocateWorkPhone\" \r\n phoneMask\r\n maxlength=\"14\"\r\n >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateWorkPhone').errors \r\n && (victimForm.get('advocateWorkPhone').dirty || victimForm.get('advocateWorkPhone').touched)\">\r\n <mat-error><strong>Advocate work number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n </mat-form-field>\r\n </mat-card>\r\n\r\n <div></div>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Email:</mat-label>\r\n <input matInput formControlName=\"advocateEmail\" [(ngModel)]=\"editVictim.advocateEmail\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateEmail').errors \r\n && (victimForm.get('advocateEmail').dirty || victimForm.get('advocateEmail').touched)\">\r\n <mat-error><strong>Advocate email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n\r\n \r\n <div >\r\n <app-smart-address \r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"advocateAddressId\"\r\n (addressIdChange)=\"onAdvocateAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #advocateAddressComponent >\r\n </app-smart-address>\r\n </div>\r\n </div>\r\n <br><br><br> \r\n </mat-tab>\r\n \r\n \r\n <mat-tab label=\"Emergency Contact\">\r\n <div class='container'>\r\n \r\n <mat-form-field>\r\n <mat-label>Emergency Contact Name:</mat-label>\r\n <input matInput formControlName=\"emergencyContact\" [(ngModel)]=\"editVictim.emergencyContact\" >\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Emergency Phone Number:</mat-label>\r\n <input matInput formControlName=\"emergencyContactPhone\" [(ngModel)]=\"editVictim.emergencyContactPhone\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('emergencyContactPhone').errors \r\n && (victimForm.get('emergencyContactPhone').dirty || victimForm.get('emergencyContactPhone').touched)\">\r\n <mat-error><strong>Emergency contact number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n </div>\r\n <br><br><br> \r\n </mat-tab> \r\n \r\n </mat-tab-group>\r\n <div class='outer'>\r\n <div>\r\n All buttons apply to all tabs. If save button is grey, please check each tab to make sure the required field is filled.<br><br>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors \r\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\r\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\r\n </div>\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors \r\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\r\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors \r\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\r\n <mat-error>Under supervision field is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors \r\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\r\n <mat-error>Relationship is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors \r\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\r\n <mat-error>Victim last name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors \r\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\r\n <mat-error>victim first name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \r\n && (victimForm.get('guardianFirstName').dirty || victimForm.get('guardianFirstName').touched)\">\r\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors\r\n && (victimForm.get('guardianLastName').dirty || victimForm.get('guardianLastName').touched)\" >\r\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors\r\n && (victimForm.get('advocateLastName').dirty || victimForm.get('advocateLastName').touched)\" >\r\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors\r\n && (victimForm.get('advocateFirstName').dirty || victimForm.get('advocateFirstName').touched)\">\r\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors \r\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\r\n <mat-error>Other weapon field is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors \r\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\r\n <mat-error>Other drug field is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n\r\n </div>\r\n \r\n <div class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"saveVictim()\" [disabled]=\"!victimForm.valid\" >Save </button> \r\n </div>\r\n \r\n <div *ngIf=\"showDelete\" class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"deleteVictim()\">Delete </button>\r\n </div>\r\n \r\n <div class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Clear </button>\r\n </div>\r\n \r\n <button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\r\n\r\n </div>\r\n\r\n </div>\r\n <br>\r\n <br>\r\n\r\n <div align=\"right\">\r\n <button mat-raised-button color=\"primary\" (click)=\"addContact()\" >Add victim contact</button>\r\n </div>\r\n \r\n <div>\r\n\r\n <mat-table #table [dataSource]=\"contactDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"contactDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"victimContactMethod\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Method</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimContactMethod}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"nextContactDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Next Contact Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.nextContactDate | date}} </mat-cell>\r\n </ng-container>\r\n \r\n \r\n <ng-container matColumnDef=\"staff\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact By</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.staff}} </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"comment\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"contactId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\r\n \r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n\r\n </div>\r\n \r\n </mat-card-content>\r\n</mat-card>\r\n",
|
1321
|
+
template: "<mat-card>\r\n <mat-card-content>\r\n\r\n <div [formGroup]=\"victimForm\">\r\n\r\n <mat-tab-group dynamicHeight mat-stretch-tabs>\r\n <mat-tab label=\"Victim Detail\" >\r\n <div class='container'>\r\n\r\n <mat-form-field>\r\n <mat-label>Is victim a minor?<font color=\"red\">* </font></mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"minorFlag\" (change)=\"radioMinorChange($event)\" [(ngModel)]=\"editVictim.minorFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors \r\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\r\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Does the Victim have a Victim Advocate or Social Worker with <br>whom CSOSA should maintain contact?<font color=\"red\">* </font></mat-label>\r\n <br>\r\n <br>\r\n <mat-radio-group class = \"tp-radio-group\" formControlName=\"victimAdvocateFlag\" (change)=\"radioAdvocateChange($event)\" [(ngModel)]=\"editVictim.victimAdvocateFlag\">\r\n <mat-radio-button color=\"primary\" *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\">{{item.name}} </mat-radio-button> \r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors \r\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\r\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Victim Currently Under Supervision:</mat-label>\r\n <mat-select formControlName=\"underSupervisionFlag\" name=\"supervision\" [(ngModel)]=\"editVictim.underSupervisionFlag\" >\r\n <mat-option *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\" >\r\n {{item.name}}</mat-option>\r\n </mat-select>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors \r\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\r\n <mat-error>under supervision field is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Relationship to Offender:</mat-label>\r\n <mat-select formControlName=\"victimOffenderRelationshipTypeId\" [(ngModel)]=\"editVictim.victimOffenderRelationshipTypeId\" >\r\n <mat-option *ngFor=\"let item of relationshipTypes\" [value]=\"item.relationshipTypeId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors \r\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\r\n <mat-error>relationship is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Victim Last Name:</mat-label>\r\n <input matInput formControlName=\"lastName\" [(ngModel)]=\"editVictim.lastName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors \r\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\r\n <mat-error>victim last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim First Name: </mat-label>\r\n <input matInput formControlName=\"firstName\" [(ngModel)]=\"editVictim.firstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors \r\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\r\n <mat-error>victim first name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Middle Name:</mat-label>\r\n <input matInput formControlName=\"middleName\" [(ngModel)]=\"editVictim.middleName\">\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim Prefix:</mat-label>\r\n <mat-select formControlName=\"prefixId\" [(ngModel)]=\"editVictim.prefixId\">\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Suffix:</mat-label>\r\n <mat-select formControlName=\"suffixId\" [(ngModel)]=\"editVictim.suffixId\">\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim Gender:</mat-label>\r\n <mat-select formControlName=\"genderCode\" [(ngModel)]=\"editVictim.genderCode\">\r\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Date of Birth:</mat-label>\r\n <input matInput \r\n [matDatepicker]=\"victimBirthRef\" \r\n formControlName=\"birthDate\"\r\n [(ngModel)]=\"editVictim.birthDate\"\r\n (click)=\"victimBirthRef.open()\"\r\n (dateChange)=\"handleDOBChange($event)\" \r\n >\r\n <mat-datepicker-toggle [for]=\"victimBirthRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #victimBirthRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Victim Home Phone:</mat-label>\r\n <input \r\n matInput \r\n formControlName=\"homePhone\" \r\n [(ngModel)]=\"editVictim.homePhone\" \r\n phoneMask\r\n maxlength=\"14\"/>\r\n\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('homePhone').errors\r\n && (victimForm.get('homePhone').dirty || victimForm.get('homePhone').touched)\">\r\n\r\n\r\n <mat-error><strong>Home phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Victim Cell Phone:</mat-label>\r\n <input matInput formControlName=\"cellPhone\" [(ngModel)]=\"editVictim.cellPhone\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('cellPhone').errors \r\n && (victimForm.get('cellPhone').dirty || victimForm.get('cellPhone').touched)\">\r\n <mat-error><strong>Cell phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n \r\n <mat-form-field >\r\n <mat-label>Victim Work Phone:</mat-label>\r\n <input matInput formControlName=\"workPhone\" [(ngModel)]=\"editVictim.workPhone\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('workPhone').errors \r\n && (victimForm.get('workPhone').dirty || victimForm.get('workPhone').touched)\">\r\n <mat-error><strong>Work phone number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Victim Email:</mat-label>\r\n <input matInput formControlName=\"email\" [(ngModel)]=\"editVictim.email\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('email').errors \r\n && (victimForm.get('email').dirty || victimForm.get('email').touched)\">\r\n <mat-error><strong>victim email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n \r\n <div></div>\r\n \r\n <!-- <app-smart-address \r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"addressId\"\r\n (addressIdChange)=\"onAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #addressComponent\r\n > -->\r\n\r\n\r\n <app-smart-address\r\n [modifiedBy]=\"staffId\"\r\n [id]=\"addressId\"\r\n [outline]=\"true\"\r\n [showPsa]=\"true\"\r\n [addressValidators]=\"addressValidators\"\r\n [readonly]=\"false\"\r\n (addressIdChange)=\"onAddressChange($event)\"\r\n #addressComponent\r\n >\r\n\r\n </app-smart-address>\r\n \r\n \r\n <!-- Docket: \r\n <div>\r\n <div *ngFor=\"let docket of docketlist; let i=index\">\r\n <mat-checkbox >{{docket.docketNumber}}</mat-checkbox>\r\n </div>\r\n </div> -->\r\n\r\n <mat-checkbox color=\"primary\" formControlName=\"allowCsosaContactFlag\" name=\"allowCsosaContactFlag\" [(ngModel)]=\"editVictim.allowCsosaContactFlag\">victim wants to be contacted by CSOSA</mat-checkbox>\r\n \r\n </div> \r\n\r\n <mat-card>\r\n <mat-form-field>\r\n <mat-label> Children in Common</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"commonChildrenFlag\" [(ngModel)]=\"editVictim.commonChildrenFlag\" (change)=\"radioCicChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n\r\n <div *ngIf=\"commonChildrenDivFlag\">\r\n \r\n <mat-form-field >\r\n <mat-label>\r\n Children number\r\n </mat-label>\r\n <input matInput formControlName=\"commonChildrenNumber\" [(ngModel)]=\"editVictim.commonChildrenNumber\" >\r\n </mat-form-field>\r\n \r\n </div>\r\n \r\n <mat-form-field>\r\n <mat-label>CPO: </mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"cpoExpirationFlag\" [(ngModel)]=\"editVictim.cpoExpirationFlag\" (change)=\"radioCpoChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"cpoExpirationDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Expiration Date: </mat-label>\r\n <input matInput \r\n [matDatepicker]=\"cpoDateRef\" \r\n formControlName=\"cpoExpirationDate\" \r\n (click)=\"cpoDateRef.open()\" \r\n [(ngModel)]=\"editVictim.cpoExpirationDate\" >\r\n <mat-datepicker-toggle [for]=\"cpoDateRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #cpoDateRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n </div>\r\n \r\n <br>\r\n <br>\r\n \r\n <mat-form-field>\r\n <mat-label>Victim has a Support System in Place? </mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"supportInPlaceFlag\" [(ngModel)]=\"editVictim.supportInPlaceFlag\" (change)=\"radioSupportChange($event)\">\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"supportInPlaceDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Support type? </mat-label>\r\n <mat-select #supportSel formControlName=\"victimSupports\" [(ngModel)]=\"editVictim.victimSupports\" multiple>\r\n <div (mouseleave)=\"supportSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of victimSupportTypes\" [value]=\"item.victimSupportTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n\r\n </div>\r\n \r\n <br>\r\n <br>\r\n\r\n <mat-form-field>\r\n <mat-label>Weapons Involved?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"weaponInvolvedFlag\" (change)=\"radioWeaponChange($event)\" [(ngModel)]=\"editVictim.weaponInvolvedFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n \r\n <div *ngIf=\"weaponInvolvedDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Weapon Type</mat-label>\r\n <mat-select #weaponSel formControlName=\"victimWeaponUses\" multiple [(ngModel)]=\"editVictim.victimWeaponUses\" (selectionChange)=\"checkOtherWeapon($event.value)\" >\r\n <div (mouseleave)=\"weaponSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of weaponTypes\" [value]=\"item.weaponTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"otherWeaponFlag\"> \r\n <mat-form-field>\r\n <mat-label>Other Weapon:* </mat-label>\r\n <input matInput formControlName=\"otherWeapon\" >\r\n </mat-form-field>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors \r\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\r\n <mat-error><strong>Other weapon is required.</strong></mat-error>\r\n </div>\r\n </div>\r\n\r\n \r\n <br>\r\n <br>\r\n \r\n <mat-form-field>\r\n <mat-label>Was Offender under the influence of alcohol at the time of the offense?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"alcoholUseFlag\" [(ngModel)]=\"editVictim.alcoholUseFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <br>\r\n <br>\r\n\r\n <mat-form-field>\r\n <mat-label>Was Offender under the influence of drugs at the time of the offense?</mat-label>\r\n <br>\r\n <mat-radio-group formControlName=\"drugUseFlag\" (change)=\"radioDrugChange($event)\" [(ngModel)]=\"editVictim.drugUseFlag\" >\r\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button> \r\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\r\n </mat-radio-group>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n <div *ngIf=\"drugUseDivFlag\"> \r\n <mat-form-field>\r\n <mat-label>Drug:</mat-label>\r\n <mat-select #drugSel formControlName=\"victimDrugUses\" multiple (selectionChange)=\"checkOtherDrug($event.value)\" >\r\n <div (mouseleave)=\"drugSel.close()\">\r\n <mat-option color=\"primary\" *ngFor=\"let item of drugs\" [value]=\"item.drugTypeId\">\r\n {{item.name}}\r\n </mat-option>\r\n \r\n </div>\r\n </mat-select>\r\n <input matInput placeholder=\"\" style=\"display: none\">\r\n </mat-form-field>\r\n \r\n </div>\r\n\r\n <div *ngIf=\"otherDrugFlag\"> \r\n <mat-form-field>\r\n <mat-label>Other Drug:* </mat-label>\r\n <input matInput formControlName=\"otherDrug\" >\r\n </mat-form-field>\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors \r\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\r\n <mat-error><strong>Other drug is required.</strong></mat-error>\r\n </div>\r\n </div>\r\n <br>\r\n <br>\r\n\r\n <div>\r\n <div>\r\n <mat-label>\r\n Access Risk: 1 thru 10 (10 greatest risk): <b> {{editVictim.accessRisk}}</b>\r\n </mat-label>\r\n </div>\r\n <div>\r\n \r\n <mat-slider\r\n formControlName=\"accessRisk\"\r\n thumbLabel=\"true\"\r\n [displayWith]=\"formatLabel\"\r\n min=\"1\"\r\n max=\"10\"\r\n [(ngModel)]=\"editVictim.accessRisk\" \r\n ></mat-slider>\r\n \r\n </div>\r\n\r\n </div>\r\n\r\n </mat-card> \r\n\r\n \r\n <br><br><br> \r\n </mat-tab>\r\n \r\n <mat-tab *ngIf=\"guardianTabFlag\" label=\"Legal Guardian\">\r\n <div class='container'>\r\n <mat-form-field>\r\n <mat-label>Guardian Last Name:</mat-label>\r\n <input matInput formControlName=\"guardianLastName\" [(ngModel)]=\"editVictim.guardianLastName\" > \r\n <!-- <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors \">\r\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\r\n </div> -->\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian First Name:</mat-label>\r\n <input matInput formControlName=\"guardianFirstName\" [(ngModel)]=\"editVictim.guardianFirstName\" >\r\n <!-- <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \">\r\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\r\n </div> -->\r\n \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Guardian Prefix:</mat-label>\r\n <mat-select formControlName=\"guardianPrefixId\" [(ngModel)]=\"editVictim.guardianPrefixId\" >\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian Suffix:</mat-label>\r\n <mat-select formControlName=\"guardianSuffixId\" [(ngModel)]=\"editVictim.guardianSuffixId\" >\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n \r\n <!-- <mat-form-field>\r\n <mat-select placeholder=\"Choose\" formControlName=\"guardianGender\" [(ngModel)]=\"editVictim.guardianGender\">\r\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field> -->\r\n \r\n \r\n <mat-form-field>\r\n <mat-label>Date of Birth:</mat-label>\r\n <input matInput \r\n [matDatepicker]=\"guardianDateRef\" \r\n formControlName=\"guardianBirthDate\"\r\n [(ngModel)]=\"editVictim.guardianBirthDate\" \r\n (click)=\"guardianDateRef.open()\" \r\n >\r\n <mat-datepicker-toggle [for]=\"guardianDateRef\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #guardianDateRef></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n <mat-form-field >\r\n <mat-checkbox \r\n color = \"primary\" \r\n formControlName=\"guardianNoPhoneFlag\" \r\n \r\n >\r\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\r\n <input matInput placeholder=\"\" style=\"display: none;\">\r\n </mat-form-field>\r\n\r\n\r\n <div></div>\r\n <mat-card>\r\n <mat-form-field >\r\n <mat-label>Guardian Home Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianHomePhone\" \r\n [(ngModel)]=\"editVictim.guardianHomePhone\" \r\n phoneMask\r\n maxlength=\"14\" >\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianHomePhone').errors \r\n && (victimForm.get('guardianHomePhone').dirty || victimForm.get('guardianHomePhone').touched)\">\r\n <mat-error><strong>Guardian home phone number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n\r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Guardian Cell Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianCellPhone\" \r\n [(ngModel)]=\"editVictim.guardianCellPhone\" \r\n phoneMask\r\n maxlength=\"14\" \r\n >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianCellPhone').errors \r\n && (victimForm.get('guardianCellPhone').dirty || victimForm.get('guardianCellPhone').touched)\">\r\n <mat-error><strong>Guardian Cell phone number format is not correct.</strong></mat-error>\r\n </div>\r\n\r\n \r\n\r\n \r\n </mat-form-field>\r\n\r\n <mat-form-field >\r\n <mat-label>Guardian Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"guardianWorkPhone\" \r\n [(ngModel)]=\"editVictim.guardianWorkPhone\" \r\n phoneMask\r\n maxlength=\"14\" >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianWorkPhone').errors \r\n && (victimForm.get('guardianWorkPhone').dirty || victimForm.get('guardianWorkPhone').touched)\">\r\n <mat-error><strong>Guardian work phone number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n \r\n </mat-form-field>\r\n </mat-card>\r\n \r\n <div></div>\r\n\r\n <mat-form-field>\r\n <mat-label>Guardian Email:</mat-label>\r\n <input matInput formControlName=\"guardianEmail\" [(ngModel)]=\"editVictim.guardianEmail\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianEmail').errors \r\n && (victimForm.get('guardianEmail').dirty || victimForm.get('guardianEmail').touched)\">\r\n <mat-error><strong>Guardian email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n \r\n <div>\r\n <app-smart-address \r\n\r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"guardianAddressId\"\r\n (addressIdChange)=\"onGuardianAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #guardianAddressComponent\r\n >\r\n </app-smart-address>\r\n </div>\r\n </div>\r\n \r\n <br><br><br> \r\n </mat-tab>\r\n \r\n <!--advocate-->\r\n \r\n <mat-tab *ngIf=\"advocateTabFlag\" label=\"Advocate\" > \r\n <div class='container'>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Last Name:</mat-label>\r\n <input matInput formControlName=\"advocateLastName\" [(ngModel)]=\"editVictim.advocateLastName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors \">\r\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate First Name:</mat-label>\r\n <input matInput formControlName=\"advocateFirstName\" [(ngModel)]=\"editVictim.advocateFirstName\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors \">\r\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Prefix:</mat-label>\r\n <mat-select formControlName=\"advocatePrefixId\" [(ngModel)]=\"editVictim.advocatePrefixId\" >\r\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Suffix:</mat-label>\r\n <mat-select formControlName=\"advocateSuffixId\" [(ngModel)]=\"editVictim.advocateSuffixId\" >\r\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n \r\n <mat-form-field>\r\n <mat-checkbox \r\n color = \"primary\" \r\n formControlName=\"advocateNoPhoneFlag\" \r\n \r\n [(ngModel)]=\"editVictim.advocateNoPhoneFlag\" >\r\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\r\n <input matInput placeholder=\"\" style=\"display: none;\">\r\n </mat-form-field>\r\n\r\n <div></div> \r\n <mat-card> \r\n <mat-form-field >\r\n <mat-label>Advocate Home Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateHomePhone\" \r\n [(ngModel)]=\"editVictim.advocateHomePhone\"\r\n phoneMask\r\n maxlength=\"14\" >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateHomePhone').errors \r\n && (victimForm.get('advocateHomePhone').dirty || victimForm.get('advocateHomePhone').touched)\">\r\n <mat-error><strong>Advocate home number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n </mat-form-field>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Cell Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateCellPhone\" \r\n [(ngModel)]=\"editVictim.advocateCellPhone\" \r\n phoneMask\r\n maxlength=\"14\">\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateCellPhone').errors \r\n && (victimForm.get('advocateCellPhone').dirty || victimForm.get('advocateCellPhone').touched)\">\r\n <mat-error><strong>Advocate cell number format is not correct.</strong></mat-error>\r\n </div>\r\n\r\n \r\n </mat-form-field> \r\n\r\n <mat-form-field>\r\n <mat-label>Advocate Work Phone:</mat-label>\r\n <input matInput \r\n formControlName=\"advocateWorkPhone\" \r\n [(ngModel)]=\"editVictim.advocateWorkPhone\" \r\n phoneMask\r\n maxlength=\"14\"\r\n >\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateWorkPhone').errors \r\n && (victimForm.get('advocateWorkPhone').dirty || victimForm.get('advocateWorkPhone').touched)\">\r\n <mat-error><strong>Advocate work number format is not correct.</strong></mat-error>\r\n </div>\r\n \r\n </mat-form-field>\r\n </mat-card>\r\n\r\n <div></div>\r\n \r\n <mat-form-field>\r\n <mat-label>Advocate Email:</mat-label>\r\n <input matInput formControlName=\"advocateEmail\" [(ngModel)]=\"editVictim.advocateEmail\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateEmail').errors \r\n && (victimForm.get('advocateEmail').dirty || victimForm.get('advocateEmail').touched)\">\r\n <mat-error><strong>Advocate email format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n <div></div>\r\n\r\n \r\n <div >\r\n <app-smart-address \r\n [showPsa]=\"true\" \r\n [modifiedBy]=\"staffId\" \r\n [id]=\"advocateAddressId\"\r\n (addressIdChange)=\"onAdvocateAddressChange($event)\"\r\n [outline]=\"true\" \r\n readonly=\"false\"\r\n [rowHeight]=\"80\" \r\n (isValid)=\"false\" \r\n [addressValidators]=\"addressValidators\"\r\n #advocateAddressComponent >\r\n </app-smart-address>\r\n </div>\r\n </div>\r\n <br><br><br> \r\n </mat-tab>\r\n \r\n \r\n <mat-tab label=\"Emergency Contact\">\r\n <div class='container'>\r\n \r\n <mat-form-field>\r\n <mat-label>Emergency Contact Name:</mat-label>\r\n <input matInput formControlName=\"emergencyContact\" [(ngModel)]=\"editVictim.emergencyContact\" >\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <mat-label>Emergency Phone Number:</mat-label>\r\n <input matInput formControlName=\"emergencyContactPhone\" [(ngModel)]=\"editVictim.emergencyContactPhone\" >\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('emergencyContactPhone').errors \r\n && (victimForm.get('emergencyContactPhone').dirty || victimForm.get('emergencyContactPhone').touched)\">\r\n <mat-error><strong>Emergency contact number format is not correct.</strong></mat-error>\r\n </div>\r\n </mat-form-field>\r\n\r\n </div>\r\n <br><br><br> \r\n </mat-tab> \r\n \r\n </mat-tab-group>\r\n <div class='outer'>\r\n <div>\r\n All buttons apply to all tabs. If save button is grey, please check each tab to make sure the required field is filled.<br><br>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors \r\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\r\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\r\n </div>\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors \r\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\r\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors \r\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\r\n <mat-error>Under supervision field is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors \r\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\r\n <mat-error>Relationship is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors \r\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\r\n <mat-error>Victim last name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors \r\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\r\n <mat-error>victim first name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \r\n && (victimForm.get('guardianFirstName').dirty || victimForm.get('guardianFirstName').touched)\">\r\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors\r\n && (victimForm.get('guardianLastName').dirty || victimForm.get('guardianLastName').touched)\" >\r\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors\r\n && (victimForm.get('advocateLastName').dirty || victimForm.get('advocateLastName').touched)\" >\r\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors\r\n && (victimForm.get('advocateFirstName').dirty || victimForm.get('advocateFirstName').touched)\">\r\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n \r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors \r\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\r\n <mat-error>Other weapon field is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors \r\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\r\n <mat-error>Other drug field is <strong>required</strong></mat-error>\r\n </div>\r\n\r\n\r\n </div>\r\n \r\n <div class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"saveVictim()\" [disabled]=\"!victimForm.valid\" >Save </button> \r\n </div>\r\n \r\n <div *ngIf=\"showDelete\" class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"deleteVictim()\">Delete </button>\r\n </div>\r\n \r\n <div class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Clear </button>\r\n </div>\r\n \r\n <button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\r\n\r\n </div>\r\n\r\n </div>\r\n <br>\r\n <br>\r\n\r\n <div align=\"right\">\r\n <button mat-raised-button color=\"primary\" (click)=\"addContact()\" >Add victim contact</button>\r\n </div>\r\n \r\n <div>\r\n\r\n <mat-table #table [dataSource]=\"contactDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"contactDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"victimContactMethod\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Method</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimContactMethod}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"nextContactDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Next Contact Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.nextContactDate | date}} </mat-cell>\r\n </ng-container>\r\n \r\n \r\n <ng-container matColumnDef=\"staff\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact By</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.staff}} </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"comment\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"contactId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\r\n \r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n\r\n </div>\r\n \r\n </mat-card-content>\r\n</mat-card>\r\n",
|
1322
1322
|
providers: [CommonDialogService],
|
1323
1323
|
styles: ["mat-form-field{width:100%}.container{margin:16px;display:-ms-grid;display:grid;-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}@media only screen and (max-width:1120px){.container{display:-ms-grid;display:grid;-ms-grid-columns:1fr 1fr;grid-template-columns:1fr 1fr;grid-row-gap:15px}}@media only screen and (max-width:675px){.container{display:flex;flex-direction:column}}#outer{width:100%;text-align:center}.inner{display:inline-block}.tp-radio-group{display:flex;justify-content:space-between}"]
|
1324
1324
|
}] }
|
@@ -1499,4 +1499,4 @@ if (false) {
|
|
1499
1499
|
*/
|
1500
1500
|
SmartVictimDetailComponent.prototype.victimService;
|
1501
1501
|
}
|
1502
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY3NtYXJ0L25nYy1zbWFydC12aWN0aW0vIiwic291cmNlcyI6WyJsaWIvc21hcnQtdmljdGltLWRldGFpbC9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQWEsV0FBVyxFQUFDLFVBQVUsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxTQUFTLEVBQUMsV0FBVyxFQUFpQixRQUFRLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBYyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUMsTUFBSSx1QkFBdUIsQ0FBQztBQUczRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUc1RCwrQkFFQzs7OztBQUNELDhCQUVDOzs7Ozs7O0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFNBQW9CLEVBQ3ZELFNBQXNCLEVBQ3RCLGNBQXVCO0lBQ3pCLE9BQU87Ozs7SUFBQyxVQUFBLFdBQVc7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDWDs7WUFDRyxLQUFLLEdBQUcsSUFBSTtRQUNoQixJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ2pCLEtBQUssR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDOUI7UUFDRCxJQUFJLGNBQWMsSUFBSSxLQUFLLEVBQUU7O2dCQUN2QixXQUFXLEdBQUcsRUFBRTtZQUN0QixXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLEtBQUssR0FBRyxXQUFXLENBQUE7U0FDbEI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNiLENBQUMsRUFBQyxDQUFBO0FBQ0YsQ0FBQzs7Ozs7OztBQUdELE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxTQUFtQixFQUM1RCxTQUFzQixFQUN0QixjQUF1QjtJQUN6QixPQUFPOzs7O0lBQUMsVUFBQSxXQUFXO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1NBQ1g7O1lBQ0csS0FBSyxHQUFHLElBQUk7UUFDaEIsSUFBSSxTQUFTLEVBQUUsSUFBRSxJQUFJLEVBQUU7WUFDdkIsS0FBSyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM5QjtRQUNELElBQUksY0FBYyxJQUFJLEtBQUssRUFBRTs7Z0JBQ3ZCLFdBQVcsR0FBRyxFQUFFO1lBQ3RCLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDcEMsS0FBSyxHQUFHLFdBQVcsQ0FBQTtTQUNsQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2IsQ0FBQyxFQUFDLENBQUE7QUFDRixDQUFDO0FBRUQ7SUE4RUMsb0NBQ1csUUFBa0IsRUFDbEIsV0FBd0IsRUFDeEIsTUFBaUIsRUFDakIsS0FBcUIsRUFDckIsTUFBYyxFQUNmLFFBQXFCLEVBQ3BCLG1CQUF3QyxFQUN4QyxhQUFvQztRQVBwQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNmLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDcEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxrQkFBYSxHQUFiLGFBQWEsQ0FBdUI7UUEvRXJDLGlCQUFZLEdBQUcsbUJBQVEsRUFBRSxFQUFBLENBQUM7UUFLekIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDNUIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFvQnhDLFdBQU0sR0FBVSxJQUFJLENBQUM7UUFFckIsbUJBQWMsR0FBb0IsbUJBQWdCLEVBQUUsRUFBQSxDQUFDO1FBQ3JELG1CQUFjLEdBQW1CLG1CQUFnQixFQUFFLEVBQUEsQ0FBQztRQU1wRCxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQywwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDdkMseUJBQW9CLEdBQWEsS0FBSyxDQUFDO1FBQ3ZDLDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQUN2QywwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDdkMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUM5QixzQkFBaUIsR0FBVyxDQUFDLENBQUM7UUFDOUIsYUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLGlCQUFZLEdBQUcsMENBQTBDLENBQUM7UUFDMUQsZ0JBQVcsR0FBRyxTQUFTLENBQUM7UUFDeEIsZUFBVSxHQUFXLG1CQUFRLEVBQUUsRUFBQSxDQUFDO1FBRWhDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBRS9CLHNCQUFpQixHQUFFLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUU1QywyQkFBc0IsR0FBYSxLQUFLLENBQUM7UUFDekMsMkJBQXNCLEdBQWEsS0FBSyxDQUFDO1FBQ3pDLHdCQUFtQixHQUFhLEtBQUssQ0FBQztRQUN0QywyQkFBc0IsR0FBWSxJQUFJLENBQUM7UUFDdkMsMkJBQXNCLEdBQWEsSUFBSSxDQUFDO1FBRXhDLHNCQUFpQixHQUFzQjtZQUNyQyxNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxFQUFFO1lBQ1gsSUFBSSxFQUFFLEVBQUU7WUFDUixTQUFTLEVBQUUsRUFBRTtZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBV0csSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRU8sNkNBQVE7Ozs7SUFBaEI7UUFBQSxpQkE2RUM7UUEzRUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN2QyxvQkFBb0IsRUFBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLGdDQUFnQyxFQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDaEcsUUFBUSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDekUsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUUsVUFBVSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBRztZQUNqQyxRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQy9CLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7WUFDL0IsVUFBVSxFQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBRztZQUNoQyxTQUFTLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQ2hDLFNBQVMsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFFLENBQUMsQ0FBQztZQUMzRixTQUFTLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBRSxDQUFDLENBQUM7WUFDM0YsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUUsQ0FBQyxDQUFDO1lBQzNGLEtBQUssRUFBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFFLENBQUMsQ0FBQztZQUN2RixTQUFTLEVBQUMsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN6RSxrQkFBa0IsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ25GLGdCQUFnQixFQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRyxvQkFBb0I7OztZQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLEVBQXRDLENBQXNDLEdBQUUsVUFBVSxDQUFDLFFBQVEsRUFBQyxpQkFBaUIsQ0FBQyxDQUFFO1lBQ2pKLGlCQUFpQixFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxvQkFBb0I7OztZQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLEVBQXRDLENBQXNDLEdBQUUsVUFBVSxDQUFDLFFBQVEsRUFBQyxpQkFBaUIsQ0FBQyxDQUFFO1lBQ2xKLGdCQUFnQixFQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBRztZQUN0QyxnQkFBZ0IsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7O1lBRXZDLGlCQUFpQixFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBRztZQUN4QyxtQkFBbUIsRUFBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFFekMsaUJBQWlCLEVBQUMsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBRSxDQUFFLENBQUM7WUFDbkcsaUJBQWlCLEVBQUMsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBRSxDQUFFLENBQUM7WUFDbkcsaUJBQWlCLEVBQUMsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBRSxDQUFFLENBQUM7WUFHbkcsYUFBYSxFQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUUsQ0FBQyxDQUFDO1lBQy9GLG1CQUFtQixFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztZQUcxQyxpQkFBaUIsRUFBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFFLENBQUUsQ0FBQztZQUNwRyxpQkFBaUIsRUFBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFFLENBQUUsQ0FBQztZQUNwRyxpQkFBaUIsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFFLENBQUUsQ0FBQztZQUdyRyxnQkFBZ0IsRUFBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7WUFDdEMsZ0JBQWdCLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQ3ZDLGlCQUFpQixFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSwwQkFBMEI7OztZQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssRUFBL0MsQ0FBK0MsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDbEssZ0JBQWdCLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLDBCQUEwQjs7O1lBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxFQUEvQyxDQUErQyxHQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMvSixhQUFhLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBRSxDQUFDLENBQUM7WUFDaEcsZ0JBQWdCLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQ3ZDLHFCQUFxQixFQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUUsQ0FBQyxDQUFDO1lBQ3RHLGlCQUFpQixFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBRztZQUN4QyxZQUFZLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQ25DLGFBQWEsRUFBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7WUFDbkMsZ0JBQWdCLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQ3ZDLGVBQWUsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7WUFDdEMsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBRztZQUMzQixNQUFNLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQzdCLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7WUFDOUIsa0JBQWtCLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQ3pDLG9CQUFvQixFQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBRztZQUMxQyxpQkFBaUIsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7WUFDeEMsaUJBQWlCLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQ3hDLFVBQVUsRUFBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7WUFDaEMsV0FBVyxFQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBRztZQUNqQyxrQkFBa0IsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7WUFDekMsa0JBQWtCLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQ3pDLFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7WUFDbEMsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBRztZQUNoQyxjQUFjLEVBQUMsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQ3BDLGNBQWMsRUFBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7WUFDcEMsZ0JBQWdCLEVBQUMsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1lBQ3RDLGNBQWMsRUFBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUc7WUFDcEMscUJBQXFCLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFHO1NBR2pELENBQUMsQ0FBQztRQUVDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUVqQyxDQUFDOzs7OztJQUVPLCtDQUFVOzs7O0lBQWxCO1FBQUEsaUJBMkdBO1FBMUdDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUU7WUFFdkIsT0FBTztTQUNSO1FBQUEsQ0FBQztRQUNKLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTNCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUzs7OztnQkFBQyxVQUFBLE1BQU07b0JBQzNDLEtBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixDQUFDLEVBQUMsQ0FBQzthQUNKO1lBRUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztpQkFDMUMsU0FBUzs7OztZQUFDLFVBQUMsTUFBYztnQkFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEIsS0FBSSxDQUFDLFVBQVUsR0FBRyxtQkFBUSxNQUFNLEVBQUEsQ0FBQzs7b0JBRTdCLFlBQVksR0FBRSxFQUFFO2dCQUNwQixLQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxPQUFPOzs7O2dCQUFFLFVBQUEsQ0FBQyxJQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUcsQ0FBQTs7b0JBQ3BGLHFCQUFxQixHQUFHLEtBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO2dCQUNuRSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7O29CQUd6QyxjQUFjLEdBQUUsRUFBRTs7b0JBQ2xCLFdBQVcsR0FBRyxFQUFFO2dCQUNwQixLQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU87Ozs7Z0JBQUUsVUFBQSxDQUFDO29CQUN6QyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLENBQUMsWUFBWSxJQUFJLE9BQU8sRUFBQzt3QkFDNUIsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7d0JBQzVCLEtBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO3FCQUM3QjtnQkFFSCxDQUFDLEVBQUcsQ0FBQTs7b0JBR0UsdUJBQXVCLEdBQUcsS0FBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7Z0JBQ3ZFLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQzs7b0JBRTNDLGtCQUFrQixHQUFHLEtBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztnQkFDN0Qsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzs7b0JBS3JDLFdBQVcsR0FBRSxFQUFFOztvQkFDZixTQUFTLEdBQUcsRUFBRTtnQkFFbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2dCQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzVDLEtBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU87Ozs7Z0JBQUUsVUFBQSxDQUFDO29CQUV2QyxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFDO3dCQUN4QixTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQzt3QkFDeEIsS0FBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQzFCLENBQUMsQ0FBQyxVQUFVLEdBQUUsT0FBTyxDQUFDO3FCQUV2QjtvQkFDRCxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFFakMsQ0FBQyxFQUFHLENBQUE7Z0JBRUosT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO2dCQUN6RCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDOztvQkFJbkIscUJBQXFCLEdBQUcsS0FBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ25FLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7b0JBRXRDLGdCQUFnQixHQUFHLEtBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztnQkFDekQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUlyQyxTQUFTO2dCQUNULEtBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTOzs7O2dCQUNyRCxVQUFBLFdBQVc7b0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDekIsS0FBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7b0JBQy9CLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsS0FBSSxDQUFDLFdBQVcsQ0FBQztnQkFDakQsQ0FBQyxFQUNGLENBQUM7Z0JBRUYsZ0JBQWdCO2dCQUVoQixJQUFLLEtBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEtBQUssS0FBSyxFQUFFO29CQUNsRCxLQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFDLG1CQUFtQixFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7aUJBQzFEO2dCQUNELElBQUssS0FBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLEVBQUU7b0JBQ2xELEtBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztpQkFDMUQ7WUFFSCxDQUFDOzs7O1lBQUUsVUFBQSxLQUFLO2dCQUNOLEtBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7WUFDNUYsQ0FBQyxFQUFDLENBQUM7WUFDTCxPQUFPO1NBQ1I7YUFBTTtZQUNILEtBQUs7U0FFUDtJQUNGLENBQUM7Ozs7SUFFRCxnREFBVzs7O0lBQVg7SUFFQSxDQUFDOzs7OztJQUVELG9EQUFlOzs7O0lBQWYsVUFBZ0IsU0FBUztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFBO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7Ozs7O0lBQ0QsNERBQXVCOzs7O0lBQXZCLFVBQXdCLG1CQUFtQjtRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFDLGlCQUFpQixFQUFFLG1CQUFtQixFQUFDLENBQUMsQ0FBQTtRQUNwRSxJQUFJLENBQUMsaUJBQWlCLEdBQUksbUJBQW1CLENBQUM7SUFDaEQsQ0FBQzs7Ozs7SUFDRCw0REFBdUI7Ozs7SUFBdkIsVUFBd0IsbUJBQW1CO1FBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUMsQ0FBQyxDQUFBO1FBQ3BFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQztJQUMvQyxDQUFDOzs7O0lBQ0QsMkNBQU07OztJQUFOO1FBQ0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixDQUFDOzs7O0lBS0MsNkNBQVE7OztJQUFSO1FBQUEsaUJBNklDO1FBM0lDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7OztZQU1yQixzQkFBc0IsR0FBRyxFQUFDLEdBQUc7OztZQUFDO2dCQUFtQixJQUFHLElBQUksQ0FBQyxTQUFTLEVBQUM7b0JBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO2lCQUFDO2dCQUNqRyxJQUFHLElBQUksQ0FBQyxTQUFTLElBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUN4RTs7d0JBQU8saUJBQWlCLEdBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO29CQUFDLENBQUMsbUJBQUEsaUJBQWlCLEVBQU8sQ0FBQyxDQUFDLEtBQUssR0FBQyxJQUFJLENBQUM7b0JBQzlELE9BQU0sQ0FBQyxVQUFVLElBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUFDO2dCQUMvRSxPQUFPLEtBQUssQ0FBQztZQUFBLENBQUMsQ0FBQSxFQUFDLEdBQUc7Ozs7WUFBQyxVQUFTLEtBQWEsSUFBRSxJQUFJLENBQUMsU0FBUyxHQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQUU7UUFDMUYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxzQkFBc0IsQ0FBRSxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsc0JBQXNCLENBQUUsQ0FBQztRQUM5RSxNQUFNLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLHNCQUFzQixDQUFFLENBQUM7UUFDdEYsb0JBQW9CO1FBSW5CLElBQUksSUFBSSxDQUFDLFlBQVksSUFBRSxJQUFJLEVBQUU7WUFDM0IsY0FBYztZQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUUsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7WUFFM0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUduRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLElBQUUsSUFBSSxFQUFDO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzthQUNoQztZQUVGLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLEVBQUM7O29CQUN6QixrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7Z0JBQzdELGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7YUFFdkQ7WUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFDOztvQkFDdkIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO2dCQUN6RCxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBRXJEO1lBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUM7WUFDaEUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUM7WUFDbEUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUM7WUFDbEUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUM7WUFDbEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUNwRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsR0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO1lBQzlELElBQUksQ0FBQyxpQkFBaUIsR0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO1lBRTlELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUVuQjthQUFNO1lBQ0wsZ0JBQWdCO1lBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUMsbUJBQW1CLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFDLG1CQUFtQixFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7U0FFekQ7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLDBCQUEwQixFQUFFLENBQUMsU0FBUzs7OztRQUN2RCxVQUFDLEtBQVU7WUFDVCxLQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUMxQixDQUFDLEVBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUzs7OztRQUN2QyxVQUFDLEtBQVU7WUFDVCxLQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLEVBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUzs7OztRQUN4QyxVQUFDLEtBQVU7WUFDVCxLQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDLEVBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUzs7OztRQUN4QyxVQUFDLEtBQVU7WUFDVCxLQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDLEVBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTOzs7O1FBQ2pELFVBQUMsS0FBVTtZQUNULEtBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsTUFBTTs7OztZQUFFLFVBQUMsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLENBQUUsRUFBekUsQ0FBeUUsRUFBQyxDQUFDO1FBQzNILENBQUMsRUFDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxTQUFTOzs7O1FBQzVDLFVBQUMsS0FBVTtZQUNULEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsQ0FBQyxFQUNGLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVM7Ozs7UUFDM0MsVUFBQyxLQUFVO1lBQ1QsS0FBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQyxFQUNGLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVM7Ozs7UUFDMUMsVUFBQyxLQUFVO1lBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkIsS0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsRUFDRixDQUFDO1FBQ0YsK0RBQStEO1FBQy9ELHNCQUFzQjtRQUN0QiwrQkFBK0I7UUFDL0IsTUFBTTtRQUVOLEtBQUs7UUFFTCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxZQUFZO2FBQzVDLFNBQVM7Ozs7UUFBQyxVQUFBLEtBQUs7WUFDWixLQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbEUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2pFLEtBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNsRSxLQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbEUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRXRFLENBQUMsRUFBQyxDQUFDO1FBR0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZO2FBQ3JELFNBQVM7Ozs7UUFBQyxVQUFBLEtBQUs7WUFDWixLQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbEUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2pFLEtBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNsRSxLQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbEUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRXRFLENBQUMsRUFBQyxDQUFDO0lBRUwsQ0FBQzs7OztJQUVELHlDQUFJOzs7SUFBSjtRQUVFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV0QyxDQUFDOzs7O0lBRUQsaURBQVk7OztJQUFaO1FBQUEsaUJBZ0JDO1FBZkMsSUFBSSxDQUFDLG1CQUFtQjthQUN2QixPQUFPLENBQUMsRUFBRSxFQUFFLG9DQUFvQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7YUFDOUQsU0FBUzs7OztRQUFDLFVBQUEsR0FBRztZQUFLLEtBQUksQ0FBQyxNQUFNLEdBQUksR0FBRyxDQUFDO1lBQ2xDLElBQUksS0FBSSxDQUFDLE1BQU0sRUFBRTtnQkFDYixLQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztxQkFDMUQsU0FBUzs7OztnQkFBQyxVQUFBLE1BQU07b0JBQ2hCLEtBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsRUFBRTt3QkFDN0MsUUFBUSxFQUFFLElBQUk7cUJBQUcsQ0FBQyxDQUFDO2dCQUFBLENBQUMsRUFFdEIsQ0FBQztnQkFDSCxvQ0FBb0M7Z0JBQ3BDLEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUN2QztRQUNKLENBQUMsRUFBQyxDQUFDO0lBRU4sQ0FBQzs7Ozs7SUFFRCxxREFBZ0I7Ozs7SUFBaEIsVUFBaUIsTUFBc0I7O1lBQy9CLHVCQUF1QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDOztZQUNqRSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztRQUd6RSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0Qsd0JBQXdCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1RCxvREFBb0Q7U0FHckQ7YUFDRztZQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzdCLHVCQUF1QixDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFDLHdCQUF3QixDQUFDLGVBQWUsRUFBRSxDQUFDO1NBRzVDO1FBRUgsdUJBQXVCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMvQyx3QkFBd0IsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBRXBELENBQUM7Ozs7O0lBRUQsd0RBQW1COzs7O0lBQW5CLFVBQW9CLE1BQXNCOztZQUVsQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQzs7WUFDakUsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7UUFDekUsNkVBQTZFO1FBSTdFLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsdUJBQXVCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRCx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBRzdEO2FBQ0c7WUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUU3Qix1QkFBdUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQyx3QkFBd0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUU1QztRQUVELHVCQUF1QixDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDakQsd0JBQXdCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUVwRCxDQUFDOzs7OztJQUVELG1EQUFjOzs7O0lBQWQsVUFBZSxNQUFzQjtRQUNuQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDbEMsZ0JBQWdCO1lBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUN0QzthQUNHO1lBQ0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztTQUNwQztJQUNILENBQUM7Ozs7O0lBRUQsa0RBQWE7Ozs7SUFBYixVQUFjLElBQUk7UUFDaEIsSUFBRyxJQUFJLElBQUksZ0JBQWdCLEVBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0U7YUFDSSxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUM7WUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FFNUU7SUFDRixDQUFDOzs7OztJQUNELHVEQUFrQjs7OztJQUFsQixVQUFtQixNQUFzQjtRQUN2QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7U0FDbkM7YUFDRztZQUNGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7U0FDcEM7SUFDSCxDQUFDOzs7OztJQUNELHNEQUFpQjs7OztJQUFqQixVQUFrQixNQUFzQjtRQUN0QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7U0FDbkM7YUFDRztZQUNGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7U0FDcEM7SUFDSCxDQUFDOzs7OztJQUNELG9EQUFlOzs7O0lBQWYsVUFBZ0IsTUFBc0I7UUFDcEMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM1QjthQUNHO1lBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7U0FDN0I7SUFDSCxDQUFDOzs7OztJQUVELG1EQUFjOzs7O0lBQWQsVUFBZSxNQUFzQjtRQUNuQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQjthQUNHO1lBQ0YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztTQUNuQztJQUNILENBQUM7Ozs7O0lBRUQsb0RBQWU7Ozs7SUFBZixVQUFnQixNQUFNOztZQUNqQixRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFJLE1BQU0sQ0FBQyxLQUFLOztZQUNyQyxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFDO1lBRWhELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHlJQUF5SSxFQUFFLEVBQUUsRUFBRTtnQkFDbEssUUFBUSxFQUFFLElBQUk7YUFBRSxDQUFDLENBQUM7O2dCQUNaLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDckQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Z0JBQ3RCLHVCQUF1QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDOztnQkFDakUsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7WUFHekUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsdUJBQXVCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRCx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBSS9EO0lBRUgsQ0FBQzs7Ozs7SUFDRCxxREFBZ0I7Ozs7SUFBaEIsVUFBaUIsU0FBUzs7WUFFbEIsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO1FBQzVELElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBQztZQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixrQkFBa0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1NBRXJEO2FBQUk7WUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM3QixrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN0QztRQUNGLGtCQUFrQixDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDN0MsQ0FBQzs7Ozs7SUFFRCxtREFBYzs7OztJQUFkLFVBQWUsT0FBTzs7WUFFZCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDeEQsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFDO1lBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7U0FHbkQ7YUFBSTtZQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxDQUFDO1NBR3BDO1FBQ0YsZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsdUJBQXVCOzs7OztJQUN2QiwrQ0FBVTs7Ozs7SUFBVjtRQUNFLDJDQUEyQztRQUQ3QyxpQkE4ZUs7UUEzZUwsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFDN0M7WUFDRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFDO2dCQUMxQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBQztvQkFDbkQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxFQUFFLEVBQUM7d0JBQy9DLElBQUksQ0FBQyxzQkFBc0IsR0FBSSxJQUFJLENBQUM7cUJBQ3pDO2lCQUNGO2FBQ0E7WUFJRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixLQUFLLFNBQVMsRUFBQztnQkFDekQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUM7b0JBQ25ELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEtBQUssRUFBRSxFQUFDO3dCQUMvQyxJQUFJLENBQUMsc0JBQXNCLEdBQUksSUFBSSxDQUFDO3FCQUN6QztpQkFDRjthQUNBO1lBR0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBQztnQkFDMUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUM7b0JBQ25ELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssRUFBRSxFQUFDO3dCQUM5QyxJQUFJLENBQUMsc0JBQXNCLEdBQUksSUFBSSxDQUFDO3FCQUN6QztpQkFDRjthQUNBO1NBRUY7UUFFQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBR3pDLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLEVBQ2hHO1lBRU0sSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNoQyxJQUFJLENBQUMsbUJBQW1CO2lCQUN2QixPQUFPLENBQUMsRUFBRSxFQUFFLHdGQUF3RixFQUFFLElBQUksQ0FBQztpQkFDM0csU0FBUzs7OztZQUFDLFVBQUEsR0FBRztnQkFBSyxLQUFJLENBQUMsTUFBTSxHQUFJLEdBQUcsQ0FBQztZQUV0QyxDQUFDLEVBQUMsQ0FBQztTQUNSO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFMUMsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFDOUM7WUFDRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFDO2dCQUMxQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBQztvQkFDbkQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxFQUFFLEVBQUM7d0JBQy9DLElBQUksQ0FBQyxzQkFBc0IsR0FBSSxJQUFJLENBQUM7cUJBQ3pDO2lCQUNGO2FBQ0E7WUFJRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixLQUFLLFNBQVMsRUFBQztnQkFDekQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUM7b0JBQ25ELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEtBQUssRUFBRSxFQUFDO3dCQUMvQyxJQUFJLENBQUMsc0JBQXNCLEdBQUksSUFBSSxDQUFDO3FCQUN6QztpQkFDRjthQUNBO1lBR0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBQztnQkFDMUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUM7b0JBQ25ELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssRUFBRSxFQUFDO3dCQUM5QyxJQUFJLENBQUMsc0JBQXNCLEdBQUksSUFBSSxDQUFDO3FCQUN6QztpQkFDRjthQUNBO1NBRUQ7UUFFQSxPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRXpDLElBQUcsSUFBSSxDQUFDLHNCQUFzQixLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLEVBQy9GO1lBRU0sSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNoQyxJQUFJLENBQUMsbUJBQW1CO2lCQUN2QixPQUFPLENBQUMsRUFBRSxFQUFFLHdGQUF3RixFQUFFLElBQUksQ0FBQztpQkFDM0csU0FBUzs7OztZQUFDLFVBQUEsR0FBRztnQkFBSyxLQUFJLENBQUMsTUFBTSxHQUFJLEdBQUcsQ0FBQztZQUV0QyxDQUFDLEVBQUMsQ0FBQztTQUNSO1FBR0EsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdkMsSUFBSyxJQUFJLENBQUMsbUJBQW1CLEtBQUssS0FBSyxFQUFDO1lBR3JDLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUM7OztvQkFHMUIsZ0JBQWdCLEdBQUcsRUFBRTtnQkFDekIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUM7b0JBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPOzs7O29CQUFDLFVBQUEsT0FBTzs7NEJBQzlDLGFBQWEsR0FBRSxtQkFBZSxFQUFFLEVBQUE7d0JBQ2hDLGFBQWEsQ0FBQyxRQUFRLEdBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO3dCQUN2RCxhQUFhLENBQUMsbUJBQW1CLEdBQUUsT0FBTyxDQUFDO3dCQUMzQyxhQUFhLENBQUMsVUFBVSxHQUFFLEtBQUksQ0FBQyxPQUFPLENBQUM7d0JBQ3ZDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDeEMsQ0FBQyxFQUFDLENBQUM7aUJBQ047O29CQUVFLGdCQUFnQixHQUFHLEVBQUU7Z0JBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0RBQWtELENBQUMsQ0FBQztnQkFDaEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUM7b0JBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPOzs7O29CQUFDLFVBQUEsT0FBTzs7NEJBQy9DLGFBQWEsR0FBRyxtQkFBZSxFQUFFLEVBQUE7d0JBQ3ZDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO3dCQUVuQyxJQUFJLE9BQU8sS0FBSSxPQUFPLElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFDOzRCQUM1RCxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzs0QkFDaEMsYUFBYSxDQUFDLFNBQVMsR0FBRyxLQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7eUJBQzFEOzZCQUNHOzRCQUNILGFBQWEsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDOzRCQUNuQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzt5QkFDL0I7d0JBRUQsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFJLENBQUMsT0FBTyxDQUFDO3dCQUN4QyxhQUFhLENBQUMsUUFBUSxHQUFHLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQzt3QkFDeEQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNyQyxDQUFDLEVBQUMsQ0FBQztpQkFDSDtnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7Z0JBQ2xFLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7O29CQUloRCxrQkFBa0IsR0FBRyxFQUFFO2dCQUUzQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFDO29CQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPOzs7O29CQUFDLFVBQUEsT0FBTzs7NEJBQzdDLGVBQWUsR0FBRyxtQkFBaUIsRUFBRSxFQUFBO3dCQUMzQyxlQUFlLENBQUMsUUFBUSxHQUFHLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQzt3QkFDMUQsZUFBZSxDQUFDLFlBQVksR0FBRSxPQUFPLENBQUM7d0JBRXRDLElBQUksT0FBTyxJQUFHLE9BQU8sRUFBQzs0QkFDckIsZUFBZSxDQUFDLFdBQVcsR0FBRyxLQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7eUJBQ2hFOzZCQUNHOzRCQUNILGVBQWUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO3lCQUNuQzt3QkFFRCxlQUFlLENBQUMsVUFBVSxHQUFFLEtBQUksQ0FBQyxPQUFPLENBQUM7d0JBQ3pDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDN0MsQ0FBQyxFQUFDLENBQUM7aUJBQ0o7O29CQUVLLFNBQVMsR0FBRztvQkFDVixRQUFRLEVBQUUsQ0FBQztvQkFDWCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQzNCLGdDQUFnQyxFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGdDQUFnQztvQkFDdkYsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVE7b0JBQ3hDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTO29CQUMxQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ3ZGLFFBQVEsRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDL0UsUUFBUSxFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFBLENBQUMsQ0FBQyxJQUFJO29CQUM5RSxTQUFTLEVBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ2pGLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUMsSUFBSTtvQkFDcEYsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsb0JBQW9CO29CQUNoRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUztvQkFDMUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCO29CQUM1RCxTQUFTLEVBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ3BGLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDbkYsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxJQUFJO29CQUNsRixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDLElBQUk7b0JBQ3RFLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUMsQ0FBQztvQkFDL0UsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJO29CQUN6RyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUEsQ0FBQyxDQUFDLElBQUk7b0JBQ3RILGtCQUFrQixFQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGtCQUFrQjtvQkFDN0Qsb0JBQW9CLEVBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsb0JBQW9CO29CQUNqRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7b0JBQzFELGlCQUFpQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ3JJLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGtCQUFrQjtvQkFDNUQsa0JBQWtCLEVBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCO29CQUM3RCxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVztvQkFDOUMsY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGNBQWM7b0JBQ3BELFVBQVUsRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVO29CQUMzQyxVQUFVLEVBQUMsSUFBSSxDQUFDLE9BQU87b0JBQ3ZCLGVBQWUsRUFBRSxJQUFJO29CQUNyQixlQUFlLEVBQUUsSUFBSTtvQkFDckIsY0FBYyxFQUFFLGdCQUFnQjtvQkFDaEMsY0FBYyxFQUFFLGdCQUFnQjtvQkFDaEMsZ0JBQWdCLEVBQUUsa0JBQWtCO29CQUVwQyxpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixnQkFBZ0IsRUFBRSxJQUFJO29CQUN0QixhQUFhLEVBQUUsSUFBSTtvQkFDbkIsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsbUJBQW1CLEVBQUUsSUFBSTtvQkFDekIsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsYUFBYSxFQUFFLElBQUk7b0JBQ25CLGdCQUFnQixFQUFFLElBQUk7b0JBQ3RCLGdCQUFnQixFQUFFLElBQUk7b0JBQ3RCLG1CQUFtQixFQUFFLElBQUk7b0JBQ3pCLGlCQUFpQixFQUFFLElBQUk7b0JBQ3ZCLGlCQUFpQixFQUFFLElBQUk7b0JBQ3ZCLGlCQUFpQixFQUFFLElBQUk7b0JBQ3ZCLGlCQUFpQixFQUFFLElBQUk7b0JBQ3ZCLGlCQUFpQixFQUFFLElBQUk7b0JBQ3ZCLFlBQVksRUFBRSxJQUFJO29CQUNsQixxQkFBcUIsRUFBRSxJQUFJO2lCQUcxQjtnQkFFTCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFDO29CQUN2QixTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztpQkFDM0I7cUJBQU07b0JBQ04sU0FBUyxDQUFDLFNBQVMsR0FBSSxJQUFJLENBQUMsU0FBUyxDQUFDO2lCQUN0QztnQkFFRCxTQUFTLENBQUMsaUJBQWlCLEdBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO2dCQUN0RCxTQUFTLENBQUMsaUJBQWlCLEdBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO2dCQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTOzs7O2dCQUNoRCxVQUFDLEtBQVU7O3dCQUVKLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBRXRDLElBQUksS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLElBQUksSUFBSSxFQUFDO3dCQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDOzs0QkFDeEIsY0FBYyxHQUFtQjs0QkFDdEMsZ0JBQWdCLEVBQUUsRUFBRTs0QkFDcEIsUUFBUSxFQUFFLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQjs0QkFDaEQsU0FBUyxFQUFFLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQjs0QkFDbEQsUUFBUSxFQUFFLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQjs0QkFDaEQsUUFBUSxFQUFFLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQjs0QkFDaEQsU0FBUyxFQUFFLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLGlCQUFpQixDQUFBLENBQUMsQ0FBQyxJQUFJOzRCQUNoRSxXQUFXLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFBLENBQUMsQ0FBQyxJQUFJOzRCQUN4RyxTQUFTLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCOzRCQUNsRCxTQUFTLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCOzRCQUNsRCxTQUFTLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCOzRCQUNsRCxLQUFLLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYTs0QkFDMUMsVUFBVSxFQUFFLEtBQUksQ0FBQyxPQUFPO3lCQUczQjt3QkFFQyxLQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztxQkFDdkU7b0JBRUMsSUFBSSxLQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFDOzs0QkFFdEMsY0FBYyxHQUFtQjs0QkFDckMsZ0JBQWdCLEVBQUUsRUFBRTs0QkFDcEIsUUFBUSxFQUFFLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQjs0QkFDaEQsU0FBUyxFQUFFLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQjs0QkFDbEQsUUFBUSxFQUFFLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQjs0QkFDaEQsUUFBUSxFQUFFLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQjs0QkFDaEQsU0FBUyxFQUFFLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQjs0QkFDbEQsU0FBUyxFQUFFLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQSxDQUFDLENBQUMsS0FBSSxDQUFDLGlCQUFpQixDQUFBLENBQUMsQ0FBQyxJQUFJOzRCQUMvRCxXQUFXLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUEsQ0FBQyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFBLENBQUMsQ0FBQyxJQUFJOzRCQUN2RyxTQUFTLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCOzRCQUNsRCxTQUFTLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCOzRCQUNsRCxTQUFTLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCOzRCQUNsRCxLQUFLLEVBQUUsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYTs0QkFDMUMsVUFBVSxFQUFFLEtBQUksQ0FBQyxPQUFPO3lCQUcxQjt3QkFFQSxLQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztxQkFFdkU7b0JBRUMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxFQUFFO3dCQUNqRCxRQUFRLEVBQUUsSUFBSTtxQkFDUixDQUFDLENBQUM7b0JBRVYsWUFBWTtvQkFDWixJQUFJLEtBQUksQ0FBQyxRQUFRLEtBQUcsSUFBSSxFQUFDO3dCQUN2QixLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7cUJBQ3RDO3lCQUVEO3dCQUNFLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztxQkFDdEM7b0JBQ0Qsc0NBQXNDO2dCQUV4QyxDQUFDLEVBQ0QsQ0FBQzthQUVGO2lCQUNJO2dCQUNILGVBQWU7Z0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO2dCQUN2RSxPQUFPLENBQUMsR0FBRyxDQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7Z0JBRXJFLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxZQUFZLENBQUMsZ0NBQWdDLEdBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLENBQUM7Z0JBQzdHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQzlELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztnQkFDaEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDekksSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztnQkFDaEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztnQkFDcEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztnQkFDOUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFB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dURBQThCOztJQUM5Qix1REFBOEI7O0lBQzlCLDhDQUFpQzs7SUFDakMsa0RBQTBEOztJQUMxRCxpREFBd0I7O0lBQ3hCLGdEQUFnQzs7SUFDaEMsK0NBQWtCOztJQUNsQixxREFBaUM7O0lBQ2pDLG1EQUErQjs7SUFFL0IsdURBQTRDOztJQUM1QyxpREFBdUI7O0lBQ3ZCLDREQUF5Qzs7SUFDekMsNERBQXlDOztJQUN6Qyx5REFBc0M7O0lBQ3RDLDREQUF1Qzs7SUFDdkMsNERBQXdDOztJQUV4Qyx1REFPRTs7Ozs7SUFHQSw4Q0FBMEI7Ozs7O0lBQzFCLGlEQUFnQzs7Ozs7SUFDaEMsNENBQXlCOzs7OztJQUN6QiwyQ0FBNkI7Ozs7O0lBQzdCLDRDQUFzQjs7SUFDdEIsOENBQTRCOzs7OztJQUM1Qix5REFBZ0Q7Ozs7O0lBQ2hELG1EQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkNoYW5nZXMsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCxWYWxpZGF0b3JzLFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csTWF0U25hY2tCYXIsTWF0UmFkaW9DaGFuZ2UsIE1hdElucHV0LCBNYXRTZWxlY3QsIE1hdFJhZGlvR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XHJcbmltcG9ydCB7IFZpY3RpbSxWaWN0aW1EcnVnVXNlLCBDb250YWN0LCBWaWN0aW1BZHZvY2F0ZSxWaWN0aW1HdWFyZGlhbixWaWN0aW1XZWFwb25Vc2UsVmljdGltU3VwcG9ydCB9IGZyb20gJy4uL3NtYXJ0LXZpY3RpbS5tb2RlbCc7XHJcbmltcG9ydCB7IE5nY1NtYXJ0VmljdGltU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXZpY3RpbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENvbW1vbkRpYWxvZ1NlcnZpY2V9IGZyb20gJy4uLy4vY29tbW9uLWRpYWxvZy9jb21tb24tZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSwgZm9ybWF0RGF0ZSwgTG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5fWZyb20nQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgdHJ1bmNhdGUgfSBmcm9tICdmcyc7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBBZGRyZXNzVmFsaWRhdG9ycywgU21hcnRBZGRyZXNzQ29tcG9uZW50IH0gZnJvbSAnQGNzbWFydC9uZ2Mtc21hcnQtYWRkcmVzcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJvb2xlYW5GbiB7XHJcbiAgKCk6IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdGbiB7XHJcbiAgKCk6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbmRpdGlvbmFsVmFsaWRhdG9yKHByZWRpY2F0ZTogQm9vbGVhbkZuLFxyXG4gIHZhbGlkYXRvcjogVmFsaWRhdG9yRm4sXHJcbiAgZXJyb3JOYW1lc3BhY2U/OiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XHJcbnJldHVybiAoZm9ybUNvbnRyb2wgPT4ge1xyXG5pZiAoIWZvcm1Db250cm9sLnBhcmVudCkge1xyXG5yZXR1cm4gbnVsbDtcclxufVxyXG5sZXQgZXJyb3IgPSBudWxsO1xyXG5pZiAocHJlZGljYXRlKCkpIHtcclxuZXJyb3IgPSB2YWxpZGF0b3IoZm9ybUNvbnRyb2wpO1xyXG59XHJcbmlmIChlcnJvck5hbWVzcGFjZSAmJiBlcnJvcikge1xyXG5jb25zdCBjdXN0b21FcnJvciA9IHt9O1xyXG5jdXN0b21FcnJvcltlcnJvck5hbWVzcGFjZV0gPSBlcnJvcjtcclxuZXJyb3IgPSBjdXN0b21FcnJvclxyXG59XHJcbnJldHVybiBlcnJvcjtcclxufSlcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdDb25kaXRpb25hbFZhbGlkYXRvcihwcmVkaWNhdGU6IFN0cmluZ0ZuLFxyXG4gIHZhbGlkYXRvcjogVmFsaWRhdG9yRm4sXHJcbiAgZXJyb3JOYW1lc3BhY2U/OiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XHJcbnJldHVybiAoZm9ybUNvbnRyb2wgPT4ge1xyXG5pZiAoIWZvcm1Db250cm9sLnBhcmVudCkge1xyXG5yZXR1cm4gbnVsbDtcclxufVxyXG5sZXQgZXJyb3IgPSBudWxsO1xyXG5pZiAocHJlZGljYXRlKCk9PSdZUycpIHtcclxuZXJyb3IgPSB2YWxpZGF0b3IoZm9ybUNvbnRyb2wpO1xyXG59XHJcbmlmIChlcnJvck5hbWVzcGFjZSAmJiBlcnJvcikge1xyXG5jb25zdCBjdXN0b21FcnJvciA9IHt9O1xyXG5jdXN0b21FcnJvcltlcnJvck5hbWVzcGFjZV0gPSBlcnJvcjtcclxuZXJyb3IgPSBjdXN0b21FcnJvclxyXG59XHJcbnJldHVybiBlcnJvcjtcclxufSlcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjc21hcnQtdmljdGltLWRldGFpbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LXZpY3RpbS1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LXZpY3RpbS1kZXRhaWwuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW0NvbW1vbkRpYWxvZ1NlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydFZpY3RpbURldGFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSB2aWN0aW1EZXRhaWwgPSA8VmljdGltPnt9O1xyXG4gIEBJbnB1dCgpIHN0YWZmSWQ6IG51bWJlcjtcclxuICBASW5wdXQoKSBvZmZlbmRlcklkOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaXNJbnRha2U6IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIFxyXG5cclxuICB2aWN0aW1JZDogbnVtYmVyO1xyXG4gIHZpY3RpbUZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgZHJ1Z3M6IGFueTtcclxuICB2aWN0aW1TdXBwb3J0VHlwZXM6IGFueTtcclxuICBwcmVmaXhlczogYW55O1xyXG4gIC8vdmljdGltOiBWaWN0aW0gPSA8VmljdGltPnt9O1xyXG4gIHN1ZmZpeGVzOiBhbnk7XHJcbiAgcmVsYXRpb25zaGlwVHlwZXM6IGFueTtcclxuICBnZW5kZXJzOiBhbnk7XHJcbiAgZG9ja2V0bGlzdDogYW55O1xyXG4gIHdlYXBvblR5cGVzOiBhbnk7XHJcbiAgZmxhZ09wdGlvbjogYW55O1xyXG4gIHNlbGVjdGVkV2VhcG9uVHlwZXM6IGFueTtcclxuICBzZWxlY3RlZFZpY3RpbVN1cHBvcnRUeXBlczogYW55O1xyXG4gIHNlbGVjdGVkRHJ1Z3M6IGFueTtcclxuICBpZDogYW55O1xyXG4gIGhpZGRlbjogYm9vbGVhbj10cnVlO1xyXG4gIHByaXZhdGUgc3ViOiBhbnk7XHJcbiAgdmljdGltQWR2b2NhdGU6IFZpY3RpbUFkdm9jYXRlID0gIDxWaWN0aW1BZHZvY2F0ZT57fTtcclxuICB2aWN0aW1HdWFyZGlhbjogVmljdGltR3VhcmRpYW4gPSA8VmljdGltR3VhcmRpYW4+e307IFxyXG4gIHZpY3RpbVdlYXBvblVzZTogVmljdGltV2VhcG9uVXNlO1xyXG4gIHZpY3RpbVN1cHBvcnQ6IFZpY3RpbVN1cHBvcnQ7XHJcbiAgdmljdGltRHJ1Z1VzZTogVmljdGltRHJ1Z1VzZTtcclxuICByZXN1bHQ6IGFueTtcclxuICBlZGl0TW9kZTogYW55O1xyXG4gIGd1YXJkaWFuVGFiRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFkdm9jYXRlVGFiRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbW1vbkNoaWxkcmVuRGl2RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNwb0V4cGlyYXRpb25EaXZGbGFnIDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN1cHBvcnRJblBsYWNlRGl2RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHdlYXBvbkludm9sdmVkRGl2RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRydWdVc2VEaXZGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0RlbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFkZHJlc3NJZDogbnVtYmVyID0gMDtcclxuICBhZHZvY2F0ZUFkZHJlc3NJZDogbnVtYmVyID0gMDtcclxuICBndWFyZGlhbkFkZHJlc3NJZDogbnVtYmVyID0gMDtcclxuICBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcclxuICBlbWFpbFBhdHRlcm4gPSBcIl5bYS16MC05Ll8lKy1dK0BbYS16MC05Li1dK1xcLlthLXpdezIsNH0kXCI7XHJcbiAgcGhvbmVOdW1iZXIgPSBcIlxcXFxkezEwfVwiO1xyXG4gIGVkaXRWaWN0aW06IFZpY3RpbSA9IDxWaWN0aW0+e307XHJcbiAgdmljdGltQWdlOiBudW1iZXI7XHJcbiAgb3RoZXJXZWFwb25GbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb3RoZXJEcnVnRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb250YWN0RGF0YVNvdXJjZT0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSgpO1xyXG4gIGNvbnRhY3RMaXN0OiBDb250YWN0W107XHJcbiAgZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZzogYm9vbGVhbiA9ICBmYWxzZTtcclxuICBhZHZvY2F0ZVBob25lRXhpc3RGbGFnOiBib29sZWFuID0gIGZhbHNlO1xyXG4gIHBob25lVmFsaWRhdGlvbkZsYWc6IGJvb2xlYW4gPSAgZmFsc2U7XHJcbiAgZ3VhcmlkYW5Ob1Bob25lQ2hrRmxhZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgYWR2b2NhdGVOb1Bob25lQ2hrRmxhZzogYm9vbGVhbiA9ICB0cnVlO1xyXG5cclxuICBhZGRyZXNzVmFsaWRhdG9yczogQWRkcmVzc1ZhbGlkYXRvcnMgPSB7XHJcbiAgICBzdHJlZXQ6IFtdLFxyXG4gICAgc3RyZWV0MjogW10sXHJcbiAgICBjaXR5OiBbXSxcclxuICAgIHN0YXRlQ29kZTogW10sXHJcbiAgICB6aXBDb2RlOiBbXSxcclxuICAgIHBzYUNvZGU6IFtdLFxyXG4gIH07XHJcblxyXG4gY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwdWJsaWMgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgcHJpdmF0ZSBjb21tb25EaWFsb2dTZXJ2aWNlOiBDb21tb25EaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB2aWN0aW1TZXJ2aWNlOiBOZ2NTbWFydFZpY3RpbVNlcnZpY2UpIHtcclxuICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcclxuICAgIFxyXG4gICAgdGhpcy52aWN0aW1Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHVuZGVyU3VwZXJ2aXNpb25GbGFnOiAgbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxyXG4gICAgICB2aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZDpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXHJcbiAgICAgIGxhc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXHJcbiAgICAgIGZpcnN0TmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxyXG4gICAgICBtaWRkbGVOYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHByZWZpeElkOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHN1ZmZpeElkOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGdlbmRlckNvZGU6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBiaXJ0aERhdGU6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgaG9tZVBob25lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucGhvbmVOdW1iZXIpIF0pKSxcclxuICAgICAgY2VsbFBob25lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucGhvbmVOdW1iZXIpIF0pKSxcclxuICAgICAgd29ya1Bob25lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucGhvbmVOdW1iZXIpIF0pKSxcclxuICAgICAgZW1haWw6bmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLmVtYWlsUGF0dGVybikgXSkpLFxyXG4gICAgICBtaW5vckZsYWc6bmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxyXG4gICAgICB2aWN0aW1BZHZvY2F0ZUZsYWc6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcclxuICAgICAgZ3VhcmRpYW5MYXN0TmFtZTpuZXcgRm9ybUNvbnRyb2woJycsICBjb25kaXRpb25hbFZhbGlkYXRvcigoKSA9PiB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS52YWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCwnaWxsdW1pbmF0aUVycm9yJykgKSxcclxuICAgICAgZ3VhcmRpYW5GaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgY29uZGl0aW9uYWxWYWxpZGF0b3IoKCkgPT4gdGhpcy52aWN0aW1Gb3JtLmdldCgnbWlub3JGbGFnJykudmFsdWUsIFZhbGlkYXRvcnMucmVxdWlyZWQsJ2lsbHVtaW5hdGlFcnJvcicpICksXHJcbiAgICAgIGd1YXJkaWFuUHJlZml4SWQ6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBndWFyZGlhblN1ZmZpeElkOiBuZXcgRm9ybUNvbnRyb2woJycsICksICAgICAgICBcclxuICAgICAgLy9ndWFyZGlhbkdlbmRlcjpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGd1YXJkaWFuQmlydGhEYXRlOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGd1YXJkaWFuTm9QaG9uZUZsYWc6bmV3IEZvcm1Db250cm9sKHRydWUpLFxyXG5cclxuICAgICAgZ3VhcmRpYW5Ib21lUGhvbmU6bmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdICkpLFxyXG4gICAgICBndWFyZGlhbkNlbGxQaG9uZTpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucGhvbmVOdW1iZXIpIF0gKSksXHJcbiAgICAgIGd1YXJkaWFuV29ya1Bob25lOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5waG9uZU51bWJlcikgXSApKSxcclxuICAgICBcclxuICAgICBcclxuICAgICAgZ3VhcmRpYW5FbWFpbDpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuZW1haWxQYXR0ZXJuKSBdKSksXHJcbiAgICAgIGFkdm9jYXRlTm9QaG9uZUZsYWc6IG5ldyBGb3JtQ29udHJvbCh0cnVlKSxcclxuICBcclxuXHJcbiAgICAgIGFkdm9jYXRlV29ya1Bob25lOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucGhvbmVOdW1iZXIpIF0gKSksXHJcbiAgICAgIGFkdm9jYXRlSG9tZVBob25lOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucGhvbmVOdW1iZXIpIF0gKSksXHJcbiAgICAgIGFkdm9jYXRlQ2VsbFBob25lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdICkpLFxyXG4gICAgIFxyXG5cclxuICAgICAgYWR2b2NhdGVTdWZmaXhJZDpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGFkdm9jYXRlUHJlZml4SWQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYWR2b2NhdGVGaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgc3RyaW5nQ29uZGl0aW9uYWxWYWxpZGF0b3IoKCkgPT4gdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykudmFsdWUsICBWYWxpZGF0b3JzLnJlcXVpcmVkLCAnaWxsdW1pbmF0aUVycm9yJykpLFxyXG4gICAgICBhZHZvY2F0ZUxhc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIHN0cmluZ0NvbmRpdGlvbmFsVmFsaWRhdG9yKCgpID0+IHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnZhbHVlLCBWYWxpZGF0b3JzLnJlcXVpcmVkLCdpbGx1bWluYXRpRXJyb3InKSksXHJcbiAgICAgIGFkdm9jYXRlRW1haWw6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5lbWFpbFBhdHRlcm4pIF0pKSxcclxuICAgICAgZW1lcmdlbmN5Q29udGFjdDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWVyZ2VuY3lDb250YWN0UGhvbmU6bmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdKSksXHJcbiAgICAgIGVtZXJnZW5jeUNoaWxkcmVuOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGVtZXJnZW5jeUNwbzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWVyZ2VuY3lEcnVnOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZW1lcmdlbmN5U3VwcG9ydDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWVyZ2VuY3lXZWFwb246IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZHJ1ZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICB3ZWFwb246IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgc3VwcG9ydDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBjb21tb25DaGlsZHJlbkZsYWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgY29tbW9uQ2hpbGRyZW5OdW1iZXI6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBjcG9FeHBpcmF0aW9uRmxhZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBjcG9FeHBpcmF0aW9uRGF0ZTogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBhY2Nlc3NSaXNrOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZHJ1Z1VzZUZsYWc6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBzdXBwb3J0SW5QbGFjZUZsYWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgd2VhcG9uSW52b2x2ZWRGbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIG90aGVyV2VhcG9uOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIG90aGVyRHJ1ZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBhbGNvaG9sVXNlRmxhZzpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHZpY3RpbVN1cHBvcnRzOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgdmljdGltV2VhcG9uVXNlczpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHZpY3RpbURydWdVc2VzOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYWxsb3dDc29zYUNvbnRhY3RGbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICBcclxuIFxyXG59KTtcclxuXHJcbiAgICB0aGlzLnZpY3RpbUZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuXHRcdHRoaXMudmljdGltRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgX2dldFZpY3RpbSgpIHtcclxuICAgIGlmICh0aGlzLnZpY3RpbUlkID09PSAwKSB7IFxyXG4gICAgICBcclxuICAgICAgcmV0dXJuOyBcclxuICAgIH07XHJcblx0XHRpZiAodGhpcy5lZGl0TW9kZSA9PSB0cnVlKSB7XHJcbiAgICBjb25zb2xlLmxvZygnZmluZCB2aWN0aW0gaWQgaW5zaWRlIGdldFZpY3RpbScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy52aWN0aW1JZCk7XHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5zdWIgPSB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgdGhpcy52aWN0aW1JZCA9IHBhcmFtc1sndmljdGltSWQnXTtcclxuICAgICAgY29uc29sZS5sb2coJ215IHRoaXMudmljdGltSWQnKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1JZCk7XHJcbiAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgICAgIHRoaXMudmljdGltU2VydmljZS5nZXRWaWN0aW0odGhpcy52aWN0aW1JZClcclxuICAgICAgLnN1YnNjcmliZSgodmljdGltOiBWaWN0aW0pID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygndmljdGltIGRhdGEgMScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHZpY3RpbSk7XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltID0gPFZpY3RpbT52aWN0aW07XHJcbiAgICAgXHJcbiAgICAgICAgdmFyIHN1cHBvcnRzRGF0YSA9W107XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltLnZpY3RpbVN1cHBvcnRzLmZvckVhY2goIHQ9PntzdXBwb3J0c0RhdGEucHVzaCh0LnZpY3RpbVN1cHBvcnRUeXBlSWQpOyB9ICApXHJcbiAgICAgICAgY29uc3QgdmljdGltU3VwcG9ydHNDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltU3VwcG9ydHMnKTtcclxuICAgICAgICB2aWN0aW1TdXBwb3J0c0NvbnRyb2wuc2V0VmFsdWUoc3VwcG9ydHNEYXRhKTtcclxuXHJcblxyXG4gICAgICAgIHZhciB3ZWFwb25Vc2VzRGF0YSA9W107XHJcbiAgICAgICAgdmFyIG90aGVyV2VhcG9uID0gXCJcIjtcclxuICAgICAgICB0aGlzLmVkaXRWaWN0aW0udmljdGltV2VhcG9uVXNlcy5mb3JFYWNoKCB0PT57XHJcbiAgICAgICAgICB3ZWFwb25Vc2VzRGF0YS5wdXNoKHQud2VhcG9uVHlwZUlkKTsgXHJcbiAgICAgICAgICBpZiAodC53ZWFwb25UeXBlSWQgPT0gXCJPVEhFUlwiKXtcclxuICAgICAgICAgICAgb3RoZXJXZWFwb24gPSB0Lm90aGVyV2VhcG9uO1xyXG4gICAgICAgICAgICB0aGlzLm90aGVyV2VhcG9uRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgfSAgKVxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgdmljdGltV2VhcG9uVXNlc0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1XZWFwb25Vc2VzJyk7XHJcbiAgICAgICAgdmljdGltV2VhcG9uVXNlc0NvbnRyb2wuc2V0VmFsdWUod2VhcG9uVXNlc0RhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBvdGhlcldlYXBvbkNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpO1xyXG4gICAgICAgIG90aGVyV2VhcG9uQ29udHJvbC5zZXRWYWx1ZShvdGhlcldlYXBvbik7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMud2VhcG9uVXNlc0RhdGEgPSB0aGlzLmVkaXRWaWN0aW0udmljdGltV2VhcG9uVXNlcztcclxuICAgICAgIFxyXG4gICAgICAgIHZhciBkcnVnVXNlRGF0YSA9W107XHJcbiAgICAgICAgdmFyIG90aGVyRHJ1ZyA9IFwiXCI7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdsb2FkIHRoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcycpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcyk7XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltLnZpY3RpbURydWdVc2VzLmZvckVhY2goIHQ9PntcclxuICBcclxuICAgICAgICAgIGlmICh0LmRydWdUeXBlSWQgPT09IG51bGwpe1xyXG4gICAgICAgICAgICBvdGhlckRydWcgPSB0Lm90aGVyRHJ1ZztcclxuICAgICAgICAgICAgdGhpcy5vdGhlckRydWdGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgdC5kcnVnVHlwZUlkID0nT1RIRVInO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRydWdVc2VEYXRhLnB1c2godC5kcnVnVHlwZUlkKTtcclxuICAgICAgICBcclxuICAgICAgICB9ICApXHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmVkaXRWaWN0aW0udmljdGltRHJ1Z1VzZXMgYWZ0ZXIgcHVzaCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGRydWdVc2VEYXRhKTtcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCB2aWN0aW1EcnVnVXNlc0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1EcnVnVXNlcycpO1xyXG4gICAgICAgIHZpY3RpbURydWdVc2VzQ29udHJvbC5zZXRWYWx1ZShkcnVnVXNlRGF0YSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG90aGVyRHJ1Z0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKTtcclxuICAgICAgICBvdGhlckRydWdDb250cm9sLnNldFZhbHVlKG90aGVyRHJ1Zyk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgLy9jb250YWN0XHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldENvbnRhY3RzKHRoaXMudmljdGltSWQpLnN1YnNjcmliZShcclxuICAgICAgICAgIGNvbnRhY3RMaXN0ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvbnRhY3RMaXN0Jyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbnRhY3RMaXN0KTtcclxuICAgICAgICAgICAgdGhpcy5jb250YWN0TGlzdCA9IGNvbnRhY3RMaXN0OyBcclxuICAgICAgICAgICAgdGhpcy5jb250YWN0RGF0YVNvdXJjZS5kYXRhID0gdGhpcy5jb250YWN0TGlzdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvL25vIHBob25lIGZpZWxkXHJcblxyXG4gICAgICAgIGlmICggdGhpcy5lZGl0VmljdGltLmd1YXJkaWFuTm9QaG9uZUZsYWcgPT09IGZhbHNlICl7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7Z3VhcmRpYW5Ob1Bob25lRmxhZzogZmFsc2V9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCB0aGlzLmVkaXRWaWN0aW0uYWR2b2NhdGVOb1Bob25lRmxhZyA9PT0gZmFsc2UgKXtcclxuICAgICAgICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHthZHZvY2F0ZU5vUGhvbmVGbGFnOiBmYWxzZX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXCJFcnJvciBvY2N1cmVkIHdoaWxlIHJldHJpdmluZyBWaWN0aW0gSW5mb3JtYXRpb24uIFBsZWFzZSB0cnkgYWdhaW4uXCIpO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybjtcclxuXHRcdH0gZWxzZSB7XHJcbiAgICAgIC8vbmV3XHJcblxyXG4gICB9XHJcbiAgfVxyXG4gIFxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gIFxyXG4gIH1cclxuXHJcbiAgb25BZGRyZXNzQ2hhbmdlKGFkZHJlc3NJZCkgeyAgICBcclxuICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHthZGRyZXNzSWQ6IGFkZHJlc3NJZH0pXHJcbiAgICB0aGlzLmFkZHJlc3NJZCA9IGFkZHJlc3NJZDtcclxuICB9XHJcbiAgb25HdWFyZGlhbkFkZHJlc3NDaGFuZ2UoTXlHdWFyZGlhbkFkZHJlc3NJZCkgeyAgICBcclxuICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHtndWFyZGlhbkFkZHJlc3NJZDogTXlHdWFyZGlhbkFkZHJlc3NJZH0pXHJcbiAgICB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkID0gIE15R3VhcmRpYW5BZGRyZXNzSWQ7XHJcbiAgfVxyXG4gIG9uQWR2b2NhdGVBZGRyZXNzQ2hhbmdlKE15QWR2b2NhdGVBZGRyZXNzSWQpIHsgICAgXHJcbiAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7YWR2b2NhdGVBZGRyZXNzSWQ6IE15QWR2b2NhdGVBZGRyZXNzSWR9KVxyXG4gICAgdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA9IE15QWR2b2NhdGVBZGRyZXNzSWQ7XHJcbiAgfVxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMudmljdGltRm9ybS5yZXNldCgpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdzaG93IG9mZmVuZGVySWQnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMub2ZmZW5kZXJJZCk7XHJcbiAgICBjb25zb2xlLmxvZygnc2hvdyBzdGFmZklkJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YWZmSWQpO1xyXG4gICAgY29uc29sZS5sb2coJ3Nob3cgaXNJbnRha2UnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuaXNJbnRha2UpO1xyXG4gICAgLy90aGlzLnZpY3RpbURldGFpbC5ndWFyZGlhbk5vUGhvbmVGbGFnID0gdHJ1ZTtcclxuICAgIC8vdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcgPSAgdHJ1ZTtcclxuICAgIC8vdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Ob1Bob25lRmxhZycpLnNldFZhbHVlKHRydWUpO1xyXG5cclxuICAgICAgIC8vcmVxdWlyZWQgZmllbGRcclxuICAgIGNvbnN0IHJlcXVpcmVkSW1wbGVtZW50YXRpb24gPSB7Z2V0OmZ1bmN0aW9uKCk6Ym9vbGVhbntpZih0aGlzLl9yZXF1aXJlZCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkO31cclxuICAgIGlmKHRoaXMubmdDb250cm9sJiZ0aGlzLm5nQ29udHJvbC5jb250cm9sJiZ0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvclxyXG4gICAgICApe2NvbnN0IGVtcHR5VmFsdWVDb250cm9sPU9iamVjdC5hc3NpZ24oe30sXHJcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbCk7KGVtcHR5VmFsdWVDb250cm9sIGFzIGFueSkudmFsdWU9bnVsbDtcclxuICAgICAgICByZXR1cm4oJ3JlcXVpcmVkJ2luKHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKGVtcHR5VmFsdWVDb250cm9sKXx8e30pKTt9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO30sc2V0OmZ1bmN0aW9uKHZhbHVlOmJvb2xlYW4pe3RoaXMuX3JlcXVpcmVkPWNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7fSx9O1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRJbnB1dC5wcm90b3R5cGUsJ3JlcXVpcmVkJyxyZXF1aXJlZEltcGxlbWVudGF0aW9uLCk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdFNlbGVjdC5wcm90b3R5cGUsJ3JlcXVpcmVkJyxyZXF1aXJlZEltcGxlbWVudGF0aW9uLCk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdFJhZGlvR3JvdXAucHJvdG90eXBlLCdyZXF1aXJlZCcscmVxdWlyZWRJbXBsZW1lbnRhdGlvbiwpO1xyXG4gICAgLy9yZXF1aXJlZCBmaWVsZCBlbmRcclxuXHJcbiAgICBcclxuXHJcbiAgICAgaWYgKHRoaXMudmljdGltRGV0YWlsIT1udWxsKSB7XHJcbiAgICAgICAvLyBlZGl0IHJlY29yZFxyXG4gICAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTsgXHJcbiAgICAgIHRoaXMuc2hvd0RlbGV0ZT0gdHJ1ZTsgICAgIFxyXG4gICAgICB0aGlzLnZpY3RpbUlkID0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmd1YXJkaWFuVGFiRmxhZyA9IHRoaXMudmljdGltRGV0YWlsLm1pbm9yRmxhZztcclxuXHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwudmljdGltQWR2b2NhdGVGbGFnPT0nWVMnKXtcclxuICAgICAgICAgICAgdGhpcy5hZHZvY2F0ZVRhYkZsYWcgPSB0cnVlO1xyXG4gICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMub3RoZXJXZWFwb25GbGFnID09IHRydWUpe1xyXG4gICAgICAgIGNvbnN0IG90aGVyV2VhcG9uQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ290aGVyV2VhcG9uJyk7XHJcbiAgICAgICAgb3RoZXJXZWFwb25Db250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5vdGhlckRydWdGbGFnID09IHRydWUpe1xyXG4gICAgICAgIGNvbnN0IG90aGVyRHJ1Z0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKTtcclxuICAgICAgICBvdGhlckRydWdDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNwb0V4cGlyYXRpb25EaXZGbGFnICA9dGhpcy52aWN0aW1EZXRhaWwuY3BvRXhwaXJhdGlvbkZsYWc7XHJcbiAgICAgIHRoaXMuY29tbW9uQ2hpbGRyZW5EaXZGbGFnID0gdGhpcy52aWN0aW1EZXRhaWwuY29tbW9uQ2hpbGRyZW5GbGFnO1xyXG4gICAgICB0aGlzLnN1cHBvcnRJblBsYWNlRGl2RmxhZz0gIHRoaXMudmljdGltRGV0YWlsLnN1cHBvcnRJblBsYWNlRmxhZztcclxuICAgICAgdGhpcy53ZWFwb25JbnZvbHZlZERpdkZsYWc9ICB0aGlzLnZpY3RpbURldGFpbC53ZWFwb25JbnZvbHZlZEZsYWc7XHJcbiAgICAgIHRoaXMuZHJ1Z1VzZURpdkZsYWc9ICB0aGlzLnZpY3RpbURldGFpbC5kcnVnVXNlRmxhZztcclxuICAgICAgdGhpcy5hZGRyZXNzSWQgPSB0aGlzLnZpY3RpbURldGFpbC5hZGRyZXNzSWQ7XHJcbiAgICAgIHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQgPSAgdGhpcy52aWN0aW1EZXRhaWwuZ3VhcmRpYW5BZGRyZXNzSWQ7XHJcbiAgICAgIHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQgPSAgdGhpcy52aWN0aW1EZXRhaWwuYWR2b2NhdGVBZGRyZXNzSWQ7XHJcblxyXG4gICAgICB0aGlzLl9nZXRWaWN0aW0oKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvL2FkZCBuZXcgcmVjb3JkXHJcbiAgICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHtndWFyZGlhbk5vUGhvbmVGbGFnOiB0cnVlfSk7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHthZHZvY2F0ZU5vUGhvbmVGbGFnOiB0cnVlfSk7XHJcbiAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRGbGFnT3B0aW9uWWVzTm9Vbmtub3ducygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmZsYWdPcHRpb24gPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRHZW5kZXJzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2VuZGVycyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldFByZWZpeGVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJlZml4ZXMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRTdWZmaXhlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnN1ZmZpeGVzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0UmVsYXRpb25zaGlwVHlwZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWxhdGlvbnNoaXBUeXBlcyA9IGl0ZW1zLmZpbHRlciggKHkpID0+ICh5LnJlbGF0aW9uc2hpcENhdGVnb3J5SWQgPT09ICdTVCcgfHwgeS5yZWxhdGlvbnNoaXBDYXRlZ29yeUlkID09PSAnRk0nICkpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldFN1cHBvcnRUeXBlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnZpY3RpbVN1cHBvcnRUeXBlcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldFdlYXBvblR5cGVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMud2VhcG9uVHlwZXMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXREcnVnc1R5cGVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkcnVnIGxvb2t1cCBpdGVtcycpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGl0ZW1zKTtcclxuICAgICAgICB0aGlzLmRydWdzID0gaXRlbXM7XHJcbiAgICAgICAgdGhpcy5kcnVncy5wdXNoKHtkcnVnVHlwZUlkOiAnT1RIRVInLCBuYW1lOiAnT3RoZXInfSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5kcnVncyk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICAvLyB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0RG9ja2V0TGlzdCh0aGlzLm9mZmVuZGVySWQpLnN1YnNjcmliZShcclxuICAgIC8vICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgIC8vICAgICB0aGlzLmRvY2tldGxpc3QgPSBpdGVtcztcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICk7XHJcblxyXG4gICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnbWlub3JGbGFnJykudmFsdWVDaGFuZ2VzXHJcbiAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkxhc3ROYW1lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuV29ya1Bob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuSG9tZVBob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuQ2VsbFBob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgXHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykudmFsdWVDaGFuZ2VzXHJcbiAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUxhc3ROYW1lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlV29ya1Bob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlSG9tZVBob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlQ2VsbFBob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBiYWNrKCl7XHJcblxyXG4gICAgdGhpcy5vblNhdmUuZW1pdCh0aGlzLnZpY3RpbURldGFpbCk7XHJcbiAgICBcclxuICB9XHJcblxyXG4gIGRlbGV0ZVZpY3RpbSgpIHtcclxuICAgIHRoaXMuY29tbW9uRGlhbG9nU2VydmljZVxyXG4gICAgLmNvbmZpcm0oJycsICdEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBWaWN0aW0/JywgJ1llcycsICdObycpXHJcbiAgICAuc3Vic2NyaWJlKHJlcyA9PiB7dGhpcy5yZXN1bHQgPSAgcmVzO1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZGVsZXRlVmljdGltcyh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZClcclxuICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0RlbGV0ZSBTdWNjZXNzZnVsbHkhJywgJycsIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLCB9KTt9XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW0nXSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy52aWN0aW1EZXRhaWwpO1xyXG4gICAgICAgIH1cclxuICAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICByYWRpb01pbm9yQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG4gICAgY29uc3QgZ3VhcmRpYW5MYXN0TmFtZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkxhc3ROYW1lJyk7XHJcbiAgICBjb25zdCBndWFyZGlhbkZpcnN0TmFtZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpO1xyXG5cclxuICBcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5ndWFyZGlhblRhYkZsYWcgPSB0cnVlO1xyXG4gICAgICBndWFyZGlhbkxhc3ROYW1lQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICBndWFyZGlhbkZpcnN0TmFtZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgLy90aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZyA9ICB0cnVlO1xyXG4gICBcclxuICAgICBcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuZ3VhcmRpYW5UYWJGbGFnID0gZmFsc2U7XHJcbiAgICAgIGd1YXJkaWFuTGFzdE5hbWVDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICBndWFyZGlhbkZpcnN0TmFtZUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgXHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cdFx0Z3VhcmRpYW5MYXN0TmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgZ3VhcmRpYW5GaXJzdE5hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgXHJcbiAgfVxyXG5cclxuICByYWRpb0Fkdm9jYXRlQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG5cclxuICAgIGNvbnN0IGFkdm9jYXRlTGFzdE5hbWVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVMYXN0TmFtZScpO1xyXG4gICAgY29uc3QgYWR2b2NhdGVGaXJzdE5hbWVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVGaXJzdE5hbWUnKTtcclxuICAgIC8vIGNvbnN0IGFkdm9jYXRlTm9QaG9uZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZU5vUGhvbmVGbGFnJyk7XHJcbiAgICBcclxuICBcclxuXHJcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSBcIllTXCIpIHtcclxuICAgICAgdGhpcy5hZHZvY2F0ZVRhYkZsYWcgPSB0cnVlO1xyXG4gICAgICBhZHZvY2F0ZUxhc3ROYW1lQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICBhZHZvY2F0ZUZpcnN0TmFtZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgXHJcbiAgICAgIFxyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5hZHZvY2F0ZVRhYkZsYWcgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgICBhZHZvY2F0ZUxhc3ROYW1lQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgYWR2b2NhdGVGaXJzdE5hbWVDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhZHZvY2F0ZUxhc3ROYW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICBhZHZvY2F0ZUZpcnN0TmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgXHJcbiAgfVxyXG5cclxuICByYWRpb0NpY0NoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb21tb25DaGlsZHJlbkRpdkZsYWcgPSB0cnVlO1xyXG4gICAgICAvLyByZXF1cmllIGZpZWxkXHJcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9ycygnY29tbW9uQ2hpbGRyZW4nKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuY29tbW9uQ2hpbGRyZW5EaXZGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRWYWxpZGF0b3JzKHR5cGUpIHtcclxuICAgIGlmKHR5cGUgPT0gJ2NvbW1vbkNoaWxkcmVuJyl7XHJcbiAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdjb21tb25DaGlsZHJlbk51bWJlcicpLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnY29tbW9uQ2hpbGRyZW5OdW1iZXInKS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICB9XHJcbiAgIGVsc2UgaWYgKHR5cGUgPT0gJ2Nwbycpe1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnY3BvRXhwaXJhdGlvbkRhdGUnKS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Nwb0V4cGlyYXRpb25EYXRlJykuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgIH1cclxuICB9XHJcbiAgcmFkaW9TdXBwb3J0Q2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG4gICAgaWYgKCRldmVudC52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnN1cHBvcnRJblBsYWNlRGl2RmxhZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLnN1cHBvcnRJblBsYWNlRGl2RmxhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICByYWRpb1dlYXBvbkNoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy53ZWFwb25JbnZvbHZlZERpdkZsYWcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy53ZWFwb25JbnZvbHZlZERpdkZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmFkaW9EcnVnQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG4gICAgaWYgKCRldmVudC52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmRydWdVc2VEaXZGbGFnID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuZHJ1Z1VzZURpdkZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJhZGlvQ3BvQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG4gICAgaWYgKCRldmVudC52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNwb0V4cGlyYXRpb25EaXZGbGFnID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZXRWYWxpZGF0b3JzKCdjcG8nKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuY3BvRXhwaXJhdGlvbkRpdkZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZURPQkNoYW5nZSgkZXZlbnQgKXtcclxuICAgdmFyIGFnZURpZk1zID0gRGF0ZS5ub3coKSAtICAkZXZlbnQudmFsdWU7XHJcbiAgIHZhciBhZ2VEYXRlID0gbmV3IERhdGUoYWdlRGlmTXMpOyBcclxuICAgIGlmKCBNYXRoLmFicyhhZ2VEYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTcwKSA8PSAxOCl7XHJcbiAgICAgXHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdWaWN0aW0gaXMgYSBNaW5vci4gVGhpcyBpbmZvcm1hdGlvbiBpcyBhIHNlbnNpdGl2ZSBhbmQgc2hvdWxkIG5vdCBiZSBkaXNjbG9zZWQgdG8gYW55IHVuYXV0aG9yaXplZCBwYXJ0aWVzLiBDb250YWN0IHRoZSBsZWdhbCBndWFyZGlhbi4nLCAnJywge1xyXG4gICAgICAgIGR1cmF0aW9uOiA2MDAwLH0pO1xyXG4gICAgICAgIGNvbnN0IG1pbm9yQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpO1xyXG4gICAgICAgIG1pbm9yQ29udHJvbC5zZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgICBjb25zdCBndWFyZGlhbkxhc3ROYW1lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuTGFzdE5hbWUnKTtcclxuICAgICAgICBjb25zdCBndWFyZGlhbkZpcnN0TmFtZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpO1xyXG4gICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5ndWFyZGlhblRhYkZsYWcgPSB0cnVlO1xyXG4gICAgICAgIGd1YXJkaWFuTGFzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgZ3VhcmRpYW5GaXJzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgIFxyXG4gICBcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGNoZWNrT3RoZXJXZWFwb24oV2VhcG9uVXNlKXtcclxuXHJcbiAgICBjb25zdCBvdGhlcldlYXBvbkNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpO1xyXG4gICAgIGlmIChXZWFwb25Vc2UuaW5jbHVkZXMoXCJPVEhFUlwiKSl7XHJcbiAgICAgdGhpcy5vdGhlcldlYXBvbkZsYWcgPSB0cnVlO1xyXG4gICAgIG90aGVyV2VhcG9uQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcblxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMub3RoZXJXZWFwb25GbGFnID0gZmFsc2U7XHJcbiAgICAgIG90aGVyV2VhcG9uQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIH1cclxuICAgb3RoZXJXZWFwb25Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrT3RoZXJEcnVnKERydWdVc2Upe1xyXG5cclxuICAgIGNvbnN0IG90aGVyRHJ1Z0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKTtcclxuICAgICBpZiAoRHJ1Z1VzZS5pbmNsdWRlcyhcIk9USEVSXCIpKXtcclxuICAgICB0aGlzLm90aGVyRHJ1Z0ZsYWcgPSB0cnVlO1xyXG4gICAgIG90aGVyRHJ1Z0NvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gIFxyXG5cclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLm90aGVyRHJ1Z0ZsYWcgPSBmYWxzZTtcclxuICAgICAgb3RoZXJEcnVnQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIFxyXG5cclxuICAgIH1cclxuICAgb3RoZXJEcnVnQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG4gXHJcbiAgLy8jcmVnaW9uIFwic2F2ZSB2aWN0aW1cIlxyXG4gIHNhdmVWaWN0aW0oKSB7XHJcbiAgICAvL3ZhciBteVBhdGggID0gIHRoaXMucm91dGVyLnVybC5zbGljZSgtMTApXHJcblxyXG4gIC8vZ3VhcmRpYW4gcGhvbmUgbG9naWNcclxuICBpZiAoIXRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnKVxyXG4gICB7XHJcbiAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkhvbWVQaG9uZSl7XHJcbiAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lICE9PSBudWxsKXtcclxuICAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkhvbWVQaG9uZSAhPT0gXCJcIil7XHJcbiAgICAgICAgICAgICB0aGlzLmd1YXJkaWFuUGhvbmVFeGlzdEZsYWcgPSAgdHJ1ZTtcclxuICAgICAgIH1cclxuICAgICB9XHJcbiAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Xb3JrUGhvbmUgIT09IHVuZGVmaW5lZCl7XHJcbiAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Xb3JrUGhvbmUgIT09IG51bGwpe1xyXG4gICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Xb3JrUGhvbmUgIT09IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmd1YXJkaWFuUGhvbmVFeGlzdEZsYWcgPSAgdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuQ2VsbFBob25lKXtcclxuICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSAhPT0gbnVsbCl7XHJcbiAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxob25lICE9PSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnID0gIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIFxyXG4gICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZyk7XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmd1YXJkaWFuUGhvbmVFeGlzdEZsYWcpO1xyXG4gXHJcblxyXG4gICAgaWYgKHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyA9PT0gZmFsc2UgJiYgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcgPT09IGZhbHNlKVxyXG4gICAge1xyXG4gICAgIFxyXG4gICAgICAgICAgdGhpcy5waG9uZVZhbGlkYXRpb25GbGFnID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uRGlhbG9nU2VydmljZVxyXG4gICAgICAgICAgLndhcm5pbmcoJycsICdQbGVhc2UgY2hlY2sgdGhlIGd1YXJkaWFuIHBob25lIGZpZWxkLiBZb3UgaGF2ZSB0byBmaWxsIG9uZSBvZiB0aGUgdGhyZWUgcGhvbmUgZmlsZWRzLicsICdPaycpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7dGhpcy5yZXN1bHQgPSAgcmVzO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5waG9uZVZhbGlkYXRpb25GbGFnJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcpO1xyXG5cclxuLy9hZHZvY2F0ZSBwaG9uZSBsb2dpY1xyXG5pZiAoIXRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnKVxyXG57XHJcbiAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSl7XHJcbiAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlSG9tZVBob25lICE9PSBudWxsKXtcclxuICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSAhPT0gXCJcIil7XHJcbiAgICAgICAgICB0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcgPSAgdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVXb3JrUGhvbmUgIT09IHVuZGVmaW5lZCl7XHJcbiAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVXb3JrUGhvbmUgIT09IG51bGwpe1xyXG4gICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVXb3JrUGhvbmUgIT09IFwiXCIpe1xyXG4gICAgICAgICB0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcgPSAgdHJ1ZTtcclxuICAgfVxyXG4gfVxyXG4gfVxyXG5cclxuXHJcbiBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlQ2VsbFBob25lKXtcclxuICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZSAhPT0gbnVsbCl7XHJcbiAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxob25lICE9PSBcIlwiKXtcclxuICAgICAgICAgdGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnID0gIHRydWU7XHJcbiAgIH1cclxuIH1cclxuIH1cclxuXHJcbn1cclxuXHJcbiBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWcnKTtcclxuIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnKTtcclxuIGNvbnNvbGUubG9nKCd0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcnKTtcclxuIGNvbnNvbGUubG9nKHRoaXMuYWR2b2NhdGVQaG9uZUV4aXN0RmxhZyk7XHJcblxyXG4gaWYodGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnID09PSBmYWxzZSAmJiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZyA9PT0gZmFsc2UpXHJcbiB7XHJcbiAgXHJcbiAgICAgICB0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgPSB0cnVlO1xyXG4gICAgICAgdGhpcy5jb21tb25EaWFsb2dTZXJ2aWNlXHJcbiAgICAgICAud2FybmluZygnJywgJ1BsZWFzZSBjaGVjayB0aGUgYWR2b2NhdGUgcGhvbmUgZmllbGQuIFlvdSBoYXZlIHRvIGZpbGwgb25lIG9mIHRoZSB0aHJlZSBwaG9uZSBmaWxlZHMuJywgJ09rJylcclxuICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHt0aGlzLnJlc3VsdCA9ICByZXM7XHJcbiAgICAgICAgIFxyXG4gICAgICAgfSk7XHJcbiB9XHJcblxyXG5cclxuICBjb25zb2xlLmxvZygndGhpcy5waG9uZVZhbGlkYXRpb25GbGFnIDEnKTtcclxuICBjb25zb2xlLmxvZyh0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcpO1xyXG4gaWYgKCB0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgPT09IGZhbHNlKXtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltRGV0YWlsID09PSBudWxsKXtcclxuICAgICAgLy9pbnNlcnQgbmV3IHZpY3RpbVxyXG4gXHJcbiAgICAgdmFyIG15VmljdGltU3VwcG9ydHMgPSBbXTtcclxuICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVN1cHBvcnRzKXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVN1cHBvcnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGNvbnN0IHZpY3RpbVN1cHBvcnQ9IDxWaWN0aW1TdXBwb3J0Pnt9O1xyXG4gICAgICAgICAgICB2aWN0aW1TdXBwb3J0LnZpY3RpbUlkPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltSWQ7XHJcbiAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQudmljdGltU3VwcG9ydFR5cGVJZD0gZWxlbWVudDtcclxuICAgICAgICAgICAgdmljdGltU3VwcG9ydC5tb2RpZmllZEJ5PSB0aGlzLnN0YWZmSWQ7XHJcbiAgICAgICAgICAgIG15VmljdGltU3VwcG9ydHMucHVzaCh2aWN0aW1TdXBwb3J0KTtcclxuICAgICAgICAgfSk7XHJcbiAgICAgfVxyXG5cclxuICAgIHZhciBteVZpY3RpbURydWdVc2VzID0gW107XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGR1cmluZyBzYXZlJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpO1xyXG4gICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyl7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgIGNvbnN0IHZpY3RpbURydWdVc2UgPSA8VmljdGltRHJ1Z1VzZT57fTtcclxuICAgICB2aWN0aW1EcnVnVXNlLmRydWdUeXBlSWQgPSBlbGVtZW50O1xyXG5cclxuICAgICBpZiAoZWxlbWVudCA9PT1cIk9USEVSXCIgfHwgZWxlbWVudCA9PT0gXCJcIiB8fCBlbGVtZW50ID09PSBudWxsKXtcclxuICAgICAgdmljdGltRHJ1Z1VzZS5kcnVnVHlwZUlkID0gbnVsbDtcclxuICAgICAgdmljdGltRHJ1Z1VzZS5vdGhlckRydWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUub3RoZXJEcnVnO1xyXG4gICAgIH1cclxuICAgICBlbHNle1xyXG4gICAgICB2aWN0aW1EcnVnVXNlLmRydWdUeXBlSWQgPSBlbGVtZW50O1xyXG4gICAgICB2aWN0aW1EcnVnVXNlLm90aGVyRHJ1ZyA9IG51bGw7IFxyXG4gICAgIH1cclxuICAgICBcclxuICAgICB2aWN0aW1EcnVnVXNlLm1vZGlmaWVkQnkgPSB0aGlzLnN0YWZmSWQ7XHJcbiAgICAgdmljdGltRHJ1Z1VzZS52aWN0aW1JZCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1JZDtcclxuICAgICBteVZpY3RpbURydWdVc2VzLnB1c2godmljdGltRHJ1Z1VzZSk7XHJcbiAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyBkdXJpbmcgc2F2ZSAxJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpO1xyXG5cclxuXHJcblxyXG4gIHZhciBteVZpY3RpbVdlYXBvblVzZXMgPSBbXTtcclxuXHJcbiAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1XZWFwb25Vc2VzKXtcclxuICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1XZWFwb25Vc2VzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICBjb25zdCB2aWN0aW1XZWFwb25Vc2UgPSA8VmljdGltV2VhcG9uVXNlPnt9O1xyXG4gICAgICAgdmljdGltV2VhcG9uVXNlLnZpY3RpbUlkPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbUlkO1xyXG4gICAgICAgdmljdGltV2VhcG9uVXNlLndlYXBvblR5cGVJZD0gZWxlbWVudDtcclxuXHJcbiAgICAgICBpZiAoZWxlbWVudCA9PVwiT1RIRVJcIil7XHJcbiAgICAgICAgdmljdGltV2VhcG9uVXNlLm90aGVyV2VhcG9uID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm90aGVyV2VhcG9uO1xyXG4gICAgICAgfVxyXG4gICAgICAgZWxzZXtcclxuICAgICAgICB2aWN0aW1XZWFwb25Vc2Uub3RoZXJXZWFwb24gPSBudWxsOyBcclxuICAgICAgIH1cclxuXHJcbiAgICAgICB2aWN0aW1XZWFwb25Vc2UubW9kaWZpZWRCeT0gdGhpcy5zdGFmZklkO1xyXG4gICAgICAgbXlWaWN0aW1XZWFwb25Vc2VzLnB1c2godmljdGltV2VhcG9uVXNlKTtcclxuICAgfSk7XHJcbiB9XHJcblxyXG4gY29uc3QgbmV3VmljdGltID0ge1xyXG4gICAgICAgICB2aWN0aW1JZDogMCxcclxuICAgICAgICAgb2ZmZW5kZXJJZDogdGhpcy5vZmZlbmRlcklkLFxyXG4gICAgICAgICB2aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZDp0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQsXHJcbiAgICAgICAgIGxhc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUubGFzdE5hbWUsXHJcbiAgICAgICAgIGZpcnN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmZpcnN0TmFtZSxcclxuICAgICAgICAgbWlkZGxlTmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pZGRsZU5hbWUgID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pZGRsZU5hbWUgOiBudWxsLFxyXG4gICAgICAgICBwcmVmaXhJZDp0aGlzLnZpY3RpbUZvcm0udmFsdWUucHJlZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUucHJlZml4SWQgOiBudWxsICxcclxuICAgICAgICAgc3VmZml4SWQ6dGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1ZmZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1ZmZpeElkOiBudWxsLFxyXG4gICAgICAgICBiaXJ0aERhdGU6dGhpcy52aWN0aW1Gb3JtLnZhbHVlLmJpcnRoRGF0ZT8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmJpcnRoRGF0ZSA6IG51bGwsXHJcbiAgICAgICAgIGdlbmRlckNvZGU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5nZW5kZXJDb2RlPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ2VuZGVyQ29kZTogbnVsbCxcclxuICAgICAgICAgdW5kZXJTdXBlcnZpc2lvbkZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS51bmRlclN1cGVydmlzaW9uRmxhZyxcclxuICAgICAgICAgbWlub3JGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUubWlub3JGbGFnLFxyXG4gICAgICAgICB2aWN0aW1BZHZvY2F0ZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1BZHZvY2F0ZUZsYWcsXHJcbiAgICAgICAgIGhvbWVQaG9uZTogIHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmUgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuaG9tZVBob25lIDogbnVsbCxcclxuICAgICAgICAgd29ya1Bob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUud29ya1Bob25lID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndvcmtQaG9uZSA6IG51bGwsXHJcbiAgICAgICAgIGNlbGxQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNlbGxQaG9uZSA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5jZWxsUGhvbmU6IG51bGwsXHJcbiAgICAgICAgIGVtYWlsOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1haWwgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1haWw6IG51bGwsXHJcbiAgICAgICAgIGFkZHJlc3NJZDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkZHJlc3NJZCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZGRyZXNzSWQ6IDEsXHJcbiAgICAgICAgIGVtZXJnZW5jeUNvbnRhY3Q6IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0ICA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0IDogbnVsbCxcclxuICAgICAgICAgZW1lcmdlbmN5Q29udGFjdFBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdFBob25lID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RQaG9uZTogbnVsbCAsXHJcbiAgICAgICAgIGNvbW1vbkNoaWxkcmVuRmxhZzogIHRoaXMudmljdGltRm9ybS52YWx1ZS5jb21tb25DaGlsZHJlbkZsYWcsXHJcbiAgICAgICAgIGNvbW1vbkNoaWxkcmVuTnVtYmVyOiAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNvbW1vbkNoaWxkcmVuTnVtYmVyLFxyXG4gICAgICAgICBjcG9FeHBpcmF0aW9uRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNwb0V4cGlyYXRpb25GbGFnLFxyXG4gICAgICAgICBjcG9FeHBpcmF0aW9uRGF0ZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNwb0V4cGlyYXRpb25EYXRlID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN0YXJ0RGF0ZSwgJ3Nob3J0JykgOiBudWxsLFxyXG4gICAgICAgICBzdXBwb3J0SW5QbGFjZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5zdXBwb3J0SW5QbGFjZUZsYWcsXHJcbiAgICAgICAgIHdlYXBvbkludm9sdmVkRmxhZzogIHRoaXMudmljdGltRm9ybS52YWx1ZS53ZWFwb25JbnZvbHZlZEZsYWcsXHJcbiAgICAgICAgIGRydWdVc2VGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZHJ1Z1VzZUZsYWcsXHJcbiAgICAgICAgIGFsY29ob2xVc2VGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWxjb2hvbFVzZUZsYWcsXHJcbiAgICAgICAgIGFjY2Vzc1Jpc2s6dGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFjY2Vzc1Jpc2ssXHJcbiAgICAgICAgIG1vZGlmaWVkQnk6dGhpcy5zdGFmZklkLFxyXG4gICAgICAgICB2VmljdGltQWR2b2NhdGU6IG51bGwsXHJcbiAgICAgICAgIHZWaWN0aW1HdWFyZGlhbjogbnVsbCxcclxuICAgICAgICAgdmljdGltRHJ1Z1VzZXM6IG15VmljdGltRHJ1Z1VzZXMsXHJcbiAgICAgICAgIHZpY3RpbVN1cHBvcnRzOiBteVZpY3RpbVN1cHBvcnRzLFxyXG4gICAgICAgICB2aWN0aW1XZWFwb25Vc2VzOiBteVZpY3RpbVdlYXBvblVzZXMsXHJcblxyXG4gICAgICAgICBhZHZvY2F0ZUZpcnN0TmFtZTogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVMYXN0TmFtZTogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVFbWFpbDogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVQcmVmaXhJZDogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVTdWZmaXhJZDogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVOb1Bob25lRmxhZzogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVIb21lUGhvbmU6IG51bGwsXHJcbiAgICAgICAgIGFkdm9jYXRlV29ya1Bob25lOiBudWxsLFxyXG4gICAgICAgICBhZHZvY2F0ZUNlbGxQaG9uZTogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVBZGRyZXNzSWQ6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuRmlyc3ROYW1lOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbkxhc3ROYW1lOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbkVtYWlsOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhblByZWZpeElkOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhblN1ZmZpeElkOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbk5vUGhvbmVGbGFnOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbkhvbWVQaG9uZTogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5Xb3JrUGhvbmU6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuQ2VsbFBob25lOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbkFkZHJlc3NJZDogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5CaXJ0aERhdGU6IG51bGwsXHJcbiAgICAgICAgIHJlbGF0aW9uc2hpcDogbnVsbCxcclxuICAgICAgICAgYWxsb3dDc29zYUNvbnRhY3RGbGFnOiBudWxsXHJcbiAgICAgICAgIFxyXG5cclxuICAgICAgICAgfVxyXG5cclxuICAgICBpZiAodGhpcy5hZGRyZXNzSWQgPT0gMCl7XHJcbiAgICAgIG5ld1ZpY3RpbS5hZGRyZXNzSWQgPSBudWxsO1xyXG4gICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1ZpY3RpbS5hZGRyZXNzSWQgPSAgdGhpcy5hZGRyZXNzSWQ7XHJcbiAgICAgfVxyXG4gICAgIFxyXG4gICAgIG5ld1ZpY3RpbS5hZHZvY2F0ZUFkZHJlc3NJZCA9ICB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkO1xyXG4gICAgIG5ld1ZpY3RpbS5ndWFyZGlhbkFkZHJlc3NJZCA9ICB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkO1xyXG4gICAgICBjb25zb2xlLmxvZygnbmV3VmljdGltJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKG5ld1ZpY3RpbSk7XHJcbiAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnBvc3RWaWN0aW1zKG5ld1ZpY3RpbSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgIFxyXG4gICAgICAgICBjb25zdCBpZCA9IGl0ZW1zID8gaXRlbXMudmljdGltSWQgOiAnJztcclxuXHJcbiAgICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltQWR2b2NhdGVGbGFnID09IFwiWVNcIil7XHJcbiAgICAgICAgICAgY29uc29sZS5sb2coJ2FkZCBhZHZvY2F0ZScpO1xyXG4gICAgICAgICBjb25zdCB2aWN0aW1BZHZvY2F0ZTogVmljdGltQWR2b2NhdGUgPSB7XHJcbiAgICAgICAgICB2aWN0aW1BZHZvY2F0ZUlkOiBpZCxcclxuICAgICAgICAgIGxhc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVMYXN0TmFtZSxcclxuICAgICAgICAgIGZpcnN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlRmlyc3ROYW1lLFxyXG4gICAgICAgICAgcHJlZml4SWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVByZWZpeElkLFxyXG4gICAgICAgICAgc3VmZml4SWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVN1ZmZpeElkLFxyXG4gICAgICAgICAgYWRkcmVzc0lkOiB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkID8gdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZDogbnVsbCxcclxuICAgICAgICAgIG5vUGhvbmVGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZyA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnOiBudWxsLFxyXG4gICAgICAgICAgaG9tZVBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUsXHJcbiAgICAgICAgICB3b3JrUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSxcclxuICAgICAgICAgIGNlbGxQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlQ2VsbFBob25lLFxyXG4gICAgICAgICAgZW1haWw6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUVtYWlsLFxyXG4gICAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkXHJcbiAgICAgICAgICBcclxuICAgIFxyXG4gICAgICB9O1xyXG4gICAgICAgXHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnBvc3RWaWN0aW1BZHZvY2F0ZShpZCwgdmljdGltQWR2b2NhdGUpLnN1YnNjcmliZSgpO1xyXG4gICAgICB9XHJcbiBcclxuICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pbm9yRmxhZyA9PSB0cnVlKXtcclxuICAgICAgXHJcbiAgICAgICAgY29uc3QgdmljdGltR3VhcmRpYW46IFZpY3RpbUd1YXJkaWFuID0ge1xyXG4gICAgICAgICAgdmljdGltR3VhcmRpYW5JZDogaWQsXHJcbiAgICAgICAgICBsYXN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTGFzdE5hbWUsXHJcbiAgICAgICAgICBmaXJzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkZpcnN0TmFtZSxcclxuICAgICAgICAgIHByZWZpeElkOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5QcmVmaXhJZCwgXHJcbiAgICAgICAgICBzdWZmaXhJZDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuU3VmZml4SWQsXHJcbiAgICAgICAgICBiaXJ0aERhdGU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkJpcnRoRGF0ZSxcclxuICAgICAgICAgIGFkZHJlc3NJZDogdGhpcy5ndWFyZGlhbkFkZHJlc3NJZD8gdGhpcy5ndWFyZGlhbkFkZHJlc3NJZDogbnVsbCxcclxuICAgICAgICAgIG5vUGhvbmVGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZz8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWc6IG51bGwsXHJcbiAgICAgICAgICBob21lUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkhvbWVQaG9uZSxcclxuICAgICAgICAgIHdvcmtQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lLFxyXG4gICAgICAgICAgY2VsbFBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUsXHJcbiAgICAgICAgICBlbWFpbDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuRW1haWwsXHJcbiAgICAgICAgICBtb2RpZmllZEJ5OiB0aGlzLnN0YWZmSWRcclxuICAgICAgICAgIFxyXG4gICAgICAgXHJcbiAgICAgICB9O1xyXG4gICAgICAgXHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnBvc3RWaWN0aW1HdWFyZGlhbihpZCwgdmljdGltR3VhcmRpYW4pLnN1YnNjcmliZSgpO1xyXG4gICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdBZGQgVmljdGltIFN1Y2Nlc3NmdWxseSEnLCAnJywge1xyXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvL2luc2VydCBuZXdcclxuICAgICAgICBpZiAodGhpcy5pc0ludGFrZT09PXRydWUpe1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1Ib21lJ10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1MaXN0J10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL3RoaXMub25TYXZlLmVtaXQodGhpcy52aWN0aW1EZXRhaWwpO1xyXG4gICAgICBcclxuICAgICAgfVxyXG4gICAgICk7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vdXBkYXRlIHZpY3RpbVxyXG4gICAgICBjb25zb2xlLmxvZygnIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZCcpO1xyXG4gICAgICBjb25zb2xlLmxvZyggdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkKTtcclxuIFxyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC51bmRlclN1cGVydmlzaW9uRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS51bmRlclN1cGVydmlzaW9uRmxhZztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5sYXN0TmFtZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5sYXN0TmFtZTtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuZmlyc3ROYW1lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmZpcnN0TmFtZTtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwubWlkZGxlTmFtZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5taWRkbGVOYW1lO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5wcmVmaXhJZCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5wcmVmaXhJZCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5wcmVmaXhJZCA6IG51bGw7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnN1ZmZpeElkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1ZmZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1ZmZpeElkIDogbnVsbDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuYmlydGhEYXRlID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmJpcnRoRGF0ZTtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuZ2VuZGVyQ29kZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5nZW5kZXJDb2RlO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5taW5vckZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUubWlub3JGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5ob21lUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuaG9tZVBob25lPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuaG9tZVBob25lOiBudWxsO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC53b3JrUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUud29ya1Bob25lPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUud29ya1Bob25lOiBudWxsO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5jZWxsUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY2VsbFBob25lPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY2VsbFBob25lOiBudWxsO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5lbWFpbCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWFpbDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltQWR2b2NhdGVGbGFnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbUFkdm9jYXRlRmxhZztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuZW1lcmdlbmN5Q29udGFjdCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0O1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5lbWVyZ2VuY3lDb250YWN0UGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdFBob25lPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdFBob25lOiBudWxsO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5jb21tb25DaGlsZHJlbkZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY29tbW9uQ2hpbGRyZW5GbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5jb21tb25DaGlsZHJlbk51bWJlciA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jb21tb25DaGlsZHJlbk51bWJlcjtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuY3BvRXhwaXJhdGlvbkRhdGUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY3BvRXhwaXJhdGlvbkRhdGU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNwb0V4cGlyYXRpb25GbGFnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNwb0V4cGlyYXRpb25GbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5zdXBwb3J0SW5QbGFjZUZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1cHBvcnRJblBsYWNlRmxhZztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwud2VhcG9uSW52b2x2ZWRGbGFnID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS53ZWFwb25JbnZvbHZlZEZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmRydWdVc2VGbGFnID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5kcnVnVXNlRmxhZztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuYWxjb2hvbFVzZUZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFsY29ob2xVc2VGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5hY2Nlc3NSaXNrID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5hY2Nlc3NSaXNrO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5hZGRyZXNzSWQgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkZHJlc3NJZDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuYWxsb3dDc29zYUNvbnRhY3RGbGFnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFsbG93Q3Nvc2FDb250YWN0RmxhZztcclxuICAgICBcclxuICAgIFxyXG4gICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltU3VwcG9ydHMgPSBbXTtcclxuICAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1TdXBwb3J0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZpY3RpbVN1cHBvcnQ9IDxWaWN0aW1TdXBwb3J0Pnt9O1xyXG4gICAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQudmljdGltSWQ9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xyXG4gICAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQudmljdGltU3VwcG9ydFR5cGVJZD0gZWxlbWVudDtcclxuICAgICAgICAgICAgICB2aWN0aW1TdXBwb3J0Lm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgICAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1TdXBwb3J0cy5wdXNoKHZpY3RpbVN1cHBvcnQpO1xyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltRHJ1Z1VzZXMgPSBbXTtcclxuXHJcbiAgICAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGNhbGN1bGF0ZScpXHJcbiAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpXHJcblxyXG4gICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgdmljdGltRHJ1Z1VzZSA9IDxWaWN0aW1EcnVnVXNlPnt9O1xyXG4gICAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XHJcbiAgICAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGJlZm9yZScpXHJcbiAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpXHJcbiAgICAgICBcclxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gXCJPVEhFUlwiIHx8IGVsZW1lbnQgPT09IFwiXCIgICl7XHJcbiAgICAgICAgICB2aWN0aW1EcnVnVXNlLmRydWdUeXBlSWQgPSBudWxsO1xyXG4gICAgICAgICAgdmljdGltRHJ1Z1VzZS5vdGhlckRydWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUub3RoZXJEcnVnO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICB2aWN0aW1EcnVnVXNlLmRydWdUeXBlSWQgPSBlbGVtZW50O1xyXG4gICAgICAgICAgdmljdGltRHJ1Z1VzZS5vdGhlckRydWcgPSBudWxsO1xyXG4gICAgICAgICB9XHJcblxyXG4gICAgICAgIHZpY3RpbURydWdVc2UubW9kaWZpZWRCeSA9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgICB2aWN0aW1EcnVnVXNlLnZpY3RpbUlkID0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XHJcbiAgICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltRHJ1Z1VzZXMucHVzaCh2aWN0aW1EcnVnVXNlKTtcclxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGFmdGVyJylcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpXHJcbiAgICAgICAgXHJcbiAgICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMuZmlsdGVyKHdvcmQgPT4gKCAhKHdvcmQuZHJ1Z1R5cGVJZCA9PT0gbnVsbCAgJiYgd29yZC5vdGhlckRydWcgPT09IG51bGwpICAgICkpO1xyXG5cclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKCdhZGp1c3QgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzICcpXHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcylcclxuIFxyXG4gICAgIHRoaXMudmljdGltRGV0YWlsLnZpY3RpbVdlYXBvblVzZXMgPSBbXTtcclxuICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltV2VhcG9uVXNlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdmljdGltV2VhcG9uVXNlID0gPFZpY3RpbVdlYXBvblVzZT57fTtcclxuICAgICAgICAgIHZpY3RpbVdlYXBvblVzZS52aWN0aW1JZD0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XHJcbiAgICAgICAgICB2aWN0aW1XZWFwb25Vc2Uud2VhcG9uVHlwZUlkPSBlbGVtZW50OyAgIFxyXG5cclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd3ZWFwb24gZWxlbWVudCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZWxlbWVudCk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUub3RoZXJXZWFwb24pO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVdlYXBvblVzZXMpO1xyXG5cclxuICAgICAgICAgaWYgKGVsZW1lbnQgPT1cIk9USEVSXCIpe1xyXG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLm90aGVyV2VhcG9uPXRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlcldlYXBvbjtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBlbHNle1xyXG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLm90aGVyV2VhcG9uID0gbnVsbDtcclxuICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHZpY3RpbVdlYXBvblVzZS5tb2RpZmllZEJ5PSB0aGlzLnN0YWZmSWQ7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1XZWFwb25Vc2VzLnB1c2godmljdGltV2VhcG9uVXNlKTtcclxuICAgICAgICAgIFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICBcclxuICAgICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRGV0YWlsIGJlZm9yZSBlbWl0Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRGV0YWlsKTtcclxuXHJcbiAgICAgIHRoaXMudmljdGltU2VydmljZS5wdXRWaWN0aW1zKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkLHRoaXMudmljdGltRGV0YWlsKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVXBkYXRlIFN1Y2Nlc3NmdWxseSEnLCAnJywge1xyXG4gICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgLy9BZHZvY2F0ZSBzZWN0aW9uXHJcblxyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS52aWN0aW1BZHZvY2F0ZUlkID0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLmxhc3ROYW1lPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVMYXN0TmFtZTtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuZmlyc3ROYW1lPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVGaXJzdE5hbWU7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLnByZWZpeElkPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVQcmVmaXhJZCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVByZWZpeElkIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuc3VmZml4SWQ9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVN1ZmZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlU3VmZml4SWQgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5hZGRyZXNzSWQ9IHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQgPyB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUubm9QaG9uZUZsYWc9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnPyB0cnVlOiBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuaG9tZVBob25lPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS53b3JrUGhvbmU9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSA6IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLmNlbGxQaG9uZT0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlQ2VsbFBob25lID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlQ2VsbFBob25lIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuZW1haWw9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUVtYWlsID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlRW1haWwgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5tb2RpZmllZEJ5PSB0aGlzLnN0YWZmSWQ7XHJcbiAgICAgIFxyXG4gICAgICBcclxuICAgICAgIFxyXG4gICAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwudmljdGltQWR2b2NhdGVGbGFnPT0nWVMnICYmIHRoaXMudmljdGltRGV0YWlsLmFkdm9jYXRlRmlyc3ROYW1lICE9IG51bGwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnB1dFZpY3RpbUFkdm9jYXRlKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkLHRoaXMudmljdGltQWR2b2NhdGUpLnN1YnNjcmliZShcclxuICAgICAgICAgIHJlc3A9PntcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdhZGQgYWR2b2NhdGUnKTtcclxuICAgICAgICAgIHRoaXMudmljdGltU2VydmljZS5wb3N0VmljdGltQWR2b2NhdGUodGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQsIHRoaXMudmljdGltQWR2b2NhdGUpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgLy8gZ3VhcmRpYW4gc2VjdGlvblxyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi52aWN0aW1HdWFyZGlhbklkID0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmxhc3ROYW1lID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkxhc3ROYW1lO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5maXJzdE5hbWUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5GaXJzdE5hbWU7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLnByZWZpeElkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuUHJlZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5QcmVmaXhJZCA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLnN1ZmZpeElkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuU3VmZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5TdWZmaXhJZCA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmFkZHJlc3NJZCA9IHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQgPyB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkIDogbnVsbDtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4ubm9QaG9uZUZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWc/IHRydWU6IGZhbHNlO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5ob21lUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUgPyAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lIDogbnVsbDtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4ud29ya1Bob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lID8gIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmNlbGxQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmVtYWlsID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuRW1haWwgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5FbWFpbCA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLm1vZGlmaWVkQnkgPSB0aGlzLnN0YWZmSWQ7XHJcbiAgXHJcbiAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwubWlub3JGbGFnID09IHRydWUgJiYgdGhpcy52aWN0aW1EZXRhaWwuZ3VhcmRpYW5GaXJzdE5hbWUgIT0gbnVsbCApXHJcbiAgICB7XHJcbiAgICAgIFxyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLnB1dFZpY3RpbUd1YXJkaWFuKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkLHRoaXMudmljdGltR3VhcmRpYW4pLnN1YnNjcmliZShcclxuICAgICByZXNwPT57XHJcbiAgICAgICAgICB9XHJcbiAgICApO1xyXG4gICAgIH1cclxuICAgIGVsc2VcclxuICAgIHtcclxuICAgXHJcbiAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnBvc3RWaWN0aW1HdWFyZGlhbih0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCwgdGhpcy52aWN0aW1HdWFyZGlhbikuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIH1cclxuICAgIFxyXG4gICAgKTtcclxuICAgIFxyXG4gICAgfVxyXG4gIH0vL2VuZCBvZiB0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgPSBmYWxzZVxyXG4gICAgXHJcbiAgICB0aGlzLm9uU2F2ZS5lbWl0KHRoaXMudmljdGltRGV0YWlsKTtcclxuIFxyXG4gICAgICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvbiBcInNhdmUgdmljdGltXCJcclxuICAgICAgYWRkQ29udGFjdCgpe1xyXG5cclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsndmljdGltQ29udGFjdCcsdGhpcy52aWN0aW1JZF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm1hdExhYmVsKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgXHJcbn1cclxuIl19
|
1502
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY3NtYXJ0L25nYy1zbWFydC12aWN0aW0vIiwic291cmNlcyI6WyJsaWIvc21hcnQtdmljdGltLWRldGFpbC9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQWEsV0FBVyxFQUFDLFVBQVUsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxTQUFTLEVBQUMsV0FBVyxFQUFpQixRQUFRLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBYyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUMsTUFBSSx1QkFBdUIsQ0FBQztBQUczRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUc1RCwrQkFFQzs7OztBQUNELDhCQUVDOzs7Ozs7O0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFNBQW9CLEVBQ3ZELFNBQXNCLEVBQ3RCLGNBQXVCO0lBQ3pCLE9BQU87Ozs7SUFBQyxVQUFBLFdBQVc7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDWDs7WUFDRyxLQUFLLEdB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Q0FBQyxDQUFDLElBQUk7b0JBQ2pGLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUMsSUFBSTtvQkFDcEYsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsb0JBQW9CO29CQUNoRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUztvQkFDMUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCO29CQUM1RCxTQUFTLEVBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ3BGLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDbkYsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxJQUFJO29CQUNsRixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDLElBQUk7b0JBQ3RFLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQSxDQUFD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WSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQzlELElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDcEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDcEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDckcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxJQUFJLENB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RXRCLDJDQUFXOztJQUNYLHdEQUF3Qjs7SUFDeEIsOENBQWM7O0lBRWQsOENBQWM7O0lBQ2QsdURBQXVCOztJQUN2Qiw2Q0FBYTs7SUFDYixnREFBZ0I7O0lBQ2hCLGlEQUFpQjs7SUFDakIsZ0RBQWdCOztJQUNoQix5REFBeUI7O0lBQ3pCLGdFQUFnQzs7SUFDaEMsbURBQW1COztJQUNuQix3Q0FBUTs7SUFDUiw0Q0FBcUI7Ozs7O0lBQ3JCLHlDQUFpQjs7SUFDakIsb0RBQXFEOztJQUNyRCxvREFBb0Q7O0lBQ3BELHFEQUFpQzs7SUFDakMsbURBQTZCOztJQUM3QixtREFBNkI7O0lBQzdCLDRDQUFZOztJQUNaLDhDQUFjOztJQUNkLHFEQUFpQzs7SUFDakMscURBQWlDOztJQUNqQywyREFBdUM7O0lBQ3ZDLDBEQUF1Qzs7SUFDdkMsMkRBQXVDOztJQUN2QywyREFBdUM7O0lBQ3ZDLG9EQUFnQzs7SUFDaEMsZ0RBQTRCOztJQUM1QiwrQ0FBc0I7O0lBQ3RCLHVEQUE4Qjs7SUFDOUIsdURBQThCOztJQUM5Qiw4Q0FBaUM7O0lBQ2pDLGtEQUEwRDs7SUFDMUQsaURBQXdCOztJQUN4QixnREFBZ0M7O0lBQ2hDLCtDQUFrQjs7SUFDbEIscURBQWlDOztJQUNqQyxtREFBK0I7O0lBRS9CLHVEQUE0Qzs7SUFDNUMsaURBQXVCOztJQUN2Qiw0REFBeUM7O0lBQ3pDLDREQUF5Qzs7SUFDekMseURBQXNDOztJQUN0Qyw0REFBdUM7O0lBQ3ZDLDREQUF3Qzs7SUFFeEMsdURBT0U7Ozs7O0lBR0EsOENBQTBCOzs7OztJQUMxQixpREFBZ0M7Ozs7O0lBQ2hDLDRDQUF5Qjs7Ozs7SUFDekIsMkNBQTZCOzs7OztJQUM3Qiw0Q0FBc0I7O0lBQ3RCLDhDQUE0Qjs7Ozs7SUFDNUIseURBQWdEOzs7OztJQUNoRCxtREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25DaGFuZ2VzLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsVmFsaWRhdG9ycyxWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLE1hdFNuYWNrQmFyLE1hdFJhZGlvQ2hhbmdlLCBNYXRJbnB1dCwgTWF0U2VsZWN0LCBNYXRSYWRpb0dyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnO1xyXG5pbXBvcnQgeyBWaWN0aW0sVmljdGltRHJ1Z1VzZSwgQ29udGFjdCwgVmljdGltQWR2b2NhdGUsVmljdGltR3VhcmRpYW4sVmljdGltV2VhcG9uVXNlLFZpY3RpbVN1cHBvcnQgfSBmcm9tICcuLi9zbWFydC12aWN0aW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBOZ2NTbWFydFZpY3RpbVNlcnZpY2UgfSBmcm9tICcuLi9zbWFydC12aWN0aW0uc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb21tb25EaWFsb2dTZXJ2aWNlfSBmcm9tICcuLi8uL2NvbW1vbi1kaWFsb2cvY29tbW9uLWRpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUsIGZvcm1hdERhdGUsIExvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eX1mcm9tJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IHRydW5jYXRlIH0gZnJvbSAnZnMnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgQWRkcmVzc1ZhbGlkYXRvcnMsIFNtYXJ0QWRkcmVzc0NvbXBvbmVudCB9IGZyb20gJ0Bjc21hcnQvbmdjLXNtYXJ0LWFkZHJlc3MnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCb29sZWFuRm4ge1xyXG4gICgpOiBib29sZWFuO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nRm4ge1xyXG4gICgpOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25kaXRpb25hbFZhbGlkYXRvcihwcmVkaWNhdGU6IEJvb2xlYW5GbixcclxuICB2YWxpZGF0b3I6IFZhbGlkYXRvckZuLFxyXG4gIGVycm9yTmFtZXNwYWNlPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG5yZXR1cm4gKGZvcm1Db250cm9sID0+IHtcclxuaWYgKCFmb3JtQ29udHJvbC5wYXJlbnQpIHtcclxucmV0dXJuIG51bGw7XHJcbn1cclxubGV0IGVycm9yID0gbnVsbDtcclxuaWYgKHByZWRpY2F0ZSgpKSB7XHJcbmVycm9yID0gdmFsaWRhdG9yKGZvcm1Db250cm9sKTtcclxufVxyXG5pZiAoZXJyb3JOYW1lc3BhY2UgJiYgZXJyb3IpIHtcclxuY29uc3QgY3VzdG9tRXJyb3IgPSB7fTtcclxuY3VzdG9tRXJyb3JbZXJyb3JOYW1lc3BhY2VdID0gZXJyb3I7XHJcbmVycm9yID0gY3VzdG9tRXJyb3JcclxufVxyXG5yZXR1cm4gZXJyb3I7XHJcbn0pXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nQ29uZGl0aW9uYWxWYWxpZGF0b3IocHJlZGljYXRlOiBTdHJpbmdGbixcclxuICB2YWxpZGF0b3I6IFZhbGlkYXRvckZuLFxyXG4gIGVycm9yTmFtZXNwYWNlPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG5yZXR1cm4gKGZvcm1Db250cm9sID0+IHtcclxuaWYgKCFmb3JtQ29udHJvbC5wYXJlbnQpIHtcclxucmV0dXJuIG51bGw7XHJcbn1cclxubGV0IGVycm9yID0gbnVsbDtcclxuaWYgKHByZWRpY2F0ZSgpPT0nWVMnKSB7XHJcbmVycm9yID0gdmFsaWRhdG9yKGZvcm1Db250cm9sKTtcclxufVxyXG5pZiAoZXJyb3JOYW1lc3BhY2UgJiYgZXJyb3IpIHtcclxuY29uc3QgY3VzdG9tRXJyb3IgPSB7fTtcclxuY3VzdG9tRXJyb3JbZXJyb3JOYW1lc3BhY2VdID0gZXJyb3I7XHJcbmVycm9yID0gY3VzdG9tRXJyb3JcclxufVxyXG5yZXR1cm4gZXJyb3I7XHJcbn0pXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY3NtYXJ0LXZpY3RpbS1kZXRhaWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtDb21tb25EaWFsb2dTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRWaWN0aW1EZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgdmljdGltRGV0YWlsID0gPFZpY3RpbT57fTtcclxuICBASW5wdXQoKSBzdGFmZklkOiBudW1iZXI7XHJcbiAgQElucHV0KCkgb2ZmZW5kZXJJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGlzSW50YWtlOiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBcclxuXHJcbiAgdmljdGltSWQ6IG51bWJlcjtcclxuICB2aWN0aW1Gb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIGRydWdzOiBhbnk7XHJcbiAgdmljdGltU3VwcG9ydFR5cGVzOiBhbnk7XHJcbiAgcHJlZml4ZXM6IGFueTtcclxuICAvL3ZpY3RpbTogVmljdGltID0gPFZpY3RpbT57fTtcclxuICBzdWZmaXhlczogYW55O1xyXG4gIHJlbGF0aW9uc2hpcFR5cGVzOiBhbnk7XHJcbiAgZ2VuZGVyczogYW55O1xyXG4gIGRvY2tldGxpc3Q6IGFueTtcclxuICB3ZWFwb25UeXBlczogYW55O1xyXG4gIGZsYWdPcHRpb246IGFueTtcclxuICBzZWxlY3RlZFdlYXBvblR5cGVzOiBhbnk7XHJcbiAgc2VsZWN0ZWRWaWN0aW1TdXBwb3J0VHlwZXM6IGFueTtcclxuICBzZWxlY3RlZERydWdzOiBhbnk7XHJcbiAgaWQ6IGFueTtcclxuICBoaWRkZW46IGJvb2xlYW49dHJ1ZTtcclxuICBwcml2YXRlIHN1YjogYW55O1xyXG4gIHZpY3RpbUFkdm9jYXRlOiBWaWN0aW1BZHZvY2F0ZSA9ICA8VmljdGltQWR2b2NhdGU+e307XHJcbiAgdmljdGltR3VhcmRpYW46IFZpY3RpbUd1YXJkaWFuID0gPFZpY3RpbUd1YXJkaWFuPnt9OyBcclxuICB2aWN0aW1XZWFwb25Vc2U6IFZpY3RpbVdlYXBvblVzZTtcclxuICB2aWN0aW1TdXBwb3J0OiBWaWN0aW1TdXBwb3J0O1xyXG4gIHZpY3RpbURydWdVc2U6IFZpY3RpbURydWdVc2U7XHJcbiAgcmVzdWx0OiBhbnk7XHJcbiAgZWRpdE1vZGU6IGFueTtcclxuICBndWFyZGlhblRhYkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhZHZvY2F0ZVRhYkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb21tb25DaGlsZHJlbkRpdkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjcG9FeHBpcmF0aW9uRGl2RmxhZyA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdXBwb3J0SW5QbGFjZURpdkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB3ZWFwb25JbnZvbHZlZERpdkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkcnVnVXNlRGl2RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dEZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhZGRyZXNzSWQ6IG51bWJlciA9IDA7XHJcbiAgYWR2b2NhdGVBZGRyZXNzSWQ6IG51bWJlciA9IDA7XHJcbiAgZ3VhcmRpYW5BZGRyZXNzSWQ6IG51bWJlciA9IDA7XHJcbiAgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XHJcbiAgZW1haWxQYXR0ZXJuID0gXCJeW2EtejAtOS5fJSstXStAW2EtejAtOS4tXStcXC5bYS16XXsyLDR9JFwiO1xyXG4gIHBob25lTnVtYmVyID0gXCJcXFxcZHsxMH1cIjtcclxuICBlZGl0VmljdGltOiBWaWN0aW0gPSA8VmljdGltPnt9O1xyXG4gIHZpY3RpbUFnZTogbnVtYmVyO1xyXG4gIG90aGVyV2VhcG9uRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG90aGVyRHJ1Z0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29udGFjdERhdGFTb3VyY2U9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuICBjb250YWN0TGlzdDogQ29udGFjdFtdO1xyXG4gIGd1YXJkaWFuUGhvbmVFeGlzdEZsYWc6IGJvb2xlYW4gPSAgZmFsc2U7XHJcbiAgYWR2b2NhdGVQaG9uZUV4aXN0RmxhZzogYm9vbGVhbiA9ICBmYWxzZTtcclxuICBwaG9uZVZhbGlkYXRpb25GbGFnOiBib29sZWFuID0gIGZhbHNlO1xyXG4gIGd1YXJpZGFuTm9QaG9uZUNoa0ZsYWc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGFkdm9jYXRlTm9QaG9uZUNoa0ZsYWc6IGJvb2xlYW4gPSAgdHJ1ZTtcclxuXHJcbiAgYWRkcmVzc1ZhbGlkYXRvcnM6IEFkZHJlc3NWYWxpZGF0b3JzID0ge1xyXG4gICAgc3RyZWV0OiBbXSxcclxuICAgIHN0cmVldDI6IFtdLFxyXG4gICAgY2l0eTogW10sXHJcbiAgICBzdGF0ZUNvZGU6IFtdLFxyXG4gICAgemlwQ29kZTogW10sXHJcbiAgICBwc2FDb2RlOiBbXSxcclxuICB9O1xyXG5cclxuIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgIHByaXZhdGUgY29tbW9uRGlhbG9nU2VydmljZTogQ29tbW9uRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgdmljdGltU2VydmljZTogTmdjU21hcnRWaWN0aW1TZXJ2aWNlKSB7XHJcbiAgICAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgaW5pdEZvcm0oKSB7XHJcbiAgICBcclxuICAgIHRoaXMudmljdGltRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICB1bmRlclN1cGVydmlzaW9uRmxhZzogIG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcclxuICAgICAgdmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQ6bmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxyXG4gICAgICBsYXN0TmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxyXG4gICAgICBmaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcclxuICAgICAgbWlkZGxlTmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBwcmVmaXhJZDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBzdWZmaXhJZDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBnZW5kZXJDb2RlOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYmlydGhEYXRlOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGhvbWVQaG9uZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdKSksXHJcbiAgICAgIGNlbGxQaG9uZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdKSksXHJcbiAgICAgIHdvcmtQaG9uZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdKSksXHJcbiAgICAgIGVtYWlsOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5lbWFpbFBhdHRlcm4pIF0pKSxcclxuICAgICAgbWlub3JGbGFnOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcclxuICAgICAgdmljdGltQWR2b2NhdGVGbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXHJcbiAgICAgIGd1YXJkaWFuTGFzdE5hbWU6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBndWFyZGlhbkZpcnN0TmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCksXHJcbiAgICAgIGd1YXJkaWFuUHJlZml4SWQ6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBndWFyZGlhblN1ZmZpeElkOiBuZXcgRm9ybUNvbnRyb2woJycsICksICAgICAgICBcclxuICAgICAgLy9ndWFyZGlhbkdlbmRlcjpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGd1YXJkaWFuQmlydGhEYXRlOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGd1YXJkaWFuTm9QaG9uZUZsYWc6bmV3IEZvcm1Db250cm9sKHRydWUpLFxyXG5cclxuICAgICAgZ3VhcmRpYW5Ib21lUGhvbmU6bmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdICkpLFxyXG4gICAgICBndWFyZGlhbkNlbGxQaG9uZTpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucGhvbmVOdW1iZXIpIF0gKSksXHJcbiAgICAgIGd1YXJkaWFuV29ya1Bob25lOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5waG9uZU51bWJlcikgXSApKSxcclxuICAgICBcclxuICAgICBcclxuICAgICAgZ3VhcmRpYW5FbWFpbDpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuZW1haWxQYXR0ZXJuKSBdKSksXHJcbiAgICAgIGFkdm9jYXRlTm9QaG9uZUZsYWc6IG5ldyBGb3JtQ29udHJvbCh0cnVlKSxcclxuICBcclxuXHJcbiAgICAgIGFkdm9jYXRlV29ya1Bob25lOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucGhvbmVOdW1iZXIpIF0gKSksXHJcbiAgICAgIGFkdm9jYXRlSG9tZVBob25lOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucGhvbmVOdW1iZXIpIF0gKSksXHJcbiAgICAgIGFkdm9jYXRlQ2VsbFBob25lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdICkpLFxyXG4gICAgIFxyXG5cclxuICAgICAgYWR2b2NhdGVTdWZmaXhJZDpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGFkdm9jYXRlUHJlZml4SWQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYWR2b2NhdGVGaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgc3RyaW5nQ29uZGl0aW9uYWxWYWxpZGF0b3IoKCkgPT4gdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykudmFsdWUsICBWYWxpZGF0b3JzLnJlcXVpcmVkLCAnaWxsdW1pbmF0aUVycm9yJykpLFxyXG4gICAgICBhZHZvY2F0ZUxhc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIHN0cmluZ0NvbmRpdGlvbmFsVmFsaWRhdG9yKCgpID0+IHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnZhbHVlLCBWYWxpZGF0b3JzLnJlcXVpcmVkLCdpbGx1bWluYXRpRXJyb3InKSksXHJcbiAgICAgIGFkdm9jYXRlRW1haWw6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5lbWFpbFBhdHRlcm4pIF0pKSxcclxuICAgICAgZW1lcmdlbmN5Q29udGFjdDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWVyZ2VuY3lDb250YWN0UGhvbmU6bmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdKSksXHJcbiAgICAgIGVtZXJnZW5jeUNoaWxkcmVuOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGVtZXJnZW5jeUNwbzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWVyZ2VuY3lEcnVnOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZW1lcmdlbmN5U3VwcG9ydDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWVyZ2VuY3lXZWFwb246IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZHJ1ZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICB3ZWFwb246IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgc3VwcG9ydDogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBjb21tb25DaGlsZHJlbkZsYWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgY29tbW9uQ2hpbGRyZW5OdW1iZXI6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBjcG9FeHBpcmF0aW9uRmxhZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBjcG9FeHBpcmF0aW9uRGF0ZTogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBhY2Nlc3NSaXNrOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZHJ1Z1VzZUZsYWc6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBzdXBwb3J0SW5QbGFjZUZsYWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgd2VhcG9uSW52b2x2ZWRGbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIG90aGVyV2VhcG9uOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIG90aGVyRHJ1ZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBhbGNvaG9sVXNlRmxhZzpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHZpY3RpbVN1cHBvcnRzOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgdmljdGltV2VhcG9uVXNlczpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHZpY3RpbURydWdVc2VzOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYWxsb3dDc29zYUNvbnRhY3RGbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICBcclxuIFxyXG59KTtcclxuXHJcbiAgICB0aGlzLnZpY3RpbUZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuXHRcdHRoaXMudmljdGltRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgX2dldFZpY3RpbSgpIHtcclxuICAgIGlmICh0aGlzLnZpY3RpbUlkID09PSAwKSB7IFxyXG4gICAgICBcclxuICAgICAgcmV0dXJuOyBcclxuICAgIH07XHJcblx0XHRpZiAodGhpcy5lZGl0TW9kZSA9PSB0cnVlKSB7XHJcbiAgICBjb25zb2xlLmxvZygnZmluZCB2aWN0aW0gaWQgaW5zaWRlIGdldFZpY3RpbScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy52aWN0aW1JZCk7XHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5zdWIgPSB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgdGhpcy52aWN0aW1JZCA9IHBhcmFtc1sndmljdGltSWQnXTtcclxuICAgICAgY29uc29sZS5sb2coJ215IHRoaXMudmljdGltSWQnKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1JZCk7XHJcbiAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgICAgIHRoaXMudmljdGltU2VydmljZS5nZXRWaWN0aW0odGhpcy52aWN0aW1JZClcclxuICAgICAgLnN1YnNjcmliZSgodmljdGltOiBWaWN0aW0pID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygndmljdGltIGRhdGEgMScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHZpY3RpbSk7XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltID0gPFZpY3RpbT52aWN0aW07XHJcbiAgICAgXHJcbiAgICAgICAgdmFyIHN1cHBvcnRzRGF0YSA9W107XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltLnZpY3RpbVN1cHBvcnRzLmZvckVhY2goIHQ9PntzdXBwb3J0c0RhdGEucHVzaCh0LnZpY3RpbVN1cHBvcnRUeXBlSWQpOyB9ICApXHJcbiAgICAgICAgY29uc3QgdmljdGltU3VwcG9ydHNDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltU3VwcG9ydHMnKTtcclxuICAgICAgICB2aWN0aW1TdXBwb3J0c0NvbnRyb2wuc2V0VmFsdWUoc3VwcG9ydHNEYXRhKTtcclxuXHJcblxyXG4gICAgICAgIHZhciB3ZWFwb25Vc2VzRGF0YSA9W107XHJcbiAgICAgICAgdmFyIG90aGVyV2VhcG9uID0gXCJcIjtcclxuICAgICAgICB0aGlzLmVkaXRWaWN0aW0udmljdGltV2VhcG9uVXNlcy5mb3JFYWNoKCB0PT57XHJcbiAgICAgICAgICB3ZWFwb25Vc2VzRGF0YS5wdXNoKHQud2VhcG9uVHlwZUlkKTsgXHJcbiAgICAgICAgICBpZiAodC53ZWFwb25UeXBlSWQgPT0gXCJPVEhFUlwiKXtcclxuICAgICAgICAgICAgb3RoZXJXZWFwb24gPSB0Lm90aGVyV2VhcG9uO1xyXG4gICAgICAgICAgICB0aGlzLm90aGVyV2VhcG9uRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgfSAgKVxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgdmljdGltV2VhcG9uVXNlc0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1XZWFwb25Vc2VzJyk7XHJcbiAgICAgICAgdmljdGltV2VhcG9uVXNlc0NvbnRyb2wuc2V0VmFsdWUod2VhcG9uVXNlc0RhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBvdGhlcldlYXBvbkNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpO1xyXG4gICAgICAgIG90aGVyV2VhcG9uQ29udHJvbC5zZXRWYWx1ZShvdGhlcldlYXBvbik7XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMud2VhcG9uVXNlc0RhdGEgPSB0aGlzLmVkaXRWaWN0aW0udmljdGltV2VhcG9uVXNlcztcclxuICAgICAgIFxyXG4gICAgICAgIHZhciBkcnVnVXNlRGF0YSA9W107XHJcbiAgICAgICAgdmFyIG90aGVyRHJ1ZyA9IFwiXCI7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdsb2FkIHRoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcycpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcyk7XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltLnZpY3RpbURydWdVc2VzLmZvckVhY2goIHQ9PntcclxuICBcclxuICAgICAgICAgIGlmICh0LmRydWdUeXBlSWQgPT09IG51bGwpe1xyXG4gICAgICAgICAgICBvdGhlckRydWcgPSB0Lm90aGVyRHJ1ZztcclxuICAgICAgICAgICAgdGhpcy5vdGhlckRydWdGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgdC5kcnVnVHlwZUlkID0nT1RIRVInO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRydWdVc2VEYXRhLnB1c2godC5kcnVnVHlwZUlkKTtcclxuICAgICAgICBcclxuICAgICAgICB9ICApXHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmVkaXRWaWN0aW0udmljdGltRHJ1Z1VzZXMgYWZ0ZXIgcHVzaCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGRydWdVc2VEYXRhKTtcclxuXHJcblxyXG5cclxuICAgICAgICBjb25zdCB2aWN0aW1EcnVnVXNlc0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1EcnVnVXNlcycpO1xyXG4gICAgICAgIHZpY3RpbURydWdVc2VzQ29udHJvbC5zZXRWYWx1ZShkcnVnVXNlRGF0YSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG90aGVyRHJ1Z0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKTtcclxuICAgICAgICBvdGhlckRydWdDb250cm9sLnNldFZhbHVlKG90aGVyRHJ1Zyk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgLy9jb250YWN0XHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldENvbnRhY3RzKHRoaXMudmljdGltSWQpLnN1YnNjcmliZShcclxuICAgICAgICAgIGNvbnRhY3RMaXN0ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvbnRhY3RMaXN0Jyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbnRhY3RMaXN0KTtcclxuICAgICAgICAgICAgdGhpcy5jb250YWN0TGlzdCA9IGNvbnRhY3RMaXN0OyBcclxuICAgICAgICAgICAgdGhpcy5jb250YWN0RGF0YVNvdXJjZS5kYXRhID0gdGhpcy5jb250YWN0TGlzdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvL25vIHBob25lIGZpZWxkXHJcblxyXG4gICAgICAgIGlmICggdGhpcy5lZGl0VmljdGltLmd1YXJkaWFuTm9QaG9uZUZsYWcgPT09IGZhbHNlICl7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7Z3VhcmRpYW5Ob1Bob25lRmxhZzogZmFsc2V9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCB0aGlzLmVkaXRWaWN0aW0uYWR2b2NhdGVOb1Bob25lRmxhZyA9PT0gZmFsc2UgKXtcclxuICAgICAgICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHthZHZvY2F0ZU5vUGhvbmVGbGFnOiBmYWxzZX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXCJFcnJvciBvY2N1cmVkIHdoaWxlIHJldHJpdmluZyBWaWN0aW0gSW5mb3JtYXRpb24uIFBsZWFzZSB0cnkgYWdhaW4uXCIpO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybjtcclxuXHRcdH0gZWxzZSB7XHJcbiAgICAgIC8vbmV3XHJcblxyXG4gICB9XHJcbiAgfVxyXG4gIFxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gIFxyXG4gIH1cclxuXHJcbiAgb25BZGRyZXNzQ2hhbmdlKGFkZHJlc3NJZCkgeyAgXHJcbiAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7YWRkcmVzc0lkOiBhZGRyZXNzSWR9KVxyXG4gICAgdGhpcy5hZGRyZXNzSWQgPSBhZGRyZXNzSWQ7XHJcbiAgfVxyXG4gIG9uR3VhcmRpYW5BZGRyZXNzQ2hhbmdlKE15R3VhcmRpYW5BZGRyZXNzSWQpIHsgICAgXHJcbiAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7Z3VhcmRpYW5BZGRyZXNzSWQ6IE15R3VhcmRpYW5BZGRyZXNzSWR9KVxyXG4gICAgdGhpcy5ndWFyZGlhbkFkZHJlc3NJZCA9ICBNeUd1YXJkaWFuQWRkcmVzc0lkO1xyXG4gIH1cclxuICBvbkFkdm9jYXRlQWRkcmVzc0NoYW5nZShNeUFkdm9jYXRlQWRkcmVzc0lkKSB7ICAgIFxyXG4gICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2Fkdm9jYXRlQWRkcmVzc0lkOiBNeUFkdm9jYXRlQWRkcmVzc0lkfSlcclxuICAgIHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQgPSBNeUFkdm9jYXRlQWRkcmVzc0lkO1xyXG4gIH1cclxuICBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLnZpY3RpbUZvcm0ucmVzZXQoKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZygnc2hvdyBvZmZlbmRlcklkJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLm9mZmVuZGVySWQpO1xyXG4gICAgY29uc29sZS5sb2coJ3Nob3cgc3RhZmZJZCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5zdGFmZklkKTtcclxuICAgIGNvbnNvbGUubG9nKCdzaG93IGlzSW50YWtlJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmlzSW50YWtlKTtcclxuICAgIC8vdGhpcy52aWN0aW1EZXRhaWwuZ3VhcmRpYW5Ob1Bob25lRmxhZyA9IHRydWU7XHJcbiAgICAvL3RoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnID0gIHRydWU7XHJcbiAgICAvL3RoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuTm9QaG9uZUZsYWcnKS5zZXRWYWx1ZSh0cnVlKTtcclxuXHJcbiAgICAgICAvL3JlcXVpcmVkIGZpZWxkXHJcbiAgICBjb25zdCByZXF1aXJlZEltcGxlbWVudGF0aW9uID0ge2dldDpmdW5jdGlvbigpOmJvb2xlYW57aWYodGhpcy5fcmVxdWlyZWQpe3JldHVybiB0aGlzLl9yZXF1aXJlZDt9XHJcbiAgICBpZih0aGlzLm5nQ29udHJvbCYmdGhpcy5uZ0NvbnRyb2wuY29udHJvbCYmdGhpcy5uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3JcclxuICAgICAgKXtjb25zdCBlbXB0eVZhbHVlQ29udHJvbD1PYmplY3QuYXNzaWduKHt9LFxyXG4gICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wpOyhlbXB0eVZhbHVlQ29udHJvbCBhcyBhbnkpLnZhbHVlPW51bGw7XHJcbiAgICAgICAgcmV0dXJuKCdyZXF1aXJlZCdpbih0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcihlbXB0eVZhbHVlQ29udHJvbCl8fHt9KSk7fVxyXG4gICAgICAgIHJldHVybiBmYWxzZTt9LHNldDpmdW5jdGlvbih2YWx1ZTpib29sZWFuKXt0aGlzLl9yZXF1aXJlZD1jb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO30sfTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0SW5wdXQucHJvdG90eXBlLCdyZXF1aXJlZCcscmVxdWlyZWRJbXBsZW1lbnRhdGlvbiwpO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRTZWxlY3QucHJvdG90eXBlLCdyZXF1aXJlZCcscmVxdWlyZWRJbXBsZW1lbnRhdGlvbiwpO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRSYWRpb0dyb3VwLnByb3RvdHlwZSwncmVxdWlyZWQnLHJlcXVpcmVkSW1wbGVtZW50YXRpb24sKTtcclxuICAgIC8vcmVxdWlyZWQgZmllbGQgZW5kXHJcblxyXG4gICAgXHJcblxyXG4gICAgIGlmICh0aGlzLnZpY3RpbURldGFpbCE9bnVsbCkge1xyXG4gICAgICAgLy8gZWRpdCByZWNvcmRcclxuICAgICAgdGhpcy5lZGl0TW9kZSA9IHRydWU7IFxyXG4gICAgICB0aGlzLnNob3dEZWxldGU9IHRydWU7ICAgICBcclxuICAgICAgdGhpcy52aWN0aW1JZCA9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5ndWFyZGlhblRhYkZsYWcgPSB0aGlzLnZpY3RpbURldGFpbC5taW5vckZsYWc7XHJcblxyXG4gICAgICBcclxuICAgICAgaWYgKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUFkdm9jYXRlRmxhZz09J1lTJyl7XHJcbiAgICAgICAgICAgIHRoaXMuYWR2b2NhdGVUYWJGbGFnID0gdHJ1ZTtcclxuICAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm90aGVyV2VhcG9uRmxhZyA9PSB0cnVlKXtcclxuICAgICAgICBjb25zdCBvdGhlcldlYXBvbkNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpO1xyXG4gICAgICAgIG90aGVyV2VhcG9uQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMub3RoZXJEcnVnRmxhZyA9PSB0cnVlKXtcclxuICAgICAgICBjb25zdCBvdGhlckRydWdDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJyk7XHJcbiAgICAgICAgb3RoZXJEcnVnQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jcG9FeHBpcmF0aW9uRGl2RmxhZyAgPXRoaXMudmljdGltRGV0YWlsLmNwb0V4cGlyYXRpb25GbGFnO1xyXG4gICAgICB0aGlzLmNvbW1vbkNoaWxkcmVuRGl2RmxhZyA9IHRoaXMudmljdGltRGV0YWlsLmNvbW1vbkNoaWxkcmVuRmxhZztcclxuICAgICAgdGhpcy5zdXBwb3J0SW5QbGFjZURpdkZsYWc9ICB0aGlzLnZpY3RpbURldGFpbC5zdXBwb3J0SW5QbGFjZUZsYWc7XHJcbiAgICAgIHRoaXMud2VhcG9uSW52b2x2ZWREaXZGbGFnPSAgdGhpcy52aWN0aW1EZXRhaWwud2VhcG9uSW52b2x2ZWRGbGFnO1xyXG4gICAgICB0aGlzLmRydWdVc2VEaXZGbGFnPSAgdGhpcy52aWN0aW1EZXRhaWwuZHJ1Z1VzZUZsYWc7XHJcbiAgICAgIHRoaXMuYWRkcmVzc0lkID0gdGhpcy52aWN0aW1EZXRhaWwuYWRkcmVzc0lkO1xyXG4gICAgICB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkID0gIHRoaXMudmljdGltRGV0YWlsLmd1YXJkaWFuQWRkcmVzc0lkO1xyXG4gICAgICB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkID0gIHRoaXMudmljdGltRGV0YWlsLmFkdm9jYXRlQWRkcmVzc0lkO1xyXG5cclxuICAgICAgdGhpcy5fZ2V0VmljdGltKCk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9hZGQgbmV3IHJlY29yZFxyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7Z3VhcmRpYW5Ob1Bob25lRmxhZzogdHJ1ZX0pO1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7YWR2b2NhdGVOb1Bob25lRmxhZzogdHJ1ZX0pO1xyXG4gICBcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0RmxhZ09wdGlvblllc05vVW5rbm93bnMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5mbGFnT3B0aW9uID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0R2VuZGVycygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmdlbmRlcnMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRQcmVmaXhlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnByZWZpeGVzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0U3VmZml4ZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdWZmaXhlcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldFJlbGF0aW9uc2hpcFR5cGVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVsYXRpb25zaGlwVHlwZXMgPSBpdGVtcy5maWx0ZXIoICh5KSA9PiAoeS5yZWxhdGlvbnNoaXBDYXRlZ29yeUlkID09PSAnU1QnIHx8IHkucmVsYXRpb25zaGlwQ2F0ZWdvcnlJZCA9PT0gJ0ZNJyApKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRTdXBwb3J0VHlwZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy52aWN0aW1TdXBwb3J0VHlwZXMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRXZWFwb25UeXBlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLndlYXBvblR5cGVzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0RHJ1Z3NUeXBlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZHJ1ZyBsb29rdXAgaXRlbXMnKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhpdGVtcyk7XHJcbiAgICAgICAgdGhpcy5kcnVncyA9IGl0ZW1zO1xyXG4gICAgICAgIHRoaXMuZHJ1Z3MucHVzaCh7ZHJ1Z1R5cGVJZDogJ09USEVSJywgbmFtZTogJ090aGVyJ30pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZHJ1Z3MpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgLy8gdGhpcy52aWN0aW1TZXJ2aWNlLmdldERvY2tldExpc3QodGhpcy5vZmZlbmRlcklkKS5zdWJzY3JpYmUoXHJcbiAgICAvLyAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy5kb2NrZXRsaXN0ID0gaXRlbXM7XHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyApO1xyXG5cclxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLnZhbHVlQ2hhbmdlc1xyXG4gICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAvLyB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgIC8vIHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuTGFzdE5hbWUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Xb3JrUGhvbmUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Ib21lUGhvbmUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5DZWxsUGhvbmUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICBcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1BZHZvY2F0ZUZsYWcnKS52YWx1ZUNoYW5nZXNcclxuICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlRmlyc3ROYW1lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlTGFzdE5hbWUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVXb3JrUGhvbmUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVIb21lUGhvbmUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVDZWxsUGhvbmUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICBcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGJhY2soKXtcclxuXHJcbiAgICAvL3RoaXMub25TYXZlLmVtaXQodGhpcy52aWN0aW1EZXRhaWwpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1MaXN0J10pO1xyXG4gICAgXHJcbiAgfVxyXG5cclxuICBkZWxldGVWaWN0aW0oKSB7XHJcbiAgICB0aGlzLmNvbW1vbkRpYWxvZ1NlcnZpY2VcclxuICAgIC5jb25maXJtKCcnLCAnRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgVmljdGltPycsICdZZXMnLCAnTm8nKVxyXG4gICAgLnN1YnNjcmliZShyZXMgPT4ge3RoaXMucmVzdWx0ID0gIHJlcztcclxuICAgICAgICBpZiAodGhpcy5yZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLmRlbGV0ZVZpY3RpbXModGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQpXHJcbiAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdEZWxldGUgU3VjY2Vzc2Z1bGx5IScsICcnLCB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCwgfSk7fVxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsndmljdGltJ10pO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KHRoaXMudmljdGltRGV0YWlsKTtcclxuICAgICAgICB9XHJcbiAgICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcmFkaW9NaW5vckNoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgLy8gY29uc3QgZ3VhcmRpYW5MYXN0TmFtZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkxhc3ROYW1lJyk7XHJcbiAgICAvL2NvbnN0IGd1YXJkaWFuRmlyc3ROYW1lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuRmlyc3ROYW1lJyk7XHJcblxyXG4gIFxyXG4gICAgaWYgKCRldmVudC52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmd1YXJkaWFuVGFiRmxhZyA9IHRydWU7XHJcbiAgICAgLy8gZ3VhcmRpYW5MYXN0TmFtZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAvLyBndWFyZGlhbkZpcnN0TmFtZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgLy90aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZyA9ICB0cnVlO1xyXG4gICBcclxuICAgICBcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuZ3VhcmRpYW5UYWJGbGFnID0gZmFsc2U7XHJcbiAgICAgLy8gZ3VhcmRpYW5MYXN0TmFtZUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgLy8gZ3VhcmRpYW5GaXJzdE5hbWVDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgIFxyXG4gICAgIFxyXG4gICAgfVxyXG5cclxuXHRcdC8vZ3VhcmRpYW5MYXN0TmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAvLyBndWFyZGlhbkZpcnN0TmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICBcclxuICB9XHJcblxyXG4gIHJhZGlvQWR2b2NhdGVDaGFuZ2UoJGV2ZW50OiBNYXRSYWRpb0NoYW5nZSl7XHJcblxyXG4gICAgY29uc3QgYWR2b2NhdGVMYXN0TmFtZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUxhc3ROYW1lJyk7XHJcbiAgICBjb25zdCBhZHZvY2F0ZUZpcnN0TmFtZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpO1xyXG4gICAgLy8gY29uc3QgYWR2b2NhdGVOb1Bob25lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlTm9QaG9uZUZsYWcnKTtcclxuICAgIFxyXG4gIFxyXG5cclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IFwiWVNcIikge1xyXG4gICAgICB0aGlzLmFkdm9jYXRlVGFiRmxhZyA9IHRydWU7XHJcbiAgICAgIGFkdm9jYXRlTGFzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIGFkdm9jYXRlRmlyc3ROYW1lQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICBcclxuICAgICAgXHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmFkdm9jYXRlVGFiRmxhZyA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICAgIGFkdm9jYXRlTGFzdE5hbWVDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICBhZHZvY2F0ZUZpcnN0TmFtZUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFkdm9jYXRlTGFzdE5hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIGFkdm9jYXRlRmlyc3ROYW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICBcclxuICB9XHJcblxyXG4gIHJhZGlvQ2ljQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG4gICAgaWYgKCRldmVudC52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbW1vbkNoaWxkcmVuRGl2RmxhZyA9IHRydWU7XHJcbiAgICAgIC8vIHJlcXVyaWUgZmllbGRcclxuICAgICAgdGhpcy5zZXRWYWxpZGF0b3JzKCdjb21tb25DaGlsZHJlbicpO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5jb21tb25DaGlsZHJlbkRpdkZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFZhbGlkYXRvcnModHlwZSkge1xyXG4gICAgaWYodHlwZSA9PSAnY29tbW9uQ2hpbGRyZW4nKXtcclxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2NvbW1vbkNoaWxkcmVuTnVtYmVyJykuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdjb21tb25DaGlsZHJlbk51bWJlcicpLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgIH1cclxuICAgZWxzZSBpZiAodHlwZSA9PSAnY3BvJyl7XHJcbiAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdjcG9FeHBpcmF0aW9uRGF0ZScpLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnY3BvRXhwaXJhdGlvbkRhdGUnKS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgfVxyXG4gIH1cclxuICByYWRpb1N1cHBvcnRDaGFuZ2UoJGV2ZW50OiBNYXRSYWRpb0NoYW5nZSl7XHJcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc3VwcG9ydEluUGxhY2VEaXZGbGFnID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuc3VwcG9ydEluUGxhY2VEaXZGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJhZGlvV2VhcG9uQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG4gICAgaWYgKCRldmVudC52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLndlYXBvbkludm9sdmVkRGl2RmxhZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLndlYXBvbkludm9sdmVkRGl2RmxhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICByYWRpb0RydWdDaGFuZ2UoJGV2ZW50OiBNYXRSYWRpb0NoYW5nZSl7XHJcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZHJ1Z1VzZURpdkZsYWcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5kcnVnVXNlRGl2RmxhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmFkaW9DcG9DaGFuZ2UoJGV2ZW50OiBNYXRSYWRpb0NoYW5nZSl7XHJcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuY3BvRXhwaXJhdGlvbkRpdkZsYWcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldFZhbGlkYXRvcnMoJ2NwbycpO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5jcG9FeHBpcmF0aW9uRGl2RmxhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRE9CQ2hhbmdlKCRldmVudCApe1xyXG4gICB2YXIgYWdlRGlmTXMgPSBEYXRlLm5vdygpIC0gICRldmVudC52YWx1ZTtcclxuICAgdmFyIGFnZURhdGUgPSBuZXcgRGF0ZShhZ2VEaWZNcyk7IFxyXG4gICAgaWYoIE1hdGguYWJzKGFnZURhdGUuZ2V0VVRDRnVsbFllYXIoKSAtIDE5NzApIDw9IDE4KXtcclxuICAgICBcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1ZpY3RpbSBpcyBhIE1pbm9yLiBUaGlzIGluZm9ybWF0aW9uIGlzIGEgc2Vuc2l0aXZlIGFuZCBzaG91bGQgbm90IGJlIGRpc2Nsb3NlZCB0byBhbnkgdW5hdXRob3JpemVkIHBhcnRpZXMuIENvbnRhY3QgdGhlIGxlZ2FsIGd1YXJkaWFuLicsICcnLCB7XHJcbiAgICAgICAgZHVyYXRpb246IDYwMDAsfSk7XHJcbiAgICAgICAgY29uc3QgbWlub3JDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnbWlub3JGbGFnJyk7XHJcbiAgICAgICAgbWlub3JDb250cm9sLnNldFZhbHVlKHRydWUpO1xyXG4gICAgICAvLyAgY29uc3QgZ3VhcmRpYW5MYXN0TmFtZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkxhc3ROYW1lJyk7XHJcbiAgICAgICAvLyBjb25zdCBndWFyZGlhbkZpcnN0TmFtZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpO1xyXG4gICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5ndWFyZGlhblRhYkZsYWcgPSB0cnVlO1xyXG4gICAgICAgLy8gZ3VhcmRpYW5MYXN0TmFtZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgLy8gIGd1YXJkaWFuRmlyc3ROYW1lQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgICBcclxuICAgXHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBjaGVja090aGVyV2VhcG9uKFdlYXBvblVzZSl7XHJcblxyXG4gICAgY29uc3Qgb3RoZXJXZWFwb25Db250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKTtcclxuICAgICBpZiAoV2VhcG9uVXNlLmluY2x1ZGVzKFwiT1RIRVJcIikpe1xyXG4gICAgIHRoaXMub3RoZXJXZWFwb25GbGFnID0gdHJ1ZTtcclxuICAgICBvdGhlcldlYXBvbkNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG5cclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLm90aGVyV2VhcG9uRmxhZyA9IGZhbHNlO1xyXG4gICAgICBvdGhlcldlYXBvbkNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB9XHJcbiAgIG90aGVyV2VhcG9uQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBjaGVja090aGVyRHJ1ZyhEcnVnVXNlKXtcclxuXHJcbiAgICBjb25zdCBvdGhlckRydWdDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJyk7XHJcbiAgICAgaWYgKERydWdVc2UuaW5jbHVkZXMoXCJPVEhFUlwiKSl7XHJcbiAgICAgdGhpcy5vdGhlckRydWdGbGFnID0gdHJ1ZTtcclxuICAgICBvdGhlckRydWdDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICBcclxuXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5vdGhlckRydWdGbGFnID0gZmFsc2U7XHJcbiAgICAgIG90aGVyRHJ1Z0NvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICBcclxuXHJcbiAgICB9XHJcbiAgIG90aGVyRHJ1Z0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuIFxyXG4gIC8vI3JlZ2lvbiBcInNhdmUgdmljdGltXCJcclxuICBzYXZlVmljdGltKCkge1xyXG4gICAgLy92YXIgbXlQYXRoICA9ICB0aGlzLnJvdXRlci51cmwuc2xpY2UoLTEwKVxyXG5cclxuICAvL2d1YXJkaWFuIHBob25lIGxvZ2ljXHJcbiAgaWYgKCF0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZylcclxuICAge1xyXG4gICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUpe1xyXG4gICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkhvbWVQaG9uZSAhPT0gbnVsbCl7XHJcbiAgICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUgIT09IFwiXCIpe1xyXG4gICAgICAgICAgICAgdGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnID0gIHRydWU7XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICAgIH1cclxuXHJcblxyXG5cclxuICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lICE9PSB1bmRlZmluZWQpe1xyXG4gICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lICE9PSBudWxsKXtcclxuICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lICE9PSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnID0gIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSl7XHJcbiAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUgIT09IG51bGwpe1xyXG4gICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsaG9uZSAhPT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZycpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcpO1xyXG4gICAgY29uc29sZS5sb2coJ3RoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZycpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnKTtcclxuIFxyXG5cclxuICAgIGlmICh0aGlzLmd1YXJkaWFuUGhvbmVFeGlzdEZsYWcgPT09IGZhbHNlICYmIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnID09PSBmYWxzZSlcclxuICAgIHtcclxuICAgICBcclxuICAgICAgICAgIHRoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vbkRpYWxvZ1NlcnZpY2VcclxuICAgICAgICAgIC53YXJuaW5nKCcnLCAnUGxlYXNlIGNoZWNrIHRoZSBndWFyZGlhbiBwaG9uZSBmaWVsZC4gWW91IGhhdmUgdG8gZmlsbCBvbmUgb2YgdGhlIHRocmVlIHBob25lIGZpbGVkcy4nLCAnT2snKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge3RoaXMucmVzdWx0ID0gIHJlcztcclxuICAgICAgICBcclxuICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJ3RoaXMucGhvbmVWYWxpZGF0aW9uRmxhZycpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5waG9uZVZhbGlkYXRpb25GbGFnKTtcclxuXHJcbi8vYWR2b2NhdGUgcGhvbmUgbG9naWNcclxuaWYgKCF0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZylcclxue1xyXG4gIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUpe1xyXG4gICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSAhPT0gbnVsbCl7XHJcbiAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUgIT09IFwiXCIpe1xyXG4gICAgICAgICAgdGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnID0gIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lICE9PSB1bmRlZmluZWQpe1xyXG4gICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lICE9PSBudWxsKXtcclxuICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lICE9PSBcIlwiKXtcclxuICAgICAgICAgdGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnID0gIHRydWU7XHJcbiAgIH1cclxuIH1cclxuIH1cclxuXHJcblxyXG4gaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZSl7XHJcbiAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUgIT09IG51bGwpe1xyXG4gICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsaG9uZSAhPT0gXCJcIil7XHJcbiAgICAgICAgIHRoaXMuYWR2b2NhdGVQaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xyXG4gICB9XHJcbiB9XHJcbiB9XHJcblxyXG59XHJcblxyXG4gY29uc29sZS5sb2coJ3RoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnJyk7XHJcbiBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZyk7XHJcbiBjb25zb2xlLmxvZygndGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnJyk7XHJcbiBjb25zb2xlLmxvZyh0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcpO1xyXG5cclxuIGlmKHRoaXMuYWR2b2NhdGVQaG9uZUV4aXN0RmxhZyA9PT0gZmFsc2UgJiYgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWcgPT09IGZhbHNlKVxyXG4ge1xyXG4gIFxyXG4gICAgICAgdGhpcy5waG9uZVZhbGlkYXRpb25GbGFnID0gdHJ1ZTtcclxuICAgICAgIHRoaXMuY29tbW9uRGlhbG9nU2VydmljZVxyXG4gICAgICAgLndhcm5pbmcoJycsICdQbGVhc2UgY2hlY2sgdGhlIGFkdm9jYXRlIHBob25lIGZpZWxkLiBZb3UgaGF2ZSB0byBmaWxsIG9uZSBvZiB0aGUgdGhyZWUgcGhvbmUgZmlsZWRzLicsICdPaycpXHJcbiAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7dGhpcy5yZXN1bHQgPSAgcmVzO1xyXG4gICAgICAgICBcclxuICAgICAgIH0pO1xyXG4gfVxyXG5cclxuXHJcbiAgY29uc29sZS5sb2coJ3RoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyAxJyk7XHJcbiAgY29uc29sZS5sb2codGhpcy5waG9uZVZhbGlkYXRpb25GbGFnKTtcclxuIGlmICggdGhpcy5waG9uZVZhbGlkYXRpb25GbGFnID09PSBmYWxzZSl7XHJcblxyXG5cclxuICAgIGlmICh0aGlzLnZpY3RpbURldGFpbCA9PT0gbnVsbCl7XHJcbiAgICAgIC8vaW5zZXJ0IG5ldyB2aWN0aW1cclxuIFxyXG4gICAgIHZhciBteVZpY3RpbVN1cHBvcnRzID0gW107XHJcbiAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1TdXBwb3J0cyl7XHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1TdXBwb3J0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICBjb25zdCB2aWN0aW1TdXBwb3J0PSA8VmljdGltU3VwcG9ydD57fTtcclxuICAgICAgICAgICAgdmljdGltU3VwcG9ydC52aWN0aW1JZD0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbUlkO1xyXG4gICAgICAgICAgICB2aWN0aW1TdXBwb3J0LnZpY3RpbVN1cHBvcnRUeXBlSWQ9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQubW9kaWZpZWRCeT0gdGhpcy5zdGFmZklkO1xyXG4gICAgICAgICAgICBteVZpY3RpbVN1cHBvcnRzLnB1c2godmljdGltU3VwcG9ydCk7XHJcbiAgICAgICAgIH0pO1xyXG4gICAgIH1cclxuXHJcbiAgICB2YXIgbXlWaWN0aW1EcnVnVXNlcyA9IFtdO1xyXG4gICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyBkdXJpbmcgc2F2ZScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzKTtcclxuICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpe1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICBjb25zdCB2aWN0aW1EcnVnVXNlID0gPFZpY3RpbURydWdVc2U+e307XHJcbiAgICAgdmljdGltRHJ1Z1VzZS5kcnVnVHlwZUlkID0gZWxlbWVudDtcclxuXHJcbiAgICAgaWYgKGVsZW1lbnQgPT09XCJPVEhFUlwiIHx8IGVsZW1lbnQgPT09IFwiXCIgfHwgZWxlbWVudCA9PT0gbnVsbCl7XHJcbiAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IG51bGw7XHJcbiAgICAgIHZpY3RpbURydWdVc2Uub3RoZXJEcnVnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm90aGVyRHJ1ZztcclxuICAgICB9XHJcbiAgICAgZWxzZXtcclxuICAgICAgdmljdGltRHJ1Z1VzZS5kcnVnVHlwZUlkID0gZWxlbWVudDtcclxuICAgICAgdmljdGltRHJ1Z1VzZS5vdGhlckRydWcgPSBudWxsOyBcclxuICAgICB9XHJcbiAgICAgXHJcbiAgICAgdmljdGltRHJ1Z1VzZS5tb2RpZmllZEJ5ID0gdGhpcy5zdGFmZklkO1xyXG4gICAgIHZpY3RpbURydWdVc2UudmljdGltSWQgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltSWQ7XHJcbiAgICAgbXlWaWN0aW1EcnVnVXNlcy5wdXNoKHZpY3RpbURydWdVc2UpO1xyXG4gICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMgZHVyaW5nIHNhdmUgMScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzKTtcclxuXHJcblxyXG5cclxuICB2YXIgbXlWaWN0aW1XZWFwb25Vc2VzID0gW107XHJcblxyXG4gIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltV2VhcG9uVXNlcyl7XHJcbiAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltV2VhcG9uVXNlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgY29uc3QgdmljdGltV2VhcG9uVXNlID0gPFZpY3RpbVdlYXBvblVzZT57fTtcclxuICAgICAgIHZpY3RpbVdlYXBvblVzZS52aWN0aW1JZD0gIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1JZDtcclxuICAgICAgIHZpY3RpbVdlYXBvblVzZS53ZWFwb25UeXBlSWQ9IGVsZW1lbnQ7XHJcblxyXG4gICAgICAgaWYgKGVsZW1lbnQgPT1cIk9USEVSXCIpe1xyXG4gICAgICAgIHZpY3RpbVdlYXBvblVzZS5vdGhlcldlYXBvbiA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlcldlYXBvbjtcclxuICAgICAgIH1cclxuICAgICAgIGVsc2V7XHJcbiAgICAgICAgdmljdGltV2VhcG9uVXNlLm90aGVyV2VhcG9uID0gbnVsbDsgXHJcbiAgICAgICB9XHJcblxyXG4gICAgICAgdmljdGltV2VhcG9uVXNlLm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgIG15VmljdGltV2VhcG9uVXNlcy5wdXNoKHZpY3RpbVdlYXBvblVzZSk7XHJcbiAgIH0pO1xyXG4gfVxyXG5cclxuIGNvbnN0IG5ld1ZpY3RpbSA9IHtcclxuICAgICAgICAgdmljdGltSWQ6IDAsXHJcbiAgICAgICAgIG9mZmVuZGVySWQ6IHRoaXMub2ZmZW5kZXJJZCxcclxuICAgICAgICAgdmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQ6dGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkLFxyXG4gICAgICAgICBsYXN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmxhc3ROYW1lLFxyXG4gICAgICAgICBmaXJzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5maXJzdE5hbWUsXHJcbiAgICAgICAgIG1pZGRsZU5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5taWRkbGVOYW1lICA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5taWRkbGVOYW1lIDogbnVsbCxcclxuICAgICAgICAgcHJlZml4SWQ6dGhpcy52aWN0aW1Gb3JtLnZhbHVlLnByZWZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnByZWZpeElkIDogbnVsbCAsXHJcbiAgICAgICAgIHN1ZmZpeElkOnRoaXMudmljdGltRm9ybS52YWx1ZS5zdWZmaXhJZCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5zdWZmaXhJZDogbnVsbCxcclxuICAgICAgICAgYmlydGhEYXRlOnRoaXMudmljdGltRm9ybS52YWx1ZS5iaXJ0aERhdGU/IHRoaXMudmljdGltRm9ybS52YWx1ZS5iaXJ0aERhdGUgOiBudWxsLFxyXG4gICAgICAgICBnZW5kZXJDb2RlOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ2VuZGVyQ29kZT8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmdlbmRlckNvZGU6IG51bGwsXHJcbiAgICAgICAgIHVuZGVyU3VwZXJ2aXNpb25GbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUudW5kZXJTdXBlcnZpc2lvbkZsYWcsXHJcbiAgICAgICAgIG1pbm9yRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pbm9yRmxhZyxcclxuICAgICAgICAgdmljdGltQWR2b2NhdGVGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltQWR2b2NhdGVGbGFnLFxyXG4gICAgICAgICBob21lUGhvbmU6ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuaG9tZVBob25lID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmhvbWVQaG9uZSA6IG51bGwsXHJcbiAgICAgICAgIHdvcmtQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndvcmtQaG9uZSA/IHRoaXMudmljdGltRm9ybS52YWx1ZS53b3JrUGhvbmUgOiBudWxsLFxyXG4gICAgICAgICBjZWxsUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5jZWxsUGhvbmUgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY2VsbFBob25lOiBudWxsLFxyXG4gICAgICAgICBlbWFpbDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsOiBudWxsLFxyXG4gICAgICAgICBhZGRyZXNzSWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZGRyZXNzSWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWRkcmVzc0lkOiAxLFxyXG4gICAgICAgICBlbWVyZ2VuY3lDb250YWN0OiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdCAgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdCA6IG51bGwsXHJcbiAgICAgICAgIGVtZXJnZW5jeUNvbnRhY3RQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RQaG9uZSA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0UGhvbmU6IG51bGwgLFxyXG4gICAgICAgICBjb21tb25DaGlsZHJlbkZsYWc6ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY29tbW9uQ2hpbGRyZW5GbGFnLFxyXG4gICAgICAgICBjb21tb25DaGlsZHJlbk51bWJlcjogIHRoaXMudmljdGltRm9ybS52YWx1ZS5jb21tb25DaGlsZHJlbk51bWJlcixcclxuICAgICAgICAgY3BvRXhwaXJhdGlvbkZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5jcG9FeHBpcmF0aW9uRmxhZyxcclxuICAgICAgICAgY3BvRXhwaXJhdGlvbkRhdGU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5jcG9FeHBpcmF0aW9uRGF0ZSA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMudmljdGltRm9ybS52YWx1ZS5zdGFydERhdGUsICdzaG9ydCcpIDogbnVsbCxcclxuICAgICAgICAgc3VwcG9ydEluUGxhY2VGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VwcG9ydEluUGxhY2VGbGFnLFxyXG4gICAgICAgICB3ZWFwb25JbnZvbHZlZEZsYWc6ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUud2VhcG9uSW52b2x2ZWRGbGFnLFxyXG4gICAgICAgICBkcnVnVXNlRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmRydWdVc2VGbGFnLFxyXG4gICAgICAgICBhbGNvaG9sVXNlRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFsY29ob2xVc2VGbGFnLFxyXG4gICAgICAgICBhY2Nlc3NSaXNrOnRoaXMudmljdGltRm9ybS52YWx1ZS5hY2Nlc3NSaXNrLFxyXG4gICAgICAgICBtb2RpZmllZEJ5OnRoaXMuc3RhZmZJZCxcclxuICAgICAgICAgdlZpY3RpbUFkdm9jYXRlOiBudWxsLFxyXG4gICAgICAgICB2VmljdGltR3VhcmRpYW46IG51bGwsXHJcbiAgICAgICAgIHZpY3RpbURydWdVc2VzOiBteVZpY3RpbURydWdVc2VzLFxyXG4gICAgICAgICB2aWN0aW1TdXBwb3J0czogbXlWaWN0aW1TdXBwb3J0cyxcclxuICAgICAgICAgdmljdGltV2VhcG9uVXNlczogbXlWaWN0aW1XZWFwb25Vc2VzLFxyXG5cclxuICAgICAgICAgYWR2b2NhdGVGaXJzdE5hbWU6IG51bGwsXHJcbiAgICAgICAgIGFkdm9jYXRlTGFzdE5hbWU6IG51bGwsXHJcbiAgICAgICAgIGFkdm9jYXRlRW1haWw6IG51bGwsXHJcbiAgICAgICAgIGFkdm9jYXRlUHJlZml4SWQ6IG51bGwsXHJcbiAgICAgICAgIGFkdm9jYXRlU3VmZml4SWQ6IG51bGwsXHJcbiAgICAgICAgIGFkdm9jYXRlTm9QaG9uZUZsYWc6IG51bGwsXHJcbiAgICAgICAgIGFkdm9jYXRlSG9tZVBob25lOiBudWxsLFxyXG4gICAgICAgICBhZHZvY2F0ZVdvcmtQaG9uZTogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVDZWxsUGhvbmU6IG51bGwsXHJcbiAgICAgICAgIGFkdm9jYXRlQWRkcmVzc0lkOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbkZpcnN0TmFtZTogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5MYXN0TmFtZTogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5FbWFpbDogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5QcmVmaXhJZDogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5TdWZmaXhJZDogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5Ob1Bob25lRmxhZzogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5Ib21lUGhvbmU6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuV29ya1Bob25lOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbkNlbGxQaG9uZTogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5BZGRyZXNzSWQ6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuQmlydGhEYXRlOiBudWxsLFxyXG4gICAgICAgICByZWxhdGlvbnNoaXA6IG51bGwsXHJcbiAgICAgICAgIGFsbG93Q3Nvc2FDb250YWN0RmxhZzogbnVsbFxyXG4gICAgICAgICBcclxuXHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgaWYgKHRoaXMuYWRkcmVzc0lkID09IDApe1xyXG4gICAgICBuZXdWaWN0aW0uYWRkcmVzc0lkID0gbnVsbDtcclxuICAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdWaWN0aW0uYWRkcmVzc0lkID0gIHRoaXMuYWRkcmVzc0lkO1xyXG4gICAgIH1cclxuICAgICBcclxuICAgICBuZXdWaWN0aW0uYWR2b2NhdGVBZGRyZXNzSWQgPSAgdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZDtcclxuICAgICBuZXdWaWN0aW0uZ3VhcmRpYW5BZGRyZXNzSWQgPSAgdGhpcy5ndWFyZGlhbkFkZHJlc3NJZDtcclxuICAgICAgY29uc29sZS5sb2coJ25ld1ZpY3RpbScpO1xyXG4gICAgICBjb25zb2xlLmxvZyhuZXdWaWN0aW0pO1xyXG4gICAgIHRoaXMudmljdGltU2VydmljZS5wb3N0VmljdGltcyhuZXdWaWN0aW0pLnN1YnNjcmliZShcclxuICAgICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgICBcclxuICAgICAgICAgY29uc3QgaWQgPSBpdGVtcyA/IGl0ZW1zLnZpY3RpbUlkIDogJyc7XHJcblxyXG4gICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbUFkdm9jYXRlRmxhZyA9PSBcIllTXCIpe1xyXG4gICAgICAgICAgIGNvbnNvbGUubG9nKCdhZGQgYWR2b2NhdGUnKTtcclxuICAgICAgICAgY29uc3QgdmljdGltQWR2b2NhdGU6IFZpY3RpbUFkdm9jYXRlID0ge1xyXG4gICAgICAgICAgdmljdGltQWR2b2NhdGVJZDogaWQsXHJcbiAgICAgICAgICBsYXN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTGFzdE5hbWUsXHJcbiAgICAgICAgICBmaXJzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUZpcnN0TmFtZSxcclxuICAgICAgICAgIHByZWZpeElkOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVQcmVmaXhJZCxcclxuICAgICAgICAgIHN1ZmZpeElkOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVTdWZmaXhJZCxcclxuICAgICAgICAgIGFkZHJlc3NJZDogdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA/IHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQ6IG51bGwsXHJcbiAgICAgICAgICBub1Bob25lRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWcgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZzogbnVsbCxcclxuICAgICAgICAgIGhvbWVQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlSG9tZVBob25lLFxyXG4gICAgICAgICAgd29ya1Bob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVXb3JrUGhvbmUsXHJcbiAgICAgICAgICBjZWxsUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZSxcclxuICAgICAgICAgIGVtYWlsOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVFbWFpbCxcclxuICAgICAgICAgIG1vZGlmaWVkQnk6IHRoaXMuc3RhZmZJZFxyXG4gICAgICAgICAgXHJcbiAgICBcclxuICAgICAgfTtcclxuICAgICAgIFxyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZS5wb3N0VmljdGltQWR2b2NhdGUoaWQsIHZpY3RpbUFkdm9jYXRlKS5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gXHJcbiAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5taW5vckZsYWcgPT0gdHJ1ZSl7XHJcbiAgICAgIFxyXG4gICAgICAgIGNvbnN0IHZpY3RpbUd1YXJkaWFuOiBWaWN0aW1HdWFyZGlhbiA9IHtcclxuICAgICAgICAgIHZpY3RpbUd1YXJkaWFuSWQ6IGlkLFxyXG4gICAgICAgICAgbGFzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkxhc3ROYW1lLFxyXG4gICAgICAgICAgZmlyc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5GaXJzdE5hbWUsXHJcbiAgICAgICAgICBwcmVmaXhJZDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuUHJlZml4SWQsIFxyXG4gICAgICAgICAgc3VmZml4SWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhblN1ZmZpeElkLFxyXG4gICAgICAgICAgYmlydGhEYXRlOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5CaXJ0aERhdGUsXHJcbiAgICAgICAgICBhZGRyZXNzSWQ6IHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQ/IHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQ6IG51bGwsXHJcbiAgICAgICAgICBub1Bob25lRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWc/IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnOiBudWxsLFxyXG4gICAgICAgICAgaG9tZVBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUsXHJcbiAgICAgICAgICB3b3JrUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSxcclxuICAgICAgICAgIGNlbGxQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuQ2VsbFBob25lLFxyXG4gICAgICAgICAgZW1haWw6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkVtYWlsLFxyXG4gICAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkXHJcbiAgICAgICAgICBcclxuICAgICAgIFxyXG4gICAgICAgfTtcclxuICAgICAgIFxyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZS5wb3N0VmljdGltR3VhcmRpYW4oaWQsIHZpY3RpbUd1YXJkaWFuKS5zdWJzY3JpYmUoKTtcclxuICAgICAgIFxyXG4gICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQWRkIFZpY3RpbSBTdWNjZXNzZnVsbHkhJywgJycsIHtcclxuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxyXG4gICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy9pbnNlcnQgbmV3XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbnRha2U9PT10cnVlKXtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsndmljdGltSG9tZSddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsndmljdGltTGlzdCddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy90aGlzLm9uU2F2ZS5lbWl0KHRoaXMudmljdGltRGV0YWlsKTtcclxuICAgICAgXHJcbiAgICAgIH1cclxuICAgICApO1xyXG5cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvL3VwZGF0ZSB2aWN0aW1cclxuXHJcbiBcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwudW5kZXJTdXBlcnZpc2lvbkZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUudW5kZXJTdXBlcnZpc2lvbkZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwubGFzdE5hbWUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUubGFzdE5hbWU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmZpcnN0TmFtZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5maXJzdE5hbWU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLm1pZGRsZU5hbWUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUubWlkZGxlTmFtZTtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwucHJlZml4SWQgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUucHJlZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUucHJlZml4SWQgOiBudWxsO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5zdWZmaXhJZCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5zdWZmaXhJZCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5zdWZmaXhJZCA6IG51bGw7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmJpcnRoRGF0ZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5iaXJ0aERhdGU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmdlbmRlckNvZGUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ2VuZGVyQ29kZTtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwubWlub3JGbGFnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pbm9yRmxhZztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuaG9tZVBob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmhvbWVQaG9uZT8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmhvbWVQaG9uZTogbnVsbDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwud29ya1Bob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndvcmtQaG9uZT8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndvcmtQaG9uZTogbnVsbDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuY2VsbFBob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNlbGxQaG9uZT8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNlbGxQaG9uZTogbnVsbDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuZW1haWwgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1haWw7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUFkdm9jYXRlRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1BZHZvY2F0ZUZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmVtZXJnZW5jeUNvbnRhY3QgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuZW1lcmdlbmN5Q29udGFjdFBob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RQaG9uZT8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RQaG9uZTogbnVsbDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuY29tbW9uQ2hpbGRyZW5GbGFnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNvbW1vbkNoaWxkcmVuRmxhZztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuY29tbW9uQ2hpbGRyZW5OdW1iZXIgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY29tbW9uQ2hpbGRyZW5OdW1iZXI7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNwb0V4cGlyYXRpb25EYXRlID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNwb0V4cGlyYXRpb25EYXRlO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5jcG9FeHBpcmF0aW9uRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jcG9FeHBpcmF0aW9uRmxhZztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuc3VwcG9ydEluUGxhY2VGbGFnID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5zdXBwb3J0SW5QbGFjZUZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLndlYXBvbkludm9sdmVkRmxhZyA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUud2VhcG9uSW52b2x2ZWRGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5kcnVnVXNlRmxhZyA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZHJ1Z1VzZUZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmFsY29ob2xVc2VGbGFnID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5hbGNvaG9sVXNlRmxhZztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuYWNjZXNzUmlzayA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWNjZXNzUmlzaztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuYWRkcmVzc0lkID0gdGhpcy5hZGRyZXNzSWQ7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmFsbG93Q3Nvc2FDb250YWN0RmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hbGxvd0Nzb3NhQ29udGFjdEZsYWc7XHJcbiAgICAgXHJcbiAgICBcclxuICAgICAgIHRoaXMudmljdGltRGV0YWlsLnZpY3RpbVN1cHBvcnRzID0gW107XHJcbiAgICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltU3VwcG9ydHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBjb25zdCB2aWN0aW1TdXBwb3J0PSA8VmljdGltU3VwcG9ydD57fTtcclxuICAgICAgICAgICAgICB2aWN0aW1TdXBwb3J0LnZpY3RpbUlkPSB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZDtcclxuICAgICAgICAgICAgICB2aWN0aW1TdXBwb3J0LnZpY3RpbVN1cHBvcnRUeXBlSWQ9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgdmljdGltU3VwcG9ydC5tb2RpZmllZEJ5PSB0aGlzLnN0YWZmSWQ7XHJcbiAgICAgICAgICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltU3VwcG9ydHMucHVzaCh2aWN0aW1TdXBwb3J0KTtcclxuICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgIHRoaXMudmljdGltRGV0YWlsLnZpY3RpbURydWdVc2VzID0gW107XHJcblxyXG4gICAgICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyBjYWxjdWxhdGUnKVxyXG4gICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzKVxyXG5cclxuICAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZpY3RpbURydWdVc2UgPSA8VmljdGltRHJ1Z1VzZT57fTtcclxuICAgICAgICB2aWN0aW1EcnVnVXNlLmRydWdUeXBlSWQgPSBlbGVtZW50O1xyXG4gICAgICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyBiZWZvcmUnKVxyXG4gICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzKVxyXG4gICAgICAgXHJcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IFwiT1RIRVJcIiB8fCBlbGVtZW50ID09PSBcIlwiICApe1xyXG4gICAgICAgICAgdmljdGltRHJ1Z1VzZS5kcnVnVHlwZUlkID0gbnVsbDtcclxuICAgICAgICAgIHZpY3RpbURydWdVc2Uub3RoZXJEcnVnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm90aGVyRHJ1ZztcclxuICAgICAgICAgfVxyXG4gICAgICAgICBlbHNle1xyXG4gICAgICAgICAgdmljdGltRHJ1Z1VzZS5kcnVnVHlwZUlkID0gZWxlbWVudDtcclxuICAgICAgICAgIHZpY3RpbURydWdVc2Uub3RoZXJEcnVnID0gbnVsbDtcclxuICAgICAgICAgfVxyXG5cclxuICAgICAgICB2aWN0aW1EcnVnVXNlLm1vZGlmaWVkQnkgPSB0aGlzLnN0YWZmSWQ7XHJcbiAgICAgICAgdmljdGltRHJ1Z1VzZS52aWN0aW1JZCA9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xyXG4gICAgICAgIHRoaXMudmljdGltRGV0YWlsLnZpY3RpbURydWdVc2VzLnB1c2godmljdGltRHJ1Z1VzZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyBhZnRlcicpXHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzKVxyXG4gICAgICAgIFxyXG4gICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzLmZpbHRlcih3b3JkID0+ICggISh3b3JkLmRydWdUeXBlSWQgPT09IG51bGwgICYmIHdvcmQub3RoZXJEcnVnID09PSBudWxsKSAgICApKTtcclxuXHJcblxyXG4gICAgICBjb25zb2xlLmxvZygnYWRqdXN0IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyAnKVxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpXHJcbiBcclxuICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1XZWFwb25Vc2VzID0gW107XHJcbiAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVdlYXBvblVzZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgIGNvbnN0IHZpY3RpbVdlYXBvblVzZSA9IDxWaWN0aW1XZWFwb25Vc2U+e307XHJcbiAgICAgICAgICB2aWN0aW1XZWFwb25Vc2UudmljdGltSWQ9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xyXG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLndlYXBvblR5cGVJZD0gZWxlbWVudDsgICBcclxuXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnd2VhcG9uIGVsZW1lbnQnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVsZW1lbnQpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLm90aGVyV2VhcG9uKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1XZWFwb25Vc2VzKTtcclxuXHJcbiAgICAgICAgIGlmIChlbGVtZW50ID09XCJPVEhFUlwiKXtcclxuICAgICAgICAgIHZpY3RpbVdlYXBvblVzZS5vdGhlcldlYXBvbj10aGlzLnZpY3RpbUZvcm0udmFsdWUub3RoZXJXZWFwb247XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgZWxzZXtcclxuICAgICAgICAgIHZpY3RpbVdlYXBvblVzZS5vdGhlcldlYXBvbiA9IG51bGw7XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB2aWN0aW1XZWFwb25Vc2UubW9kaWZpZWRCeT0gdGhpcy5zdGFmZklkO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltV2VhcG9uVXNlcy5wdXNoKHZpY3RpbVdlYXBvblVzZSk7XHJcbiAgICAgICAgICBcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbURldGFpbCBiZWZvcmUgZW1pdCcpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbURldGFpbCk7XHJcblxyXG4gICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucHV0VmljdGltcyh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCx0aGlzLnZpY3RpbURldGFpbCkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1VwZGF0ZSBTdWNjZXNzZnVsbHkhJywgJycsIHtcclxuICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgIC8vQWR2b2NhdGUgc2VjdGlvblxyXG5cclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUudmljdGltQWR2b2NhdGVJZCA9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5sYXN0TmFtZT0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTGFzdE5hbWU7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLmZpcnN0TmFtZT0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlRmlyc3ROYW1lO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5wcmVmaXhJZD0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlUHJlZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVQcmVmaXhJZCA6IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLnN1ZmZpeElkPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVTdWZmaXhJZCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVN1ZmZpeElkIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuYWRkcmVzc0lkPSB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkID8gdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA6IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLm5vUGhvbmVGbGFnPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZz8gdHJ1ZTogZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLmhvbWVQaG9uZT0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlSG9tZVBob25lID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlSG9tZVBob25lIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUud29ya1Bob25lPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVXb3JrUGhvbmUgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVXb3JrUGhvbmUgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5jZWxsUGhvbmU9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZSA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZSA6IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLmVtYWlsPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVFbWFpbCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUVtYWlsIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUubW9kaWZpZWRCeT0gdGhpcy5zdGFmZklkO1xyXG4gICAgIFxyXG4gICAgICAgY29uc29sZS5sb2coJ3dvcmsgb24gYWR2b2NhdGUgcGFydCcpO1xyXG4gICAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwudmljdGltQWR2b2NhdGVGbGFnPT0nWVMnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd3b3JrIG9uIGFkdm9jYXRlIGZsYWcgaXMgWVMgJyk7XHJcbiAgICAgICAgICBpZih0aGlzLnZpY3RpbURldGFpbC5hZHZvY2F0ZUZpcnN0TmFtZSAhPSBudWxsKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NoZWNrIGFkdm9jYXRlIGZpc3J0IG5hbWUgJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRGV0YWlsLmFkdm9jYXRlRmlyc3ROYW1lKTtcclxuICAgICAgICAgIHRoaXMudmljdGltU2VydmljZS5wdXRWaWN0aW1BZHZvY2F0ZSh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCx0aGlzLnZpY3RpbUFkdm9jYXRlKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICByZXNwPT57fSApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnYWRkIGFkdm9jYXRlJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltQWR2b2NhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucG9zdFZpY3RpbUFkdm9jYXRlKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkLCB0aGlzLnZpY3RpbUFkdm9jYXRlKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIH1cclxuICAgICBcclxuICAgIFxyXG4gICAgLy8gZ3VhcmRpYW4gc2VjdGlvblxyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi52aWN0aW1HdWFyZGlhbklkID0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmxhc3ROYW1lID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkxhc3ROYW1lO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5maXJzdE5hbWUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5GaXJzdE5hbWU7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLnByZWZpeElkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuUHJlZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5QcmVmaXhJZCA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLnN1ZmZpeElkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuU3VmZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5TdWZmaXhJZCA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmFkZHJlc3NJZCA9IHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQgPyB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkIDogbnVsbDtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4ubm9QaG9uZUZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWc/IHRydWU6IGZhbHNlO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5ob21lUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUgPyAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lIDogbnVsbDtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4ud29ya1Bob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lID8gIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmNlbGxQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmVtYWlsID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuRW1haWwgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5FbWFpbCA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLm1vZGlmaWVkQnkgPSB0aGlzLnN0YWZmSWQ7XHJcbiAgXHJcbiAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwubWlub3JGbGFnID09IHRydWUpXHJcbiAgICB7XHJcbiAgICAgICBpZih0aGlzLnZpY3RpbURldGFpbC5ndWFyZGlhbkZpcnN0TmFtZSAhPSBudWxsIClcclxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucHV0VmljdGltR3VhcmRpYW4odGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQsdGhpcy52aWN0aW1HdWFyZGlhbikuc3Vic2NyaWJlKFxyXG4gICAgICAgIHJlc3A9PntcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2FkZCBndXJkaWFuJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUd1YXJkaWFuKTtcclxuICAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnBvc3RWaWN0aW1HdWFyZGlhbih0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCwgdGhpcy52aWN0aW1HdWFyZGlhbikuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICB9XHJcbiAgIFxyXG4gICAgXHJcbiAgICB9XHJcbiAgICBcclxuICAgICk7XHJcbiAgICBcclxuICAgIH1cclxuICB9Ly9lbmQgb2YgdGhpcy5waG9uZVZhbGlkYXRpb25GbGFnID0gZmFsc2VcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbURldGFpbCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy52aWN0aW1EZXRhaWwpO1xyXG4gICAgdGhpcy5vblNhdmUuZW1pdCh0aGlzLnZpY3RpbURldGFpbCk7XHJcbiBcclxuICAgICAgfVxyXG5cclxuICAvLyNlbmRyZWdpb24gXCJzYXZlIHZpY3RpbVwiXHJcbiAgICAgIGFkZENvbnRhY3QoKXtcclxuXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3ZpY3RpbUNvbnRhY3QnLHRoaXMudmljdGltSWRdKTtcclxuICAgICAgfVxyXG4gICAgICBmb3JtYXRMYWJlbCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgIFxyXG59XHJcbiJdfQ==
|