@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,3668 +0,0 @@
1
- import { Injectable, ɵɵdefineInjectable, ɵɵinject } from '@angular/core';
2
- import { EnvironmentService, Environment } from '@vendasta/core';
3
- import { __assign } from 'tslib';
4
- import { HttpHeaders, HttpClient } from '@angular/common/http';
5
- import { map, share } from 'rxjs/operators';
6
- import { of } from 'rxjs';
7
-
8
- /**
9
- * @fileoverview added by tsickle
10
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
11
- */
12
- var FieldMask = /** @class */ (function () {
13
- function FieldMask(kwargs) {
14
- if (!kwargs) {
15
- return;
16
- }
17
- Object.assign(this, kwargs);
18
- }
19
- /**
20
- * @param {?} proto
21
- * @return {?}
22
- */
23
- FieldMask.fromProto = /**
24
- * @param {?} proto
25
- * @return {?}
26
- */
27
- function (proto) {
28
- /** @type {?} */
29
- var m = new FieldMask();
30
- m = Object.assign(m, proto);
31
- return m;
32
- };
33
- /**
34
- * @return {?}
35
- */
36
- FieldMask.prototype.toApiJson = /**
37
- * @return {?}
38
- */
39
- function () {
40
- /** @type {?} */
41
- var toReturn = {};
42
- if (typeof this.paths !== 'undefined') {
43
- toReturn['paths'] = this.paths;
44
- }
45
- return toReturn;
46
- };
47
- return FieldMask;
48
- }());
49
-
50
- /**
51
- * @fileoverview added by tsickle
52
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
53
- */
54
- var Location = /** @class */ (function () {
55
- function Location(kwargs) {
56
- if (!kwargs) {
57
- return;
58
- }
59
- Object.assign(this, kwargs);
60
- }
61
- /**
62
- * @param {?} proto
63
- * @return {?}
64
- */
65
- Location.fromProto = /**
66
- * @param {?} proto
67
- * @return {?}
68
- */
69
- function (proto) {
70
- /** @type {?} */
71
- var m = new Location();
72
- m = Object.assign(m, proto);
73
- return m;
74
- };
75
- /**
76
- * @return {?}
77
- */
78
- Location.prototype.toApiJson = /**
79
- * @return {?}
80
- */
81
- function () {
82
- /** @type {?} */
83
- var toReturn = {};
84
- if (typeof this.socialServiceIds !== 'undefined') {
85
- toReturn['socialServiceIds'] = this.socialServiceIds;
86
- }
87
- if (typeof this.accountGroupId !== 'undefined') {
88
- toReturn['accountGroupId'] = this.accountGroupId;
89
- }
90
- return toReturn;
91
- };
92
- return Location;
93
- }());
94
- var MultilocationPost = /** @class */ (function () {
95
- function MultilocationPost(kwargs) {
96
- if (!kwargs) {
97
- return;
98
- }
99
- Object.assign(this, kwargs);
100
- }
101
- /**
102
- * @param {?} proto
103
- * @return {?}
104
- */
105
- MultilocationPost.fromProto = /**
106
- * @param {?} proto
107
- * @return {?}
108
- */
109
- function (proto) {
110
- /** @type {?} */
111
- var m = new MultilocationPost();
112
- m = Object.assign(m, proto);
113
- if (proto.originalScheduledDate) {
114
- m.originalScheduledDate = new Date(proto.originalScheduledDate);
115
- }
116
- if (proto.originalLocations) {
117
- m.originalLocations = proto.originalLocations.map(Location.fromProto);
118
- }
119
- if (proto.editedLocations) {
120
- m.editedLocations = proto.editedLocations.map(Location.fromProto);
121
- }
122
- if (proto.deletedLocations) {
123
- m.deletedLocations = proto.deletedLocations.map(Location.fromProto);
124
- }
125
- return m;
126
- };
127
- /**
128
- * @return {?}
129
- */
130
- MultilocationPost.prototype.toApiJson = /**
131
- * @return {?}
132
- */
133
- function () {
134
- /** @type {?} */
135
- var toReturn = {};
136
- if (typeof this.brandId !== 'undefined') {
137
- toReturn['brandId'] = this.brandId;
138
- }
139
- if (typeof this.multilocationId !== 'undefined') {
140
- toReturn['multilocationId'] = this.multilocationId;
141
- }
142
- if (typeof this.originalText !== 'undefined') {
143
- toReturn['originalText'] = this.originalText;
144
- }
145
- if (typeof this.originalScheduledDate !== 'undefined' && this.originalScheduledDate !== null) {
146
- toReturn['originalScheduledDate'] = 'toApiJson' in this.originalScheduledDate ? ((/** @type {?} */ (this.originalScheduledDate))).toApiJson() : this.originalScheduledDate;
147
- }
148
- if (typeof this.originalMedia !== 'undefined') {
149
- toReturn['originalMedia'] = this.originalMedia;
150
- }
151
- if (typeof this.originalLocations !== 'undefined' && this.originalLocations !== null) {
152
- toReturn['originalLocations'] = 'toApiJson' in this.originalLocations ? ((/** @type {?} */ (this.originalLocations))).toApiJson() : this.originalLocations;
153
- }
154
- if (typeof this.editedLocations !== 'undefined' && this.editedLocations !== null) {
155
- toReturn['editedLocations'] = 'toApiJson' in this.editedLocations ? ((/** @type {?} */ (this.editedLocations))).toApiJson() : this.editedLocations;
156
- }
157
- if (typeof this.deletedLocations !== 'undefined' && this.deletedLocations !== null) {
158
- toReturn['deletedLocations'] = 'toApiJson' in this.deletedLocations ? ((/** @type {?} */ (this.deletedLocations))).toApiJson() : this.deletedLocations;
159
- }
160
- if (typeof this.originalGifs !== 'undefined') {
161
- toReturn['originalGifs'] = this.originalGifs;
162
- }
163
- if (typeof this.originalVideos !== 'undefined') {
164
- toReturn['originalVideos'] = this.originalVideos;
165
- }
166
- return toReturn;
167
- };
168
- return MultilocationPost;
169
- }());
170
- var MultilocationPostError = /** @class */ (function () {
171
- function MultilocationPostError(kwargs) {
172
- if (!kwargs) {
173
- return;
174
- }
175
- Object.assign(this, kwargs);
176
- }
177
- /**
178
- * @param {?} proto
179
- * @return {?}
180
- */
181
- MultilocationPostError.fromProto = /**
182
- * @param {?} proto
183
- * @return {?}
184
- */
185
- function (proto) {
186
- /** @type {?} */
187
- var m = new MultilocationPostError();
188
- m = Object.assign(m, proto);
189
- return m;
190
- };
191
- /**
192
- * @return {?}
193
- */
194
- MultilocationPostError.prototype.toApiJson = /**
195
- * @return {?}
196
- */
197
- function () {
198
- /** @type {?} */
199
- var toReturn = {};
200
- if (typeof this.socialServiceId !== 'undefined') {
201
- toReturn['socialServiceId'] = this.socialServiceId;
202
- }
203
- if (typeof this.accountGroupId !== 'undefined') {
204
- toReturn['accountGroupId'] = this.accountGroupId;
205
- }
206
- if (typeof this.errorReason !== 'undefined') {
207
- toReturn['errorReason'] = this.errorReason;
208
- }
209
- return toReturn;
210
- };
211
- return MultilocationPostError;
212
- }());
213
-
214
- /**
215
- * @fileoverview added by tsickle
216
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
217
- */
218
- var PostTemplate = /** @class */ (function () {
219
- function PostTemplate(kwargs) {
220
- if (!kwargs) {
221
- return;
222
- }
223
- Object.assign(this, kwargs);
224
- }
225
- /**
226
- * @param {?} proto
227
- * @return {?}
228
- */
229
- PostTemplate.fromProto = /**
230
- * @param {?} proto
231
- * @return {?}
232
- */
233
- function (proto) {
234
- /** @type {?} */
235
- var m = new PostTemplate();
236
- m = Object.assign(m, proto);
237
- if (proto.created) {
238
- m.created = new Date(proto.created);
239
- }
240
- if (proto.updated) {
241
- m.updated = new Date(proto.updated);
242
- }
243
- if (proto.postDateTime) {
244
- m.postDateTime = new Date(proto.postDateTime);
245
- }
246
- return m;
247
- };
248
- /**
249
- * @return {?}
250
- */
251
- PostTemplate.prototype.toApiJson = /**
252
- * @return {?}
253
- */
254
- function () {
255
- /** @type {?} */
256
- var toReturn = {};
257
- if (typeof this.accountGroupId !== 'undefined') {
258
- toReturn['accountGroupId'] = this.accountGroupId;
259
- }
260
- if (typeof this.templateId !== 'undefined') {
261
- toReturn['templateId'] = this.templateId;
262
- }
263
- if (typeof this.title !== 'undefined') {
264
- toReturn['title'] = this.title;
265
- }
266
- if (typeof this.created !== 'undefined' && this.created !== null) {
267
- toReturn['created'] = 'toApiJson' in this.created ? ((/** @type {?} */ (this.created))).toApiJson() : this.created;
268
- }
269
- if (typeof this.updated !== 'undefined' && this.updated !== null) {
270
- toReturn['updated'] = 'toApiJson' in this.updated ? ((/** @type {?} */ (this.updated))).toApiJson() : this.updated;
271
- }
272
- if (typeof this.postText !== 'undefined') {
273
- toReturn['postText'] = this.postText;
274
- }
275
- if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
276
- toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? ((/** @type {?} */ (this.postDateTime))).toApiJson() : this.postDateTime;
277
- }
278
- if (typeof this.gmbPostCustomization !== 'undefined') {
279
- toReturn['gmbPostCustomization'] = this.gmbPostCustomization;
280
- }
281
- if (typeof this.imageUrl !== 'undefined') {
282
- toReturn['imageUrl'] = this.imageUrl;
283
- }
284
- if (typeof this.imagePath !== 'undefined') {
285
- toReturn['imagePath'] = this.imagePath;
286
- }
287
- if (typeof this.imageSize !== 'undefined') {
288
- toReturn['imageSize'] = this.imageSize;
289
- }
290
- if (typeof this.previews !== 'undefined') {
291
- toReturn['previews'] = this.previews;
292
- }
293
- if (typeof this.options !== 'undefined') {
294
- toReturn['options'] = this.options;
295
- }
296
- if (typeof this.videoUrl !== 'undefined') {
297
- toReturn['videoUrl'] = this.videoUrl;
298
- }
299
- return toReturn;
300
- };
301
- return PostTemplate;
302
- }());
303
-
304
- /**
305
- * @fileoverview added by tsickle
306
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
307
- */
308
- // *********************************
309
- // Code generated by sdkgen
310
- // DO NOT EDIT!.
311
- //
312
- // Enums.
313
- // *********************************
314
- /** @enum {number} */
315
- var CallToActionCallToActionType = {
316
- LEARN_MORE: 0,
317
- BOOK: 1,
318
- ORDER: 2,
319
- SHOP: 3,
320
- SIGN_UP: 4,
321
- GET_OFFER: 5,
322
- CALL: 6,
323
- };
324
- CallToActionCallToActionType[CallToActionCallToActionType.LEARN_MORE] = 'LEARN_MORE';
325
- CallToActionCallToActionType[CallToActionCallToActionType.BOOK] = 'BOOK';
326
- CallToActionCallToActionType[CallToActionCallToActionType.ORDER] = 'ORDER';
327
- CallToActionCallToActionType[CallToActionCallToActionType.SHOP] = 'SHOP';
328
- CallToActionCallToActionType[CallToActionCallToActionType.SIGN_UP] = 'SIGN_UP';
329
- CallToActionCallToActionType[CallToActionCallToActionType.GET_OFFER] = 'GET_OFFER';
330
- CallToActionCallToActionType[CallToActionCallToActionType.CALL] = 'CALL';
331
- /** @enum {number} */
332
- var SocialPostDeletionStatus = {
333
- NONE: 0,
334
- FAILED: 1,
335
- IN_PROGRESS: 2,
336
- };
337
- SocialPostDeletionStatus[SocialPostDeletionStatus.NONE] = 'NONE';
338
- SocialPostDeletionStatus[SocialPostDeletionStatus.FAILED] = 'FAILED';
339
- SocialPostDeletionStatus[SocialPostDeletionStatus.IN_PROGRESS] = 'IN_PROGRESS';
340
- /** @enum {number} */
341
- var PostingStatus = {
342
- POSTING_IN_PROGRESS: 0,
343
- POSTING_FAILED: 1,
344
- POSTING_COMPLETED: 2,
345
- };
346
- PostingStatus[PostingStatus.POSTING_IN_PROGRESS] = 'POSTING_IN_PROGRESS';
347
- PostingStatus[PostingStatus.POSTING_FAILED] = 'POSTING_FAILED';
348
- PostingStatus[PostingStatus.POSTING_COMPLETED] = 'POSTING_COMPLETED';
349
- /** @enum {number} */
350
- var SocialPostService = {
351
- TWITTER: 0,
352
- FACEBOOK: 1,
353
- LINKED_IN: 2,
354
- GOOGLE_PLUS: 3,
355
- GOOGLE_MY_BUSINESS: 4,
356
- UNKNOWN: 5,
357
- INSTAGRAM: 6,
358
- };
359
- SocialPostService[SocialPostService.TWITTER] = 'TWITTER';
360
- SocialPostService[SocialPostService.FACEBOOK] = 'FACEBOOK';
361
- SocialPostService[SocialPostService.LINKED_IN] = 'LINKED_IN';
362
- SocialPostService[SocialPostService.GOOGLE_PLUS] = 'GOOGLE_PLUS';
363
- SocialPostService[SocialPostService.GOOGLE_MY_BUSINESS] = 'GOOGLE_MY_BUSINESS';
364
- SocialPostService[SocialPostService.UNKNOWN] = 'UNKNOWN';
365
- SocialPostService[SocialPostService.INSTAGRAM] = 'INSTAGRAM';
366
-
367
- /**
368
- * @fileoverview added by tsickle
369
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
370
- */
371
- // *********************************
372
- // Code generated by sdkgen
373
- // DO NOT EDIT!.
374
- //
375
- // Enums.
376
- // *********************************
377
- /** @enum {number} */
378
- var RemoveReason = {
379
- REMOVE_REASON_EDIT: 0,
380
- REMOVE_REASON_DELETE: 1,
381
- };
382
- RemoveReason[RemoveReason.REMOVE_REASON_EDIT] = 'REMOVE_REASON_EDIT';
383
- RemoveReason[RemoveReason.REMOVE_REASON_DELETE] = 'REMOVE_REASON_DELETE';
384
-
385
- /**
386
- * @fileoverview added by tsickle
387
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
388
- */
389
-
390
- /**
391
- * @fileoverview added by tsickle
392
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
393
- */
394
- /**
395
- * @template E
396
- * @param {?} enumRef
397
- * @param {?} value
398
- * @return {?}
399
- */
400
- function enumStringToValue$3(enumRef, value) {
401
- if (typeof value === 'number') {
402
- return value;
403
- }
404
- return enumRef[value];
405
- }
406
- var CallToAction = /** @class */ (function () {
407
- function CallToAction(kwargs) {
408
- if (!kwargs) {
409
- return;
410
- }
411
- Object.assign(this, kwargs);
412
- }
413
- /**
414
- * @param {?} proto
415
- * @return {?}
416
- */
417
- CallToAction.fromProto = /**
418
- * @param {?} proto
419
- * @return {?}
420
- */
421
- function (proto) {
422
- /** @type {?} */
423
- var m = new CallToAction();
424
- m = Object.assign(m, proto);
425
- if (proto.actionType) {
426
- m.actionType = enumStringToValue$3(CallToActionCallToActionType, proto.actionType);
427
- }
428
- return m;
429
- };
430
- /**
431
- * @return {?}
432
- */
433
- CallToAction.prototype.toApiJson = /**
434
- * @return {?}
435
- */
436
- function () {
437
- /** @type {?} */
438
- var toReturn = {};
439
- if (typeof this.url !== 'undefined') {
440
- toReturn['url'] = this.url;
441
- }
442
- if (typeof this.actionType !== 'undefined') {
443
- toReturn['actionType'] = this.actionType;
444
- }
445
- return toReturn;
446
- };
447
- return CallToAction;
448
- }());
449
- var Error = /** @class */ (function () {
450
- function Error(kwargs) {
451
- if (!kwargs) {
452
- return;
453
- }
454
- Object.assign(this, kwargs);
455
- }
456
- /**
457
- * @param {?} proto
458
- * @return {?}
459
- */
460
- Error.fromProto = /**
461
- * @param {?} proto
462
- * @return {?}
463
- */
464
- function (proto) {
465
- /** @type {?} */
466
- var m = new Error();
467
- m = Object.assign(m, proto);
468
- return m;
469
- };
470
- /**
471
- * @return {?}
472
- */
473
- Error.prototype.toApiJson = /**
474
- * @return {?}
475
- */
476
- function () {
477
- /** @type {?} */
478
- var toReturn = {};
479
- if (typeof this.reason !== 'undefined') {
480
- toReturn['reason'] = this.reason;
481
- }
482
- if (typeof this.category !== 'undefined') {
483
- toReturn['category'] = this.category;
484
- }
485
- return toReturn;
486
- };
487
- return Error;
488
- }());
489
- var Event = /** @class */ (function () {
490
- function Event(kwargs) {
491
- if (!kwargs) {
492
- return;
493
- }
494
- Object.assign(this, kwargs);
495
- }
496
- /**
497
- * @param {?} proto
498
- * @return {?}
499
- */
500
- Event.fromProto = /**
501
- * @param {?} proto
502
- * @return {?}
503
- */
504
- function (proto) {
505
- /** @type {?} */
506
- var m = new Event();
507
- m = Object.assign(m, proto);
508
- if (proto.startDatetime) {
509
- m.startDatetime = new Date(proto.startDatetime);
510
- }
511
- if (proto.endDatetime) {
512
- m.endDatetime = new Date(proto.endDatetime);
513
- }
514
- return m;
515
- };
516
- /**
517
- * @return {?}
518
- */
519
- Event.prototype.toApiJson = /**
520
- * @return {?}
521
- */
522
- function () {
523
- /** @type {?} */
524
- var toReturn = {};
525
- if (typeof this.title !== 'undefined') {
526
- toReturn['title'] = this.title;
527
- }
528
- if (typeof this.startDatetime !== 'undefined' && this.startDatetime !== null) {
529
- toReturn['startDatetime'] = 'toApiJson' in this.startDatetime ? ((/** @type {?} */ (this.startDatetime))).toApiJson() : this.startDatetime;
530
- }
531
- if (typeof this.endDatetime !== 'undefined' && this.endDatetime !== null) {
532
- toReturn['endDatetime'] = 'toApiJson' in this.endDatetime ? ((/** @type {?} */ (this.endDatetime))).toApiJson() : this.endDatetime;
533
- }
534
- return toReturn;
535
- };
536
- return Event;
537
- }());
538
- var SchedulePostStatus = /** @class */ (function () {
539
- function SchedulePostStatus(kwargs) {
540
- if (!kwargs) {
541
- return;
542
- }
543
- Object.assign(this, kwargs);
544
- }
545
- /**
546
- * @param {?} proto
547
- * @return {?}
548
- */
549
- SchedulePostStatus.fromProto = /**
550
- * @param {?} proto
551
- * @return {?}
552
- */
553
- function (proto) {
554
- /** @type {?} */
555
- var m = new SchedulePostStatus();
556
- m = Object.assign(m, proto);
557
- if (proto.error) {
558
- m.error = Error.fromProto(proto.error);
559
- }
560
- return m;
561
- };
562
- /**
563
- * @return {?}
564
- */
565
- SchedulePostStatus.prototype.toApiJson = /**
566
- * @return {?}
567
- */
568
- function () {
569
- /** @type {?} */
570
- var toReturn = {};
571
- if (typeof this.socialPostId !== 'undefined') {
572
- toReturn['socialPostId'] = this.socialPostId;
573
- }
574
- if (typeof this.socialServiceId !== 'undefined') {
575
- toReturn['socialServiceId'] = this.socialServiceId;
576
- }
577
- if (typeof this.socialServiceLabel !== 'undefined') {
578
- toReturn['socialServiceLabel'] = this.socialServiceLabel;
579
- }
580
- if (typeof this.error !== 'undefined' && this.error !== null) {
581
- toReturn['error'] = 'toApiJson' in this.error ? ((/** @type {?} */ (this.error))).toApiJson() : this.error;
582
- }
583
- return toReturn;
584
- };
585
- return SchedulePostStatus;
586
- }());
587
- var SocialPost = /** @class */ (function () {
588
- function SocialPost(kwargs) {
589
- if (!kwargs) {
590
- return;
591
- }
592
- Object.assign(this, kwargs);
593
- }
594
- /**
595
- * @param {?} proto
596
- * @return {?}
597
- */
598
- SocialPost.fromProto = /**
599
- * @param {?} proto
600
- * @return {?}
601
- */
602
- function (proto) {
603
- /** @type {?} */
604
- var m = new SocialPost();
605
- m = Object.assign(m, proto);
606
- if (proto.posted) {
607
- m.posted = new Date(proto.posted);
608
- }
609
- if (proto.deletionStatus) {
610
- m.deletionStatus = enumStringToValue$3(SocialPostDeletionStatus, proto.deletionStatus);
611
- }
612
- if (proto.service) {
613
- m.service = enumStringToValue$3(SocialPostService, proto.service);
614
- }
615
- if (proto.created) {
616
- m.created = new Date(proto.created);
617
- }
618
- if (proto.scheduled) {
619
- m.scheduled = new Date(proto.scheduled);
620
- }
621
- if (proto.status) {
622
- m.status = enumStringToValue$3(PostingStatus, proto.status);
623
- }
624
- if (proto.event) {
625
- m.event = Event.fromProto(proto.event);
626
- }
627
- if (proto.callToAction) {
628
- m.callToAction = CallToAction.fromProto(proto.callToAction);
629
- }
630
- if (proto.error) {
631
- m.error = Error.fromProto(proto.error);
632
- }
633
- return m;
634
- };
635
- /**
636
- * @return {?}
637
- */
638
- SocialPost.prototype.toApiJson = /**
639
- * @return {?}
640
- */
641
- function () {
642
- /** @type {?} */
643
- var toReturn = {};
644
- if (typeof this.businessId !== 'undefined') {
645
- toReturn['businessId'] = this.businessId;
646
- }
647
- if (typeof this.socialPostId !== 'undefined') {
648
- toReturn['socialPostId'] = this.socialPostId;
649
- }
650
- if (typeof this.postText !== 'undefined') {
651
- toReturn['postText'] = this.postText;
652
- }
653
- if (typeof this.posted !== 'undefined' && this.posted !== null) {
654
- toReturn['posted'] = 'toApiJson' in this.posted ? ((/** @type {?} */ (this.posted))).toApiJson() : this.posted;
655
- }
656
- if (typeof this.isError !== 'undefined') {
657
- toReturn['isError'] = this.isError;
658
- }
659
- if (typeof this.deletionStatus !== 'undefined') {
660
- toReturn['deletionStatus'] = this.deletionStatus;
661
- }
662
- if (typeof this.service !== 'undefined') {
663
- toReturn['service'] = this.service;
664
- }
665
- if (typeof this.permalink !== 'undefined') {
666
- toReturn['permalink'] = this.permalink;
667
- }
668
- if (typeof this.created !== 'undefined' && this.created !== null) {
669
- toReturn['created'] = 'toApiJson' in this.created ? ((/** @type {?} */ (this.created))).toApiJson() : this.created;
670
- }
671
- if (typeof this.profileUrl !== 'undefined') {
672
- toReturn['profileUrl'] = this.profileUrl;
673
- }
674
- if (typeof this.profileImageUrl !== 'undefined') {
675
- toReturn['profileImageUrl'] = this.profileImageUrl;
676
- }
677
- if (typeof this.scheduled !== 'undefined' && this.scheduled !== null) {
678
- toReturn['scheduled'] = 'toApiJson' in this.scheduled ? ((/** @type {?} */ (this.scheduled))).toApiJson() : this.scheduled;
679
- }
680
- if (typeof this.status !== 'undefined') {
681
- toReturn['status'] = this.status;
682
- }
683
- if (typeof this.imageUrl !== 'undefined') {
684
- toReturn['imageUrl'] = this.imageUrl;
685
- }
686
- if (typeof this.name !== 'undefined') {
687
- toReturn['name'] = this.name;
688
- }
689
- if (typeof this.username !== 'undefined') {
690
- toReturn['username'] = this.username;
691
- }
692
- if (typeof this.parentId !== 'undefined') {
693
- toReturn['parentId'] = this.parentId;
694
- }
695
- if (typeof this.socialServiceId !== 'undefined') {
696
- toReturn['socialServiceId'] = this.socialServiceId;
697
- }
698
- if (typeof this.event !== 'undefined' && this.event !== null) {
699
- toReturn['event'] = 'toApiJson' in this.event ? ((/** @type {?} */ (this.event))).toApiJson() : this.event;
700
- }
701
- if (typeof this.callToAction !== 'undefined' && this.callToAction !== null) {
702
- toReturn['callToAction'] = 'toApiJson' in this.callToAction ? ((/** @type {?} */ (this.callToAction))).toApiJson() : this.callToAction;
703
- }
704
- if (typeof this.videoUrl !== 'undefined') {
705
- toReturn['videoUrl'] = this.videoUrl;
706
- }
707
- if (typeof this.error !== 'undefined' && this.error !== null) {
708
- toReturn['error'] = 'toApiJson' in this.error ? ((/** @type {?} */ (this.error))).toApiJson() : this.error;
709
- }
710
- if (typeof this.imageUrls !== 'undefined') {
711
- toReturn['imageUrls'] = this.imageUrls;
712
- }
713
- if (typeof this.linkPreviewImageUrl !== 'undefined') {
714
- toReturn['linkPreviewImageUrl'] = this.linkPreviewImageUrl;
715
- }
716
- if (typeof this.brandId !== 'undefined') {
717
- toReturn['brandId'] = this.brandId;
718
- }
719
- if (typeof this.multilocationPostId !== 'undefined') {
720
- toReturn['multilocationPostId'] = this.multilocationPostId;
721
- }
722
- return toReturn;
723
- };
724
- return SocialPost;
725
- }());
726
- var SocialPostData = /** @class */ (function () {
727
- function SocialPostData(kwargs) {
728
- if (!kwargs) {
729
- return;
730
- }
731
- Object.assign(this, kwargs);
732
- }
733
- /**
734
- * @param {?} proto
735
- * @return {?}
736
- */
737
- SocialPostData.fromProto = /**
738
- * @param {?} proto
739
- * @return {?}
740
- */
741
- function (proto) {
742
- /** @type {?} */
743
- var m = new SocialPostData();
744
- m = Object.assign(m, proto);
745
- if (proto.scheduleFor) {
746
- m.scheduleFor = new Date(proto.scheduleFor);
747
- }
748
- return m;
749
- };
750
- /**
751
- * @return {?}
752
- */
753
- SocialPostData.prototype.toApiJson = /**
754
- * @return {?}
755
- */
756
- function () {
757
- /** @type {?} */
758
- var toReturn = {};
759
- if (typeof this.postText !== 'undefined') {
760
- toReturn['postText'] = this.postText;
761
- }
762
- if (typeof this.imageUrl !== 'undefined') {
763
- toReturn['imageUrl'] = this.imageUrl;
764
- }
765
- if (typeof this.scheduleFor !== 'undefined' && this.scheduleFor !== null) {
766
- toReturn['scheduleFor'] = 'toApiJson' in this.scheduleFor ? ((/** @type {?} */ (this.scheduleFor))).toApiJson() : this.scheduleFor;
767
- }
768
- return toReturn;
769
- };
770
- return SocialPostData;
771
- }());
772
-
773
- /**
774
- * @fileoverview added by tsickle
775
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
776
- */
777
- var FacebookPostStats = /** @class */ (function () {
778
- function FacebookPostStats(kwargs) {
779
- if (!kwargs) {
780
- return;
781
- }
782
- Object.assign(this, kwargs);
783
- }
784
- /**
785
- * @param {?} proto
786
- * @return {?}
787
- */
788
- FacebookPostStats.fromProto = /**
789
- * @param {?} proto
790
- * @return {?}
791
- */
792
- function (proto) {
793
- /** @type {?} */
794
- var m = new FacebookPostStats();
795
- m = Object.assign(m, proto);
796
- if (proto.commentCount) {
797
- m.commentCount = parseInt(proto.commentCount, 10);
798
- }
799
- if (proto.shareCount) {
800
- m.shareCount = parseInt(proto.shareCount, 10);
801
- }
802
- if (proto.likeCount) {
803
- m.likeCount = parseInt(proto.likeCount, 10);
804
- }
805
- if (proto.reactions) {
806
- m.reactions = parseInt(proto.reactions, 10);
807
- }
808
- if (proto.peopleReached) {
809
- m.peopleReached = parseInt(proto.peopleReached, 10);
810
- }
811
- return m;
812
- };
813
- /**
814
- * @return {?}
815
- */
816
- FacebookPostStats.prototype.toApiJson = /**
817
- * @return {?}
818
- */
819
- function () {
820
- /** @type {?} */
821
- var toReturn = {};
822
- if (typeof this.commentCount !== 'undefined') {
823
- toReturn['commentCount'] = this.commentCount;
824
- }
825
- if (typeof this.shareCount !== 'undefined') {
826
- toReturn['shareCount'] = this.shareCount;
827
- }
828
- if (typeof this.likeCount !== 'undefined') {
829
- toReturn['likeCount'] = this.likeCount;
830
- }
831
- if (typeof this.hasLike !== 'undefined') {
832
- toReturn['hasLike'] = this.hasLike;
833
- }
834
- if (typeof this.canLike !== 'undefined') {
835
- toReturn['canLike'] = this.canLike;
836
- }
837
- if (typeof this.reactions !== 'undefined') {
838
- toReturn['reactions'] = this.reactions;
839
- }
840
- if (typeof this.peopleReached !== 'undefined') {
841
- toReturn['peopleReached'] = this.peopleReached;
842
- }
843
- return toReturn;
844
- };
845
- return FacebookPostStats;
846
- }());
847
- var SocialPostStats = /** @class */ (function () {
848
- function SocialPostStats(kwargs) {
849
- if (!kwargs) {
850
- return;
851
- }
852
- Object.assign(this, kwargs);
853
- }
854
- /**
855
- * @param {?} proto
856
- * @return {?}
857
- */
858
- SocialPostStats.fromProto = /**
859
- * @param {?} proto
860
- * @return {?}
861
- */
862
- function (proto) {
863
- /** @type {?} */
864
- var m = new SocialPostStats();
865
- m = Object.assign(m, proto);
866
- if (proto.facebookPostStats) {
867
- m.facebookPostStats = FacebookPostStats.fromProto(proto.facebookPostStats);
868
- }
869
- if (proto.twitterPostStats) {
870
- m.twitterPostStats = TwitterPostStats.fromProto(proto.twitterPostStats);
871
- }
872
- return m;
873
- };
874
- /**
875
- * @return {?}
876
- */
877
- SocialPostStats.prototype.toApiJson = /**
878
- * @return {?}
879
- */
880
- function () {
881
- /** @type {?} */
882
- var toReturn = {};
883
- if (typeof this.internalPostId !== 'undefined') {
884
- toReturn['internalPostId'] = this.internalPostId;
885
- }
886
- if (typeof this.facebookPostStats !== 'undefined' && this.facebookPostStats !== null) {
887
- toReturn['facebookPostStats'] = 'toApiJson' in this.facebookPostStats ? ((/** @type {?} */ (this.facebookPostStats))).toApiJson() : this.facebookPostStats;
888
- }
889
- if (typeof this.twitterPostStats !== 'undefined' && this.twitterPostStats !== null) {
890
- toReturn['twitterPostStats'] = 'toApiJson' in this.twitterPostStats ? ((/** @type {?} */ (this.twitterPostStats))).toApiJson() : this.twitterPostStats;
891
- }
892
- return toReturn;
893
- };
894
- return SocialPostStats;
895
- }());
896
- var TwitterPostStats = /** @class */ (function () {
897
- function TwitterPostStats(kwargs) {
898
- if (!kwargs) {
899
- return;
900
- }
901
- Object.assign(this, kwargs);
902
- }
903
- /**
904
- * @param {?} proto
905
- * @return {?}
906
- */
907
- TwitterPostStats.fromProto = /**
908
- * @param {?} proto
909
- * @return {?}
910
- */
911
- function (proto) {
912
- /** @type {?} */
913
- var m = new TwitterPostStats();
914
- m = Object.assign(m, proto);
915
- if (proto.favourites) {
916
- m.favourites = parseInt(proto.favourites, 10);
917
- }
918
- if (proto.retweets) {
919
- m.retweets = parseInt(proto.retweets, 10);
920
- }
921
- return m;
922
- };
923
- /**
924
- * @return {?}
925
- */
926
- TwitterPostStats.prototype.toApiJson = /**
927
- * @return {?}
928
- */
929
- function () {
930
- /** @type {?} */
931
- var toReturn = {};
932
- if (typeof this.favourites !== 'undefined') {
933
- toReturn['favourites'] = this.favourites;
934
- }
935
- if (typeof this.hasFavourited !== 'undefined') {
936
- toReturn['hasFavourited'] = this.hasFavourited;
937
- }
938
- if (typeof this.retweets !== 'undefined') {
939
- toReturn['retweets'] = this.retweets;
940
- }
941
- if (typeof this.hasRetweeted !== 'undefined') {
942
- toReturn['hasRetweeted'] = this.hasRetweeted;
943
- }
944
- return toReturn;
945
- };
946
- return TwitterPostStats;
947
- }());
948
-
949
- /**
950
- * @fileoverview added by tsickle
951
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
952
- */
953
- /**
954
- * @template E
955
- * @param {?} enumRef
956
- * @param {?} value
957
- * @return {?}
958
- */
959
- function enumStringToValue$5(enumRef, value) {
960
- if (typeof value === 'number') {
961
- return value;
962
- }
963
- return enumRef[value];
964
- }
965
- var CreateMultilocationPostRequest = /** @class */ (function () {
966
- function CreateMultilocationPostRequest(kwargs) {
967
- if (!kwargs) {
968
- return;
969
- }
970
- Object.assign(this, kwargs);
971
- }
972
- /**
973
- * @param {?} proto
974
- * @return {?}
975
- */
976
- CreateMultilocationPostRequest.fromProto = /**
977
- * @param {?} proto
978
- * @return {?}
979
- */
980
- function (proto) {
981
- /** @type {?} */
982
- var m = new CreateMultilocationPostRequest();
983
- m = Object.assign(m, proto);
984
- if (proto.scheduledDate) {
985
- m.scheduledDate = new Date(proto.scheduledDate);
986
- }
987
- if (proto.locations) {
988
- m.locations = proto.locations.map(Location.fromProto);
989
- }
990
- return m;
991
- };
992
- /**
993
- * @return {?}
994
- */
995
- CreateMultilocationPostRequest.prototype.toApiJson = /**
996
- * @return {?}
997
- */
998
- function () {
999
- /** @type {?} */
1000
- var toReturn = {};
1001
- if (typeof this.brandId !== 'undefined') {
1002
- toReturn['brandId'] = this.brandId;
1003
- }
1004
- if (typeof this.text !== 'undefined') {
1005
- toReturn['text'] = this.text;
1006
- }
1007
- if (typeof this.media !== 'undefined') {
1008
- toReturn['media'] = this.media;
1009
- }
1010
- if (typeof this.scheduledDate !== 'undefined' && this.scheduledDate !== null) {
1011
- toReturn['scheduledDate'] = 'toApiJson' in this.scheduledDate ? ((/** @type {?} */ (this.scheduledDate))).toApiJson() : this.scheduledDate;
1012
- }
1013
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
1014
- toReturn['locations'] = 'toApiJson' in this.locations ? ((/** @type {?} */ (this.locations))).toApiJson() : this.locations;
1015
- }
1016
- if (typeof this.gifs !== 'undefined') {
1017
- toReturn['gifs'] = this.gifs;
1018
- }
1019
- if (typeof this.videos !== 'undefined') {
1020
- toReturn['videos'] = this.videos;
1021
- }
1022
- return toReturn;
1023
- };
1024
- return CreateMultilocationPostRequest;
1025
- }());
1026
- var CreateMultilocationPostResponse = /** @class */ (function () {
1027
- function CreateMultilocationPostResponse(kwargs) {
1028
- if (!kwargs) {
1029
- return;
1030
- }
1031
- Object.assign(this, kwargs);
1032
- }
1033
- /**
1034
- * @param {?} proto
1035
- * @return {?}
1036
- */
1037
- CreateMultilocationPostResponse.fromProto = /**
1038
- * @param {?} proto
1039
- * @return {?}
1040
- */
1041
- function (proto) {
1042
- /** @type {?} */
1043
- var m = new CreateMultilocationPostResponse();
1044
- m = Object.assign(m, proto);
1045
- if (proto.post) {
1046
- m.post = MultilocationPost.fromProto(proto.post);
1047
- }
1048
- if (proto.errors) {
1049
- m.errors = proto.errors.map(MultilocationPostError.fromProto);
1050
- }
1051
- return m;
1052
- };
1053
- /**
1054
- * @return {?}
1055
- */
1056
- CreateMultilocationPostResponse.prototype.toApiJson = /**
1057
- * @return {?}
1058
- */
1059
- function () {
1060
- /** @type {?} */
1061
- var toReturn = {};
1062
- if (typeof this.post !== 'undefined' && this.post !== null) {
1063
- toReturn['post'] = 'toApiJson' in this.post ? ((/** @type {?} */ (this.post))).toApiJson() : this.post;
1064
- }
1065
- if (typeof this.errors !== 'undefined' && this.errors !== null) {
1066
- toReturn['errors'] = 'toApiJson' in this.errors ? ((/** @type {?} */ (this.errors))).toApiJson() : this.errors;
1067
- }
1068
- return toReturn;
1069
- };
1070
- return CreateMultilocationPostResponse;
1071
- }());
1072
- var CreatePostTemplateRequest = /** @class */ (function () {
1073
- function CreatePostTemplateRequest(kwargs) {
1074
- if (!kwargs) {
1075
- return;
1076
- }
1077
- Object.assign(this, kwargs);
1078
- }
1079
- /**
1080
- * @param {?} proto
1081
- * @return {?}
1082
- */
1083
- CreatePostTemplateRequest.fromProto = /**
1084
- * @param {?} proto
1085
- * @return {?}
1086
- */
1087
- function (proto) {
1088
- /** @type {?} */
1089
- var m = new CreatePostTemplateRequest();
1090
- m = Object.assign(m, proto);
1091
- if (proto.postDateTime) {
1092
- m.postDateTime = new Date(proto.postDateTime);
1093
- }
1094
- return m;
1095
- };
1096
- /**
1097
- * @return {?}
1098
- */
1099
- CreatePostTemplateRequest.prototype.toApiJson = /**
1100
- * @return {?}
1101
- */
1102
- function () {
1103
- /** @type {?} */
1104
- var toReturn = {};
1105
- if (typeof this.accountGroupId !== 'undefined') {
1106
- toReturn['accountGroupId'] = this.accountGroupId;
1107
- }
1108
- if (typeof this.title !== 'undefined') {
1109
- toReturn['title'] = this.title;
1110
- }
1111
- if (typeof this.postText !== 'undefined') {
1112
- toReturn['postText'] = this.postText;
1113
- }
1114
- if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
1115
- toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? ((/** @type {?} */ (this.postDateTime))).toApiJson() : this.postDateTime;
1116
- }
1117
- if (typeof this.gmbPostCustomization !== 'undefined') {
1118
- toReturn['gmbPostCustomization'] = this.gmbPostCustomization;
1119
- }
1120
- if (typeof this.imageUrl !== 'undefined') {
1121
- toReturn['imageUrl'] = this.imageUrl;
1122
- }
1123
- if (typeof this.imagePath !== 'undefined') {
1124
- toReturn['imagePath'] = this.imagePath;
1125
- }
1126
- if (typeof this.imageSize !== 'undefined') {
1127
- toReturn['imageSize'] = this.imageSize;
1128
- }
1129
- if (typeof this.previews !== 'undefined') {
1130
- toReturn['previews'] = this.previews;
1131
- }
1132
- if (typeof this.options !== 'undefined') {
1133
- toReturn['options'] = this.options;
1134
- }
1135
- if (typeof this.videoUrl !== 'undefined') {
1136
- toReturn['videoUrl'] = this.videoUrl;
1137
- }
1138
- return toReturn;
1139
- };
1140
- return CreatePostTemplateRequest;
1141
- }());
1142
- var CreatePostTemplateResponse = /** @class */ (function () {
1143
- function CreatePostTemplateResponse(kwargs) {
1144
- if (!kwargs) {
1145
- return;
1146
- }
1147
- Object.assign(this, kwargs);
1148
- }
1149
- /**
1150
- * @param {?} proto
1151
- * @return {?}
1152
- */
1153
- CreatePostTemplateResponse.fromProto = /**
1154
- * @param {?} proto
1155
- * @return {?}
1156
- */
1157
- function (proto) {
1158
- /** @type {?} */
1159
- var m = new CreatePostTemplateResponse();
1160
- m = Object.assign(m, proto);
1161
- return m;
1162
- };
1163
- /**
1164
- * @return {?}
1165
- */
1166
- CreatePostTemplateResponse.prototype.toApiJson = /**
1167
- * @return {?}
1168
- */
1169
- function () {
1170
- /** @type {?} */
1171
- var toReturn = {};
1172
- if (typeof this.templateId !== 'undefined') {
1173
- toReturn['templateId'] = this.templateId;
1174
- }
1175
- return toReturn;
1176
- };
1177
- return CreatePostTemplateResponse;
1178
- }());
1179
- var DateRangeFilter = /** @class */ (function () {
1180
- function DateRangeFilter(kwargs) {
1181
- if (!kwargs) {
1182
- return;
1183
- }
1184
- Object.assign(this, kwargs);
1185
- }
1186
- /**
1187
- * @param {?} proto
1188
- * @return {?}
1189
- */
1190
- DateRangeFilter.fromProto = /**
1191
- * @param {?} proto
1192
- * @return {?}
1193
- */
1194
- function (proto) {
1195
- /** @type {?} */
1196
- var m = new DateRangeFilter();
1197
- m = Object.assign(m, proto);
1198
- if (proto.beginRange) {
1199
- m.beginRange = new Date(proto.beginRange);
1200
- }
1201
- if (proto.endRange) {
1202
- m.endRange = new Date(proto.endRange);
1203
- }
1204
- return m;
1205
- };
1206
- /**
1207
- * @return {?}
1208
- */
1209
- DateRangeFilter.prototype.toApiJson = /**
1210
- * @return {?}
1211
- */
1212
- function () {
1213
- /** @type {?} */
1214
- var toReturn = {};
1215
- if (typeof this.beginRange !== 'undefined' && this.beginRange !== null) {
1216
- toReturn['beginRange'] = 'toApiJson' in this.beginRange ? ((/** @type {?} */ (this.beginRange))).toApiJson() : this.beginRange;
1217
- }
1218
- if (typeof this.endRange !== 'undefined' && this.endRange !== null) {
1219
- toReturn['endRange'] = 'toApiJson' in this.endRange ? ((/** @type {?} */ (this.endRange))).toApiJson() : this.endRange;
1220
- }
1221
- return toReturn;
1222
- };
1223
- return DateRangeFilter;
1224
- }());
1225
- var DeleteMultilocationPostRequest = /** @class */ (function () {
1226
- function DeleteMultilocationPostRequest(kwargs) {
1227
- if (!kwargs) {
1228
- return;
1229
- }
1230
- Object.assign(this, kwargs);
1231
- }
1232
- /**
1233
- * @param {?} proto
1234
- * @return {?}
1235
- */
1236
- DeleteMultilocationPostRequest.fromProto = /**
1237
- * @param {?} proto
1238
- * @return {?}
1239
- */
1240
- function (proto) {
1241
- /** @type {?} */
1242
- var m = new DeleteMultilocationPostRequest();
1243
- m = Object.assign(m, proto);
1244
- return m;
1245
- };
1246
- /**
1247
- * @return {?}
1248
- */
1249
- DeleteMultilocationPostRequest.prototype.toApiJson = /**
1250
- * @return {?}
1251
- */
1252
- function () {
1253
- /** @type {?} */
1254
- var toReturn = {};
1255
- if (typeof this.brandId !== 'undefined') {
1256
- toReturn['brandId'] = this.brandId;
1257
- }
1258
- if (typeof this.multilocationId !== 'undefined') {
1259
- toReturn['multilocationId'] = this.multilocationId;
1260
- }
1261
- return toReturn;
1262
- };
1263
- return DeleteMultilocationPostRequest;
1264
- }());
1265
- var DeletePostTemplateRequest = /** @class */ (function () {
1266
- function DeletePostTemplateRequest(kwargs) {
1267
- if (!kwargs) {
1268
- return;
1269
- }
1270
- Object.assign(this, kwargs);
1271
- }
1272
- /**
1273
- * @param {?} proto
1274
- * @return {?}
1275
- */
1276
- DeletePostTemplateRequest.fromProto = /**
1277
- * @param {?} proto
1278
- * @return {?}
1279
- */
1280
- function (proto) {
1281
- /** @type {?} */
1282
- var m = new DeletePostTemplateRequest();
1283
- m = Object.assign(m, proto);
1284
- return m;
1285
- };
1286
- /**
1287
- * @return {?}
1288
- */
1289
- DeletePostTemplateRequest.prototype.toApiJson = /**
1290
- * @return {?}
1291
- */
1292
- function () {
1293
- /** @type {?} */
1294
- var toReturn = {};
1295
- if (typeof this.accountGroupId !== 'undefined') {
1296
- toReturn['accountGroupId'] = this.accountGroupId;
1297
- }
1298
- if (typeof this.templateId !== 'undefined') {
1299
- toReturn['templateId'] = this.templateId;
1300
- }
1301
- return toReturn;
1302
- };
1303
- return DeletePostTemplateRequest;
1304
- }());
1305
- var DeleteSocialPostRequest = /** @class */ (function () {
1306
- function DeleteSocialPostRequest(kwargs) {
1307
- if (!kwargs) {
1308
- return;
1309
- }
1310
- Object.assign(this, kwargs);
1311
- }
1312
- /**
1313
- * @param {?} proto
1314
- * @return {?}
1315
- */
1316
- DeleteSocialPostRequest.fromProto = /**
1317
- * @param {?} proto
1318
- * @return {?}
1319
- */
1320
- function (proto) {
1321
- /** @type {?} */
1322
- var m = new DeleteSocialPostRequest();
1323
- m = Object.assign(m, proto);
1324
- return m;
1325
- };
1326
- /**
1327
- * @return {?}
1328
- */
1329
- DeleteSocialPostRequest.prototype.toApiJson = /**
1330
- * @return {?}
1331
- */
1332
- function () {
1333
- /** @type {?} */
1334
- var toReturn = {};
1335
- if (typeof this.businessId !== 'undefined') {
1336
- toReturn['businessId'] = this.businessId;
1337
- }
1338
- if (typeof this.socialPostId !== 'undefined') {
1339
- toReturn['socialPostId'] = this.socialPostId;
1340
- }
1341
- return toReturn;
1342
- };
1343
- return DeleteSocialPostRequest;
1344
- }());
1345
- var EditMultilocationPostRequest = /** @class */ (function () {
1346
- function EditMultilocationPostRequest(kwargs) {
1347
- if (!kwargs) {
1348
- return;
1349
- }
1350
- Object.assign(this, kwargs);
1351
- }
1352
- /**
1353
- * @param {?} proto
1354
- * @return {?}
1355
- */
1356
- EditMultilocationPostRequest.fromProto = /**
1357
- * @param {?} proto
1358
- * @return {?}
1359
- */
1360
- function (proto) {
1361
- /** @type {?} */
1362
- var m = new EditMultilocationPostRequest();
1363
- m = Object.assign(m, proto);
1364
- if (proto.scheduledDate) {
1365
- m.scheduledDate = new Date(proto.scheduledDate);
1366
- }
1367
- if (proto.fieldMask) {
1368
- m.fieldMask = FieldMask.fromProto(proto.fieldMask);
1369
- }
1370
- if (proto.locations) {
1371
- m.locations = proto.locations.map(Location.fromProto);
1372
- }
1373
- return m;
1374
- };
1375
- /**
1376
- * @return {?}
1377
- */
1378
- EditMultilocationPostRequest.prototype.toApiJson = /**
1379
- * @return {?}
1380
- */
1381
- function () {
1382
- /** @type {?} */
1383
- var toReturn = {};
1384
- if (typeof this.brandId !== 'undefined') {
1385
- toReturn['brandId'] = this.brandId;
1386
- }
1387
- if (typeof this.multilocationId !== 'undefined') {
1388
- toReturn['multilocationId'] = this.multilocationId;
1389
- }
1390
- if (typeof this.text !== 'undefined') {
1391
- toReturn['text'] = this.text;
1392
- }
1393
- if (typeof this.media !== 'undefined') {
1394
- toReturn['media'] = this.media;
1395
- }
1396
- if (typeof this.scheduledDate !== 'undefined' && this.scheduledDate !== null) {
1397
- toReturn['scheduledDate'] = 'toApiJson' in this.scheduledDate ? ((/** @type {?} */ (this.scheduledDate))).toApiJson() : this.scheduledDate;
1398
- }
1399
- if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {
1400
- toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? ((/** @type {?} */ (this.fieldMask))).toApiJson() : this.fieldMask;
1401
- }
1402
- if (typeof this.gifs !== 'undefined') {
1403
- toReturn['gifs'] = this.gifs;
1404
- }
1405
- if (typeof this.videos !== 'undefined') {
1406
- toReturn['videos'] = this.videos;
1407
- }
1408
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
1409
- toReturn['locations'] = 'toApiJson' in this.locations ? ((/** @type {?} */ (this.locations))).toApiJson() : this.locations;
1410
- }
1411
- return toReturn;
1412
- };
1413
- return EditMultilocationPostRequest;
1414
- }());
1415
- var EditMultilocationPostResponse = /** @class */ (function () {
1416
- function EditMultilocationPostResponse(kwargs) {
1417
- if (!kwargs) {
1418
- return;
1419
- }
1420
- Object.assign(this, kwargs);
1421
- }
1422
- /**
1423
- * @param {?} proto
1424
- * @return {?}
1425
- */
1426
- EditMultilocationPostResponse.fromProto = /**
1427
- * @param {?} proto
1428
- * @return {?}
1429
- */
1430
- function (proto) {
1431
- /** @type {?} */
1432
- var m = new EditMultilocationPostResponse();
1433
- m = Object.assign(m, proto);
1434
- if (proto.post) {
1435
- m.post = MultilocationPost.fromProto(proto.post);
1436
- }
1437
- if (proto.errors) {
1438
- m.errors = proto.errors.map(MultilocationPostError.fromProto);
1439
- }
1440
- return m;
1441
- };
1442
- /**
1443
- * @return {?}
1444
- */
1445
- EditMultilocationPostResponse.prototype.toApiJson = /**
1446
- * @return {?}
1447
- */
1448
- function () {
1449
- /** @type {?} */
1450
- var toReturn = {};
1451
- if (typeof this.post !== 'undefined' && this.post !== null) {
1452
- toReturn['post'] = 'toApiJson' in this.post ? ((/** @type {?} */ (this.post))).toApiJson() : this.post;
1453
- }
1454
- if (typeof this.errors !== 'undefined' && this.errors !== null) {
1455
- toReturn['errors'] = 'toApiJson' in this.errors ? ((/** @type {?} */ (this.errors))).toApiJson() : this.errors;
1456
- }
1457
- return toReturn;
1458
- };
1459
- return EditMultilocationPostResponse;
1460
- }());
1461
- var PartnerListScheduledSocialPostsRequestFilters = /** @class */ (function () {
1462
- function PartnerListScheduledSocialPostsRequestFilters(kwargs) {
1463
- if (!kwargs) {
1464
- return;
1465
- }
1466
- Object.assign(this, kwargs);
1467
- }
1468
- /**
1469
- * @param {?} proto
1470
- * @return {?}
1471
- */
1472
- PartnerListScheduledSocialPostsRequestFilters.fromProto = /**
1473
- * @param {?} proto
1474
- * @return {?}
1475
- */
1476
- function (proto) {
1477
- /** @type {?} */
1478
- var m = new PartnerListScheduledSocialPostsRequestFilters();
1479
- m = Object.assign(m, proto);
1480
- if (proto.dateRange) {
1481
- m.dateRange = DateRangeFilter.fromProto(proto.dateRange);
1482
- }
1483
- return m;
1484
- };
1485
- /**
1486
- * @return {?}
1487
- */
1488
- PartnerListScheduledSocialPostsRequestFilters.prototype.toApiJson = /**
1489
- * @return {?}
1490
- */
1491
- function () {
1492
- /** @type {?} */
1493
- var toReturn = {};
1494
- if (typeof this.dateRange !== 'undefined' && this.dateRange !== null) {
1495
- toReturn['dateRange'] = 'toApiJson' in this.dateRange ? ((/** @type {?} */ (this.dateRange))).toApiJson() : this.dateRange;
1496
- }
1497
- if (typeof this.partnerId !== 'undefined') {
1498
- toReturn['partnerId'] = this.partnerId;
1499
- }
1500
- return toReturn;
1501
- };
1502
- return PartnerListScheduledSocialPostsRequestFilters;
1503
- }());
1504
- var GetMultiSocialPostStatsRequest = /** @class */ (function () {
1505
- function GetMultiSocialPostStatsRequest(kwargs) {
1506
- if (!kwargs) {
1507
- return;
1508
- }
1509
- Object.assign(this, kwargs);
1510
- }
1511
- /**
1512
- * @param {?} proto
1513
- * @return {?}
1514
- */
1515
- GetMultiSocialPostStatsRequest.fromProto = /**
1516
- * @param {?} proto
1517
- * @return {?}
1518
- */
1519
- function (proto) {
1520
- /** @type {?} */
1521
- var m = new GetMultiSocialPostStatsRequest();
1522
- m = Object.assign(m, proto);
1523
- return m;
1524
- };
1525
- /**
1526
- * @return {?}
1527
- */
1528
- GetMultiSocialPostStatsRequest.prototype.toApiJson = /**
1529
- * @return {?}
1530
- */
1531
- function () {
1532
- /** @type {?} */
1533
- var toReturn = {};
1534
- if (typeof this.internalPostIds !== 'undefined') {
1535
- toReturn['internalPostIds'] = this.internalPostIds;
1536
- }
1537
- if (typeof this.businessId !== 'undefined') {
1538
- toReturn['businessId'] = this.businessId;
1539
- }
1540
- if (typeof this.partnerId !== 'undefined') {
1541
- toReturn['partnerId'] = this.partnerId;
1542
- }
1543
- return toReturn;
1544
- };
1545
- return GetMultiSocialPostStatsRequest;
1546
- }());
1547
- var GetMultiSocialPostStatsResponse = /** @class */ (function () {
1548
- function GetMultiSocialPostStatsResponse(kwargs) {
1549
- if (!kwargs) {
1550
- return;
1551
- }
1552
- Object.assign(this, kwargs);
1553
- }
1554
- /**
1555
- * @param {?} proto
1556
- * @return {?}
1557
- */
1558
- GetMultiSocialPostStatsResponse.fromProto = /**
1559
- * @param {?} proto
1560
- * @return {?}
1561
- */
1562
- function (proto) {
1563
- /** @type {?} */
1564
- var m = new GetMultiSocialPostStatsResponse();
1565
- m = Object.assign(m, proto);
1566
- if (proto.socialPostStats) {
1567
- m.socialPostStats = proto.socialPostStats.map(SocialPostStats.fromProto);
1568
- }
1569
- return m;
1570
- };
1571
- /**
1572
- * @return {?}
1573
- */
1574
- GetMultiSocialPostStatsResponse.prototype.toApiJson = /**
1575
- * @return {?}
1576
- */
1577
- function () {
1578
- /** @type {?} */
1579
- var toReturn = {};
1580
- if (typeof this.socialPostStats !== 'undefined' && this.socialPostStats !== null) {
1581
- toReturn['socialPostStats'] = 'toApiJson' in this.socialPostStats ? ((/** @type {?} */ (this.socialPostStats))).toApiJson() : this.socialPostStats;
1582
- }
1583
- return toReturn;
1584
- };
1585
- return GetMultiSocialPostStatsResponse;
1586
- }());
1587
- var GetMultiSocialPostsRequest = /** @class */ (function () {
1588
- function GetMultiSocialPostsRequest(kwargs) {
1589
- if (!kwargs) {
1590
- return;
1591
- }
1592
- Object.assign(this, kwargs);
1593
- }
1594
- /**
1595
- * @param {?} proto
1596
- * @return {?}
1597
- */
1598
- GetMultiSocialPostsRequest.fromProto = /**
1599
- * @param {?} proto
1600
- * @return {?}
1601
- */
1602
- function (proto) {
1603
- /** @type {?} */
1604
- var m = new GetMultiSocialPostsRequest();
1605
- m = Object.assign(m, proto);
1606
- return m;
1607
- };
1608
- /**
1609
- * @return {?}
1610
- */
1611
- GetMultiSocialPostsRequest.prototype.toApiJson = /**
1612
- * @return {?}
1613
- */
1614
- function () {
1615
- /** @type {?} */
1616
- var toReturn = {};
1617
- if (typeof this.businessId !== 'undefined') {
1618
- toReturn['businessId'] = this.businessId;
1619
- }
1620
- if (typeof this.internalPostIds !== 'undefined') {
1621
- toReturn['internalPostIds'] = this.internalPostIds;
1622
- }
1623
- return toReturn;
1624
- };
1625
- return GetMultiSocialPostsRequest;
1626
- }());
1627
- var GetMultiSocialPostsResponse = /** @class */ (function () {
1628
- function GetMultiSocialPostsResponse(kwargs) {
1629
- if (!kwargs) {
1630
- return;
1631
- }
1632
- Object.assign(this, kwargs);
1633
- }
1634
- /**
1635
- * @param {?} proto
1636
- * @return {?}
1637
- */
1638
- GetMultiSocialPostsResponse.fromProto = /**
1639
- * @param {?} proto
1640
- * @return {?}
1641
- */
1642
- function (proto) {
1643
- /** @type {?} */
1644
- var m = new GetMultiSocialPostsResponse();
1645
- m = Object.assign(m, proto);
1646
- if (proto.socialPosts) {
1647
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
1648
- }
1649
- return m;
1650
- };
1651
- /**
1652
- * @return {?}
1653
- */
1654
- GetMultiSocialPostsResponse.prototype.toApiJson = /**
1655
- * @return {?}
1656
- */
1657
- function () {
1658
- /** @type {?} */
1659
- var toReturn = {};
1660
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
1661
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? ((/** @type {?} */ (this.socialPosts))).toApiJson() : this.socialPosts;
1662
- }
1663
- return toReturn;
1664
- };
1665
- return GetMultiSocialPostsResponse;
1666
- }());
1667
- var GetMultilocationPostRequest = /** @class */ (function () {
1668
- function GetMultilocationPostRequest(kwargs) {
1669
- if (!kwargs) {
1670
- return;
1671
- }
1672
- Object.assign(this, kwargs);
1673
- }
1674
- /**
1675
- * @param {?} proto
1676
- * @return {?}
1677
- */
1678
- GetMultilocationPostRequest.fromProto = /**
1679
- * @param {?} proto
1680
- * @return {?}
1681
- */
1682
- function (proto) {
1683
- /** @type {?} */
1684
- var m = new GetMultilocationPostRequest();
1685
- m = Object.assign(m, proto);
1686
- return m;
1687
- };
1688
- /**
1689
- * @return {?}
1690
- */
1691
- GetMultilocationPostRequest.prototype.toApiJson = /**
1692
- * @return {?}
1693
- */
1694
- function () {
1695
- /** @type {?} */
1696
- var toReturn = {};
1697
- if (typeof this.brandId !== 'undefined') {
1698
- toReturn['brandId'] = this.brandId;
1699
- }
1700
- if (typeof this.multilocationId !== 'undefined') {
1701
- toReturn['multilocationId'] = this.multilocationId;
1702
- }
1703
- return toReturn;
1704
- };
1705
- return GetMultilocationPostRequest;
1706
- }());
1707
- var GetMultilocationPostResponse = /** @class */ (function () {
1708
- function GetMultilocationPostResponse(kwargs) {
1709
- if (!kwargs) {
1710
- return;
1711
- }
1712
- Object.assign(this, kwargs);
1713
- }
1714
- /**
1715
- * @param {?} proto
1716
- * @return {?}
1717
- */
1718
- GetMultilocationPostResponse.fromProto = /**
1719
- * @param {?} proto
1720
- * @return {?}
1721
- */
1722
- function (proto) {
1723
- /** @type {?} */
1724
- var m = new GetMultilocationPostResponse();
1725
- m = Object.assign(m, proto);
1726
- if (proto.multilocationPost) {
1727
- m.multilocationPost = MultilocationPost.fromProto(proto.multilocationPost);
1728
- }
1729
- return m;
1730
- };
1731
- /**
1732
- * @return {?}
1733
- */
1734
- GetMultilocationPostResponse.prototype.toApiJson = /**
1735
- * @return {?}
1736
- */
1737
- function () {
1738
- /** @type {?} */
1739
- var toReturn = {};
1740
- if (typeof this.multilocationPost !== 'undefined' && this.multilocationPost !== null) {
1741
- toReturn['multilocationPost'] = 'toApiJson' in this.multilocationPost ? ((/** @type {?} */ (this.multilocationPost))).toApiJson() : this.multilocationPost;
1742
- }
1743
- return toReturn;
1744
- };
1745
- return GetMultilocationPostResponse;
1746
- }());
1747
- var GetPostTemplateRequest = /** @class */ (function () {
1748
- function GetPostTemplateRequest(kwargs) {
1749
- if (!kwargs) {
1750
- return;
1751
- }
1752
- Object.assign(this, kwargs);
1753
- }
1754
- /**
1755
- * @param {?} proto
1756
- * @return {?}
1757
- */
1758
- GetPostTemplateRequest.fromProto = /**
1759
- * @param {?} proto
1760
- * @return {?}
1761
- */
1762
- function (proto) {
1763
- /** @type {?} */
1764
- var m = new GetPostTemplateRequest();
1765
- m = Object.assign(m, proto);
1766
- return m;
1767
- };
1768
- /**
1769
- * @return {?}
1770
- */
1771
- GetPostTemplateRequest.prototype.toApiJson = /**
1772
- * @return {?}
1773
- */
1774
- function () {
1775
- /** @type {?} */
1776
- var toReturn = {};
1777
- if (typeof this.accountGroupId !== 'undefined') {
1778
- toReturn['accountGroupId'] = this.accountGroupId;
1779
- }
1780
- if (typeof this.templateId !== 'undefined') {
1781
- toReturn['templateId'] = this.templateId;
1782
- }
1783
- return toReturn;
1784
- };
1785
- return GetPostTemplateRequest;
1786
- }());
1787
- var GetPostTemplateResponse = /** @class */ (function () {
1788
- function GetPostTemplateResponse(kwargs) {
1789
- if (!kwargs) {
1790
- return;
1791
- }
1792
- Object.assign(this, kwargs);
1793
- }
1794
- /**
1795
- * @param {?} proto
1796
- * @return {?}
1797
- */
1798
- GetPostTemplateResponse.fromProto = /**
1799
- * @param {?} proto
1800
- * @return {?}
1801
- */
1802
- function (proto) {
1803
- /** @type {?} */
1804
- var m = new GetPostTemplateResponse();
1805
- m = Object.assign(m, proto);
1806
- if (proto.postTemplate) {
1807
- m.postTemplate = PostTemplate.fromProto(proto.postTemplate);
1808
- }
1809
- return m;
1810
- };
1811
- /**
1812
- * @return {?}
1813
- */
1814
- GetPostTemplateResponse.prototype.toApiJson = /**
1815
- * @return {?}
1816
- */
1817
- function () {
1818
- /** @type {?} */
1819
- var toReturn = {};
1820
- if (typeof this.postTemplate !== 'undefined' && this.postTemplate !== null) {
1821
- toReturn['postTemplate'] = 'toApiJson' in this.postTemplate ? ((/** @type {?} */ (this.postTemplate))).toApiJson() : this.postTemplate;
1822
- }
1823
- return toReturn;
1824
- };
1825
- return GetPostTemplateResponse;
1826
- }());
1827
- var GetScheduledPostCountRequest = /** @class */ (function () {
1828
- function GetScheduledPostCountRequest(kwargs) {
1829
- if (!kwargs) {
1830
- return;
1831
- }
1832
- Object.assign(this, kwargs);
1833
- }
1834
- /**
1835
- * @param {?} proto
1836
- * @return {?}
1837
- */
1838
- GetScheduledPostCountRequest.fromProto = /**
1839
- * @param {?} proto
1840
- * @return {?}
1841
- */
1842
- function (proto) {
1843
- /** @type {?} */
1844
- var m = new GetScheduledPostCountRequest();
1845
- m = Object.assign(m, proto);
1846
- return m;
1847
- };
1848
- /**
1849
- * @return {?}
1850
- */
1851
- GetScheduledPostCountRequest.prototype.toApiJson = /**
1852
- * @return {?}
1853
- */
1854
- function () {
1855
- /** @type {?} */
1856
- var toReturn = {};
1857
- if (typeof this.partnerId !== 'undefined') {
1858
- toReturn['partnerId'] = this.partnerId;
1859
- }
1860
- if (typeof this.businessId !== 'undefined') {
1861
- toReturn['businessId'] = this.businessId;
1862
- }
1863
- if (typeof this.socialServiceIds !== 'undefined') {
1864
- toReturn['socialServiceIds'] = this.socialServiceIds;
1865
- }
1866
- return toReturn;
1867
- };
1868
- return GetScheduledPostCountRequest;
1869
- }());
1870
- var GetScheduledPostCountResponse = /** @class */ (function () {
1871
- function GetScheduledPostCountResponse(kwargs) {
1872
- if (!kwargs) {
1873
- return;
1874
- }
1875
- Object.assign(this, kwargs);
1876
- }
1877
- /**
1878
- * @param {?} proto
1879
- * @return {?}
1880
- */
1881
- GetScheduledPostCountResponse.fromProto = /**
1882
- * @param {?} proto
1883
- * @return {?}
1884
- */
1885
- function (proto) {
1886
- /** @type {?} */
1887
- var m = new GetScheduledPostCountResponse();
1888
- m = Object.assign(m, proto);
1889
- if (proto.count) {
1890
- m.count = parseInt(proto.count, 10);
1891
- }
1892
- return m;
1893
- };
1894
- /**
1895
- * @return {?}
1896
- */
1897
- GetScheduledPostCountResponse.prototype.toApiJson = /**
1898
- * @return {?}
1899
- */
1900
- function () {
1901
- /** @type {?} */
1902
- var toReturn = {};
1903
- if (typeof this.count !== 'undefined') {
1904
- toReturn['count'] = this.count;
1905
- }
1906
- return toReturn;
1907
- };
1908
- return GetScheduledPostCountResponse;
1909
- }());
1910
- var ListMultilocationPostsForBrandRequest = /** @class */ (function () {
1911
- function ListMultilocationPostsForBrandRequest(kwargs) {
1912
- if (!kwargs) {
1913
- return;
1914
- }
1915
- Object.assign(this, kwargs);
1916
- }
1917
- /**
1918
- * @param {?} proto
1919
- * @return {?}
1920
- */
1921
- ListMultilocationPostsForBrandRequest.fromProto = /**
1922
- * @param {?} proto
1923
- * @return {?}
1924
- */
1925
- function (proto) {
1926
- /** @type {?} */
1927
- var m = new ListMultilocationPostsForBrandRequest();
1928
- m = Object.assign(m, proto);
1929
- if (proto.startDate) {
1930
- m.startDate = new Date(proto.startDate);
1931
- }
1932
- if (proto.endDate) {
1933
- m.endDate = new Date(proto.endDate);
1934
- }
1935
- if (proto.pageSize) {
1936
- m.pageSize = parseInt(proto.pageSize, 10);
1937
- }
1938
- return m;
1939
- };
1940
- /**
1941
- * @return {?}
1942
- */
1943
- ListMultilocationPostsForBrandRequest.prototype.toApiJson = /**
1944
- * @return {?}
1945
- */
1946
- function () {
1947
- /** @type {?} */
1948
- var toReturn = {};
1949
- if (typeof this.brandId !== 'undefined') {
1950
- toReturn['brandId'] = this.brandId;
1951
- }
1952
- if (typeof this.startDate !== 'undefined' && this.startDate !== null) {
1953
- toReturn['startDate'] = 'toApiJson' in this.startDate ? ((/** @type {?} */ (this.startDate))).toApiJson() : this.startDate;
1954
- }
1955
- if (typeof this.endDate !== 'undefined' && this.endDate !== null) {
1956
- toReturn['endDate'] = 'toApiJson' in this.endDate ? ((/** @type {?} */ (this.endDate))).toApiJson() : this.endDate;
1957
- }
1958
- if (typeof this.cursor !== 'undefined') {
1959
- toReturn['cursor'] = this.cursor;
1960
- }
1961
- if (typeof this.pageSize !== 'undefined') {
1962
- toReturn['pageSize'] = this.pageSize;
1963
- }
1964
- return toReturn;
1965
- };
1966
- return ListMultilocationPostsForBrandRequest;
1967
- }());
1968
- var ListMultilocationPostsForBrandResponse = /** @class */ (function () {
1969
- function ListMultilocationPostsForBrandResponse(kwargs) {
1970
- if (!kwargs) {
1971
- return;
1972
- }
1973
- Object.assign(this, kwargs);
1974
- }
1975
- /**
1976
- * @param {?} proto
1977
- * @return {?}
1978
- */
1979
- ListMultilocationPostsForBrandResponse.fromProto = /**
1980
- * @param {?} proto
1981
- * @return {?}
1982
- */
1983
- function (proto) {
1984
- /** @type {?} */
1985
- var m = new ListMultilocationPostsForBrandResponse();
1986
- m = Object.assign(m, proto);
1987
- if (proto.multilocationPosts) {
1988
- m.multilocationPosts = proto.multilocationPosts.map(MultilocationPost.fromProto);
1989
- }
1990
- if (proto.failedSocialPosts) {
1991
- m.failedSocialPosts = proto.failedSocialPosts.map(SocialPost.fromProto);
1992
- }
1993
- return m;
1994
- };
1995
- /**
1996
- * @return {?}
1997
- */
1998
- ListMultilocationPostsForBrandResponse.prototype.toApiJson = /**
1999
- * @return {?}
2000
- */
2001
- function () {
2002
- /** @type {?} */
2003
- var toReturn = {};
2004
- if (typeof this.multilocationPosts !== 'undefined' && this.multilocationPosts !== null) {
2005
- toReturn['multilocationPosts'] = 'toApiJson' in this.multilocationPosts ? ((/** @type {?} */ (this.multilocationPosts))).toApiJson() : this.multilocationPosts;
2006
- }
2007
- if (typeof this.nextCursor !== 'undefined') {
2008
- toReturn['nextCursor'] = this.nextCursor;
2009
- }
2010
- if (typeof this.hasMore !== 'undefined') {
2011
- toReturn['hasMore'] = this.hasMore;
2012
- }
2013
- if (typeof this.failedSocialPosts !== 'undefined' && this.failedSocialPosts !== null) {
2014
- toReturn['failedSocialPosts'] = 'toApiJson' in this.failedSocialPosts ? ((/** @type {?} */ (this.failedSocialPosts))).toApiJson() : this.failedSocialPosts;
2015
- }
2016
- return toReturn;
2017
- };
2018
- return ListMultilocationPostsForBrandResponse;
2019
- }());
2020
- var ListPostTemplatesRequest = /** @class */ (function () {
2021
- function ListPostTemplatesRequest(kwargs) {
2022
- if (!kwargs) {
2023
- return;
2024
- }
2025
- Object.assign(this, kwargs);
2026
- }
2027
- /**
2028
- * @param {?} proto
2029
- * @return {?}
2030
- */
2031
- ListPostTemplatesRequest.fromProto = /**
2032
- * @param {?} proto
2033
- * @return {?}
2034
- */
2035
- function (proto) {
2036
- /** @type {?} */
2037
- var m = new ListPostTemplatesRequest();
2038
- m = Object.assign(m, proto);
2039
- if (proto.pageSize) {
2040
- m.pageSize = parseInt(proto.pageSize, 10);
2041
- }
2042
- return m;
2043
- };
2044
- /**
2045
- * @return {?}
2046
- */
2047
- ListPostTemplatesRequest.prototype.toApiJson = /**
2048
- * @return {?}
2049
- */
2050
- function () {
2051
- /** @type {?} */
2052
- var toReturn = {};
2053
- if (typeof this.accountGroupId !== 'undefined') {
2054
- toReturn['accountGroupId'] = this.accountGroupId;
2055
- }
2056
- if (typeof this.cursor !== 'undefined') {
2057
- toReturn['cursor'] = this.cursor;
2058
- }
2059
- if (typeof this.pageSize !== 'undefined') {
2060
- toReturn['pageSize'] = this.pageSize;
2061
- }
2062
- return toReturn;
2063
- };
2064
- return ListPostTemplatesRequest;
2065
- }());
2066
- var ListPostTemplatesResponse = /** @class */ (function () {
2067
- function ListPostTemplatesResponse(kwargs) {
2068
- if (!kwargs) {
2069
- return;
2070
- }
2071
- Object.assign(this, kwargs);
2072
- }
2073
- /**
2074
- * @param {?} proto
2075
- * @return {?}
2076
- */
2077
- ListPostTemplatesResponse.fromProto = /**
2078
- * @param {?} proto
2079
- * @return {?}
2080
- */
2081
- function (proto) {
2082
- /** @type {?} */
2083
- var m = new ListPostTemplatesResponse();
2084
- m = Object.assign(m, proto);
2085
- if (proto.postTemplate) {
2086
- m.postTemplate = proto.postTemplate.map(PostTemplate.fromProto);
2087
- }
2088
- return m;
2089
- };
2090
- /**
2091
- * @return {?}
2092
- */
2093
- ListPostTemplatesResponse.prototype.toApiJson = /**
2094
- * @return {?}
2095
- */
2096
- function () {
2097
- /** @type {?} */
2098
- var toReturn = {};
2099
- if (typeof this.postTemplate !== 'undefined' && this.postTemplate !== null) {
2100
- toReturn['postTemplate'] = 'toApiJson' in this.postTemplate ? ((/** @type {?} */ (this.postTemplate))).toApiJson() : this.postTemplate;
2101
- }
2102
- if (typeof this.nextCursor !== 'undefined') {
2103
- toReturn['nextCursor'] = this.nextCursor;
2104
- }
2105
- if (typeof this.hasMore !== 'undefined') {
2106
- toReturn['hasMore'] = this.hasMore;
2107
- }
2108
- return toReturn;
2109
- };
2110
- return ListPostTemplatesResponse;
2111
- }());
2112
- var ListSocialPostsRequest = /** @class */ (function () {
2113
- function ListSocialPostsRequest(kwargs) {
2114
- if (!kwargs) {
2115
- return;
2116
- }
2117
- Object.assign(this, kwargs);
2118
- }
2119
- /**
2120
- * @param {?} proto
2121
- * @return {?}
2122
- */
2123
- ListSocialPostsRequest.fromProto = /**
2124
- * @param {?} proto
2125
- * @return {?}
2126
- */
2127
- function (proto) {
2128
- /** @type {?} */
2129
- var m = new ListSocialPostsRequest();
2130
- m = Object.assign(m, proto);
2131
- if (proto.start) {
2132
- m.start = new Date(proto.start);
2133
- }
2134
- if (proto.end) {
2135
- m.end = new Date(proto.end);
2136
- }
2137
- if (proto.pageSize) {
2138
- m.pageSize = parseInt(proto.pageSize, 10);
2139
- }
2140
- return m;
2141
- };
2142
- /**
2143
- * @return {?}
2144
- */
2145
- ListSocialPostsRequest.prototype.toApiJson = /**
2146
- * @return {?}
2147
- */
2148
- function () {
2149
- /** @type {?} */
2150
- var toReturn = {};
2151
- if (typeof this.start !== 'undefined' && this.start !== null) {
2152
- toReturn['start'] = 'toApiJson' in this.start ? ((/** @type {?} */ (this.start))).toApiJson() : this.start;
2153
- }
2154
- if (typeof this.end !== 'undefined' && this.end !== null) {
2155
- toReturn['end'] = 'toApiJson' in this.end ? ((/** @type {?} */ (this.end))).toApiJson() : this.end;
2156
- }
2157
- if (typeof this.businessId !== 'undefined') {
2158
- toReturn['businessId'] = this.businessId;
2159
- }
2160
- if (typeof this.partnerId !== 'undefined') {
2161
- toReturn['partnerId'] = this.partnerId;
2162
- }
2163
- if (typeof this.cursor !== 'undefined') {
2164
- toReturn['cursor'] = this.cursor;
2165
- }
2166
- if (typeof this.socialServiceIds !== 'undefined') {
2167
- toReturn['socialServiceIds'] = this.socialServiceIds;
2168
- }
2169
- if (typeof this.tags !== 'undefined') {
2170
- toReturn['tags'] = this.tags;
2171
- }
2172
- if (typeof this.pageSize !== 'undefined') {
2173
- toReturn['pageSize'] = this.pageSize;
2174
- }
2175
- return toReturn;
2176
- };
2177
- return ListSocialPostsRequest;
2178
- }());
2179
- var ListSocialPostsResponse = /** @class */ (function () {
2180
- function ListSocialPostsResponse(kwargs) {
2181
- if (!kwargs) {
2182
- return;
2183
- }
2184
- Object.assign(this, kwargs);
2185
- }
2186
- /**
2187
- * @param {?} proto
2188
- * @return {?}
2189
- */
2190
- ListSocialPostsResponse.fromProto = /**
2191
- * @param {?} proto
2192
- * @return {?}
2193
- */
2194
- function (proto) {
2195
- /** @type {?} */
2196
- var m = new ListSocialPostsResponse();
2197
- m = Object.assign(m, proto);
2198
- if (proto.socialPosts) {
2199
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
2200
- }
2201
- return m;
2202
- };
2203
- /**
2204
- * @return {?}
2205
- */
2206
- ListSocialPostsResponse.prototype.toApiJson = /**
2207
- * @return {?}
2208
- */
2209
- function () {
2210
- /** @type {?} */
2211
- var toReturn = {};
2212
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
2213
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? ((/** @type {?} */ (this.socialPosts))).toApiJson() : this.socialPosts;
2214
- }
2215
- if (typeof this.nextCursor !== 'undefined') {
2216
- toReturn['nextCursor'] = this.nextCursor;
2217
- }
2218
- if (typeof this.hasMore !== 'undefined') {
2219
- toReturn['hasMore'] = this.hasMore;
2220
- }
2221
- return toReturn;
2222
- };
2223
- return ListSocialPostsResponse;
2224
- }());
2225
- var PartnerListScheduledPostsResponse = /** @class */ (function () {
2226
- function PartnerListScheduledPostsResponse(kwargs) {
2227
- if (!kwargs) {
2228
- return;
2229
- }
2230
- Object.assign(this, kwargs);
2231
- }
2232
- /**
2233
- * @param {?} proto
2234
- * @return {?}
2235
- */
2236
- PartnerListScheduledPostsResponse.fromProto = /**
2237
- * @param {?} proto
2238
- * @return {?}
2239
- */
2240
- function (proto) {
2241
- /** @type {?} */
2242
- var m = new PartnerListScheduledPostsResponse();
2243
- m = Object.assign(m, proto);
2244
- if (proto.socialPosts) {
2245
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
2246
- }
2247
- return m;
2248
- };
2249
- /**
2250
- * @return {?}
2251
- */
2252
- PartnerListScheduledPostsResponse.prototype.toApiJson = /**
2253
- * @return {?}
2254
- */
2255
- function () {
2256
- /** @type {?} */
2257
- var toReturn = {};
2258
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
2259
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? ((/** @type {?} */ (this.socialPosts))).toApiJson() : this.socialPosts;
2260
- }
2261
- if (typeof this.nextCursor !== 'undefined') {
2262
- toReturn['nextCursor'] = this.nextCursor;
2263
- }
2264
- if (typeof this.hasMore !== 'undefined') {
2265
- toReturn['hasMore'] = this.hasMore;
2266
- }
2267
- return toReturn;
2268
- };
2269
- return PartnerListScheduledPostsResponse;
2270
- }());
2271
- var PartnerListScheduledSocialPostsRequest = /** @class */ (function () {
2272
- function PartnerListScheduledSocialPostsRequest(kwargs) {
2273
- if (!kwargs) {
2274
- return;
2275
- }
2276
- Object.assign(this, kwargs);
2277
- }
2278
- /**
2279
- * @param {?} proto
2280
- * @return {?}
2281
- */
2282
- PartnerListScheduledSocialPostsRequest.fromProto = /**
2283
- * @param {?} proto
2284
- * @return {?}
2285
- */
2286
- function (proto) {
2287
- /** @type {?} */
2288
- var m = new PartnerListScheduledSocialPostsRequest();
2289
- m = Object.assign(m, proto);
2290
- if (proto.filters) {
2291
- m.filters = PartnerListScheduledSocialPostsRequestFilters.fromProto(proto.filters);
2292
- }
2293
- if (proto.pageSize) {
2294
- m.pageSize = parseInt(proto.pageSize, 10);
2295
- }
2296
- return m;
2297
- };
2298
- /**
2299
- * @return {?}
2300
- */
2301
- PartnerListScheduledSocialPostsRequest.prototype.toApiJson = /**
2302
- * @return {?}
2303
- */
2304
- function () {
2305
- /** @type {?} */
2306
- var toReturn = {};
2307
- if (typeof this.cursor !== 'undefined') {
2308
- toReturn['cursor'] = this.cursor;
2309
- }
2310
- if (typeof this.filters !== 'undefined' && this.filters !== null) {
2311
- toReturn['filters'] = 'toApiJson' in this.filters ? ((/** @type {?} */ (this.filters))).toApiJson() : this.filters;
2312
- }
2313
- if (typeof this.pageSize !== 'undefined') {
2314
- toReturn['pageSize'] = this.pageSize;
2315
- }
2316
- return toReturn;
2317
- };
2318
- return PartnerListScheduledSocialPostsRequest;
2319
- }());
2320
- var RemoveFromMultilocationPostRequest = /** @class */ (function () {
2321
- function RemoveFromMultilocationPostRequest(kwargs) {
2322
- if (!kwargs) {
2323
- return;
2324
- }
2325
- Object.assign(this, kwargs);
2326
- }
2327
- /**
2328
- * @param {?} proto
2329
- * @return {?}
2330
- */
2331
- RemoveFromMultilocationPostRequest.fromProto = /**
2332
- * @param {?} proto
2333
- * @return {?}
2334
- */
2335
- function (proto) {
2336
- /** @type {?} */
2337
- var m = new RemoveFromMultilocationPostRequest();
2338
- m = Object.assign(m, proto);
2339
- if (proto.reason) {
2340
- m.reason = enumStringToValue$5(RemoveReason, proto.reason);
2341
- }
2342
- if (proto.locations) {
2343
- m.locations = proto.locations.map(Location.fromProto);
2344
- }
2345
- return m;
2346
- };
2347
- /**
2348
- * @return {?}
2349
- */
2350
- RemoveFromMultilocationPostRequest.prototype.toApiJson = /**
2351
- * @return {?}
2352
- */
2353
- function () {
2354
- /** @type {?} */
2355
- var toReturn = {};
2356
- if (typeof this.reason !== 'undefined') {
2357
- toReturn['reason'] = this.reason;
2358
- }
2359
- if (typeof this.brandId !== 'undefined') {
2360
- toReturn['brandId'] = this.brandId;
2361
- }
2362
- if (typeof this.multilocationId !== 'undefined') {
2363
- toReturn['multilocationId'] = this.multilocationId;
2364
- }
2365
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
2366
- toReturn['locations'] = 'toApiJson' in this.locations ? ((/** @type {?} */ (this.locations))).toApiJson() : this.locations;
2367
- }
2368
- return toReturn;
2369
- };
2370
- return RemoveFromMultilocationPostRequest;
2371
- }());
2372
- var SchedulePostRequest = /** @class */ (function () {
2373
- function SchedulePostRequest(kwargs) {
2374
- if (!kwargs) {
2375
- return;
2376
- }
2377
- Object.assign(this, kwargs);
2378
- }
2379
- /**
2380
- * @param {?} proto
2381
- * @return {?}
2382
- */
2383
- SchedulePostRequest.fromProto = /**
2384
- * @param {?} proto
2385
- * @return {?}
2386
- */
2387
- function (proto) {
2388
- /** @type {?} */
2389
- var m = new SchedulePostRequest();
2390
- m = Object.assign(m, proto);
2391
- if (proto.socialPost) {
2392
- m.socialPost = SocialPostData.fromProto(proto.socialPost);
2393
- }
2394
- return m;
2395
- };
2396
- /**
2397
- * @return {?}
2398
- */
2399
- SchedulePostRequest.prototype.toApiJson = /**
2400
- * @return {?}
2401
- */
2402
- function () {
2403
- /** @type {?} */
2404
- var toReturn = {};
2405
- if (typeof this.socialPost !== 'undefined' && this.socialPost !== null) {
2406
- toReturn['socialPost'] = 'toApiJson' in this.socialPost ? ((/** @type {?} */ (this.socialPost))).toApiJson() : this.socialPost;
2407
- }
2408
- if (typeof this.socialServiceIds !== 'undefined') {
2409
- toReturn['socialServiceIds'] = this.socialServiceIds;
2410
- }
2411
- if (typeof this.partnerId !== 'undefined') {
2412
- toReturn['partnerId'] = this.partnerId;
2413
- }
2414
- if (typeof this.businessId !== 'undefined') {
2415
- toReturn['businessId'] = this.businessId;
2416
- }
2417
- return toReturn;
2418
- };
2419
- return SchedulePostRequest;
2420
- }());
2421
- var SchedulePostResponse = /** @class */ (function () {
2422
- function SchedulePostResponse(kwargs) {
2423
- if (!kwargs) {
2424
- return;
2425
- }
2426
- Object.assign(this, kwargs);
2427
- }
2428
- /**
2429
- * @param {?} proto
2430
- * @return {?}
2431
- */
2432
- SchedulePostResponse.fromProto = /**
2433
- * @param {?} proto
2434
- * @return {?}
2435
- */
2436
- function (proto) {
2437
- /** @type {?} */
2438
- var m = new SchedulePostResponse();
2439
- m = Object.assign(m, proto);
2440
- if (proto.statuses) {
2441
- m.statuses = proto.statuses.map(SchedulePostStatus.fromProto);
2442
- }
2443
- return m;
2444
- };
2445
- /**
2446
- * @return {?}
2447
- */
2448
- SchedulePostResponse.prototype.toApiJson = /**
2449
- * @return {?}
2450
- */
2451
- function () {
2452
- /** @type {?} */
2453
- var toReturn = {};
2454
- if (typeof this.statuses !== 'undefined' && this.statuses !== null) {
2455
- toReturn['statuses'] = 'toApiJson' in this.statuses ? ((/** @type {?} */ (this.statuses))).toApiJson() : this.statuses;
2456
- }
2457
- return toReturn;
2458
- };
2459
- return SchedulePostResponse;
2460
- }());
2461
- var ScheduleToAllPagesRequest = /** @class */ (function () {
2462
- function ScheduleToAllPagesRequest(kwargs) {
2463
- if (!kwargs) {
2464
- return;
2465
- }
2466
- Object.assign(this, kwargs);
2467
- }
2468
- /**
2469
- * @param {?} proto
2470
- * @return {?}
2471
- */
2472
- ScheduleToAllPagesRequest.fromProto = /**
2473
- * @param {?} proto
2474
- * @return {?}
2475
- */
2476
- function (proto) {
2477
- /** @type {?} */
2478
- var m = new ScheduleToAllPagesRequest();
2479
- m = Object.assign(m, proto);
2480
- if (proto.socialPost) {
2481
- m.socialPost = SocialPostData.fromProto(proto.socialPost);
2482
- }
2483
- return m;
2484
- };
2485
- /**
2486
- * @return {?}
2487
- */
2488
- ScheduleToAllPagesRequest.prototype.toApiJson = /**
2489
- * @return {?}
2490
- */
2491
- function () {
2492
- /** @type {?} */
2493
- var toReturn = {};
2494
- if (typeof this.socialPost !== 'undefined' && this.socialPost !== null) {
2495
- toReturn['socialPost'] = 'toApiJson' in this.socialPost ? ((/** @type {?} */ (this.socialPost))).toApiJson() : this.socialPost;
2496
- }
2497
- if (typeof this.partnerId !== 'undefined') {
2498
- toReturn['partnerId'] = this.partnerId;
2499
- }
2500
- if (typeof this.businessId !== 'undefined') {
2501
- toReturn['businessId'] = this.businessId;
2502
- }
2503
- return toReturn;
2504
- };
2505
- return ScheduleToAllPagesRequest;
2506
- }());
2507
- var ScheduleToAllPagesResponse = /** @class */ (function () {
2508
- function ScheduleToAllPagesResponse(kwargs) {
2509
- if (!kwargs) {
2510
- return;
2511
- }
2512
- Object.assign(this, kwargs);
2513
- }
2514
- /**
2515
- * @param {?} proto
2516
- * @return {?}
2517
- */
2518
- ScheduleToAllPagesResponse.fromProto = /**
2519
- * @param {?} proto
2520
- * @return {?}
2521
- */
2522
- function (proto) {
2523
- /** @type {?} */
2524
- var m = new ScheduleToAllPagesResponse();
2525
- m = Object.assign(m, proto);
2526
- if (proto.statuses) {
2527
- m.statuses = proto.statuses.map(SchedulePostStatus.fromProto);
2528
- }
2529
- return m;
2530
- };
2531
- /**
2532
- * @return {?}
2533
- */
2534
- ScheduleToAllPagesResponse.prototype.toApiJson = /**
2535
- * @return {?}
2536
- */
2537
- function () {
2538
- /** @type {?} */
2539
- var toReturn = {};
2540
- if (typeof this.statuses !== 'undefined' && this.statuses !== null) {
2541
- toReturn['statuses'] = 'toApiJson' in this.statuses ? ((/** @type {?} */ (this.statuses))).toApiJson() : this.statuses;
2542
- }
2543
- return toReturn;
2544
- };
2545
- return ScheduleToAllPagesResponse;
2546
- }());
2547
- var UpdatePostTemplateRequest = /** @class */ (function () {
2548
- function UpdatePostTemplateRequest(kwargs) {
2549
- if (!kwargs) {
2550
- return;
2551
- }
2552
- Object.assign(this, kwargs);
2553
- }
2554
- /**
2555
- * @param {?} proto
2556
- * @return {?}
2557
- */
2558
- UpdatePostTemplateRequest.fromProto = /**
2559
- * @param {?} proto
2560
- * @return {?}
2561
- */
2562
- function (proto) {
2563
- /** @type {?} */
2564
- var m = new UpdatePostTemplateRequest();
2565
- m = Object.assign(m, proto);
2566
- if (proto.postDateTime) {
2567
- m.postDateTime = new Date(proto.postDateTime);
2568
- }
2569
- return m;
2570
- };
2571
- /**
2572
- * @return {?}
2573
- */
2574
- UpdatePostTemplateRequest.prototype.toApiJson = /**
2575
- * @return {?}
2576
- */
2577
- function () {
2578
- /** @type {?} */
2579
- var toReturn = {};
2580
- if (typeof this.accountGroupId !== 'undefined') {
2581
- toReturn['accountGroupId'] = this.accountGroupId;
2582
- }
2583
- if (typeof this.templateId !== 'undefined') {
2584
- toReturn['templateId'] = this.templateId;
2585
- }
2586
- if (typeof this.title !== 'undefined') {
2587
- toReturn['title'] = this.title;
2588
- }
2589
- if (typeof this.postText !== 'undefined') {
2590
- toReturn['postText'] = this.postText;
2591
- }
2592
- if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
2593
- toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? ((/** @type {?} */ (this.postDateTime))).toApiJson() : this.postDateTime;
2594
- }
2595
- if (typeof this.gmbPostCustomization !== 'undefined') {
2596
- toReturn['gmbPostCustomization'] = this.gmbPostCustomization;
2597
- }
2598
- if (typeof this.imageUrl !== 'undefined') {
2599
- toReturn['imageUrl'] = this.imageUrl;
2600
- }
2601
- if (typeof this.imagePath !== 'undefined') {
2602
- toReturn['imagePath'] = this.imagePath;
2603
- }
2604
- if (typeof this.imageSize !== 'undefined') {
2605
- toReturn['imageSize'] = this.imageSize;
2606
- }
2607
- if (typeof this.previews !== 'undefined') {
2608
- toReturn['previews'] = this.previews;
2609
- }
2610
- if (typeof this.options !== 'undefined') {
2611
- toReturn['options'] = this.options;
2612
- }
2613
- if (typeof this.videoUrl !== 'undefined') {
2614
- toReturn['videoUrl'] = this.videoUrl;
2615
- }
2616
- return toReturn;
2617
- };
2618
- return UpdatePostTemplateRequest;
2619
- }());
2620
-
2621
- /**
2622
- * @fileoverview added by tsickle
2623
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2624
- */
2625
-
2626
- /**
2627
- * @fileoverview added by tsickle
2628
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2629
- */
2630
- var HostService = /** @class */ (function () {
2631
- function HostService(environmentService) {
2632
- this.environmentService = environmentService;
2633
- }
2634
- /**
2635
- * @return {?}
2636
- */
2637
- HostService.prototype.host = /**
2638
- * @return {?}
2639
- */
2640
- function () {
2641
- if (this._host) {
2642
- return this._host;
2643
- }
2644
- switch (this.environmentService.getEnvironment()) {
2645
- case Environment.LOCAL:
2646
- this._host = 'social-post.vendasta-local.com';
2647
- break;
2648
- case Environment.TEST:
2649
- this._host = '';
2650
- break;
2651
- case Environment.DEMO:
2652
- this._host = 'social-posts-demo.apigateway.co';
2653
- break;
2654
- case Environment.PROD:
2655
- this._host = 'social-posts-prod.apigateway.co';
2656
- break;
2657
- }
2658
- return this._host;
2659
- };
2660
- /**
2661
- * @return {?}
2662
- */
2663
- HostService.prototype.httpsHost = /**
2664
- * @return {?}
2665
- */
2666
- function () {
2667
- if (this._httpsHost) {
2668
- return this._httpsHost;
2669
- }
2670
- switch (this.environmentService.getEnvironment()) {
2671
- case Environment.LOCAL:
2672
- this._httpsHost = 'social-post.vendasta-local.com';
2673
- break;
2674
- case Environment.TEST:
2675
- this._httpsHost = '';
2676
- break;
2677
- case Environment.DEMO:
2678
- this._httpsHost = 'social-posts-api-demo.apigateway.co';
2679
- break;
2680
- case Environment.PROD:
2681
- this._httpsHost = 'social-posts-api-prod.apigateway.co';
2682
- break;
2683
- }
2684
- return this._httpsHost;
2685
- };
2686
- /**
2687
- * @return {?}
2688
- */
2689
- HostService.prototype.hostWithScheme = /**
2690
- * @return {?}
2691
- */
2692
- function () {
2693
- /** @type {?} */
2694
- var scheme = this.environmentService.getEnvironment() === Environment.LOCAL ? 'http://' : 'https://';
2695
- return scheme + this.host();
2696
- };
2697
- /**
2698
- * @return {?}
2699
- */
2700
- HostService.prototype.httpsHostWithScheme = /**
2701
- * @return {?}
2702
- */
2703
- function () {
2704
- /** @type {?} */
2705
- var scheme = this.environmentService.getEnvironment() === Environment.LOCAL ? 'http://' : 'https://';
2706
- return scheme + this.httpsHost();
2707
- };
2708
- HostService.decorators = [
2709
- { type: Injectable, args: [{ providedIn: 'root' },] }
2710
- ];
2711
- /** @nocollapse */
2712
- HostService.ctorParameters = function () { return [
2713
- { type: EnvironmentService }
2714
- ]; };
2715
- /** @nocollapse */ HostService.ngInjectableDef = ɵɵdefineInjectable({ factory: function HostService_Factory() { return new HostService(ɵɵinject(EnvironmentService)); }, token: HostService, providedIn: "root" });
2716
- return HostService;
2717
- }());
2718
-
2719
- /**
2720
- * @fileoverview added by tsickle
2721
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2722
- */
2723
- var SocialPostsApiService = /** @class */ (function () {
2724
- function SocialPostsApiService(http, hostService) {
2725
- this.http = http;
2726
- this.hostService = hostService;
2727
- }
2728
- /**
2729
- * @private
2730
- * @return {?}
2731
- */
2732
- SocialPostsApiService.prototype.apiOptions = /**
2733
- * @private
2734
- * @return {?}
2735
- */
2736
- function () {
2737
- return {
2738
- headers: new HttpHeaders({
2739
- 'Content-Type': 'application/json'
2740
- }),
2741
- withCredentials: true
2742
- };
2743
- };
2744
- /**
2745
- * @param {?} r
2746
- * @return {?}
2747
- */
2748
- SocialPostsApiService.prototype.list = /**
2749
- * @param {?} r
2750
- * @return {?}
2751
- */
2752
- function (r) {
2753
- /** @type {?} */
2754
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new ListSocialPostsRequest(r);
2755
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/List", request.toApiJson(), this.apiOptions())
2756
- .pipe(map((/**
2757
- * @param {?} resp
2758
- * @return {?}
2759
- */
2760
- function (resp) { return ListSocialPostsResponse.fromProto(resp); })), share());
2761
- };
2762
- /**
2763
- * @param {?} r
2764
- * @return {?}
2765
- */
2766
- SocialPostsApiService.prototype.deleteSocialPost = /**
2767
- * @param {?} r
2768
- * @return {?}
2769
- */
2770
- function (r) {
2771
- /** @type {?} */
2772
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new DeleteSocialPostRequest(r);
2773
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/DeleteSocialPost", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
2774
- };
2775
- /**
2776
- * @param {?} r
2777
- * @return {?}
2778
- */
2779
- SocialPostsApiService.prototype.scheduleToAllPages = /**
2780
- * @param {?} r
2781
- * @return {?}
2782
- */
2783
- function (r) {
2784
- /** @type {?} */
2785
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new ScheduleToAllPagesRequest(r);
2786
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/ScheduleToAllPages", request.toApiJson(), this.apiOptions())
2787
- .pipe(map((/**
2788
- * @param {?} resp
2789
- * @return {?}
2790
- */
2791
- function (resp) { return ScheduleToAllPagesResponse.fromProto(resp); })), share());
2792
- };
2793
- /**
2794
- * @param {?} r
2795
- * @return {?}
2796
- */
2797
- SocialPostsApiService.prototype.schedule = /**
2798
- * @param {?} r
2799
- * @return {?}
2800
- */
2801
- function (r) {
2802
- /** @type {?} */
2803
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new SchedulePostRequest(r);
2804
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/Schedule", request.toApiJson(), this.apiOptions())
2805
- .pipe(map((/**
2806
- * @param {?} resp
2807
- * @return {?}
2808
- */
2809
- function (resp) { return SchedulePostResponse.fromProto(resp); })), share());
2810
- };
2811
- /**
2812
- * @param {?} r
2813
- * @return {?}
2814
- */
2815
- SocialPostsApiService.prototype.getMultiSocialPosts = /**
2816
- * @param {?} r
2817
- * @return {?}
2818
- */
2819
- function (r) {
2820
- /** @type {?} */
2821
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new GetMultiSocialPostsRequest(r);
2822
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/GetMultiSocialPosts", request.toApiJson(), this.apiOptions())
2823
- .pipe(map((/**
2824
- * @param {?} resp
2825
- * @return {?}
2826
- */
2827
- function (resp) { return GetMultiSocialPostsResponse.fromProto(resp); })), share());
2828
- };
2829
- /**
2830
- * @param {?} r
2831
- * @return {?}
2832
- */
2833
- SocialPostsApiService.prototype.getMultiSocialPostStats = /**
2834
- * @param {?} r
2835
- * @return {?}
2836
- */
2837
- function (r) {
2838
- /** @type {?} */
2839
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new GetMultiSocialPostStatsRequest(r);
2840
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/GetMultiSocialPostStats", request.toApiJson(), this.apiOptions())
2841
- .pipe(map((/**
2842
- * @param {?} resp
2843
- * @return {?}
2844
- */
2845
- function (resp) { return GetMultiSocialPostStatsResponse.fromProto(resp); })), share());
2846
- };
2847
- /**
2848
- * @param {?} r
2849
- * @return {?}
2850
- */
2851
- SocialPostsApiService.prototype.getScheduledPostCount = /**
2852
- * @param {?} r
2853
- * @return {?}
2854
- */
2855
- function (r) {
2856
- /** @type {?} */
2857
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new GetScheduledPostCountRequest(r);
2858
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/GetScheduledPostCount", request.toApiJson(), this.apiOptions())
2859
- .pipe(map((/**
2860
- * @param {?} resp
2861
- * @return {?}
2862
- */
2863
- function (resp) { return GetScheduledPostCountResponse.fromProto(resp); })), share());
2864
- };
2865
- SocialPostsApiService.decorators = [
2866
- { type: Injectable, args: [{ providedIn: 'root' },] }
2867
- ];
2868
- /** @nocollapse */
2869
- SocialPostsApiService.ctorParameters = function () { return [
2870
- { type: HttpClient },
2871
- { type: HostService }
2872
- ]; };
2873
- /** @nocollapse */ SocialPostsApiService.ngInjectableDef = ɵɵdefineInjectable({ factory: function SocialPostsApiService_Factory() { return new SocialPostsApiService(ɵɵinject(HttpClient), ɵɵinject(HostService)); }, token: SocialPostsApiService, providedIn: "root" });
2874
- return SocialPostsApiService;
2875
- }());
2876
-
2877
- /**
2878
- * @fileoverview added by tsickle
2879
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2880
- */
2881
- var SocialPostsService = /** @class */ (function () {
2882
- function SocialPostsService(socialPostsApiService) {
2883
- this.socialPostsApiService = socialPostsApiService;
2884
- }
2885
- /**
2886
- * @param {?} start
2887
- * @param {?} end
2888
- * @param {?} socialServiceIds
2889
- * @param {?} businessId
2890
- * @param {?} partnerId
2891
- * @param {?} cursor
2892
- * @param {?} tags
2893
- * @param {?} pageSize
2894
- * @return {?}
2895
- */
2896
- SocialPostsService.prototype.list = /**
2897
- * @param {?} start
2898
- * @param {?} end
2899
- * @param {?} socialServiceIds
2900
- * @param {?} businessId
2901
- * @param {?} partnerId
2902
- * @param {?} cursor
2903
- * @param {?} tags
2904
- * @param {?} pageSize
2905
- * @return {?}
2906
- */
2907
- function (start, end, socialServiceIds, businessId, partnerId, cursor, tags, pageSize) {
2908
- /** @type {?} */
2909
- var req = new ListSocialPostsRequest({
2910
- start: start,
2911
- end: end,
2912
- businessId: businessId,
2913
- partnerId: partnerId,
2914
- cursor: cursor,
2915
- socialServiceIds: socialServiceIds,
2916
- tags: tags,
2917
- pageSize: pageSize,
2918
- });
2919
- return this.socialPostsApiService.list(req);
2920
- };
2921
- /**
2922
- * @param {?} businessId
2923
- * @param {?} internalPostIds
2924
- * @return {?}
2925
- */
2926
- SocialPostsService.prototype.getMultiSocialPosts = /**
2927
- * @param {?} businessId
2928
- * @param {?} internalPostIds
2929
- * @return {?}
2930
- */
2931
- function (businessId, internalPostIds) {
2932
- if (!internalPostIds || internalPostIds.length === 0) {
2933
- /** @type {?} */
2934
- var res = new GetMultiSocialPostsResponse();
2935
- return of(res);
2936
- }
2937
- /** @type {?} */
2938
- var req = new GetMultiSocialPostsRequest({ businessId: businessId, internalPostIds: internalPostIds });
2939
- return this.socialPostsApiService.getMultiSocialPosts(req);
2940
- };
2941
- /**
2942
- * @param {?} partnerId
2943
- * @param {?} businessId
2944
- * @param {?} socialServiceIds
2945
- * @return {?}
2946
- */
2947
- SocialPostsService.prototype.getScheduledPostCount = /**
2948
- * @param {?} partnerId
2949
- * @param {?} businessId
2950
- * @param {?} socialServiceIds
2951
- * @return {?}
2952
- */
2953
- function (partnerId, businessId, socialServiceIds) {
2954
- /** @type {?} */
2955
- var req = new GetScheduledPostCountRequest({ partnerId: partnerId, businessId: businessId, socialServiceIds: socialServiceIds });
2956
- return this.socialPostsApiService.getScheduledPostCount(req);
2957
- };
2958
- SocialPostsService.decorators = [
2959
- { type: Injectable, args: [{ providedIn: 'root' },] }
2960
- ];
2961
- /** @nocollapse */
2962
- SocialPostsService.ctorParameters = function () { return [
2963
- { type: SocialPostsApiService }
2964
- ]; };
2965
- /** @nocollapse */ SocialPostsService.ngInjectableDef = ɵɵdefineInjectable({ factory: function SocialPostsService_Factory() { return new SocialPostsService(ɵɵinject(SocialPostsApiService)); }, token: SocialPostsService, providedIn: "root" });
2966
- return SocialPostsService;
2967
- }());
2968
-
2969
- /**
2970
- * @fileoverview added by tsickle
2971
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2972
- */
2973
- var PostTemplatesApiService = /** @class */ (function () {
2974
- function PostTemplatesApiService(http, hostService) {
2975
- this.http = http;
2976
- this.hostService = hostService;
2977
- }
2978
- /**
2979
- * @private
2980
- * @return {?}
2981
- */
2982
- PostTemplatesApiService.prototype.apiOptions = /**
2983
- * @private
2984
- * @return {?}
2985
- */
2986
- function () {
2987
- return {
2988
- headers: new HttpHeaders({
2989
- 'Content-Type': 'application/json'
2990
- }),
2991
- withCredentials: true
2992
- };
2993
- };
2994
- /**
2995
- * @param {?} r
2996
- * @return {?}
2997
- */
2998
- PostTemplatesApiService.prototype.updatePostTemplate = /**
2999
- * @param {?} r
3000
- * @return {?}
3001
- */
3002
- function (r) {
3003
- /** @type {?} */
3004
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new UpdatePostTemplateRequest(r);
3005
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/UpdatePostTemplate", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
3006
- };
3007
- /**
3008
- * @param {?} r
3009
- * @return {?}
3010
- */
3011
- PostTemplatesApiService.prototype.createPostTemplate = /**
3012
- * @param {?} r
3013
- * @return {?}
3014
- */
3015
- function (r) {
3016
- /** @type {?} */
3017
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new CreatePostTemplateRequest(r);
3018
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/CreatePostTemplate", request.toApiJson(), this.apiOptions())
3019
- .pipe(map((/**
3020
- * @param {?} resp
3021
- * @return {?}
3022
- */
3023
- function (resp) { return CreatePostTemplateResponse.fromProto(resp); })), share());
3024
- };
3025
- /**
3026
- * @param {?} r
3027
- * @return {?}
3028
- */
3029
- PostTemplatesApiService.prototype.getPostTemplate = /**
3030
- * @param {?} r
3031
- * @return {?}
3032
- */
3033
- function (r) {
3034
- /** @type {?} */
3035
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new GetPostTemplateRequest(r);
3036
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/GetPostTemplate", request.toApiJson(), this.apiOptions())
3037
- .pipe(map((/**
3038
- * @param {?} resp
3039
- * @return {?}
3040
- */
3041
- function (resp) { return GetPostTemplateResponse.fromProto(resp); })), share());
3042
- };
3043
- /**
3044
- * @param {?} r
3045
- * @return {?}
3046
- */
3047
- PostTemplatesApiService.prototype.listPostTemplates = /**
3048
- * @param {?} r
3049
- * @return {?}
3050
- */
3051
- function (r) {
3052
- /** @type {?} */
3053
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new ListPostTemplatesRequest(r);
3054
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/ListPostTemplates", request.toApiJson(), this.apiOptions())
3055
- .pipe(map((/**
3056
- * @param {?} resp
3057
- * @return {?}
3058
- */
3059
- function (resp) { return ListPostTemplatesResponse.fromProto(resp); })), share());
3060
- };
3061
- /**
3062
- * @param {?} r
3063
- * @return {?}
3064
- */
3065
- PostTemplatesApiService.prototype.deletePostTemplate = /**
3066
- * @param {?} r
3067
- * @return {?}
3068
- */
3069
- function (r) {
3070
- /** @type {?} */
3071
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new DeletePostTemplateRequest(r);
3072
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/DeletePostTemplate", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
3073
- };
3074
- PostTemplatesApiService.decorators = [
3075
- { type: Injectable, args: [{ providedIn: 'root' },] }
3076
- ];
3077
- /** @nocollapse */
3078
- PostTemplatesApiService.ctorParameters = function () { return [
3079
- { type: HttpClient },
3080
- { type: HostService }
3081
- ]; };
3082
- /** @nocollapse */ PostTemplatesApiService.ngInjectableDef = ɵɵdefineInjectable({ factory: function PostTemplatesApiService_Factory() { return new PostTemplatesApiService(ɵɵinject(HttpClient), ɵɵinject(HostService)); }, token: PostTemplatesApiService, providedIn: "root" });
3083
- return PostTemplatesApiService;
3084
- }());
3085
-
3086
- /**
3087
- * @fileoverview added by tsickle
3088
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3089
- */
3090
- var PostTemplatesService = /** @class */ (function () {
3091
- function PostTemplatesService(socialPostsApiService) {
3092
- this.socialPostsApiService = socialPostsApiService;
3093
- }
3094
- /**
3095
- * @param {?} accountGroupId
3096
- * @param {?} templateId
3097
- * @param {?} title
3098
- * @param {?} postText
3099
- * @param {?} postDateTime
3100
- * @param {?} gmbPostCustomization
3101
- * @param {?} imageUrl
3102
- * @param {?} imagePath
3103
- * @param {?} imageSize
3104
- * @param {?} previews
3105
- * @param {?} options
3106
- * @param {?} videoUrl
3107
- * @return {?}
3108
- */
3109
- PostTemplatesService.prototype.updatePostTemplate = /**
3110
- * @param {?} accountGroupId
3111
- * @param {?} templateId
3112
- * @param {?} title
3113
- * @param {?} postText
3114
- * @param {?} postDateTime
3115
- * @param {?} gmbPostCustomization
3116
- * @param {?} imageUrl
3117
- * @param {?} imagePath
3118
- * @param {?} imageSize
3119
- * @param {?} previews
3120
- * @param {?} options
3121
- * @param {?} videoUrl
3122
- * @return {?}
3123
- */
3124
- function (accountGroupId, templateId, title, postText, postDateTime, gmbPostCustomization, imageUrl, imagePath, imageSize, previews, options, videoUrl) {
3125
- /** @type {?} */
3126
- var req = new UpdatePostTemplateRequest({
3127
- accountGroupId: accountGroupId,
3128
- templateId: templateId,
3129
- title: title,
3130
- postText: postText,
3131
- postDateTime: postDateTime,
3132
- gmbPostCustomization: gmbPostCustomization,
3133
- imageUrl: imageUrl,
3134
- imagePath: imagePath,
3135
- imageSize: imageSize,
3136
- previews: previews,
3137
- options: options,
3138
- videoUrl: videoUrl
3139
- });
3140
- return this.socialPostsApiService.updatePostTemplate(req);
3141
- };
3142
- /**
3143
- * @param {?} accountGroupId
3144
- * @param {?} title
3145
- * @param {?} postText
3146
- * @param {?} postDateTime
3147
- * @param {?} gmbPostCustomization
3148
- * @param {?} imageUrl
3149
- * @param {?} imagePath
3150
- * @param {?} imageSize
3151
- * @param {?} previews
3152
- * @param {?} options
3153
- * @param {?} videoUrl
3154
- * @return {?}
3155
- */
3156
- PostTemplatesService.prototype.createPostTemplate = /**
3157
- * @param {?} accountGroupId
3158
- * @param {?} title
3159
- * @param {?} postText
3160
- * @param {?} postDateTime
3161
- * @param {?} gmbPostCustomization
3162
- * @param {?} imageUrl
3163
- * @param {?} imagePath
3164
- * @param {?} imageSize
3165
- * @param {?} previews
3166
- * @param {?} options
3167
- * @param {?} videoUrl
3168
- * @return {?}
3169
- */
3170
- function (accountGroupId, title, postText, postDateTime, gmbPostCustomization, imageUrl, imagePath, imageSize, previews, options, videoUrl) {
3171
- /** @type {?} */
3172
- var req = new CreatePostTemplateRequest({
3173
- accountGroupId: accountGroupId,
3174
- title: title,
3175
- postText: postText,
3176
- postDateTime: postDateTime,
3177
- gmbPostCustomization: gmbPostCustomization,
3178
- imageUrl: imageUrl,
3179
- imagePath: imagePath,
3180
- imageSize: imageSize,
3181
- previews: previews,
3182
- options: options,
3183
- videoUrl: videoUrl
3184
- });
3185
- return this.socialPostsApiService.createPostTemplate(req);
3186
- };
3187
- /**
3188
- * @param {?} accountGroupId
3189
- * @param {?} templateId
3190
- * @return {?}
3191
- */
3192
- PostTemplatesService.prototype.getPostTemplate = /**
3193
- * @param {?} accountGroupId
3194
- * @param {?} templateId
3195
- * @return {?}
3196
- */
3197
- function (accountGroupId, templateId) {
3198
- /** @type {?} */
3199
- var req = new GetPostTemplateRequest({
3200
- accountGroupId: accountGroupId,
3201
- templateId: templateId
3202
- });
3203
- return this.socialPostsApiService.getPostTemplate(req);
3204
- };
3205
- /**
3206
- * @param {?} accountGroupId
3207
- * @param {?} cursor
3208
- * @param {?} pageSize
3209
- * @return {?}
3210
- */
3211
- PostTemplatesService.prototype.listPostTemplates = /**
3212
- * @param {?} accountGroupId
3213
- * @param {?} cursor
3214
- * @param {?} pageSize
3215
- * @return {?}
3216
- */
3217
- function (accountGroupId, cursor, pageSize) {
3218
- /** @type {?} */
3219
- var req = new ListPostTemplatesRequest({
3220
- accountGroupId: accountGroupId,
3221
- cursor: cursor,
3222
- pageSize: pageSize
3223
- });
3224
- return this.socialPostsApiService.listPostTemplates(req);
3225
- };
3226
- /**
3227
- * @param {?} accountGroupId
3228
- * @param {?} templateId
3229
- * @return {?}
3230
- */
3231
- PostTemplatesService.prototype.deletePostTemplate = /**
3232
- * @param {?} accountGroupId
3233
- * @param {?} templateId
3234
- * @return {?}
3235
- */
3236
- function (accountGroupId, templateId) {
3237
- /** @type {?} */
3238
- var req = new DeletePostTemplateRequest({
3239
- accountGroupId: accountGroupId,
3240
- templateId: templateId
3241
- });
3242
- return this.socialPostsApiService.deletePostTemplate(req);
3243
- };
3244
- PostTemplatesService.decorators = [
3245
- { type: Injectable, args: [{ providedIn: 'root' },] }
3246
- ];
3247
- /** @nocollapse */
3248
- PostTemplatesService.ctorParameters = function () { return [
3249
- { type: PostTemplatesApiService }
3250
- ]; };
3251
- /** @nocollapse */ PostTemplatesService.ngInjectableDef = ɵɵdefineInjectable({ factory: function PostTemplatesService_Factory() { return new PostTemplatesService(ɵɵinject(PostTemplatesApiService)); }, token: PostTemplatesService, providedIn: "root" });
3252
- return PostTemplatesService;
3253
- }());
3254
-
3255
- /**
3256
- * @fileoverview added by tsickle
3257
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3258
- */
3259
- var MultilocationPostApiService = /** @class */ (function () {
3260
- function MultilocationPostApiService(http, hostService) {
3261
- this.http = http;
3262
- this.hostService = hostService;
3263
- }
3264
- /**
3265
- * @private
3266
- * @return {?}
3267
- */
3268
- MultilocationPostApiService.prototype.apiOptions = /**
3269
- * @private
3270
- * @return {?}
3271
- */
3272
- function () {
3273
- return {
3274
- headers: new HttpHeaders({
3275
- 'Content-Type': 'application/json'
3276
- }),
3277
- withCredentials: true
3278
- };
3279
- };
3280
- /**
3281
- * @param {?} r
3282
- * @return {?}
3283
- */
3284
- MultilocationPostApiService.prototype.createMultilocationPost = /**
3285
- * @param {?} r
3286
- * @return {?}
3287
- */
3288
- function (r) {
3289
- /** @type {?} */
3290
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new CreateMultilocationPostRequest(r);
3291
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/CreateMultilocationPost", request.toApiJson(), this.apiOptions())
3292
- .pipe(map((/**
3293
- * @param {?} resp
3294
- * @return {?}
3295
- */
3296
- function (resp) { return CreateMultilocationPostResponse.fromProto(resp); })), share());
3297
- };
3298
- /**
3299
- * @param {?} r
3300
- * @return {?}
3301
- */
3302
- MultilocationPostApiService.prototype.editMultilocationPost = /**
3303
- * @param {?} r
3304
- * @return {?}
3305
- */
3306
- function (r) {
3307
- /** @type {?} */
3308
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new EditMultilocationPostRequest(r);
3309
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/EditMultilocationPost", request.toApiJson(), this.apiOptions())
3310
- .pipe(map((/**
3311
- * @param {?} resp
3312
- * @return {?}
3313
- */
3314
- function (resp) { return EditMultilocationPostResponse.fromProto(resp); })), share());
3315
- };
3316
- /**
3317
- * @param {?} r
3318
- * @return {?}
3319
- */
3320
- MultilocationPostApiService.prototype.removeFromMultilocationPost = /**
3321
- * @param {?} r
3322
- * @return {?}
3323
- */
3324
- function (r) {
3325
- /** @type {?} */
3326
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new RemoveFromMultilocationPostRequest(r);
3327
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/RemoveFromMultilocationPost", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
3328
- };
3329
- /**
3330
- * @param {?} r
3331
- * @return {?}
3332
- */
3333
- MultilocationPostApiService.prototype.listMultilocationPostsForBrand = /**
3334
- * @param {?} r
3335
- * @return {?}
3336
- */
3337
- function (r) {
3338
- /** @type {?} */
3339
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new ListMultilocationPostsForBrandRequest(r);
3340
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/ListMultilocationPostsForBrand", request.toApiJson(), this.apiOptions())
3341
- .pipe(map((/**
3342
- * @param {?} resp
3343
- * @return {?}
3344
- */
3345
- function (resp) { return ListMultilocationPostsForBrandResponse.fromProto(resp); })), share());
3346
- };
3347
- /**
3348
- * @param {?} r
3349
- * @return {?}
3350
- */
3351
- MultilocationPostApiService.prototype.deleteMultilocationPost = /**
3352
- * @param {?} r
3353
- * @return {?}
3354
- */
3355
- function (r) {
3356
- /** @type {?} */
3357
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new DeleteMultilocationPostRequest(r);
3358
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/DeleteMultilocationPost", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
3359
- };
3360
- /**
3361
- * @param {?} r
3362
- * @return {?}
3363
- */
3364
- MultilocationPostApiService.prototype.getMultilocationPost = /**
3365
- * @param {?} r
3366
- * @return {?}
3367
- */
3368
- function (r) {
3369
- /** @type {?} */
3370
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new GetMultilocationPostRequest(r);
3371
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/GetMultilocationPost", request.toApiJson(), this.apiOptions())
3372
- .pipe(map((/**
3373
- * @param {?} resp
3374
- * @return {?}
3375
- */
3376
- function (resp) { return GetMultilocationPostResponse.fromProto(resp); })), share());
3377
- };
3378
- MultilocationPostApiService.decorators = [
3379
- { type: Injectable, args: [{ providedIn: 'root' },] }
3380
- ];
3381
- /** @nocollapse */
3382
- MultilocationPostApiService.ctorParameters = function () { return [
3383
- { type: HttpClient },
3384
- { type: HostService }
3385
- ]; };
3386
- /** @nocollapse */ MultilocationPostApiService.ngInjectableDef = ɵɵdefineInjectable({ factory: function MultilocationPostApiService_Factory() { return new MultilocationPostApiService(ɵɵinject(HttpClient), ɵɵinject(HostService)); }, token: MultilocationPostApiService, providedIn: "root" });
3387
- return MultilocationPostApiService;
3388
- }());
3389
-
3390
- /**
3391
- * @fileoverview added by tsickle
3392
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3393
- */
3394
- var MultilocationPostsService = /** @class */ (function () {
3395
- function MultilocationPostsService(multilocationApiService) {
3396
- this.multilocationApiService = multilocationApiService;
3397
- }
3398
- /**
3399
- * @param {?} brandId
3400
- * @param {?} text
3401
- * @param {?} media
3402
- * @param {?} gifs
3403
- * @param {?} videos
3404
- * @param {?} scheduledDate
3405
- * @param {?} locations
3406
- * @return {?}
3407
- */
3408
- MultilocationPostsService.prototype.createMultilocationPost = /**
3409
- * @param {?} brandId
3410
- * @param {?} text
3411
- * @param {?} media
3412
- * @param {?} gifs
3413
- * @param {?} videos
3414
- * @param {?} scheduledDate
3415
- * @param {?} locations
3416
- * @return {?}
3417
- */
3418
- function (brandId, text, media, gifs, videos, scheduledDate, locations) {
3419
- /** @type {?} */
3420
- var req = new CreateMultilocationPostRequest({
3421
- brandId: brandId,
3422
- text: text,
3423
- media: media,
3424
- gifs: gifs,
3425
- videos: videos,
3426
- scheduledDate: scheduledDate,
3427
- locations: locations
3428
- });
3429
- return this.multilocationApiService.createMultilocationPost(req);
3430
- };
3431
- /**
3432
- * @param {?} brandId
3433
- * @param {?} multilocationId
3434
- * @param {?} text
3435
- * @param {?} media
3436
- * @param {?} gifs
3437
- * @param {?} videos
3438
- * @param {?} scheduledDate
3439
- * @param {?} locations
3440
- * @param {?} fieldMask
3441
- * @return {?}
3442
- */
3443
- MultilocationPostsService.prototype.editMultilocationPost = /**
3444
- * @param {?} brandId
3445
- * @param {?} multilocationId
3446
- * @param {?} text
3447
- * @param {?} media
3448
- * @param {?} gifs
3449
- * @param {?} videos
3450
- * @param {?} scheduledDate
3451
- * @param {?} locations
3452
- * @param {?} fieldMask
3453
- * @return {?}
3454
- */
3455
- function (brandId, multilocationId, text, media, gifs, videos, scheduledDate, locations, fieldMask) {
3456
- /** @type {?} */
3457
- var req = new EditMultilocationPostRequest({
3458
- brandId: brandId,
3459
- multilocationId: multilocationId,
3460
- text: text,
3461
- media: media,
3462
- gifs: gifs,
3463
- videos: videos,
3464
- scheduledDate: scheduledDate,
3465
- locations: locations,
3466
- fieldMask: fieldMask
3467
- });
3468
- return this.multilocationApiService.editMultilocationPost(req);
3469
- };
3470
- /**
3471
- * @param {?} reason
3472
- * @param {?} brandId
3473
- * @param {?} multilocationId
3474
- * @param {?} locations
3475
- * @return {?}
3476
- */
3477
- MultilocationPostsService.prototype.removeFromMultilocationPost = /**
3478
- * @param {?} reason
3479
- * @param {?} brandId
3480
- * @param {?} multilocationId
3481
- * @param {?} locations
3482
- * @return {?}
3483
- */
3484
- function (reason, brandId, multilocationId, locations) {
3485
- /** @type {?} */
3486
- var req = new RemoveFromMultilocationPostRequest({
3487
- reason: reason,
3488
- brandId: brandId,
3489
- multilocationId: multilocationId,
3490
- locations: locations
3491
- });
3492
- return this.multilocationApiService.removeFromMultilocationPost(req);
3493
- };
3494
- /**
3495
- * @param {?} brandId
3496
- * @param {?} startDate
3497
- * @param {?} endDate
3498
- * @param {?} cursor
3499
- * @param {?} pageSize
3500
- * @return {?}
3501
- */
3502
- MultilocationPostsService.prototype.listMultilocationPostsForBrand = /**
3503
- * @param {?} brandId
3504
- * @param {?} startDate
3505
- * @param {?} endDate
3506
- * @param {?} cursor
3507
- * @param {?} pageSize
3508
- * @return {?}
3509
- */
3510
- function (brandId, startDate, endDate, cursor, pageSize) {
3511
- /** @type {?} */
3512
- var req = new ListMultilocationPostsForBrandRequest({
3513
- brandId: brandId,
3514
- startDate: startDate,
3515
- endDate: endDate,
3516
- cursor: cursor,
3517
- pageSize: pageSize
3518
- });
3519
- return this.multilocationApiService.listMultilocationPostsForBrand(req);
3520
- };
3521
- /**
3522
- * @param {?} brandId
3523
- * @param {?} multilocationId
3524
- * @return {?}
3525
- */
3526
- MultilocationPostsService.prototype.deleteMultilocationPost = /**
3527
- * @param {?} brandId
3528
- * @param {?} multilocationId
3529
- * @return {?}
3530
- */
3531
- function (brandId, multilocationId) {
3532
- /** @type {?} */
3533
- var req = new DeleteMultilocationPostRequest({
3534
- brandId: brandId,
3535
- multilocationId: multilocationId
3536
- });
3537
- return this.multilocationApiService.deleteMultilocationPost(req);
3538
- };
3539
- /**
3540
- * @param {?} brandId
3541
- * @param {?} multilocationId
3542
- * @return {?}
3543
- */
3544
- MultilocationPostsService.prototype.getMultilocationPost = /**
3545
- * @param {?} brandId
3546
- * @param {?} multilocationId
3547
- * @return {?}
3548
- */
3549
- function (brandId, multilocationId) {
3550
- /** @type {?} */
3551
- var req = new GetMultilocationPostRequest({
3552
- brandId: brandId,
3553
- multilocationId: multilocationId
3554
- });
3555
- return this.multilocationApiService.getMultilocationPost(req);
3556
- };
3557
- MultilocationPostsService.decorators = [
3558
- { type: Injectable, args: [{ providedIn: 'root' },] }
3559
- ];
3560
- /** @nocollapse */
3561
- MultilocationPostsService.ctorParameters = function () { return [
3562
- { type: MultilocationPostApiService }
3563
- ]; };
3564
- /** @nocollapse */ MultilocationPostsService.ngInjectableDef = ɵɵdefineInjectable({ factory: function MultilocationPostsService_Factory() { return new MultilocationPostsService(ɵɵinject(MultilocationPostApiService)); }, token: MultilocationPostsService, providedIn: "root" });
3565
- return MultilocationPostsService;
3566
- }());
3567
-
3568
- /**
3569
- * @fileoverview added by tsickle
3570
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3571
- */
3572
-
3573
- /**
3574
- * @fileoverview added by tsickle
3575
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3576
- */
3577
- var PartnerSocialPostsApiService = /** @class */ (function () {
3578
- function PartnerSocialPostsApiService(http, hostService) {
3579
- this.http = http;
3580
- this.hostService = hostService;
3581
- }
3582
- /**
3583
- * @private
3584
- * @return {?}
3585
- */
3586
- PartnerSocialPostsApiService.prototype.apiOptions = /**
3587
- * @private
3588
- * @return {?}
3589
- */
3590
- function () {
3591
- return {
3592
- headers: new HttpHeaders({
3593
- 'Content-Type': 'application/json'
3594
- }),
3595
- withCredentials: true
3596
- };
3597
- };
3598
- /**
3599
- * @param {?} r
3600
- * @return {?}
3601
- */
3602
- PartnerSocialPostsApiService.prototype.listScheduled = /**
3603
- * @param {?} r
3604
- * @return {?}
3605
- */
3606
- function (r) {
3607
- /** @type {?} */
3608
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new PartnerListScheduledSocialPostsRequest(r);
3609
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PartnerSocialPosts/ListScheduled", request.toApiJson(), this.apiOptions())
3610
- .pipe(map((/**
3611
- * @param {?} resp
3612
- * @return {?}
3613
- */
3614
- function (resp) { return PartnerListScheduledPostsResponse.fromProto(resp); })), share());
3615
- };
3616
- /**
3617
- * @param {?} r
3618
- * @return {?}
3619
- */
3620
- PartnerSocialPostsApiService.prototype.listScheduledByCreated = /**
3621
- * @param {?} r
3622
- * @return {?}
3623
- */
3624
- function (r) {
3625
- /** @type {?} */
3626
- var request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new PartnerListScheduledSocialPostsRequest(r);
3627
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PartnerSocialPosts/ListScheduledByCreated", request.toApiJson(), this.apiOptions())
3628
- .pipe(map((/**
3629
- * @param {?} resp
3630
- * @return {?}
3631
- */
3632
- function (resp) { return PartnerListScheduledPostsResponse.fromProto(resp); })), share());
3633
- };
3634
- PartnerSocialPostsApiService.decorators = [
3635
- { type: Injectable, args: [{ providedIn: 'root' },] }
3636
- ];
3637
- /** @nocollapse */
3638
- PartnerSocialPostsApiService.ctorParameters = function () { return [
3639
- { type: HttpClient },
3640
- { type: HostService }
3641
- ]; };
3642
- /** @nocollapse */ PartnerSocialPostsApiService.ngInjectableDef = ɵɵdefineInjectable({ factory: function PartnerSocialPostsApiService_Factory() { return new PartnerSocialPostsApiService(ɵɵinject(HttpClient), ɵɵinject(HostService)); }, token: PartnerSocialPostsApiService, providedIn: "root" });
3643
- return PartnerSocialPostsApiService;
3644
- }());
3645
-
3646
- /**
3647
- * @fileoverview added by tsickle
3648
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3649
- */
3650
-
3651
- /**
3652
- * @fileoverview added by tsickle
3653
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3654
- */
3655
-
3656
- /**
3657
- * @fileoverview added by tsickle
3658
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3659
- */
3660
-
3661
- /**
3662
- * @fileoverview added by tsickle
3663
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3664
- */
3665
-
3666
- export { SocialPostsService, PostTemplatesService, MultilocationPostsService, FieldMask, Location, MultilocationPost, PostingStatus, RemoveReason, MultilocationPostApiService, GetMultilocationPostRequest, DeleteMultilocationPostRequest, ListMultilocationPostsForBrandRequest, HostService as ɵb, MultilocationPostApiService as ɵd, PostTemplatesApiService as ɵc, SocialPostsApiService as ɵa };
3667
-
3668
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZGFzdGEtc29jaWFsLXBvc3RzLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvb2JqZWN0cy9maWVsZC1tYXNrLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvb2JqZWN0cy9tdWx0aWxvY2F0aW9uLXBvc3QudHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19pbnRlcm5hbC9vYmplY3RzL3Bvc3QtdGVtcGxhdGVzLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvZW51bXMvc29jaWFsLXBvc3RzLmVudW0udHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19pbnRlcm5hbC9lbnVtcy9tdWx0aWxvY2F0aW9uLXBvc3QuZW51bS50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL29iamVjdHMvc29jaWFsLXBvc3RzLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvb2JqZWN0cy9zb2NpYWwtcG9zdC1zdGF0cy50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL29iamVjdHMvYXBpLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9fZ2VuZXJhdGVkL2hvc3Quc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL3NvY2lhbC1wb3N0cy5hcGkuc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvc29jaWFsLXBvc3RzLnNlcnZpY2UudHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19pbnRlcm5hbC9wb3N0LXRlbXBsYXRlcy5hcGkuc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvcG9zdC10ZW1wbGF0ZXMuc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL211bHRpbG9jYXRpb24tcG9zdC5hcGkuc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvbXVsdGlsb2NhdGlvbi1wb3N0cy5zZXJ2aWNlLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvcGFydG5lci1zb2NpYWwtcG9zdHMuYXBpLnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBPYmplY3RzLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQgKiBhcyBpIGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZE1hc2sgaW1wbGVtZW50cyBpLkZpZWxkTWFza0ludGVyZmFjZSB7XG4gICAgcGF0aHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRmllbGRNYXNrIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRmllbGRNYXNrKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5GaWVsZE1hc2tJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXRocyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGF0aHMnXSA9IHRoaXMucGF0aHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIExvY2F0aW9uIGltcGxlbWVudHMgaS5Mb2NhdGlvbkludGVyZmFjZSB7XG4gICAgc29jaWFsU2VydmljZUlkczogc3RyaW5nW107XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExvY2F0aW9uIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTG9jYXRpb24oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxvY2F0aW9uSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsU2VydmljZUlkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsU2VydmljZUlkcyddID0gdGhpcy5zb2NpYWxTZXJ2aWNlSWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNdWx0aWxvY2F0aW9uUG9zdCBpbXBsZW1lbnRzIGkuTXVsdGlsb2NhdGlvblBvc3RJbnRlcmZhY2Uge1xuICAgIGJyYW5kSWQ6IHN0cmluZztcbiAgICBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZztcbiAgICBvcmlnaW5hbFRleHQ6IHN0cmluZztcbiAgICBvcmlnaW5hbFNjaGVkdWxlZERhdGU6IERhdGU7XG4gICAgb3JpZ2luYWxNZWRpYTogc3RyaW5nW107XG4gICAgb3JpZ2luYWxMb2NhdGlvbnM6IExvY2F0aW9uW107XG4gICAgZWRpdGVkTG9jYXRpb25zOiBMb2NhdGlvbltdO1xuICAgIGRlbGV0ZWRMb2NhdGlvbnM6IExvY2F0aW9uW107XG4gICAgb3JpZ2luYWxHaWZzOiBzdHJpbmdbXTtcbiAgICBvcmlnaW5hbFZpZGVvczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNdWx0aWxvY2F0aW9uUG9zdCB7XG4gICAgICAgIGxldCBtID0gbmV3IE11bHRpbG9jYXRpb25Qb3N0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm9yaWdpbmFsU2NoZWR1bGVkRGF0ZSkge20ub3JpZ2luYWxTY2hlZHVsZWREYXRlID0gbmV3IERhdGUocHJvdG8ub3JpZ2luYWxTY2hlZHVsZWREYXRlKTt9XG4gICAgICAgIGlmIChwcm90by5vcmlnaW5hbExvY2F0aW9ucykge20ub3JpZ2luYWxMb2NhdGlvbnMgPSBwcm90by5vcmlnaW5hbExvY2F0aW9ucy5tYXAoTG9jYXRpb24uZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5lZGl0ZWRMb2NhdGlvbnMpIHttLmVkaXRlZExvY2F0aW9ucyA9IHByb3RvLmVkaXRlZExvY2F0aW9ucy5tYXAoTG9jYXRpb24uZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5kZWxldGVkTG9jYXRpb25zKSB7bS5kZWxldGVkTG9jYXRpb25zID0gcHJvdG8uZGVsZXRlZExvY2F0aW9ucy5tYXAoTG9jYXRpb24uZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTXVsdGlsb2NhdGlvblBvc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5icmFuZElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydicmFuZElkJ10gPSB0aGlzLmJyYW5kSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubXVsdGlsb2NhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtdWx0aWxvY2F0aW9uSWQnXSA9IHRoaXMubXVsdGlsb2NhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yaWdpbmFsVGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JpZ2luYWxUZXh0J10gPSB0aGlzLm9yaWdpbmFsVGV4dDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5hbFNjaGVkdWxlZERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JpZ2luYWxTY2hlZHVsZWREYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ29yaWdpbmFsU2NoZWR1bGVkRGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vcmlnaW5hbFNjaGVkdWxlZERhdGUgPyAodGhpcy5vcmlnaW5hbFNjaGVkdWxlZERhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3JpZ2luYWxTY2hlZHVsZWREYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yaWdpbmFsTWVkaWEgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yaWdpbmFsTWVkaWEnXSA9IHRoaXMub3JpZ2luYWxNZWRpYTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5hbExvY2F0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcmlnaW5hbExvY2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydvcmlnaW5hbExvY2F0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vcmlnaW5hbExvY2F0aW9ucyA/ICh0aGlzLm9yaWdpbmFsTG9jYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm9yaWdpbmFsTG9jYXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVkaXRlZExvY2F0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lZGl0ZWRMb2NhdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnZWRpdGVkTG9jYXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVkaXRlZExvY2F0aW9ucyA/ICh0aGlzLmVkaXRlZExvY2F0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lZGl0ZWRMb2NhdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVsZXRlZExvY2F0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kZWxldGVkTG9jYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RlbGV0ZWRMb2NhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZGVsZXRlZExvY2F0aW9ucyA/ICh0aGlzLmRlbGV0ZWRMb2NhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZGVsZXRlZExvY2F0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5hbEdpZnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yaWdpbmFsR2lmcyddID0gdGhpcy5vcmlnaW5hbEdpZnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JpZ2luYWxWaWRlb3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yaWdpbmFsVmlkZW9zJ10gPSB0aGlzLm9yaWdpbmFsVmlkZW9zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE11bHRpbG9jYXRpb25Qb3N0RXJyb3IgaW1wbGVtZW50cyBpLk11bHRpbG9jYXRpb25Qb3N0RXJyb3JJbnRlcmZhY2Uge1xuICAgIHNvY2lhbFNlcnZpY2VJZDogc3RyaW5nO1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG4gICAgZXJyb3JSZWFzb246IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE11bHRpbG9jYXRpb25Qb3N0RXJyb3Ige1xuICAgICAgICBsZXQgbSA9IG5ldyBNdWx0aWxvY2F0aW9uUG9zdEVycm9yKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NdWx0aWxvY2F0aW9uUG9zdEVycm9ySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsU2VydmljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxTZXJ2aWNlSWQnXSA9IHRoaXMuc29jaWFsU2VydmljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lcnJvclJlYXNvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXJyb3JSZWFzb24nXSA9IHRoaXMuZXJyb3JSZWFzb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIFBvc3RUZW1wbGF0ZSBpbXBsZW1lbnRzIGkuUG9zdFRlbXBsYXRlSW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIHRlbXBsYXRlSWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGNyZWF0ZWQ6IERhdGU7XG4gICAgdXBkYXRlZDogRGF0ZTtcbiAgICBwb3N0VGV4dDogc3RyaW5nO1xuICAgIHBvc3REYXRlVGltZTogRGF0ZTtcbiAgICBnbWJQb3N0Q3VzdG9taXphdGlvbjogc3RyaW5nO1xuICAgIGltYWdlVXJsOiBzdHJpbmc7XG4gICAgaW1hZ2VQYXRoOiBzdHJpbmc7XG4gICAgaW1hZ2VTaXplOiBzdHJpbmc7XG4gICAgcHJldmlld3M6IHN0cmluZztcbiAgICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgICB2aWRlb1VybDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUG9zdFRlbXBsYXRlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUG9zdFRlbXBsYXRlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNyZWF0ZWQpIHttLmNyZWF0ZWQgPSBuZXcgRGF0ZShwcm90by5jcmVhdGVkKTt9XG4gICAgICAgIGlmIChwcm90by51cGRhdGVkKSB7bS51cGRhdGVkID0gbmV3IERhdGUocHJvdG8udXBkYXRlZCk7fVxuICAgICAgICBpZiAocHJvdG8ucG9zdERhdGVUaW1lKSB7bS5wb3N0RGF0ZVRpbWUgPSBuZXcgRGF0ZShwcm90by5wb3N0RGF0ZVRpbWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Qb3N0VGVtcGxhdGVJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGVtcGxhdGVJZCddID0gdGhpcy50ZW1wbGF0ZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpdGxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0aXRsZSddID0gdGhpcy50aXRsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jcmVhdGVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNyZWF0ZWQgIT09IG51bGwpIHt0b1JldHVyblsnY3JlYXRlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jcmVhdGVkID8gKHRoaXMuY3JlYXRlZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jcmVhdGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudXBkYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWyd1cGRhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnVwZGF0ZWQgPyAodGhpcy51cGRhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnVwZGF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdFRleHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bvc3RUZXh0J10gPSB0aGlzLnBvc3RUZXh0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3REYXRlVGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0RGF0ZVRpbWUgIT09IG51bGwpIHt0b1JldHVyblsncG9zdERhdGVUaW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3REYXRlVGltZSA/ICh0aGlzLnBvc3REYXRlVGltZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0RGF0ZVRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dtYlBvc3RDdXN0b21pemF0aW9uJ10gPSB0aGlzLmdtYlBvc3RDdXN0b21pemF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbWFnZVVybCddID0gdGhpcy5pbWFnZVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVBhdGggIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlUGF0aCddID0gdGhpcy5pbWFnZVBhdGg7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VTaXplICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbWFnZVNpemUnXSA9IHRoaXMuaW1hZ2VTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXZpZXdzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmV2aWV3cyddID0gdGhpcy5wcmV2aWV3czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcHRpb25zJ10gPSB0aGlzLm9wdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlkZW9VcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZpZGVvVXJsJ10gPSB0aGlzLnZpZGVvVXJsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIiwiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBFbnVtcy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5leHBvcnQgZW51bSBDYWxsVG9BY3Rpb25DYWxsVG9BY3Rpb25UeXBlIHtcbiAgICBMRUFSTl9NT1JFID0gMCxcbiAgICBCT09LID0gMSxcbiAgICBPUkRFUiA9IDIsXG4gICAgU0hPUCA9IDMsXG4gICAgU0lHTl9VUCA9IDQsXG4gICAgR0VUX09GRkVSID0gNSxcbiAgICBDQUxMID0gNixcbn1cblxuZXhwb3J0IGVudW0gU29jaWFsUG9zdERlbGV0aW9uU3RhdHVzIHtcbiAgICBOT05FID0gMCxcbiAgICBGQUlMRUQgPSAxLFxuICAgIElOX1BST0dSRVNTID0gMixcbn1cblxuZXhwb3J0IGVudW0gUG9zdGluZ1N0YXR1cyB7XG4gICAgUE9TVElOR19JTl9QUk9HUkVTUyA9IDAsXG4gICAgUE9TVElOR19GQUlMRUQgPSAxLFxuICAgIFBPU1RJTkdfQ09NUExFVEVEID0gMixcbn1cblxuZXhwb3J0IGVudW0gU29jaWFsUG9zdFNlcnZpY2Uge1xuICAgIFRXSVRURVIgPSAwLFxuICAgIEZBQ0VCT09LID0gMSxcbiAgICBMSU5LRURfSU4gPSAyLFxuICAgIEdPT0dMRV9QTFVTID0gMyxcbiAgICBHT09HTEVfTVlfQlVTSU5FU1MgPSA0LFxuICAgIFVOS05PV04gPSA1LFxuICAgIElOU1RBR1JBTSA9IDYsXG59XG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIEVudW1zLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbmV4cG9ydCBlbnVtIFJlbW92ZVJlYXNvbiB7XG4gICAgUkVNT1ZFX1JFQVNPTl9FRElUID0gMCxcbiAgICBSRU1PVkVfUkVBU09OX0RFTEVURSA9IDEsXG59XG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIENhbGxUb0FjdGlvbiBpbXBsZW1lbnRzIGkuQ2FsbFRvQWN0aW9uSW50ZXJmYWNlIHtcbiAgICB1cmw6IHN0cmluZztcbiAgICBhY3Rpb25UeXBlOiBlLkNhbGxUb0FjdGlvbkNhbGxUb0FjdGlvblR5cGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDYWxsVG9BY3Rpb24ge1xuICAgICAgICBsZXQgbSA9IG5ldyBDYWxsVG9BY3Rpb24oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYWN0aW9uVHlwZSkge20uYWN0aW9uVHlwZSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQ2FsbFRvQWN0aW9uQ2FsbFRvQWN0aW9uVHlwZT4oZS5DYWxsVG9BY3Rpb25DYWxsVG9BY3Rpb25UeXBlLCBwcm90by5hY3Rpb25UeXBlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ2FsbFRvQWN0aW9uSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1cmwnXSA9IHRoaXMudXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvblR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjdGlvblR5cGUnXSA9IHRoaXMuYWN0aW9uVHlwZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvciBpbXBsZW1lbnRzIGkuRXJyb3JJbnRlcmZhY2Uge1xuICAgIHJlYXNvbjogc3RyaW5nO1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFcnJvciB7XG4gICAgICAgIGxldCBtID0gbmV3IEVycm9yKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FcnJvckludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlYXNvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVhc29uJ10gPSB0aGlzLnJlYXNvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYXRlZ29yeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2F0ZWdvcnknXSA9IHRoaXMuY2F0ZWdvcnk7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXZlbnQgaW1wbGVtZW50cyBpLkV2ZW50SW50ZXJmYWNlIHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHN0YXJ0RGF0ZXRpbWU6IERhdGU7XG4gICAgZW5kRGF0ZXRpbWU6IERhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFdmVudCB7XG4gICAgICAgIGxldCBtID0gbmV3IEV2ZW50KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN0YXJ0RGF0ZXRpbWUpIHttLnN0YXJ0RGF0ZXRpbWUgPSBuZXcgRGF0ZShwcm90by5zdGFydERhdGV0aW1lKTt9XG4gICAgICAgIGlmIChwcm90by5lbmREYXRldGltZSkge20uZW5kRGF0ZXRpbWUgPSBuZXcgRGF0ZShwcm90by5lbmREYXRldGltZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkV2ZW50SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RpdGxlJ10gPSB0aGlzLnRpdGxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXJ0RGF0ZXRpbWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhcnREYXRldGltZSAhPT0gbnVsbCkge3RvUmV0dXJuWydzdGFydERhdGV0aW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXJ0RGF0ZXRpbWUgPyAodGhpcy5zdGFydERhdGV0aW1lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN0YXJ0RGF0ZXRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5kRGF0ZXRpbWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kRGF0ZXRpbWUgIT09IG51bGwpIHt0b1JldHVyblsnZW5kRGF0ZXRpbWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZW5kRGF0ZXRpbWUgPyAodGhpcy5lbmREYXRldGltZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lbmREYXRldGltZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZVBvc3RTdGF0dXMgaW1wbGVtZW50cyBpLlNjaGVkdWxlUG9zdFN0YXR1c0ludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdElkOiBzdHJpbmc7XG4gICAgc29jaWFsU2VydmljZUlkOiBzdHJpbmc7XG4gICAgc29jaWFsU2VydmljZUxhYmVsOiBzdHJpbmc7XG4gICAgZXJyb3I6IEVycm9yO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2NoZWR1bGVQb3N0U3RhdHVzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2NoZWR1bGVQb3N0U3RhdHVzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmVycm9yKSB7bS5lcnJvciA9IEVycm9yLmZyb21Qcm90byhwcm90by5lcnJvcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNjaGVkdWxlUG9zdFN0YXR1c0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsUG9zdElkJ10gPSB0aGlzLnNvY2lhbFBvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxTZXJ2aWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFNlcnZpY2VJZCddID0gdGhpcy5zb2NpYWxTZXJ2aWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsU2VydmljZUxhYmVsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxTZXJ2aWNlTGFiZWwnXSA9IHRoaXMuc29jaWFsU2VydmljZUxhYmVsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVycm9yICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVycm9yICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Vycm9yJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVycm9yID8gKHRoaXMuZXJyb3IgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXJyb3I7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU29jaWFsUG9zdCBpbXBsZW1lbnRzIGkuU29jaWFsUG9zdEludGVyZmFjZSB7XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICAgIHNvY2lhbFBvc3RJZDogc3RyaW5nO1xuICAgIHBvc3RUZXh0OiBzdHJpbmc7XG4gICAgcG9zdGVkOiBEYXRlO1xuICAgIGlzRXJyb3I6IGJvb2xlYW47XG4gICAgZGVsZXRpb25TdGF0dXM6IGUuU29jaWFsUG9zdERlbGV0aW9uU3RhdHVzO1xuICAgIHNlcnZpY2U6IGUuU29jaWFsUG9zdFNlcnZpY2U7XG4gICAgcGVybWFsaW5rOiBzdHJpbmc7XG4gICAgY3JlYXRlZDogRGF0ZTtcbiAgICBwcm9maWxlVXJsOiBzdHJpbmc7XG4gICAgcHJvZmlsZUltYWdlVXJsOiBzdHJpbmc7XG4gICAgc2NoZWR1bGVkOiBEYXRlO1xuICAgIHN0YXR1czogZS5Qb3N0aW5nU3RhdHVzO1xuICAgIGltYWdlVXJsOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgcGFyZW50SWQ6IHN0cmluZztcbiAgICBzb2NpYWxTZXJ2aWNlSWQ6IHN0cmluZztcbiAgICBldmVudDogRXZlbnQ7XG4gICAgY2FsbFRvQWN0aW9uOiBDYWxsVG9BY3Rpb247XG4gICAgdmlkZW9Vcmw6IHN0cmluZztcbiAgICBlcnJvcjogRXJyb3I7XG4gICAgaW1hZ2VVcmxzOiBzdHJpbmdbXTtcbiAgICBsaW5rUHJldmlld0ltYWdlVXJsOiBzdHJpbmc7XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIG11bHRpbG9jYXRpb25Qb3N0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNvY2lhbFBvc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTb2NpYWxQb3N0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBvc3RlZCkge20ucG9zdGVkID0gbmV3IERhdGUocHJvdG8ucG9zdGVkKTt9XG4gICAgICAgIGlmIChwcm90by5kZWxldGlvblN0YXR1cykge20uZGVsZXRpb25TdGF0dXMgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlNvY2lhbFBvc3REZWxldGlvblN0YXR1cz4oZS5Tb2NpYWxQb3N0RGVsZXRpb25TdGF0dXMsIHByb3RvLmRlbGV0aW9uU3RhdHVzKTt9XG4gICAgICAgIGlmIChwcm90by5zZXJ2aWNlKSB7bS5zZXJ2aWNlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Tb2NpYWxQb3N0U2VydmljZT4oZS5Tb2NpYWxQb3N0U2VydmljZSwgcHJvdG8uc2VydmljZSk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZCkge20uY3JlYXRlZCA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLnNjaGVkdWxlZCkge20uc2NoZWR1bGVkID0gbmV3IERhdGUocHJvdG8uc2NoZWR1bGVkKTt9XG4gICAgICAgIGlmIChwcm90by5zdGF0dXMpIHttLnN0YXR1cyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuUG9zdGluZ1N0YXR1cz4oZS5Qb3N0aW5nU3RhdHVzLCBwcm90by5zdGF0dXMpO31cbiAgICAgICAgaWYgKHByb3RvLmV2ZW50KSB7bS5ldmVudCA9IEV2ZW50LmZyb21Qcm90byhwcm90by5ldmVudCk7fVxuICAgICAgICBpZiAocHJvdG8uY2FsbFRvQWN0aW9uKSB7bS5jYWxsVG9BY3Rpb24gPSBDYWxsVG9BY3Rpb24uZnJvbVByb3RvKHByb3RvLmNhbGxUb0FjdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8uZXJyb3IpIHttLmVycm9yID0gRXJyb3IuZnJvbVByb3RvKHByb3RvLmVycm9yKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU29jaWFsUG9zdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxQb3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFBvc3RJZCddID0gdGhpcy5zb2NpYWxQb3N0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdFRleHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bvc3RUZXh0J10gPSB0aGlzLnBvc3RUZXh0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3RlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0ZWQgIT09IG51bGwpIHt0b1JldHVyblsncG9zdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3RlZCA/ICh0aGlzLnBvc3RlZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNFcnJvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNFcnJvciddID0gdGhpcy5pc0Vycm9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlbGV0aW9uU3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZWxldGlvblN0YXR1cyddID0gdGhpcy5kZWxldGlvblN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXJ2aWNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZXJ2aWNlJ10gPSB0aGlzLnNlcnZpY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGVybWFsaW5rICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwZXJtYWxpbmsnXSA9IHRoaXMucGVybWFsaW5rO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY3JlYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZWQgPyAodGhpcy5jcmVhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvZmlsZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJvZmlsZVVybCddID0gdGhpcy5wcm9maWxlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb2ZpbGVJbWFnZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJvZmlsZUltYWdlVXJsJ10gPSB0aGlzLnByb2ZpbGVJbWFnZVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zY2hlZHVsZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc2NoZWR1bGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NjaGVkdWxlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zY2hlZHVsZWQgPyAodGhpcy5zY2hlZHVsZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc2NoZWR1bGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdHVzJ10gPSB0aGlzLnN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VVcmwnXSA9IHRoaXMuaW1hZ2VVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJuYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VybmFtZSddID0gdGhpcy51c2VybmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJlbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFyZW50SWQnXSA9IHRoaXMucGFyZW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsU2VydmljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxTZXJ2aWNlSWQnXSA9IHRoaXMuc29jaWFsU2VydmljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmV2ZW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2V2ZW50J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmV2ZW50ID8gKHRoaXMuZXZlbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXZlbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsbFRvQWN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNhbGxUb0FjdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjYWxsVG9BY3Rpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY2FsbFRvQWN0aW9uID8gKHRoaXMuY2FsbFRvQWN0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNhbGxUb0FjdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmlkZW9VcmwnXSA9IHRoaXMudmlkZW9Vcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXJyb3IgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXJyb3IgIT09IG51bGwpIHt0b1JldHVyblsnZXJyb3InXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXJyb3IgPyAodGhpcy5lcnJvciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lcnJvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVVybHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlVXJscyddID0gdGhpcy5pbWFnZVVybHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGlua1ByZXZpZXdJbWFnZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGlua1ByZXZpZXdJbWFnZVVybCddID0gdGhpcy5saW5rUHJldmlld0ltYWdlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aWxvY2F0aW9uUG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtdWx0aWxvY2F0aW9uUG9zdElkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25Qb3N0SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU29jaWFsUG9zdERhdGEgaW1wbGVtZW50cyBpLlNvY2lhbFBvc3REYXRhSW50ZXJmYWNlIHtcbiAgICBwb3N0VGV4dDogc3RyaW5nO1xuICAgIGltYWdlVXJsOiBzdHJpbmc7XG4gICAgc2NoZWR1bGVGb3I6IERhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTb2NpYWxQb3N0RGF0YSB7XG4gICAgICAgIGxldCBtID0gbmV3IFNvY2lhbFBvc3REYXRhKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNjaGVkdWxlRm9yKSB7bS5zY2hlZHVsZUZvciA9IG5ldyBEYXRlKHByb3RvLnNjaGVkdWxlRm9yKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU29jaWFsUG9zdERhdGFJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncG9zdFRleHQnXSA9IHRoaXMucG9zdFRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlVXJsJ10gPSB0aGlzLmltYWdlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNjaGVkdWxlRm9yICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNjaGVkdWxlRm9yICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NjaGVkdWxlRm9yJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNjaGVkdWxlRm9yID8gKHRoaXMuc2NoZWR1bGVGb3IgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc2NoZWR1bGVGb3I7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIEZhY2Vib29rUG9zdFN0YXRzIGltcGxlbWVudHMgaS5GYWNlYm9va1Bvc3RTdGF0c0ludGVyZmFjZSB7XG4gICAgY29tbWVudENvdW50OiBudW1iZXI7XG4gICAgc2hhcmVDb3VudDogbnVtYmVyO1xuICAgIGxpa2VDb3VudDogbnVtYmVyO1xuICAgIGhhc0xpa2U6IGJvb2xlYW47XG4gICAgY2FuTGlrZTogYm9vbGVhbjtcbiAgICByZWFjdGlvbnM6IG51bWJlcjtcbiAgICBwZW9wbGVSZWFjaGVkOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBGYWNlYm9va1Bvc3RTdGF0cyB7XG4gICAgICAgIGxldCBtID0gbmV3IEZhY2Vib29rUG9zdFN0YXRzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNvbW1lbnRDb3VudCkge20uY29tbWVudENvdW50ID0gcGFyc2VJbnQocHJvdG8uY29tbWVudENvdW50LCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uc2hhcmVDb3VudCkge20uc2hhcmVDb3VudCA9IHBhcnNlSW50KHByb3RvLnNoYXJlQ291bnQsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5saWtlQ291bnQpIHttLmxpa2VDb3VudCA9IHBhcnNlSW50KHByb3RvLmxpa2VDb3VudCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnJlYWN0aW9ucykge20ucmVhY3Rpb25zID0gcGFyc2VJbnQocHJvdG8ucmVhY3Rpb25zLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8ucGVvcGxlUmVhY2hlZCkge20ucGVvcGxlUmVhY2hlZCA9IHBhcnNlSW50KHByb3RvLnBlb3BsZVJlYWNoZWQsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRmFjZWJvb2tQb3N0U3RhdHNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21tZW50Q291bnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbW1lbnRDb3VudCddID0gdGhpcy5jb21tZW50Q291bnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2hhcmVDb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2hhcmVDb3VudCddID0gdGhpcy5zaGFyZUNvdW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxpa2VDb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGlrZUNvdW50J10gPSB0aGlzLmxpa2VDb3VudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNMaWtlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNMaWtlJ10gPSB0aGlzLmhhc0xpa2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FuTGlrZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2FuTGlrZSddID0gdGhpcy5jYW5MaWtlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlYWN0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVhY3Rpb25zJ10gPSB0aGlzLnJlYWN0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wZW9wbGVSZWFjaGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwZW9wbGVSZWFjaGVkJ10gPSB0aGlzLnBlb3BsZVJlYWNoZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU29jaWFsUG9zdFN0YXRzIGltcGxlbWVudHMgaS5Tb2NpYWxQb3N0U3RhdHNJbnRlcmZhY2Uge1xuICAgIGludGVybmFsUG9zdElkOiBzdHJpbmc7XG4gICAgZmFjZWJvb2tQb3N0U3RhdHM6IEZhY2Vib29rUG9zdFN0YXRzO1xuICAgIHR3aXR0ZXJQb3N0U3RhdHM6IFR3aXR0ZXJQb3N0U3RhdHM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTb2NpYWxQb3N0U3RhdHMge1xuICAgICAgICBsZXQgbSA9IG5ldyBTb2NpYWxQb3N0U3RhdHMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZmFjZWJvb2tQb3N0U3RhdHMpIHttLmZhY2Vib29rUG9zdFN0YXRzID0gRmFjZWJvb2tQb3N0U3RhdHMuZnJvbVByb3RvKHByb3RvLmZhY2Vib29rUG9zdFN0YXRzKTt9XG4gICAgICAgIGlmIChwcm90by50d2l0dGVyUG9zdFN0YXRzKSB7bS50d2l0dGVyUG9zdFN0YXRzID0gVHdpdHRlclBvc3RTdGF0cy5mcm9tUHJvdG8ocHJvdG8udHdpdHRlclBvc3RTdGF0cyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNvY2lhbFBvc3RTdGF0c0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludGVybmFsUG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnRlcm5hbFBvc3RJZCddID0gdGhpcy5pbnRlcm5hbFBvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mYWNlYm9va1Bvc3RTdGF0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5mYWNlYm9va1Bvc3RTdGF0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydmYWNlYm9va1Bvc3RTdGF0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5mYWNlYm9va1Bvc3RTdGF0cyA/ICh0aGlzLmZhY2Vib29rUG9zdFN0YXRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZhY2Vib29rUG9zdFN0YXRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnR3aXR0ZXJQb3N0U3RhdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudHdpdHRlclBvc3RTdGF0cyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0d2l0dGVyUG9zdFN0YXRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnR3aXR0ZXJQb3N0U3RhdHMgPyAodGhpcy50d2l0dGVyUG9zdFN0YXRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnR3aXR0ZXJQb3N0U3RhdHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHdpdHRlclBvc3RTdGF0cyBpbXBsZW1lbnRzIGkuVHdpdHRlclBvc3RTdGF0c0ludGVyZmFjZSB7XG4gICAgZmF2b3VyaXRlczogbnVtYmVyO1xuICAgIGhhc0Zhdm91cml0ZWQ6IGJvb2xlYW47XG4gICAgcmV0d2VldHM6IG51bWJlcjtcbiAgICBoYXNSZXR3ZWV0ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBUd2l0dGVyUG9zdFN0YXRzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVHdpdHRlclBvc3RTdGF0cygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5mYXZvdXJpdGVzKSB7bS5mYXZvdXJpdGVzID0gcGFyc2VJbnQocHJvdG8uZmF2b3VyaXRlcywgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnJldHdlZXRzKSB7bS5yZXR3ZWV0cyA9IHBhcnNlSW50KHByb3RvLnJldHdlZXRzLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlR3aXR0ZXJQb3N0U3RhdHNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mYXZvdXJpdGVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydmYXZvdXJpdGVzJ10gPSB0aGlzLmZhdm91cml0ZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzRmF2b3VyaXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzRmF2b3VyaXRlZCddID0gdGhpcy5oYXNGYXZvdXJpdGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJldHdlZXRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZXR3ZWV0cyddID0gdGhpcy5yZXR3ZWV0czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNSZXR3ZWV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc1JldHdlZXRlZCddID0gdGhpcy5oYXNSZXR3ZWV0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGaWVsZE1hc2sgfSBmcm9tICcuL2ZpZWxkLW1hc2snO1xuaW1wb3J0IHsgTG9jYXRpb24sIE11bHRpbG9jYXRpb25Qb3N0LCBNdWx0aWxvY2F0aW9uUG9zdEVycm9yIH0gZnJvbSAnLi9tdWx0aWxvY2F0aW9uLXBvc3QnO1xuaW1wb3J0IHsgUG9zdFRlbXBsYXRlIH0gZnJvbSAnLi9wb3N0LXRlbXBsYXRlcyc7XG5pbXBvcnQgeyBTb2NpYWxQb3N0LCBTb2NpYWxQb3N0RGF0YSwgU2NoZWR1bGVQb3N0U3RhdHVzIH0gZnJvbSAnLi9zb2NpYWwtcG9zdHMnO1xuaW1wb3J0IHsgU29jaWFsUG9zdFN0YXRzIH0gZnJvbSAnLi9zb2NpYWwtcG9zdC1zdGF0cyc7XG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBtZWRpYTogc3RyaW5nW107XG4gICAgc2NoZWR1bGVkRGF0ZTogRGF0ZTtcbiAgICBsb2NhdGlvbnM6IExvY2F0aW9uW107XG4gICAgZ2lmczogc3RyaW5nW107XG4gICAgdmlkZW9zOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zY2hlZHVsZWREYXRlKSB7bS5zY2hlZHVsZWREYXRlID0gbmV3IERhdGUocHJvdG8uc2NoZWR1bGVkRGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8ubG9jYXRpb25zKSB7bS5sb2NhdGlvbnMgPSBwcm90by5sb2NhdGlvbnMubWFwKExvY2F0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXh0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0ZXh0J10gPSB0aGlzLnRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVkaWEgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZGlhJ10gPSB0aGlzLm1lZGlhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNjaGVkdWxlZERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc2NoZWR1bGVkRGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydzY2hlZHVsZWREYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNjaGVkdWxlZERhdGUgPyAodGhpcy5zY2hlZHVsZWREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNjaGVkdWxlZERhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmxvY2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydsb2NhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubG9jYXRpb25zID8gKHRoaXMubG9jYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmxvY2F0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5naWZzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydnaWZzJ10gPSB0aGlzLmdpZnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlkZW9zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aWRlb3MnXSA9IHRoaXMudmlkZW9zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBvc3Q6IE11bHRpbG9jYXRpb25Qb3N0O1xuICAgIGVycm9yczogTXVsdGlsb2NhdGlvblBvc3RFcnJvcltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdCkge20ucG9zdCA9IE11bHRpbG9jYXRpb25Qb3N0LmZyb21Qcm90byhwcm90by5wb3N0KTt9XG4gICAgICAgIGlmIChwcm90by5lcnJvcnMpIHttLmVycm9ycyA9IHByb3RvLmVycm9ycy5tYXAoTXVsdGlsb2NhdGlvblBvc3RFcnJvci5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Bvc3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdCA/ICh0aGlzLnBvc3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucG9zdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lcnJvcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXJyb3JzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Vycm9ycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lcnJvcnMgPyAodGhpcy5lcnJvcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXJyb3JzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBwb3N0VGV4dDogc3RyaW5nO1xuICAgIHBvc3REYXRlVGltZTogRGF0ZTtcbiAgICBnbWJQb3N0Q3VzdG9taXphdGlvbjogc3RyaW5nO1xuICAgIGltYWdlVXJsOiBzdHJpbmc7XG4gICAgaW1hZ2VQYXRoOiBzdHJpbmc7XG4gICAgaW1hZ2VTaXplOiBzdHJpbmc7XG4gICAgcHJldmlld3M6IHN0cmluZztcbiAgICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgICB2aWRlb1VybDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdERhdGVUaW1lKSB7bS5wb3N0RGF0ZVRpbWUgPSBuZXcgRGF0ZShwcm90by5wb3N0RGF0ZVRpbWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpdGxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0aXRsZSddID0gdGhpcy50aXRsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncG9zdFRleHQnXSA9IHRoaXMucG9zdFRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdERhdGVUaW1lICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBvc3REYXRlVGltZSAhPT0gbnVsbCkge3RvUmV0dXJuWydwb3N0RGF0ZVRpbWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdERhdGVUaW1lID8gKHRoaXMucG9zdERhdGVUaW1lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBvc3REYXRlVGltZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZ21iUG9zdEN1c3RvbWl6YXRpb24nXSA9IHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlVXJsJ10gPSB0aGlzLmltYWdlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlUGF0aCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VQYXRoJ10gPSB0aGlzLmltYWdlUGF0aDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlU2l6ZSddID0gdGhpcy5pbWFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJldmlld3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByZXZpZXdzJ10gPSB0aGlzLnByZXZpZXdzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29wdGlvbnMnXSA9IHRoaXMub3B0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmlkZW9VcmwnXSA9IHRoaXMudmlkZW9Vcmw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVQb3N0VGVtcGxhdGVSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVQb3N0VGVtcGxhdGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RlbXBsYXRlSWQnXSA9IHRoaXMudGVtcGxhdGVJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlUmFuZ2VGaWx0ZXIgaW1wbGVtZW50cyBpLkRhdGVSYW5nZUZpbHRlckludGVyZmFjZSB7XG4gICAgYmVnaW5SYW5nZTogRGF0ZTtcbiAgICBlbmRSYW5nZTogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERhdGVSYW5nZUZpbHRlciB7XG4gICAgICAgIGxldCBtID0gbmV3IERhdGVSYW5nZUZpbHRlcigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5iZWdpblJhbmdlKSB7bS5iZWdpblJhbmdlID0gbmV3IERhdGUocHJvdG8uYmVnaW5SYW5nZSk7fVxuICAgICAgICBpZiAocHJvdG8uZW5kUmFuZ2UpIHttLmVuZFJhbmdlID0gbmV3IERhdGUocHJvdG8uZW5kUmFuZ2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EYXRlUmFuZ2VGaWx0ZXJJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5iZWdpblJhbmdlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmJlZ2luUmFuZ2UgIT09IG51bGwpIHt0b1JldHVyblsnYmVnaW5SYW5nZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5iZWdpblJhbmdlID8gKHRoaXMuYmVnaW5SYW5nZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5iZWdpblJhbmdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZFJhbmdlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVuZFJhbmdlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VuZFJhbmdlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVuZFJhbmdlID8gKHRoaXMuZW5kUmFuZ2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZW5kUmFuZ2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJyYW5kSWQ6IHN0cmluZztcbiAgICBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvbklkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIHRlbXBsYXRlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RlbXBsYXRlSWQnXSA9IHRoaXMudGVtcGxhdGVJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVTb2NpYWxQb3N0UmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlU29jaWFsUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcbiAgICBzb2NpYWxQb3N0SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlU29jaWFsUG9zdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsUG9zdElkJ10gPSB0aGlzLnNvY2lhbFBvc3RJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5FZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgbXVsdGlsb2NhdGlvbklkOiBzdHJpbmc7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIG1lZGlhOiBzdHJpbmdbXTtcbiAgICBzY2hlZHVsZWREYXRlOiBEYXRlO1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuICAgIGdpZnM6IHN0cmluZ1tdO1xuICAgIHZpZGVvczogc3RyaW5nW107XG4gICAgbG9jYXRpb25zOiBMb2NhdGlvbltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc2NoZWR1bGVkRGF0ZSkge20uc2NoZWR1bGVkRGF0ZSA9IG5ldyBEYXRlKHByb3RvLnNjaGVkdWxlZERhdGUpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgaWYgKHByb3RvLmxvY2F0aW9ucykge20ubG9jYXRpb25zID0gcHJvdG8ubG9jYXRpb25zLm1hcChMb2NhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvbklkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXh0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0ZXh0J10gPSB0aGlzLnRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVkaWEgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lZGlhJ10gPSB0aGlzLm1lZGlhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNjaGVkdWxlZERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc2NoZWR1bGVkRGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydzY2hlZHVsZWREYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNjaGVkdWxlZERhdGUgPyAodGhpcy5zY2hlZHVsZWREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNjaGVkdWxlZERhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5naWZzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydnaWZzJ10gPSB0aGlzLmdpZnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlkZW9zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aWRlb3MnXSA9IHRoaXMudmlkZW9zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvY2F0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5sb2NhdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnbG9jYXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmxvY2F0aW9ucyA/ICh0aGlzLmxvY2F0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5sb2NhdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwb3N0OiBNdWx0aWxvY2F0aW9uUG9zdDtcbiAgICBlcnJvcnM6IE11bHRpbG9jYXRpb25Qb3N0RXJyb3JbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdCkge20ucG9zdCA9IE11bHRpbG9jYXRpb25Qb3N0LmZyb21Qcm90byhwcm90by5wb3N0KTt9XG4gICAgICAgIGlmIChwcm90by5lcnJvcnMpIHttLmVycm9ycyA9IHByb3RvLmVycm9ycy5tYXAoTXVsdGlsb2NhdGlvblBvc3RFcnJvci5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucG9zdCAhPT0gbnVsbCkge3RvUmV0dXJuWydwb3N0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3QgPyAodGhpcy5wb3N0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBvc3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXJyb3JzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVycm9ycyAhPT0gbnVsbCkge3RvUmV0dXJuWydlcnJvcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXJyb3JzID8gKHRoaXMuZXJyb3JzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVycm9yczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEZpbHRlcnMgaW1wbGVtZW50cyBpLlBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSB7XG4gICAgZGF0ZVJhbmdlOiBEYXRlUmFuZ2VGaWx0ZXI7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEZpbHRlcnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZGF0ZVJhbmdlKSB7bS5kYXRlUmFuZ2UgPSBEYXRlUmFuZ2VGaWx0ZXIuZnJvbVByb3RvKHByb3RvLmRhdGVSYW5nZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGVSYW5nZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kYXRlUmFuZ2UgIT09IG51bGwpIHt0b1JldHVyblsnZGF0ZVJhbmdlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRhdGVSYW5nZSA/ICh0aGlzLmRhdGVSYW5nZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kYXRlUmFuZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpbnRlcm5hbFBvc3RJZHM6IHN0cmluZ1tdO1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW50ZXJuYWxQb3N0SWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnRlcm5hbFBvc3RJZHMnXSA9IHRoaXMuaW50ZXJuYWxQb3N0SWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdFN0YXRzOiBTb2NpYWxQb3N0U3RhdHNbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNvY2lhbFBvc3RTdGF0cykge20uc29jaWFsUG9zdFN0YXRzID0gcHJvdG8uc29jaWFsUG9zdFN0YXRzLm1hcChTb2NpYWxQb3N0U3RhdHMuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3RTdGF0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0U3RhdHMgIT09IG51bGwpIHt0b1JldHVyblsnc29jaWFsUG9zdFN0YXRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNvY2lhbFBvc3RTdGF0cyA/ICh0aGlzLnNvY2lhbFBvc3RTdGF0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zb2NpYWxQb3N0U3RhdHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBidXNpbmVzc0lkOiBzdHJpbmc7XG4gICAgaW50ZXJuYWxQb3N0SWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludGVybmFsUG9zdElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW50ZXJuYWxQb3N0SWRzJ10gPSB0aGlzLmludGVybmFsUG9zdElkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVNvY2lhbFBvc3RzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdHM6IFNvY2lhbFBvc3RbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zb2NpYWxQb3N0cykge20uc29jaWFsUG9zdHMgPSBwcm90by5zb2NpYWxQb3N0cy5tYXAoU29jaWFsUG9zdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVNvY2lhbFBvc3RzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydzb2NpYWxQb3N0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zb2NpYWxQb3N0cyA/ICh0aGlzLnNvY2lhbFBvc3RzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNvY2lhbFBvc3RzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgbXVsdGlsb2NhdGlvbklkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aWxvY2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25JZCddID0gdGhpcy5tdWx0aWxvY2F0aW9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbXVsdGlsb2NhdGlvblBvc3Q6IE11bHRpbG9jYXRpb25Qb3N0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubXVsdGlsb2NhdGlvblBvc3QpIHttLm11bHRpbG9jYXRpb25Qb3N0ID0gTXVsdGlsb2NhdGlvblBvc3QuZnJvbVByb3RvKHByb3RvLm11bHRpbG9jYXRpb25Qb3N0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25Qb3N0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0ID8gKHRoaXMubXVsdGlsb2NhdGlvblBvc3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubXVsdGlsb2NhdGlvblBvc3Q7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UG9zdFRlbXBsYXRlUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0UG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UG9zdFRlbXBsYXRlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZW1wbGF0ZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0ZW1wbGF0ZUlkJ10gPSB0aGlzLnRlbXBsYXRlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwb3N0VGVtcGxhdGU6IFBvc3RUZW1wbGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdFRlbXBsYXRlKSB7bS5wb3N0VGVtcGxhdGUgPSBQb3N0VGVtcGxhdGUuZnJvbVByb3RvKHByb3RvLnBvc3RUZW1wbGF0ZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdFRlbXBsYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBvc3RUZW1wbGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydwb3N0VGVtcGxhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdFRlbXBsYXRlID8gKHRoaXMucG9zdFRlbXBsYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBvc3RUZW1wbGF0ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBidXNpbmVzc0lkOiBzdHJpbmc7XG4gICAgc29jaWFsU2VydmljZUlkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0U2NoZWR1bGVkUG9zdENvdW50UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0U2NoZWR1bGVkUG9zdENvdW50UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idXNpbmVzc0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidXNpbmVzc0lkJ10gPSB0aGlzLmJ1c2luZXNzSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsU2VydmljZUlkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsU2VydmljZUlkcyddID0gdGhpcy5zb2NpYWxTZXJ2aWNlSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgY291bnQ6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0U2NoZWR1bGVkUG9zdENvdW50UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY291bnQpIHttLmNvdW50ID0gcGFyc2VJbnQocHJvdG8uY291bnQsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0U2NoZWR1bGVkUG9zdENvdW50UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY291bnQnXSA9IHRoaXMuY291bnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgICBlbmREYXRlOiBEYXRlO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGFydERhdGUpIHttLnN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHByb3RvLnN0YXJ0RGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8uZW5kRGF0ZSkge20uZW5kRGF0ZSA9IG5ldyBEYXRlKHByb3RvLmVuZERhdGUpO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5icmFuZElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydicmFuZElkJ10gPSB0aGlzLmJyYW5kSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhcnREYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXJ0RGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydzdGFydERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhcnREYXRlID8gKHRoaXMuc3RhcnREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN0YXJ0RGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmREYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVuZERhdGUgIT09IG51bGwpIHt0b1JldHVyblsnZW5kRGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lbmREYXRlID8gKHRoaXMuZW5kRGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lbmREYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtdWx0aWxvY2F0aW9uUG9zdHM6IE11bHRpbG9jYXRpb25Qb3N0W107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG4gICAgZmFpbGVkU29jaWFsUG9zdHM6IFNvY2lhbFBvc3RbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubXVsdGlsb2NhdGlvblBvc3RzKSB7bS5tdWx0aWxvY2F0aW9uUG9zdHMgPSBwcm90by5tdWx0aWxvY2F0aW9uUG9zdHMubWFwKE11bHRpbG9jYXRpb25Qb3N0LmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZmFpbGVkU29jaWFsUG9zdHMpIHttLmZhaWxlZFNvY2lhbFBvc3RzID0gcHJvdG8uZmFpbGVkU29jaWFsUG9zdHMubWFwKFNvY2lhbFBvc3QuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aWxvY2F0aW9uUG9zdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubXVsdGlsb2NhdGlvblBvc3RzICE9PSBudWxsKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25Qb3N0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tdWx0aWxvY2F0aW9uUG9zdHMgPyAodGhpcy5tdWx0aWxvY2F0aW9uUG9zdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubXVsdGlsb2NhdGlvblBvc3RzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmFpbGVkU29jaWFsUG9zdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmFpbGVkU29jaWFsUG9zdHMgIT09IG51bGwpIHt0b1JldHVyblsnZmFpbGVkU29jaWFsUG9zdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmFpbGVkU29jaWFsUG9zdHMgPyAodGhpcy5mYWlsZWRTb2NpYWxQb3N0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5mYWlsZWRTb2NpYWxQb3N0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RQb3N0VGVtcGxhdGVzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RQb3N0VGVtcGxhdGVzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBvc3RUZW1wbGF0ZTogUG9zdFRlbXBsYXRlW107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFBvc3RUZW1wbGF0ZXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0VGVtcGxhdGUpIHttLnBvc3RUZW1wbGF0ZSA9IHByb3RvLnBvc3RUZW1wbGF0ZS5tYXAoUG9zdFRlbXBsYXRlLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGVtcGxhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucG9zdFRlbXBsYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Bvc3RUZW1wbGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wb3N0VGVtcGxhdGUgPyAodGhpcy5wb3N0VGVtcGxhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucG9zdFRlbXBsYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFNvY2lhbFBvc3RzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdFNvY2lhbFBvc3RzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgZW5kOiBEYXRlO1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBzb2NpYWxTZXJ2aWNlSWRzOiBzdHJpbmdbXTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFNvY2lhbFBvc3RzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RTb2NpYWxQb3N0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3RhcnQpIHttLnN0YXJ0ID0gbmV3IERhdGUocHJvdG8uc3RhcnQpO31cbiAgICAgICAgaWYgKHByb3RvLmVuZCkge20uZW5kID0gbmV3IERhdGUocHJvdG8uZW5kKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0U29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhcnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhcnQgIT09IG51bGwpIHt0b1JldHVyblsnc3RhcnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhcnQgPyAodGhpcy5zdGFydCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdGFydDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VuZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lbmQgPyAodGhpcy5lbmQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZW5kO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFNlcnZpY2VJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFNlcnZpY2VJZHMnXSA9IHRoaXMuc29jaWFsU2VydmljZUlkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YWdzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YWdzJ10gPSB0aGlzLnRhZ3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0U29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdHM6IFNvY2lhbFBvc3RbXTtcbiAgICBuZXh0Q3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc29jaWFsUG9zdHMpIHttLnNvY2lhbFBvc3RzID0gcHJvdG8uc29jaWFsUG9zdHMubWFwKFNvY2lhbFBvc3QuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydzb2NpYWxQb3N0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zb2NpYWxQb3N0cyA/ICh0aGlzLnNvY2lhbFBvc3RzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNvY2lhbFBvc3RzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5QYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHNvY2lhbFBvc3RzOiBTb2NpYWxQb3N0W107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc29jaWFsUG9zdHMpIHttLnNvY2lhbFBvc3RzID0gcHJvdG8uc29jaWFsUG9zdHMubWFwKFNvY2lhbFBvc3QuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsUG9zdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc29jaWFsUG9zdHMgIT09IG51bGwpIHt0b1JldHVyblsnc29jaWFsUG9zdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc29jaWFsUG9zdHMgPyAodGhpcy5zb2NpYWxQb3N0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zb2NpYWxQb3N0czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uZXh0Q3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduZXh0Q3Vyc29yJ10gPSB0aGlzLm5leHRDdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzTW9yZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzTW9yZSddID0gdGhpcy5oYXNNb3JlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5QYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgZmlsdGVyczogUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3RGaWx0ZXJzO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZpbHRlcnMpIHttLmZpbHRlcnMgPSBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEZpbHRlcnMuZnJvbVByb3RvKHByb3RvLmZpbHRlcnMpO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgaW1wbGVtZW50cyBpLlJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHJlYXNvbjogZS5SZW1vdmVSZWFzb247XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIG11bHRpbG9jYXRpb25JZDogc3RyaW5nO1xuICAgIGxvY2F0aW9uczogTG9jYXRpb25bXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnJlYXNvbikge20ucmVhc29uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5SZW1vdmVSZWFzb24+KGUuUmVtb3ZlUmVhc29uLCBwcm90by5yZWFzb24pO31cbiAgICAgICAgaWYgKHByb3RvLmxvY2F0aW9ucykge20ubG9jYXRpb25zID0gcHJvdG8ubG9jYXRpb25zLm1hcChMb2NhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVhc29uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZWFzb24nXSA9IHRoaXMucmVhc29uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aWxvY2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25JZCddID0gdGhpcy5tdWx0aWxvY2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmxvY2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydsb2NhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubG9jYXRpb25zID8gKHRoaXMubG9jYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmxvY2F0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZVBvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5TY2hlZHVsZVBvc3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzb2NpYWxQb3N0OiBTb2NpYWxQb3N0RGF0YTtcbiAgICBzb2NpYWxTZXJ2aWNlSWRzOiBzdHJpbmdbXTtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBidXNpbmVzc0lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTY2hlZHVsZVBvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2NoZWR1bGVQb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zb2NpYWxQb3N0KSB7bS5zb2NpYWxQb3N0ID0gU29jaWFsUG9zdERhdGEuZnJvbVByb3RvKHByb3RvLnNvY2lhbFBvc3QpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TY2hlZHVsZVBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsUG9zdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NvY2lhbFBvc3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc29jaWFsUG9zdCA/ICh0aGlzLnNvY2lhbFBvc3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc29jaWFsUG9zdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxTZXJ2aWNlSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxTZXJ2aWNlSWRzJ10gPSB0aGlzLnNvY2lhbFNlcnZpY2VJZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZVBvc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuU2NoZWR1bGVQb3N0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHN0YXR1c2VzOiBTY2hlZHVsZVBvc3RTdGF0dXNbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNjaGVkdWxlUG9zdFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2NoZWR1bGVQb3N0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3RhdHVzZXMpIHttLnN0YXR1c2VzID0gcHJvdG8uc3RhdHVzZXMubWFwKFNjaGVkdWxlUG9zdFN0YXR1cy5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TY2hlZHVsZVBvc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1c2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXR1c2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXR1c2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXR1c2VzID8gKHRoaXMuc3RhdHVzZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhdHVzZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdCBpbXBsZW1lbnRzIGkuU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdDogU29jaWFsUG9zdERhdGE7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc29jaWFsUG9zdCkge20uc29jaWFsUG9zdCA9IFNvY2lhbFBvc3REYXRhLmZyb21Qcm90byhwcm90by5zb2NpYWxQb3N0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc29jaWFsUG9zdCAhPT0gbnVsbCkge3RvUmV0dXJuWydzb2NpYWxQb3N0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNvY2lhbFBvc3QgPyAodGhpcy5zb2NpYWxQb3N0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNvY2lhbFBvc3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZSBpbXBsZW1lbnRzIGkuU2NoZWR1bGVUb0FsbFBhZ2VzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHN0YXR1c2VzOiBTY2hlZHVsZVBvc3RTdGF0dXNbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2NoZWR1bGVUb0FsbFBhZ2VzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3RhdHVzZXMpIHttLnN0YXR1c2VzID0gcHJvdG8uc3RhdHVzZXMubWFwKFNjaGVkdWxlUG9zdFN0YXR1cy5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1c2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXR1c2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXR1c2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXR1c2VzID8gKHRoaXMuc3RhdHVzZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhdHVzZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBwb3N0VGV4dDogc3RyaW5nO1xuICAgIHBvc3REYXRlVGltZTogRGF0ZTtcbiAgICBnbWJQb3N0Q3VzdG9taXphdGlvbjogc3RyaW5nO1xuICAgIGltYWdlVXJsOiBzdHJpbmc7XG4gICAgaW1hZ2VQYXRoOiBzdHJpbmc7XG4gICAgaW1hZ2VTaXplOiBzdHJpbmc7XG4gICAgcHJldmlld3M6IHN0cmluZztcbiAgICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgICB2aWRlb1VybDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdERhdGVUaW1lKSB7bS5wb3N0RGF0ZVRpbWUgPSBuZXcgRGF0ZShwcm90by5wb3N0RGF0ZVRpbWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RlbXBsYXRlSWQnXSA9IHRoaXMudGVtcGxhdGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aXRsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGl0bGUnXSA9IHRoaXMudGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdFRleHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bvc3RUZXh0J10gPSB0aGlzLnBvc3RUZXh0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3REYXRlVGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0RGF0ZVRpbWUgIT09IG51bGwpIHt0b1JldHVyblsncG9zdERhdGVUaW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3REYXRlVGltZSA/ICh0aGlzLnBvc3REYXRlVGltZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0RGF0ZVRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dtYlBvc3RDdXN0b21pemF0aW9uJ10gPSB0aGlzLmdtYlBvc3RDdXN0b21pemF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbWFnZVVybCddID0gdGhpcy5pbWFnZVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVBhdGggIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlUGF0aCddID0gdGhpcy5pbWFnZVBhdGg7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VTaXplICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbWFnZVNpemUnXSA9IHRoaXMuaW1hZ2VTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXZpZXdzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmV2aWV3cyddID0gdGhpcy5wcmV2aWV3czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcHRpb25zJ10gPSB0aGlzLm9wdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlkZW9VcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZpZGVvVXJsJ10gPSB0aGlzLnZpZGVvVXJsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlLCBFbnZpcm9ubWVudCB9IGZyb20gJ0B2ZW5kYXN0YS9jb3JlJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgSG9zdFNlcnZpY2Uge1xuICAgIHByaXZhdGUgX2hvc3Q6IHN0cmluZztcbiAgICBwcml2YXRlIF9odHRwc0hvc3Q6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBob3N0KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9ob3N0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faG9zdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0RW52aXJvbm1lbnQoKSkge1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5MT0NBTDpcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gJ3NvY2lhbC1wb3N0LnZlbmRhc3RhLWxvY2FsLmNvbSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVudmlyb25tZW50LlRFU1Q6XG4gICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5ERU1POlxuICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSAnc29jaWFsLXBvc3RzLWRlbW8uYXBpZ2F0ZXdheS5jbyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVudmlyb25tZW50LlBST0Q6XG4gICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9ICdzb2NpYWwtcG9zdHMtcHJvZC5hcGlnYXRld2F5LmNvJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faG9zdDtcbiAgICB9XG5cbiAgICBodHRwc0hvc3QoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2h0dHBzSG9zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBzSG9zdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0RW52aXJvbm1lbnQoKSkge1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5MT0NBTDpcbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwc0hvc3QgPSAnc29jaWFsLXBvc3QudmVuZGFzdGEtbG9jYWwuY29tJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRW52aXJvbm1lbnQuVEVTVDpcbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwc0hvc3QgPSAnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRW52aXJvbm1lbnQuREVNTzpcbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwc0hvc3QgPSAnc29jaWFsLXBvc3RzLWFwaS1kZW1vLmFwaWdhdGV3YXkuY28nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5QUk9EOlxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHBzSG9zdCA9ICdzb2NpYWwtcG9zdHMtYXBpLXByb2QuYXBpZ2F0ZXdheS5jbyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBzSG9zdDtcbiAgICB9XG5cbiAgICBob3N0V2l0aFNjaGVtZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzY2hlbWUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpID09PSBFbnZpcm9ubWVudC5MT0NBTCA/ICdodHRwOi8vJyA6ICdodHRwczovLyc7XG4gICAgICAgIHJldHVybiBzY2hlbWUgKyB0aGlzLmhvc3QoKVxuICAgIH1cblxuICAgIGh0dHBzSG9zdFdpdGhTY2hlbWUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc2NoZW1lID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0RW52aXJvbm1lbnQoKSA9PT0gRW52aXJvbm1lbnQuTE9DQUwgPyAnaHR0cDovLycgOiAnaHR0cHM6Ly8nO1xuICAgICAgICByZXR1cm4gc2NoZW1lICsgdGhpcy5odHRwc0hvc3QoKVxuICAgIH1cbn1cbiIsIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gQVBJIFNlcnZpY2UuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgICAgICBEZWxldGVTb2NpYWxQb3N0UmVxdWVzdCxcbiAgICAgICAgR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0LFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlLFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdCxcbiAgICAgICAgR2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlLFxuICAgICAgICBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0LFxuICAgICAgICBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZSxcbiAgICAgICAgTGlzdFNvY2lhbFBvc3RzUmVxdWVzdCxcbiAgICAgICAgTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2UsXG4gICAgICAgIFNjaGVkdWxlUG9zdFJlcXVlc3QsXG4gICAgICAgIFNjaGVkdWxlUG9zdFJlc3BvbnNlLFxuICAgICAgICBTY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0LFxuICAgICAgICBTY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZSxcbn0gZnJvbSAnLi9vYmplY3RzLyc7XG5pbXBvcnQge1xuICAgICAgICBEZWxldGVTb2NpYWxQb3N0UmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgR2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZUludGVyZmFjZSxcbiAgICAgICAgTGlzdFNvY2lhbFBvc3RzUmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIFNjaGVkdWxlUG9zdFJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIFNjaGVkdWxlUG9zdFJlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBTY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBTY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZUludGVyZmFjZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzLyc7XG5pbXBvcnQge0h0dHBIZWFkZXJzLCBIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SG9zdFNlcnZpY2V9IGZyb20gJy4uL19nZW5lcmF0ZWQvaG9zdC5zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgc2hhcmV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgU29jaWFsUG9zdHNBcGlTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBob3N0U2VydmljZTogSG9zdFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwaU9wdGlvbnMoKToge2hlYWRlcnM6IEh0dHBIZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW59IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBsaXN0KHI6IExpc3RTb2NpYWxQb3N0c1JlcXVlc3QgfCBMaXN0U29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxMaXN0U29jaWFsUG9zdHNSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8TGlzdFNvY2lhbFBvc3RzUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxMaXN0U29jaWFsUG9zdHNSZXF1ZXN0PnIpIDogbmV3IExpc3RTb2NpYWxQb3N0c1JlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxMaXN0U29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuU29jaWFsUG9zdHMvTGlzdFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgZGVsZXRlU29jaWFsUG9zdChyOiBEZWxldGVTb2NpYWxQb3N0UmVxdWVzdCB8IERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8bnVsbD4+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0PnIpIDogbmV3IERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8bnVsbD4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuU29jaWFsUG9zdHMvRGVsZXRlU29jaWFsUG9zdFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB7Li4udGhpcy5hcGlPcHRpb25zKCksIG9ic2VydmU6ICdyZXNwb25zZSd9KTtcbiAgICB9XG4gICAgc2NoZWR1bGVUb0FsbFBhZ2VzKHI6IFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3QgfCBTY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxTY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8U2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxTY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0PnIpIDogbmV3IFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuU29jaWFsUG9zdHMvU2NoZWR1bGVUb0FsbFBhZ2VzXCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gU2NoZWR1bGVUb0FsbFBhZ2VzUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBzY2hlZHVsZShyOiBTY2hlZHVsZVBvc3RSZXF1ZXN0IHwgU2NoZWR1bGVQb3N0UmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8U2NoZWR1bGVQb3N0UmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPFNjaGVkdWxlUG9zdFJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8U2NoZWR1bGVQb3N0UmVxdWVzdD5yKSA6IG5ldyBTY2hlZHVsZVBvc3RSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U2NoZWR1bGVQb3N0UmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLlNvY2lhbFBvc3RzL1NjaGVkdWxlXCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gU2NoZWR1bGVQb3N0UmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBnZXRNdWx0aVNvY2lhbFBvc3RzKHI6IEdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0IHwgR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8R2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8R2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3Q+cikgOiBuZXcgR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxHZXRNdWx0aVNvY2lhbFBvc3RzUmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLlNvY2lhbFBvc3RzL0dldE11bHRpU29jaWFsUG9zdHNcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBHZXRNdWx0aVNvY2lhbFBvc3RzUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBnZXRNdWx0aVNvY2lhbFBvc3RTdGF0cyhyOiBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3QgfCBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3Q+cikgOiBuZXcgR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8R2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuU29jaWFsUG9zdHMvR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgZ2V0U2NoZWR1bGVkUG9zdENvdW50KHI6IEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3QgfCBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8R2V0U2NoZWR1bGVkUG9zdENvdW50UmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0PnIpIDogbmV3IEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuU29jaWFsUG9zdHMvR2V0U2NoZWR1bGVkUG9zdENvdW50XCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gR2V0U2NoZWR1bGVkUG9zdENvdW50UmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBcbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBMaXN0U29jaWFsUG9zdHNSZXF1ZXN0LFxuICBMaXN0U29jaWFsUG9zdHNSZXNwb25zZSxcbiAgR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3QsXG4gIEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZSxcbiAgR2V0U2NoZWR1bGVkUG9zdENvdW50UmVxdWVzdCxcbiAgR2V0U2NoZWR1bGVkUG9zdENvdW50UmVzcG9uc2UsXG59IGZyb20gJy4vX2ludGVybmFsL29iamVjdHMvYXBpJztcbmltcG9ydCB7IFNvY2lhbFBvc3RzQXBpU2VydmljZSB9IGZyb20gJy4vX2ludGVybmFsL3NvY2lhbC1wb3N0cy5hcGkuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFNvY2lhbFBvc3RzU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc29jaWFsUG9zdHNBcGlTZXJ2aWNlOiBTb2NpYWxQb3N0c0FwaVNlcnZpY2UpIHtcbiAgfVxuXG4gIGxpc3QoXG4gICAgIHN0YXJ0OiBEYXRlLFxuICAgICBlbmQ6IERhdGUsXG4gICAgIHNvY2lhbFNlcnZpY2VJZHM6IHN0cmluZ1tdLFxuICAgICBidXNpbmVzc0lkOiBzdHJpbmcsXG4gICAgIHBhcnRuZXJJZDogc3RyaW5nLFxuICAgICBjdXJzb3I6IHN0cmluZyxcbiAgICAgdGFnczogc3RyaW5nW10sXG4gICAgIHBhZ2VTaXplOiBudW1iZXJcbiAgKTpcbiAgICBPYnNlcnZhYmxlPExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxID0gbmV3IExpc3RTb2NpYWxQb3N0c1JlcXVlc3Qoe1xuICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgZW5kOiBlbmQsXG4gICAgICBidXNpbmVzc0lkOiBidXNpbmVzc0lkLFxuICAgICAgcGFydG5lcklkOiBwYXJ0bmVySWQsXG4gICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgIHNvY2lhbFNlcnZpY2VJZHM6IHNvY2lhbFNlcnZpY2VJZHMsXG4gICAgICB0YWdzOiB0YWdzLFxuICAgICAgcGFnZVNpemU6IHBhZ2VTaXplLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFBvc3RzQXBpU2VydmljZS5saXN0KHJlcSk7XG4gIH1cblxuICBnZXRNdWx0aVNvY2lhbFBvc3RzKGJ1c2luZXNzSWQ6IHN0cmluZywgaW50ZXJuYWxQb3N0SWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8R2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlPiB7XG4gICAgaWYgKCFpbnRlcm5hbFBvc3RJZHMgfHwgaW50ZXJuYWxQb3N0SWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgcmVzID0gbmV3IEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZSgpO1xuICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgfVxuICAgIGNvbnN0IHJlcSA9IG5ldyBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdCh7YnVzaW5lc3NJZDogYnVzaW5lc3NJZCwgaW50ZXJuYWxQb3N0SWRzOiBpbnRlcm5hbFBvc3RJZHN9KTtcbiAgICByZXR1cm4gdGhpcy5zb2NpYWxQb3N0c0FwaVNlcnZpY2UuZ2V0TXVsdGlTb2NpYWxQb3N0cyhyZXEpO1xuICB9XG5cbiAgZ2V0U2NoZWR1bGVkUG9zdENvdW50KHBhcnRuZXJJZDogc3RyaW5nLCBidXNpbmVzc0lkOiBzdHJpbmcsIHNvY2lhbFNlcnZpY2VJZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0KHtwYXJ0bmVySWQ6IHBhcnRuZXJJZCwgYnVzaW5lc3NJZDogYnVzaW5lc3NJZCwgc29jaWFsU2VydmljZUlkczogc29jaWFsU2VydmljZUlkc30pO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFBvc3RzQXBpU2VydmljZS5nZXRTY2hlZHVsZWRQb3N0Q291bnQocmVxKTtcbiAgfVxufVxuIiwiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBBUEkgU2VydmljZS5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgICAgIENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QsXG4gICAgICAgIENyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlLFxuICAgICAgICBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0LFxuICAgICAgICBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0LFxuICAgICAgICBHZXRQb3N0VGVtcGxhdGVSZXNwb25zZSxcbiAgICAgICAgTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0LFxuICAgICAgICBMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlLFxuICAgICAgICBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0LFxufSBmcm9tICcuL29iamVjdHMvJztcbmltcG9ydCB7XG4gICAgICAgIENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIENyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRQb3N0VGVtcGxhdGVSZXNwb25zZUludGVyZmFjZSxcbiAgICAgICAgTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvJztcbmltcG9ydCB7SHR0cEhlYWRlcnMsIEh0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtIb3N0U2VydmljZX0gZnJvbSAnLi4vX2dlbmVyYXRlZC9ob3N0LnNlcnZpY2UnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBzaGFyZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBQb3N0VGVtcGxhdGVzQXBpU2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgaG9zdFNlcnZpY2U6IEhvc3RTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcGlPcHRpb25zKCk6IHtoZWFkZXJzOiBIdHRwSGVhZGVycywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFufSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdXBkYXRlUG9zdFRlbXBsYXRlKHI6IFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QgfCBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8bnVsbD4+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8VXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdD5yKSA6IG5ldyBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8bnVsbD4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuUG9zdFRlbXBsYXRlcy9VcGRhdGVQb3N0VGVtcGxhdGVcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgey4uLnRoaXMuYXBpT3B0aW9ucygpLCBvYnNlcnZlOiAncmVzcG9uc2UnfSk7XG4gICAgfVxuICAgIGNyZWF0ZVBvc3RUZW1wbGF0ZShyOiBDcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0IHwgQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8Q3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8Q3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdD5yKSA6IG5ldyBDcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLlBvc3RUZW1wbGF0ZXMvQ3JlYXRlUG9zdFRlbXBsYXRlXCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBnZXRQb3N0VGVtcGxhdGUocjogR2V0UG9zdFRlbXBsYXRlUmVxdWVzdCB8IEdldFBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPEdldFBvc3RUZW1wbGF0ZVJlcXVlc3Q+cikgOiBuZXcgR2V0UG9zdFRlbXBsYXRlUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Qb3N0VGVtcGxhdGVzL0dldFBvc3RUZW1wbGF0ZVwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgbGlzdFBvc3RUZW1wbGF0ZXMocjogTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0IHwgTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8TGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0PnIpIDogbmV3IExpc3RQb3N0VGVtcGxhdGVzUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLlBvc3RUZW1wbGF0ZXMvTGlzdFBvc3RUZW1wbGF0ZXNcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgZGVsZXRlUG9zdFRlbXBsYXRlKHI6IERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QgfCBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8bnVsbD4+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8RGVsZXRlUG9zdFRlbXBsYXRlUmVxdWVzdD5yKSA6IG5ldyBEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8bnVsbD4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuUG9zdFRlbXBsYXRlcy9EZWxldGVQb3N0VGVtcGxhdGVcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgey4uLnRoaXMuYXBpT3B0aW9ucygpLCBvYnNlcnZlOiAncmVzcG9uc2UnfSk7XG4gICAgfVxuICAgIFxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCxcbiAgQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2UsXG4gIERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QsXG4gIEdldFBvc3RUZW1wbGF0ZVJlcXVlc3QsXG4gIEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlLFxuICBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3QsXG4gIExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2UsXG4gIFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QsXG59IGZyb20gJy4vX2ludGVybmFsL29iamVjdHMvYXBpJztcbmltcG9ydCB7IFBvc3RUZW1wbGF0ZXNBcGlTZXJ2aWNlIH0gZnJvbSAnLi9faW50ZXJuYWwvcG9zdC10ZW1wbGF0ZXMuYXBpLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBQb3N0VGVtcGxhdGVzU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc29jaWFsUG9zdHNBcGlTZXJ2aWNlOiBQb3N0VGVtcGxhdGVzQXBpU2VydmljZSkge1xuICB9XG5cbiAgdXBkYXRlUG9zdFRlbXBsYXRlKGFjY291bnRHcm91cElkOiBzdHJpbmcsIHRlbXBsYXRlSWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZywgcG9zdFRleHQ6IHN0cmluZywgcG9zdERhdGVUaW1lOiBEYXRlLFxuICAgICAgICAgICAgICAgICAgICAgZ21iUG9zdEN1c3RvbWl6YXRpb246IHN0cmluZywgaW1hZ2VVcmw6IHN0cmluZywgaW1hZ2VQYXRoOiBzdHJpbmcsIGltYWdlU2l6ZTogc3RyaW5nLCBwcmV2aWV3czogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogc3RyaW5nW10sIHZpZGVvVXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0KHtcbiAgICAgIGFjY291bnRHcm91cElkOiBhY2NvdW50R3JvdXBJZCxcbiAgICAgIHRlbXBsYXRlSWQ6IHRlbXBsYXRlSWQsXG4gICAgICB0aXRsZTogdGl0bGUsXG4gICAgICBwb3N0VGV4dDogcG9zdFRleHQsXG4gICAgICBwb3N0RGF0ZVRpbWU6IHBvc3REYXRlVGltZSxcbiAgICAgIGdtYlBvc3RDdXN0b21pemF0aW9uOiBnbWJQb3N0Q3VzdG9taXphdGlvbixcbiAgICAgIGltYWdlVXJsOiBpbWFnZVVybCxcbiAgICAgIGltYWdlUGF0aDogaW1hZ2VQYXRoLFxuICAgICAgaW1hZ2VTaXplOiBpbWFnZVNpemUsXG4gICAgICBwcmV2aWV3czogcHJldmlld3MsXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgdmlkZW9Vcmw6IHZpZGVvVXJsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuc29jaWFsUG9zdHNBcGlTZXJ2aWNlLnVwZGF0ZVBvc3RUZW1wbGF0ZShyZXEpXG4gIH1cblxuICBjcmVhdGVQb3N0VGVtcGxhdGUoYWNjb3VudEdyb3VwSWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZywgcG9zdFRleHQ6IHN0cmluZywgcG9zdERhdGVUaW1lOiBEYXRlLCBnbWJQb3N0Q3VzdG9taXphdGlvbjogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgaW1hZ2VVcmw6IHN0cmluZywgaW1hZ2VQYXRoOiBzdHJpbmcsIGltYWdlU2l6ZTogc3RyaW5nLCBwcmV2aWV3czogc3RyaW5nLCBvcHRpb25zOiBzdHJpbmdbXSwgdmlkZW9Vcmw6IHN0cmluZyk6XG4gICAgT2JzZXJ2YWJsZTxDcmVhdGVQb3N0VGVtcGxhdGVSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBDcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0KHtcbiAgICAgIGFjY291bnRHcm91cElkOiBhY2NvdW50R3JvdXBJZCxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIHBvc3RUZXh0OiBwb3N0VGV4dCxcbiAgICAgIHBvc3REYXRlVGltZTogcG9zdERhdGVUaW1lLFxuICAgICAgZ21iUG9zdEN1c3RvbWl6YXRpb246IGdtYlBvc3RDdXN0b21pemF0aW9uLFxuICAgICAgaW1hZ2VVcmw6IGltYWdlVXJsLFxuICAgICAgaW1hZ2VQYXRoOiBpbWFnZVBhdGgsXG4gICAgICBpbWFnZVNpemU6IGltYWdlU2l6ZSxcbiAgICAgIHByZXZpZXdzOiBwcmV2aWV3cyxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB2aWRlb1VybDogdmlkZW9VcmxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5zb2NpYWxQb3N0c0FwaVNlcnZpY2UuY3JlYXRlUG9zdFRlbXBsYXRlKHJlcSk7XG4gIH1cblxuICBnZXRQb3N0VGVtcGxhdGUoYWNjb3VudEdyb3VwSWQ6IHN0cmluZywgdGVtcGxhdGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxHZXRQb3N0VGVtcGxhdGVSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0KHtcbiAgICAgIGFjY291bnRHcm91cElkOiBhY2NvdW50R3JvdXBJZCxcbiAgICAgIHRlbXBsYXRlSWQ6IHRlbXBsYXRlSWRcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5zb2NpYWxQb3N0c0FwaVNlcnZpY2UuZ2V0UG9zdFRlbXBsYXRlKHJlcSlcbiAgfVxuXG4gIGxpc3RQb3N0VGVtcGxhdGVzKGFjY291bnRHcm91cElkOiBzdHJpbmcsIGN1cnNvcjogc3RyaW5nLCBwYWdlU2l6ZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxID0gbmV3IExpc3RQb3N0VGVtcGxhdGVzUmVxdWVzdCh7XG4gICAgICBhY2NvdW50R3JvdXBJZDogYWNjb3VudEdyb3VwSWQsXG4gICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgIHBhZ2VTaXplOiBwYWdlU2l6ZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFBvc3RzQXBpU2VydmljZS5saXN0UG9zdFRlbXBsYXRlcyhyZXEpO1xuICB9XG5cbiAgZGVsZXRlUG9zdFRlbXBsYXRlKGFjY291bnRHcm91cElkOiBzdHJpbmcsIHRlbXBsYXRlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPG51bGw+PiB7XG4gICAgY29uc3QgcmVxID0gbmV3IERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Qoe1xuICAgICAgYWNjb3VudEdyb3VwSWQ6IGFjY291bnRHcm91cElkLFxuICAgICAgdGVtcGxhdGVJZDogdGVtcGxhdGVJZFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFBvc3RzQXBpU2VydmljZS5kZWxldGVQb3N0VGVtcGxhdGUocmVxKTtcbiAgfVxuXG59XG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIEFQSSBTZXJ2aWNlLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICAgICAgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxuICAgICAgICBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlLFxuICAgICAgICBEZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QsXG4gICAgICAgIEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QsXG4gICAgICAgIEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlLFxuICAgICAgICBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QsXG4gICAgICAgIEdldE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UsXG4gICAgICAgIExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3QsXG4gICAgICAgIExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlLFxuICAgICAgICBSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxufSBmcm9tICcuL29iamVjdHMvJztcbmltcG9ydCB7XG4gICAgICAgIENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZSxcbiAgICAgICAgRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZSxcbiAgICAgICAgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZUludGVyZmFjZSxcbiAgICAgICAgUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzLyc7XG5pbXBvcnQge0h0dHBIZWFkZXJzLCBIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SG9zdFNlcnZpY2V9IGZyb20gJy4uL19nZW5lcmF0ZWQvaG9zdC5zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgc2hhcmV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTXVsdGlsb2NhdGlvblBvc3RBcGlTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBob3N0U2VydmljZTogSG9zdFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwaU9wdGlvbnMoKToge2hlYWRlcnM6IEh0dHBIZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW59IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjcmVhdGVNdWx0aWxvY2F0aW9uUG9zdChyOiBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgfCBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Q+cikgOiBuZXcgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuTXVsdGlsb2NhdGlvblBvc3RTZXJ2aWNlL0NyZWF0ZU11bHRpbG9jYXRpb25Qb3N0XCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGVkaXRNdWx0aWxvY2F0aW9uUG9zdChyOiBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IHwgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8RWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8RWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdD5yKSA6IG5ldyBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8RWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLk11bHRpbG9jYXRpb25Qb3N0U2VydmljZS9FZGl0TXVsdGlsb2NhdGlvblBvc3RcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIHJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdChyOiBSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IHwgUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPG51bGw+PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Q+cikgOiBuZXcgUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PG51bGw+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLk11bHRpbG9jYXRpb25Qb3N0U2VydmljZS9SZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgey4uLnRoaXMuYXBpT3B0aW9ucygpLCBvYnNlcnZlOiAncmVzcG9uc2UnfSk7XG4gICAgfVxuICAgIGxpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZChyOiBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0IHwgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8TGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8TGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdD5yKSA6IG5ldyBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLk11bHRpbG9jYXRpb25Qb3N0U2VydmljZS9MaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGRlbGV0ZU11bHRpbG9jYXRpb25Qb3N0KHI6IERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB8IERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPG51bGw+PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxEZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8RGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0PnIpIDogbmV3IERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PG51bGw+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLk11bHRpbG9jYXRpb25Qb3N0U2VydmljZS9EZWxldGVNdWx0aWxvY2F0aW9uUG9zdFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB7Li4udGhpcy5hcGlPcHRpb25zKCksIG9ic2VydmU6ICdyZXNwb25zZSd9KTtcbiAgICB9XG4gICAgZ2V0TXVsdGlsb2NhdGlvblBvc3QocjogR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IHwgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxHZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8R2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0PnIpIDogbmV3IEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEdldE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLk11bHRpbG9jYXRpb25Qb3N0U2VydmljZS9HZXRNdWx0aWxvY2F0aW9uUG9zdFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IEdldE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBcbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCxcbiAgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSxcbiAgRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxuICBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxuICBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSxcbiAgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxuICBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlLFxuICBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0LFxuICBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZSxcbiAgUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCxcbn0gZnJvbSAnLi9faW50ZXJuYWwvb2JqZWN0cy9hcGknO1xuaW1wb3J0IHsgTXVsdGlsb2NhdGlvblBvc3RBcGlTZXJ2aWNlIH0gZnJvbSAnLi9faW50ZXJuYWwvbXVsdGlsb2NhdGlvbi1wb3N0LmFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpZWxkTWFzayB9IGZyb20gJy4vX2ludGVybmFsL29iamVjdHMvZmllbGQtbWFzayc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJy4vX2ludGVybmFsL29iamVjdHMvbXVsdGlsb2NhdGlvbi1wb3N0JztcbmltcG9ydCB7IFJlbW92ZVJlYXNvbiB9IGZyb20gJy4vX2ludGVybmFsL2VudW1zL211bHRpbG9jYXRpb24tcG9zdC5lbnVtJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTXVsdGlsb2NhdGlvblBvc3RzU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbXVsdGlsb2NhdGlvbkFwaVNlcnZpY2U6IE11bHRpbG9jYXRpb25Qb3N0QXBpU2VydmljZSkge1xuICB9XG5cbiAgY3JlYXRlTXVsdGlsb2NhdGlvblBvc3QoYnJhbmRJZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIG1lZGlhOiBzdHJpbmdbXSwgZ2lmczogc3RyaW5nW10sIHZpZGVvczogc3RyaW5nW10sIHNjaGVkdWxlZERhdGU6IERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uczogTG9jYXRpb25bXSk6IE9ic2VydmFibGU8Q3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qoe1xuICAgICAgYnJhbmRJZDogYnJhbmRJZCxcbiAgICAgIHRleHQ6IHRleHQsXG4gICAgICBtZWRpYTogbWVkaWEsXG4gICAgICBnaWZzOiBnaWZzLFxuICAgICAgdmlkZW9zOiB2aWRlb3MsXG4gICAgICBzY2hlZHVsZWREYXRlOiBzY2hlZHVsZWREYXRlLFxuICAgICAgbG9jYXRpb25zOiBsb2NhdGlvbnNcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tdWx0aWxvY2F0aW9uQXBpU2VydmljZS5jcmVhdGVNdWx0aWxvY2F0aW9uUG9zdChyZXEpO1xuICB9XG5cbiAgZWRpdE11bHRpbG9jYXRpb25Qb3N0KGJyYW5kSWQ6IHN0cmluZywgbXVsdGlsb2NhdGlvbklkOiBzdHJpbmcsIHRleHQ6IHN0cmluZywgbWVkaWE6IHN0cmluZ1tdLCBnaWZzOiBzdHJpbmdbXSwgdmlkZW9zOiBzdHJpbmdbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZERhdGU6IERhdGUsIGxvY2F0aW9uczogTG9jYXRpb25bXSwgZmllbGRNYXNrOiBGaWVsZE1hc2spOiBPYnNlcnZhYmxlPEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxID0gbmV3IEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qoe1xuICAgICAgYnJhbmRJZDogYnJhbmRJZCxcbiAgICAgIG11bHRpbG9jYXRpb25JZDogbXVsdGlsb2NhdGlvbklkLFxuICAgICAgdGV4dDogdGV4dCxcbiAgICAgIG1lZGlhOiBtZWRpYSxcbiAgICAgIGdpZnM6IGdpZnMsXG4gICAgICB2aWRlb3M6IHZpZGVvcyxcbiAgICAgIHNjaGVkdWxlZERhdGU6IHNjaGVkdWxlZERhdGUsXG4gICAgICBsb2NhdGlvbnM6IGxvY2F0aW9ucyxcbiAgICAgIGZpZWxkTWFzazogZmllbGRNYXNrXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlsb2NhdGlvbkFwaVNlcnZpY2UuZWRpdE11bHRpbG9jYXRpb25Qb3N0KHJlcSk7XG4gIH1cblxuICByZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3QocmVhc29uOiBSZW1vdmVSZWFzb24sIGJyYW5kSWQ6IHN0cmluZywgbXVsdGlsb2NhdGlvbklkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnM6IExvY2F0aW9uW10pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KHtcbiAgICAgIHJlYXNvbjogcmVhc29uLFxuICAgICAgYnJhbmRJZDogYnJhbmRJZCxcbiAgICAgIG11bHRpbG9jYXRpb25JZDogbXVsdGlsb2NhdGlvbklkLFxuICAgICAgbG9jYXRpb25zOiBsb2NhdGlvbnNcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tdWx0aWxvY2F0aW9uQXBpU2VydmljZS5yZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3QocmVxKTtcbiAgfVxuXG4gIGxpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZChicmFuZElkOiBzdHJpbmcsIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgY3Vyc29yOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0KHtcbiAgICAgIGJyYW5kSWQ6IGJyYW5kSWQsXG4gICAgICBzdGFydERhdGU6IHN0YXJ0RGF0ZSxcbiAgICAgIGVuZERhdGU6IGVuZERhdGUsXG4gICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgIHBhZ2VTaXplOiBwYWdlU2l6ZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm11bHRpbG9jYXRpb25BcGlTZXJ2aWNlLmxpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZChyZXEpO1xuICB9XG5cbiAgZGVsZXRlTXVsdGlsb2NhdGlvblBvc3QoYnJhbmRJZDogc3RyaW5nLCBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPG51bGw+PiB7XG4gICAgY29uc3QgcmVxID0gbmV3IERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCh7XG4gICAgICBicmFuZElkOiBicmFuZElkLFxuICAgICAgbXVsdGlsb2NhdGlvbklkOiBtdWx0aWxvY2F0aW9uSWRcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tdWx0aWxvY2F0aW9uQXBpU2VydmljZS5kZWxldGVNdWx0aWxvY2F0aW9uUG9zdChyZXEpO1xuICB9XG5cbiAgZ2V0TXVsdGlsb2NhdGlvblBvc3QoYnJhbmRJZDogc3RyaW5nLCBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8R2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qoe1xuICAgICAgYnJhbmRJZDogYnJhbmRJZCxcbiAgICAgIG11bHRpbG9jYXRpb25JZDogbXVsdGlsb2NhdGlvbklkXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlsb2NhdGlvbkFwaVNlcnZpY2UuZ2V0TXVsdGlsb2NhdGlvblBvc3QocmVxKTtcbiAgfVxufVxuIiwiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBBUEkgU2VydmljZS5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgICAgIFBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZSxcbiAgICAgICAgUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3QsXG59IGZyb20gJy4vb2JqZWN0cy8nO1xuaW1wb3J0IHtcbiAgICAgICAgUGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEludGVyZmFjZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzLyc7XG5pbXBvcnQge0h0dHBIZWFkZXJzLCBIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SG9zdFNlcnZpY2V9IGZyb20gJy4uL19nZW5lcmF0ZWQvaG9zdC5zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgc2hhcmV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgUGFydG5lclNvY2lhbFBvc3RzQXBpU2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgaG9zdFNlcnZpY2U6IEhvc3RTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcGlPcHRpb25zKCk6IHtoZWFkZXJzOiBIdHRwSGVhZGVycywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFufSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbGlzdFNjaGVkdWxlZChyOiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdCB8IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0PnIpIDogbmV3IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8UGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5QYXJ0bmVyU29jaWFsUG9zdHMvTGlzdFNjaGVkdWxlZFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IFBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGxpc3RTY2hlZHVsZWRCeUNyZWF0ZWQocjogUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3QgfCBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8UGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdD5yKSA6IG5ldyBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuUGFydG5lclNvY2lhbFBvc3RzL0xpc3RTY2hlZHVsZWRCeUNyZWF0ZWRcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBcbn1cbiJdLCJuYW1lcyI6WyJlbnVtU3RyaW5nVG9WYWx1ZSIsImUuQ2FsbFRvQWN0aW9uQ2FsbFRvQWN0aW9uVHlwZSIsImUuU29jaWFsUG9zdERlbGV0aW9uU3RhdHVzIiwiZS5Tb2NpYWxQb3N0U2VydmljZSIsImUuUG9zdGluZ1N0YXR1cyIsImUuUmVtb3ZlUmVhc29uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUEwQkksbUJBQVksTUFBNkI7UUFDckMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FB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