@ironcode/vas-lib 1.15.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/cjs/lib/control-value/vas-camera-control-value.model.js +1 -2
  2. package/cjs/lib/control-value/vas-camera-control-value.model.js.map +1 -1
  3. package/cjs/lib/controls-config/vas-control-config-direction.enum.js +1 -1
  4. package/cjs/lib/controls-config/vas-control-config-direction.enum.js.map +1 -1
  5. package/cjs/lib/entity/index.d.ts +11 -1
  6. package/cjs/lib/entity/index.d.ts.map +1 -1
  7. package/cjs/lib/entity/index.js +11 -1
  8. package/cjs/lib/entity/index.js.map +1 -1
  9. package/cjs/lib/entity/step-model.factory.d.ts +11 -0
  10. package/cjs/lib/entity/step-model.factory.d.ts.map +1 -0
  11. package/cjs/lib/entity/step-model.factory.js +41 -0
  12. package/cjs/lib/entity/step-model.factory.js.map +1 -0
  13. package/cjs/lib/entity/vas-account.dto.d.ts +1 -1
  14. package/cjs/lib/entity/vas-account.dto.d.ts.map +1 -1
  15. package/cjs/lib/entity/vas-account.dto.js +1 -1
  16. package/cjs/lib/entity/vas-account.dto.js.map +1 -1
  17. package/cjs/lib/entity/vas-control.model.js.map +1 -1
  18. package/cjs/lib/entity/vas-field.model.js.map +1 -1
  19. package/cjs/lib/entity/vas-file.dto.js +1 -2
  20. package/cjs/lib/entity/vas-file.dto.js.map +1 -1
  21. package/cjs/lib/entity/vas-file.model.js.map +1 -1
  22. package/cjs/lib/entity/vas-fire-user.model.d.ts +1 -1
  23. package/cjs/lib/entity/vas-fire-user.model.d.ts.map +1 -1
  24. package/cjs/lib/entity/vas-fire-user.model.js.map +1 -1
  25. package/cjs/lib/entity/vas-form-config.model.d.ts +3 -13
  26. package/cjs/lib/entity/vas-form-config.model.d.ts.map +1 -1
  27. package/cjs/lib/entity/vas-form-config.model.js.map +1 -1
  28. package/cjs/lib/entity/vas-form.model.js.map +1 -1
  29. package/cjs/lib/entity/vas-group.model.js.map +1 -1
  30. package/cjs/lib/entity/vas-invitation.d.ts +1 -1
  31. package/cjs/lib/entity/vas-invitation.d.ts.map +1 -1
  32. package/cjs/lib/entity/vas-invitation.js +1 -1
  33. package/cjs/lib/entity/vas-invitation.js.map +1 -1
  34. package/cjs/lib/entity/vas-job-action-controls-step.model.d.ts +34 -0
  35. package/cjs/lib/entity/vas-job-action-controls-step.model.d.ts.map +1 -0
  36. package/cjs/lib/entity/vas-job-action-controls-step.model.js +58 -0
  37. package/cjs/lib/entity/vas-job-action-controls-step.model.js.map +1 -0
  38. package/cjs/lib/entity/vas-job-action-email-form-step.model.d.ts +42 -0
  39. package/cjs/lib/entity/vas-job-action-email-form-step.model.d.ts.map +1 -0
  40. package/cjs/lib/entity/vas-job-action-email-form-step.model.js +66 -0
  41. package/cjs/lib/entity/vas-job-action-email-form-step.model.js.map +1 -0
  42. package/cjs/lib/entity/vas-job-action-instruction-step.model.d.ts +35 -0
  43. package/cjs/lib/entity/vas-job-action-instruction-step.model.d.ts.map +1 -0
  44. package/cjs/lib/entity/vas-job-action-instruction-step.model.js +60 -0
  45. package/cjs/lib/entity/vas-job-action-instruction-step.model.js.map +1 -0
  46. package/cjs/lib/entity/vas-job-action-note-prompt-step.model.d.ts +33 -0
  47. package/cjs/lib/entity/vas-job-action-note-prompt-step.model.d.ts.map +1 -0
  48. package/cjs/lib/entity/vas-job-action-note-prompt-step.model.js +56 -0
  49. package/cjs/lib/entity/vas-job-action-note-prompt-step.model.js.map +1 -0
  50. package/cjs/lib/entity/vas-job-action-set-datetime-step.model.d.ts +35 -0
  51. package/cjs/lib/entity/vas-job-action-set-datetime-step.model.d.ts.map +1 -0
  52. package/cjs/lib/entity/vas-job-action-set-datetime-step.model.js +60 -0
  53. package/cjs/lib/entity/vas-job-action-set-datetime-step.model.js.map +1 -0
  54. package/cjs/lib/entity/vas-job-action-set-job-status-step.model.d.ts +34 -0
  55. package/cjs/lib/entity/vas-job-action-set-job-status-step.model.d.ts.map +1 -0
  56. package/cjs/lib/entity/vas-job-action-set-job-status-step.model.js +58 -0
  57. package/cjs/lib/entity/vas-job-action-set-job-status-step.model.js.map +1 -0
  58. package/cjs/lib/entity/vas-job-action-set-value-step.model.d.ts +35 -0
  59. package/cjs/lib/entity/vas-job-action-set-value-step.model.d.ts.map +1 -0
  60. package/cjs/lib/entity/vas-job-action-set-value-step.model.js +60 -0
  61. package/cjs/lib/entity/vas-job-action-set-value-step.model.js.map +1 -0
  62. package/cjs/lib/entity/vas-job-action-step.model.d.ts +21 -0
  63. package/cjs/lib/entity/vas-job-action-step.model.d.ts.map +1 -0
  64. package/cjs/lib/entity/vas-job-action-step.model.js +25 -0
  65. package/cjs/lib/entity/vas-job-action-step.model.js.map +1 -0
  66. package/cjs/lib/entity/vas-job-action-webhook-step.model.d.ts +35 -0
  67. package/cjs/lib/entity/vas-job-action-webhook-step.model.d.ts.map +1 -0
  68. package/cjs/lib/entity/vas-job-action-webhook-step.model.js +60 -0
  69. package/cjs/lib/entity/vas-job-action-webhook-step.model.js.map +1 -0
  70. package/cjs/lib/entity/vas-job-action.dto.d.ts +31 -15
  71. package/cjs/lib/entity/vas-job-action.dto.d.ts.map +1 -1
  72. package/cjs/lib/entity/vas-job-action.dto.js +14 -1
  73. package/cjs/lib/entity/vas-job-action.dto.js.map +1 -1
  74. package/cjs/lib/entity/vas-job-action.model.d.ts +37 -0
  75. package/cjs/lib/entity/vas-job-action.model.d.ts.map +1 -0
  76. package/cjs/lib/entity/vas-job-action.model.js +63 -0
  77. package/cjs/lib/entity/vas-job-action.model.js.map +1 -0
  78. package/cjs/lib/entity/vas-job-status.d.ts +28 -0
  79. package/cjs/lib/entity/vas-job-status.d.ts.map +1 -0
  80. package/cjs/lib/entity/vas-job-status.js +46 -0
  81. package/cjs/lib/entity/vas-job-status.js.map +1 -0
  82. package/cjs/lib/entity/vas-job.model.js.map +1 -1
  83. package/cjs/lib/entity/vas-user.model.d.ts +1 -1
  84. package/cjs/lib/entity/vas-user.model.d.ts.map +1 -1
  85. package/cjs/lib/utils/find-form-control.js.map +1 -1
  86. package/cjs/lib/utils/get-value-by-path.d.ts.map +1 -1
  87. package/cjs/lib/utils/get-value-by-path.js.map +1 -1
  88. package/cjs/lib/utils/is-array-string.d.ts +1 -1
  89. package/cjs/lib/utils/is-array-string.d.ts.map +1 -1
  90. package/cjs/lib/utils/omit.d.ts.map +1 -1
  91. package/cjs/lib/utils/omit.js.map +1 -1
  92. package/cjs/lib/utils/only.d.ts.map +1 -1
  93. package/cjs/lib/utils/only.js.map +1 -1
  94. package/{fesm2020 → fesm2022}/ironcode-vas-lib.mjs +1261 -23
  95. package/fesm2022/ironcode-vas-lib.mjs.map +1 -0
  96. package/lib/entity/index.d.ts +11 -1
  97. package/lib/entity/step-model.factory.d.ts +10 -0
  98. package/lib/entity/vas-account.dto.d.ts +1 -1
  99. package/lib/entity/vas-fire-user.model.d.ts +1 -1
  100. package/lib/entity/vas-form-config.model.d.ts +3 -13
  101. package/lib/entity/vas-invitation.d.ts +1 -1
  102. package/lib/entity/vas-job-action-controls-step.model.d.ts +33 -0
  103. package/lib/entity/vas-job-action-email-form-step.model.d.ts +41 -0
  104. package/lib/entity/vas-job-action-instruction-step.model.d.ts +34 -0
  105. package/lib/entity/vas-job-action-note-prompt-step.model.d.ts +32 -0
  106. package/lib/entity/vas-job-action-set-datetime-step.model.d.ts +34 -0
  107. package/lib/entity/vas-job-action-set-job-status-step.model.d.ts +33 -0
  108. package/lib/entity/vas-job-action-set-value-step.model.d.ts +34 -0
  109. package/lib/entity/vas-job-action-step.model.d.ts +20 -0
  110. package/lib/entity/vas-job-action-webhook-step.model.d.ts +34 -0
  111. package/lib/entity/vas-job-action.dto.d.ts +31 -15
  112. package/lib/entity/vas-job-action.model.d.ts +36 -0
  113. package/lib/entity/vas-job-status.d.ts +27 -0
  114. package/lib/entity/vas-user.model.d.ts +1 -1
  115. package/lib/utils/is-array-string.d.ts +1 -1
  116. package/package.json +3 -11
  117. package/cjs/lib/entity/vas-job-status.dto.d.ts +0 -8
  118. package/cjs/lib/entity/vas-job-status.dto.d.ts.map +0 -1
  119. package/cjs/lib/entity/vas-job-status.dto.js +0 -3
  120. package/cjs/lib/entity/vas-job-status.dto.js.map +0 -1
  121. package/cjs/package.json +0 -5
  122. package/esm2020/ironcode-vas-lib.mjs +0 -5
  123. package/esm2020/lib/control-value/index.mjs +0 -3
  124. package/esm2020/lib/control-value/vas-camera-control-value.model.mjs +0 -8
  125. package/esm2020/lib/control-value/vas-function-control-value.dto.mjs +0 -2
  126. package/esm2020/lib/controls-config/index.mjs +0 -5
  127. package/esm2020/lib/controls-config/vas-control-config-direction.enum.mjs +0 -8
  128. package/esm2020/lib/controls-config/vas-control-config.model.mjs +0 -2
  129. package/esm2020/lib/controls-config/vas-function-control-config.dto.mjs +0 -2
  130. package/esm2020/lib/controls-config/vas-select-control-config.model.mjs +0 -2
  131. package/esm2020/lib/elastic/index.mjs +0 -2
  132. package/esm2020/lib/elastic/job.elastic-doc.mjs +0 -2
  133. package/esm2020/lib/entity/index.mjs +0 -70
  134. package/esm2020/lib/entity/vas-access-group.dto.mjs +0 -2
  135. package/esm2020/lib/entity/vas-account-config.dto.mjs +0 -2
  136. package/esm2020/lib/entity/vas-account-object.dto.mjs +0 -2
  137. package/esm2020/lib/entity/vas-account-object.model.mjs +0 -24
  138. package/esm2020/lib/entity/vas-account.dto.mjs +0 -7
  139. package/esm2020/lib/entity/vas-base.dto.mjs +0 -2
  140. package/esm2020/lib/entity/vas-base.model.mjs +0 -34
  141. package/esm2020/lib/entity/vas-branch.dto.mjs +0 -2
  142. package/esm2020/lib/entity/vas-branch.model.mjs +0 -68
  143. package/esm2020/lib/entity/vas-contact-type.dto.mjs +0 -2
  144. package/esm2020/lib/entity/vas-contact.dto.mjs +0 -2
  145. package/esm2020/lib/entity/vas-contact.model.mjs +0 -101
  146. package/esm2020/lib/entity/vas-control-type.dto.mjs +0 -2
  147. package/esm2020/lib/entity/vas-control-type.model.mjs +0 -52
  148. package/esm2020/lib/entity/vas-control.dto.mjs +0 -2
  149. package/esm2020/lib/entity/vas-control.model.mjs +0 -191
  150. package/esm2020/lib/entity/vas-field.dto.mjs +0 -2
  151. package/esm2020/lib/entity/vas-field.model.mjs +0 -112
  152. package/esm2020/lib/entity/vas-file.dto.mjs +0 -9
  153. package/esm2020/lib/entity/vas-file.model.mjs +0 -135
  154. package/esm2020/lib/entity/vas-fire-user.dto.mjs +0 -2
  155. package/esm2020/lib/entity/vas-fire-user.model.mjs +0 -102
  156. package/esm2020/lib/entity/vas-form-config.dto.mjs +0 -2
  157. package/esm2020/lib/entity/vas-form-config.model.mjs +0 -31
  158. package/esm2020/lib/entity/vas-form.dto.mjs +0 -2
  159. package/esm2020/lib/entity/vas-form.model.mjs +0 -215
  160. package/esm2020/lib/entity/vas-group.dto.mjs +0 -2
  161. package/esm2020/lib/entity/vas-group.model.mjs +0 -108
  162. package/esm2020/lib/entity/vas-instruction-job-field.dto.mjs +0 -2
  163. package/esm2020/lib/entity/vas-instruction-job-field.model.mjs +0 -48
  164. package/esm2020/lib/entity/vas-instruction-job.dto.mjs +0 -2
  165. package/esm2020/lib/entity/vas-instruction-job.model.mjs +0 -81
  166. package/esm2020/lib/entity/vas-instruction-provider.dto.mjs +0 -2
  167. package/esm2020/lib/entity/vas-instruction-provider.model.mjs +0 -66
  168. package/esm2020/lib/entity/vas-instruction.dto.mjs +0 -2
  169. package/esm2020/lib/entity/vas-instruction.model.mjs +0 -52
  170. package/esm2020/lib/entity/vas-invitation.mjs +0 -88
  171. package/esm2020/lib/entity/vas-job-action.dto.mjs +0 -22
  172. package/esm2020/lib/entity/vas-job-copy.mjs +0 -39
  173. package/esm2020/lib/entity/vas-job-data.dto.mjs +0 -2
  174. package/esm2020/lib/entity/vas-job-data.model.mjs +0 -21
  175. package/esm2020/lib/entity/vas-job-email.dto.mjs +0 -2
  176. package/esm2020/lib/entity/vas-job-email.model.mjs +0 -85
  177. package/esm2020/lib/entity/vas-job-status.dto.mjs +0 -2
  178. package/esm2020/lib/entity/vas-job-type.dto.mjs +0 -2
  179. package/esm2020/lib/entity/vas-job.dto.mjs +0 -2
  180. package/esm2020/lib/entity/vas-job.model.mjs +0 -529
  181. package/esm2020/lib/entity/vas-lookup-type.dto.mjs +0 -2
  182. package/esm2020/lib/entity/vas-lookup.dto.mjs +0 -2
  183. package/esm2020/lib/entity/vas-lookup.model.mjs +0 -75
  184. package/esm2020/lib/entity/vas-membership.dto.mjs +0 -2
  185. package/esm2020/lib/entity/vas-membership.model.mjs +0 -62
  186. package/esm2020/lib/entity/vas-note.dto.mjs +0 -2
  187. package/esm2020/lib/entity/vas-note.model.mjs +0 -68
  188. package/esm2020/lib/entity/vas-report-layout.dto.mjs +0 -2
  189. package/esm2020/lib/entity/vas-report-layout.model.mjs +0 -22
  190. package/esm2020/lib/entity/vas-report-request.dto.mjs +0 -2
  191. package/esm2020/lib/entity/vas-report-request.model.mjs +0 -44
  192. package/esm2020/lib/entity/vas-report.dto.mjs +0 -2
  193. package/esm2020/lib/entity/vas-report.model.mjs +0 -72
  194. package/esm2020/lib/entity/vas-restricted-account-object.dto.mjs +0 -2
  195. package/esm2020/lib/entity/vas-restricted-account-object.model.mjs +0 -24
  196. package/esm2020/lib/entity/vas-task-type.dto.mjs +0 -2
  197. package/esm2020/lib/entity/vas-task.dto.mjs +0 -2
  198. package/esm2020/lib/entity/vas-task.model.mjs +0 -80
  199. package/esm2020/lib/entity/vas-user.dto.mjs +0 -2
  200. package/esm2020/lib/entity/vas-user.model.mjs +0 -42
  201. package/esm2020/lib/entity/vas-vehicle.dto.mjs +0 -2
  202. package/esm2020/lib/entity/vas-vehicle.model.mjs +0 -69
  203. package/esm2020/lib/model/geo-location.mjs +0 -12
  204. package/esm2020/lib/model/index.mjs +0 -3
  205. package/esm2020/lib/model/vas-time-range.model.mjs +0 -2
  206. package/esm2020/lib/utils/get-value-by-path.mjs +0 -64
  207. package/esm2020/lib/utils/is-array-string.mjs +0 -4
  208. package/esm2020/lib/utils/only.mjs +0 -22
  209. package/esm2020/public-api.mjs +0 -6
  210. package/fesm2015/ironcode-vas-lib.mjs +0 -2736
  211. package/fesm2015/ironcode-vas-lib.mjs.map +0 -1
  212. package/fesm2020/ironcode-vas-lib.mjs.map +0 -1
  213. package/lib/entity/vas-job-status.dto.d.ts +0 -7
@@ -1,529 +0,0 @@
1
- import { isFileDto } from './vas-file.dto';
2
- import { UUID } from 'angular2-uuid';
3
- import moment from 'moment';
4
- import { getValueByPath } from '../utils/get-value-by-path';
5
- import { VasFieldModel } from './vas-field.model';
6
- import { VasRestrictedAccountObjectModel } from './vas-restricted-account-object.model';
7
- import { getEmptyGeoLocation } from '../model';
8
- import { isCameraControlValueV1 } from '../control-value';
9
- import { isArrayString } from '../utils/is-array-string';
10
- import { only } from '../utils/only';
11
- /**
12
- * JobModel
13
- */
14
- export class VasJobModel extends VasRestrictedAccountObjectModel {
15
- constructor(id, created, serverCreated, createdBy, modified, serverModified, modifiedBy, createdByName, modifiedByName, account, accessGroup, reference, jobDate, jobStatus, jobType, assigneeId, formId, timeZoneOffset, pendingFields, childModified, version, createdByDisplayName, modifiedByDisplayName, geoLocation, files, fields, jobEmails, notes, reports, tasks, instruction) {
16
- super(id, created, serverCreated, createdBy, modified, serverModified, modifiedBy, createdByName, modifiedByName, account, accessGroup);
17
- this.id = id;
18
- this.created = created;
19
- this.serverCreated = serverCreated;
20
- this.createdBy = createdBy;
21
- this.modified = modified;
22
- this.serverModified = serverModified;
23
- this.modifiedBy = modifiedBy;
24
- this.createdByName = createdByName;
25
- this.modifiedByName = modifiedByName;
26
- this.account = account;
27
- this.accessGroup = accessGroup;
28
- this.reference = reference;
29
- this.jobDate = jobDate;
30
- this.jobStatus = jobStatus;
31
- this.jobType = jobType;
32
- this.assigneeId = assigneeId;
33
- this.formId = formId;
34
- this.timeZoneOffset = timeZoneOffset;
35
- this.pendingFields = pendingFields;
36
- this.childModified = childModified;
37
- this.version = version;
38
- this.createdByDisplayName = createdByDisplayName;
39
- this.modifiedByDisplayName = modifiedByDisplayName;
40
- this.geoLocation = geoLocation;
41
- this.files = files;
42
- this.fields = fields;
43
- this.jobEmails = jobEmails;
44
- this.notes = notes;
45
- this.reports = reports;
46
- this.tasks = tasks;
47
- this.instruction = instruction;
48
- }
49
- /**
50
- * Returns this with the dynamic interface
51
- * @return {VasJobModelDynamicInterface}
52
- */
53
- get $this() {
54
- return this;
55
- }
56
- /**
57
- * Returns a list of Job dynamic properties i.e. those that are added by the
58
- * dynamic forms
59
- */
60
- get dynamicProperties() {
61
- const nativeProps = this.staticProperties;
62
- return Object
63
- .getOwnPropertyNames(this)
64
- .filter(prop => !nativeProps.includes(prop));
65
- }
66
- /**
67
- * Returns the list of properties of the Job type
68
- */
69
- get staticProperties() {
70
- return Object.getOwnPropertyNames(VasJobModel.empty());
71
- }
72
- /**
73
- * @return {VasJobModel}
74
- */
75
- static empty() {
76
- return new VasJobModel('', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', moment().utcOffset(), 0, '', 0, '', '', getEmptyGeoLocation(), [], [], [], [], [], [], null);
77
- }
78
- static fromDto(dto) {
79
- const model = new VasJobModel(dto.id || '', dto.created || '', dto.serverCreated || '', dto.createdBy || '', dto.modified || '', dto.serverModified || '', dto.modifiedBy || '', dto.createdByName || '', dto.modifiedByName || '', dto.account || '', dto.accessGroup || '', dto.reference || '', dto.jobDate || '', dto.jobStatus || '', dto.jobType || '', dto.assigneeId || '', dto.formId || dto.lastForm || '', dto.timeZoneOffset || moment().utcOffset(), dto.pendingFields || 0, dto.childModified || '', dto.version || 0, dto.createdByDisplayName || '', dto.modifiedByDisplayName || '', dto.geoLocation || getEmptyGeoLocation(), dto.files || [], dto.fields || [], dto.jobEmails || [], dto.notes || [], dto.reports || [], dto.tasks || [], dto.instruction || null);
80
- const emptyKeys = model.staticProperties;
81
- Object
82
- .keys(dto)
83
- .filter(key => emptyKeys.indexOf(key) === -1)
84
- .forEach((key) => model.$this[key] = dto[key]);
85
- return model;
86
- }
87
- /**
88
- * This method will instantiate a new JobModel. The difference with this
89
- * method of instantiation is that we are coming from a relation frame i.e.
90
- * the job has a list of {@link VasFieldDto} instead of a Job document.
91
- *
92
- */
93
- static fromRelational(dto, form) {
94
- const model = new VasJobModel(dto.id || '', dto.created || '', dto.serverCreated || '', dto.createdBy || '', dto.modified || '', dto.serverModified || '', dto.modifiedBy || '', dto.createdByName || '', dto.modifiedByName || '', dto.account || '', dto.accessGroup || '', dto.reference || '', dto.jobDate || '', dto.jobStatus || '', dto.jobType || '', dto.assigneeId || '', dto.formId || '', dto.timeZoneOffset || moment().utcOffset(), dto.pendingFields || 0, dto.childModified || '', dto.version || 0, dto.createdByDisplayName || '', dto.modifiedByDisplayName || '', dto.geoLocation || getEmptyGeoLocation(), dto.files || [], dto.fields || [], dto.jobEmails || [], dto.notes || [], dto.reports || [], dto.tasks || [], dto.instruction || null);
95
- form.groups
96
- .forEach(group => {
97
- group.controls
98
- .forEach(control => {
99
- const field = dto.fields?.find(f => f.control === control.id);
100
- if (!field) {
101
- return;
102
- }
103
- model.getGroup(group.name)[control.name] = field.value;
104
- });
105
- });
106
- return model;
107
- }
108
- /**
109
- * @param {VasFormModel} formModel
110
- * @return {Record<string, VasFieldDtoValue>}
111
- */
112
- getFields(formModel) {
113
- const fields = {};
114
- formModel.groups
115
- .forEach(group => {
116
- group.controls.forEach(control => {
117
- (fields)[control.reportTemplateName] =
118
- this.getValueByPath([group.name, control.name]) || null;
119
- });
120
- });
121
- return fields;
122
- }
123
- /**
124
- * Will return an object whose keys are the names of all fields in the job.
125
- * This method is similar to `getFields` except that this method will only
126
- * return values where a value was set, as opposed to `getFields` which will
127
- * return a value for every control even if no value was set, because it uses
128
- * the form to drive the logic. Note also this method will return values for
129
- * any Fields in the fields array.
130
- * @return {Record<string, VasFieldDtoValue>}
131
- */
132
- getFields2() {
133
- let fields = {};
134
- this.dynamicProperties
135
- .forEach((groupName) => {
136
- Object
137
- .keys(this.$this[groupName])
138
- .forEach(controlName => {
139
- fields[controlName] =
140
- this.getValueByPath([groupName, controlName]) || null;
141
- });
142
- }, {});
143
- this.fields.forEach(field => fields[field.controlName] = field.value);
144
- return fields;
145
- }
146
- /**
147
- * Returns an object describing how many attachments were added to this job
148
- * (camera controls and files), and how many have not been uploaded yet.
149
- *
150
- * @param formModel instance of {@link VasFormModel} that was used when the
151
- * job was created
152
- */
153
- getFilesUploadStatus(formModel) {
154
- const pathsWithValue = formModel
155
- .getCameraControlPaths()
156
- .map(path => {
157
- const value = this.getValueByPath(path);
158
- if (value && !!value.id) {
159
- return path;
160
- }
161
- return null;
162
- })
163
- .filter(path => path !== null ? path : null)
164
- .filter(isArrayString);
165
- let total = pathsWithValue.length;
166
- total += this.files.length;
167
- // calculate the number of camera images still to upload
168
- let pending = pathsWithValue
169
- .map(path => this.getValueByPath(path))
170
- .map((value) => {
171
- if (isFileDto(value)) {
172
- return value.id && value.status !== 'COMPLETE';
173
- }
174
- else if (isCameraControlValueV1(value)) {
175
- // if url is not set, it hasn't been uploaded
176
- return value.id && !value.url;
177
- }
178
- return false;
179
- })
180
- .filter(hasUploaded => hasUploaded)
181
- .length;
182
- // add total from files that are pending
183
- pending += this.files
184
- .filter(value => value.status !== 'COMPLETE')
185
- .length;
186
- return {
187
- pending,
188
- total
189
- };
190
- }
191
- /**
192
- * This method will return the dynamic property from the JobModel that
193
- * represent a group (from a form).
194
- *
195
- * @param name the name of the group
196
- * @param init if true (default) and group is not found, initialise an empty
197
- * group, otherwise throw an error
198
- */
199
- getGroup(name, init = true) {
200
- let prop;
201
- if (this.staticProperties.includes(name)) {
202
- throw Error(`invalid group name ${name}, not a dynamic property`);
203
- }
204
- else if (this.$this[name] === undefined) {
205
- if (init) {
206
- prop = this.$this[name] = {};
207
- }
208
- else {
209
- throw Error(`invalid group name ${name}, not found`);
210
- }
211
- }
212
- else {
213
- prop = this.$this[name];
214
- if (typeof prop !== 'object') {
215
- throw Error(`invalid group name ${name}, not an object`);
216
- }
217
- }
218
- return prop;
219
- }
220
- /**
221
- * @param path path segments
222
- */
223
- getValueByPath(path = []) {
224
- return getValueByPath(path, this.$this);
225
- }
226
- /**
227
- * In order to understand why we need this method it is important to
228
- * understand that within the system, Jobs can be represented in one of two
229
- * ways, document and relational.
230
- *
231
- * The important distinction is how values submitted by a form are stored.
232
- *
233
- * Jobs stored as documents (JSON objects) will store user values, as dynamic
234
- * properties of the document.
235
- *
236
- * Whereas, Jobs stored as relational, will store user values in an array of
237
- * {@link VasFieldDto} objects.
238
- *
239
- * Depending on where we are in the system, either one of these approaches can
240
- * be more useful than the other.
241
- *
242
- * This method, assumes that the JobModel has been instantiated from a
243
- * document representation, and serves to hydrate the fields array. In order
244
- * to achieve this, knowledge of the {@link VasFormDto} that created the job
245
- * is required.
246
- *
247
- *
248
- * Job in document representation
249
- * {
250
- * id: <guid>,
251
- * reference: "something"
252
- * <other static job properties>...
253
- * foo: {
254
- * bar: "value"
255
- * }
256
- * }
257
- *
258
- * Job in relational representation
259
- * {
260
- * id: <guid>,
261
- * reference: "something"
262
- * <other static job properties>...
263
- * <will not have dynamic properties>...
264
- * fields: [
265
- * {
266
- * id: <guid>,
267
- * <other field properties>,
268
- * value: "value"
269
- * }
270
- * ]
271
- * }
272
- *
273
- *
274
- * @param formModel the VasFormModel that was used to create the job
275
- * @param controlFieldIdMap This is used to determine the id each field.
276
- * Either one will be found in the map, or a new one is generated.
277
- * @param controlNames if a value is provided, it will be used
278
- * to filter the fields that are returned.
279
- * @return {Array<VasFieldDto>}
280
- */
281
- hydrateFields(formModel, controlFieldIdMap = new Map(), controlNames) {
282
- const fields = [];
283
- formModel.groups
284
- .forEach(group => {
285
- group.controls.forEach(control => {
286
- if (!control.name.startsWith('fields.')) {
287
- return;
288
- }
289
- if (controlNames && !controlNames.includes(control.name)) {
290
- return;
291
- }
292
- fields.push(VasFieldModel.fromDto({
293
- // if the controlId exists in the map, use the associated fieldId,
294
- // otherwise generate a new id for the field.
295
- id: controlFieldIdMap.get(control.id) || UUID.UUID(),
296
- account: this.account,
297
- job: this.id,
298
- createdBy: this.createdBy,
299
- created: this.created,
300
- modifiedBy: this.modifiedBy,
301
- modified: this.modified,
302
- control: control.id,
303
- value: this.getValueByPath([group.name, control.name])
304
- }));
305
- });
306
- });
307
- this.fields = fields;
308
- }
309
- /**
310
- * A very non sophisticated way to set values in the job via paths
311
- *
312
- * For example:
313
- *
314
- * setValueByPath('value', ['foo', 'bar']);
315
- *
316
- * will make results in job
317
- * {
318
- * foo: {
319
- * bar: 'value'
320
- * }
321
- * }
322
- *
323
- * @param value the value to set
324
- * @param path path segments
325
- */
326
- setValueByPath(value, path = []) {
327
- switch (path.length) {
328
- case 0: {
329
- return;
330
- }
331
- case 1: {
332
- this[path[0]] = value;
333
- return;
334
- }
335
- case 2: {
336
- // eslint-disable-next-line max-len
337
- this.$this[path[0]][path[1]] = value;
338
- return;
339
- }
340
- case 3: {
341
- // eslint-disable-next-line max-len
342
- this.$this[path[0]][path[1]][path[2]] = value;
343
- return;
344
- }
345
- default: {
346
- throw Error('path has too many segments');
347
- }
348
- }
349
- }
350
- /**
351
- * @param staticOnly if true, will only output values for the static
352
- * properties in the dto
353
- */
354
- toDto(staticOnly = false) {
355
- if (staticOnly) {
356
- return {
357
- id: this.id,
358
- created: this.created,
359
- createdBy: this.createdBy,
360
- modified: this.modified,
361
- modifiedBy: this.modifiedBy,
362
- serverCreated: this.serverCreated,
363
- serverModified: this.serverModified,
364
- createdByName: this.createdByName,
365
- modifiedByName: this.modifiedByName,
366
- account: this.account,
367
- accessGroup: this.accessGroup,
368
- reference: this.reference,
369
- jobDate: this.jobDate,
370
- jobStatus: this.jobStatus,
371
- jobType: this.jobType,
372
- assigneeId: this.assigneeId,
373
- formId: this.formId,
374
- timeZoneOffset: this.timeZoneOffset,
375
- pendingFields: this.pendingFields,
376
- childModified: this.childModified,
377
- version: this.version,
378
- createdByDisplayName: this.createdByDisplayName,
379
- modifiedByDisplayName: this.modifiedByDisplayName,
380
- geoLocation: this.geoLocation,
381
- files: this.files,
382
- fields: this.fields,
383
- jobEmails: this.jobEmails,
384
- notes: this.notes,
385
- reports: this.reports,
386
- tasks: this.tasks,
387
- instruction: this.instruction
388
- };
389
- }
390
- const dto = {};
391
- [...this.staticProperties, ...this.dynamicProperties]
392
- .forEach(prop => dto[prop] = this.$this[prop]);
393
- return dto;
394
- }
395
- /**
396
- * This method will parse a syntax that allows us to build strings from the
397
- * values of from the job model. For example if the job model was:
398
- *
399
- * {
400
- * foo: 'bar'
401
- * }
402
- *
403
- * and we pass "i am foo {foo}", the result would be:
404
- *
405
- * "i am foo bar"
406
- *
407
- * we can also use moment to parse dates, for example if the job model was:
408
- *
409
- * {
410
- * created: "2022-01-01T00:00:00+0000"
411
- * }
412
- *
413
- * and we pass "{created|date:YY-MM-DD}", the result would be:
414
- *
415
- * "2022-01-01"
416
- *
417
- * @param {string} value a string with the syntax
418
- * @param {ParseSyntaxOptions} options
419
- * @return the results of parsing the syntax on this job
420
- */
421
- parseSyntax(value, options = {
422
- timeZoneOffset: 0
423
- }) {
424
- if (!value || typeof value !== 'string') {
425
- return '';
426
- }
427
- const fields = this.getFields2();
428
- return value.replace(/({[^}]*})/g, (match, token) => {
429
- const syntax = token.substring(1, token.length - 1);
430
- let [key, filter] = syntax.split('|');
431
- key = (key || '').trim();
432
- filter = (filter || '').trim();
433
- let filterName, filterArg = '';
434
- if (filter) {
435
- const splitIndex = filter.indexOf(':');
436
- if (splitIndex !== -1) {
437
- filterName = filter.substring(0, splitIndex);
438
- filterArg = filter.substring(splitIndex + 1);
439
- }
440
- else {
441
- filterName = filter;
442
- filterArg = '';
443
- }
444
- filterName = (filterName || '').trim();
445
- filterArg = (filterArg || '').trim();
446
- }
447
- const path = key.split('.');
448
- const objectKey = path.shift() || '';
449
- let result = '';
450
- if (objectKey === 'job') {
451
- result = (this.getValueByPath(path) || '').toString();
452
- }
453
- else if (objectKey === 'fields') {
454
- result = (getValueByPath(['fields.' + path.shift(), ...path], fields) || '').toString();
455
- }
456
- else if (objectKey.length) {
457
- if (options.objects) {
458
- if (options.objects[objectKey] === undefined) {
459
- console.debug(`objectKey ${objectKey} is not present in options.object`);
460
- result = '';
461
- }
462
- else {
463
- result = (getValueByPath(path, options.objects[objectKey]) || '')
464
- .toString();
465
- }
466
- }
467
- else {
468
- console.debug(`objectKey ${objectKey} was used but options.object is not set`);
469
- return '';
470
- }
471
- }
472
- else {
473
- return '';
474
- }
475
- if (filterName && result) {
476
- switch (filterName) {
477
- case 'date': {
478
- if (!options.timeZoneOffset) {
479
- return moment(result).format(filterArg || '');
480
- }
481
- else {
482
- return moment(result)
483
- .utcOffset(options.timeZoneOffset)
484
- .format(filterArg || '');
485
- }
486
- }
487
- default: {
488
- console.warn('unknown filter %s', filterName);
489
- }
490
- }
491
- }
492
- return result;
493
- }).trim();
494
- }
495
- ;
496
- /**
497
- * @return {object}
498
- */
499
- toApiDto() {
500
- return {
501
- ...super.toApiDto(),
502
- reference: this.reference || '~',
503
- jobDate: this.jobDate || '~',
504
- jobType: this.jobType || '~',
505
- accessGroup: this.accessGroup || '~',
506
- jobStatus: this.jobStatus || '~',
507
- assigneeId: this.assigneeId || '~',
508
- timeZoneOffset: this.timeZoneOffset || 0,
509
- pendingFields: this.pendingFields || 0,
510
- lastForm: this.formId || '~'
511
- };
512
- }
513
- static toApiPatchDto(item) {
514
- return only(item, [
515
- 'created',
516
- 'modified',
517
- 'reference',
518
- 'jobDate',
519
- 'jobType',
520
- 'accessGroup',
521
- 'jobStatus',
522
- 'assigneeId',
523
- 'timeZoneOffset',
524
- 'pendingFields',
525
- 'lastForm'
526
- ]);
527
- }
528
- }
529
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFzLWpvYi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Zhcy1saWIvc3JjL2xpYi9lbnRpdHkvdmFzLWpvYi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdsRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUE4QixNQUFNLGtCQUFrQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBeUJyQzs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsK0JBQStCO0lBRTlELFlBQ2tCLEVBQVUsRUFDVixPQUFlLEVBQ2YsYUFBcUIsRUFDckIsU0FBaUIsRUFDakIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsVUFBa0IsRUFDbEIsYUFBcUIsRUFDckIsY0FBc0IsRUFDdEIsT0FBZSxFQUNmLFdBQW1CLEVBQzVCLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixTQUFpQixFQUNqQixPQUFlLEVBQ2YsVUFBa0IsRUFDbEIsTUFBYyxFQUNkLGNBQXNCLEVBQ3RCLGFBQXFCLEVBQ3JCLGFBQXFCLEVBQ3JCLE9BQWUsRUFDZixvQkFBNEIsRUFDNUIscUJBQTZCLEVBQzdCLFdBQXdC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QztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNGaWxlRHRvLCBWYXNGaWxlRHRvIH0gZnJvbSAnLi92YXMtZmlsZS5kdG8nO1xuaW1wb3J0IHsgVVVJRCB9IGZyb20gJ2FuZ3VsYXIyLXV1aWQnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZ2V0VmFsdWVCeVBhdGggfSBmcm9tICcuLi91dGlscy9nZXQtdmFsdWUtYnktcGF0aCc7XG5pbXBvcnQgeyBWYXNCYXNlRHRvIH0gZnJvbSAnLi92YXMtYmFzZS5kdG8nO1xuaW1wb3J0IHsgVmFzRmllbGREdG8sIFZhc0ZpZWxkRHRvVmFsdWUgfSBmcm9tICcuL3Zhcy1maWVsZC5kdG8nO1xuaW1wb3J0IHsgVmFzRmllbGRNb2RlbCB9IGZyb20gJy4vdmFzLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IFZhc0Zvcm1Nb2RlbCB9IGZyb20gJy4vdmFzLWZvcm0ubW9kZWwnO1xuaW1wb3J0IHsgVmFzSm9iRHRvIH0gZnJvbSAnLi92YXMtam9iLmR0byc7XG5pbXBvcnQgeyBWYXNSZXN0cmljdGVkQWNjb3VudE9iamVjdE1vZGVsIH0gZnJvbSAnLi92YXMtcmVzdHJpY3RlZC1hY2NvdW50LW9iamVjdC5tb2RlbCc7XG5pbXBvcnQgeyBHZW9Mb2NhdGlvbiwgZ2V0RW1wdHlHZW9Mb2NhdGlvbiB9IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7IGlzQ2FtZXJhQ29udHJvbFZhbHVlVjEsIFZhc0NhbWVyYUNvbnRyb2xWYWx1ZU1vZGVsIH0gZnJvbSAnLi4vY29udHJvbC12YWx1ZSc7XG5pbXBvcnQgeyBpc0FycmF5U3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMvaXMtYXJyYXktc3RyaW5nJztcbmltcG9ydCB7IFZhc0Zvcm1EdG8gfSBmcm9tICcuL3Zhcy1mb3JtLmR0byc7XG5pbXBvcnQgeyBvbmx5IH0gZnJvbSAnLi4vdXRpbHMvb25seSc7XG5pbXBvcnQgeyBWYXNSZXBvcnREdG8gfSBmcm9tICcuL3Zhcy1yZXBvcnQuZHRvJztcbmltcG9ydCB7IFZhc1Rhc2tEdG8gfSBmcm9tICcuL3Zhcy10YXNrLmR0byc7XG5pbXBvcnQgeyBWYXNOb3RlRHRvIH0gZnJvbSAnLi92YXMtbm90ZS5kdG8nO1xuaW1wb3J0IHsgVmFzSm9iRW1haWxEdG8gfSBmcm9tICcuL3Zhcy1qb2ItZW1haWwuZHRvJztcbmltcG9ydCB7IFZhc0luc3RydWN0aW9uRHRvIH0gZnJvbSAnLi92YXMtaW5zdHJ1Y3Rpb24uZHRvJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFZhc0pvYk1vZGVsRHluYW1pY0ludGVyZmFjZSB7XG4gIFtzOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZVN5bnRheE9wdGlvbnMge1xuICAvLyBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBhZGp1c3QgYW55IGRhdGV0aW1lIHZhbHVlcyB0aGF0IGFyZSByZWZlcmVuY2VkXG4gIC8vIGluIHRoZSBzeW50YXggc3RyaW5nLiBTZWVcbiAgLy8gaHR0cHM6Ly9tb21lbnRqc2NvbS5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbW9tZW50LzAzLW1hbmlwdWxhdGluZy8wOS11dGMtb2Zmc2V0L1xuICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgYG1vbWVudGAgd2lsbCBoYW5kbGUgdGhlIHZhbHVlLlxuICB0aW1lWm9uZU9mZnNldDogbnVtYmVyLFxuICAvLyB0aGlzIGRpY3Rpb25hcnkgY2FuIGJlIHBhc3NlZCBpbiB0byBjb250YWluIG90aGVyIG9iamVjdHMgdG8gYmUgcmVmZXJlbmNlZFxuICAvLyBpbiB0aGUgc3ludGF4LiBGb3IgZXhhbXBsZSBpZiB3ZSBoYXZlIHtqb2IuZm9vfSB0aGlzIHdpbGwgcmVmZXJlbmNlIHRoZVxuICAvLyBqb2IncyBgZm9vYCBwcm9wZXJ0eSwgaG93ZXZlciBpZiB3ZSBoYXZlIFwicmVwb3J0TGF5b3V0LnRpdGxlXCIgdGhpcyB3aWxsXG4gIC8vIGV4cGVjdCB0byBmaW5kIGEgcHJvcGVydHkgb2YgYG9iamVjdHNgIGNhbGxlZCBgcmVwb3J0TGF5b3V0YCB3aGljaCB3aWxsXG4gIC8vIGhhdmUgYSBwcm9wZXJ0eSBjYWxsZWQgYHRpdGxlYFxuICBvYmplY3RzPzogUmVjb3JkPHN0cmluZywgUGFydGlhbDxWYXNCYXNlRHRvPiB8IFJlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+Pjtcbn1cblxuLyoqXG4gKiBKb2JNb2RlbFxuICovXG5leHBvcnQgY2xhc3MgVmFzSm9iTW9kZWwgZXh0ZW5kcyBWYXNSZXN0cmljdGVkQWNjb3VudE9iamVjdE1vZGVsIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb3ZlcnJpZGUgaWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY3JlYXRlZDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXJ2ZXJDcmVhdGVkOiBzdHJpbmcsXG4gICAgcHVibGljIG92ZXJyaWRlIGNyZWF0ZWRCeTogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBtb2RpZmllZDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXJ2ZXJNb2RpZmllZDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBtb2RpZmllZEJ5OiBzdHJpbmcsXG4gICAgcHVibGljIG92ZXJyaWRlIGNyZWF0ZWRCeU5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgbW9kaWZpZWRCeU5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWNjb3VudDogc3RyaW5nLFxuICAgIHB1YmxpYyBvdmVycmlkZSBhY2Nlc3NHcm91cDogc3RyaW5nLFxuICAgIHB1YmxpYyByZWZlcmVuY2U6IHN0cmluZyxcbiAgICBwdWJsaWMgam9iRGF0ZTogc3RyaW5nLFxuICAgIHB1YmxpYyBqb2JTdGF0dXM6IHN0cmluZyxcbiAgICBwdWJsaWMgam9iVHlwZTogc3RyaW5nLFxuICAgIHB1YmxpYyBhc3NpZ25lZUlkOiBzdHJpbmcsXG4gICAgcHVibGljIGZvcm1JZDogc3RyaW5nLFxuICAgIHB1YmxpYyB0aW1lWm9uZU9mZnNldDogbnVtYmVyLFxuICAgIHB1YmxpYyBwZW5kaW5nRmllbGRzOiBudW1iZXIsXG4gICAgcHVibGljIGNoaWxkTW9kaWZpZWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgdmVyc2lvbjogbnVtYmVyLFxuICAgIHB1YmxpYyBjcmVhdGVkQnlEaXNwbGF5TmFtZTogc3RyaW5nLFxuICAgIHB1YmxpYyBtb2RpZmllZEJ5RGlzcGxheU5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgZ2VvTG9jYXRpb246IEdlb0xvY2F0aW9uLFxuICAgIHB1YmxpYyBmaWxlczogQXJyYXk8VmFzRmlsZUR0bz4sXG4gICAgcHVibGljIGZpZWxkczogQXJyYXk8VmFzRmllbGREdG8+LFxuICAgIHB1YmxpYyBqb2JFbWFpbHM6IEFycmF5PFZhc0pvYkVtYWlsRHRvPixcbiAgICBwdWJsaWMgbm90ZXM6IEFycmF5PFZhc05vdGVEdG8+LFxuICAgIHB1YmxpYyByZXBvcnRzOiBBcnJheTxWYXNSZXBvcnREdG8+LFxuICAgIHB1YmxpYyB0YXNrczogQXJyYXk8VmFzVGFza0R0bz4sXG4gICAgcHVibGljIGluc3RydWN0aW9uOiBWYXNJbnN0cnVjdGlvbkR0byB8IG51bGxcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBpZCxcbiAgICAgIGNyZWF0ZWQsXG4gICAgICBzZXJ2ZXJDcmVhdGVkLFxuICAgICAgY3JlYXRlZEJ5LFxuICAgICAgbW9kaWZpZWQsXG4gICAgICBzZXJ2ZXJNb2RpZmllZCxcbiAgICAgIG1vZGlmaWVkQnksXG4gICAgICBjcmVhdGVkQnlOYW1lLFxuICAgICAgbW9kaWZpZWRCeU5hbWUsXG4gICAgICBhY2NvdW50LFxuICAgICAgYWNjZXNzR3JvdXBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhpcyB3aXRoIHRoZSBkeW5hbWljIGludGVyZmFjZVxuICAgKiBAcmV0dXJuIHtWYXNKb2JNb2RlbER5bmFtaWNJbnRlcmZhY2V9XG4gICAqL1xuICBnZXQgJHRoaXMoKTogVmFzSm9iTW9kZWxEeW5hbWljSW50ZXJmYWNlIHtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgSm9iIGR5bmFtaWMgcHJvcGVydGllcyBpLmUuIHRob3NlIHRoYXQgYXJlIGFkZGVkIGJ5IHRoZVxuICAgKiBkeW5hbWljIGZvcm1zXG4gICAqL1xuICBnZXQgZHluYW1pY1Byb3BlcnRpZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgbmF0aXZlUHJvcHMgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXM7XG4gICAgcmV0dXJuIE9iamVjdFxuICAgICAgLmdldE93blByb3BlcnR5TmFtZXModGhpcylcbiAgICAgIC5maWx0ZXIocHJvcCA9PiAhbmF0aXZlUHJvcHMuaW5jbHVkZXMocHJvcCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBvZiB0aGUgSm9iIHR5cGVcbiAgICovXG4gIGdldCBzdGF0aWNQcm9wZXJ0aWVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhWYXNKb2JNb2RlbC5lbXB0eSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtWYXNKb2JNb2RlbH1cbiAgICovXG4gIHN0YXRpYyBlbXB0eSgpOiBWYXNKb2JNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBWYXNKb2JNb2RlbChcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICBtb21lbnQoKS51dGNPZmZzZXQoKSxcbiAgICAgIDAsXG4gICAgICAnJyxcbiAgICAgIDAsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgZ2V0RW1wdHlHZW9Mb2NhdGlvbigpLFxuICAgICAgW10sXG4gICAgICBbXSxcbiAgICAgIFtdLFxuICAgICAgW10sXG4gICAgICBbXSxcbiAgICAgIFtdLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbUR0byhkdG86IFBhcnRpYWw8VmFzSm9iRHRvPik6IFZhc0pvYk1vZGVsIHtcbiAgICBjb25zdCBtb2RlbCA9IG5ldyBWYXNKb2JNb2RlbChcbiAgICAgIGR0by5pZCB8fCAnJyxcbiAgICAgIGR0by5jcmVhdGVkIHx8ICcnLFxuICAgICAgZHRvLnNlcnZlckNyZWF0ZWQgfHwgJycsXG4gICAgICBkdG8uY3JlYXRlZEJ5IHx8ICcnLFxuICAgICAgZHRvLm1vZGlmaWVkIHx8ICcnLFxuICAgICAgZHRvLnNlcnZlck1vZGlmaWVkIHx8ICcnLFxuICAgICAgZHRvLm1vZGlmaWVkQnkgfHwgJycsXG4gICAgICBkdG8uY3JlYXRlZEJ5TmFtZSB8fCAnJyxcbiAgICAgIGR0by5tb2RpZmllZEJ5TmFtZSB8fCAnJyxcbiAgICAgIGR0by5hY2NvdW50IHx8ICcnLFxuICAgICAgZHRvLmFjY2Vzc0dyb3VwIHx8ICcnLFxuICAgICAgZHRvLnJlZmVyZW5jZSB8fCAnJyxcbiAgICAgIGR0by5qb2JEYXRlIHx8ICcnLFxuICAgICAgZHRvLmpvYlN0YXR1cyB8fCAnJyxcbiAgICAgIGR0by5qb2JUeXBlIHx8ICcnLFxuICAgICAgZHRvLmFzc2lnbmVlSWQgfHwgJycsXG4gICAgICBkdG8uZm9ybUlkIHx8IChkdG8gYXMgYW55KS5sYXN0Rm9ybSB8fCAnJyxcbiAgICAgIGR0by50aW1lWm9uZU9mZnNldCB8fCBtb21lbnQoKS51dGNPZmZzZXQoKSxcbiAgICAgIGR0by5wZW5kaW5nRmllbGRzIHx8IDAsXG4gICAgICBkdG8uY2hpbGRNb2RpZmllZCB8fCAnJyxcbiAgICAgIGR0by52ZXJzaW9uIHx8IDAsXG4gICAgICBkdG8uY3JlYXRlZEJ5RGlzcGxheU5hbWUgfHwgJycsXG4gICAgICBkdG8ubW9kaWZpZWRCeURpc3BsYXlOYW1lIHx8ICcnLFxuICAgICAgZHRvLmdlb0xvY2F0aW9uIHx8IGdldEVtcHR5R2VvTG9jYXRpb24oKSxcbiAgICAgIGR0by5maWxlcyB8fCBbXSxcbiAgICAgIGR0by5maWVsZHMgfHwgW10sXG4gICAgICBkdG8uam9iRW1haWxzIHx8IFtdLFxuICAgICAgZHRvLm5vdGVzIHx8IFtdLFxuICAgICAgZHRvLnJlcG9ydHMgfHwgW10sXG4gICAgICBkdG8udGFza3MgfHwgW10sXG4gICAgICBkdG8uaW5zdHJ1Y3Rpb24gfHwgbnVsbFxuICAgICk7XG4gICAgY29uc3QgZW1wdHlLZXlzID0gbW9kZWwuc3RhdGljUHJvcGVydGllcztcbiAgICBPYmplY3RcbiAgICAgIC5rZXlzKGR0bylcbiAgICAgIC5maWx0ZXIoa2V5ID0+IGVtcHR5S2V5cy5pbmRleE9mKGtleSkgPT09IC0xKVxuICAgICAgLmZvckVhY2goKGtleTogc3RyaW5nKSA9PlxuICAgICAgICBtb2RlbC4kdGhpc1trZXldID0gKGR0byBhcyBWYXNKb2JNb2RlbER5bmFtaWNJbnRlcmZhY2UpW2tleV1cbiAgICAgICk7XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgaW5zdGFudGlhdGUgYSBuZXcgSm9iTW9kZWwuIFRoZSBkaWZmZXJlbmNlIHdpdGggdGhpc1xuICAgKiBtZXRob2Qgb2YgaW5zdGFudGlhdGlvbiBpcyB0aGF0IHdlIGFyZSBjb21pbmcgZnJvbSBhIHJlbGF0aW9uIGZyYW1lIGkuZS5cbiAgICogdGhlIGpvYiBoYXMgYSBsaXN0IG9mIHtAbGluayBWYXNGaWVsZER0b30gaW5zdGVhZCBvZiBhIEpvYiBkb2N1bWVudC5cbiAgICpcbiAgICovXG4gIHN0YXRpYyBmcm9tUmVsYXRpb25hbChcbiAgICBkdG86IFBhcnRpYWw8VmFzSm9iRHRvPixcbiAgICBmb3JtOiBWYXNGb3JtRHRvXG4gICk6IFZhc0pvYk1vZGVsIHtcbiAgICBjb25zdCBtb2RlbCA9IG5ldyBWYXNKb2JNb2RlbChcbiAgICAgIGR0by5pZCB8fCAnJyxcbiAgICAgIGR0by5jcmVhdGVkIHx8ICcnLFxuICAgICAgZHRvLnNlcnZlckNyZWF0ZWQgfHwgJycsXG4gICAgICBkdG8uY3JlYXRlZEJ5IHx8ICcnLFxuICAgICAgZHRvLm1vZGlmaWVkIHx8ICcnLFxuICAgICAgZHRvLnNlcnZlck1vZGlmaWVkIHx8ICcnLFxuICAgICAgZHRvLm1vZGlmaWVkQnkgfHwgJycsXG4gICAgICBkdG8uY3JlYXRlZEJ5TmFtZSB8fCAnJyxcbiAgICAgIGR0by5tb2RpZmllZEJ5TmFtZSB8fCAnJyxcbiAgICAgIGR0by5hY2NvdW50IHx8ICcnLFxuICAgICAgZHRvLmFjY2Vzc0dyb3VwIHx8ICcnLFxuICAgICAgZHRvLnJlZmVyZW5jZSB8fCAnJyxcbiAgICAgIGR0by5qb2JEYXRlIHx8ICcnLFxuICAgICAgZHRvLmpvYlN0YXR1cyB8fCAnJyxcbiAgICAgIGR0by5qb2JUeXBlIHx8ICcnLFxuICAgICAgZHRvLmFzc2lnbmVlSWQgfHwgJycsXG4gICAgICBkdG8uZm9ybUlkIHx8ICcnLFxuICAgICAgZHRvLnRpbWVab25lT2Zmc2V0IHx8IG1vbWVudCgpLnV0Y09mZnNldCgpLFxuICAgICAgZHRvLnBlbmRpbmdGaWVsZHMgfHwgMCxcbiAgICAgIGR0by5jaGlsZE1vZGlmaWVkIHx8ICcnLFxuICAgICAgZHRvLnZlcnNpb24gfHwgMCxcbiAgICAgIGR0by5jcmVhdGVkQnlEaXNwbGF5TmFtZSB8fCAnJyxcbiAgICAgIGR0by5tb2RpZmllZEJ5RGlzcGxheU5hbWUgfHwgJycsXG4gICAgICBkdG8uZ2VvTG9jYXRpb24gfHwgZ2V0RW1wdHlHZW9Mb2NhdGlvbigpLFxuICAgICAgZHRvLmZpbGVzIHx8IFtdLFxuICAgICAgZHRvLmZpZWxkcyB8fCBbXSxcbiAgICAgIGR0by5qb2JFbWFpbHMgfHwgW10sXG4gICAgICBkdG8ubm90ZXMgfHwgW10sXG4gICAgICBkdG8ucmVwb3J0cyB8fCBbXSxcbiAgICAgIGR0by50YXNrcyB8fCBbXSxcbiAgICAgIGR0by5pbnN0cnVjdGlvbiB8fCBudWxsXG4gICAgKTtcblxuICAgIGZvcm0uZ3JvdXBzXG4gICAgICAuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgIGdyb3VwLmNvbnRyb2xzXG4gICAgICAgICAgLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGR0by5maWVsZHM/LmZpbmQoZiA9PiBmLmNvbnRyb2wgPT09IGNvbnRyb2wuaWQpO1xuICAgICAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtb2RlbC5nZXRHcm91cChncm91cC5uYW1lKVtjb250cm9sLm5hbWVdID0gZmllbGQudmFsdWU7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtWYXNGb3JtTW9kZWx9IGZvcm1Nb2RlbFxuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPn1cbiAgICovXG4gIGdldEZpZWxkcyhmb3JtTW9kZWw6IFZhc0Zvcm1Nb2RlbCk6IFJlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+IHtcbiAgICBjb25zdCBmaWVsZHM6IHsgW2tleTogc3RyaW5nXTogVmFzRmllbGREdG9WYWx1ZSB9ID0ge307XG4gICAgZm9ybU1vZGVsLmdyb3Vwc1xuICAgICAgLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICBncm91cC5jb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgICAgIChmaWVsZHMpW2NvbnRyb2wucmVwb3J0VGVtcGxhdGVOYW1lXSA9XG4gICAgICAgICAgICB0aGlzLmdldFZhbHVlQnlQYXRoKFtncm91cC5uYW1lLCBjb250cm9sLm5hbWVdKSB8fCBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBmaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCByZXR1cm4gYW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIHRoZSBuYW1lcyBvZiBhbGwgZmllbGRzIGluIHRoZSBqb2IuXG4gICAqIFRoaXMgbWV0aG9kIGlzIHNpbWlsYXIgdG8gYGdldEZpZWxkc2AgZXhjZXB0IHRoYXQgdGhpcyBtZXRob2Qgd2lsbCBvbmx5XG4gICAqIHJldHVybiB2YWx1ZXMgd2hlcmUgYSB2YWx1ZSB3YXMgc2V0LCBhcyBvcHBvc2VkIHRvIGBnZXRGaWVsZHNgIHdoaWNoIHdpbGxcbiAgICogcmV0dXJuIGEgdmFsdWUgZm9yIGV2ZXJ5IGNvbnRyb2wgZXZlbiBpZiBubyB2YWx1ZSB3YXMgc2V0LCBiZWNhdXNlIGl0IHVzZXNcbiAgICogdGhlIGZvcm0gdG8gZHJpdmUgdGhlIGxvZ2ljLiBOb3RlIGFsc28gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdmFsdWVzIGZvclxuICAgKiBhbnkgRmllbGRzIGluIHRoZSBmaWVsZHMgYXJyYXkuXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+fVxuICAgKi9cbiAgZ2V0RmllbGRzMigpOiBSZWNvcmQ8c3RyaW5nLCBWYXNGaWVsZER0b1ZhbHVlPiB7XG4gICAgbGV0IGZpZWxkczogeyBba2V5OiBzdHJpbmddOiBWYXNGaWVsZER0b1ZhbHVlIH0gPSB7fTtcbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzXG4gICAgICAuZm9yRWFjaCgoZ3JvdXBOYW1lKSA9PiB7XG4gICAgICAgIE9iamVjdFxuICAgICAgICAgIC5rZXlzKHRoaXMuJHRoaXNbZ3JvdXBOYW1lXSlcbiAgICAgICAgICAuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XG4gICAgICAgICAgICBmaWVsZHNbY29udHJvbE5hbWVdID1cbiAgICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZUJ5UGF0aChbZ3JvdXBOYW1lLCBjb250cm9sTmFtZV0pIHx8IG51bGw7XG4gICAgICAgICAgfSk7XG4gICAgICB9LCB7fSk7XG4gICAgdGhpcy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiBmaWVsZHNbZmllbGQuY29udHJvbE5hbWVdID0gZmllbGQudmFsdWUpO1xuICAgIHJldHVybiBmaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgZGVzY3JpYmluZyBob3cgbWFueSBhdHRhY2htZW50cyB3ZXJlIGFkZGVkIHRvIHRoaXMgam9iXG4gICAqIChjYW1lcmEgY29udHJvbHMgYW5kIGZpbGVzKSwgYW5kIGhvdyBtYW55IGhhdmUgbm90IGJlZW4gdXBsb2FkZWQgeWV0LlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybU1vZGVsIGluc3RhbmNlIG9mIHtAbGluayBWYXNGb3JtTW9kZWx9IHRoYXQgd2FzIHVzZWQgd2hlbiB0aGVcbiAgICogam9iIHdhcyBjcmVhdGVkXG4gICAqL1xuICBnZXRGaWxlc1VwbG9hZFN0YXR1cyhcbiAgICBmb3JtTW9kZWw6IFZhc0Zvcm1Nb2RlbFxuICApOiB7IHBlbmRpbmc6IG51bWJlcjsgdG90YWw6IG51bWJlciB9IHtcblxuICAgIGNvbnN0IHBhdGhzV2l0aFZhbHVlOiBBcnJheTxBcnJheTxzdHJpbmc+PiA9IGZvcm1Nb2RlbFxuICAgICAgLmdldENhbWVyYUNvbnRyb2xQYXRocygpXG4gICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZTogVmFzRmlsZUR0byB8IFZhc0NhbWVyYUNvbnRyb2xWYWx1ZU1vZGVsID1cbiAgICAgICAgICB0aGlzLmdldFZhbHVlQnlQYXRoKHBhdGgpIGFzIGFueTtcbiAgICAgICAgaWYgKHZhbHVlICYmICEhdmFsdWUuaWQpIHtcbiAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKHBhdGggPT4gcGF0aCAhPT0gbnVsbCA/IHBhdGggOiBudWxsKVxuICAgICAgLmZpbHRlcihpc0FycmF5U3RyaW5nKTtcblxuICAgIGxldCB0b3RhbCA9IHBhdGhzV2l0aFZhbHVlLmxlbmd0aDtcblxuICAgIHRvdGFsICs9IHRoaXMuZmlsZXMubGVuZ3RoO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY2FtZXJhIGltYWdlcyBzdGlsbCB0byB1cGxvYWRcbiAgICBsZXQgcGVuZGluZyA9IHBhdGhzV2l0aFZhbHVlXG4gICAgICAubWFwKHBhdGggPT4gdGhpcy5nZXRWYWx1ZUJ5UGF0aChwYXRoKSBhcyBhbnkpXG4gICAgICAubWFwKCh2YWx1ZTogVmFzRmlsZUR0byB8IFZhc0NhbWVyYUNvbnRyb2xWYWx1ZU1vZGVsKSA9PiB7XG4gICAgICAgIGlmIChpc0ZpbGVEdG8odmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmlkICYmIHZhbHVlLnN0YXR1cyAhPT0gJ0NPTVBMRVRFJztcbiAgICAgICAgfSBlbHNlIGlmIChpc0NhbWVyYUNvbnRyb2xWYWx1ZVYxKHZhbHVlKSkge1xuICAgICAgICAgIC8vIGlmIHVybCBpcyBub3Qgc2V0LCBpdCBoYXNuJ3QgYmVlbiB1cGxvYWRlZFxuICAgICAgICAgIHJldHVybiB2YWx1ZS5pZCAmJiAhdmFsdWUudXJsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGhhc1VwbG9hZGVkID0+IGhhc1VwbG9hZGVkKVxuICAgICAgLmxlbmd0aDtcblxuICAgIC8vIGFkZCB0b3RhbCBmcm9tIGZpbGVzIHRoYXQgYXJlIHBlbmRpbmdcbiAgICBwZW5kaW5nICs9IHRoaXMuZmlsZXNcbiAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUuc3RhdHVzICE9PSAnQ09NUExFVEUnKVxuICAgICAgLmxlbmd0aDtcblxuICAgIHJldHVybiB7XG4gICAgICBwZW5kaW5nLFxuICAgICAgdG90YWxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBkeW5hbWljIHByb3BlcnR5IGZyb20gdGhlIEpvYk1vZGVsIHRoYXRcbiAgICogcmVwcmVzZW50IGEgZ3JvdXAgKGZyb20gYSBmb3JtKS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGdyb3VwXG4gICAqIEBwYXJhbSBpbml0IGlmIHRydWUgKGRlZmF1bHQpIGFuZCBncm91cCBpcyBub3QgZm91bmQsIGluaXRpYWxpc2UgYW4gZW1wdHlcbiAgICogZ3JvdXAsIG90aGVyd2lzZSB0aHJvdyBhbiBlcnJvclxuICAgKi9cbiAgZ2V0R3JvdXAobmFtZTogc3RyaW5nLCBpbml0ID0gdHJ1ZSk6IFJlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+IHtcbiAgICBsZXQgcHJvcDtcbiAgICBpZiAodGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICB0aHJvdyBFcnJvcihgaW52YWxpZCBncm91cCBuYW1lICR7bmFtZX0sIG5vdCBhIGR5bmFtaWMgcHJvcGVydHlgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuJHRoaXNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGluaXQpIHtcbiAgICAgICAgcHJvcCA9IHRoaXMuJHRoaXNbbmFtZV0gPSB7fTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKGBpbnZhbGlkIGdyb3VwIG5hbWUgJHtuYW1lfSwgbm90IGZvdW5kYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3AgPSB0aGlzLiR0aGlzW25hbWVdO1xuICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBFcnJvcihgaW52YWxpZCBncm91cCBuYW1lICR7bmFtZX0sIG5vdCBhbiBvYmplY3RgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3A7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHBhdGggcGF0aCBzZWdtZW50c1xuICAgKi9cbiAgZ2V0VmFsdWVCeVBhdGg8VCBleHRlbmRzIFZhc0ZpZWxkRHRvVmFsdWU+KFxuICAgIHBhdGg6IHN0cmluZ1tdID0gW11cbiAgKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGdldFZhbHVlQnlQYXRoKHBhdGgsIHRoaXMuJHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIG9yZGVyIHRvIHVuZGVyc3RhbmQgd2h5IHdlIG5lZWQgdGhpcyBtZXRob2QgaXQgaXMgaW1wb3J0YW50IHRvXG4gICAqIHVuZGVyc3RhbmQgdGhhdCB3aXRoaW4gdGhlIHN5c3RlbSwgSm9icyBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gb25lIG9mIHR3b1xuICAgKiB3YXlzLCBkb2N1bWVudCBhbmQgcmVsYXRpb25hbC5cbiAgICpcbiAgICogVGhlIGltcG9ydGFudCBkaXN0aW5jdGlvbiBpcyBob3cgdmFsdWVzIHN1Ym1pdHRlZCBieSBhIGZvcm0gYXJlIHN0b3JlZC5cbiAgICpcbiAgICogSm9icyBzdG9yZWQgYXMgZG9jdW1lbnRzIChKU09OIG9iamVjdHMpIHdpbGwgc3RvcmUgdXNlciB2YWx1ZXMsIGFzIGR5bmFtaWNcbiAgICogcHJvcGVydGllcyBvZiB0aGUgZG9jdW1lbnQuXG4gICAqXG4gICAqIFdoZXJlYXMsIEpvYnMgc3RvcmVkIGFzIHJlbGF0aW9uYWwsIHdpbGwgc3RvcmUgdXNlciB2YWx1ZXMgaW4gYW4gYXJyYXkgb2ZcbiAgICoge0BsaW5rIFZhc0ZpZWxkRHRvfSBvYmplY3RzLlxuICAgKlxuICAgKiBEZXBlbmRpbmcgb24gd2hlcmUgd2UgYXJlIGluIHRoZSBzeXN0ZW0sIGVpdGhlciBvbmUgb2YgdGhlc2UgYXBwcm9hY2hlcyBjYW5cbiAgICogYmUgbW9yZSB1c2VmdWwgdGhhbiB0aGUgb3RoZXIuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kLCBhc3N1bWVzIHRoYXQgdGhlIEpvYk1vZGVsIGhhcyBiZWVuIGluc3RhbnRpYXRlZCBmcm9tIGFcbiAgICogZG9jdW1lbnQgcmVwcmVzZW50YXRpb24sIGFuZCBzZXJ2ZXMgdG8gaHlkcmF0ZSB0aGUgZmllbGRzIGFycmF5LiBJbiBvcmRlclxuICAgKiB0byBhY2hpZXZlIHRoaXMsIGtub3dsZWRnZSBvZiB0aGUge0BsaW5rIFZhc0Zvcm1EdG99IHRoYXQgY3JlYXRlZCB0aGUgam9iXG4gICAqIGlzIHJlcXVpcmVkLlxuICAgKlxuICAgKlxuICAgKiBKb2IgaW4gZG9jdW1lbnQgcmVwcmVzZW50YXRpb25cbiAgICoge1xuICAgKiAgIGlkOiA8Z3VpZD4sXG4gICAqICAgcmVmZXJlbmNlOiBcInNvbWV0aGluZ1wiXG4gICAqICAgPG90aGVyIHN0YXRpYyBqb2IgcHJvcGVydGllcz4uLi5cbiAgICogICBmb286IHtcbiAgICogICAgIGJhcjogXCJ2YWx1ZVwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEpvYiBpbiByZWxhdGlvbmFsIHJlcHJlc2VudGF0aW9uXG4gICAqIHtcbiAgICogICBpZDogPGd1aWQ+LFxuICAgKiAgIHJlZmVyZW5jZTogXCJzb21ldGhpbmdcIlxuICAgKiAgIDxvdGhlciBzdGF0aWMgam9iIHByb3BlcnRpZXM+Li4uXG4gICAqICAgPHdpbGwgbm90IGhhdmUgZHluYW1pYyBwcm9wZXJ0aWVzPi4uLlxuICAgKiAgIGZpZWxkczogW1xuICAgKiAgICAge1xuICAgKiAgICAgICBpZDogPGd1aWQ+LFxuICAgKiAgICAgICA8b3RoZXIgZmllbGQgcHJvcGVydGllcz4sXG4gICAqICAgICAgIHZhbHVlOiBcInZhbHVlXCJcbiAgICogICAgIH1cbiAgICogICBdXG4gICAqIH1cbiAgICpcbiAgICpcbiAgICogQHBhcmFtIGZvcm1Nb2RlbCB0aGUgVmFzRm9ybU1vZGVsIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoZSBqb2JcbiAgICogQHBhcmFtIGNvbnRyb2xGaWVsZElkTWFwIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGlkIGVhY2ggZmllbGQuXG4gICAqIEVpdGhlciBvbmUgd2lsbCBiZSBmb3VuZCBpbiB0aGUgbWFwLCBvciBhIG5ldyBvbmUgaXMgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0gY29udHJvbE5hbWVzIGlmIGEgdmFsdWUgaXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgdXNlZFxuICAgKiB0byBmaWx0ZXIgdGhlIGZpZWxkcyB0aGF0IGFyZSByZXR1cm5lZC5cbiAgICogQHJldHVybiB7QXJyYXk8VmFzRmllbGREdG8+fVxuICAgKi9cbiAgaHlkcmF0ZUZpZWxkcyhcbiAgICBmb3JtTW9kZWw6IFZhc0Zvcm1Nb2RlbCxcbiAgICBjb250cm9sRmllbGRJZE1hcDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCksXG4gICAgY29udHJvbE5hbWVzPzogQXJyYXk8c3RyaW5nPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZHM6IEFycmF5PFZhc0ZpZWxkRHRvPiA9IFtdO1xuICAgIGZvcm1Nb2RlbC5ncm91cHNcbiAgICAgIC5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgZ3JvdXAuY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcblxuICAgICAgICAgIGlmICghY29udHJvbC5uYW1lLnN0YXJ0c1dpdGgoJ2ZpZWxkcy4nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb250cm9sTmFtZXMgJiYgIWNvbnRyb2xOYW1lcy5pbmNsdWRlcyhjb250cm9sLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmllbGRzLnB1c2goVmFzRmllbGRNb2RlbC5mcm9tRHRvKHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjb250cm9sSWQgZXhpc3RzIGluIHRoZSBtYXAsIHVzZSB0aGUgYXNzb2NpYXRlZCBmaWVsZElkLFxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGdlbmVyYXRlIGEgbmV3IGlkIGZvciB0aGUgZmllbGQuXG4gICAgICAgICAgICBpZDogY29udHJvbEZpZWxkSWRNYXAuZ2V0KGNvbnRyb2wuaWQpIHx8IFVVSUQuVVVJRCgpLFxuICAgICAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgICAgICAgam9iOiB0aGlzLmlkLFxuICAgICAgICAgICAgY3JlYXRlZEJ5OiB0aGlzLmNyZWF0ZWRCeSxcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcbiAgICAgICAgICAgIG1vZGlmaWVkQnk6IHRoaXMubW9kaWZpZWRCeSxcbiAgICAgICAgICAgIG1vZGlmaWVkOiB0aGlzLm1vZGlmaWVkLFxuICAgICAgICAgICAgY29udHJvbDogY29udHJvbC5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlQnlQYXRoKFxuICAgICAgICAgICAgICBbZ3JvdXAubmFtZSwgY29udHJvbC5uYW1lXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHZlcnkgbm9uIHNvcGhpc3RpY2F0ZWQgd2F5IHRvIHNldCB2YWx1ZXMgaW4gdGhlIGpvYiB2aWEgcGF0aHNcbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqIHNldFZhbHVlQnlQYXRoKCd2YWx1ZScsIFsnZm9vJywgJ2JhciddKTtcbiAgICpcbiAgICogd2lsbCBtYWtlIHJlc3VsdHMgaW4gam9iXG4gICAqIHtcbiAgICogICBmb286IHtcbiAgICogICAgIGJhcjogJ3ZhbHVlJ1xuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHNldFxuICAgKiBAcGFyYW0gcGF0aCBwYXRoIHNlZ21lbnRzXG4gICAqL1xuICBzZXRWYWx1ZUJ5UGF0aCh2YWx1ZTogVmFzRmllbGREdG9WYWx1ZSwgcGF0aDogc3RyaW5nW10gPSBbXSk6IHZvaWQge1xuICAgIHN3aXRjaCAocGF0aC5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDoge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgKHRoaXMgYXMgYW55KVtwYXRoWzBdXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgKHRoaXMuJHRoaXNbcGF0aFswXV0gYXMgUmVjb3JkPHN0cmluZywgVmFzRmllbGREdG9WYWx1ZT4pW3BhdGhbMV1dID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgMzoge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAoKHRoaXMuJHRoaXNbcGF0aFswXV0gYXMgUmVjb3JkPHN0cmluZywgVmFzRmllbGREdG9WYWx1ZT4pW3BhdGhbMV1dIGFzIFJlY29yZDxzdHJpbmcsIFZhc0ZpZWxkRHRvVmFsdWU+KVtwYXRoWzJdXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IEVycm9yKCdwYXRoIGhhcyB0b28gbWFueSBzZWdtZW50cycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc3RhdGljT25seSBpZiB0cnVlLCB3aWxsIG9ubHkgb3V0cHV0IHZhbHVlcyBmb3IgdGhlIHN0YXRpY1xuICAgKiBwcm9wZXJ0aWVzIGluIHRoZSBkdG9cbiAgICovXG4gIHB1YmxpYyB0b0R0byhzdGF0aWNPbmx5ID0gZmFsc2UpOiBWYXNKb2JEdG8ge1xuXG4gICAgaWYgKHN0YXRpY09ubHkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXG4gICAgICAgIGNyZWF0ZWRCeTogdGhpcy5jcmVhdGVkQnksXG4gICAgICAgIG1vZGlmaWVkOiB0aGlzLm1vZGlmaWVkLFxuICAgICAgICBtb2RpZmllZEJ5OiB0aGlzLm1vZGlmaWVkQnksXG4gICAgICAgIHNlcnZlckNyZWF0ZWQ6IHRoaXMuc2VydmVyQ3JlYXRlZCxcbiAgICAgICAgc2VydmVyTW9kaWZpZWQ6IHRoaXMuc2VydmVyTW9kaWZpZWQsXG4gICAgICAgIGNyZWF0ZWRCeU5hbWU6IHRoaXMuY3JlYXRlZEJ5TmFtZSxcbiAgICAgICAgbW9kaWZpZWRCeU5hbWU6IHRoaXMubW9kaWZpZWRCeU5hbWUsXG4gICAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgICAgYWNjZXNzR3JvdXA6IHRoaXMuYWNjZXNzR3JvdXAsXG4gICAgICAgIHJlZmVyZW5jZTogdGhpcy5yZWZlcmVuY2UsXG4gICAgICAgIGpvYkRhdGU6IHRoaXMuam9iRGF0ZSxcbiAgICAgICAgam9iU3RhdHVzOiB0aGlzLmpvYlN0YXR1cyxcbiAgICAgICAgam9iVHlwZTogdGhpcy5qb2JUeXBlLFxuICAgICAgICBhc3NpZ25lZUlkOiB0aGlzLmFzc2lnbmVlSWQsXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHRpbWVab25lT2Zmc2V0OiB0aGlzLnRpbWVab25lT2Zmc2V0LFxuICAgICAgICBwZW5kaW5nRmllbGRzOiB0aGlzLnBlbmRpbmdGaWVsZHMsXG4gICAgICAgIGNoaWxkTW9kaWZpZWQ6IHRoaXMuY2hpbGRNb2RpZmllZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgICBjcmVhdGVkQnlEaXNwbGF5TmFtZTogdGhpcy5jcmVhdGVkQnlEaXNwbGF5TmFtZSxcbiAgICAgICAgbW9kaWZpZWRCeURpc3BsYXlOYW1lOiB0aGlzLm1vZGlmaWVkQnlEaXNwbGF5TmFtZSxcbiAgICAgICAgZ2VvTG9jYXRpb246IHRoaXMuZ2VvTG9jYXRpb24sXG4gICAgICAgIGZpbGVzOiB0aGlzLmZpbGVzLFxuICAgICAgICBmaWVsZHM6IHRoaXMuZmllbGRzLFxuICAgICAgICBqb2JFbWFpbHM6IHRoaXMuam9iRW1haWxzLFxuICAgICAgICBub3RlczogdGhpcy5ub3RlcyxcbiAgICAgICAgcmVwb3J0czogdGhpcy5yZXBvcnRzLFxuICAgICAgICB0YXNrczogdGhpcy50YXNrcyxcbiAgICAgICAgaW5zdHJ1Y3Rpb246IHRoaXMuaW5zdHJ1Y3Rpb25cbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZHRvID0ge30gYXMgVmFzSm9iTW9kZWxEeW5hbWljSW50ZXJmYWNlO1xuICAgIFsuLi50aGlzLnN0YXRpY1Byb3BlcnRpZXMsIC4uLnRoaXMuZHluYW1pY1Byb3BlcnRpZXNdXG4gICAgICAuZm9yRWFjaChwcm9wID0+IGR0b1twcm9wXSA9IHRoaXMuJHRoaXNbcHJvcF0pO1xuXG4gICAgcmV0dXJuIGR0byBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBwYXJzZSBhIHN5bnRheCB0aGF0IGFsbG93cyB1cyB0byBidWlsZCBzdHJpbmdzIGZyb20gdGhlXG4gICAqIHZhbHVlcyBvZiBmcm9tIHRoZSBqb2IgbW9kZWwuIEZvciBleGFtcGxlIGlmIHRoZSBqb2IgbW9kZWwgd2FzOlxuICAgKlxuICAgKiB7XG4gICAqICAgZm9vOiAnYmFyJ1xuICAgKiB9XG4gICAqXG4gICAqIGFuZCB3ZSBwYXNzIFwiaSBhbSBmb28ge2Zvb31cIiwgdGhlIHJlc3VsdCB3b3VsZCBiZTpcbiAgICpcbiAgICogXCJpIGFtIGZvbyBiYXJcIlxuICAgKlxuICAgKiB3ZSBjYW4gYWxzbyB1c2UgbW9tZW50IHRvIHBhcnNlIGRhdGVzLCBmb3IgZXhhbXBsZSBpZiB0aGUgam9iIG1vZGVsIHdhczpcbiAgICpcbiAgICoge1xuICAgKiAgIGNyZWF0ZWQ6IFwiMjAyMi0wMS0wMVQwMDowMDowMCswMDAwXCJcbiAgICogfVxuICAgKlxuICAgKiBhbmQgd2UgcGFzcyBcIntjcmVhdGVkfGRhdGU6WVktTU0tRER9XCIsIHRoZSByZXN1bHQgd291bGQgYmU6XG4gICAqXG4gICAqIFwiMjAyMi0wMS0wMVwiXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBhIHN0cmluZyB3aXRoIHRoZSBzeW50YXhcbiAgICogQHBhcmFtIHtQYXJzZVN5bnRheE9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybiB0aGUgcmVzdWx0cyBvZiBwYXJzaW5nIHRoZSBzeW50YXggb24gdGhpcyBqb2JcbiAgICovXG4gIHBhcnNlU3ludGF4KFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUGFyc2VTeW50YXhPcHRpb25zID0ge1xuICAgICAgdGltZVpvbmVPZmZzZXQ6IDBcbiAgICB9XG4gICk6IHN0cmluZyB7XG5cbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5nZXRGaWVsZHMyKCk7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyh7W159XSp9KS9nLCAobWF0Y2g6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc3ludGF4ID0gdG9rZW4uc3Vic3RyaW5nKDEsIHRva2VuLmxlbmd0aCAtIDEpO1xuXG4gICAgICBsZXQgW2tleSwgZmlsdGVyXSA9IHN5bnRheC5zcGxpdCgnfCcpO1xuICAgICAga2V5ID0gKGtleSB8fCAnJykudHJpbSgpO1xuICAgICAgZmlsdGVyID0gKGZpbHRlciB8fCAnJykudHJpbSgpO1xuXG4gICAgICBsZXQgZmlsdGVyTmFtZSwgZmlsdGVyQXJnOiBzdHJpbmcgPSAnJztcbiAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRJbmRleCA9IGZpbHRlci5pbmRleE9mKCc6Jyk7XG4gICAgICAgIGlmIChzcGxpdEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXIuc3Vic3RyaW5nKDAsIHNwbGl0SW5kZXgpO1xuICAgICAgICAgIGZpbHRlckFyZyA9IGZpbHRlci5zdWJzdHJpbmcoc3BsaXRJbmRleCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXI7XG4gICAgICAgICAgZmlsdGVyQXJnID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZmlsdGVyTmFtZSA9IChmaWx0ZXJOYW1lIHx8ICcnKS50cmltKCk7XG4gICAgICAgIGZpbHRlckFyZyA9IChmaWx0ZXJBcmcgfHwgJycpLnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhdGggPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgIGNvbnN0IG9iamVjdEtleSA9IHBhdGguc2hpZnQoKSB8fCAnJztcbiAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgIGlmIChvYmplY3RLZXkgPT09ICdqb2InKSB7XG4gICAgICAgIHJlc3VsdCA9ICh0aGlzLmdldFZhbHVlQnlQYXRoKHBhdGgpIHx8ICcnKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChvYmplY3RLZXkgPT09ICdmaWVsZHMnKSB7XG4gICAgICAgIHJlc3VsdCA9IChnZXRWYWx1ZUJ5UGF0aChbJ2ZpZWxkcy4nICsgcGF0aC5zaGlmdCgpLCAuLi5wYXRoXSwgZmllbGRzKSB8fCAnJykudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0S2V5Lmxlbmd0aCkge1xuICAgICAgICBpZiAob3B0aW9ucy5vYmplY3RzKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMub2JqZWN0c1tvYmplY3RLZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXG4gICAgICAgICAgICAgIGBvYmplY3RLZXkgJHtvYmplY3RLZXl9IGlzIG5vdCBwcmVzZW50IGluIG9wdGlvbnMub2JqZWN0YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3VsdCA9ICcnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoZ2V0VmFsdWVCeVBhdGgocGF0aCwgb3B0aW9ucy5vYmplY3RzW29iamVjdEtleV0pIHx8ICcnKVxuICAgICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgICAgIGBvYmplY3RLZXkgJHtvYmplY3RLZXl9IHdhcyB1c2VkIGJ1dCBvcHRpb25zLm9iamVjdCBpcyBub3Qgc2V0YFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cblxuICAgICAgaWYgKGZpbHRlck5hbWUgJiYgcmVzdWx0KSB7XG4gICAgICAgIHN3aXRjaCAoZmlsdGVyTmFtZSkge1xuICAgICAgICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMudGltZVpvbmVPZmZzZXQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1vbWVudChyZXN1bHQpLmZvcm1hdChmaWx0ZXJBcmcgfHwgJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1vbWVudChyZXN1bHQpXG4gICAgICAgICAgICAgICAgLnV0Y09mZnNldChvcHRpb25zLnRpbWVab25lT2Zmc2V0KVxuICAgICAgICAgICAgICAgIC5mb3JtYXQoZmlsdGVyQXJnIHx8ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCd1bmtub3duIGZpbHRlciAlcycsIGZpbHRlck5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pLnRyaW0oKTtcbiAgfTtcblxuICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKi9cbiAgb3ZlcnJpZGUgdG9BcGlEdG8oKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci50b0FwaUR0bygpLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLnJlZmVyZW5jZSB8fCAnficsXG4gICAgICBqb2JEYXRlOiB0aGlzLmpvYkRhdGUgfHwgJ34nLFxuICAgICAgam9iVHlwZTogdGhpcy5qb2JUeXBlIHx8ICd+JyxcbiAgICAgIGFjY2Vzc0dyb3VwOiB0aGlzLmFjY2Vzc0dyb3VwIHx8ICd+JyxcbiAgICAgIGpvYlN0YXR1czogdGhpcy5qb2JTdGF0dXMgfHwgJ34nLFxuICAgICAgYXNzaWduZWVJZDogdGhpcy5hc3NpZ25lZUlkIHx8ICd+JyxcbiAgICAgIHRpbWVab25lT2Zmc2V0OiB0aGlzLnRpbWVab25lT2Zmc2V0IHx8IDAsXG4gICAgICBwZW5kaW5nRmllbGRzOiB0aGlzLnBlbmRpbmdGaWVsZHMgfHwgMCxcbiAgICAgIGxhc3RGb3JtOiB0aGlzLmZvcm1JZCB8fCAnfidcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB0b0FwaVBhdGNoRHRvKFxuICAgIGl0ZW06IFBhcnRpYWw8VmFzSm9iRHRvPlxuICApOiBQYXJ0aWFsPFZhc0pvYkR0bz4ge1xuICAgIHJldHVybiBvbmx5KFxuICAgICAgaXRlbSxcbiAgICAgIFtcbiAgICAgICAgJ2NyZWF0ZWQnLFxuICAgICAgICAnbW9kaWZpZWQnLFxuICAgICAgICAncmVmZXJlbmNlJyxcbiAgICAgICAgJ2pvYkRhdGUnLFxuICAgICAgICAnam9iVHlwZScsXG4gICAgICAgICdhY2Nlc3NHcm91cCcsXG4gICAgICAgICdqb2JTdGF0dXMnLFxuICAgICAgICAnYXNzaWduZWVJZCcsXG4gICAgICAgICd0aW1lWm9uZU9mZnNldCcsXG4gICAgICAgICdwZW5kaW5nRmllbGRzJyxcbiAgICAgICAgJ2xhc3RGb3JtJ1xuICAgICAgXVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFzLWxvb2t1cC10eXBlLmR0by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Zhcy1saWIvc3JjL2xpYi9lbnRpdHkvdmFzLWxvb2t1cC10eXBlLmR0by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFzQWNjb3VudE9iamVjdER0byB9IGZyb20gJy4vdmFzLWFjY291bnQtb2JqZWN0LmR0byc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFzTG9va3VwVHlwZUR0byBleHRlbmRzIFZhc0FjY291bnRPYmplY3REdG8ge1xuICB0aXRsZTogc3RyaW5nO1xuICBzZXF1ZW5jZTogbnVtYmVyO1xuICBjYXRlZ29yeUdyb3VwczogQXJyYXk8c3RyaW5nPjtcbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFzLWxvb2t1cC5kdG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YXMtbGliL3NyYy9saWIvZW50aXR5L3Zhcy1sb29rdXAuZHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYXNBY2NvdW50T2JqZWN0RHRvIH0gZnJvbSAnLi92YXMtYWNjb3VudC1vYmplY3QuZHRvJztcblxuZXhwb3J0IGludGVyZmFjZSBWYXNMb29rdXBEdG8gZXh0ZW5kcyBWYXNBY2NvdW50T2JqZWN0RHRvIHtcbiAgaWQ6IHN0cmluZztcbiAgY3JlYXRlZDogc3RyaW5nO1xuICBzZXJ2ZXJDcmVhdGVkOiBzdHJpbmc7XG4gIGNyZWF0ZWRCeTogc3RyaW5nO1xuICBzZXJ2ZXJNb2RpZmllZDogc3RyaW5nO1xuICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgYWNjZXNzR3JvdXA6IHN0cmluZztcbiAgbG9va3VwVHlwZTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHNlcXVlbmNlOiBudW1iZXI7XG59XG4iXX0=