@vendasta/social-posts 4.0.0 → 5.2.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 (141) hide show
  1. package/esm2020/lib/_generated/host.service.mjs +25 -0
  2. package/esm2020/lib/_internal/enums/index.mjs +9 -0
  3. package/esm2020/lib/_internal/enums/multilocation-post.enum.mjs +12 -0
  4. package/esm2020/lib/_internal/enums/social-posts.enum.mjs +39 -0
  5. package/esm2020/lib/_internal/hash-tags.api.service.mjs +49 -0
  6. package/esm2020/lib/_internal/index.mjs +17 -0
  7. package/esm2020/lib/_internal/interfaces/api.interface.mjs +2 -0
  8. package/esm2020/lib/_internal/interfaces/field-mask.interface.mjs +8 -0
  9. package/esm2020/lib/_internal/interfaces/hashtag.interface.mjs +8 -0
  10. package/esm2020/lib/_internal/interfaces/index.mjs +2 -0
  11. package/esm2020/lib/_internal/interfaces/multilocation-post.interface.mjs +8 -0
  12. package/esm2020/lib/_internal/interfaces/pixabay-image.interface.mjs +8 -0
  13. package/esm2020/lib/_internal/interfaces/post-templates.interface.mjs +8 -0
  14. package/esm2020/lib/_internal/interfaces/social-post-stats.interface.mjs +8 -0
  15. package/esm2020/lib/_internal/interfaces/social-posts.interface.mjs +8 -0
  16. package/esm2020/lib/_internal/interfaces/tenor-gif.interface.mjs +8 -0
  17. package/esm2020/lib/_internal/multilocation-post.api.service.mjs +64 -0
  18. package/esm2020/lib/_internal/objects/api.mjs +1354 -0
  19. package/esm2020/lib/_internal/objects/field-mask.mjs +27 -0
  20. package/esm2020/lib/_internal/objects/hashtag.mjs +39 -0
  21. package/esm2020/lib/_internal/objects/index.mjs +16 -0
  22. package/esm2020/lib/_internal/objects/multilocation-post.mjs +115 -0
  23. package/esm2020/lib/_internal/objects/pixabay-image.mjs +138 -0
  24. package/esm2020/lib/_internal/objects/post-templates.mjs +75 -0
  25. package/esm2020/lib/_internal/objects/social-post-stats.mjs +127 -0
  26. package/esm2020/lib/_internal/objects/social-posts.mjs +272 -0
  27. package/esm2020/lib/_internal/objects/tenor-gif.mjs +106 -0
  28. package/esm2020/lib/_internal/partner-social-posts.api.service.mjs +46 -0
  29. package/esm2020/lib/_internal/pixabay-images.api.service.mjs +41 -0
  30. package/esm2020/lib/_internal/post-templates.api.service.mjs +59 -0
  31. package/esm2020/lib/_internal/social-posts.api.service.mjs +70 -0
  32. package/esm2020/lib/_internal/tenor-gifs.api.service.mjs +46 -0
  33. package/esm2020/lib/hashtag.service.mjs +42 -0
  34. package/esm2020/lib/index.mjs +8 -0
  35. package/esm2020/lib/multilocation-posts.service.mjs +76 -0
  36. package/esm2020/lib/pixabay-image.service.mjs +23 -0
  37. package/esm2020/lib/post-templates.service.mjs +72 -0
  38. package/esm2020/lib/social-posts.service.mjs +43 -0
  39. package/esm2020/lib/tenor-gifs.service.mjs +34 -0
  40. package/esm2020/public_api.mjs +5 -0
  41. package/esm2020/vendasta-social-posts.mjs +5 -0
  42. package/fesm2015/vendasta-social-posts.mjs +2884 -0
  43. package/fesm2015/vendasta-social-posts.mjs.map +1 -0
  44. package/fesm2020/vendasta-social-posts.mjs +2883 -0
  45. package/fesm2020/vendasta-social-posts.mjs.map +1 -0
  46. package/lib/_generated/host.service.d.ts +5 -9
  47. package/lib/_internal/hash-tags.api.service.d.ts +18 -0
  48. package/lib/_internal/index.d.ts +3 -0
  49. package/lib/_internal/interfaces/api.interface.d.ts +51 -0
  50. package/lib/_internal/interfaces/hashtag.interface.d.ts +6 -0
  51. package/lib/_internal/interfaces/index.d.ts +4 -1
  52. package/lib/_internal/interfaces/pixabay-image.interface.d.ts +26 -0
  53. package/lib/_internal/interfaces/tenor-gif.interface.d.ts +20 -0
  54. package/lib/_internal/multilocation-post.api.service.d.ts +4 -0
  55. package/lib/_internal/objects/api.d.ts +81 -0
  56. package/lib/_internal/objects/hashtag.d.ts +11 -0
  57. package/lib/_internal/objects/index.d.ts +4 -1
  58. package/lib/_internal/objects/pixabay-image.d.ts +31 -0
  59. package/lib/_internal/objects/tenor-gif.d.ts +31 -0
  60. package/lib/_internal/partner-social-posts.api.service.d.ts +4 -0
  61. package/lib/_internal/pixabay-images.api.service.d.ts +16 -0
  62. package/lib/_internal/post-templates.api.service.d.ts +4 -0
  63. package/lib/_internal/social-posts.api.service.d.ts +4 -0
  64. package/lib/_internal/tenor-gifs.api.service.d.ts +17 -0
  65. package/lib/hashtag.service.d.ts +13 -0
  66. package/lib/index.d.ts +3 -0
  67. package/lib/multilocation-posts.service.d.ts +3 -0
  68. package/lib/pixabay-image.service.d.ts +11 -0
  69. package/lib/post-templates.service.d.ts +3 -0
  70. package/lib/social-posts.service.d.ts +3 -0
  71. package/lib/tenor-gifs.service.d.ts +12 -0
  72. package/package.json +24 -16
  73. package/src/README.md +1 -0
  74. package/vendasta-social-posts.d.ts +1 -4
  75. package/bundles/vendasta-social-posts.umd.js +0 -3709
  76. package/bundles/vendasta-social-posts.umd.js.map +0 -1
  77. package/bundles/vendasta-social-posts.umd.min.js +0 -2
  78. package/bundles/vendasta-social-posts.umd.min.js.map +0 -1
  79. package/esm2015/lib/_generated/host.service.js +0 -104
  80. package/esm2015/lib/_internal/enums/index.js +0 -13
  81. package/esm2015/lib/_internal/enums/multilocation-post.enum.js +0 -19
  82. package/esm2015/lib/_internal/enums/social-posts.enum.js +0 -67
  83. package/esm2015/lib/_internal/index.js +0 -18
  84. package/esm2015/lib/_internal/interfaces/api.interface.js +0 -447
  85. package/esm2015/lib/_internal/interfaces/field-mask.interface.js +0 -19
  86. package/esm2015/lib/_internal/interfaces/index.js +0 -5
  87. package/esm2015/lib/_internal/interfaces/multilocation-post.interface.js +0 -59
  88. package/esm2015/lib/_internal/interfaces/post-templates.interface.js +0 -45
  89. package/esm2015/lib/_internal/interfaces/social-post-stats.interface.js +0 -57
  90. package/esm2015/lib/_internal/interfaces/social-posts.interface.js +0 -127
  91. package/esm2015/lib/_internal/multilocation-post.api.service.js +0 -136
  92. package/esm2015/lib/_internal/objects/api.js +0 -1805
  93. package/esm2015/lib/_internal/objects/field-mask.js +0 -53
  94. package/esm2015/lib/_internal/objects/index.js +0 -17
  95. package/esm2015/lib/_internal/objects/multilocation-post.js +0 -197
  96. package/esm2015/lib/_internal/objects/post-templates.js +0 -127
  97. package/esm2015/lib/_internal/objects/social-post-stats.js +0 -207
  98. package/esm2015/lib/_internal/objects/social-posts.js +0 -446
  99. package/esm2015/lib/_internal/partner-social-posts.api.service.js +0 -90
  100. package/esm2015/lib/_internal/post-templates.api.service.js +0 -122
  101. package/esm2015/lib/_internal/social-posts.api.service.js +0 -155
  102. package/esm2015/lib/index.js +0 -9
  103. package/esm2015/lib/multilocation-posts.service.js +0 -145
  104. package/esm2015/lib/post-templates.service.js +0 -138
  105. package/esm2015/lib/social-posts.service.js +0 -85
  106. package/esm2015/public_api.js +0 -9
  107. package/esm2015/vendasta-social-posts.js +0 -13
  108. package/esm5/lib/_generated/host.service.js +0 -115
  109. package/esm5/lib/_internal/enums/index.js +0 -13
  110. package/esm5/lib/_internal/enums/multilocation-post.enum.js +0 -19
  111. package/esm5/lib/_internal/enums/social-posts.enum.js +0 -67
  112. package/esm5/lib/_internal/index.js +0 -18
  113. package/esm5/lib/_internal/interfaces/api.interface.js +0 -447
  114. package/esm5/lib/_internal/interfaces/field-mask.interface.js +0 -19
  115. package/esm5/lib/_internal/interfaces/index.js +0 -5
  116. package/esm5/lib/_internal/interfaces/multilocation-post.interface.js +0 -59
  117. package/esm5/lib/_internal/interfaces/post-templates.interface.js +0 -45
  118. package/esm5/lib/_internal/interfaces/social-post-stats.interface.js +0 -57
  119. package/esm5/lib/_internal/interfaces/social-posts.interface.js +0 -127
  120. package/esm5/lib/_internal/multilocation-post.api.service.js +0 -163
  121. package/esm5/lib/_internal/objects/api.js +0 -2015
  122. package/esm5/lib/_internal/objects/field-mask.js +0 -59
  123. package/esm5/lib/_internal/objects/index.js +0 -17
  124. package/esm5/lib/_internal/objects/multilocation-post.js +0 -215
  125. package/esm5/lib/_internal/objects/post-templates.js +0 -133
  126. package/esm5/lib/_internal/objects/social-post-stats.js +0 -225
  127. package/esm5/lib/_internal/objects/social-posts.js +0 -482
  128. package/esm5/lib/_internal/partner-social-posts.api.service.js +0 -100
  129. package/esm5/lib/_internal/post-templates.api.service.js +0 -145
  130. package/esm5/lib/_internal/social-posts.api.service.js +0 -186
  131. package/esm5/lib/index.js +0 -9
  132. package/esm5/lib/multilocation-posts.service.js +0 -191
  133. package/esm5/lib/post-templates.service.js +0 -182
  134. package/esm5/lib/social-posts.service.js +0 -106
  135. package/esm5/public_api.js +0 -9
  136. package/esm5/vendasta-social-posts.js +0 -13
  137. package/fesm2015/vendasta-social-posts.js +0 -3220
  138. package/fesm2015/vendasta-social-posts.js.map +0 -1
  139. package/fesm5/vendasta-social-posts.js +0 -3668
  140. package/fesm5/vendasta-social-posts.js.map +0 -1
  141. package/vendasta-social-posts.metadata.json +0 -1
@@ -1,1805 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { FieldMask } from './field-mask';
6
- import { Location, MultilocationPost, MultilocationPostError } from './multilocation-post';
7
- import { PostTemplate } from './post-templates';
8
- import { SocialPost, SocialPostData, SchedulePostStatus } from './social-posts';
9
- import { SocialPostStats } from './social-post-stats';
10
- import * as e from '../enums';
11
- /**
12
- * @template E
13
- * @param {?} enumRef
14
- * @param {?} value
15
- * @return {?}
16
- */
17
- export function enumStringToValue(enumRef, value) {
18
- if (typeof value === 'number') {
19
- return value;
20
- }
21
- return enumRef[value];
22
- }
23
- export class CreateMultilocationPostRequest {
24
- /**
25
- * @param {?} proto
26
- * @return {?}
27
- */
28
- static fromProto(proto) {
29
- /** @type {?} */
30
- let m = new CreateMultilocationPostRequest();
31
- m = Object.assign(m, proto);
32
- if (proto.scheduledDate) {
33
- m.scheduledDate = new Date(proto.scheduledDate);
34
- }
35
- if (proto.locations) {
36
- m.locations = proto.locations.map(Location.fromProto);
37
- }
38
- return m;
39
- }
40
- /**
41
- * @param {?=} kwargs
42
- */
43
- constructor(kwargs) {
44
- if (!kwargs) {
45
- return;
46
- }
47
- Object.assign(this, kwargs);
48
- }
49
- /**
50
- * @return {?}
51
- */
52
- toApiJson() {
53
- /** @type {?} */
54
- const toReturn = {};
55
- if (typeof this.brandId !== 'undefined') {
56
- toReturn['brandId'] = this.brandId;
57
- }
58
- if (typeof this.text !== 'undefined') {
59
- toReturn['text'] = this.text;
60
- }
61
- if (typeof this.media !== 'undefined') {
62
- toReturn['media'] = this.media;
63
- }
64
- if (typeof this.scheduledDate !== 'undefined' && this.scheduledDate !== null) {
65
- toReturn['scheduledDate'] = 'toApiJson' in this.scheduledDate ? ((/** @type {?} */ (this.scheduledDate))).toApiJson() : this.scheduledDate;
66
- }
67
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
68
- toReturn['locations'] = 'toApiJson' in this.locations ? ((/** @type {?} */ (this.locations))).toApiJson() : this.locations;
69
- }
70
- if (typeof this.gifs !== 'undefined') {
71
- toReturn['gifs'] = this.gifs;
72
- }
73
- if (typeof this.videos !== 'undefined') {
74
- toReturn['videos'] = this.videos;
75
- }
76
- return toReturn;
77
- }
78
- }
79
- if (false) {
80
- /** @type {?} */
81
- CreateMultilocationPostRequest.prototype.brandId;
82
- /** @type {?} */
83
- CreateMultilocationPostRequest.prototype.text;
84
- /** @type {?} */
85
- CreateMultilocationPostRequest.prototype.media;
86
- /** @type {?} */
87
- CreateMultilocationPostRequest.prototype.scheduledDate;
88
- /** @type {?} */
89
- CreateMultilocationPostRequest.prototype.locations;
90
- /** @type {?} */
91
- CreateMultilocationPostRequest.prototype.gifs;
92
- /** @type {?} */
93
- CreateMultilocationPostRequest.prototype.videos;
94
- }
95
- export class CreateMultilocationPostResponse {
96
- /**
97
- * @param {?} proto
98
- * @return {?}
99
- */
100
- static fromProto(proto) {
101
- /** @type {?} */
102
- let m = new CreateMultilocationPostResponse();
103
- m = Object.assign(m, proto);
104
- if (proto.post) {
105
- m.post = MultilocationPost.fromProto(proto.post);
106
- }
107
- if (proto.errors) {
108
- m.errors = proto.errors.map(MultilocationPostError.fromProto);
109
- }
110
- return m;
111
- }
112
- /**
113
- * @param {?=} kwargs
114
- */
115
- constructor(kwargs) {
116
- if (!kwargs) {
117
- return;
118
- }
119
- Object.assign(this, kwargs);
120
- }
121
- /**
122
- * @return {?}
123
- */
124
- toApiJson() {
125
- /** @type {?} */
126
- const toReturn = {};
127
- if (typeof this.post !== 'undefined' && this.post !== null) {
128
- toReturn['post'] = 'toApiJson' in this.post ? ((/** @type {?} */ (this.post))).toApiJson() : this.post;
129
- }
130
- if (typeof this.errors !== 'undefined' && this.errors !== null) {
131
- toReturn['errors'] = 'toApiJson' in this.errors ? ((/** @type {?} */ (this.errors))).toApiJson() : this.errors;
132
- }
133
- return toReturn;
134
- }
135
- }
136
- if (false) {
137
- /** @type {?} */
138
- CreateMultilocationPostResponse.prototype.post;
139
- /** @type {?} */
140
- CreateMultilocationPostResponse.prototype.errors;
141
- }
142
- export class CreatePostTemplateRequest {
143
- /**
144
- * @param {?} proto
145
- * @return {?}
146
- */
147
- static fromProto(proto) {
148
- /** @type {?} */
149
- let m = new CreatePostTemplateRequest();
150
- m = Object.assign(m, proto);
151
- if (proto.postDateTime) {
152
- m.postDateTime = new Date(proto.postDateTime);
153
- }
154
- return m;
155
- }
156
- /**
157
- * @param {?=} kwargs
158
- */
159
- constructor(kwargs) {
160
- if (!kwargs) {
161
- return;
162
- }
163
- Object.assign(this, kwargs);
164
- }
165
- /**
166
- * @return {?}
167
- */
168
- toApiJson() {
169
- /** @type {?} */
170
- const toReturn = {};
171
- if (typeof this.accountGroupId !== 'undefined') {
172
- toReturn['accountGroupId'] = this.accountGroupId;
173
- }
174
- if (typeof this.title !== 'undefined') {
175
- toReturn['title'] = this.title;
176
- }
177
- if (typeof this.postText !== 'undefined') {
178
- toReturn['postText'] = this.postText;
179
- }
180
- if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
181
- toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? ((/** @type {?} */ (this.postDateTime))).toApiJson() : this.postDateTime;
182
- }
183
- if (typeof this.gmbPostCustomization !== 'undefined') {
184
- toReturn['gmbPostCustomization'] = this.gmbPostCustomization;
185
- }
186
- if (typeof this.imageUrl !== 'undefined') {
187
- toReturn['imageUrl'] = this.imageUrl;
188
- }
189
- if (typeof this.imagePath !== 'undefined') {
190
- toReturn['imagePath'] = this.imagePath;
191
- }
192
- if (typeof this.imageSize !== 'undefined') {
193
- toReturn['imageSize'] = this.imageSize;
194
- }
195
- if (typeof this.previews !== 'undefined') {
196
- toReturn['previews'] = this.previews;
197
- }
198
- if (typeof this.options !== 'undefined') {
199
- toReturn['options'] = this.options;
200
- }
201
- if (typeof this.videoUrl !== 'undefined') {
202
- toReturn['videoUrl'] = this.videoUrl;
203
- }
204
- return toReturn;
205
- }
206
- }
207
- if (false) {
208
- /** @type {?} */
209
- CreatePostTemplateRequest.prototype.accountGroupId;
210
- /** @type {?} */
211
- CreatePostTemplateRequest.prototype.title;
212
- /** @type {?} */
213
- CreatePostTemplateRequest.prototype.postText;
214
- /** @type {?} */
215
- CreatePostTemplateRequest.prototype.postDateTime;
216
- /** @type {?} */
217
- CreatePostTemplateRequest.prototype.gmbPostCustomization;
218
- /** @type {?} */
219
- CreatePostTemplateRequest.prototype.imageUrl;
220
- /** @type {?} */
221
- CreatePostTemplateRequest.prototype.imagePath;
222
- /** @type {?} */
223
- CreatePostTemplateRequest.prototype.imageSize;
224
- /** @type {?} */
225
- CreatePostTemplateRequest.prototype.previews;
226
- /** @type {?} */
227
- CreatePostTemplateRequest.prototype.options;
228
- /** @type {?} */
229
- CreatePostTemplateRequest.prototype.videoUrl;
230
- }
231
- export class CreatePostTemplateResponse {
232
- /**
233
- * @param {?} proto
234
- * @return {?}
235
- */
236
- static fromProto(proto) {
237
- /** @type {?} */
238
- let m = new CreatePostTemplateResponse();
239
- m = Object.assign(m, proto);
240
- return m;
241
- }
242
- /**
243
- * @param {?=} kwargs
244
- */
245
- constructor(kwargs) {
246
- if (!kwargs) {
247
- return;
248
- }
249
- Object.assign(this, kwargs);
250
- }
251
- /**
252
- * @return {?}
253
- */
254
- toApiJson() {
255
- /** @type {?} */
256
- const toReturn = {};
257
- if (typeof this.templateId !== 'undefined') {
258
- toReturn['templateId'] = this.templateId;
259
- }
260
- return toReturn;
261
- }
262
- }
263
- if (false) {
264
- /** @type {?} */
265
- CreatePostTemplateResponse.prototype.templateId;
266
- }
267
- export class DateRangeFilter {
268
- /**
269
- * @param {?} proto
270
- * @return {?}
271
- */
272
- static fromProto(proto) {
273
- /** @type {?} */
274
- let m = new DateRangeFilter();
275
- m = Object.assign(m, proto);
276
- if (proto.beginRange) {
277
- m.beginRange = new Date(proto.beginRange);
278
- }
279
- if (proto.endRange) {
280
- m.endRange = new Date(proto.endRange);
281
- }
282
- return m;
283
- }
284
- /**
285
- * @param {?=} kwargs
286
- */
287
- constructor(kwargs) {
288
- if (!kwargs) {
289
- return;
290
- }
291
- Object.assign(this, kwargs);
292
- }
293
- /**
294
- * @return {?}
295
- */
296
- toApiJson() {
297
- /** @type {?} */
298
- const toReturn = {};
299
- if (typeof this.beginRange !== 'undefined' && this.beginRange !== null) {
300
- toReturn['beginRange'] = 'toApiJson' in this.beginRange ? ((/** @type {?} */ (this.beginRange))).toApiJson() : this.beginRange;
301
- }
302
- if (typeof this.endRange !== 'undefined' && this.endRange !== null) {
303
- toReturn['endRange'] = 'toApiJson' in this.endRange ? ((/** @type {?} */ (this.endRange))).toApiJson() : this.endRange;
304
- }
305
- return toReturn;
306
- }
307
- }
308
- if (false) {
309
- /** @type {?} */
310
- DateRangeFilter.prototype.beginRange;
311
- /** @type {?} */
312
- DateRangeFilter.prototype.endRange;
313
- }
314
- export class DeleteMultilocationPostRequest {
315
- /**
316
- * @param {?} proto
317
- * @return {?}
318
- */
319
- static fromProto(proto) {
320
- /** @type {?} */
321
- let m = new DeleteMultilocationPostRequest();
322
- m = Object.assign(m, proto);
323
- return m;
324
- }
325
- /**
326
- * @param {?=} kwargs
327
- */
328
- constructor(kwargs) {
329
- if (!kwargs) {
330
- return;
331
- }
332
- Object.assign(this, kwargs);
333
- }
334
- /**
335
- * @return {?}
336
- */
337
- toApiJson() {
338
- /** @type {?} */
339
- const toReturn = {};
340
- if (typeof this.brandId !== 'undefined') {
341
- toReturn['brandId'] = this.brandId;
342
- }
343
- if (typeof this.multilocationId !== 'undefined') {
344
- toReturn['multilocationId'] = this.multilocationId;
345
- }
346
- return toReturn;
347
- }
348
- }
349
- if (false) {
350
- /** @type {?} */
351
- DeleteMultilocationPostRequest.prototype.brandId;
352
- /** @type {?} */
353
- DeleteMultilocationPostRequest.prototype.multilocationId;
354
- }
355
- export class DeletePostTemplateRequest {
356
- /**
357
- * @param {?} proto
358
- * @return {?}
359
- */
360
- static fromProto(proto) {
361
- /** @type {?} */
362
- let m = new DeletePostTemplateRequest();
363
- m = Object.assign(m, proto);
364
- return m;
365
- }
366
- /**
367
- * @param {?=} kwargs
368
- */
369
- constructor(kwargs) {
370
- if (!kwargs) {
371
- return;
372
- }
373
- Object.assign(this, kwargs);
374
- }
375
- /**
376
- * @return {?}
377
- */
378
- toApiJson() {
379
- /** @type {?} */
380
- const toReturn = {};
381
- if (typeof this.accountGroupId !== 'undefined') {
382
- toReturn['accountGroupId'] = this.accountGroupId;
383
- }
384
- if (typeof this.templateId !== 'undefined') {
385
- toReturn['templateId'] = this.templateId;
386
- }
387
- return toReturn;
388
- }
389
- }
390
- if (false) {
391
- /** @type {?} */
392
- DeletePostTemplateRequest.prototype.accountGroupId;
393
- /** @type {?} */
394
- DeletePostTemplateRequest.prototype.templateId;
395
- }
396
- export class DeleteSocialPostRequest {
397
- /**
398
- * @param {?} proto
399
- * @return {?}
400
- */
401
- static fromProto(proto) {
402
- /** @type {?} */
403
- let m = new DeleteSocialPostRequest();
404
- m = Object.assign(m, proto);
405
- return m;
406
- }
407
- /**
408
- * @param {?=} kwargs
409
- */
410
- constructor(kwargs) {
411
- if (!kwargs) {
412
- return;
413
- }
414
- Object.assign(this, kwargs);
415
- }
416
- /**
417
- * @return {?}
418
- */
419
- toApiJson() {
420
- /** @type {?} */
421
- const toReturn = {};
422
- if (typeof this.businessId !== 'undefined') {
423
- toReturn['businessId'] = this.businessId;
424
- }
425
- if (typeof this.socialPostId !== 'undefined') {
426
- toReturn['socialPostId'] = this.socialPostId;
427
- }
428
- return toReturn;
429
- }
430
- }
431
- if (false) {
432
- /** @type {?} */
433
- DeleteSocialPostRequest.prototype.businessId;
434
- /** @type {?} */
435
- DeleteSocialPostRequest.prototype.socialPostId;
436
- }
437
- export class EditMultilocationPostRequest {
438
- /**
439
- * @param {?} proto
440
- * @return {?}
441
- */
442
- static fromProto(proto) {
443
- /** @type {?} */
444
- let m = new EditMultilocationPostRequest();
445
- m = Object.assign(m, proto);
446
- if (proto.scheduledDate) {
447
- m.scheduledDate = new Date(proto.scheduledDate);
448
- }
449
- if (proto.fieldMask) {
450
- m.fieldMask = FieldMask.fromProto(proto.fieldMask);
451
- }
452
- if (proto.locations) {
453
- m.locations = proto.locations.map(Location.fromProto);
454
- }
455
- return m;
456
- }
457
- /**
458
- * @param {?=} kwargs
459
- */
460
- constructor(kwargs) {
461
- if (!kwargs) {
462
- return;
463
- }
464
- Object.assign(this, kwargs);
465
- }
466
- /**
467
- * @return {?}
468
- */
469
- toApiJson() {
470
- /** @type {?} */
471
- const toReturn = {};
472
- if (typeof this.brandId !== 'undefined') {
473
- toReturn['brandId'] = this.brandId;
474
- }
475
- if (typeof this.multilocationId !== 'undefined') {
476
- toReturn['multilocationId'] = this.multilocationId;
477
- }
478
- if (typeof this.text !== 'undefined') {
479
- toReturn['text'] = this.text;
480
- }
481
- if (typeof this.media !== 'undefined') {
482
- toReturn['media'] = this.media;
483
- }
484
- if (typeof this.scheduledDate !== 'undefined' && this.scheduledDate !== null) {
485
- toReturn['scheduledDate'] = 'toApiJson' in this.scheduledDate ? ((/** @type {?} */ (this.scheduledDate))).toApiJson() : this.scheduledDate;
486
- }
487
- if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {
488
- toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? ((/** @type {?} */ (this.fieldMask))).toApiJson() : this.fieldMask;
489
- }
490
- if (typeof this.gifs !== 'undefined') {
491
- toReturn['gifs'] = this.gifs;
492
- }
493
- if (typeof this.videos !== 'undefined') {
494
- toReturn['videos'] = this.videos;
495
- }
496
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
497
- toReturn['locations'] = 'toApiJson' in this.locations ? ((/** @type {?} */ (this.locations))).toApiJson() : this.locations;
498
- }
499
- return toReturn;
500
- }
501
- }
502
- if (false) {
503
- /** @type {?} */
504
- EditMultilocationPostRequest.prototype.brandId;
505
- /** @type {?} */
506
- EditMultilocationPostRequest.prototype.multilocationId;
507
- /** @type {?} */
508
- EditMultilocationPostRequest.prototype.text;
509
- /** @type {?} */
510
- EditMultilocationPostRequest.prototype.media;
511
- /** @type {?} */
512
- EditMultilocationPostRequest.prototype.scheduledDate;
513
- /** @type {?} */
514
- EditMultilocationPostRequest.prototype.fieldMask;
515
- /** @type {?} */
516
- EditMultilocationPostRequest.prototype.gifs;
517
- /** @type {?} */
518
- EditMultilocationPostRequest.prototype.videos;
519
- /** @type {?} */
520
- EditMultilocationPostRequest.prototype.locations;
521
- }
522
- export class EditMultilocationPostResponse {
523
- /**
524
- * @param {?} proto
525
- * @return {?}
526
- */
527
- static fromProto(proto) {
528
- /** @type {?} */
529
- let m = new EditMultilocationPostResponse();
530
- m = Object.assign(m, proto);
531
- if (proto.post) {
532
- m.post = MultilocationPost.fromProto(proto.post);
533
- }
534
- if (proto.errors) {
535
- m.errors = proto.errors.map(MultilocationPostError.fromProto);
536
- }
537
- return m;
538
- }
539
- /**
540
- * @param {?=} kwargs
541
- */
542
- constructor(kwargs) {
543
- if (!kwargs) {
544
- return;
545
- }
546
- Object.assign(this, kwargs);
547
- }
548
- /**
549
- * @return {?}
550
- */
551
- toApiJson() {
552
- /** @type {?} */
553
- const toReturn = {};
554
- if (typeof this.post !== 'undefined' && this.post !== null) {
555
- toReturn['post'] = 'toApiJson' in this.post ? ((/** @type {?} */ (this.post))).toApiJson() : this.post;
556
- }
557
- if (typeof this.errors !== 'undefined' && this.errors !== null) {
558
- toReturn['errors'] = 'toApiJson' in this.errors ? ((/** @type {?} */ (this.errors))).toApiJson() : this.errors;
559
- }
560
- return toReturn;
561
- }
562
- }
563
- if (false) {
564
- /** @type {?} */
565
- EditMultilocationPostResponse.prototype.post;
566
- /** @type {?} */
567
- EditMultilocationPostResponse.prototype.errors;
568
- }
569
- export class PartnerListScheduledSocialPostsRequestFilters {
570
- /**
571
- * @param {?} proto
572
- * @return {?}
573
- */
574
- static fromProto(proto) {
575
- /** @type {?} */
576
- let m = new PartnerListScheduledSocialPostsRequestFilters();
577
- m = Object.assign(m, proto);
578
- if (proto.dateRange) {
579
- m.dateRange = DateRangeFilter.fromProto(proto.dateRange);
580
- }
581
- return m;
582
- }
583
- /**
584
- * @param {?=} kwargs
585
- */
586
- constructor(kwargs) {
587
- if (!kwargs) {
588
- return;
589
- }
590
- Object.assign(this, kwargs);
591
- }
592
- /**
593
- * @return {?}
594
- */
595
- toApiJson() {
596
- /** @type {?} */
597
- const toReturn = {};
598
- if (typeof this.dateRange !== 'undefined' && this.dateRange !== null) {
599
- toReturn['dateRange'] = 'toApiJson' in this.dateRange ? ((/** @type {?} */ (this.dateRange))).toApiJson() : this.dateRange;
600
- }
601
- if (typeof this.partnerId !== 'undefined') {
602
- toReturn['partnerId'] = this.partnerId;
603
- }
604
- return toReturn;
605
- }
606
- }
607
- if (false) {
608
- /** @type {?} */
609
- PartnerListScheduledSocialPostsRequestFilters.prototype.dateRange;
610
- /** @type {?} */
611
- PartnerListScheduledSocialPostsRequestFilters.prototype.partnerId;
612
- }
613
- export class GetMultiSocialPostStatsRequest {
614
- /**
615
- * @param {?} proto
616
- * @return {?}
617
- */
618
- static fromProto(proto) {
619
- /** @type {?} */
620
- let m = new GetMultiSocialPostStatsRequest();
621
- m = Object.assign(m, proto);
622
- return m;
623
- }
624
- /**
625
- * @param {?=} kwargs
626
- */
627
- constructor(kwargs) {
628
- if (!kwargs) {
629
- return;
630
- }
631
- Object.assign(this, kwargs);
632
- }
633
- /**
634
- * @return {?}
635
- */
636
- toApiJson() {
637
- /** @type {?} */
638
- const toReturn = {};
639
- if (typeof this.internalPostIds !== 'undefined') {
640
- toReturn['internalPostIds'] = this.internalPostIds;
641
- }
642
- if (typeof this.businessId !== 'undefined') {
643
- toReturn['businessId'] = this.businessId;
644
- }
645
- if (typeof this.partnerId !== 'undefined') {
646
- toReturn['partnerId'] = this.partnerId;
647
- }
648
- return toReturn;
649
- }
650
- }
651
- if (false) {
652
- /** @type {?} */
653
- GetMultiSocialPostStatsRequest.prototype.internalPostIds;
654
- /** @type {?} */
655
- GetMultiSocialPostStatsRequest.prototype.businessId;
656
- /** @type {?} */
657
- GetMultiSocialPostStatsRequest.prototype.partnerId;
658
- }
659
- export class GetMultiSocialPostStatsResponse {
660
- /**
661
- * @param {?} proto
662
- * @return {?}
663
- */
664
- static fromProto(proto) {
665
- /** @type {?} */
666
- let m = new GetMultiSocialPostStatsResponse();
667
- m = Object.assign(m, proto);
668
- if (proto.socialPostStats) {
669
- m.socialPostStats = proto.socialPostStats.map(SocialPostStats.fromProto);
670
- }
671
- return m;
672
- }
673
- /**
674
- * @param {?=} kwargs
675
- */
676
- constructor(kwargs) {
677
- if (!kwargs) {
678
- return;
679
- }
680
- Object.assign(this, kwargs);
681
- }
682
- /**
683
- * @return {?}
684
- */
685
- toApiJson() {
686
- /** @type {?} */
687
- const toReturn = {};
688
- if (typeof this.socialPostStats !== 'undefined' && this.socialPostStats !== null) {
689
- toReturn['socialPostStats'] = 'toApiJson' in this.socialPostStats ? ((/** @type {?} */ (this.socialPostStats))).toApiJson() : this.socialPostStats;
690
- }
691
- return toReturn;
692
- }
693
- }
694
- if (false) {
695
- /** @type {?} */
696
- GetMultiSocialPostStatsResponse.prototype.socialPostStats;
697
- }
698
- export class GetMultiSocialPostsRequest {
699
- /**
700
- * @param {?} proto
701
- * @return {?}
702
- */
703
- static fromProto(proto) {
704
- /** @type {?} */
705
- let m = new GetMultiSocialPostsRequest();
706
- m = Object.assign(m, proto);
707
- return m;
708
- }
709
- /**
710
- * @param {?=} kwargs
711
- */
712
- constructor(kwargs) {
713
- if (!kwargs) {
714
- return;
715
- }
716
- Object.assign(this, kwargs);
717
- }
718
- /**
719
- * @return {?}
720
- */
721
- toApiJson() {
722
- /** @type {?} */
723
- const toReturn = {};
724
- if (typeof this.businessId !== 'undefined') {
725
- toReturn['businessId'] = this.businessId;
726
- }
727
- if (typeof this.internalPostIds !== 'undefined') {
728
- toReturn['internalPostIds'] = this.internalPostIds;
729
- }
730
- return toReturn;
731
- }
732
- }
733
- if (false) {
734
- /** @type {?} */
735
- GetMultiSocialPostsRequest.prototype.businessId;
736
- /** @type {?} */
737
- GetMultiSocialPostsRequest.prototype.internalPostIds;
738
- }
739
- export class GetMultiSocialPostsResponse {
740
- /**
741
- * @param {?} proto
742
- * @return {?}
743
- */
744
- static fromProto(proto) {
745
- /** @type {?} */
746
- let m = new GetMultiSocialPostsResponse();
747
- m = Object.assign(m, proto);
748
- if (proto.socialPosts) {
749
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
750
- }
751
- return m;
752
- }
753
- /**
754
- * @param {?=} kwargs
755
- */
756
- constructor(kwargs) {
757
- if (!kwargs) {
758
- return;
759
- }
760
- Object.assign(this, kwargs);
761
- }
762
- /**
763
- * @return {?}
764
- */
765
- toApiJson() {
766
- /** @type {?} */
767
- const toReturn = {};
768
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
769
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? ((/** @type {?} */ (this.socialPosts))).toApiJson() : this.socialPosts;
770
- }
771
- return toReturn;
772
- }
773
- }
774
- if (false) {
775
- /** @type {?} */
776
- GetMultiSocialPostsResponse.prototype.socialPosts;
777
- }
778
- export class GetMultilocationPostRequest {
779
- /**
780
- * @param {?} proto
781
- * @return {?}
782
- */
783
- static fromProto(proto) {
784
- /** @type {?} */
785
- let m = new GetMultilocationPostRequest();
786
- m = Object.assign(m, proto);
787
- return m;
788
- }
789
- /**
790
- * @param {?=} kwargs
791
- */
792
- constructor(kwargs) {
793
- if (!kwargs) {
794
- return;
795
- }
796
- Object.assign(this, kwargs);
797
- }
798
- /**
799
- * @return {?}
800
- */
801
- toApiJson() {
802
- /** @type {?} */
803
- const toReturn = {};
804
- if (typeof this.brandId !== 'undefined') {
805
- toReturn['brandId'] = this.brandId;
806
- }
807
- if (typeof this.multilocationId !== 'undefined') {
808
- toReturn['multilocationId'] = this.multilocationId;
809
- }
810
- return toReturn;
811
- }
812
- }
813
- if (false) {
814
- /** @type {?} */
815
- GetMultilocationPostRequest.prototype.brandId;
816
- /** @type {?} */
817
- GetMultilocationPostRequest.prototype.multilocationId;
818
- }
819
- export class GetMultilocationPostResponse {
820
- /**
821
- * @param {?} proto
822
- * @return {?}
823
- */
824
- static fromProto(proto) {
825
- /** @type {?} */
826
- let m = new GetMultilocationPostResponse();
827
- m = Object.assign(m, proto);
828
- if (proto.multilocationPost) {
829
- m.multilocationPost = MultilocationPost.fromProto(proto.multilocationPost);
830
- }
831
- return m;
832
- }
833
- /**
834
- * @param {?=} kwargs
835
- */
836
- constructor(kwargs) {
837
- if (!kwargs) {
838
- return;
839
- }
840
- Object.assign(this, kwargs);
841
- }
842
- /**
843
- * @return {?}
844
- */
845
- toApiJson() {
846
- /** @type {?} */
847
- const toReturn = {};
848
- if (typeof this.multilocationPost !== 'undefined' && this.multilocationPost !== null) {
849
- toReturn['multilocationPost'] = 'toApiJson' in this.multilocationPost ? ((/** @type {?} */ (this.multilocationPost))).toApiJson() : this.multilocationPost;
850
- }
851
- return toReturn;
852
- }
853
- }
854
- if (false) {
855
- /** @type {?} */
856
- GetMultilocationPostResponse.prototype.multilocationPost;
857
- }
858
- export class GetPostTemplateRequest {
859
- /**
860
- * @param {?} proto
861
- * @return {?}
862
- */
863
- static fromProto(proto) {
864
- /** @type {?} */
865
- let m = new GetPostTemplateRequest();
866
- m = Object.assign(m, proto);
867
- return m;
868
- }
869
- /**
870
- * @param {?=} kwargs
871
- */
872
- constructor(kwargs) {
873
- if (!kwargs) {
874
- return;
875
- }
876
- Object.assign(this, kwargs);
877
- }
878
- /**
879
- * @return {?}
880
- */
881
- toApiJson() {
882
- /** @type {?} */
883
- const toReturn = {};
884
- if (typeof this.accountGroupId !== 'undefined') {
885
- toReturn['accountGroupId'] = this.accountGroupId;
886
- }
887
- if (typeof this.templateId !== 'undefined') {
888
- toReturn['templateId'] = this.templateId;
889
- }
890
- return toReturn;
891
- }
892
- }
893
- if (false) {
894
- /** @type {?} */
895
- GetPostTemplateRequest.prototype.accountGroupId;
896
- /** @type {?} */
897
- GetPostTemplateRequest.prototype.templateId;
898
- }
899
- export class GetPostTemplateResponse {
900
- /**
901
- * @param {?} proto
902
- * @return {?}
903
- */
904
- static fromProto(proto) {
905
- /** @type {?} */
906
- let m = new GetPostTemplateResponse();
907
- m = Object.assign(m, proto);
908
- if (proto.postTemplate) {
909
- m.postTemplate = PostTemplate.fromProto(proto.postTemplate);
910
- }
911
- return m;
912
- }
913
- /**
914
- * @param {?=} kwargs
915
- */
916
- constructor(kwargs) {
917
- if (!kwargs) {
918
- return;
919
- }
920
- Object.assign(this, kwargs);
921
- }
922
- /**
923
- * @return {?}
924
- */
925
- toApiJson() {
926
- /** @type {?} */
927
- const toReturn = {};
928
- if (typeof this.postTemplate !== 'undefined' && this.postTemplate !== null) {
929
- toReturn['postTemplate'] = 'toApiJson' in this.postTemplate ? ((/** @type {?} */ (this.postTemplate))).toApiJson() : this.postTemplate;
930
- }
931
- return toReturn;
932
- }
933
- }
934
- if (false) {
935
- /** @type {?} */
936
- GetPostTemplateResponse.prototype.postTemplate;
937
- }
938
- export class GetScheduledPostCountRequest {
939
- /**
940
- * @param {?} proto
941
- * @return {?}
942
- */
943
- static fromProto(proto) {
944
- /** @type {?} */
945
- let m = new GetScheduledPostCountRequest();
946
- m = Object.assign(m, proto);
947
- return m;
948
- }
949
- /**
950
- * @param {?=} kwargs
951
- */
952
- constructor(kwargs) {
953
- if (!kwargs) {
954
- return;
955
- }
956
- Object.assign(this, kwargs);
957
- }
958
- /**
959
- * @return {?}
960
- */
961
- toApiJson() {
962
- /** @type {?} */
963
- const toReturn = {};
964
- if (typeof this.partnerId !== 'undefined') {
965
- toReturn['partnerId'] = this.partnerId;
966
- }
967
- if (typeof this.businessId !== 'undefined') {
968
- toReturn['businessId'] = this.businessId;
969
- }
970
- if (typeof this.socialServiceIds !== 'undefined') {
971
- toReturn['socialServiceIds'] = this.socialServiceIds;
972
- }
973
- return toReturn;
974
- }
975
- }
976
- if (false) {
977
- /** @type {?} */
978
- GetScheduledPostCountRequest.prototype.partnerId;
979
- /** @type {?} */
980
- GetScheduledPostCountRequest.prototype.businessId;
981
- /** @type {?} */
982
- GetScheduledPostCountRequest.prototype.socialServiceIds;
983
- }
984
- export class GetScheduledPostCountResponse {
985
- /**
986
- * @param {?} proto
987
- * @return {?}
988
- */
989
- static fromProto(proto) {
990
- /** @type {?} */
991
- let m = new GetScheduledPostCountResponse();
992
- m = Object.assign(m, proto);
993
- if (proto.count) {
994
- m.count = parseInt(proto.count, 10);
995
- }
996
- return m;
997
- }
998
- /**
999
- * @param {?=} kwargs
1000
- */
1001
- constructor(kwargs) {
1002
- if (!kwargs) {
1003
- return;
1004
- }
1005
- Object.assign(this, kwargs);
1006
- }
1007
- /**
1008
- * @return {?}
1009
- */
1010
- toApiJson() {
1011
- /** @type {?} */
1012
- const toReturn = {};
1013
- if (typeof this.count !== 'undefined') {
1014
- toReturn['count'] = this.count;
1015
- }
1016
- return toReturn;
1017
- }
1018
- }
1019
- if (false) {
1020
- /** @type {?} */
1021
- GetScheduledPostCountResponse.prototype.count;
1022
- }
1023
- export class ListMultilocationPostsForBrandRequest {
1024
- /**
1025
- * @param {?} proto
1026
- * @return {?}
1027
- */
1028
- static fromProto(proto) {
1029
- /** @type {?} */
1030
- let m = new ListMultilocationPostsForBrandRequest();
1031
- m = Object.assign(m, proto);
1032
- if (proto.startDate) {
1033
- m.startDate = new Date(proto.startDate);
1034
- }
1035
- if (proto.endDate) {
1036
- m.endDate = new Date(proto.endDate);
1037
- }
1038
- if (proto.pageSize) {
1039
- m.pageSize = parseInt(proto.pageSize, 10);
1040
- }
1041
- return m;
1042
- }
1043
- /**
1044
- * @param {?=} kwargs
1045
- */
1046
- constructor(kwargs) {
1047
- if (!kwargs) {
1048
- return;
1049
- }
1050
- Object.assign(this, kwargs);
1051
- }
1052
- /**
1053
- * @return {?}
1054
- */
1055
- toApiJson() {
1056
- /** @type {?} */
1057
- const toReturn = {};
1058
- if (typeof this.brandId !== 'undefined') {
1059
- toReturn['brandId'] = this.brandId;
1060
- }
1061
- if (typeof this.startDate !== 'undefined' && this.startDate !== null) {
1062
- toReturn['startDate'] = 'toApiJson' in this.startDate ? ((/** @type {?} */ (this.startDate))).toApiJson() : this.startDate;
1063
- }
1064
- if (typeof this.endDate !== 'undefined' && this.endDate !== null) {
1065
- toReturn['endDate'] = 'toApiJson' in this.endDate ? ((/** @type {?} */ (this.endDate))).toApiJson() : this.endDate;
1066
- }
1067
- if (typeof this.cursor !== 'undefined') {
1068
- toReturn['cursor'] = this.cursor;
1069
- }
1070
- if (typeof this.pageSize !== 'undefined') {
1071
- toReturn['pageSize'] = this.pageSize;
1072
- }
1073
- return toReturn;
1074
- }
1075
- }
1076
- if (false) {
1077
- /** @type {?} */
1078
- ListMultilocationPostsForBrandRequest.prototype.brandId;
1079
- /** @type {?} */
1080
- ListMultilocationPostsForBrandRequest.prototype.startDate;
1081
- /** @type {?} */
1082
- ListMultilocationPostsForBrandRequest.prototype.endDate;
1083
- /** @type {?} */
1084
- ListMultilocationPostsForBrandRequest.prototype.cursor;
1085
- /** @type {?} */
1086
- ListMultilocationPostsForBrandRequest.prototype.pageSize;
1087
- }
1088
- export class ListMultilocationPostsForBrandResponse {
1089
- /**
1090
- * @param {?} proto
1091
- * @return {?}
1092
- */
1093
- static fromProto(proto) {
1094
- /** @type {?} */
1095
- let m = new ListMultilocationPostsForBrandResponse();
1096
- m = Object.assign(m, proto);
1097
- if (proto.multilocationPosts) {
1098
- m.multilocationPosts = proto.multilocationPosts.map(MultilocationPost.fromProto);
1099
- }
1100
- if (proto.failedSocialPosts) {
1101
- m.failedSocialPosts = proto.failedSocialPosts.map(SocialPost.fromProto);
1102
- }
1103
- return m;
1104
- }
1105
- /**
1106
- * @param {?=} kwargs
1107
- */
1108
- constructor(kwargs) {
1109
- if (!kwargs) {
1110
- return;
1111
- }
1112
- Object.assign(this, kwargs);
1113
- }
1114
- /**
1115
- * @return {?}
1116
- */
1117
- toApiJson() {
1118
- /** @type {?} */
1119
- const toReturn = {};
1120
- if (typeof this.multilocationPosts !== 'undefined' && this.multilocationPosts !== null) {
1121
- toReturn['multilocationPosts'] = 'toApiJson' in this.multilocationPosts ? ((/** @type {?} */ (this.multilocationPosts))).toApiJson() : this.multilocationPosts;
1122
- }
1123
- if (typeof this.nextCursor !== 'undefined') {
1124
- toReturn['nextCursor'] = this.nextCursor;
1125
- }
1126
- if (typeof this.hasMore !== 'undefined') {
1127
- toReturn['hasMore'] = this.hasMore;
1128
- }
1129
- if (typeof this.failedSocialPosts !== 'undefined' && this.failedSocialPosts !== null) {
1130
- toReturn['failedSocialPosts'] = 'toApiJson' in this.failedSocialPosts ? ((/** @type {?} */ (this.failedSocialPosts))).toApiJson() : this.failedSocialPosts;
1131
- }
1132
- return toReturn;
1133
- }
1134
- }
1135
- if (false) {
1136
- /** @type {?} */
1137
- ListMultilocationPostsForBrandResponse.prototype.multilocationPosts;
1138
- /** @type {?} */
1139
- ListMultilocationPostsForBrandResponse.prototype.nextCursor;
1140
- /** @type {?} */
1141
- ListMultilocationPostsForBrandResponse.prototype.hasMore;
1142
- /** @type {?} */
1143
- ListMultilocationPostsForBrandResponse.prototype.failedSocialPosts;
1144
- }
1145
- export class ListPostTemplatesRequest {
1146
- /**
1147
- * @param {?} proto
1148
- * @return {?}
1149
- */
1150
- static fromProto(proto) {
1151
- /** @type {?} */
1152
- let m = new ListPostTemplatesRequest();
1153
- m = Object.assign(m, proto);
1154
- if (proto.pageSize) {
1155
- m.pageSize = parseInt(proto.pageSize, 10);
1156
- }
1157
- return m;
1158
- }
1159
- /**
1160
- * @param {?=} kwargs
1161
- */
1162
- constructor(kwargs) {
1163
- if (!kwargs) {
1164
- return;
1165
- }
1166
- Object.assign(this, kwargs);
1167
- }
1168
- /**
1169
- * @return {?}
1170
- */
1171
- toApiJson() {
1172
- /** @type {?} */
1173
- const toReturn = {};
1174
- if (typeof this.accountGroupId !== 'undefined') {
1175
- toReturn['accountGroupId'] = this.accountGroupId;
1176
- }
1177
- if (typeof this.cursor !== 'undefined') {
1178
- toReturn['cursor'] = this.cursor;
1179
- }
1180
- if (typeof this.pageSize !== 'undefined') {
1181
- toReturn['pageSize'] = this.pageSize;
1182
- }
1183
- return toReturn;
1184
- }
1185
- }
1186
- if (false) {
1187
- /** @type {?} */
1188
- ListPostTemplatesRequest.prototype.accountGroupId;
1189
- /** @type {?} */
1190
- ListPostTemplatesRequest.prototype.cursor;
1191
- /** @type {?} */
1192
- ListPostTemplatesRequest.prototype.pageSize;
1193
- }
1194
- export class ListPostTemplatesResponse {
1195
- /**
1196
- * @param {?} proto
1197
- * @return {?}
1198
- */
1199
- static fromProto(proto) {
1200
- /** @type {?} */
1201
- let m = new ListPostTemplatesResponse();
1202
- m = Object.assign(m, proto);
1203
- if (proto.postTemplate) {
1204
- m.postTemplate = proto.postTemplate.map(PostTemplate.fromProto);
1205
- }
1206
- return m;
1207
- }
1208
- /**
1209
- * @param {?=} kwargs
1210
- */
1211
- constructor(kwargs) {
1212
- if (!kwargs) {
1213
- return;
1214
- }
1215
- Object.assign(this, kwargs);
1216
- }
1217
- /**
1218
- * @return {?}
1219
- */
1220
- toApiJson() {
1221
- /** @type {?} */
1222
- const toReturn = {};
1223
- if (typeof this.postTemplate !== 'undefined' && this.postTemplate !== null) {
1224
- toReturn['postTemplate'] = 'toApiJson' in this.postTemplate ? ((/** @type {?} */ (this.postTemplate))).toApiJson() : this.postTemplate;
1225
- }
1226
- if (typeof this.nextCursor !== 'undefined') {
1227
- toReturn['nextCursor'] = this.nextCursor;
1228
- }
1229
- if (typeof this.hasMore !== 'undefined') {
1230
- toReturn['hasMore'] = this.hasMore;
1231
- }
1232
- return toReturn;
1233
- }
1234
- }
1235
- if (false) {
1236
- /** @type {?} */
1237
- ListPostTemplatesResponse.prototype.postTemplate;
1238
- /** @type {?} */
1239
- ListPostTemplatesResponse.prototype.nextCursor;
1240
- /** @type {?} */
1241
- ListPostTemplatesResponse.prototype.hasMore;
1242
- }
1243
- export class ListSocialPostsRequest {
1244
- /**
1245
- * @param {?} proto
1246
- * @return {?}
1247
- */
1248
- static fromProto(proto) {
1249
- /** @type {?} */
1250
- let m = new ListSocialPostsRequest();
1251
- m = Object.assign(m, proto);
1252
- if (proto.start) {
1253
- m.start = new Date(proto.start);
1254
- }
1255
- if (proto.end) {
1256
- m.end = new Date(proto.end);
1257
- }
1258
- if (proto.pageSize) {
1259
- m.pageSize = parseInt(proto.pageSize, 10);
1260
- }
1261
- return m;
1262
- }
1263
- /**
1264
- * @param {?=} kwargs
1265
- */
1266
- constructor(kwargs) {
1267
- if (!kwargs) {
1268
- return;
1269
- }
1270
- Object.assign(this, kwargs);
1271
- }
1272
- /**
1273
- * @return {?}
1274
- */
1275
- toApiJson() {
1276
- /** @type {?} */
1277
- const toReturn = {};
1278
- if (typeof this.start !== 'undefined' && this.start !== null) {
1279
- toReturn['start'] = 'toApiJson' in this.start ? ((/** @type {?} */ (this.start))).toApiJson() : this.start;
1280
- }
1281
- if (typeof this.end !== 'undefined' && this.end !== null) {
1282
- toReturn['end'] = 'toApiJson' in this.end ? ((/** @type {?} */ (this.end))).toApiJson() : this.end;
1283
- }
1284
- if (typeof this.businessId !== 'undefined') {
1285
- toReturn['businessId'] = this.businessId;
1286
- }
1287
- if (typeof this.partnerId !== 'undefined') {
1288
- toReturn['partnerId'] = this.partnerId;
1289
- }
1290
- if (typeof this.cursor !== 'undefined') {
1291
- toReturn['cursor'] = this.cursor;
1292
- }
1293
- if (typeof this.socialServiceIds !== 'undefined') {
1294
- toReturn['socialServiceIds'] = this.socialServiceIds;
1295
- }
1296
- if (typeof this.tags !== 'undefined') {
1297
- toReturn['tags'] = this.tags;
1298
- }
1299
- if (typeof this.pageSize !== 'undefined') {
1300
- toReturn['pageSize'] = this.pageSize;
1301
- }
1302
- return toReturn;
1303
- }
1304
- }
1305
- if (false) {
1306
- /** @type {?} */
1307
- ListSocialPostsRequest.prototype.start;
1308
- /** @type {?} */
1309
- ListSocialPostsRequest.prototype.end;
1310
- /** @type {?} */
1311
- ListSocialPostsRequest.prototype.businessId;
1312
- /** @type {?} */
1313
- ListSocialPostsRequest.prototype.partnerId;
1314
- /** @type {?} */
1315
- ListSocialPostsRequest.prototype.cursor;
1316
- /** @type {?} */
1317
- ListSocialPostsRequest.prototype.socialServiceIds;
1318
- /** @type {?} */
1319
- ListSocialPostsRequest.prototype.tags;
1320
- /** @type {?} */
1321
- ListSocialPostsRequest.prototype.pageSize;
1322
- }
1323
- export class ListSocialPostsResponse {
1324
- /**
1325
- * @param {?} proto
1326
- * @return {?}
1327
- */
1328
- static fromProto(proto) {
1329
- /** @type {?} */
1330
- let m = new ListSocialPostsResponse();
1331
- m = Object.assign(m, proto);
1332
- if (proto.socialPosts) {
1333
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
1334
- }
1335
- return m;
1336
- }
1337
- /**
1338
- * @param {?=} kwargs
1339
- */
1340
- constructor(kwargs) {
1341
- if (!kwargs) {
1342
- return;
1343
- }
1344
- Object.assign(this, kwargs);
1345
- }
1346
- /**
1347
- * @return {?}
1348
- */
1349
- toApiJson() {
1350
- /** @type {?} */
1351
- const toReturn = {};
1352
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
1353
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? ((/** @type {?} */ (this.socialPosts))).toApiJson() : this.socialPosts;
1354
- }
1355
- if (typeof this.nextCursor !== 'undefined') {
1356
- toReturn['nextCursor'] = this.nextCursor;
1357
- }
1358
- if (typeof this.hasMore !== 'undefined') {
1359
- toReturn['hasMore'] = this.hasMore;
1360
- }
1361
- return toReturn;
1362
- }
1363
- }
1364
- if (false) {
1365
- /** @type {?} */
1366
- ListSocialPostsResponse.prototype.socialPosts;
1367
- /** @type {?} */
1368
- ListSocialPostsResponse.prototype.nextCursor;
1369
- /** @type {?} */
1370
- ListSocialPostsResponse.prototype.hasMore;
1371
- }
1372
- export class PartnerListScheduledPostsResponse {
1373
- /**
1374
- * @param {?} proto
1375
- * @return {?}
1376
- */
1377
- static fromProto(proto) {
1378
- /** @type {?} */
1379
- let m = new PartnerListScheduledPostsResponse();
1380
- m = Object.assign(m, proto);
1381
- if (proto.socialPosts) {
1382
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
1383
- }
1384
- return m;
1385
- }
1386
- /**
1387
- * @param {?=} kwargs
1388
- */
1389
- constructor(kwargs) {
1390
- if (!kwargs) {
1391
- return;
1392
- }
1393
- Object.assign(this, kwargs);
1394
- }
1395
- /**
1396
- * @return {?}
1397
- */
1398
- toApiJson() {
1399
- /** @type {?} */
1400
- const toReturn = {};
1401
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
1402
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? ((/** @type {?} */ (this.socialPosts))).toApiJson() : this.socialPosts;
1403
- }
1404
- if (typeof this.nextCursor !== 'undefined') {
1405
- toReturn['nextCursor'] = this.nextCursor;
1406
- }
1407
- if (typeof this.hasMore !== 'undefined') {
1408
- toReturn['hasMore'] = this.hasMore;
1409
- }
1410
- return toReturn;
1411
- }
1412
- }
1413
- if (false) {
1414
- /** @type {?} */
1415
- PartnerListScheduledPostsResponse.prototype.socialPosts;
1416
- /** @type {?} */
1417
- PartnerListScheduledPostsResponse.prototype.nextCursor;
1418
- /** @type {?} */
1419
- PartnerListScheduledPostsResponse.prototype.hasMore;
1420
- }
1421
- export class PartnerListScheduledSocialPostsRequest {
1422
- /**
1423
- * @param {?} proto
1424
- * @return {?}
1425
- */
1426
- static fromProto(proto) {
1427
- /** @type {?} */
1428
- let m = new PartnerListScheduledSocialPostsRequest();
1429
- m = Object.assign(m, proto);
1430
- if (proto.filters) {
1431
- m.filters = PartnerListScheduledSocialPostsRequestFilters.fromProto(proto.filters);
1432
- }
1433
- if (proto.pageSize) {
1434
- m.pageSize = parseInt(proto.pageSize, 10);
1435
- }
1436
- return m;
1437
- }
1438
- /**
1439
- * @param {?=} kwargs
1440
- */
1441
- constructor(kwargs) {
1442
- if (!kwargs) {
1443
- return;
1444
- }
1445
- Object.assign(this, kwargs);
1446
- }
1447
- /**
1448
- * @return {?}
1449
- */
1450
- toApiJson() {
1451
- /** @type {?} */
1452
- const toReturn = {};
1453
- if (typeof this.cursor !== 'undefined') {
1454
- toReturn['cursor'] = this.cursor;
1455
- }
1456
- if (typeof this.filters !== 'undefined' && this.filters !== null) {
1457
- toReturn['filters'] = 'toApiJson' in this.filters ? ((/** @type {?} */ (this.filters))).toApiJson() : this.filters;
1458
- }
1459
- if (typeof this.pageSize !== 'undefined') {
1460
- toReturn['pageSize'] = this.pageSize;
1461
- }
1462
- return toReturn;
1463
- }
1464
- }
1465
- if (false) {
1466
- /** @type {?} */
1467
- PartnerListScheduledSocialPostsRequest.prototype.cursor;
1468
- /** @type {?} */
1469
- PartnerListScheduledSocialPostsRequest.prototype.filters;
1470
- /** @type {?} */
1471
- PartnerListScheduledSocialPostsRequest.prototype.pageSize;
1472
- }
1473
- export class RemoveFromMultilocationPostRequest {
1474
- /**
1475
- * @param {?} proto
1476
- * @return {?}
1477
- */
1478
- static fromProto(proto) {
1479
- /** @type {?} */
1480
- let m = new RemoveFromMultilocationPostRequest();
1481
- m = Object.assign(m, proto);
1482
- if (proto.reason) {
1483
- m.reason = enumStringToValue(e.RemoveReason, proto.reason);
1484
- }
1485
- if (proto.locations) {
1486
- m.locations = proto.locations.map(Location.fromProto);
1487
- }
1488
- return m;
1489
- }
1490
- /**
1491
- * @param {?=} kwargs
1492
- */
1493
- constructor(kwargs) {
1494
- if (!kwargs) {
1495
- return;
1496
- }
1497
- Object.assign(this, kwargs);
1498
- }
1499
- /**
1500
- * @return {?}
1501
- */
1502
- toApiJson() {
1503
- /** @type {?} */
1504
- const toReturn = {};
1505
- if (typeof this.reason !== 'undefined') {
1506
- toReturn['reason'] = this.reason;
1507
- }
1508
- if (typeof this.brandId !== 'undefined') {
1509
- toReturn['brandId'] = this.brandId;
1510
- }
1511
- if (typeof this.multilocationId !== 'undefined') {
1512
- toReturn['multilocationId'] = this.multilocationId;
1513
- }
1514
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
1515
- toReturn['locations'] = 'toApiJson' in this.locations ? ((/** @type {?} */ (this.locations))).toApiJson() : this.locations;
1516
- }
1517
- return toReturn;
1518
- }
1519
- }
1520
- if (false) {
1521
- /** @type {?} */
1522
- RemoveFromMultilocationPostRequest.prototype.reason;
1523
- /** @type {?} */
1524
- RemoveFromMultilocationPostRequest.prototype.brandId;
1525
- /** @type {?} */
1526
- RemoveFromMultilocationPostRequest.prototype.multilocationId;
1527
- /** @type {?} */
1528
- RemoveFromMultilocationPostRequest.prototype.locations;
1529
- }
1530
- export class SchedulePostRequest {
1531
- /**
1532
- * @param {?} proto
1533
- * @return {?}
1534
- */
1535
- static fromProto(proto) {
1536
- /** @type {?} */
1537
- let m = new SchedulePostRequest();
1538
- m = Object.assign(m, proto);
1539
- if (proto.socialPost) {
1540
- m.socialPost = SocialPostData.fromProto(proto.socialPost);
1541
- }
1542
- return m;
1543
- }
1544
- /**
1545
- * @param {?=} kwargs
1546
- */
1547
- constructor(kwargs) {
1548
- if (!kwargs) {
1549
- return;
1550
- }
1551
- Object.assign(this, kwargs);
1552
- }
1553
- /**
1554
- * @return {?}
1555
- */
1556
- toApiJson() {
1557
- /** @type {?} */
1558
- const toReturn = {};
1559
- if (typeof this.socialPost !== 'undefined' && this.socialPost !== null) {
1560
- toReturn['socialPost'] = 'toApiJson' in this.socialPost ? ((/** @type {?} */ (this.socialPost))).toApiJson() : this.socialPost;
1561
- }
1562
- if (typeof this.socialServiceIds !== 'undefined') {
1563
- toReturn['socialServiceIds'] = this.socialServiceIds;
1564
- }
1565
- if (typeof this.partnerId !== 'undefined') {
1566
- toReturn['partnerId'] = this.partnerId;
1567
- }
1568
- if (typeof this.businessId !== 'undefined') {
1569
- toReturn['businessId'] = this.businessId;
1570
- }
1571
- return toReturn;
1572
- }
1573
- }
1574
- if (false) {
1575
- /** @type {?} */
1576
- SchedulePostRequest.prototype.socialPost;
1577
- /** @type {?} */
1578
- SchedulePostRequest.prototype.socialServiceIds;
1579
- /** @type {?} */
1580
- SchedulePostRequest.prototype.partnerId;
1581
- /** @type {?} */
1582
- SchedulePostRequest.prototype.businessId;
1583
- }
1584
- export class SchedulePostResponse {
1585
- /**
1586
- * @param {?} proto
1587
- * @return {?}
1588
- */
1589
- static fromProto(proto) {
1590
- /** @type {?} */
1591
- let m = new SchedulePostResponse();
1592
- m = Object.assign(m, proto);
1593
- if (proto.statuses) {
1594
- m.statuses = proto.statuses.map(SchedulePostStatus.fromProto);
1595
- }
1596
- return m;
1597
- }
1598
- /**
1599
- * @param {?=} kwargs
1600
- */
1601
- constructor(kwargs) {
1602
- if (!kwargs) {
1603
- return;
1604
- }
1605
- Object.assign(this, kwargs);
1606
- }
1607
- /**
1608
- * @return {?}
1609
- */
1610
- toApiJson() {
1611
- /** @type {?} */
1612
- const toReturn = {};
1613
- if (typeof this.statuses !== 'undefined' && this.statuses !== null) {
1614
- toReturn['statuses'] = 'toApiJson' in this.statuses ? ((/** @type {?} */ (this.statuses))).toApiJson() : this.statuses;
1615
- }
1616
- return toReturn;
1617
- }
1618
- }
1619
- if (false) {
1620
- /** @type {?} */
1621
- SchedulePostResponse.prototype.statuses;
1622
- }
1623
- export class ScheduleToAllPagesRequest {
1624
- /**
1625
- * @param {?} proto
1626
- * @return {?}
1627
- */
1628
- static fromProto(proto) {
1629
- /** @type {?} */
1630
- let m = new ScheduleToAllPagesRequest();
1631
- m = Object.assign(m, proto);
1632
- if (proto.socialPost) {
1633
- m.socialPost = SocialPostData.fromProto(proto.socialPost);
1634
- }
1635
- return m;
1636
- }
1637
- /**
1638
- * @param {?=} kwargs
1639
- */
1640
- constructor(kwargs) {
1641
- if (!kwargs) {
1642
- return;
1643
- }
1644
- Object.assign(this, kwargs);
1645
- }
1646
- /**
1647
- * @return {?}
1648
- */
1649
- toApiJson() {
1650
- /** @type {?} */
1651
- const toReturn = {};
1652
- if (typeof this.socialPost !== 'undefined' && this.socialPost !== null) {
1653
- toReturn['socialPost'] = 'toApiJson' in this.socialPost ? ((/** @type {?} */ (this.socialPost))).toApiJson() : this.socialPost;
1654
- }
1655
- if (typeof this.partnerId !== 'undefined') {
1656
- toReturn['partnerId'] = this.partnerId;
1657
- }
1658
- if (typeof this.businessId !== 'undefined') {
1659
- toReturn['businessId'] = this.businessId;
1660
- }
1661
- return toReturn;
1662
- }
1663
- }
1664
- if (false) {
1665
- /** @type {?} */
1666
- ScheduleToAllPagesRequest.prototype.socialPost;
1667
- /** @type {?} */
1668
- ScheduleToAllPagesRequest.prototype.partnerId;
1669
- /** @type {?} */
1670
- ScheduleToAllPagesRequest.prototype.businessId;
1671
- }
1672
- export class ScheduleToAllPagesResponse {
1673
- /**
1674
- * @param {?} proto
1675
- * @return {?}
1676
- */
1677
- static fromProto(proto) {
1678
- /** @type {?} */
1679
- let m = new ScheduleToAllPagesResponse();
1680
- m = Object.assign(m, proto);
1681
- if (proto.statuses) {
1682
- m.statuses = proto.statuses.map(SchedulePostStatus.fromProto);
1683
- }
1684
- return m;
1685
- }
1686
- /**
1687
- * @param {?=} kwargs
1688
- */
1689
- constructor(kwargs) {
1690
- if (!kwargs) {
1691
- return;
1692
- }
1693
- Object.assign(this, kwargs);
1694
- }
1695
- /**
1696
- * @return {?}
1697
- */
1698
- toApiJson() {
1699
- /** @type {?} */
1700
- const toReturn = {};
1701
- if (typeof this.statuses !== 'undefined' && this.statuses !== null) {
1702
- toReturn['statuses'] = 'toApiJson' in this.statuses ? ((/** @type {?} */ (this.statuses))).toApiJson() : this.statuses;
1703
- }
1704
- return toReturn;
1705
- }
1706
- }
1707
- if (false) {
1708
- /** @type {?} */
1709
- ScheduleToAllPagesResponse.prototype.statuses;
1710
- }
1711
- export class UpdatePostTemplateRequest {
1712
- /**
1713
- * @param {?} proto
1714
- * @return {?}
1715
- */
1716
- static fromProto(proto) {
1717
- /** @type {?} */
1718
- let m = new UpdatePostTemplateRequest();
1719
- m = Object.assign(m, proto);
1720
- if (proto.postDateTime) {
1721
- m.postDateTime = new Date(proto.postDateTime);
1722
- }
1723
- return m;
1724
- }
1725
- /**
1726
- * @param {?=} kwargs
1727
- */
1728
- constructor(kwargs) {
1729
- if (!kwargs) {
1730
- return;
1731
- }
1732
- Object.assign(this, kwargs);
1733
- }
1734
- /**
1735
- * @return {?}
1736
- */
1737
- toApiJson() {
1738
- /** @type {?} */
1739
- const toReturn = {};
1740
- if (typeof this.accountGroupId !== 'undefined') {
1741
- toReturn['accountGroupId'] = this.accountGroupId;
1742
- }
1743
- if (typeof this.templateId !== 'undefined') {
1744
- toReturn['templateId'] = this.templateId;
1745
- }
1746
- if (typeof this.title !== 'undefined') {
1747
- toReturn['title'] = this.title;
1748
- }
1749
- if (typeof this.postText !== 'undefined') {
1750
- toReturn['postText'] = this.postText;
1751
- }
1752
- if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
1753
- toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? ((/** @type {?} */ (this.postDateTime))).toApiJson() : this.postDateTime;
1754
- }
1755
- if (typeof this.gmbPostCustomization !== 'undefined') {
1756
- toReturn['gmbPostCustomization'] = this.gmbPostCustomization;
1757
- }
1758
- if (typeof this.imageUrl !== 'undefined') {
1759
- toReturn['imageUrl'] = this.imageUrl;
1760
- }
1761
- if (typeof this.imagePath !== 'undefined') {
1762
- toReturn['imagePath'] = this.imagePath;
1763
- }
1764
- if (typeof this.imageSize !== 'undefined') {
1765
- toReturn['imageSize'] = this.imageSize;
1766
- }
1767
- if (typeof this.previews !== 'undefined') {
1768
- toReturn['previews'] = this.previews;
1769
- }
1770
- if (typeof this.options !== 'undefined') {
1771
- toReturn['options'] = this.options;
1772
- }
1773
- if (typeof this.videoUrl !== 'undefined') {
1774
- toReturn['videoUrl'] = this.videoUrl;
1775
- }
1776
- return toReturn;
1777
- }
1778
- }
1779
- if (false) {
1780
- /** @type {?} */
1781
- UpdatePostTemplateRequest.prototype.accountGroupId;
1782
- /** @type {?} */
1783
- UpdatePostTemplateRequest.prototype.templateId;
1784
- /** @type {?} */
1785
- UpdatePostTemplateRequest.prototype.title;
1786
- /** @type {?} */
1787
- UpdatePostTemplateRequest.prototype.postText;
1788
- /** @type {?} */
1789
- UpdatePostTemplateRequest.prototype.postDateTime;
1790
- /** @type {?} */
1791
- UpdatePostTemplateRequest.prototype.gmbPostCustomization;
1792
- /** @type {?} */
1793
- UpdatePostTemplateRequest.prototype.imageUrl;
1794
- /** @type {?} */
1795
- UpdatePostTemplateRequest.prototype.imagePath;
1796
- /** @type {?} */
1797
- UpdatePostTemplateRequest.prototype.imageSize;
1798
- /** @type {?} */
1799
- UpdatePostTemplateRequest.prototype.previews;
1800
- /** @type {?} */
1801
- UpdatePostTemplateRequest.prototype.options;
1802
- /** @type {?} */
1803
- UpdatePostTemplateRequest.prototype.videoUrl;
1804
- }
1805
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy8iLCJzb3VyY2VzIjpbImxpYi9faW50ZXJuYWwvb2JqZWN0cy9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQU9BLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFVBQVUsQ0FBQzs7Ozs7OztBQUU5QixNQUFNLFVBQVUsaUJBQWlCLENBQUksT0FBWSxFQUFFLEtBQWE7SUFDOUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLE9BQU8sOEJBQThCOzs7OztJQVN2QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLDhCQUE4QixFQUFFO1FBQzVDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFBQyxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUFDO1FBQzNFLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQUM7UUFDN0UsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUFrRDtRQUMxRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQUM7UUFDckUsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FBQztRQUN4RSxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLGFBQWEsRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7U0FBQztRQUM3TSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLFNBQVMsRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNyTCxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUFDO1FBQ3JFLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUFyQ0csaURBQWdCOztJQUNoQiw4Q0FBYTs7SUFDYiwrQ0FBZ0I7O0lBQ2hCLHVEQUFvQjs7SUFDcEIsbURBQXNCOztJQUN0Qiw4Q0FBZTs7SUFDZixnREFBaUI7O0FBaUNyQixNQUFNLE9BQU8sK0JBQStCOzs7OztJQUl4QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLCtCQUErQixFQUFFO1FBQzdDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFBQyxDQUFDLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FBQztRQUNuRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQUM7UUFDbEYsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUFtRDtRQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLElBQUksRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FBQztRQUN2SixJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLE1BQU0sRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUNuSyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7OztJQTNCRywrQ0FBd0I7O0lBQ3hCLGlEQUFpQzs7QUE0QnJDLE1BQU0sT0FBTyx5QkFBeUI7Ozs7O0lBYWxDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUkseUJBQXlCLEVBQUU7UUFDdkMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQUM7UUFDeEUsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUE2QztRQUNyRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQUM7UUFDbkcsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FBQztRQUN4RSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQ2pGLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxJQUFJLENBQUMsWUFBWSxFQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUFDO1FBQ3ZNLElBQUksT0FBTyxJQUFJLENBQUMsb0JBQW9CLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1NBQUM7UUFDckgsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3BGLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUE1Q0csbURBQXVCOztJQUN2QiwwQ0FBYzs7SUFDZCw2Q0FBaUI7O0lBQ2pCLGlEQUFtQjs7SUFDbkIseURBQTZCOztJQUM3Qiw2Q0FBaUI7O0lBQ2pCLDhDQUFrQjs7SUFDbEIsOENBQWtCOztJQUNsQiw2Q0FBaUI7O0lBQ2pCLDRDQUFrQjs7SUFDbEIsNkNBQWlCOztBQW9DckIsTUFBTSxPQUFPLDBCQUEwQjs7Ozs7SUFHbkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVOztZQUNuQixDQUFDLEdBQUcsSUFBSSwwQkFBMEIsRUFBRTtRQUN4QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUE4QztRQUN0RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjs7O0lBdkJHLGdEQUFtQjs7QUF5QnZCLE1BQU0sT0FBTyxlQUFlOzs7OztJQUl4QixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLGVBQWUsRUFBRTtRQUM3QixDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7U0FBQztRQUNsRSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUFDO1FBQzVELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBbUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksQ0FBQyxVQUFVLEVBQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDM0wsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksQ0FBQyxRQUFRLEVBQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDL0ssT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUEzQkcscUNBQWlCOztJQUNqQixtQ0FBZTs7QUE0Qm5CLE1BQU0sT0FBTyw4QkFBOEI7Ozs7O0lBSXZDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUksOEJBQThCLEVBQUU7UUFDNUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBa0Q7UUFDMUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLGVBQWUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQUM7UUFDdEcsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUF6QkcsaURBQWdCOztJQUNoQix5REFBd0I7O0FBMEI1QixNQUFNLE9BQU8seUJBQXlCOzs7OztJQUlsQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLHlCQUF5QixFQUFFO1FBQ3ZDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Ozs7SUFFRCxZQUFZLE1BQTZDO1FBQ3JELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsU0FBUzs7Y0FDQyxRQUFRLEdBRVYsRUFBRTtRQUVOLElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FBQztRQUNuRyxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjs7O0lBekJHLG1EQUF1Qjs7SUFDdkIsK0NBQW1COztBQTBCdkIsTUFBTSxPQUFPLHVCQUF1Qjs7Ozs7SUFJaEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVOztZQUNuQixDQUFDLEdBQUcsSUFBSSx1QkFBdUIsRUFBRTtRQUNyQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUEyQztRQUNuRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQUM7UUFDN0YsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUF6QkcsNkNBQW1COztJQUNuQiwrQ0FBcUI7O0FBMEJ6QixNQUFNLE9BQU8sNEJBQTRCOzs7OztJQVdyQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLDRCQUE0QixFQUFFO1FBQzFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFBQyxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUFDO1FBQzNFLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUMxRSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQzdFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBZ0Q7UUFDeEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLGVBQWUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQUM7UUFDdEcsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7U0FBQztRQUNyRSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUFDO1FBQ3hFLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxJQUFJLENBQUMsYUFBYSxFQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUFDO1FBQzdNLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxJQUFJLENBQUMsU0FBUyxFQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3JMLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQUM7UUFDckUsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLFNBQVMsRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNyTCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7OztJQTFDRywrQ0FBZ0I7O0lBQ2hCLHVEQUF3Qjs7SUFDeEIsNENBQWE7O0lBQ2IsNkNBQWdCOztJQUNoQixxREFBb0I7O0lBQ3BCLGlEQUFxQjs7SUFDckIsNENBQWU7O0lBQ2YsOENBQWlCOztJQUNqQixpREFBc0I7O0FBb0MxQixNQUFNLE9BQU8sNkJBQTZCOzs7OztJQUl0QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLDZCQUE2QixFQUFFO1FBQzNDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFBQyxDQUFDLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FBQztRQUNuRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQUM7UUFDbEYsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUFpRDtRQUN6RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLElBQUksRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FBQztRQUN2SixJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLE1BQU0sRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUNuSyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7OztJQTNCRyw2Q0FBd0I7O0lBQ3hCLCtDQUFpQzs7QUE0QnJDLE1BQU0sT0FBTyw2Q0FBNkM7Ozs7O0lBSXRELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUksNkNBQTZDLEVBQUU7UUFDM0QsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUNoRixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Ozs7SUFFRCxZQUFZLE1BQWlFO1FBQ3pFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsU0FBUzs7Y0FDQyxRQUFRLEdBRVYsRUFBRTtRQUVOLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxJQUFJLENBQUMsU0FBUyxFQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3JMLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUExQkcsa0VBQTJCOztJQUMzQixrRUFBa0I7O0FBMkJ0QixNQUFNLE9BQU8sOEJBQThCOzs7OztJQUt2QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLDhCQUE4QixFQUFFO1FBQzVDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Ozs7SUFFRCxZQUFZLE1BQWtEO1FBQzFELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsU0FBUzs7Y0FDQyxRQUFRLEdBRVYsRUFBRTtRQUVOLElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7U0FBQztRQUN0RyxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUEzQkcseURBQTBCOztJQUMxQixvREFBbUI7O0lBQ25CLG1EQUFrQjs7QUEyQnRCLE1BQU0sT0FBTywrQkFBK0I7Ozs7O0lBR3hDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUksK0JBQStCLEVBQUU7UUFDN0MsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTtZQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQUM7UUFDdEcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUFtRDtRQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLGVBQWUsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxJQUFJLENBQUMsZUFBZSxFQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUFDO1FBQ3pOLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjs7O0lBeEJHLDBEQUFtQzs7QUEwQnZDLE1BQU0sT0FBTywwQkFBMEI7Ozs7O0lBSW5DLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUksMEJBQTBCLEVBQUU7UUFDeEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBOEM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLGVBQWUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQUM7UUFDdEcsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUF6QkcsZ0RBQW1COztJQUNuQixxREFBMEI7O0FBMEI5QixNQUFNLE9BQU8sMkJBQTJCOzs7OztJQUdwQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLDJCQUEyQixFQUFFO1FBQ3pDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQ3JGLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBK0M7UUFDdkQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQUM7UUFDak0sT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUF4Qkcsa0RBQTBCOztBQTBCOUIsTUFBTSxPQUFPLDJCQUEyQjs7Ozs7SUFJcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVOztZQUNuQixDQUFDLEdBQUcsSUFBSSwyQkFBMkIsRUFBRTtRQUN6QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUErQztRQUN2RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7U0FBQztRQUN0RyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7OztJQXpCRyw4Q0FBZ0I7O0lBQ2hCLHNEQUF3Qjs7QUEwQjVCLE1BQU0sT0FBTyw0QkFBNEI7Ozs7O0lBR3JDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUksNEJBQTRCLEVBQUU7UUFDMUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO1lBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUFDO1FBQzFHLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBZ0Q7UUFDeEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLGlCQUFpQixFQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1NBQUM7UUFDck8sT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUF4QkcseURBQXFDOztBQTBCekMsTUFBTSxPQUFPLHNCQUFzQjs7Ozs7SUFJL0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVOztZQUNuQixDQUFDLEdBQUcsSUFBSSxzQkFBc0IsRUFBRTtRQUNwQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUEwQztRQUNsRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQUM7UUFDbkcsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7OztJQXpCRyxnREFBdUI7O0lBQ3ZCLDRDQUFtQjs7QUEwQnZCLE1BQU0sT0FBTyx1QkFBdUI7Ozs7O0lBR2hDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUksdUJBQXVCLEVBQUU7UUFDckMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FBQztRQUN0RixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Ozs7SUFFRCxZQUFZLE1BQTJDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsU0FBUzs7Y0FDQyxRQUFRLEdBRVYsRUFBRTtRQUVOLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxJQUFJLENBQUMsWUFBWSxFQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUFDO1FBQ3ZNLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjs7O0lBeEJHLCtDQUEyQjs7QUEwQi9CLE1BQU0sT0FBTyw0QkFBNEI7Ozs7O0lBS3JDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUksNEJBQTRCLEVBQUU7UUFDMUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBZ0Q7UUFDeEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNwRixJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1NBQUM7UUFDekcsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUEzQkcsaURBQWtCOztJQUNsQixrREFBbUI7O0lBQ25CLHdEQUEyQjs7QUEyQi9CLE1BQU0sT0FBTyw2QkFBNkI7Ozs7O0lBR3RDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUksNkJBQTZCLEVBQUU7UUFDM0MsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtZQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUN2RCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Ozs7SUFFRCxZQUFZLE1BQWlEO1FBQ3pELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsU0FBUzs7Y0FDQyxRQUFRLEdBRVYsRUFBRTtRQUVOLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQUM7UUFDeEUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUF4QkcsOENBQWM7O0FBMEJsQixNQUFNLE9BQU8scUNBQXFDOzs7OztJQU85QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLHFDQUFxQyxFQUFFO1FBQ25ELENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQy9ELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQUM7UUFDekQsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUFDO1FBQ2hFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBeUQ7UUFDakUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLFNBQVMsRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNyTCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLE9BQU8sRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUN6SyxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUFsQ0csd0RBQWdCOztJQUNoQiwwREFBZ0I7O0lBQ2hCLHdEQUFjOztJQUNkLHVEQUFlOztJQUNmLHlEQUFpQjs7QUFnQ3JCLE1BQU0sT0FBTyxzQ0FBc0M7Ozs7O0lBTS9DLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUksc0NBQXNDLEVBQUU7UUFDcEQsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLGtCQUFrQixFQUFFO1lBQUMsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUNqSCxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtZQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQ3ZHLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBMEQ7UUFDbEUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLGtCQUFrQixFQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1NBQUM7UUFDM08sSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsaUJBQWlCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksQ0FBQyxpQkFBaUIsRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztTQUFDO1FBQ3JPLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjs7O0lBL0JHLG9FQUF3Qzs7SUFDeEMsNERBQW1COztJQUNuQix5REFBaUI7O0lBQ2pCLG1FQUFnQzs7QUE4QnBDLE1BQU0sT0FBTyx3QkFBd0I7Ozs7O0lBS2pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUksd0JBQXdCLEVBQUU7UUFDdEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUNoRSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Ozs7SUFFRCxZQUFZLE1BQTRDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsU0FBUzs7Y0FDQyxRQUFRLEdBRVYsRUFBRTtRQUVOLElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FBQztRQUNuRyxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUE1Qkcsa0RBQXVCOztJQUN2QiwwQ0FBZTs7SUFDZiw0Q0FBaUI7O0FBNEJyQixNQUFNLE9BQU8seUJBQXlCOzs7OztJQUtsQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLHlCQUF5QixFQUFFO1FBQ3ZDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7WUFBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQzFGLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBNkM7UUFDckQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksQ0FBQyxZQUFZLEVBQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQUM7UUFDdk0sSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjs7O0lBNUJHLGlEQUE2Qjs7SUFDN0IsK0NBQW1COztJQUNuQiw0Q0FBaUI7O0FBNEJyQixNQUFNLE9BQU8sc0JBQXNCOzs7OztJQVUvQixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLHNCQUFzQixFQUFFO1FBQ3BDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUFDO1FBQ25ELElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQUM7UUFDN0MsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUFDO1FBQ2hFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBMEM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksQ0FBQyxLQUFLLEVBQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQUM7UUFDN0osSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksQ0FBQyxHQUFHLEVBQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQUM7UUFDakosSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3BGLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FBQztRQUN6RyxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUFDO1FBQ3JFLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUF4Q0csdUNBQVk7O0lBQ1oscUNBQVU7O0lBQ1YsNENBQW1COztJQUNuQiwyQ0FBa0I7O0lBQ2xCLHdDQUFlOztJQUNmLGtEQUEyQjs7SUFDM0Isc0NBQWU7O0lBQ2YsMENBQWlCOztBQW1DckIsTUFBTSxPQUFPLHVCQUF1Qjs7Ozs7SUFLaEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVOztZQUNuQixDQUFDLEdBQUcsSUFBSSx1QkFBdUIsRUFBRTtRQUNyQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUNyRixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Ozs7SUFFRCxZQUFZLE1BQTJDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsU0FBUzs7Y0FDQyxRQUFRLEdBRVYsRUFBRTtRQUVOLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxJQUFJLENBQUMsV0FBVyxFQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUFDO1FBQ2pNLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7OztJQTVCRyw4Q0FBMEI7O0lBQzFCLDZDQUFtQjs7SUFDbkIsMENBQWlCOztBQTRCckIsTUFBTSxPQUFPLGlDQUFpQzs7Ozs7SUFLMUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVOztZQUNuQixDQUFDLEdBQUcsSUFBSSxpQ0FBaUMsRUFBRTtRQUMvQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUNyRixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Ozs7SUFFRCxZQUFZLE1BQXFEO1FBQzdELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsU0FBUzs7Y0FDQyxRQUFRLEdBRVYsRUFBRTtRQUVOLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxJQUFJLENBQUMsV0FBVyxFQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUFDO1FBQ2pNLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7OztJQTVCRyx3REFBMEI7O0lBQzFCLHVEQUFtQjs7SUFDbkIsb0RBQWlCOztBQTRCckIsTUFBTSxPQUFPLHNDQUFzQzs7Ozs7SUFLL0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVOztZQUNuQixDQUFDLEdBQUcsSUFBSSxzQ0FBc0MsRUFBRTtRQUNwRCxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyw2Q0FBNkMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQUM7UUFDeEcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUFDO1FBQ2hFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBMEQ7UUFDbEUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLE9BQU8sRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUN6SyxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQ2pGLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjs7O0lBN0JHLHdEQUFlOztJQUNmLHlEQUF1RDs7SUFDdkQsMERBQWlCOztBQTZCckIsTUFBTSxPQUFPLGtDQUFrQzs7Ozs7SUFNM0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVOztZQUNuQixDQUFDLEdBQUcsSUFBSSxrQ0FBa0MsRUFBRTtRQUNoRCxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBaUIsQ0FBQyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FBQztRQUMvRixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQzdFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELFlBQVksTUFBc0Q7UUFDOUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7SUFFRCxTQUFTOztjQUNDLFFBQVEsR0FFVixFQUFFO1FBRU4sSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7U0FBQztRQUN0RyxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLFNBQVMsRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNyTCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7OztJQS9CRyxvREFBdUI7O0lBQ3ZCLHFEQUFnQjs7SUFDaEIsNkRBQXdCOztJQUN4Qix1REFBc0I7O0FBOEIxQixNQUFNLE9BQU8sbUJBQW1COzs7OztJQU01QixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLG1CQUFtQixFQUFFO1FBQ2pDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFBQyxDQUFDLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQUM7UUFDbEYsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUF1QztRQUMvQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLFVBQVUsRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUMzTCxJQUFJLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUFDO1FBQ3pHLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7OztJQTlCRyx5Q0FBMkI7O0lBQzNCLCtDQUEyQjs7SUFDM0Isd0NBQWtCOztJQUNsQix5Q0FBbUI7O0FBNkJ2QixNQUFNLE9BQU8sb0JBQW9COzs7OztJQUc3QixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLG9CQUFvQixFQUFFO1FBQ2xDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQUM7UUFDcEYsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUF3QztRQUNoRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLFFBQVEsRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUMvSyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7OztJQXhCRyx3Q0FBK0I7O0FBMEJuQyxNQUFNLE9BQU8seUJBQXlCOzs7OztJQUtsQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7O1lBQ25CLENBQUMsR0FBRyxJQUFJLHlCQUF5QixFQUFFO1FBQ3ZDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFBQyxDQUFDLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQUM7UUFDbEYsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUE2QztRQUNyRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLFVBQVUsRUFBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUMzTCxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3BGLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKOzs7SUE1QkcsK0NBQTJCOztJQUMzQiw4Q0FBa0I7O0lBQ2xCLCtDQUFtQjs7QUE0QnZCLE1BQU0sT0FBTywwQkFBMEI7Ozs7O0lBR25DLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUksMEJBQTBCLEVBQUU7UUFDeEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUNwRixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Ozs7SUFFRCxZQUFZLE1BQThDO1FBQ3RELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsU0FBUzs7Y0FDQyxRQUFRLEdBRVYsRUFBRTtRQUVOLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxJQUFJLENBQUMsUUFBUSxFQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQy9LLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjs7O0lBeEJHLDhDQUErQjs7QUEwQm5DLE1BQU0sT0FBTyx5QkFBeUI7Ozs7O0lBY2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTs7WUFDbkIsQ0FBQyxHQUFHLElBQUkseUJBQXlCLEVBQUU7UUFDdkMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQUM7UUFDeEUsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzs7O0lBRUQsWUFBWSxNQUE2QztRQUNyRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7OztJQUVELFNBQVM7O2NBQ0MsUUFBUSxHQUVWLEVBQUU7UUFFTixJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQUM7UUFDbkcsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUFDO1FBQ3hFLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksQ0FBQyxZQUFZLEVBQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQUM7UUFDdk0sSUFBSSxPQUFPLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7U0FBQztRQUNySCxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQ2pGLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNwRixJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQ2pGLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7OztJQTlDRyxtREFBdUI7O0lBQ3ZCLCtDQUFtQjs7SUFDbkIsMENBQWM7O0lBQ2QsNkNBQWlCOztJQUNqQixpREFBbUI7O0lBQ25CLHlEQUE2Qjs7SUFDN0IsNkNBQWlCOztJQUNqQiw4Q0FBa0I7O0lBQ2xCLDhDQUFrQjs7SUFDbEIsNkNBQWlCOztJQUNqQiw0Q0FBa0I7O0lBQ2xCLDZDQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZpZWxkTWFzayB9IGZyb20gJy4vZmllbGQtbWFzayc7XG5pbXBvcnQgeyBMb2NhdGlvbiwgTXVsdGlsb2NhdGlvblBvc3QsIE11bHRpbG9jYXRpb25Qb3N0RXJyb3IgfSBmcm9tICcuL211bHRpbG9jYXRpb24tcG9zdCc7XG5pbXBvcnQgeyBQb3N0VGVtcGxhdGUgfSBmcm9tICcuL3Bvc3QtdGVtcGxhdGVzJztcbmltcG9ydCB7IFNvY2lhbFBvc3QsIFNvY2lhbFBvc3REYXRhLCBTY2hlZHVsZVBvc3RTdGF0dXMgfSBmcm9tICcuL3NvY2lhbC1wb3N0cyc7XG5pbXBvcnQgeyBTb2NpYWxQb3N0U3RhdHMgfSBmcm9tICcuL3NvY2lhbC1wb3N0LXN0YXRzJztcbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIG1lZGlhOiBzdHJpbmdbXTtcbiAgICBzY2hlZHVsZWREYXRlOiBEYXRlO1xuICAgIGxvY2F0aW9uczogTG9jYXRpb25bXTtcbiAgICBnaWZzOiBzdHJpbmdbXTtcbiAgICB2aWRlb3M6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNjaGVkdWxlZERhdGUpIHttLnNjaGVkdWxlZERhdGUgPSBuZXcgRGF0ZShwcm90by5zY2hlZHVsZWREYXRlKTt9XG4gICAgICAgIGlmIChwcm90by5sb2NhdGlvbnMpIHttLmxvY2F0aW9ucyA9IHByb3RvLmxvY2F0aW9ucy5tYXAoTG9jYXRpb24uZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRleHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RleHQnXSA9IHRoaXMudGV4dDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWRpYSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVkaWEnXSA9IHRoaXMubWVkaWE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2NoZWR1bGVkRGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zY2hlZHVsZWREYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NjaGVkdWxlZERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc2NoZWR1bGVkRGF0ZSA/ICh0aGlzLnNjaGVkdWxlZERhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc2NoZWR1bGVkRGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2NhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubG9jYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2xvY2F0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5sb2NhdGlvbnMgPyAodGhpcy5sb2NhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubG9jYXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdpZnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dpZnMnXSA9IHRoaXMuZ2lmczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZpZGVvcyddID0gdGhpcy52aWRlb3M7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcG9zdDogTXVsdGlsb2NhdGlvblBvc3Q7XG4gICAgZXJyb3JzOiBNdWx0aWxvY2F0aW9uUG9zdEVycm9yW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0KSB7bS5wb3N0ID0gTXVsdGlsb2NhdGlvblBvc3QuZnJvbVByb3RvKHByb3RvLnBvc3QpO31cbiAgICAgICAgaWYgKHByb3RvLmVycm9ycykge20uZXJyb3JzID0gcHJvdG8uZXJyb3JzLm1hcChNdWx0aWxvY2F0aW9uUG9zdEVycm9yLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBvc3QgIT09IG51bGwpIHt0b1JldHVyblsncG9zdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wb3N0ID8gKHRoaXMucG9zdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lcnJvcnMgIT09IG51bGwpIHt0b1JldHVyblsnZXJyb3JzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVycm9ycyA/ICh0aGlzLmVycm9ycyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lcnJvcnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHBvc3RUZXh0OiBzdHJpbmc7XG4gICAgcG9zdERhdGVUaW1lOiBEYXRlO1xuICAgIGdtYlBvc3RDdXN0b21pemF0aW9uOiBzdHJpbmc7XG4gICAgaW1hZ2VVcmw6IHN0cmluZztcbiAgICBpbWFnZVBhdGg6IHN0cmluZztcbiAgICBpbWFnZVNpemU6IHN0cmluZztcbiAgICBwcmV2aWV3czogc3RyaW5nO1xuICAgIG9wdGlvbnM6IHN0cmluZ1tdO1xuICAgIHZpZGVvVXJsOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0RGF0ZVRpbWUpIHttLnBvc3REYXRlVGltZSA9IG5ldyBEYXRlKHByb3RvLnBvc3REYXRlVGltZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RpdGxlJ10gPSB0aGlzLnRpdGxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3RUZXh0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwb3N0VGV4dCddID0gdGhpcy5wb3N0VGV4dDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0RGF0ZVRpbWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucG9zdERhdGVUaW1lICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Bvc3REYXRlVGltZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wb3N0RGF0ZVRpbWUgPyAodGhpcy5wb3N0RGF0ZVRpbWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucG9zdERhdGVUaW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdtYlBvc3RDdXN0b21pemF0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydnbWJQb3N0Q3VzdG9taXphdGlvbiddID0gdGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VVcmwnXSA9IHRoaXMuaW1hZ2VVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VQYXRoICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbWFnZVBhdGgnXSA9IHRoaXMuaW1hZ2VQYXRoO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VTaXplJ10gPSB0aGlzLmltYWdlU2l6ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmV2aWV3cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJldmlld3MnXSA9IHRoaXMucHJldmlld3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3B0aW9ucyddID0gdGhpcy5vcHRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZpZGVvVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aWRlb1VybCddID0gdGhpcy52aWRlb1VybDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVQb3N0VGVtcGxhdGVSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRlbXBsYXRlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGVtcGxhdGVJZCddID0gdGhpcy50ZW1wbGF0ZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVSYW5nZUZpbHRlciBpbXBsZW1lbnRzIGkuRGF0ZVJhbmdlRmlsdGVySW50ZXJmYWNlIHtcbiAgICBiZWdpblJhbmdlOiBEYXRlO1xuICAgIGVuZFJhbmdlOiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGF0ZVJhbmdlRmlsdGVyIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGF0ZVJhbmdlRmlsdGVyKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmJlZ2luUmFuZ2UpIHttLmJlZ2luUmFuZ2UgPSBuZXcgRGF0ZShwcm90by5iZWdpblJhbmdlKTt9XG4gICAgICAgIGlmIChwcm90by5lbmRSYW5nZSkge20uZW5kUmFuZ2UgPSBuZXcgRGF0ZShwcm90by5lbmRSYW5nZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRhdGVSYW5nZUZpbHRlckludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJlZ2luUmFuZ2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYmVnaW5SYW5nZSAhPT0gbnVsbCkge3RvUmV0dXJuWydiZWdpblJhbmdlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmJlZ2luUmFuZ2UgPyAodGhpcy5iZWdpblJhbmdlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmJlZ2luUmFuZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5kUmFuZ2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kUmFuZ2UgIT09IG51bGwpIHt0b1JldHVyblsnZW5kUmFuZ2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZW5kUmFuZ2UgPyAodGhpcy5lbmRSYW5nZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lbmRSYW5nZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIG11bHRpbG9jYXRpb25JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5icmFuZElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydicmFuZElkJ10gPSB0aGlzLmJyYW5kSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubXVsdGlsb2NhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtdWx0aWxvY2F0aW9uSWQnXSA9IHRoaXMubXVsdGlsb2NhdGlvbklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG4gICAgdGVtcGxhdGVJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlUG9zdFRlbXBsYXRlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGVtcGxhdGVJZCddID0gdGhpcy50ZW1wbGF0ZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVTb2NpYWxQb3N0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICAgIHNvY2lhbFBvc3RJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlU29jaWFsUG9zdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVTb2NpYWxQb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlU29jaWFsUG9zdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idXNpbmVzc0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidXNpbmVzc0lkJ10gPSB0aGlzLmJ1c2luZXNzSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsUG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxQb3N0SWQnXSA9IHRoaXMuc29jaWFsUG9zdElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgaW1wbGVtZW50cyBpLkVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJyYW5kSWQ6IHN0cmluZztcbiAgICBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZztcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgbWVkaWE6IHN0cmluZ1tdO1xuICAgIHNjaGVkdWxlZERhdGU6IERhdGU7XG4gICAgZmllbGRNYXNrOiBGaWVsZE1hc2s7XG4gICAgZ2lmczogc3RyaW5nW107XG4gICAgdmlkZW9zOiBzdHJpbmdbXTtcbiAgICBsb2NhdGlvbnM6IExvY2F0aW9uW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zY2hlZHVsZWREYXRlKSB7bS5zY2hlZHVsZWREYXRlID0gbmV3IERhdGUocHJvdG8uc2NoZWR1bGVkRGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8uZmllbGRNYXNrKSB7bS5maWVsZE1hc2sgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmZpZWxkTWFzayk7fVxuICAgICAgICBpZiAocHJvdG8ubG9jYXRpb25zKSB7bS5sb2NhdGlvbnMgPSBwcm90by5sb2NhdGlvbnMubWFwKExvY2F0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5icmFuZElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydicmFuZElkJ10gPSB0aGlzLmJyYW5kSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubXVsdGlsb2NhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtdWx0aWxvY2F0aW9uSWQnXSA9IHRoaXMubXVsdGlsb2NhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRleHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RleHQnXSA9IHRoaXMudGV4dDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWRpYSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVkaWEnXSA9IHRoaXMubWVkaWE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2NoZWR1bGVkRGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zY2hlZHVsZWREYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NjaGVkdWxlZERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc2NoZWR1bGVkRGF0ZSA/ICh0aGlzLnNjaGVkdWxlZERhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc2NoZWR1bGVkRGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdpZnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dpZnMnXSA9IHRoaXMuZ2lmczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZpZGVvcyddID0gdGhpcy52aWRlb3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmxvY2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydsb2NhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubG9jYXRpb25zID8gKHRoaXMubG9jYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmxvY2F0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBvc3Q6IE11bHRpbG9jYXRpb25Qb3N0O1xuICAgIGVycm9yczogTXVsdGlsb2NhdGlvblBvc3RFcnJvcltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0KSB7bS5wb3N0ID0gTXVsdGlsb2NhdGlvblBvc3QuZnJvbVByb3RvKHByb3RvLnBvc3QpO31cbiAgICAgICAgaWYgKHByb3RvLmVycm9ycykge20uZXJyb3JzID0gcHJvdG8uZXJyb3JzLm1hcChNdWx0aWxvY2F0aW9uUG9zdEVycm9yLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Bvc3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdCA/ICh0aGlzLnBvc3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucG9zdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lcnJvcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXJyb3JzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Vycm9ycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lcnJvcnMgPyAodGhpcy5lcnJvcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXJyb3JzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVycyBpbXBsZW1lbnRzIGkuUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBkYXRlUmFuZ2U6IERhdGVSYW5nZUZpbHRlcjtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVycyB7XG4gICAgICAgIGxldCBtID0gbmV3IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVycygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kYXRlUmFuZ2UpIHttLmRhdGVSYW5nZSA9IERhdGVSYW5nZUZpbHRlci5mcm9tUHJvdG8ocHJvdG8uZGF0ZVJhbmdlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF0ZVJhbmdlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRhdGVSYW5nZSAhPT0gbnVsbCkge3RvUmV0dXJuWydkYXRlUmFuZ2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZGF0ZVJhbmdlID8gKHRoaXMuZGF0ZVJhbmdlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRhdGVSYW5nZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGludGVybmFsUG9zdElkczogc3RyaW5nW107XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnRlcm5hbFBvc3RJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludGVybmFsUG9zdElkcyddID0gdGhpcy5pbnRlcm5hbFBvc3RJZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBzb2NpYWxQb3N0U3RhdHM6IFNvY2lhbFBvc3RTdGF0c1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc29jaWFsUG9zdFN0YXRzKSB7bS5zb2NpYWxQb3N0U3RhdHMgPSBwcm90by5zb2NpYWxQb3N0U3RhdHMubWFwKFNvY2lhbFBvc3RTdGF0cy5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsUG9zdFN0YXRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNvY2lhbFBvc3RTdGF0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydzb2NpYWxQb3N0U3RhdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc29jaWFsUG9zdFN0YXRzID8gKHRoaXMuc29jaWFsUG9zdFN0YXRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNvY2lhbFBvc3RTdGF0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcbiAgICBpbnRlcm5hbFBvc3RJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idXNpbmVzc0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidXNpbmVzc0lkJ10gPSB0aGlzLmJ1c2luZXNzSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW50ZXJuYWxQb3N0SWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnRlcm5hbFBvc3RJZHMnXSA9IHRoaXMuaW50ZXJuYWxQb3N0SWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBzb2NpYWxQb3N0czogU29jaWFsUG9zdFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNvY2lhbFBvc3RzKSB7bS5zb2NpYWxQb3N0cyA9IHByb3RvLnNvY2lhbFBvc3RzLm1hcChTb2NpYWxQb3N0LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3RzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNvY2lhbFBvc3RzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NvY2lhbFBvc3RzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNvY2lhbFBvc3RzID8gKHRoaXMuc29jaWFsUG9zdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc29jaWFsUG9zdHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJyYW5kSWQ6IHN0cmluZztcbiAgICBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvbklkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtdWx0aWxvY2F0aW9uUG9zdDogTXVsdGlsb2NhdGlvblBvc3Q7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tdWx0aWxvY2F0aW9uUG9zdCkge20ubXVsdGlsb2NhdGlvblBvc3QgPSBNdWx0aWxvY2F0aW9uUG9zdC5mcm9tUHJvdG8ocHJvdG8ubXVsdGlsb2NhdGlvblBvc3QpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubXVsdGlsb2NhdGlvblBvc3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubXVsdGlsb2NhdGlvblBvc3QgIT09IG51bGwpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvblBvc3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubXVsdGlsb2NhdGlvblBvc3QgPyAodGhpcy5tdWx0aWxvY2F0aW9uUG9zdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tdWx0aWxvY2F0aW9uUG9zdDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIHRlbXBsYXRlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFBvc3RUZW1wbGF0ZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RlbXBsYXRlSWQnXSA9IHRoaXMudGVtcGxhdGVJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRQb3N0VGVtcGxhdGVSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBvc3RUZW1wbGF0ZTogUG9zdFRlbXBsYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRQb3N0VGVtcGxhdGVSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0VGVtcGxhdGUpIHttLnBvc3RUZW1wbGF0ZSA9IFBvc3RUZW1wbGF0ZS5mcm9tUHJvdG8ocHJvdG8ucG9zdFRlbXBsYXRlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGVtcGxhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucG9zdFRlbXBsYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Bvc3RUZW1wbGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wb3N0VGVtcGxhdGUgPyAodGhpcy5wb3N0VGVtcGxhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucG9zdFRlbXBsYXRlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcbiAgICBzb2NpYWxTZXJ2aWNlSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxTZXJ2aWNlSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxTZXJ2aWNlSWRzJ10gPSB0aGlzLnNvY2lhbFNlcnZpY2VJZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0U2NoZWR1bGVkUG9zdENvdW50UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjb3VudDogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0U2NoZWR1bGVkUG9zdENvdW50UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb3VudCkge20uY291bnQgPSBwYXJzZUludChwcm90by5jb3VudCwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvdW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb3VudCddID0gdGhpcy5jb3VudDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgc3RhcnREYXRlOiBEYXRlO1xuICAgIGVuZERhdGU6IERhdGU7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN0YXJ0RGF0ZSkge20uc3RhcnREYXRlID0gbmV3IERhdGUocHJvdG8uc3RhcnREYXRlKTt9XG4gICAgICAgIGlmIChwcm90by5lbmREYXRlKSB7bS5lbmREYXRlID0gbmV3IERhdGUocHJvdG8uZW5kRGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnZVNpemUpIHttLnBhZ2VTaXplID0gcGFyc2VJbnQocHJvdG8ucGFnZVNpemUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGFydERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhcnREYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXJ0RGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdGFydERhdGUgPyAodGhpcy5zdGFydERhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhcnREYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kRGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydlbmREYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVuZERhdGUgPyAodGhpcy5lbmREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVuZERhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2VTaXplICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYWdlU2l6ZSddID0gdGhpcy5wYWdlU2l6ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG11bHRpbG9jYXRpb25Qb3N0czogTXVsdGlsb2NhdGlvblBvc3RbXTtcbiAgICBuZXh0Q3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcbiAgICBmYWlsZWRTb2NpYWxQb3N0czogU29jaWFsUG9zdFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tdWx0aWxvY2F0aW9uUG9zdHMpIHttLm11bHRpbG9jYXRpb25Qb3N0cyA9IHByb3RvLm11bHRpbG9jYXRpb25Qb3N0cy5tYXAoTXVsdGlsb2NhdGlvblBvc3QuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5mYWlsZWRTb2NpYWxQb3N0cykge20uZmFpbGVkU29jaWFsUG9zdHMgPSBwcm90by5mYWlsZWRTb2NpYWxQb3N0cy5tYXAoU29jaWFsUG9zdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tdWx0aWxvY2F0aW9uUG9zdHMgIT09IG51bGwpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvblBvc3RzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0cyA/ICh0aGlzLm11bHRpbG9jYXRpb25Qb3N0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tdWx0aWxvY2F0aW9uUG9zdHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mYWlsZWRTb2NpYWxQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5mYWlsZWRTb2NpYWxQb3N0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydmYWlsZWRTb2NpYWxQb3N0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5mYWlsZWRTb2NpYWxQb3N0cyA/ICh0aGlzLmZhaWxlZFNvY2lhbFBvc3RzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZhaWxlZFNvY2lhbFBvc3RzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RQb3N0VGVtcGxhdGVzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFnZVNpemUpIHttLnBhZ2VTaXplID0gcGFyc2VJbnQocHJvdG8ucGFnZVNpemUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFBvc3RUZW1wbGF0ZXNSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdFBvc3RUZW1wbGF0ZXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcG9zdFRlbXBsYXRlOiBQb3N0VGVtcGxhdGVbXTtcbiAgICBuZXh0Q3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBvc3RUZW1wbGF0ZSkge20ucG9zdFRlbXBsYXRlID0gcHJvdG8ucG9zdFRlbXBsYXRlLm1hcChQb3N0VGVtcGxhdGUuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFBvc3RUZW1wbGF0ZXNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3RUZW1wbGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0VGVtcGxhdGUgIT09IG51bGwpIHt0b1JldHVyblsncG9zdFRlbXBsYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3RUZW1wbGF0ZSA/ICh0aGlzLnBvc3RUZW1wbGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0VGVtcGxhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0U29jaWFsUG9zdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0U29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzdGFydDogRGF0ZTtcbiAgICBlbmQ6IERhdGU7XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHNvY2lhbFNlcnZpY2VJZHM6IHN0cmluZ1tdO1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0U29jaWFsUG9zdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFNvY2lhbFBvc3RzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGFydCkge20uc3RhcnQgPSBuZXcgRGF0ZShwcm90by5zdGFydCk7fVxuICAgICAgICBpZiAocHJvdG8uZW5kKSB7bS5lbmQgPSBuZXcgRGF0ZShwcm90by5lbmQpO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGFydCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zdGFydCAhPT0gbnVsbCkge3RvUmV0dXJuWydzdGFydCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdGFydCA/ICh0aGlzLnN0YXJ0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN0YXJ0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lbmQgIT09IG51bGwpIHt0b1JldHVyblsnZW5kJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVuZCA/ICh0aGlzLmVuZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lbmQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsU2VydmljZUlkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsU2VydmljZUlkcyddID0gdGhpcy5zb2NpYWxTZXJ2aWNlSWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhZ3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RhZ3MnXSA9IHRoaXMudGFnczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBzb2NpYWxQb3N0czogU29jaWFsUG9zdFtdO1xuICAgIG5leHRDdXJzb3I6IHN0cmluZztcbiAgICBoYXNNb3JlOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0U29jaWFsUG9zdHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zb2NpYWxQb3N0cykge20uc29jaWFsUG9zdHMgPSBwcm90by5zb2NpYWxQb3N0cy5tYXAoU29jaWFsUG9zdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0U29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3RzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNvY2lhbFBvc3RzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NvY2lhbFBvc3RzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNvY2lhbFBvc3RzID8gKHRoaXMuc29jaWFsUG9zdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc29jaWFsUG9zdHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2UgaW1wbGVtZW50cyBpLlBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdHM6IFNvY2lhbFBvc3RbXTtcbiAgICBuZXh0Q3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zb2NpYWxQb3N0cykge20uc29jaWFsUG9zdHMgPSBwcm90by5zb2NpYWxQb3N0cy5tYXAoU29jaWFsUG9zdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5QYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydzb2NpYWxQb3N0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zb2NpYWxQb3N0cyA/ICh0aGlzLnNvY2lhbFBvc3RzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNvY2lhbFBvc3RzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3QgaW1wbGVtZW50cyBpLlBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBmaWx0ZXJzOiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEZpbHRlcnM7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZmlsdGVycykge20uZmlsdGVycyA9IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVycy5mcm9tUHJvdG8ocHJvdG8uZmlsdGVycyk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnZVNpemUpIHttLnBhZ2VTaXplID0gcGFyc2VJbnQocHJvdG8ucGFnZVNpemUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpbHRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVycyA/ICh0aGlzLmZpbHRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmlsdGVyczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCBpbXBsZW1lbnRzIGkuUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgcmVhc29uOiBlLlJlbW92ZVJlYXNvbjtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgbXVsdGlsb2NhdGlvbklkOiBzdHJpbmc7XG4gICAgbG9jYXRpb25zOiBMb2NhdGlvbltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucmVhc29uKSB7bS5yZWFzb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlJlbW92ZVJlYXNvbj4oZS5SZW1vdmVSZWFzb24sIHByb3RvLnJlYXNvbik7fVxuICAgICAgICBpZiAocHJvdG8ubG9jYXRpb25zKSB7bS5sb2NhdGlvbnMgPSBwcm90by5sb2NhdGlvbnMubWFwKExvY2F0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZWFzb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JlYXNvbiddID0gdGhpcy5yZWFzb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvbklkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2NhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubG9jYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2xvY2F0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5sb2NhdGlvbnMgPyAodGhpcy5sb2NhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubG9jYXRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlUG9zdFJlcXVlc3QgaW1wbGVtZW50cyBpLlNjaGVkdWxlUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHNvY2lhbFBvc3Q6IFNvY2lhbFBvc3REYXRhO1xuICAgIHNvY2lhbFNlcnZpY2VJZHM6IHN0cmluZ1tdO1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNjaGVkdWxlUG9zdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTY2hlZHVsZVBvc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNvY2lhbFBvc3QpIHttLnNvY2lhbFBvc3QgPSBTb2NpYWxQb3N0RGF0YS5mcm9tUHJvdG8ocHJvdG8uc29jaWFsUG9zdCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNjaGVkdWxlUG9zdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxQb3N0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNvY2lhbFBvc3QgIT09IG51bGwpIHt0b1JldHVyblsnc29jaWFsUG9zdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zb2NpYWxQb3N0ID8gKHRoaXMuc29jaWFsUG9zdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zb2NpYWxQb3N0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFNlcnZpY2VJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFNlcnZpY2VJZHMnXSA9IHRoaXMuc29jaWFsU2VydmljZUlkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlUG9zdFJlc3BvbnNlIGltcGxlbWVudHMgaS5TY2hlZHVsZVBvc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc3RhdHVzZXM6IFNjaGVkdWxlUG9zdFN0YXR1c1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2NoZWR1bGVQb3N0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBTY2hlZHVsZVBvc3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGF0dXNlcykge20uc3RhdHVzZXMgPSBwcm90by5zdGF0dXNlcy5tYXAoU2NoZWR1bGVQb3N0U3RhdHVzLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNjaGVkdWxlUG9zdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhdHVzZXMgIT09IG51bGwpIHt0b1JldHVyblsnc3RhdHVzZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhdHVzZXMgPyAodGhpcy5zdGF0dXNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdGF0dXNlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5TY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzb2NpYWxQb3N0OiBTb2NpYWxQb3N0RGF0YTtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBidXNpbmVzc0lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zb2NpYWxQb3N0KSB7bS5zb2NpYWxQb3N0ID0gU29jaWFsUG9zdERhdGEuZnJvbVByb3RvKHByb3RvLnNvY2lhbFBvc3QpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsUG9zdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NvY2lhbFBvc3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc29jaWFsUG9zdCA/ICh0aGlzLnNvY2lhbFBvc3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc29jaWFsUG9zdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5TY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc3RhdHVzZXM6IFNjaGVkdWxlUG9zdFN0YXR1c1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2NoZWR1bGVUb0FsbFBhZ2VzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBTY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGF0dXNlcykge20uc3RhdHVzZXMgPSBwcm90by5zdGF0dXNlcy5tYXAoU2NoZWR1bGVQb3N0U3RhdHVzLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhdHVzZXMgIT09IG51bGwpIHt0b1JldHVyblsnc3RhdHVzZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhdHVzZXMgPyAodGhpcy5zdGF0dXNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdGF0dXNlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIHRlbXBsYXRlSWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHBvc3RUZXh0OiBzdHJpbmc7XG4gICAgcG9zdERhdGVUaW1lOiBEYXRlO1xuICAgIGdtYlBvc3RDdXN0b21pemF0aW9uOiBzdHJpbmc7XG4gICAgaW1hZ2VVcmw6IHN0cmluZztcbiAgICBpbWFnZVBhdGg6IHN0cmluZztcbiAgICBpbWFnZVNpemU6IHN0cmluZztcbiAgICBwcmV2aWV3czogc3RyaW5nO1xuICAgIG9wdGlvbnM6IHN0cmluZ1tdO1xuICAgIHZpZGVvVXJsOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0RGF0ZVRpbWUpIHttLnBvc3REYXRlVGltZSA9IG5ldyBEYXRlKHByb3RvLnBvc3REYXRlVGltZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGVtcGxhdGVJZCddID0gdGhpcy50ZW1wbGF0ZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpdGxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0aXRsZSddID0gdGhpcy50aXRsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncG9zdFRleHQnXSA9IHRoaXMucG9zdFRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdERhdGVUaW1lICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBvc3REYXRlVGltZSAhPT0gbnVsbCkge3RvUmV0dXJuWydwb3N0RGF0ZVRpbWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdERhdGVUaW1lID8gKHRoaXMucG9zdERhdGVUaW1lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBvc3REYXRlVGltZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZ21iUG9zdEN1c3RvbWl6YXRpb24nXSA9IHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlVXJsJ10gPSB0aGlzLmltYWdlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlUGF0aCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VQYXRoJ10gPSB0aGlzLmltYWdlUGF0aDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlU2l6ZSddID0gdGhpcy5pbWFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJldmlld3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByZXZpZXdzJ10gPSB0aGlzLnByZXZpZXdzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29wdGlvbnMnXSA9IHRoaXMub3B0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmlkZW9VcmwnXSA9IHRoaXMudmlkZW9Vcmw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iXX0=