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