@csmart/ngc-smart-victim 0.1.7 → 1.13.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. package/csmart-ngc-smart-victim.d.ts +1 -15
  2. package/esm2020/csmart-ngc-smart-victim.mjs +5 -0
  3. package/esm2020/lib/caseNote/caseNote.component.mjs +185 -0
  4. package/esm2020/lib/common-dialog/common-dialog.component.mjs +23 -0
  5. package/esm2020/lib/common-dialog/common-dialog.module.mjs +38 -0
  6. package/esm2020/lib/common-dialog/common-dialog.service.mjs +33 -0
  7. package/esm2020/lib/contact/contact.component.mjs +140 -0
  8. package/esm2020/lib/intake.service.mjs +57 -0
  9. package/esm2020/lib/safetyPlan/serviceProvider.component.mjs +115 -0
  10. package/esm2020/lib/safetyPlan/victimSafetyPlan.component.mjs +116 -0
  11. package/esm2020/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +340 -0
  12. package/esm2020/lib/shared/app.shared.module.mjs +213 -0
  13. package/esm2020/lib/shared/directives/phone-mask.directive.mjs +53 -0
  14. package/esm2020/lib/shared/validators/date.validator.mjs +59 -0
  15. package/esm2020/lib/shared/validators/index.mjs +2 -0
  16. package/esm2020/lib/smart-victim-delete-confirm.component.mjs +53 -0
  17. package/esm2020/lib/smart-victim-detail/smart-victim-detail.component.mjs +961 -0
  18. package/esm2020/lib/smart-victim.component.mjs +310 -0
  19. package/esm2020/lib/smart-victim.model.mjs +133 -0
  20. package/esm2020/lib/smart-victim.module.mjs +138 -0
  21. package/esm2020/lib/smart-victim.service.mjs +347 -0
  22. package/esm2020/lib/victim-routing.module.mjs +42 -0
  23. package/esm2020/lib/victimSearch/VictimSearchFilter.mjs +3 -0
  24. package/esm2020/lib/victimSearch/victimSearchForm.component.mjs +38 -0
  25. package/esm2020/public-api.mjs +12 -0
  26. package/fesm2015/csmart-ngc-smart-victim.mjs +3163 -0
  27. package/fesm2015/csmart-ngc-smart-victim.mjs.map +1 -0
  28. package/fesm2020/csmart-ngc-smart-victim.mjs +3152 -0
  29. package/fesm2020/csmart-ngc-smart-victim.mjs.map +1 -0
  30. package/lib/caseNote/caseNote.component.d.ts +6 -2
  31. package/lib/common-dialog/common-dialog.component.d.ts +4 -1
  32. package/lib/common-dialog/common-dialog.module.d.ts +6 -0
  33. package/lib/common-dialog/common-dialog.service.d.ts +4 -1
  34. package/lib/contact/contact.component.d.ts +4 -1
  35. package/lib/intake.service.d.ts +3 -0
  36. package/lib/safetyPlan/serviceProvider.component.d.ts +4 -1
  37. package/lib/safetyPlan/victimSafetyPlan.component.d.ts +7 -2
  38. package/lib/safetyPlan/victimSafetyPlanDetail.component.d.ts +7 -2
  39. package/lib/shared/app.shared.module.d.ts +30 -0
  40. package/lib/shared/directives/phone-mask.directive.d.ts +10 -13
  41. package/lib/smart-victim-delete-confirm.component.d.ts +3 -0
  42. package/lib/smart-victim-detail/smart-victim-detail.component.d.ts +9 -4
  43. package/lib/smart-victim.component.d.ts +8 -3
  44. package/lib/smart-victim.model.d.ts +2 -1
  45. package/lib/smart-victim.module.d.ts +47 -0
  46. package/lib/smart-victim.service.d.ts +3 -0
  47. package/lib/victim-routing.module.d.ts +5 -0
  48. package/lib/victimSearch/victimSearchForm.component.d.ts +3 -0
  49. package/package.json +28 -18
  50. package/public-api.d.ts +4 -0
  51. package/bundles/csmart-ngc-smart-victim.umd.js +0 -6434
  52. package/bundles/csmart-ngc-smart-victim.umd.js.map +0 -1
  53. package/bundles/csmart-ngc-smart-victim.umd.min.js +0 -16
  54. package/bundles/csmart-ngc-smart-victim.umd.min.js.map +0 -1
  55. package/csmart-ngc-smart-victim.metadata.json +0 -1
  56. package/esm2015/csmart-ngc-smart-victim.js +0 -25
  57. package/esm2015/lib/caseNote/caseNote.component.js +0 -349
  58. package/esm2015/lib/common-dialog/common-dialog.component.js +0 -46
  59. package/esm2015/lib/common-dialog/common-dialog.module.js +0 -32
  60. package/esm2015/lib/common-dialog/common-dialog.service.js +0 -63
  61. package/esm2015/lib/contact/contact.component.js +0 -232
  62. package/esm2015/lib/intake.service.js +0 -183
  63. package/esm2015/lib/safetyPlan/serviceProvider.component.js +0 -130
  64. package/esm2015/lib/safetyPlan/victimSafetyPlan.component.js +0 -257
  65. package/esm2015/lib/safetyPlan/victimSafetyPlanDetail.component.js +0 -556
  66. package/esm2015/lib/shared/app.shared.module.js +0 -81
  67. package/esm2015/lib/shared/directives/phone-mask.directive.js +0 -168
  68. package/esm2015/lib/shared/validators/date.validator.js +0 -108
  69. package/esm2015/lib/shared/validators/index.js +0 -7
  70. package/esm2015/lib/smart-victim-delete-confirm.component.js +0 -61
  71. package/esm2015/lib/smart-victim-detail/smart-victim-detail.component.js +0 -1410
  72. package/esm2015/lib/smart-victim.component.js +0 -476
  73. package/esm2015/lib/smart-victim.model.js +0 -631
  74. package/esm2015/lib/smart-victim.module.js +0 -84
  75. package/esm2015/lib/smart-victim.service.js +0 -792
  76. package/esm2015/lib/victim-routing.module.js +0 -40
  77. package/esm2015/lib/victimSearch/VictimSearchFilter.js +0 -20
  78. package/esm2015/lib/victimSearch/victimSearchForm.component.js +0 -59
  79. package/esm2015/public-api.js +0 -13
  80. package/esm5/csmart-ngc-smart-victim.js +0 -25
  81. package/esm5/lib/caseNote/caseNote.component.js +0 -372
  82. package/esm5/lib/common-dialog/common-dialog.component.js +0 -48
  83. package/esm5/lib/common-dialog/common-dialog.module.js +0 -36
  84. package/esm5/lib/common-dialog/common-dialog.service.js +0 -75
  85. package/esm5/lib/contact/contact.component.js +0 -285
  86. package/esm5/lib/intake.service.js +0 -194
  87. package/esm5/lib/safetyPlan/serviceProvider.component.js +0 -99
  88. package/esm5/lib/safetyPlan/victimSafetyPlan.component.js +0 -306
  89. package/esm5/lib/safetyPlan/victimSafetyPlanDetail.component.js +0 -628
  90. package/esm5/lib/shared/app.shared.module.js +0 -85
  91. package/esm5/lib/shared/directives/phone-mask.directive.js +0 -184
  92. package/esm5/lib/shared/validators/date.validator.js +0 -108
  93. package/esm5/lib/shared/validators/index.js +0 -7
  94. package/esm5/lib/smart-victim-delete-confirm.component.js +0 -51
  95. package/esm5/lib/smart-victim-detail/smart-victim-detail.component.js +0 -1502
  96. package/esm5/lib/smart-victim.component.js +0 -528
  97. package/esm5/lib/smart-victim.model.js +0 -541
  98. package/esm5/lib/smart-victim.module.js +0 -84
  99. package/esm5/lib/smart-victim.service.js +0 -1063
  100. package/esm5/lib/victim-routing.module.js +0 -44
  101. package/esm5/lib/victimSearch/VictimSearchFilter.js +0 -24
  102. package/esm5/lib/victimSearch/victimSearchForm.component.js +0 -70
  103. package/esm5/public-api.js +0 -13
  104. package/fesm2015/csmart-ngc-smart-victim.js +0 -5690
  105. package/fesm2015/csmart-ngc-smart-victim.js.map +0 -1
  106. package/fesm5/csmart-ngc-smart-victim.js +0 -6211
  107. package/fesm5/csmart-ngc-smart-victim.js.map +0 -1
@@ -1,1410 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/smart-victim-detail/smart-victim-detail.component.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import { Component, Input, Output, EventEmitter } from '@angular/core';
7
- import { FormBuilder, FormControl, Validators } from '@angular/forms';
8
- import { MatDialog, MatSnackBar, MatInput, MatSelect, MatRadioGroup } from '@angular/material';
9
- import { NgcSmartVictimService } from '../smart-victim.service';
10
- import { Router, ActivatedRoute } from '@angular/router';
11
- import { CommonDialogService } from '.././common-dialog/common-dialog.service';
12
- import { DatePipe, Location } from '@angular/common';
13
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
14
- import { MatTableDataSource } from '@angular/material/table';
15
- /**
16
- * @record
17
- */
18
- export function BooleanFn() { }
19
- /**
20
- * @record
21
- */
22
- export function StringFn() { }
23
- /**
24
- * @param {?} predicate
25
- * @param {?} validator
26
- * @param {?=} errorNamespace
27
- * @return {?}
28
- */
29
- export function conditionalValidator(predicate, validator, errorNamespace) {
30
- return ((/**
31
- * @param {?} formControl
32
- * @return {?}
33
- */
34
- formControl => {
35
- if (!formControl.parent) {
36
- return null;
37
- }
38
- /** @type {?} */
39
- let error = null;
40
- if (predicate()) {
41
- error = validator(formControl);
42
- }
43
- if (errorNamespace && error) {
44
- /** @type {?} */
45
- const customError = {};
46
- customError[errorNamespace] = error;
47
- error = customError;
48
- }
49
- return error;
50
- }));
51
- }
52
- /**
53
- * @param {?} predicate
54
- * @param {?} validator
55
- * @param {?=} errorNamespace
56
- * @return {?}
57
- */
58
- export function stringConditionalValidator(predicate, validator, errorNamespace) {
59
- return ((/**
60
- * @param {?} formControl
61
- * @return {?}
62
- */
63
- formControl => {
64
- if (!formControl.parent) {
65
- return null;
66
- }
67
- /** @type {?} */
68
- let error = null;
69
- if (predicate() == 'YS') {
70
- error = validator(formControl);
71
- }
72
- if (errorNamespace && error) {
73
- /** @type {?} */
74
- const customError = {};
75
- customError[errorNamespace] = error;
76
- error = customError;
77
- }
78
- return error;
79
- }));
80
- }
81
- export class SmartVictimDetailComponent {
82
- /**
83
- * @param {?} location
84
- * @param {?} formBuilder
85
- * @param {?} dialog
86
- * @param {?} route
87
- * @param {?} router
88
- * @param {?} snackBar
89
- * @param {?} commonDialogService
90
- * @param {?} victimService
91
- */
92
- constructor(location, formBuilder, dialog, route, router, snackBar, commonDialogService, victimService) {
93
- this.location = location;
94
- this.formBuilder = formBuilder;
95
- this.dialog = dialog;
96
- this.route = route;
97
- this.router = router;
98
- this.snackBar = snackBar;
99
- this.commonDialogService = commonDialogService;
100
- this.victimService = victimService;
101
- this.victimDetail = (/** @type {?} */ ({}));
102
- this.onSave = new EventEmitter();
103
- this.onCancel = new EventEmitter();
104
- this.hidden = true;
105
- this.victimAdvocate = (/** @type {?} */ ({}));
106
- this.victimGuardian = (/** @type {?} */ ({}));
107
- this.guardianTabFlag = false;
108
- this.advocateTabFlag = false;
109
- this.commonChildrenDivFlag = false;
110
- this.cpoExpirationDivFlag = false;
111
- this.supportInPlaceDivFlag = false;
112
- this.weaponInvolvedDivFlag = false;
113
- this.drugUseDivFlag = false;
114
- this.showDelete = false;
115
- this.addressId = 0;
116
- this.advocateAddressId = 0;
117
- this.guardianAddressId = 0;
118
- this.datePipe = new DatePipe('en-US');
119
- this.emailPattern = "^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$";
120
- this.phoneNumber = "\\d{10}";
121
- this.editVictim = (/** @type {?} */ ({}));
122
- this.otherWeaponFlag = false;
123
- this.otherDrugFlag = false;
124
- this.contactDataSource = new MatTableDataSource();
125
- this.guardianPhoneExistFlag = false;
126
- this.advocatePhoneExistFlag = false;
127
- this.phoneValidationFlag = false;
128
- this.guaridanNoPhoneChkFlag = true;
129
- this.advocateNoPhoneChkFlag = true;
130
- this.addressValidators = {
131
- street: [],
132
- street2: [],
133
- city: [],
134
- stateCode: [],
135
- zipCode: [],
136
- psaCode: [],
137
- };
138
- this.initForm();
139
- }
140
- /**
141
- * @private
142
- * @return {?}
143
- */
144
- initForm() {
145
- this.victimForm = this.formBuilder.group({
146
- underSupervisionFlag: new FormControl('', Validators.compose([Validators.required])),
147
- victimOffenderRelationshipTypeId: new FormControl('', Validators.compose([Validators.required])),
148
- lastName: new FormControl('', Validators.compose([Validators.required])),
149
- firstName: new FormControl('', Validators.compose([Validators.required])),
150
- middleName: new FormControl(''),
151
- prefixId: new FormControl(''),
152
- suffixId: new FormControl(''),
153
- genderCode: new FormControl(''),
154
- birthDate: new FormControl(''),
155
- homePhone: new FormControl('', Validators.compose([Validators.pattern(this.phoneNumber)])),
156
- cellPhone: new FormControl('', Validators.compose([Validators.pattern(this.phoneNumber)])),
157
- workPhone: new FormControl('', Validators.compose([Validators.pattern(this.phoneNumber)])),
158
- email: new FormControl('', Validators.compose([Validators.pattern(this.emailPattern)])),
159
- minorFlag: new FormControl('', Validators.compose([Validators.required])),
160
- victimAdvocateFlag: new FormControl('', Validators.compose([Validators.required])),
161
- guardianLastName: new FormControl(''),
162
- guardianFirstName: new FormControl(''),
163
- guardianPrefixId: new FormControl(''),
164
- guardianSuffixId: new FormControl(''),
165
- //guardianGender:new FormControl('', ),
166
- guardianBirthDate: new FormControl(''),
167
- guardianNoPhoneFlag: new FormControl(true),
168
- guardianHomePhone: new FormControl('', Validators.compose([Validators.pattern(this.phoneNumber)])),
169
- guardianCellPhone: new FormControl('', Validators.compose([Validators.pattern(this.phoneNumber)])),
170
- guardianWorkPhone: new FormControl('', Validators.compose([Validators.pattern(this.phoneNumber)])),
171
- guardianEmail: new FormControl('', Validators.compose([Validators.pattern(this.emailPattern)])),
172
- advocateNoPhoneFlag: new FormControl(true),
173
- advocateWorkPhone: new FormControl('', Validators.compose([Validators.pattern(this.phoneNumber)])),
174
- advocateHomePhone: new FormControl('', Validators.compose([Validators.pattern(this.phoneNumber)])),
175
- advocateCellPhone: new FormControl('', Validators.compose([Validators.pattern(this.phoneNumber)])),
176
- advocateSuffixId: new FormControl(''),
177
- advocatePrefixId: new FormControl(''),
178
- advocateFirstName: new FormControl('', stringConditionalValidator((/**
179
- * @return {?}
180
- */
181
- () => this.victimForm.get('victimAdvocateFlag').value), Validators.required, 'illuminatiError')),
182
- advocateLastName: new FormControl('', stringConditionalValidator((/**
183
- * @return {?}
184
- */
185
- () => this.victimForm.get('victimAdvocateFlag').value), Validators.required, 'illuminatiError')),
186
- advocateEmail: new FormControl('', Validators.compose([Validators.pattern(this.emailPattern)])),
187
- emergencyContact: new FormControl(''),
188
- emergencyContactPhone: new FormControl('', Validators.compose([Validators.pattern(this.phoneNumber)])),
189
- emergencyChildren: new FormControl(''),
190
- emergencyCpo: new FormControl(''),
191
- emergencyDrug: new FormControl(''),
192
- emergencySupport: new FormControl(''),
193
- emergencyWeapon: new FormControl(''),
194
- drug: new FormControl(''),
195
- weapon: new FormControl(''),
196
- support: new FormControl(''),
197
- commonChildrenFlag: new FormControl(''),
198
- commonChildrenNumber: new FormControl(''),
199
- cpoExpirationFlag: new FormControl(''),
200
- cpoExpirationDate: new FormControl(''),
201
- accessRisk: new FormControl(''),
202
- drugUseFlag: new FormControl(''),
203
- supportInPlaceFlag: new FormControl(''),
204
- weaponInvolvedFlag: new FormControl(''),
205
- otherWeapon: new FormControl(''),
206
- otherDrug: new FormControl(''),
207
- alcoholUseFlag: new FormControl(''),
208
- victimSupports: new FormControl(''),
209
- victimWeaponUses: new FormControl(''),
210
- victimDrugUses: new FormControl(''),
211
- allowCsosaContactFlag: new FormControl(''),
212
- });
213
- this.victimForm.markAsPristine();
214
- this.victimForm.markAsUntouched();
215
- }
216
- /**
217
- * @private
218
- * @return {?}
219
- */
220
- _getVictim() {
221
- if (this.victimId === 0) {
222
- return;
223
- }
224
- ;
225
- if (this.editMode == true) {
226
- console.log('find victim id inside getVictim');
227
- console.log(this.victimId);
228
- if (this.victimId === undefined) {
229
- this.sub = this.route.params.subscribe((/**
230
- * @param {?} params
231
- * @return {?}
232
- */
233
- params => {
234
- this.victimId = params['victimId'];
235
- console.log('my this.victimId');
236
- console.log(this.victimId);
237
- }));
238
- }
239
- this.victimService.getVictim(this.victimId)
240
- .subscribe((/**
241
- * @param {?} victim
242
- * @return {?}
243
- */
244
- (victim) => {
245
- console.log('victim data 1');
246
- console.log(victim);
247
- this.editVictim = (/** @type {?} */ (victim));
248
- /** @type {?} */
249
- var supportsData = [];
250
- this.editVictim.victimSupports.forEach((/**
251
- * @param {?} t
252
- * @return {?}
253
- */
254
- t => { supportsData.push(t.victimSupportTypeId); }));
255
- /** @type {?} */
256
- const victimSupportsControl = this.victimForm.get('victimSupports');
257
- victimSupportsControl.setValue(supportsData);
258
- /** @type {?} */
259
- var weaponUsesData = [];
260
- /** @type {?} */
261
- var otherWeapon = "";
262
- this.editVictim.victimWeaponUses.forEach((/**
263
- * @param {?} t
264
- * @return {?}
265
- */
266
- t => {
267
- weaponUsesData.push(t.weaponTypeId);
268
- if (t.weaponTypeId == "OTHER") {
269
- otherWeapon = t.otherWeapon;
270
- this.otherWeaponFlag = true;
271
- }
272
- }));
273
- /** @type {?} */
274
- const victimWeaponUsesControl = this.victimForm.get('victimWeaponUses');
275
- victimWeaponUsesControl.setValue(weaponUsesData);
276
- /** @type {?} */
277
- const otherWeaponControl = this.victimForm.get('otherWeapon');
278
- otherWeaponControl.setValue(otherWeapon);
279
- //this.weaponUsesData = this.editVictim.victimWeaponUses;
280
- /** @type {?} */
281
- var drugUseData = [];
282
- /** @type {?} */
283
- var otherDrug = "";
284
- console.log('load this.editVictim.victimDrugUses');
285
- console.log(this.editVictim.victimDrugUses);
286
- this.editVictim.victimDrugUses.forEach((/**
287
- * @param {?} t
288
- * @return {?}
289
- */
290
- t => {
291
- if (t.drugTypeId === null) {
292
- otherDrug = t.otherDrug;
293
- this.otherDrugFlag = true;
294
- t.drugTypeId = 'OTHER';
295
- }
296
- drugUseData.push(t.drugTypeId);
297
- }));
298
- console.log('this.editVictim.victimDrugUses after push');
299
- console.log(drugUseData);
300
- /** @type {?} */
301
- const victimDrugUsesControl = this.victimForm.get('victimDrugUses');
302
- victimDrugUsesControl.setValue(drugUseData);
303
- /** @type {?} */
304
- const otherDrugControl = this.victimForm.get('otherDrug');
305
- otherDrugControl.setValue(otherDrug);
306
- //contact
307
- this.victimService.getContacts(this.victimId).subscribe((/**
308
- * @param {?} contactList
309
- * @return {?}
310
- */
311
- contactList => {
312
- console.log('contactList');
313
- console.log(contactList);
314
- this.contactList = contactList;
315
- this.contactDataSource.data = this.contactList;
316
- }));
317
- //no phone field
318
- if (this.editVictim.guardianNoPhoneFlag === false) {
319
- this.victimForm.patchValue({ guardianNoPhoneFlag: false });
320
- }
321
- if (this.editVictim.advocateNoPhoneFlag === false) {
322
- this.victimForm.patchValue({ advocateNoPhoneFlag: false });
323
- }
324
- }), (/**
325
- * @param {?} error
326
- * @return {?}
327
- */
328
- error => {
329
- this.snackBar.open("Error occured while retriving Victim Information. Please try again.");
330
- }));
331
- return;
332
- }
333
- else {
334
- //new
335
- }
336
- }
337
- /**
338
- * @return {?}
339
- */
340
- ngOnChanges() {
341
- }
342
- /**
343
- * @param {?} addressId
344
- * @return {?}
345
- */
346
- onAddressChange(addressId) {
347
- this.victimForm.patchValue({ addressId: addressId });
348
- this.addressId = addressId;
349
- }
350
- /**
351
- * @param {?} MyGuardianAddressId
352
- * @return {?}
353
- */
354
- onGuardianAddressChange(MyGuardianAddressId) {
355
- this.victimForm.patchValue({ guardianAddressId: MyGuardianAddressId });
356
- this.guardianAddressId = MyGuardianAddressId;
357
- }
358
- /**
359
- * @param {?} MyAdvocateAddressId
360
- * @return {?}
361
- */
362
- onAdvocateAddressChange(MyAdvocateAddressId) {
363
- this.victimForm.patchValue({ advocateAddressId: MyAdvocateAddressId });
364
- this.advocateAddressId = MyAdvocateAddressId;
365
- }
366
- /**
367
- * @return {?}
368
- */
369
- cancel() {
370
- this.victimForm.reset();
371
- }
372
- /**
373
- * @return {?}
374
- */
375
- ngOnInit() {
376
- console.log('show offenderId');
377
- console.log(this.offenderId);
378
- console.log('show staffId');
379
- console.log(this.staffId);
380
- console.log('show isIntake');
381
- console.log(this.isIntake);
382
- //this.victimDetail.guardianNoPhoneFlag = true;
383
- //this.victimForm.value.guardianNoPhoneFlag = true;
384
- //this.victimForm.get('guardianNoPhoneFlag').setValue(true);
385
- //required field
386
- /** @type {?} */
387
- const requiredImplementation = { get: (/**
388
- * @return {?}
389
- */
390
- function () {
391
- if (this._required) {
392
- return this._required;
393
- }
394
- if (this.ngControl && this.ngControl.control && this.ngControl.control.validator) {
395
- /** @type {?} */
396
- const emptyValueControl = Object.assign({}, this.ngControl.control);
397
- ((/** @type {?} */ (emptyValueControl))).value = null;
398
- return ('required' in (this.ngControl.control.validator(emptyValueControl) || {}));
399
- }
400
- return false;
401
- }), set: (/**
402
- * @param {?} value
403
- * @return {?}
404
- */
405
- function (value) { this._required = coerceBooleanProperty(value); }), };
406
- Object.defineProperty(MatInput.prototype, 'required', requiredImplementation);
407
- Object.defineProperty(MatSelect.prototype, 'required', requiredImplementation);
408
- Object.defineProperty(MatRadioGroup.prototype, 'required', requiredImplementation);
409
- //required field end
410
- if (this.victimDetail != null) {
411
- // edit record
412
- this.editMode = true;
413
- this.showDelete = true;
414
- this.victimId = this.victimDetail.victimId;
415
- this.guardianTabFlag = this.victimDetail.minorFlag;
416
- if (this.victimDetail.victimAdvocateFlag == 'YS') {
417
- this.advocateTabFlag = true;
418
- }
419
- if (this.otherWeaponFlag == true) {
420
- /** @type {?} */
421
- const otherWeaponControl = this.victimForm.get('otherWeapon');
422
- otherWeaponControl.setValidators(Validators.required);
423
- }
424
- if (this.otherDrugFlag == true) {
425
- /** @type {?} */
426
- const otherDrugControl = this.victimForm.get('otherDrug');
427
- otherDrugControl.setValidators(Validators.required);
428
- }
429
- this.cpoExpirationDivFlag = this.victimDetail.cpoExpirationFlag;
430
- this.commonChildrenDivFlag = this.victimDetail.commonChildrenFlag;
431
- this.supportInPlaceDivFlag = this.victimDetail.supportInPlaceFlag;
432
- this.weaponInvolvedDivFlag = this.victimDetail.weaponInvolvedFlag;
433
- this.drugUseDivFlag = this.victimDetail.drugUseFlag;
434
- this.addressId = this.victimDetail.addressId;
435
- this.guardianAddressId = this.victimDetail.guardianAddressId;
436
- this.advocateAddressId = this.victimDetail.advocateAddressId;
437
- this._getVictim();
438
- }
439
- else {
440
- //add new record
441
- this.victimForm.patchValue({ guardianNoPhoneFlag: true });
442
- this.victimForm.patchValue({ advocateNoPhoneFlag: true });
443
- }
444
- this.victimService.getFlagOptionYesNoUnknowns().subscribe((/**
445
- * @param {?} items
446
- * @return {?}
447
- */
448
- (items) => {
449
- this.flagOption = items;
450
- }));
451
- this.victimService.getGenders().subscribe((/**
452
- * @param {?} items
453
- * @return {?}
454
- */
455
- (items) => {
456
- this.genders = items;
457
- }));
458
- this.victimService.getPrefixes().subscribe((/**
459
- * @param {?} items
460
- * @return {?}
461
- */
462
- (items) => {
463
- this.prefixes = items;
464
- }));
465
- this.victimService.getSuffixes().subscribe((/**
466
- * @param {?} items
467
- * @return {?}
468
- */
469
- (items) => {
470
- this.suffixes = items;
471
- }));
472
- this.victimService.getRelationshipTypes().subscribe((/**
473
- * @param {?} items
474
- * @return {?}
475
- */
476
- (items) => {
477
- this.relationshipTypes = items.filter((/**
478
- * @param {?} y
479
- * @return {?}
480
- */
481
- (y) => (y.relationshipCategoryId === 'ST' || y.relationshipCategoryId === 'FM')));
482
- }));
483
- this.victimService.getSupportTypes().subscribe((/**
484
- * @param {?} items
485
- * @return {?}
486
- */
487
- (items) => {
488
- this.victimSupportTypes = items;
489
- }));
490
- this.victimService.getWeaponTypes().subscribe((/**
491
- * @param {?} items
492
- * @return {?}
493
- */
494
- (items) => {
495
- this.weaponTypes = items;
496
- }));
497
- this.victimService.getDrugsTypes().subscribe((/**
498
- * @param {?} items
499
- * @return {?}
500
- */
501
- (items) => {
502
- console.log('drug lookup items');
503
- console.log(items);
504
- this.drugs = items;
505
- this.drugs.push({ drugTypeId: 'OTHER', name: 'Other' });
506
- console.log(this.drugs);
507
- }));
508
- // this.victimService.getDocketList(this.offenderId).subscribe(
509
- // (items: any) => {
510
- // this.docketlist = items;
511
- // }
512
- // );
513
- this.victimForm.get('minorFlag').valueChanges
514
- .subscribe((/**
515
- * @param {?} value
516
- * @return {?}
517
- */
518
- value => {
519
- // this.victimForm.get('guardianFirstName').updateValueAndValidity();
520
- // this.victimForm.get('guardianLastName').updateValueAndValidity();
521
- this.victimForm.get('guardianWorkPhone').updateValueAndValidity();
522
- this.victimForm.get('guardianHomePhone').updateValueAndValidity();
523
- this.victimForm.get('guardianCellPhone').updateValueAndValidity();
524
- }));
525
- this.victimForm.get('victimAdvocateFlag').valueChanges
526
- .subscribe((/**
527
- * @param {?} value
528
- * @return {?}
529
- */
530
- value => {
531
- this.victimForm.get('advocateFirstName').updateValueAndValidity();
532
- this.victimForm.get('advocateLastName').updateValueAndValidity();
533
- this.victimForm.get('advocateWorkPhone').updateValueAndValidity();
534
- this.victimForm.get('advocateHomePhone').updateValueAndValidity();
535
- this.victimForm.get('advocateCellPhone').updateValueAndValidity();
536
- }));
537
- }
538
- /**
539
- * @return {?}
540
- */
541
- back() {
542
- //this.onSave.emit(this.victimDetail);
543
- this.router.navigate(['victimList']);
544
- }
545
- /**
546
- * @return {?}
547
- */
548
- deleteVictim() {
549
- this.commonDialogService
550
- .confirm('', 'Do you want to delete this Victim?', 'Yes', 'No')
551
- .subscribe((/**
552
- * @param {?} res
553
- * @return {?}
554
- */
555
- res => {
556
- this.result = res;
557
- if (this.result) {
558
- this.victimService.deleteVictims(this.victimDetail.victimId)
559
- .subscribe((/**
560
- * @param {?} result
561
- * @return {?}
562
- */
563
- result => {
564
- this.snackBar.open('Delete Successfully!', '', {
565
- duration: 3000,
566
- });
567
- }));
568
- // this.router.navigate(['victim']);
569
- this.onSave.emit(this.victimDetail);
570
- }
571
- }));
572
- }
573
- /**
574
- * @param {?} $event
575
- * @return {?}
576
- */
577
- radioMinorChange($event) {
578
- // const guardianLastNameControl = this.victimForm.get('guardianLastName');
579
- //const guardianFirstNameControl = this.victimForm.get('guardianFirstName');
580
- if ($event.value === true) {
581
- this.guardianTabFlag = true;
582
- // guardianLastNameControl.setValidators(Validators.required);
583
- // guardianFirstNameControl.setValidators(Validators.required);
584
- //this.victimForm.value.guardianNoPhoneFlag = true;
585
- }
586
- else {
587
- this.guardianTabFlag = false;
588
- // guardianLastNameControl.clearValidators();
589
- // guardianFirstNameControl.clearValidators();
590
- }
591
- //guardianLastNameControl.updateValueAndValidity();
592
- // guardianFirstNameControl.updateValueAndValidity();
593
- }
594
- /**
595
- * @param {?} $event
596
- * @return {?}
597
- */
598
- radioAdvocateChange($event) {
599
- /** @type {?} */
600
- const advocateLastNameControl = this.victimForm.get('advocateLastName');
601
- /** @type {?} */
602
- const advocateFirstNameControl = this.victimForm.get('advocateFirstName');
603
- // const advocateNoPhoneControl = this.victimForm.get('advocateNoPhoneFlag');
604
- if ($event.value === "YS") {
605
- this.advocateTabFlag = true;
606
- advocateLastNameControl.setValidators(Validators.required);
607
- advocateFirstNameControl.setValidators(Validators.required);
608
- }
609
- else {
610
- this.advocateTabFlag = false;
611
- advocateLastNameControl.clearValidators();
612
- advocateFirstNameControl.clearValidators();
613
- }
614
- advocateLastNameControl.updateValueAndValidity();
615
- advocateFirstNameControl.updateValueAndValidity();
616
- }
617
- /**
618
- * @param {?} $event
619
- * @return {?}
620
- */
621
- radioCicChange($event) {
622
- if ($event.value === true) {
623
- this.commonChildrenDivFlag = true;
624
- // requrie field
625
- this.setValidators('commonChildren');
626
- }
627
- else {
628
- this.commonChildrenDivFlag = false;
629
- }
630
- }
631
- /**
632
- * @param {?} type
633
- * @return {?}
634
- */
635
- setValidators(type) {
636
- if (type == 'commonChildren') {
637
- this.victimForm.get('commonChildrenNumber').clearValidators();
638
- this.victimForm.get('commonChildrenNumber').setValidators(Validators.required);
639
- }
640
- else if (type == 'cpo') {
641
- this.victimForm.get('cpoExpirationDate').clearValidators();
642
- this.victimForm.get('cpoExpirationDate').setValidators(Validators.required);
643
- }
644
- }
645
- /**
646
- * @param {?} $event
647
- * @return {?}
648
- */
649
- radioSupportChange($event) {
650
- if ($event.value === true) {
651
- this.supportInPlaceDivFlag = true;
652
- }
653
- else {
654
- this.supportInPlaceDivFlag = false;
655
- }
656
- }
657
- /**
658
- * @param {?} $event
659
- * @return {?}
660
- */
661
- radioWeaponChange($event) {
662
- if ($event.value === true) {
663
- this.weaponInvolvedDivFlag = true;
664
- }
665
- else {
666
- this.weaponInvolvedDivFlag = false;
667
- }
668
- }
669
- /**
670
- * @param {?} $event
671
- * @return {?}
672
- */
673
- radioDrugChange($event) {
674
- if ($event.value === true) {
675
- this.drugUseDivFlag = true;
676
- }
677
- else {
678
- this.drugUseDivFlag = false;
679
- }
680
- }
681
- /**
682
- * @param {?} $event
683
- * @return {?}
684
- */
685
- radioCpoChange($event) {
686
- if ($event.value === true) {
687
- this.cpoExpirationDivFlag = true;
688
- this.setValidators('cpo');
689
- }
690
- else {
691
- this.cpoExpirationDivFlag = false;
692
- }
693
- }
694
- /**
695
- * @param {?} $event
696
- * @return {?}
697
- */
698
- handleDOBChange($event) {
699
- /** @type {?} */
700
- var ageDifMs = Date.now() - $event.value;
701
- /** @type {?} */
702
- var ageDate = new Date(ageDifMs);
703
- if (Math.abs(ageDate.getUTCFullYear() - 1970) <= 18) {
704
- this.snackBar.open('Victim is a Minor. This information is a sensitive and should not be disclosed to any unauthorized parties. Contact the legal guardian.', '', {
705
- duration: 6000,
706
- });
707
- /** @type {?} */
708
- const minorControl = this.victimForm.get('minorFlag');
709
- minorControl.setValue(true);
710
- // const guardianLastNameControl = this.victimForm.get('guardianLastName');
711
- // const guardianFirstNameControl = this.victimForm.get('guardianFirstName');
712
- this.guardianTabFlag = true;
713
- // guardianLastNameControl.setValidators(Validators.required);
714
- // guardianFirstNameControl.setValidators(Validators.required);
715
- }
716
- }
717
- /**
718
- * @param {?} WeaponUse
719
- * @return {?}
720
- */
721
- checkOtherWeapon(WeaponUse) {
722
- /** @type {?} */
723
- const otherWeaponControl = this.victimForm.get('otherWeapon');
724
- if (WeaponUse.includes("OTHER")) {
725
- this.otherWeaponFlag = true;
726
- otherWeaponControl.setValidators(Validators.required);
727
- }
728
- else {
729
- this.otherWeaponFlag = false;
730
- otherWeaponControl.clearValidators();
731
- }
732
- otherWeaponControl.updateValueAndValidity();
733
- }
734
- /**
735
- * @param {?} DrugUse
736
- * @return {?}
737
- */
738
- checkOtherDrug(DrugUse) {
739
- /** @type {?} */
740
- const otherDrugControl = this.victimForm.get('otherDrug');
741
- if (DrugUse.includes("OTHER")) {
742
- this.otherDrugFlag = true;
743
- otherDrugControl.setValidators(Validators.required);
744
- }
745
- else {
746
- this.otherDrugFlag = false;
747
- otherDrugControl.clearValidators();
748
- }
749
- otherDrugControl.updateValueAndValidity();
750
- }
751
- //#region "save victim"
752
- /**
753
- * @return {?}
754
- */
755
- saveVictim() {
756
- //var myPath = this.router.url.slice(-10)
757
- //guardian phone logic
758
- if (!this.victimForm.value.guardianNoPhoneFlag) {
759
- if (this.victimForm.value.guardianHomePhone) {
760
- if (this.victimForm.value.guardianHomePhone !== null) {
761
- if (this.victimForm.value.guardianHomePhone !== "") {
762
- this.guardianPhoneExistFlag = true;
763
- }
764
- }
765
- }
766
- if (this.victimForm.value.guardianWorkPhone !== undefined) {
767
- if (this.victimForm.value.guardianWorkPhone !== null) {
768
- if (this.victimForm.value.guardianWorkPhone !== "") {
769
- this.guardianPhoneExistFlag = true;
770
- }
771
- }
772
- }
773
- if (this.victimForm.value.guardianCellPhone) {
774
- if (this.victimForm.value.guardianCellPhone !== null) {
775
- if (this.victimForm.value.guardianCellhone !== "") {
776
- this.guardianPhoneExistFlag = true;
777
- }
778
- }
779
- }
780
- }
781
- console.log('this.victimForm.value.guardianNoPhoneFlag');
782
- console.log(this.victimForm.value.guardianNoPhoneFlag);
783
- console.log('this.guardianPhoneExistFlag');
784
- console.log(this.guardianPhoneExistFlag);
785
- if (this.guardianPhoneExistFlag === false && this.victimForm.value.guardianNoPhoneFlag === false) {
786
- this.phoneValidationFlag = true;
787
- this.commonDialogService
788
- .warning('', 'Please check the guardian phone field. You have to fill one of the three phone fileds.', 'Ok')
789
- .subscribe((/**
790
- * @param {?} res
791
- * @return {?}
792
- */
793
- res => {
794
- this.result = res;
795
- }));
796
- }
797
- console.log('this.phoneValidationFlag');
798
- console.log(this.phoneValidationFlag);
799
- //advocate phone logic
800
- if (!this.victimForm.value.advocateNoPhoneFlag) {
801
- if (this.victimForm.value.advocateHomePhone) {
802
- if (this.victimForm.value.advocateHomePhone !== null) {
803
- if (this.victimForm.value.advocateHomePhone !== "") {
804
- this.advocatePhoneExistFlag = true;
805
- }
806
- }
807
- }
808
- if (this.victimForm.value.advocateWorkPhone !== undefined) {
809
- if (this.victimForm.value.advocateWorkPhone !== null) {
810
- if (this.victimForm.value.advocateWorkPhone !== "") {
811
- this.advocatePhoneExistFlag = true;
812
- }
813
- }
814
- }
815
- if (this.victimForm.value.advocateCellPhone) {
816
- if (this.victimForm.value.advocateCellPhone !== null) {
817
- if (this.victimForm.value.advocateCellhone !== "") {
818
- this.advocatePhoneExistFlag = true;
819
- }
820
- }
821
- }
822
- }
823
- console.log('this.victimForm.value.advocateNoPhoneFlag');
824
- console.log(this.victimForm.value.advocateNoPhoneFlag);
825
- console.log('this.advocatePhoneExistFlag');
826
- console.log(this.advocatePhoneExistFlag);
827
- if (this.advocatePhoneExistFlag === false && this.victimForm.value.advocateNoPhoneFlag === false) {
828
- this.phoneValidationFlag = true;
829
- this.commonDialogService
830
- .warning('', 'Please check the advocate phone field. You have to fill one of the three phone fileds.', 'Ok')
831
- .subscribe((/**
832
- * @param {?} res
833
- * @return {?}
834
- */
835
- res => {
836
- this.result = res;
837
- }));
838
- }
839
- console.log('this.phoneValidationFlag 1');
840
- console.log(this.phoneValidationFlag);
841
- if (this.phoneValidationFlag === false) {
842
- if (this.victimDetail === null) {
843
- //insert new victim
844
- /** @type {?} */
845
- var myVictimSupports = [];
846
- if (this.victimForm.value.victimSupports) {
847
- this.victimForm.value.victimSupports.forEach((/**
848
- * @param {?} element
849
- * @return {?}
850
- */
851
- element => {
852
- /** @type {?} */
853
- const victimSupport = (/** @type {?} */ ({}));
854
- victimSupport.victimId = this.victimForm.value.victimId;
855
- victimSupport.victimSupportTypeId = element;
856
- victimSupport.modifiedBy = this.staffId;
857
- myVictimSupports.push(victimSupport);
858
- }));
859
- }
860
- /** @type {?} */
861
- var myVictimDrugUses = [];
862
- console.log('this.victimForm.value.victimDrugUses during save');
863
- console.log(this.victimForm.value.victimDrugUses);
864
- if (this.victimForm.value.victimDrugUses) {
865
- this.victimForm.value.victimDrugUses.forEach((/**
866
- * @param {?} element
867
- * @return {?}
868
- */
869
- element => {
870
- /** @type {?} */
871
- const victimDrugUse = (/** @type {?} */ ({}));
872
- victimDrugUse.drugTypeId = element;
873
- if (element === "OTHER" || element === "" || element === null) {
874
- victimDrugUse.drugTypeId = null;
875
- victimDrugUse.otherDrug = this.victimForm.value.otherDrug;
876
- }
877
- else {
878
- victimDrugUse.drugTypeId = element;
879
- victimDrugUse.otherDrug = null;
880
- }
881
- victimDrugUse.modifiedBy = this.staffId;
882
- victimDrugUse.victimId = this.victimForm.value.victimId;
883
- myVictimDrugUses.push(victimDrugUse);
884
- }));
885
- }
886
- console.log('this.victimForm.value.victimDrugUses during save 1');
887
- console.log(this.victimForm.value.victimDrugUses);
888
- /** @type {?} */
889
- var myVictimWeaponUses = [];
890
- if (this.victimForm.value.victimWeaponUses) {
891
- this.victimForm.value.victimWeaponUses.forEach((/**
892
- * @param {?} element
893
- * @return {?}
894
- */
895
- element => {
896
- /** @type {?} */
897
- const victimWeaponUse = (/** @type {?} */ ({}));
898
- victimWeaponUse.victimId = this.victimForm.value.victimId;
899
- victimWeaponUse.weaponTypeId = element;
900
- if (element == "OTHER") {
901
- victimWeaponUse.otherWeapon = this.victimForm.value.otherWeapon;
902
- }
903
- else {
904
- victimWeaponUse.otherWeapon = null;
905
- }
906
- victimWeaponUse.modifiedBy = this.staffId;
907
- myVictimWeaponUses.push(victimWeaponUse);
908
- }));
909
- }
910
- /** @type {?} */
911
- const newVictim = {
912
- victimId: 0,
913
- offenderId: this.offenderId,
914
- victimOffenderRelationshipTypeId: this.victimForm.value.victimOffenderRelationshipTypeId,
915
- lastName: this.victimForm.value.lastName,
916
- firstName: this.victimForm.value.firstName,
917
- middleName: this.victimForm.value.middleName ? this.victimForm.value.middleName : null,
918
- prefixId: this.victimForm.value.prefixId ? this.victimForm.value.prefixId : null,
919
- suffixId: this.victimForm.value.suffixId ? this.victimForm.value.suffixId : null,
920
- birthDate: this.victimForm.value.birthDate ? this.victimForm.value.birthDate : null,
921
- genderCode: this.victimForm.value.genderCode ? this.victimForm.value.genderCode : null,
922
- underSupervisionFlag: this.victimForm.value.underSupervisionFlag,
923
- minorFlag: this.victimForm.value.minorFlag,
924
- victimAdvocateFlag: this.victimForm.value.victimAdvocateFlag,
925
- homePhone: this.victimForm.value.homePhone ? this.victimForm.value.homePhone : null,
926
- workPhone: this.victimForm.value.workPhone ? this.victimForm.value.workPhone : null,
927
- cellPhone: this.victimForm.value.cellPhone ? this.victimForm.value.cellPhone : null,
928
- email: this.victimForm.value.email ? this.victimForm.value.email : null,
929
- addressId: this.victimForm.value.addressId ? this.victimForm.value.addressId : 1,
930
- emergencyContact: this.victimForm.value.emergencyContact ? this.victimForm.value.emergencyContact : null,
931
- emergencyContactPhone: this.victimForm.value.emergencyContactPhone ? this.victimForm.value.emergencyContactPhone : null,
932
- commonChildrenFlag: this.victimForm.value.commonChildrenFlag,
933
- commonChildrenNumber: this.victimForm.value.commonChildrenNumber,
934
- cpoExpirationFlag: this.victimForm.value.cpoExpirationFlag,
935
- cpoExpirationDate: this.victimForm.value.cpoExpirationDate ? this.datePipe.transform(this.victimForm.value.startDate, 'short') : null,
936
- supportInPlaceFlag: this.victimForm.value.supportInPlaceFlag,
937
- weaponInvolvedFlag: this.victimForm.value.weaponInvolvedFlag,
938
- drugUseFlag: this.victimForm.value.drugUseFlag,
939
- alcoholUseFlag: this.victimForm.value.alcoholUseFlag,
940
- accessRisk: this.victimForm.value.accessRisk,
941
- modifiedBy: this.staffId,
942
- vVictimAdvocate: null,
943
- vVictimGuardian: null,
944
- victimDrugUses: myVictimDrugUses,
945
- victimSupports: myVictimSupports,
946
- victimWeaponUses: myVictimWeaponUses,
947
- advocateFirstName: null,
948
- advocateLastName: null,
949
- advocateEmail: null,
950
- advocatePrefixId: null,
951
- advocateSuffixId: null,
952
- advocateNoPhoneFlag: null,
953
- advocateHomePhone: null,
954
- advocateWorkPhone: null,
955
- advocateCellPhone: null,
956
- advocateAddressId: null,
957
- guardianFirstName: null,
958
- guardianLastName: null,
959
- guardianEmail: null,
960
- guardianPrefixId: null,
961
- guardianSuffixId: null,
962
- guardianNoPhoneFlag: null,
963
- guardianHomePhone: null,
964
- guardianWorkPhone: null,
965
- guardianCellPhone: null,
966
- guardianAddressId: null,
967
- guardianBirthDate: null,
968
- relationship: null,
969
- allowCsosaContactFlag: null
970
- };
971
- if (this.addressId == 0) {
972
- newVictim.addressId = null;
973
- }
974
- else {
975
- newVictim.addressId = this.addressId;
976
- }
977
- newVictim.advocateAddressId = this.advocateAddressId;
978
- newVictim.guardianAddressId = this.guardianAddressId;
979
- console.log('newVictim');
980
- console.log(newVictim);
981
- this.victimService.postVictims(newVictim).subscribe((/**
982
- * @param {?} items
983
- * @return {?}
984
- */
985
- (items) => {
986
- /** @type {?} */
987
- const id = items ? items.victimId : '';
988
- if (this.victimForm.value.victimAdvocateFlag == "YS") {
989
- console.log('add advocate');
990
- /** @type {?} */
991
- const victimAdvocate = {
992
- victimAdvocateId: id,
993
- lastName: this.victimForm.value.advocateLastName,
994
- firstName: this.victimForm.value.advocateFirstName,
995
- prefixId: this.victimForm.value.advocatePrefixId,
996
- suffixId: this.victimForm.value.advocateSuffixId,
997
- addressId: this.advocateAddressId ? this.advocateAddressId : null,
998
- noPhoneFlag: this.victimForm.value.advocateNoPhoneFlag ? this.victimForm.value.advocateNoPhoneFlag : null,
999
- homePhone: this.victimForm.value.advocateHomePhone,
1000
- workPhone: this.victimForm.value.advocateWorkPhone,
1001
- cellPhone: this.victimForm.value.advocateCellPhone,
1002
- email: this.victimForm.value.advocateEmail,
1003
- modifiedBy: this.staffId
1004
- };
1005
- this.victimService.postVictimAdvocate(id, victimAdvocate).subscribe();
1006
- }
1007
- if (this.victimForm.value.minorFlag == true) {
1008
- /** @type {?} */
1009
- const victimGuardian = {
1010
- victimGuardianId: id,
1011
- lastName: this.victimForm.value.guardianLastName,
1012
- firstName: this.victimForm.value.guardianFirstName,
1013
- prefixId: this.victimForm.value.guardianPrefixId,
1014
- suffixId: this.victimForm.value.guardianSuffixId,
1015
- birthDate: this.victimForm.value.guardianBirthDate,
1016
- addressId: this.guardianAddressId ? this.guardianAddressId : null,
1017
- noPhoneFlag: this.victimForm.value.guardianNoPhoneFlag ? this.victimForm.value.guardianNoPhoneFlag : null,
1018
- homePhone: this.victimForm.value.guardianHomePhone,
1019
- workPhone: this.victimForm.value.guardianWorkPhone,
1020
- cellPhone: this.victimForm.value.guardianCellPhone,
1021
- email: this.victimForm.value.guardianEmail,
1022
- modifiedBy: this.staffId
1023
- };
1024
- this.victimService.postVictimGuardian(id, victimGuardian).subscribe();
1025
- }
1026
- this.snackBar.open('Add Victim Successfully!', '', {
1027
- duration: 3000,
1028
- });
1029
- //insert new
1030
- if (this.isIntake === true) {
1031
- this.router.navigate(['victimHome']);
1032
- }
1033
- else {
1034
- this.router.navigate(['victimList']);
1035
- }
1036
- //this.onSave.emit(this.victimDetail);
1037
- }));
1038
- }
1039
- else {
1040
- //update victim
1041
- this.victimDetail.underSupervisionFlag = this.victimForm.value.underSupervisionFlag;
1042
- this.victimDetail.victimOffenderRelationshipTypeId = this.victimForm.value.victimOffenderRelationshipTypeId;
1043
- this.victimDetail.lastName = this.victimForm.value.lastName;
1044
- this.victimDetail.firstName = this.victimForm.value.firstName;
1045
- this.victimDetail.middleName = this.victimForm.value.middleName;
1046
- this.victimDetail.prefixId = this.victimForm.value.prefixId ? this.victimForm.value.prefixId : null;
1047
- this.victimDetail.suffixId = this.victimForm.value.suffixId ? this.victimForm.value.suffixId : null;
1048
- this.victimDetail.birthDate = this.victimForm.value.birthDate;
1049
- this.victimDetail.genderCode = this.victimForm.value.genderCode;
1050
- this.victimDetail.minorFlag = this.victimForm.value.minorFlag;
1051
- this.victimDetail.homePhone = this.victimForm.value.homePhone ? this.victimForm.value.homePhone : null;
1052
- this.victimDetail.workPhone = this.victimForm.value.workPhone ? this.victimForm.value.workPhone : null;
1053
- this.victimDetail.cellPhone = this.victimForm.value.cellPhone ? this.victimForm.value.cellPhone : null;
1054
- this.victimDetail.email = this.victimForm.value.email;
1055
- this.victimDetail.victimAdvocateFlag = this.victimForm.value.victimAdvocateFlag;
1056
- this.victimDetail.emergencyContact = this.victimForm.value.emergencyContact;
1057
- this.victimDetail.emergencyContactPhone = this.victimForm.value.emergencyContactPhone ? this.victimForm.value.emergencyContactPhone : null;
1058
- this.victimDetail.commonChildrenFlag = this.victimForm.value.commonChildrenFlag;
1059
- this.victimDetail.commonChildrenNumber = this.victimForm.value.commonChildrenNumber;
1060
- this.victimDetail.cpoExpirationDate = this.victimForm.value.cpoExpirationDate;
1061
- this.victimDetail.cpoExpirationFlag = this.victimForm.value.cpoExpirationFlag;
1062
- this.victimDetail.supportInPlaceFlag = this.victimForm.value.supportInPlaceFlag;
1063
- this.victimDetail.weaponInvolvedFlag = this.victimForm.value.weaponInvolvedFlag;
1064
- this.victimDetail.drugUseFlag = this.victimForm.value.drugUseFlag;
1065
- this.victimDetail.alcoholUseFlag = this.victimForm.value.alcoholUseFlag;
1066
- this.victimDetail.accessRisk = this.victimForm.value.accessRisk;
1067
- this.victimDetail.addressId = this.addressId;
1068
- this.victimDetail.allowCsosaContactFlag = this.victimForm.value.allowCsosaContactFlag;
1069
- this.victimDetail.victimSupports = [];
1070
- this.victimForm.value.victimSupports.forEach((/**
1071
- * @param {?} element
1072
- * @return {?}
1073
- */
1074
- element => {
1075
- /** @type {?} */
1076
- const victimSupport = (/** @type {?} */ ({}));
1077
- victimSupport.victimId = this.victimDetail.victimId;
1078
- victimSupport.victimSupportTypeId = element;
1079
- victimSupport.modifiedBy = this.staffId;
1080
- this.victimDetail.victimSupports.push(victimSupport);
1081
- }));
1082
- this.victimDetail.victimDrugUses = [];
1083
- console.log('this.victimForm.value.victimDrugUses calculate');
1084
- console.log(this.victimForm.value.victimDrugUses);
1085
- this.victimForm.value.victimDrugUses.forEach((/**
1086
- * @param {?} element
1087
- * @return {?}
1088
- */
1089
- element => {
1090
- /** @type {?} */
1091
- const victimDrugUse = (/** @type {?} */ ({}));
1092
- victimDrugUse.drugTypeId = element;
1093
- console.log('this.victimForm.value.victimDrugUses before');
1094
- console.log(this.victimForm.value.victimDrugUses);
1095
- if (element === "OTHER" || element === "") {
1096
- victimDrugUse.drugTypeId = null;
1097
- victimDrugUse.otherDrug = this.victimForm.value.otherDrug;
1098
- }
1099
- else {
1100
- victimDrugUse.drugTypeId = element;
1101
- victimDrugUse.otherDrug = null;
1102
- }
1103
- victimDrugUse.modifiedBy = this.staffId;
1104
- victimDrugUse.victimId = this.victimDetail.victimId;
1105
- this.victimDetail.victimDrugUses.push(victimDrugUse);
1106
- console.log('this.victimForm.value.victimDrugUses after');
1107
- console.log(this.victimForm.value.victimDrugUses);
1108
- }));
1109
- this.victimForm.value.victimDrugUses.filter((/**
1110
- * @param {?} word
1111
- * @return {?}
1112
- */
1113
- word => (!(word.drugTypeId === null && word.otherDrug === null))));
1114
- console.log('adjust this.victimForm.value.victimDrugUses ');
1115
- console.log(this.victimForm.value.victimDrugUses);
1116
- this.victimDetail.victimWeaponUses = [];
1117
- this.victimForm.value.victimWeaponUses.forEach((/**
1118
- * @param {?} element
1119
- * @return {?}
1120
- */
1121
- element => {
1122
- /** @type {?} */
1123
- const victimWeaponUse = (/** @type {?} */ ({}));
1124
- victimWeaponUse.victimId = this.victimDetail.victimId;
1125
- victimWeaponUse.weaponTypeId = element;
1126
- console.log('weapon element');
1127
- console.log(element);
1128
- console.log(this.victimForm.value.otherWeapon);
1129
- console.log(this.victimForm.value.victimWeaponUses);
1130
- if (element == "OTHER") {
1131
- victimWeaponUse.otherWeapon = this.victimForm.value.otherWeapon;
1132
- }
1133
- else {
1134
- victimWeaponUse.otherWeapon = null;
1135
- }
1136
- victimWeaponUse.modifiedBy = this.staffId;
1137
- this.victimDetail.victimWeaponUses.push(victimWeaponUse);
1138
- }));
1139
- console.log('this.victimDetail before emit');
1140
- console.log(this.victimDetail);
1141
- this.victimService.putVictims(this.victimDetail.victimId, this.victimDetail).subscribe((/**
1142
- * @param {?} items
1143
- * @return {?}
1144
- */
1145
- (items) => {
1146
- this.snackBar.open('Update Successfully!', '', {
1147
- duration: 3000,
1148
- });
1149
- //Advocate section
1150
- this.victimAdvocate.victimAdvocateId = this.victimDetail.victimId;
1151
- this.victimAdvocate.lastName = this.victimForm.value.advocateLastName;
1152
- this.victimAdvocate.firstName = this.victimForm.value.advocateFirstName;
1153
- this.victimAdvocate.prefixId = this.victimForm.value.advocatePrefixId ? this.victimForm.value.advocatePrefixId : null;
1154
- this.victimAdvocate.suffixId = this.victimForm.value.advocateSuffixId ? this.victimForm.value.advocateSuffixId : null;
1155
- this.victimAdvocate.addressId = this.advocateAddressId ? this.advocateAddressId : null;
1156
- this.victimAdvocate.noPhoneFlag = this.victimForm.value.advocateNoPhoneFlag ? true : false;
1157
- this.victimAdvocate.homePhone = this.victimForm.value.advocateHomePhone ? this.victimForm.value.advocateHomePhone : null;
1158
- this.victimAdvocate.workPhone = this.victimForm.value.advocateWorkPhone ? this.victimForm.value.advocateWorkPhone : null;
1159
- this.victimAdvocate.cellPhone = this.victimForm.value.advocateCellPhone ? this.victimForm.value.advocateCellPhone : null;
1160
- this.victimAdvocate.email = this.victimForm.value.advocateEmail ? this.victimForm.value.advocateEmail : null;
1161
- this.victimAdvocate.modifiedBy = this.staffId;
1162
- console.log('work on advocate part');
1163
- if (this.victimDetail.victimAdvocateFlag == 'YS') {
1164
- console.log('work on advocate flag is YS ');
1165
- if (this.victimDetail.advocateFirstName != null) {
1166
- console.log('check advocate fisrt name ');
1167
- console.log(this.victimDetail.advocateFirstName);
1168
- this.victimService.putVictimAdvocate(this.victimDetail.victimId, this.victimAdvocate).subscribe((/**
1169
- * @param {?} resp
1170
- * @return {?}
1171
- */
1172
- resp => { }));
1173
- }
1174
- else {
1175
- console.log('add advocate');
1176
- console.log(this.victimAdvocate);
1177
- this.victimService.postVictimAdvocate(this.victimDetail.victimId, this.victimAdvocate).subscribe();
1178
- }
1179
- }
1180
- // guardian section
1181
- this.victimGuardian.victimGuardianId = this.victimDetail.victimId;
1182
- this.victimGuardian.lastName = this.victimForm.value.guardianLastName;
1183
- this.victimGuardian.firstName = this.victimForm.value.guardianFirstName;
1184
- this.victimGuardian.prefixId = this.victimForm.value.guardianPrefixId ? this.victimForm.value.guardianPrefixId : null;
1185
- this.victimGuardian.suffixId = this.victimForm.value.guardianSuffixId ? this.victimForm.value.guardianSuffixId : null;
1186
- this.victimGuardian.addressId = this.guardianAddressId ? this.guardianAddressId : null;
1187
- this.victimGuardian.noPhoneFlag = this.victimForm.value.guardianNoPhoneFlag ? true : false;
1188
- this.victimGuardian.homePhone = this.victimForm.value.guardianHomePhone ? this.victimForm.value.guardianHomePhone : null;
1189
- this.victimGuardian.workPhone = this.victimForm.value.guardianWorkPhone ? this.victimForm.value.guardianWorkPhone : null;
1190
- this.victimGuardian.cellPhone = this.victimForm.value.guardianCellPhone ? this.victimForm.value.guardianCellPhone : null;
1191
- this.victimGuardian.email = this.victimForm.value.guardianEmail ? this.victimForm.value.guardianEmail : null;
1192
- this.victimGuardian.modifiedBy = this.staffId;
1193
- if (this.victimDetail.minorFlag == true) {
1194
- if (this.victimDetail.guardianFirstName != null)
1195
- this.victimService.putVictimGuardian(this.victimDetail.victimId, this.victimGuardian).subscribe((/**
1196
- * @param {?} resp
1197
- * @return {?}
1198
- */
1199
- resp => {
1200
- }));
1201
- else {
1202
- console.log('add gurdian');
1203
- console.log(this.victimGuardian);
1204
- this.victimService.postVictimGuardian(this.victimDetail.victimId, this.victimGuardian).subscribe();
1205
- }
1206
- }
1207
- }));
1208
- }
1209
- } //end of this.phoneValidationFlag = false
1210
- console.log('this.victimDetail');
1211
- console.log(this.victimDetail);
1212
- this.onSave.emit(this.victimDetail);
1213
- }
1214
- //#endregion "save victim"
1215
- /**
1216
- * @return {?}
1217
- */
1218
- addContact() {
1219
- this.router.navigate(['victimContact', this.victimId]);
1220
- }
1221
- /**
1222
- * @param {?} value
1223
- * @return {?}
1224
- */
1225
- formatLabel(value) {
1226
- return value;
1227
- }
1228
- }
1229
- SmartVictimDetailComponent.decorators = [
1230
- { type: Component, args: [{
1231
- selector: 'csmart-victim-detail',
1232
- 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>&nbsp;\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>&nbsp;\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>&nbsp;\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>&nbsp;\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>&nbsp;\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>&nbsp;\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>&nbsp;\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>&nbsp;\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): &nbsp;<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 &nbsp;&nbsp;\r\n <div *ngIf=\"showDelete\" class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"deleteVictim()\">Delete </button>\r\n </div>\r\n &nbsp;&nbsp; \r\n <div class=\"inner\">\r\n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Clear </button>\r\n </div>\r\n &nbsp;&nbsp; \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",
1233
- providers: [CommonDialogService],
1234
- 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}"]
1235
- }] }
1236
- ];
1237
- /** @nocollapse */
1238
- SmartVictimDetailComponent.ctorParameters = () => [
1239
- { type: Location },
1240
- { type: FormBuilder },
1241
- { type: MatDialog },
1242
- { type: ActivatedRoute },
1243
- { type: Router },
1244
- { type: MatSnackBar },
1245
- { type: CommonDialogService },
1246
- { type: NgcSmartVictimService }
1247
- ];
1248
- SmartVictimDetailComponent.propDecorators = {
1249
- victimDetail: [{ type: Input }],
1250
- staffId: [{ type: Input }],
1251
- offenderId: [{ type: Input }],
1252
- isIntake: [{ type: Input }],
1253
- onSave: [{ type: Output }],
1254
- onCancel: [{ type: Output }]
1255
- };
1256
- if (false) {
1257
- /** @type {?} */
1258
- SmartVictimDetailComponent.prototype.victimDetail;
1259
- /** @type {?} */
1260
- SmartVictimDetailComponent.prototype.staffId;
1261
- /** @type {?} */
1262
- SmartVictimDetailComponent.prototype.offenderId;
1263
- /** @type {?} */
1264
- SmartVictimDetailComponent.prototype.isIntake;
1265
- /** @type {?} */
1266
- SmartVictimDetailComponent.prototype.onSave;
1267
- /** @type {?} */
1268
- SmartVictimDetailComponent.prototype.onCancel;
1269
- /** @type {?} */
1270
- SmartVictimDetailComponent.prototype.victimId;
1271
- /** @type {?} */
1272
- SmartVictimDetailComponent.prototype.victimForm;
1273
- /** @type {?} */
1274
- SmartVictimDetailComponent.prototype.drugs;
1275
- /** @type {?} */
1276
- SmartVictimDetailComponent.prototype.victimSupportTypes;
1277
- /** @type {?} */
1278
- SmartVictimDetailComponent.prototype.prefixes;
1279
- /** @type {?} */
1280
- SmartVictimDetailComponent.prototype.suffixes;
1281
- /** @type {?} */
1282
- SmartVictimDetailComponent.prototype.relationshipTypes;
1283
- /** @type {?} */
1284
- SmartVictimDetailComponent.prototype.genders;
1285
- /** @type {?} */
1286
- SmartVictimDetailComponent.prototype.docketlist;
1287
- /** @type {?} */
1288
- SmartVictimDetailComponent.prototype.weaponTypes;
1289
- /** @type {?} */
1290
- SmartVictimDetailComponent.prototype.flagOption;
1291
- /** @type {?} */
1292
- SmartVictimDetailComponent.prototype.selectedWeaponTypes;
1293
- /** @type {?} */
1294
- SmartVictimDetailComponent.prototype.selectedVictimSupportTypes;
1295
- /** @type {?} */
1296
- SmartVictimDetailComponent.prototype.selectedDrugs;
1297
- /** @type {?} */
1298
- SmartVictimDetailComponent.prototype.id;
1299
- /** @type {?} */
1300
- SmartVictimDetailComponent.prototype.hidden;
1301
- /**
1302
- * @type {?}
1303
- * @private
1304
- */
1305
- SmartVictimDetailComponent.prototype.sub;
1306
- /** @type {?} */
1307
- SmartVictimDetailComponent.prototype.victimAdvocate;
1308
- /** @type {?} */
1309
- SmartVictimDetailComponent.prototype.victimGuardian;
1310
- /** @type {?} */
1311
- SmartVictimDetailComponent.prototype.victimWeaponUse;
1312
- /** @type {?} */
1313
- SmartVictimDetailComponent.prototype.victimSupport;
1314
- /** @type {?} */
1315
- SmartVictimDetailComponent.prototype.victimDrugUse;
1316
- /** @type {?} */
1317
- SmartVictimDetailComponent.prototype.result;
1318
- /** @type {?} */
1319
- SmartVictimDetailComponent.prototype.editMode;
1320
- /** @type {?} */
1321
- SmartVictimDetailComponent.prototype.guardianTabFlag;
1322
- /** @type {?} */
1323
- SmartVictimDetailComponent.prototype.advocateTabFlag;
1324
- /** @type {?} */
1325
- SmartVictimDetailComponent.prototype.commonChildrenDivFlag;
1326
- /** @type {?} */
1327
- SmartVictimDetailComponent.prototype.cpoExpirationDivFlag;
1328
- /** @type {?} */
1329
- SmartVictimDetailComponent.prototype.supportInPlaceDivFlag;
1330
- /** @type {?} */
1331
- SmartVictimDetailComponent.prototype.weaponInvolvedDivFlag;
1332
- /** @type {?} */
1333
- SmartVictimDetailComponent.prototype.drugUseDivFlag;
1334
- /** @type {?} */
1335
- SmartVictimDetailComponent.prototype.showDelete;
1336
- /** @type {?} */
1337
- SmartVictimDetailComponent.prototype.addressId;
1338
- /** @type {?} */
1339
- SmartVictimDetailComponent.prototype.advocateAddressId;
1340
- /** @type {?} */
1341
- SmartVictimDetailComponent.prototype.guardianAddressId;
1342
- /** @type {?} */
1343
- SmartVictimDetailComponent.prototype.datePipe;
1344
- /** @type {?} */
1345
- SmartVictimDetailComponent.prototype.emailPattern;
1346
- /** @type {?} */
1347
- SmartVictimDetailComponent.prototype.phoneNumber;
1348
- /** @type {?} */
1349
- SmartVictimDetailComponent.prototype.editVictim;
1350
- /** @type {?} */
1351
- SmartVictimDetailComponent.prototype.victimAge;
1352
- /** @type {?} */
1353
- SmartVictimDetailComponent.prototype.otherWeaponFlag;
1354
- /** @type {?} */
1355
- SmartVictimDetailComponent.prototype.otherDrugFlag;
1356
- /** @type {?} */
1357
- SmartVictimDetailComponent.prototype.contactDataSource;
1358
- /** @type {?} */
1359
- SmartVictimDetailComponent.prototype.contactList;
1360
- /** @type {?} */
1361
- SmartVictimDetailComponent.prototype.guardianPhoneExistFlag;
1362
- /** @type {?} */
1363
- SmartVictimDetailComponent.prototype.advocatePhoneExistFlag;
1364
- /** @type {?} */
1365
- SmartVictimDetailComponent.prototype.phoneValidationFlag;
1366
- /** @type {?} */
1367
- SmartVictimDetailComponent.prototype.guaridanNoPhoneChkFlag;
1368
- /** @type {?} */
1369
- SmartVictimDetailComponent.prototype.advocateNoPhoneChkFlag;
1370
- /** @type {?} */
1371
- SmartVictimDetailComponent.prototype.addressValidators;
1372
- /**
1373
- * @type {?}
1374
- * @private
1375
- */
1376
- SmartVictimDetailComponent.prototype.location;
1377
- /**
1378
- * @type {?}
1379
- * @private
1380
- */
1381
- SmartVictimDetailComponent.prototype.formBuilder;
1382
- /**
1383
- * @type {?}
1384
- * @private
1385
- */
1386
- SmartVictimDetailComponent.prototype.dialog;
1387
- /**
1388
- * @type {?}
1389
- * @private
1390
- */
1391
- SmartVictimDetailComponent.prototype.route;
1392
- /**
1393
- * @type {?}
1394
- * @private
1395
- */
1396
- SmartVictimDetailComponent.prototype.router;
1397
- /** @type {?} */
1398
- SmartVictimDetailComponent.prototype.snackBar;
1399
- /**
1400
- * @type {?}
1401
- * @private
1402
- */
1403
- SmartVictimDetailComponent.prototype.commonDialogService;
1404
- /**
1405
- * @type {?}
1406
- * @private
1407
- */
1408
- SmartVictimDetailComponent.prototype.victimService;
1409
- }
1410
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY3NtYXJ0L25nYy1zbWFydC12aWN0aW0vIiwic291cmNlcyI6WyJsaWIvc21hcnQtdmljdGltLWRldGFpbC9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQWEsV0FBVyxFQUFDLFVBQVUsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxTQUFTLEVBQUMsV0FBVyxFQUFpQixRQUFRLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBYyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUMsTUFBSSx1QkFBdUIsQ0FBQztBQUczRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUc1RCwrQkFFQzs7OztBQUNELDhCQUVDOzs7Ozs7O0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFNBQW9CLEVBQ3ZELFNBQXNCLEVBQ3RCLGNBQXVCO0lBQ3pCLE9BQU87Ozs7SUFBQyxXQUFXLENBQUMsRUFBRTtRQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQztTQUNYOztZQUNHLEtB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QUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDcEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDcEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDckcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDckcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcs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Qjs7SUFDbkIsd0NBQVE7O0lBQ1IsNENBQXFCOzs7OztJQUNyQix5Q0FBaUI7O0lBQ2pCLG9EQUFxRDs7SUFDckQsb0RBQW9EOztJQUNwRCxxREFBaUM7O0lBQ2pDLG1EQUE2Qjs7SUFDN0IsbURBQTZCOztJQUM3Qiw0Q0FBWTs7SUFDWiw4Q0FBYzs7SUFDZCxxREFBaUM7O0lBQ2pDLHFEQUFpQzs7SUFDakMsMkRBQXVDOztJQUN2QywwREFBdUM7O0lBQ3ZDLDJEQUF1Qzs7SUFDdkMsMkRBQXVDOztJQUN2QyxvREFBZ0M7O0lBQ2hDLGdEQUE0Qjs7SUFDNUIsK0NBQXNCOztJQUN0Qix1REFBOEI7O0lBQzlCLHVEQUE4Qjs7SUFDOUIsOENBQWlDOztJQUNqQyxrREFBMEQ7O0lBQzFELGlEQUF3Qjs7SUFDeEIsZ0RBQWdDOztJQUNoQywrQ0FBa0I7O0lBQ2xCLHFEQUFpQzs7SUFDakMsbURBQStCOztJQUUvQix1REFBNEM7O0lBQzVDLGlEQUF1Qjs7SUFDdkIsNERBQXlDOztJQUN6Qyw0REFBeUM7O0lBQ3pDLHlEQUFzQzs7SUFDdEMsNERBQXVDOztJQUN2Qyw0REFBd0M7O0lBRXhDLHVEQU9FOzs7OztJQUdBLDhDQUEwQjs7Ozs7SUFDMUIsaURBQWdDOzs7OztJQUNoQyw0Q0FBeUI7Ozs7O0lBQ3pCLDJDQUE2Qjs7Ozs7SUFDN0IsNENBQXNCOztJQUN0Qiw4Q0FBNEI7Ozs7O0lBQzVCLHlEQUFnRDs7Ozs7SUFDaEQsbURBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uQ2hhbmdlcywgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1Db250cm9sLFZhbGlkYXRvcnMsVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyxNYXRTbmFja0JhcixNYXRSYWRpb0NoYW5nZSwgTWF0SW5wdXQsIE1hdFNlbGVjdCwgTWF0UmFkaW9Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcclxuaW1wb3J0IHsgVmljdGltLFZpY3RpbURydWdVc2UsIENvbnRhY3QsIFZpY3RpbUFkdm9jYXRlLFZpY3RpbUd1YXJkaWFuLFZpY3RpbVdlYXBvblVzZSxWaWN0aW1TdXBwb3J0IH0gZnJvbSAnLi4vc21hcnQtdmljdGltLm1vZGVsJztcclxuaW1wb3J0IHsgTmdjU21hcnRWaWN0aW1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtdmljdGltLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29tbW9uRGlhbG9nU2VydmljZX0gZnJvbSAnLi4vLi9jb21tb24tZGlhbG9nL2NvbW1vbi1kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGVQaXBlLCBmb3JtYXREYXRlLCBMb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHl9ZnJvbSdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyB0cnVuY2F0ZSB9IGZyb20gJ2ZzJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEFkZHJlc3NWYWxpZGF0b3JzLCBTbWFydEFkZHJlc3NDb21wb25lbnQgfSBmcm9tICdAY3NtYXJ0L25nYy1zbWFydC1hZGRyZXNzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQm9vbGVhbkZuIHtcclxuICAoKTogYm9vbGVhbjtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ0ZuIHtcclxuICAoKTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29uZGl0aW9uYWxWYWxpZGF0b3IocHJlZGljYXRlOiBCb29sZWFuRm4sXHJcbiAgdmFsaWRhdG9yOiBWYWxpZGF0b3JGbixcclxuICBlcnJvck5hbWVzcGFjZT86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxucmV0dXJuIChmb3JtQ29udHJvbCA9PiB7XHJcbmlmICghZm9ybUNvbnRyb2wucGFyZW50KSB7XHJcbnJldHVybiBudWxsO1xyXG59XHJcbmxldCBlcnJvciA9IG51bGw7XHJcbmlmIChwcmVkaWNhdGUoKSkge1xyXG5lcnJvciA9IHZhbGlkYXRvcihmb3JtQ29udHJvbCk7XHJcbn1cclxuaWYgKGVycm9yTmFtZXNwYWNlICYmIGVycm9yKSB7XHJcbmNvbnN0IGN1c3RvbUVycm9yID0ge307XHJcbmN1c3RvbUVycm9yW2Vycm9yTmFtZXNwYWNlXSA9IGVycm9yO1xyXG5lcnJvciA9IGN1c3RvbUVycm9yXHJcbn1cclxucmV0dXJuIGVycm9yO1xyXG59KVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0NvbmRpdGlvbmFsVmFsaWRhdG9yKHByZWRpY2F0ZTogU3RyaW5nRm4sXHJcbiAgdmFsaWRhdG9yOiBWYWxpZGF0b3JGbixcclxuICBlcnJvck5hbWVzcGFjZT86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxucmV0dXJuIChmb3JtQ29udHJvbCA9PiB7XHJcbmlmICghZm9ybUNvbnRyb2wucGFyZW50KSB7XHJcbnJldHVybiBudWxsO1xyXG59XHJcbmxldCBlcnJvciA9IG51bGw7XHJcbmlmIChwcmVkaWNhdGUoKT09J1lTJykge1xyXG5lcnJvciA9IHZhbGlkYXRvcihmb3JtQ29udHJvbCk7XHJcbn1cclxuaWYgKGVycm9yTmFtZXNwYWNlICYmIGVycm9yKSB7XHJcbmNvbnN0IGN1c3RvbUVycm9yID0ge307XHJcbmN1c3RvbUVycm9yW2Vycm9yTmFtZXNwYWNlXSA9IGVycm9yO1xyXG5lcnJvciA9IGN1c3RvbUVycm9yXHJcbn1cclxucmV0dXJuIGVycm9yO1xyXG59KVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NzbWFydC12aWN0aW0tZGV0YWlsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbQ29tbW9uRGlhbG9nU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0VmljdGltRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHZpY3RpbURldGFpbCA9IDxWaWN0aW0+e307XHJcbiAgQElucHV0KCkgc3RhZmZJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG9mZmVuZGVySWQ6IG51bWJlcjtcclxuICBASW5wdXQoKSBpc0ludGFrZTogYm9vbGVhbjtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgXHJcblxyXG4gIHZpY3RpbUlkOiBudW1iZXI7XHJcbiAgdmljdGltRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBkcnVnczogYW55O1xyXG4gIHZpY3RpbVN1cHBvcnRUeXBlczogYW55O1xyXG4gIHByZWZpeGVzOiBhbnk7XHJcbiAgLy92aWN0aW06IFZpY3RpbSA9IDxWaWN0aW0+e307XHJcbiAgc3VmZml4ZXM6IGFueTtcclxuICByZWxhdGlvbnNoaXBUeXBlczogYW55O1xyXG4gIGdlbmRlcnM6IGFueTtcclxuICBkb2NrZXRsaXN0OiBhbnk7XHJcbiAgd2VhcG9uVHlwZXM6IGFueTtcclxuICBmbGFnT3B0aW9uOiBhbnk7XHJcbiAgc2VsZWN0ZWRXZWFwb25UeXBlczogYW55O1xyXG4gIHNlbGVjdGVkVmljdGltU3VwcG9ydFR5cGVzOiBhbnk7XHJcbiAgc2VsZWN0ZWREcnVnczogYW55O1xyXG4gIGlkOiBhbnk7XHJcbiAgaGlkZGVuOiBib29sZWFuPXRydWU7XHJcbiAgcHJpdmF0ZSBzdWI6IGFueTtcclxuICB2aWN0aW1BZHZvY2F0ZTogVmljdGltQWR2b2NhdGUgPSAgPFZpY3RpbUFkdm9jYXRlPnt9O1xyXG4gIHZpY3RpbUd1YXJkaWFuOiBWaWN0aW1HdWFyZGlhbiA9IDxWaWN0aW1HdWFyZGlhbj57fTsgXHJcbiAgdmljdGltV2VhcG9uVXNlOiBWaWN0aW1XZWFwb25Vc2U7XHJcbiAgdmljdGltU3VwcG9ydDogVmljdGltU3VwcG9ydDtcclxuICB2aWN0aW1EcnVnVXNlOiBWaWN0aW1EcnVnVXNlO1xyXG4gIHJlc3VsdDogYW55O1xyXG4gIGVkaXRNb2RlOiBhbnk7XHJcbiAgZ3VhcmRpYW5UYWJGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWR2b2NhdGVUYWJGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY29tbW9uQ2hpbGRyZW5EaXZGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY3BvRXhwaXJhdGlvbkRpdkZsYWcgOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3VwcG9ydEluUGxhY2VEaXZGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgd2VhcG9uSW52b2x2ZWREaXZGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZHJ1Z1VzZURpdkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93RGVsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWRkcmVzc0lkOiBudW1iZXIgPSAwO1xyXG4gIGFkdm9jYXRlQWRkcmVzc0lkOiBudW1iZXIgPSAwO1xyXG4gIGd1YXJkaWFuQWRkcmVzc0lkOiBudW1iZXIgPSAwO1xyXG4gIGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xyXG4gIGVtYWlsUGF0dGVybiA9IFwiXlthLXowLTkuXyUrLV0rQFthLXowLTkuLV0rXFwuW2Etel17Miw0fSRcIjtcclxuICBwaG9uZU51bWJlciA9IFwiXFxcXGR7MTB9XCI7XHJcbiAgZWRpdFZpY3RpbTogVmljdGltID0gPFZpY3RpbT57fTtcclxuICB2aWN0aW1BZ2U6IG51bWJlcjtcclxuICBvdGhlcldlYXBvbkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvdGhlckRydWdGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnRhY3REYXRhU291cmNlPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKCk7XHJcbiAgY29udGFjdExpc3Q6IENvbnRhY3RbXTtcclxuICBndWFyZGlhblBob25lRXhpc3RGbGFnOiBib29sZWFuID0gIGZhbHNlO1xyXG4gIGFkdm9jYXRlUGhvbmVFeGlzdEZsYWc6IGJvb2xlYW4gPSAgZmFsc2U7XHJcbiAgcGhvbmVWYWxpZGF0aW9uRmxhZzogYm9vbGVhbiA9ICBmYWxzZTtcclxuICBndWFyaWRhbk5vUGhvbmVDaGtGbGFnOiBib29sZWFuID0gdHJ1ZTtcclxuICBhZHZvY2F0ZU5vUGhvbmVDaGtGbGFnOiBib29sZWFuID0gIHRydWU7XHJcblxyXG4gIGFkZHJlc3NWYWxpZGF0b3JzOiBBZGRyZXNzVmFsaWRhdG9ycyA9IHtcclxuICAgIHN0cmVldDogW10sXHJcbiAgICBzdHJlZXQyOiBbXSxcclxuICAgIGNpdHk6IFtdLFxyXG4gICAgc3RhdGVDb2RlOiBbXSxcclxuICAgIHppcENvZGU6IFtdLFxyXG4gICAgcHNhQ29kZTogW10sXHJcbiAgfTtcclxuXHJcbiBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIGNvbW1vbkRpYWxvZ1NlcnZpY2U6IENvbW1vbkRpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHZpY3RpbVNlcnZpY2U6IE5nY1NtYXJ0VmljdGltU2VydmljZSkge1xyXG4gICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGluaXRGb3JtKCkge1xyXG4gICAgXHJcbiAgICB0aGlzLnZpY3RpbUZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgdW5kZXJTdXBlcnZpc2lvbkZsYWc6ICBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXHJcbiAgICAgIHZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcclxuICAgICAgbGFzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcclxuICAgICAgZmlyc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXHJcbiAgICAgIG1pZGRsZU5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgcHJlZml4SWQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgc3VmZml4SWQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZ2VuZGVyQ29kZTpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGJpcnRoRGF0ZTogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBob21lUGhvbmU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5waG9uZU51bWJlcikgXSkpLFxyXG4gICAgICBjZWxsUGhvbmU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5waG9uZU51bWJlcikgXSkpLFxyXG4gICAgICB3b3JrUGhvbmU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5waG9uZU51bWJlcikgXSkpLFxyXG4gICAgICBlbWFpbDpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuZW1haWxQYXR0ZXJuKSBdKSksXHJcbiAgICAgIG1pbm9yRmxhZzpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXHJcbiAgICAgIHZpY3RpbUFkdm9jYXRlRmxhZzogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxyXG4gICAgICBndWFyZGlhbkxhc3ROYW1lOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZ3VhcmRpYW5GaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywpLFxyXG4gICAgICBndWFyZGlhblByZWZpeElkOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZ3VhcmRpYW5TdWZmaXhJZDogbmV3IEZvcm1Db250cm9sKCcnLCApLCAgICAgICAgXHJcbiAgICAgIC8vZ3VhcmRpYW5HZW5kZXI6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBndWFyZGlhbkJpcnRoRGF0ZTogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBndWFyZGlhbk5vUGhvbmVGbGFnOm5ldyBGb3JtQ29udHJvbCh0cnVlKSxcclxuXHJcbiAgICAgIGd1YXJkaWFuSG9tZVBob25lOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5waG9uZU51bWJlcikgXSApKSxcclxuICAgICAgZ3VhcmRpYW5DZWxsUGhvbmU6bmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdICkpLFxyXG4gICAgICBndWFyZGlhbldvcmtQaG9uZTpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucGhvbmVOdW1iZXIpIF0gKSksXHJcbiAgICAgXHJcbiAgICAgXHJcbiAgICAgIGd1YXJkaWFuRW1haWw6bmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLmVtYWlsUGF0dGVybikgXSkpLFxyXG4gICAgICBhZHZvY2F0ZU5vUGhvbmVGbGFnOiBuZXcgRm9ybUNvbnRyb2wodHJ1ZSksXHJcbiAgXHJcblxyXG4gICAgICBhZHZvY2F0ZVdvcmtQaG9uZTpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdICkpLFxyXG4gICAgICBhZHZvY2F0ZUhvbWVQaG9uZTpuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBob25lTnVtYmVyKSBdICkpLFxyXG4gICAgICBhZHZvY2F0ZUNlbGxQaG9uZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5waG9uZU51bWJlcikgXSApKSxcclxuICAgICBcclxuXHJcbiAgICAgIGFkdm9jYXRlU3VmZml4SWQ6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBhZHZvY2F0ZVByZWZpeElkOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGFkdm9jYXRlRmlyc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIHN0cmluZ0NvbmRpdGlvbmFsVmFsaWRhdG9yKCgpID0+IHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnZhbHVlLCAgVmFsaWRhdG9ycy5yZXF1aXJlZCwgJ2lsbHVtaW5hdGlFcnJvcicpKSxcclxuICAgICAgYWR2b2NhdGVMYXN0TmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBzdHJpbmdDb25kaXRpb25hbFZhbGlkYXRvcigoKSA9PiB0aGlzLnZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1BZHZvY2F0ZUZsYWcnKS52YWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCwnaWxsdW1pbmF0aUVycm9yJykpLFxyXG4gICAgICBhZHZvY2F0ZUVtYWlsOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuZW1haWxQYXR0ZXJuKSBdKSksXHJcbiAgICAgIGVtZXJnZW5jeUNvbnRhY3Q6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZW1lcmdlbmN5Q29udGFjdFBob25lOm5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5waG9uZU51bWJlcikgXSkpLFxyXG4gICAgICBlbWVyZ2VuY3lDaGlsZHJlbjogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBlbWVyZ2VuY3lDcG86IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZW1lcmdlbmN5RHJ1ZzpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGVtZXJnZW5jeVN1cHBvcnQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgZW1lcmdlbmN5V2VhcG9uOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGRydWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgd2VhcG9uOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHN1cHBvcnQ6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgY29tbW9uQ2hpbGRyZW5GbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGNvbW1vbkNoaWxkcmVuTnVtYmVyOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgY3BvRXhwaXJhdGlvbkZsYWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgY3BvRXhwaXJhdGlvbkRhdGU6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYWNjZXNzUmlzazpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGRydWdVc2VGbGFnOm5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgc3VwcG9ydEluUGxhY2VGbGFnOiBuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHdlYXBvbkludm9sdmVkRmxhZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBvdGhlcldlYXBvbjogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICBvdGhlckRydWc6IG5ldyBGb3JtQ29udHJvbCgnJywgKSxcclxuICAgICAgYWxjb2hvbFVzZUZsYWc6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICB2aWN0aW1TdXBwb3J0czpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIHZpY3RpbVdlYXBvblVzZXM6bmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgICB2aWN0aW1EcnVnVXNlczpuZXcgRm9ybUNvbnRyb2woJycsICksXHJcbiAgICAgIGFsbG93Q3Nvc2FDb250YWN0RmxhZzogbmV3IEZvcm1Db250cm9sKCcnLCApLFxyXG4gICAgXHJcbiBcclxufSk7XHJcblxyXG4gICAgdGhpcy52aWN0aW1Gb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcblx0XHR0aGlzLnZpY3RpbUZvcm0ubWFya0FzVW50b3VjaGVkKCk7XHJcblxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIF9nZXRWaWN0aW0oKSB7XHJcbiAgICBpZiAodGhpcy52aWN0aW1JZCA9PT0gMCkgeyBcclxuICAgICAgXHJcbiAgICAgIHJldHVybjsgXHJcbiAgICB9O1xyXG5cdFx0aWYgKHRoaXMuZWRpdE1vZGUgPT0gdHJ1ZSkge1xyXG4gICAgY29uc29sZS5sb2coJ2ZpbmQgdmljdGltIGlkIGluc2lkZSBnZXRWaWN0aW0nKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltSWQpO1xyXG5cclxuICAgIGlmICh0aGlzLnZpY3RpbUlkID09PSB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuc3ViID0gdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgIHRoaXMudmljdGltSWQgPSBwYXJhbXNbJ3ZpY3RpbUlkJ107XHJcbiAgICAgIGNvbnNvbGUubG9nKCdteSB0aGlzLnZpY3RpbUlkJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltSWQpO1xyXG4gICAgIH0pO1xyXG4gICB9XHJcblxyXG4gICAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0VmljdGltKHRoaXMudmljdGltSWQpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZpY3RpbTogVmljdGltKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ZpY3RpbSBkYXRhIDEnKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh2aWN0aW0pO1xyXG4gICAgICAgIHRoaXMuZWRpdFZpY3RpbSA9IDxWaWN0aW0+dmljdGltO1xyXG4gICAgIFxyXG4gICAgICAgIHZhciBzdXBwb3J0c0RhdGEgPVtdO1xyXG4gICAgICAgIHRoaXMuZWRpdFZpY3RpbS52aWN0aW1TdXBwb3J0cy5mb3JFYWNoKCB0PT57c3VwcG9ydHNEYXRhLnB1c2godC52aWN0aW1TdXBwb3J0VHlwZUlkKTsgfSAgKVxyXG4gICAgICAgIGNvbnN0IHZpY3RpbVN1cHBvcnRzQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbVN1cHBvcnRzJyk7XHJcbiAgICAgICAgdmljdGltU3VwcG9ydHNDb250cm9sLnNldFZhbHVlKHN1cHBvcnRzRGF0YSk7XHJcblxyXG5cclxuICAgICAgICB2YXIgd2VhcG9uVXNlc0RhdGEgPVtdO1xyXG4gICAgICAgIHZhciBvdGhlcldlYXBvbiA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5lZGl0VmljdGltLnZpY3RpbVdlYXBvblVzZXMuZm9yRWFjaCggdD0+e1xyXG4gICAgICAgICAgd2VhcG9uVXNlc0RhdGEucHVzaCh0LndlYXBvblR5cGVJZCk7IFxyXG4gICAgICAgICAgaWYgKHQud2VhcG9uVHlwZUlkID09IFwiT1RIRVJcIil7XHJcbiAgICAgICAgICAgIG90aGVyV2VhcG9uID0gdC5vdGhlcldlYXBvbjtcclxuICAgICAgICAgICAgdGhpcy5vdGhlcldlYXBvbkZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0gIClcclxuXHJcblxyXG4gICAgICAgIGNvbnN0IHZpY3RpbVdlYXBvblVzZXNDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltV2VhcG9uVXNlcycpO1xyXG4gICAgICAgIHZpY3RpbVdlYXBvblVzZXNDb250cm9sLnNldFZhbHVlKHdlYXBvblVzZXNEYXRhKTtcclxuXHJcbiAgICAgICAgY29uc3Qgb3RoZXJXZWFwb25Db250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKTtcclxuICAgICAgICBvdGhlcldlYXBvbkNvbnRyb2wuc2V0VmFsdWUob3RoZXJXZWFwb24pO1xyXG5cclxuXHJcbiAgICAgICAgLy90aGlzLndlYXBvblVzZXNEYXRhID0gdGhpcy5lZGl0VmljdGltLnZpY3RpbVdlYXBvblVzZXM7XHJcbiAgICAgICBcclxuICAgICAgICB2YXIgZHJ1Z1VzZURhdGEgPVtdO1xyXG4gICAgICAgIHZhciBvdGhlckRydWcgPSBcIlwiO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnbG9hZCB0aGlzLmVkaXRWaWN0aW0udmljdGltRHJ1Z1VzZXMnKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmVkaXRWaWN0aW0udmljdGltRHJ1Z1VzZXMpO1xyXG4gICAgICAgIHRoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcy5mb3JFYWNoKCB0PT57XHJcbiAgXHJcbiAgICAgICAgICBpZiAodC5kcnVnVHlwZUlkID09PSBudWxsKXtcclxuICAgICAgICAgICAgb3RoZXJEcnVnID0gdC5vdGhlckRydWc7XHJcbiAgICAgICAgICAgIHRoaXMub3RoZXJEcnVnRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHQuZHJ1Z1R5cGVJZCA9J09USEVSJztcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkcnVnVXNlRGF0YS5wdXNoKHQuZHJ1Z1R5cGVJZCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfSAgKVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5lZGl0VmljdGltLnZpY3RpbURydWdVc2VzIGFmdGVyIHB1c2gnKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhkcnVnVXNlRGF0YSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgdmljdGltRHJ1Z1VzZXNDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltRHJ1Z1VzZXMnKTtcclxuICAgICAgICB2aWN0aW1EcnVnVXNlc0NvbnRyb2wuc2V0VmFsdWUoZHJ1Z1VzZURhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBvdGhlckRydWdDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJyk7XHJcbiAgICAgICAgb3RoZXJEcnVnQ29udHJvbC5zZXRWYWx1ZShvdGhlckRydWcpO1xyXG5cclxuXHJcblxyXG4gICAgICAgIC8vY29udGFjdFxyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZS5nZXRDb250YWN0cyh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICBjb250YWN0TGlzdCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjb250YWN0TGlzdCcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjb250YWN0TGlzdCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFjdExpc3QgPSBjb250YWN0TGlzdDsgXHJcbiAgICAgICAgICAgIHRoaXMuY29udGFjdERhdGFTb3VyY2UuZGF0YSA9IHRoaXMuY29udGFjdExpc3Q7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy9ubyBwaG9uZSBmaWVsZFxyXG5cclxuICAgICAgICBpZiAoIHRoaXMuZWRpdFZpY3RpbS5ndWFyZGlhbk5vUGhvbmVGbGFnID09PSBmYWxzZSApe1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2d1YXJkaWFuTm9QaG9uZUZsYWc6IGZhbHNlfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICggdGhpcy5lZGl0VmljdGltLmFkdm9jYXRlTm9QaG9uZUZsYWcgPT09IGZhbHNlICl7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7YWR2b2NhdGVOb1Bob25lRmxhZzogZmFsc2V9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFwiRXJyb3Igb2NjdXJlZCB3aGlsZSByZXRyaXZpbmcgVmljdGltIEluZm9ybWF0aW9uLiBQbGVhc2UgdHJ5IGFnYWluLlwiKTtcclxuICAgICAgfSk7XHJcbiAgICByZXR1cm47XHJcblx0XHR9IGVsc2Uge1xyXG4gICAgICAvL25ld1xyXG5cclxuICAgfVxyXG4gIH1cclxuICBcclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICBcclxuICB9XHJcblxyXG4gIG9uQWRkcmVzc0NoYW5nZShhZGRyZXNzSWQpIHsgIFxyXG4gICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2FkZHJlc3NJZDogYWRkcmVzc0lkfSlcclxuICAgIHRoaXMuYWRkcmVzc0lkID0gYWRkcmVzc0lkO1xyXG4gIH1cclxuICBvbkd1YXJkaWFuQWRkcmVzc0NoYW5nZShNeUd1YXJkaWFuQWRkcmVzc0lkKSB7ICAgIFxyXG4gICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2d1YXJkaWFuQWRkcmVzc0lkOiBNeUd1YXJkaWFuQWRkcmVzc0lkfSlcclxuICAgIHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQgPSAgTXlHdWFyZGlhbkFkZHJlc3NJZDtcclxuICB9XHJcbiAgb25BZHZvY2F0ZUFkZHJlc3NDaGFuZ2UoTXlBZHZvY2F0ZUFkZHJlc3NJZCkgeyAgICBcclxuICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHthZHZvY2F0ZUFkZHJlc3NJZDogTXlBZHZvY2F0ZUFkZHJlc3NJZH0pXHJcbiAgICB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkID0gTXlBZHZvY2F0ZUFkZHJlc3NJZDtcclxuICB9XHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLnJlc2V0KCk7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ3Nob3cgb2ZmZW5kZXJJZCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5vZmZlbmRlcklkKTtcclxuICAgIGNvbnNvbGUubG9nKCdzaG93IHN0YWZmSWQnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuc3RhZmZJZCk7XHJcbiAgICBjb25zb2xlLmxvZygnc2hvdyBpc0ludGFrZScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5pc0ludGFrZSk7XHJcbiAgICAvL3RoaXMudmljdGltRGV0YWlsLmd1YXJkaWFuTm9QaG9uZUZsYWcgPSB0cnVlO1xyXG4gICAgLy90aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZyA9ICB0cnVlO1xyXG4gICAgLy90aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbk5vUGhvbmVGbGFnJykuc2V0VmFsdWUodHJ1ZSk7XHJcblxyXG4gICAgICAgLy9yZXF1aXJlZCBmaWVsZFxyXG4gICAgY29uc3QgcmVxdWlyZWRJbXBsZW1lbnRhdGlvbiA9IHtnZXQ6ZnVuY3Rpb24oKTpib29sZWFue2lmKHRoaXMuX3JlcXVpcmVkKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ7fVxyXG4gICAgaWYodGhpcy5uZ0NvbnRyb2wmJnRoaXMubmdDb250cm9sLmNvbnRyb2wmJnRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yXHJcbiAgICAgICl7Y29uc3QgZW1wdHlWYWx1ZUNvbnRyb2w9T2JqZWN0LmFzc2lnbih7fSxcclxuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sKTsoZW1wdHlWYWx1ZUNvbnRyb2wgYXMgYW55KS52YWx1ZT1udWxsO1xyXG4gICAgICAgIHJldHVybigncmVxdWlyZWQnaW4odGhpcy5uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IoZW1wdHlWYWx1ZUNvbnRyb2wpfHx7fSkpO31cclxuICAgICAgICByZXR1cm4gZmFsc2U7fSxzZXQ6ZnVuY3Rpb24odmFsdWU6Ym9vbGVhbil7dGhpcy5fcmVxdWlyZWQ9Y29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTt9LH07XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdElucHV0LnByb3RvdHlwZSwncmVxdWlyZWQnLHJlcXVpcmVkSW1wbGVtZW50YXRpb24sKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0U2VsZWN0LnByb3RvdHlwZSwncmVxdWlyZWQnLHJlcXVpcmVkSW1wbGVtZW50YXRpb24sKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0UmFkaW9Hcm91cC5wcm90b3R5cGUsJ3JlcXVpcmVkJyxyZXF1aXJlZEltcGxlbWVudGF0aW9uLCk7XHJcbiAgICAvL3JlcXVpcmVkIGZpZWxkIGVuZFxyXG5cclxuICAgIFxyXG5cclxuICAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwhPW51bGwpIHtcclxuICAgICAgIC8vIGVkaXQgcmVjb3JkXHJcbiAgICAgIHRoaXMuZWRpdE1vZGUgPSB0cnVlOyBcclxuICAgICAgdGhpcy5zaG93RGVsZXRlPSB0cnVlOyAgICAgXHJcbiAgICAgIHRoaXMudmljdGltSWQgPSB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZDtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuZ3VhcmRpYW5UYWJGbGFnID0gdGhpcy52aWN0aW1EZXRhaWwubWlub3JGbGFnO1xyXG5cclxuICAgICAgXHJcbiAgICAgIGlmICh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1BZHZvY2F0ZUZsYWc9PSdZUycpe1xyXG4gICAgICAgICAgICB0aGlzLmFkdm9jYXRlVGFiRmxhZyA9IHRydWU7XHJcbiAgICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5vdGhlcldlYXBvbkZsYWcgPT0gdHJ1ZSl7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJXZWFwb25Db250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKTtcclxuICAgICAgICBvdGhlcldlYXBvbkNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm90aGVyRHJ1Z0ZsYWcgPT0gdHJ1ZSl7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJEcnVnQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ290aGVyRHJ1ZycpO1xyXG4gICAgICAgIG90aGVyRHJ1Z0NvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY3BvRXhwaXJhdGlvbkRpdkZsYWcgID10aGlzLnZpY3RpbURldGFpbC5jcG9FeHBpcmF0aW9uRmxhZztcclxuICAgICAgdGhpcy5jb21tb25DaGlsZHJlbkRpdkZsYWcgPSB0aGlzLnZpY3RpbURldGFpbC5jb21tb25DaGlsZHJlbkZsYWc7XHJcbiAgICAgIHRoaXMuc3VwcG9ydEluUGxhY2VEaXZGbGFnPSAgdGhpcy52aWN0aW1EZXRhaWwuc3VwcG9ydEluUGxhY2VGbGFnO1xyXG4gICAgICB0aGlzLndlYXBvbkludm9sdmVkRGl2RmxhZz0gIHRoaXMudmljdGltRGV0YWlsLndlYXBvbkludm9sdmVkRmxhZztcclxuICAgICAgdGhpcy5kcnVnVXNlRGl2RmxhZz0gIHRoaXMudmljdGltRGV0YWlsLmRydWdVc2VGbGFnO1xyXG4gICAgICB0aGlzLmFkZHJlc3NJZCA9IHRoaXMudmljdGltRGV0YWlsLmFkZHJlc3NJZDtcclxuICAgICAgdGhpcy5ndWFyZGlhbkFkZHJlc3NJZCA9ICB0aGlzLnZpY3RpbURldGFpbC5ndWFyZGlhbkFkZHJlc3NJZDtcclxuICAgICAgdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA9ICB0aGlzLnZpY3RpbURldGFpbC5hZHZvY2F0ZUFkZHJlc3NJZDtcclxuXHJcbiAgICAgIHRoaXMuX2dldFZpY3RpbSgpO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vYWRkIG5ldyByZWNvcmRcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2d1YXJkaWFuTm9QaG9uZUZsYWc6IHRydWV9KTtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2Fkdm9jYXRlTm9QaG9uZUZsYWc6IHRydWV9KTtcclxuICAgXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldEZsYWdPcHRpb25ZZXNOb1Vua25vd25zKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmxhZ09wdGlvbiA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldEdlbmRlcnMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5nZW5kZXJzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0UHJlZml4ZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcmVmaXhlcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldFN1ZmZpeGVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3VmZml4ZXMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRSZWxhdGlvbnNoaXBUeXBlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJlbGF0aW9uc2hpcFR5cGVzID0gaXRlbXMuZmlsdGVyKCAoeSkgPT4gKHkucmVsYXRpb25zaGlwQ2F0ZWdvcnlJZCA9PT0gJ1NUJyB8fCB5LnJlbGF0aW9uc2hpcENhdGVnb3J5SWQgPT09ICdGTScgKSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0U3VwcG9ydFR5cGVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudmljdGltU3VwcG9ydFR5cGVzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0V2VhcG9uVHlwZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy53ZWFwb25UeXBlcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldERydWdzVHlwZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RydWcgbG9va3VwIGl0ZW1zJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaXRlbXMpO1xyXG4gICAgICAgIHRoaXMuZHJ1Z3MgPSBpdGVtcztcclxuICAgICAgICB0aGlzLmRydWdzLnB1c2goe2RydWdUeXBlSWQ6ICdPVEhFUicsIG5hbWU6ICdPdGhlcid9KTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRydWdzKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIC8vIHRoaXMudmljdGltU2VydmljZS5nZXREb2NrZXRMaXN0KHRoaXMub2ZmZW5kZXJJZCkuc3Vic2NyaWJlKFxyXG4gICAgLy8gICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgIHRoaXMuZG9ja2V0bGlzdCA9IGl0ZW1zO1xyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gKTtcclxuXHJcbiAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS52YWx1ZUNoYW5nZXNcclxuICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgLy8gdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5GaXJzdE5hbWUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAvLyB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkxhc3ROYW1lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuV29ya1Bob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuSG9tZVBob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuQ2VsbFBob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgXHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykudmFsdWVDaGFuZ2VzXHJcbiAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUxhc3ROYW1lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlV29ya1Bob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlSG9tZVBob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlQ2VsbFBob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBiYWNrKCl7XHJcblxyXG4gICAgLy90aGlzLm9uU2F2ZS5lbWl0KHRoaXMudmljdGltRGV0YWlsKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsndmljdGltTGlzdCddKTtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgZGVsZXRlVmljdGltKCkge1xyXG4gICAgdGhpcy5jb21tb25EaWFsb2dTZXJ2aWNlXHJcbiAgICAuY29uZmlybSgnJywgJ0RvIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIFZpY3RpbT8nLCAnWWVzJywgJ05vJylcclxuICAgIC5zdWJzY3JpYmUocmVzID0+IHt0aGlzLnJlc3VsdCA9ICByZXM7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmljdGltU2VydmljZS5kZWxldGVWaWN0aW1zKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkKVxyXG4gICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRGVsZXRlIFN1Y2Nlc3NmdWxseSEnLCAnJywge1xyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsIH0pO31cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3ZpY3RpbSddKTtcclxuICAgICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCh0aGlzLnZpY3RpbURldGFpbCk7XHJcbiAgICAgICAgfVxyXG4gICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHJhZGlvTWlub3JDaGFuZ2UoJGV2ZW50OiBNYXRSYWRpb0NoYW5nZSl7XHJcbiAgIC8vIGNvbnN0IGd1YXJkaWFuTGFzdE5hbWVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5MYXN0TmFtZScpO1xyXG4gICAgLy9jb25zdCBndWFyZGlhbkZpcnN0TmFtZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpO1xyXG5cclxuICBcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5ndWFyZGlhblRhYkZsYWcgPSB0cnVlO1xyXG4gICAgIC8vIGd1YXJkaWFuTGFzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgLy8gZ3VhcmRpYW5GaXJzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIC8vdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcgPSAgdHJ1ZTtcclxuICAgXHJcbiAgICAgXHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmd1YXJkaWFuVGFiRmxhZyA9IGZhbHNlO1xyXG4gICAgIC8vIGd1YXJkaWFuTGFzdE5hbWVDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgIC8vIGd1YXJkaWFuRmlyc3ROYW1lQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICBcclxuICAgICBcclxuICAgIH1cclxuXHJcblx0XHQvL2d1YXJkaWFuTGFzdE5hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgLy8gZ3VhcmRpYW5GaXJzdE5hbWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgXHJcbiAgfVxyXG5cclxuICByYWRpb0Fkdm9jYXRlQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG5cclxuICAgIGNvbnN0IGFkdm9jYXRlTGFzdE5hbWVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVMYXN0TmFtZScpO1xyXG4gICAgY29uc3QgYWR2b2NhdGVGaXJzdE5hbWVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVGaXJzdE5hbWUnKTtcclxuICAgIC8vIGNvbnN0IGFkdm9jYXRlTm9QaG9uZUNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZU5vUGhvbmVGbGFnJyk7XHJcbiAgICBcclxuICBcclxuXHJcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSBcIllTXCIpIHtcclxuICAgICAgdGhpcy5hZHZvY2F0ZVRhYkZsYWcgPSB0cnVlO1xyXG4gICAgICBhZHZvY2F0ZUxhc3ROYW1lQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICBhZHZvY2F0ZUZpcnN0TmFtZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgXHJcbiAgICAgIFxyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5hZHZvY2F0ZVRhYkZsYWcgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgICBhZHZvY2F0ZUxhc3ROYW1lQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgYWR2b2NhdGVGaXJzdE5hbWVDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhZHZvY2F0ZUxhc3ROYW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICBhZHZvY2F0ZUZpcnN0TmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgXHJcbiAgfVxyXG5cclxuICByYWRpb0NpY0NoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb21tb25DaGlsZHJlbkRpdkZsYWcgPSB0cnVlO1xyXG4gICAgICAvLyByZXF1cmllIGZpZWxkXHJcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9ycygnY29tbW9uQ2hpbGRyZW4nKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuY29tbW9uQ2hpbGRyZW5EaXZGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRWYWxpZGF0b3JzKHR5cGUpIHtcclxuICAgIGlmKHR5cGUgPT0gJ2NvbW1vbkNoaWxkcmVuJyl7XHJcbiAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdjb21tb25DaGlsZHJlbk51bWJlcicpLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnY29tbW9uQ2hpbGRyZW5OdW1iZXInKS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICB9XHJcbiAgIGVsc2UgaWYgKHR5cGUgPT0gJ2Nwbycpe1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnY3BvRXhwaXJhdGlvbkRhdGUnKS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Nwb0V4cGlyYXRpb25EYXRlJykuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgIH1cclxuICB9XHJcbiAgcmFkaW9TdXBwb3J0Q2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG4gICAgaWYgKCRldmVudC52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnN1cHBvcnRJblBsYWNlRGl2RmxhZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLnN1cHBvcnRJblBsYWNlRGl2RmxhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICByYWRpb1dlYXBvbkNoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcclxuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy53ZWFwb25JbnZvbHZlZERpdkZsYWcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy53ZWFwb25JbnZvbHZlZERpdkZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmFkaW9EcnVnQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG4gICAgaWYgKCRldmVudC52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmRydWdVc2VEaXZGbGFnID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuZHJ1Z1VzZURpdkZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJhZGlvQ3BvQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xyXG4gICAgaWYgKCRldmVudC52YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNwb0V4cGlyYXRpb25EaXZGbGFnID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZXRWYWxpZGF0b3JzKCdjcG8nKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuY3BvRXhwaXJhdGlvbkRpdkZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZURPQkNoYW5nZSgkZXZlbnQgKXtcclxuICAgdmFyIGFnZURpZk1zID0gRGF0ZS5ub3coKSAtICAkZXZlbnQudmFsdWU7XHJcbiAgIHZhciBhZ2VEYXRlID0gbmV3IERhdGUoYWdlRGlmTXMpOyBcclxuICAgIGlmKCBNYXRoLmFicyhhZ2VEYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTcwKSA8PSAxOCl7XHJcbiAgICAgXHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdWaWN0aW0gaXMgYSBNaW5vci4gVGhpcyBpbmZvcm1hdGlvbiBpcyBhIHNlbnNpdGl2ZSBhbmQgc2hvdWxkIG5vdCBiZSBkaXNjbG9zZWQgdG8gYW55IHVuYXV0aG9yaXplZCBwYXJ0aWVzLiBDb250YWN0IHRoZSBsZWdhbCBndWFyZGlhbi4nLCAnJywge1xyXG4gICAgICAgIGR1cmF0aW9uOiA2MDAwLH0pO1xyXG4gICAgICAgIGNvbnN0IG1pbm9yQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpO1xyXG4gICAgICAgIG1pbm9yQ29udHJvbC5zZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgLy8gIGNvbnN0IGd1YXJkaWFuTGFzdE5hbWVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5MYXN0TmFtZScpO1xyXG4gICAgICAgLy8gY29uc3QgZ3VhcmRpYW5GaXJzdE5hbWVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5GaXJzdE5hbWUnKTtcclxuICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuZ3VhcmRpYW5UYWJGbGFnID0gdHJ1ZTtcclxuICAgICAgIC8vIGd1YXJkaWFuTGFzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIC8vICBndWFyZGlhbkZpcnN0TmFtZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgXHJcbiAgIFxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgY2hlY2tPdGhlcldlYXBvbihXZWFwb25Vc2Upe1xyXG5cclxuICAgIGNvbnN0IG90aGVyV2VhcG9uQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ290aGVyV2VhcG9uJyk7XHJcbiAgICAgaWYgKFdlYXBvblVzZS5pbmNsdWRlcyhcIk9USEVSXCIpKXtcclxuICAgICB0aGlzLm90aGVyV2VhcG9uRmxhZyA9IHRydWU7XHJcbiAgICAgb3RoZXJXZWFwb25Db250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5vdGhlcldlYXBvbkZsYWcgPSBmYWxzZTtcclxuICAgICAgb3RoZXJXZWFwb25Db250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgfVxyXG4gICBvdGhlcldlYXBvbkNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tPdGhlckRydWcoRHJ1Z1VzZSl7XHJcblxyXG4gICAgY29uc3Qgb3RoZXJEcnVnQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ290aGVyRHJ1ZycpO1xyXG4gICAgIGlmIChEcnVnVXNlLmluY2x1ZGVzKFwiT1RIRVJcIikpe1xyXG4gICAgIHRoaXMub3RoZXJEcnVnRmxhZyA9IHRydWU7XHJcbiAgICAgb3RoZXJEcnVnQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgXHJcblxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMub3RoZXJEcnVnRmxhZyA9IGZhbHNlO1xyXG4gICAgICBvdGhlckRydWdDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgXHJcblxyXG4gICAgfVxyXG4gICBvdGhlckRydWdDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcbiBcclxuICAvLyNyZWdpb24gXCJzYXZlIHZpY3RpbVwiXHJcbiAgc2F2ZVZpY3RpbSgpIHtcclxuICAgIC8vdmFyIG15UGF0aCAgPSAgdGhpcy5yb3V0ZXIudXJsLnNsaWNlKC0xMClcclxuXHJcbiAgLy9ndWFyZGlhbiBwaG9uZSBsb2dpY1xyXG4gIGlmICghdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcpXHJcbiAgIHtcclxuICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lKXtcclxuICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUgIT09IG51bGwpe1xyXG4gICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lICE9PSBcIlwiKXtcclxuICAgICAgICAgICAgIHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xyXG4gICAgICAgfVxyXG4gICAgIH1cclxuICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSAhPT0gbnVsbCl7XHJcbiAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSAhPT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUpe1xyXG4gICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuQ2VsbFBob25lICE9PSBudWxsKXtcclxuICAgICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuQ2VsbGhvbmUgIT09IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmd1YXJkaWFuUGhvbmVFeGlzdEZsYWcgPSAgdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgXHJcbiAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnKTtcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmd1YXJkaWFuUGhvbmVFeGlzdEZsYWcnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyk7XHJcbiBcclxuXHJcbiAgICBpZiAodGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnID09PSBmYWxzZSAmJiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZyA9PT0gZmFsc2UpXHJcbiAgICB7XHJcbiAgICAgXHJcbiAgICAgICAgICB0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25EaWFsb2dTZXJ2aWNlXHJcbiAgICAgICAgICAud2FybmluZygnJywgJ1BsZWFzZSBjaGVjayB0aGUgZ3VhcmRpYW4gcGhvbmUgZmllbGQuIFlvdSBoYXZlIHRvIGZpbGwgb25lIG9mIHRoZSB0aHJlZSBwaG9uZSBmaWxlZHMuJywgJ09rJylcclxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHt0aGlzLnJlc3VsdCA9ICByZXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyk7XHJcblxyXG4vL2Fkdm9jYXRlIHBob25lIGxvZ2ljXHJcbmlmICghdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWcpXHJcbntcclxuICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlSG9tZVBob25lKXtcclxuICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUgIT09IG51bGwpe1xyXG4gICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlSG9tZVBob25lICE9PSBcIlwiKXtcclxuICAgICAgICAgIHRoaXMuYWR2b2NhdGVQaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSAhPT0gdW5kZWZpbmVkKXtcclxuICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSAhPT0gbnVsbCl7XHJcbiAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSAhPT0gXCJcIil7XHJcbiAgICAgICAgIHRoaXMuYWR2b2NhdGVQaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xyXG4gICB9XHJcbiB9XHJcbiB9XHJcblxyXG5cclxuIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUpe1xyXG4gICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlQ2VsbFBob25lICE9PSBudWxsKXtcclxuICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlQ2VsbGhvbmUgIT09IFwiXCIpe1xyXG4gICAgICAgICB0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcgPSAgdHJ1ZTtcclxuICAgfVxyXG4gfVxyXG4gfVxyXG5cclxufVxyXG5cclxuIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZycpO1xyXG4gY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWcpO1xyXG4gY29uc29sZS5sb2coJ3RoaXMuYWR2b2NhdGVQaG9uZUV4aXN0RmxhZycpO1xyXG4gY29uc29sZS5sb2codGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnKTtcclxuXHJcbiBpZih0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcgPT09IGZhbHNlICYmIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnID09PSBmYWxzZSlcclxuIHtcclxuICBcclxuICAgICAgIHRoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyA9IHRydWU7XHJcbiAgICAgICB0aGlzLmNvbW1vbkRpYWxvZ1NlcnZpY2VcclxuICAgICAgIC53YXJuaW5nKCcnLCAnUGxlYXNlIGNoZWNrIHRoZSBhZHZvY2F0ZSBwaG9uZSBmaWVsZC4gWW91IGhhdmUgdG8gZmlsbCBvbmUgb2YgdGhlIHRocmVlIHBob25lIGZpbGVkcy4nLCAnT2snKVxyXG4gICAgICAgLnN1YnNjcmliZShyZXMgPT4ge3RoaXMucmVzdWx0ID0gIHJlcztcclxuICAgICAgICAgXHJcbiAgICAgICB9KTtcclxuIH1cclxuXHJcblxyXG4gIGNvbnNvbGUubG9nKCd0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgMScpO1xyXG4gIGNvbnNvbGUubG9nKHRoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyk7XHJcbiBpZiAoIHRoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyA9PT0gZmFsc2Upe1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwgPT09IG51bGwpe1xyXG4gICAgICAvL2luc2VydCBuZXcgdmljdGltXHJcbiBcclxuICAgICB2YXIgbXlWaWN0aW1TdXBwb3J0cyA9IFtdO1xyXG4gICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltU3VwcG9ydHMpe1xyXG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltU3VwcG9ydHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgY29uc3QgdmljdGltU3VwcG9ydD0gPFZpY3RpbVN1cHBvcnQ+e307XHJcbiAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQudmljdGltSWQ9IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1JZDtcclxuICAgICAgICAgICAgdmljdGltU3VwcG9ydC52aWN0aW1TdXBwb3J0VHlwZUlkPSBlbGVtZW50O1xyXG4gICAgICAgICAgICB2aWN0aW1TdXBwb3J0Lm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgICAgICAgbXlWaWN0aW1TdXBwb3J0cy5wdXNoKHZpY3RpbVN1cHBvcnQpO1xyXG4gICAgICAgICB9KTtcclxuICAgICB9XHJcblxyXG4gICAgdmFyIG15VmljdGltRHJ1Z1VzZXMgPSBbXTtcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMgZHVyaW5nIHNhdmUnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyk7XHJcbiAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzKXtcclxuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgY29uc3QgdmljdGltRHJ1Z1VzZSA9IDxWaWN0aW1EcnVnVXNlPnt9O1xyXG4gICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XHJcblxyXG4gICAgIGlmIChlbGVtZW50ID09PVwiT1RIRVJcIiB8fCBlbGVtZW50ID09PSBcIlwiIHx8IGVsZW1lbnQgPT09IG51bGwpe1xyXG4gICAgICB2aWN0aW1EcnVnVXNlLmRydWdUeXBlSWQgPSBudWxsO1xyXG4gICAgICB2aWN0aW1EcnVnVXNlLm90aGVyRHJ1ZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlckRydWc7XHJcbiAgICAgfVxyXG4gICAgIGVsc2V7XHJcbiAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XHJcbiAgICAgIHZpY3RpbURydWdVc2Uub3RoZXJEcnVnID0gbnVsbDsgXHJcbiAgICAgfVxyXG4gICAgIFxyXG4gICAgIHZpY3RpbURydWdVc2UubW9kaWZpZWRCeSA9IHRoaXMuc3RhZmZJZDtcclxuICAgICB2aWN0aW1EcnVnVXNlLnZpY3RpbUlkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbUlkO1xyXG4gICAgIG15VmljdGltRHJ1Z1VzZXMucHVzaCh2aWN0aW1EcnVnVXNlKTtcclxuICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzIGR1cmluZyBzYXZlIDEnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyk7XHJcblxyXG5cclxuXHJcbiAgdmFyIG15VmljdGltV2VhcG9uVXNlcyA9IFtdO1xyXG5cclxuICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVdlYXBvblVzZXMpe1xyXG4gICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVdlYXBvblVzZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgIGNvbnN0IHZpY3RpbVdlYXBvblVzZSA9IDxWaWN0aW1XZWFwb25Vc2U+e307XHJcbiAgICAgICB2aWN0aW1XZWFwb25Vc2UudmljdGltSWQ9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltSWQ7XHJcbiAgICAgICB2aWN0aW1XZWFwb25Vc2Uud2VhcG9uVHlwZUlkPSBlbGVtZW50O1xyXG5cclxuICAgICAgIGlmIChlbGVtZW50ID09XCJPVEhFUlwiKXtcclxuICAgICAgICB2aWN0aW1XZWFwb25Vc2Uub3RoZXJXZWFwb24gPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUub3RoZXJXZWFwb247XHJcbiAgICAgICB9XHJcbiAgICAgICBlbHNle1xyXG4gICAgICAgIHZpY3RpbVdlYXBvblVzZS5vdGhlcldlYXBvbiA9IG51bGw7IFxyXG4gICAgICAgfVxyXG5cclxuICAgICAgIHZpY3RpbVdlYXBvblVzZS5tb2RpZmllZEJ5PSB0aGlzLnN0YWZmSWQ7XHJcbiAgICAgICBteVZpY3RpbVdlYXBvblVzZXMucHVzaCh2aWN0aW1XZWFwb25Vc2UpO1xyXG4gICB9KTtcclxuIH1cclxuXHJcbiBjb25zdCBuZXdWaWN0aW0gPSB7XHJcbiAgICAgICAgIHZpY3RpbUlkOiAwLFxyXG4gICAgICAgICBvZmZlbmRlcklkOiB0aGlzLm9mZmVuZGVySWQsXHJcbiAgICAgICAgIHZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkOnRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZCxcclxuICAgICAgICAgbGFzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5sYXN0TmFtZSxcclxuICAgICAgICAgZmlyc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZmlyc3ROYW1lLFxyXG4gICAgICAgICBtaWRkbGVOYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUubWlkZGxlTmFtZSAgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUubWlkZGxlTmFtZSA6IG51bGwsXHJcbiAgICAgICAgIHByZWZpeElkOnRoaXMudmljdGltRm9ybS52YWx1ZS5wcmVmaXhJZCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5wcmVmaXhJZCA6IG51bGwgLFxyXG4gICAgICAgICBzdWZmaXhJZDp0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VmZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VmZml4SWQ6IG51bGwsXHJcbiAgICAgICAgIGJpcnRoRGF0ZTp0aGlzLnZpY3RpbUZvcm0udmFsdWUuYmlydGhEYXRlPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYmlydGhEYXRlIDogbnVsbCxcclxuICAgICAgICAgZ2VuZGVyQ29kZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmdlbmRlckNvZGU/IHRoaXMudmljdGltRm9ybS52YWx1ZS5nZW5kZXJDb2RlOiBudWxsLFxyXG4gICAgICAgICB1bmRlclN1cGVydmlzaW9uRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnVuZGVyU3VwZXJ2aXNpb25GbGFnLFxyXG4gICAgICAgICBtaW5vckZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5taW5vckZsYWcsXHJcbiAgICAgICAgIHZpY3RpbUFkdm9jYXRlRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbUFkdm9jYXRlRmxhZyxcclxuICAgICAgICAgaG9tZVBob25lOiAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmhvbWVQaG9uZSA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmUgOiBudWxsLFxyXG4gICAgICAgICB3b3JrUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS53b3JrUGhvbmUgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUud29ya1Bob25lIDogbnVsbCxcclxuICAgICAgICAgY2VsbFBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY2VsbFBob25lID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNlbGxQaG9uZTogbnVsbCxcclxuICAgICAgICAgZW1haWw6IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWFpbCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWFpbDogbnVsbCxcclxuICAgICAgICAgYWRkcmVzc0lkOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWRkcmVzc0lkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkZHJlc3NJZDogMSxcclxuICAgICAgICAgZW1lcmdlbmN5Q29udGFjdDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3QgID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3QgOiBudWxsLFxyXG4gICAgICAgICBlbWVyZ2VuY3lDb250YWN0UGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0UGhvbmUgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdFBob25lOiBudWxsICxcclxuICAgICAgICAgY29tbW9uQ2hpbGRyZW5GbGFnOiAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNvbW1vbkNoaWxkcmVuRmxhZyxcclxuICAgICAgICAgY29tbW9uQ2hpbGRyZW5OdW1iZXI6ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY29tbW9uQ2hpbGRyZW5OdW1iZXIsXHJcbiAgICAgICAgIGNwb0V4cGlyYXRpb25GbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY3BvRXhwaXJhdGlvbkZsYWcsXHJcbiAgICAgICAgIGNwb0V4cGlyYXRpb25EYXRlOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY3BvRXhwaXJhdGlvbkRhdGUgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3RhcnREYXRlLCAnc2hvcnQnKSA6IG51bGwsXHJcbiAgICAgICAgIHN1cHBvcnRJblBsYWNlRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1cHBvcnRJblBsYWNlRmxhZyxcclxuICAgICAgICAgd2VhcG9uSW52b2x2ZWRGbGFnOiAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndlYXBvbkludm9sdmVkRmxhZyxcclxuICAgICAgICAgZHJ1Z1VzZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5kcnVnVXNlRmxhZyxcclxuICAgICAgICAgYWxjb2hvbFVzZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hbGNvaG9sVXNlRmxhZyxcclxuICAgICAgICAgYWNjZXNzUmlzazp0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWNjZXNzUmlzayxcclxuICAgICAgICAgbW9kaWZpZWRCeTp0aGlzLnN0YWZmSWQsXHJcbiAgICAgICAgIHZWaWN0aW1BZHZvY2F0ZTogbnVsbCxcclxuICAgICAgICAgdlZpY3RpbUd1YXJkaWFuOiBudWxsLFxyXG4gICAgICAgICB2aWN0aW1EcnVnVXNlczogbXlWaWN0aW1EcnVnVXNlcyxcclxuICAgICAgICAgdmljdGltU3VwcG9ydHM6IG15VmljdGltU3VwcG9ydHMsXHJcbiAgICAgICAgIHZpY3RpbVdlYXBvblVzZXM6IG15VmljdGltV2VhcG9uVXNlcyxcclxuXHJcbiAgICAgICAgIGFkdm9jYXRlRmlyc3ROYW1lOiBudWxsLFxyXG4gICAgICAgICBhZHZvY2F0ZUxhc3ROYW1lOiBudWxsLFxyXG4gICAgICAgICBhZHZvY2F0ZUVtYWlsOiBudWxsLFxyXG4gICAgICAgICBhZHZvY2F0ZVByZWZpeElkOiBudWxsLFxyXG4gICAgICAgICBhZHZvY2F0ZVN1ZmZpeElkOiBudWxsLFxyXG4gICAgICAgICBhZHZvY2F0ZU5vUGhvbmVGbGFnOiBudWxsLFxyXG4gICAgICAgICBhZHZvY2F0ZUhvbWVQaG9uZTogbnVsbCxcclxuICAgICAgICAgYWR2b2NhdGVXb3JrUGhvbmU6IG51bGwsXHJcbiAgICAgICAgIGFkdm9jYXRlQ2VsbFBob25lOiBudWxsLFxyXG4gICAgICAgICBhZHZvY2F0ZUFkZHJlc3NJZDogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5GaXJzdE5hbWU6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuTGFzdE5hbWU6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuRW1haWw6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuUHJlZml4SWQ6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuU3VmZml4SWQ6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuTm9QaG9uZUZsYWc6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuSG9tZVBob25lOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbldvcmtQaG9uZTogbnVsbCxcclxuICAgICAgICAgZ3VhcmRpYW5DZWxsUGhvbmU6IG51bGwsXHJcbiAgICAgICAgIGd1YXJkaWFuQWRkcmVzc0lkOiBudWxsLFxyXG4gICAgICAgICBndWFyZGlhbkJpcnRoRGF0ZTogbnVsbCxcclxuICAgICAgICAgcmVsYXRpb25zaGlwOiBudWxsLFxyXG4gICAgICAgICBhbGxvd0Nzb3NhQ29udGFjdEZsYWc6IG51bGxcclxuICAgICAgICAgXHJcblxyXG4gICAgICAgICB9XHJcblxyXG4gICAgIGlmICh0aGlzLmFkZHJlc3NJZCA9PSAwKXtcclxuICAgICAgbmV3VmljdGltLmFkZHJlc3NJZCA9IG51bGw7XHJcbiAgICAgfSBlbHNlIHtcclxuICAgICAgbmV3VmljdGltLmFkZHJlc3NJZCA9ICB0aGlzLmFkZHJlc3NJZDtcclxuICAgICB9XHJcbiAgICAgXHJcbiAgICAgbmV3VmljdGltLmFkdm9jYXRlQWRkcmVzc0lkID0gIHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQ7XHJcbiAgICAgbmV3VmljdGltLmd1YXJkaWFuQWRkcmVzc0lkID0gIHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQ7XHJcbiAgICAgIGNvbnNvbGUubG9nKCduZXdWaWN0aW0nKTtcclxuICAgICAgY29uc29sZS5sb2cobmV3VmljdGltKTtcclxuICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucG9zdFZpY3RpbXMobmV3VmljdGltKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICAgXHJcbiAgICAgICAgIGNvbnN0IGlkID0gaXRlbXMgPyBpdGVtcy52aWN0aW1JZCA6ICcnO1xyXG5cclxuICAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1BZHZvY2F0ZUZsYWcgPT0gXCJZU1wiKXtcclxuICAgICAgICAgICBjb25zb2xlLmxvZygnYWRkIGFkdm9jYXRlJyk7XHJcbiAgICAgICAgIGNvbnN0IHZpY3RpbUFkdm9jYXRlOiBWaWN0aW1BZHZvY2F0ZSA9IHtcclxuICAgICAgICAgIHZpY3RpbUFkdm9jYXRlSWQ6IGlkLFxyXG4gICAgICAgICAgbGFzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUxhc3ROYW1lLFxyXG4gICAgICAgICAgZmlyc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVGaXJzdE5hbWUsXHJcbiAgICAgICAgICBwcmVmaXhJZDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlUHJlZml4SWQsXHJcbiAgICAgICAgICBzdWZmaXhJZDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlU3VmZml4SWQsXHJcbiAgICAgICAgICBhZGRyZXNzSWQ6IHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQgPyB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkOiBudWxsLFxyXG4gICAgICAgICAgbm9QaG9uZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWc6IG51bGwsXHJcbiAgICAgICAgICBob21lUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSxcclxuICAgICAgICAgIHdvcmtQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lLFxyXG4gICAgICAgICAgY2VsbFBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUsXHJcbiAgICAgICAgICBlbWFpbDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlRW1haWwsXHJcbiAgICAgICAgICBtb2RpZmllZEJ5OiB0aGlzLnN0YWZmSWRcclxuICAgICAgICAgIFxyXG4gICAgXHJcbiAgICAgIH07XHJcbiAgICAgICBcclxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucG9zdFZpY3RpbUFkdm9jYXRlKGlkLCB2aWN0aW1BZHZvY2F0ZSkuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuIFxyXG4gICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUubWlub3JGbGFnID09IHRydWUpe1xyXG4gICAgICBcclxuICAgICAgICBjb25zdCB2aWN0aW1HdWFyZGlhbjogVmljdGltR3VhcmRpYW4gPSB7XHJcbiAgICAgICAgICB2aWN0aW1HdWFyZGlhbklkOiBpZCxcclxuICAgICAgICAgIGxhc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5MYXN0TmFtZSxcclxuICAgICAgICAgIGZpcnN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuRmlyc3ROYW1lLFxyXG4gICAgICAgICAgcHJlZml4SWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhblByZWZpeElkLCBcclxuICAgICAgICAgIHN1ZmZpeElkOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5TdWZmaXhJZCxcclxuICAgICAgICAgIGJpcnRoRGF0ZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuQmlydGhEYXRlLFxyXG4gICAgICAgICAgYWRkcmVzc0lkOiB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkPyB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkOiBudWxsLFxyXG4gICAgICAgICAgbm9QaG9uZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZzogbnVsbCxcclxuICAgICAgICAgIGhvbWVQaG9uZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lLFxyXG4gICAgICAgICAgd29ya1Bob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Xb3JrUGhvbmUsXHJcbiAgICAgICAgICBjZWxsUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSxcclxuICAgICAgICAgIGVtYWlsOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5FbWFpbCxcclxuICAgICAgICAgIG1vZGlmaWVkQnk6IHRoaXMuc3RhZmZJZFxyXG4gICAgICAgICAgXHJcbiAgICAgICBcclxuICAgICAgIH07XHJcbiAgICAgICBcclxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucG9zdFZpY3RpbUd1YXJkaWFuKGlkLCB2aWN0aW1HdWFyZGlhbikuc3Vic2NyaWJlKCk7XHJcbiAgICAgICBcclxuICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0FkZCBWaWN0aW0gU3VjY2Vzc2Z1bGx5IScsICcnLCB7XHJcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcclxuICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vaW5zZXJ0IG5ld1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW50YWtlPT09dHJ1ZSl7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3ZpY3RpbUhvbWUnXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3ZpY3RpbUxpc3QnXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy5vblNhdmUuZW1pdCh0aGlzLnZpY3RpbURldGFpbCk7XHJcbiAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgKTtcclxuXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy91cGRhdGUgdmljdGltXHJcblxyXG4gXHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnVuZGVyU3VwZXJ2aXNpb25GbGFnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnVuZGVyU3VwZXJ2aXNpb25GbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZCA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQ7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmxhc3ROYW1lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmxhc3ROYW1lO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5maXJzdE5hbWUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZmlyc3ROYW1lO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5taWRkbGVOYW1lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pZGRsZU5hbWU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnByZWZpeElkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnByZWZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnByZWZpeElkIDogbnVsbDtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuc3VmZml4SWQgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VmZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VmZml4SWQgOiBudWxsO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5iaXJ0aERhdGUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYmlydGhEYXRlO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5nZW5kZXJDb2RlID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmdlbmRlckNvZGU7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLm1pbm9yRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5taW5vckZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmhvbWVQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmU/IHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmU6IG51bGw7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLndvcmtQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS53b3JrUGhvbmU/IHRoaXMudmljdGltRm9ybS52YWx1ZS53b3JrUGhvbmU6IG51bGw7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNlbGxQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jZWxsUGhvbmU/IHRoaXMudmljdGltRm9ybS52YWx1ZS5jZWxsUGhvbmU6IG51bGw7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmVtYWlsID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1BZHZvY2F0ZUZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltQWR2b2NhdGVGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5lbWVyZ2VuY3lDb250YWN0ID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3Q7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmVtZXJnZW5jeUNvbnRhY3RQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0UGhvbmU/IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0UGhvbmU6IG51bGw7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNvbW1vbkNoaWxkcmVuRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jb21tb25DaGlsZHJlbkZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNvbW1vbkNoaWxkcmVuTnVtYmVyID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNvbW1vbkNoaWxkcmVuTnVtYmVyO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5jcG9FeHBpcmF0aW9uRGF0ZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jcG9FeHBpcmF0aW9uRGF0ZTtcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuY3BvRXhwaXJhdGlvbkZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY3BvRXhwaXJhdGlvbkZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLnN1cHBvcnRJblBsYWNlRmxhZyA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VwcG9ydEluUGxhY2VGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC53ZWFwb25JbnZvbHZlZEZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndlYXBvbkludm9sdmVkRmxhZztcclxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuZHJ1Z1VzZUZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmRydWdVc2VGbGFnO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5hbGNvaG9sVXNlRmxhZyA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWxjb2hvbFVzZUZsYWc7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmFjY2Vzc1Jpc2sgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFjY2Vzc1Jpc2s7XHJcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmFkZHJlc3NJZCA9IHRoaXMuYWRkcmVzc0lkO1xyXG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5hbGxvd0Nzb3NhQ29udGFjdEZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWxsb3dDc29zYUNvbnRhY3RGbGFnO1xyXG4gICAgIFxyXG4gICAgXHJcbiAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1TdXBwb3J0cyA9IFtdO1xyXG4gICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVN1cHBvcnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgdmljdGltU3VwcG9ydD0gPFZpY3RpbVN1cHBvcnQ+e307XHJcbiAgICAgICAgICAgICAgdmljdGltU3VwcG9ydC52aWN0aW1JZD0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XHJcbiAgICAgICAgICAgICAgdmljdGltU3VwcG9ydC52aWN0aW1TdXBwb3J0VHlwZUlkPSBlbGVtZW50O1xyXG4gICAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQubW9kaWZpZWRCeT0gdGhpcy5zdGFmZklkO1xyXG4gICAgICAgICAgICAgIHRoaXMudmljdGltRGV0YWlsLnZpY3RpbVN1cHBvcnRzLnB1c2godmljdGltU3VwcG9ydCk7XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1EcnVnVXNlcyA9IFtdO1xyXG5cclxuICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMgY2FsY3VsYXRlJylcclxuICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcylcclxuXHJcbiAgICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBjb25zdCB2aWN0aW1EcnVnVXNlID0gPFZpY3RpbURydWdVc2U+e307XHJcbiAgICAgICAgdmljdGltRHJ1Z1VzZS5kcnVnVHlwZUlkID0gZWxlbWVudDtcclxuICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMgYmVmb3JlJylcclxuICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcylcclxuICAgICAgIFxyXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBcIk9USEVSXCIgfHwgZWxlbWVudCA9PT0gXCJcIiAgKXtcclxuICAgICAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IG51bGw7XHJcbiAgICAgICAgICB2aWN0aW1EcnVnVXNlLm90aGVyRHJ1ZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlckRydWc7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgZWxzZXtcclxuICAgICAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICB2aWN0aW1EcnVnVXNlLm90aGVyRHJ1ZyA9IG51bGw7XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgdmljdGltRHJ1Z1VzZS5tb2RpZmllZEJ5ID0gdGhpcy5zdGFmZklkO1xyXG4gICAgICAgIHZpY3RpbURydWdVc2UudmljdGltSWQgPSB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZDtcclxuICAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1EcnVnVXNlcy5wdXNoKHZpY3RpbURydWdVc2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMgYWZ0ZXInKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcylcclxuICAgICAgICBcclxuICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcy5maWx0ZXIod29yZCA9PiAoICEod29yZC5kcnVnVHlwZUlkID09PSBudWxsICAmJiB3b3JkLm90aGVyRHJ1ZyA9PT0gbnVsbCkgICAgKSk7XHJcblxyXG5cclxuICAgICAgY29uc29sZS5sb2coJ2FkanVzdCB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMgJylcclxuICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzKVxyXG4gXHJcbiAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltV2VhcG9uVXNlcyA9IFtdO1xyXG4gICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1XZWFwb25Vc2VzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICBjb25zdCB2aWN0aW1XZWFwb25Vc2UgPSA8VmljdGltV2VhcG9uVXNlPnt9O1xyXG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLnZpY3RpbUlkPSB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZDtcclxuICAgICAgICAgIHZpY3RpbVdlYXBvblVzZS53ZWFwb25UeXBlSWQ9IGVsZW1lbnQ7ICAgXHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3dlYXBvbiBlbGVtZW50Jyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlbGVtZW50KTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlcldlYXBvbik7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltV2VhcG9uVXNlcyk7XHJcblxyXG4gICAgICAgICBpZiAoZWxlbWVudCA9PVwiT1RIRVJcIil7XHJcbiAgICAgICAgICB2aWN0aW1XZWFwb25Vc2Uub3RoZXJXZWFwb249dGhpcy52aWN0aW1Gb3JtLnZhbHVlLm90aGVyV2VhcG9uO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICB2aWN0aW1XZWFwb25Vc2Uub3RoZXJXZWFwb24gPSBudWxsO1xyXG4gICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICAgICAgIHRoaXMudmljdGltRGV0YWlsLnZpY3RpbVdlYXBvblVzZXMucHVzaCh2aWN0aW1XZWFwb25Vc2UpO1xyXG4gICAgICAgICAgXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgIFxyXG4gICAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1EZXRhaWwgYmVmb3JlIGVtaXQnKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1EZXRhaWwpO1xyXG5cclxuICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnB1dFZpY3RpbXModGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQsdGhpcy52aWN0aW1EZXRhaWwpLnN1YnNjcmliZShcclxuICAgICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdVcGRhdGUgU3VjY2Vzc2Z1bGx5IScsICcnLCB7XHJcbiAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAvL0Fkdm9jYXRlIHNlY3Rpb25cclxuXHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLnZpY3RpbUFkdm9jYXRlSWQgPSB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZDtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUubGFzdE5hbWU9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUxhc3ROYW1lO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5maXJzdE5hbWU9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUZpcnN0TmFtZTtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUucHJlZml4SWQ9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVByZWZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlUHJlZml4SWQgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5zdWZmaXhJZD0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlU3VmZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVTdWZmaXhJZCA6IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLmFkZHJlc3NJZD0gdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA/IHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5ub1Bob25lRmxhZz0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWc/IHRydWU6IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5ob21lUGhvbmU9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSA6IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLndvcmtQaG9uZT0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuY2VsbFBob25lPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5lbWFpbD0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlRW1haWwgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVFbWFpbCA6IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcclxuICAgICBcclxuICAgICAgIGNvbnNvbGUubG9nKCd3b3JrIG9uIGFkdm9jYXRlIHBhcnQnKTtcclxuICAgICAgaWYgKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUFkdm9jYXRlRmxhZz09J1lTJylcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnd29yayBvbiBhZHZvY2F0ZSBmbGFnIGlzIFlTICcpO1xyXG4gICAgICAgICAgaWYodGhpcy52aWN0aW1EZXRhaWwuYWR2b2NhdGVGaXJzdE5hbWUgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjaGVjayBhZHZvY2F0ZSBmaXNydCBuYW1lICcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbURldGFpbC5hZHZvY2F0ZUZpcnN0TmFtZSk7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucHV0VmljdGltQWR2b2NhdGUodGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQsdGhpcy52aWN0aW1BZHZvY2F0ZSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgcmVzcD0+e30gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2FkZCBhZHZvY2F0ZScpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUFkdm9jYXRlKTtcclxuICAgICAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnBvc3RWaWN0aW1BZHZvY2F0ZSh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCwgdGhpcy52aWN0aW1BZHZvY2F0ZSkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB9XHJcbiAgICAgXHJcbiAgICBcclxuICAgIC8vIGd1YXJkaWFuIHNlY3Rpb25cclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4udmljdGltR3VhcmRpYW5JZCA9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5sYXN0TmFtZSA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5MYXN0TmFtZTtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4uZmlyc3ROYW1lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuRmlyc3ROYW1lO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5wcmVmaXhJZCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhblByZWZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuUHJlZml4SWQgOiBudWxsO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5zdWZmaXhJZCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhblN1ZmZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuU3VmZml4SWQgOiBudWxsO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5hZGRyZXNzSWQgPSB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkID8gdGhpcy5ndWFyZGlhbkFkZHJlc3NJZCA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLm5vUGhvbmVGbGFnID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnPyB0cnVlOiBmYWxzZTtcclxuICAgIHRoaXMudmljdGltR3VhcmRpYW4uaG9tZVBob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lID8gIHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkhvbWVQaG9uZSA6IG51bGw7XHJcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLndvcmtQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSA/ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Xb3JrUGhvbmUgOiBudWxsO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5jZWxsUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUgOiBudWxsO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5lbWFpbCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkVtYWlsID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuRW1haWwgOiBudWxsO1xyXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5tb2RpZmllZEJ5ID0gdGhpcy5zdGFmZklkO1xyXG4gIFxyXG4gICAgaWYgKHRoaXMudmljdGltRGV0YWlsLm1pbm9yRmxhZyA9PSB0cnVlKVxyXG4gICAge1xyXG4gICAgICAgaWYodGhpcy52aWN0aW1EZXRhaWwuZ3VhcmRpYW5GaXJzdE5hbWUgIT0gbnVsbCApXHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnB1dFZpY3RpbUd1YXJkaWFuKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkLHRoaXMudmljdGltR3VhcmRpYW4pLnN1YnNjcmliZShcclxuICAgICAgICByZXNwPT57XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdhZGQgZ3VyZGlhbicpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1HdWFyZGlhbik7XHJcbiAgICAgICAgIHRoaXMudmljdGltU2VydmljZS5wb3N0VmljdGltR3VhcmRpYW4odGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQsIHRoaXMudmljdGltR3VhcmRpYW4pLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgfVxyXG4gICBcclxuICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICApO1xyXG4gICAgXHJcbiAgICB9XHJcbiAgfS8vZW5kIG9mIHRoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyA9IGZhbHNlXHJcbiAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1EZXRhaWwnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRGV0YWlsKTtcclxuICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy52aWN0aW1EZXRhaWwpO1xyXG4gXHJcbiAgICAgIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uIFwic2F2ZSB2aWN0aW1cIlxyXG4gICAgICBhZGRDb250YWN0KCl7XHJcblxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1Db250YWN0Jyx0aGlzLnZpY3RpbUlkXSk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybWF0TGFiZWwodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICBcclxufVxyXG4iXX0=