@appconda/sdk 1.0.639 → 1.0.643

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 (348) hide show
  1. package/dist/EmploidClient.d.ts +52 -0
  2. package/dist/EmploidClient.js +78 -0
  3. package/dist/client.d.ts +149 -0
  4. package/dist/client.js +408 -0
  5. package/dist/enums/api-service.d.ts +13 -0
  6. package/dist/enums/api-service.js +15 -0
  7. package/dist/enums/api.d.ts +5 -0
  8. package/dist/enums/api.js +7 -0
  9. package/dist/enums/auth-method.d.ts +9 -0
  10. package/dist/enums/auth-method.js +11 -0
  11. package/dist/enums/browser.d.ts +16 -0
  12. package/dist/enums/browser.js +18 -0
  13. package/dist/enums/compression.d.ts +5 -0
  14. package/dist/enums/compression.js +7 -0
  15. package/dist/enums/credit-card.d.ts +18 -0
  16. package/dist/enums/credit-card.js +20 -0
  17. package/dist/enums/database-usage-range.d.ts +5 -0
  18. package/dist/enums/database-usage-range.js +7 -0
  19. package/dist/enums/email-template-locale.d.ts +133 -0
  20. package/dist/enums/email-template-locale.js +135 -0
  21. package/dist/enums/email-template-type.d.ts +9 -0
  22. package/dist/enums/email-template-type.js +11 -0
  23. package/dist/enums/entities/EntityLimitType.d.ts +4 -0
  24. package/dist/enums/entities/EntityLimitType.js +6 -0
  25. package/dist/enums/entities/PropertyAttributeName.d.ts +27 -0
  26. package/dist/enums/entities/PropertyAttributeName.js +29 -0
  27. package/dist/enums/entities/PropertyCondition.d.ts +7 -0
  28. package/dist/enums/entities/PropertyCondition.js +10 -0
  29. package/dist/enums/entities/PropertyType.d.ts +12 -0
  30. package/dist/enums/entities/PropertyType.js +18 -0
  31. package/dist/enums/entities/PropertyValueType.d.ts +6 -0
  32. package/dist/enums/entities/PropertyValueType.js +8 -0
  33. package/dist/enums/entities/RowAccess.d.ts +2 -0
  34. package/dist/enums/entities/RowAccess.js +2 -0
  35. package/dist/enums/entities/ViewFilterCondition.d.ts +12 -0
  36. package/dist/enums/entities/ViewFilterCondition.js +14 -0
  37. package/dist/enums/execution-method.d.ts +8 -0
  38. package/dist/enums/execution-method.js +10 -0
  39. package/dist/enums/flag.d.ts +197 -0
  40. package/dist/enums/flag.js +199 -0
  41. package/dist/enums/function-usage-range.d.ts +5 -0
  42. package/dist/enums/function-usage-range.js +7 -0
  43. package/dist/enums/image-format.d.ts +7 -0
  44. package/dist/enums/image-format.js +9 -0
  45. package/dist/enums/image-gravity.d.ts +11 -0
  46. package/dist/enums/image-gravity.js +13 -0
  47. package/dist/enums/index-type.d.ts +5 -0
  48. package/dist/enums/index-type.js +7 -0
  49. package/dist/enums/messaging-provider-type.d.ts +5 -0
  50. package/dist/enums/messaging-provider-type.js +7 -0
  51. package/dist/enums/name.d.ts +14 -0
  52. package/dist/enums/name.js +16 -0
  53. package/dist/enums/o-auth-provider copy.d.ts +41 -0
  54. package/dist/enums/o-auth-provider copy.js +43 -0
  55. package/dist/enums/password-hash.d.ts +13 -0
  56. package/dist/enums/password-hash.js +15 -0
  57. package/dist/enums/platform-type.d.ts +17 -0
  58. package/dist/enums/platform-type.js +19 -0
  59. package/dist/enums/project-usage-range.d.ts +4 -0
  60. package/dist/enums/project-usage-range.js +6 -0
  61. package/dist/enums/region.d.ts +4 -0
  62. package/dist/enums/region.js +6 -0
  63. package/dist/enums/relation-mutate.d.ts +5 -0
  64. package/dist/enums/relation-mutate.js +7 -0
  65. package/dist/enums/relationship-type.d.ts +6 -0
  66. package/dist/enums/relationship-type.js +8 -0
  67. package/dist/enums/resource-type.d.ts +4 -0
  68. package/dist/enums/resource-type.js +6 -0
  69. package/dist/enums/runtime.d.ts +48 -0
  70. package/dist/enums/runtime.js +50 -0
  71. package/dist/enums/s-m-t-p-secure.d.ts +3 -0
  72. package/dist/enums/s-m-t-p-secure.js +5 -0
  73. package/dist/enums/shared/ApplicationLayout.d.ts +4 -0
  74. package/dist/enums/shared/ApplicationLayout.js +6 -0
  75. package/dist/enums/shared/Colors.d.ts +24 -0
  76. package/dist/enums/shared/Colors.js +26 -0
  77. package/dist/enums/shared/InputType.d.ts +6 -0
  78. package/dist/enums/shared/InputType.js +8 -0
  79. package/dist/enums/shared/Periodicity.d.ts +7 -0
  80. package/dist/enums/shared/Periodicity.js +9 -0
  81. package/dist/enums/shared/SvgIcon.d.ts +37 -0
  82. package/dist/enums/shared/SvgIcon.js +39 -0
  83. package/dist/enums/shared/Theme.d.ts +4 -0
  84. package/dist/enums/shared/Theme.js +6 -0
  85. package/dist/enums/sms-template-locale.d.ts +133 -0
  86. package/dist/enums/sms-template-locale.js +135 -0
  87. package/dist/enums/sms-template-type.d.ts +6 -0
  88. package/dist/enums/sms-template-type.js +8 -0
  89. package/dist/enums/smtp-encryption.d.ts +5 -0
  90. package/dist/enums/smtp-encryption.js +7 -0
  91. package/dist/enums/storage-usage-range.d.ts +5 -0
  92. package/dist/enums/storage-usage-range.js +7 -0
  93. package/dist/enums/subscriptions/PricingModel.d.ts +11 -0
  94. package/dist/enums/subscriptions/PricingModel.js +12 -0
  95. package/dist/enums/subscriptions/SubscriptionBillingPeriod.d.ts +10 -0
  96. package/dist/enums/subscriptions/SubscriptionBillingPeriod.js +11 -0
  97. package/dist/enums/subscriptions/SubscriptionFeatureLimitType.d.ts +10 -0
  98. package/dist/enums/subscriptions/SubscriptionFeatureLimitType.js +13 -0
  99. package/dist/enums/subscriptions/SubscriptionPriceType.d.ts +7 -0
  100. package/dist/enums/subscriptions/SubscriptionPriceType.js +8 -0
  101. package/dist/enums/tenants/LinkedAccountStatus.d.ts +5 -0
  102. package/dist/enums/tenants/LinkedAccountStatus.js +7 -0
  103. package/dist/enums/tenants/TenantUserJoined.d.ts +6 -0
  104. package/dist/enums/tenants/TenantUserJoined.js +8 -0
  105. package/dist/enums/tenants/TenantUserStatus.d.ts +6 -0
  106. package/dist/enums/tenants/TenantUserStatus.js +8 -0
  107. package/dist/enums/tenants/TenantUserType.d.ts +5 -0
  108. package/dist/enums/tenants/TenantUserType.js +7 -0
  109. package/dist/enums/user-usage-range.d.ts +5 -0
  110. package/dist/enums/user-usage-range.js +7 -0
  111. package/dist/getAppcondaClient.d.ts +14 -0
  112. package/dist/getAppcondaClient.js +60 -0
  113. package/dist/getSDKForService.d.ts +22 -0
  114. package/dist/getSDKForService.js +72 -0
  115. package/dist/id.d.ts +20 -0
  116. package/dist/id.js +45 -0
  117. package/dist/index.d.ts +7 -0
  118. package/dist/index.js +6 -0
  119. package/dist/lib/errors.d.ts +70 -0
  120. package/dist/lib/errors.js +79 -0
  121. package/dist/lib/index.d.ts +0 -0
  122. package/dist/lib/index.js +1 -0
  123. package/dist/lib/types.d.ts +5 -0
  124. package/dist/lib/types.js +2 -0
  125. package/dist/models.d.ts +3272 -0
  126. package/dist/models.js +2 -0
  127. package/dist/modules/account/enums/authentication-factor.d.ts +6 -0
  128. package/dist/modules/account/enums/authentication-factor.js +8 -0
  129. package/dist/modules/account/enums/authenticator-type.d.ts +3 -0
  130. package/dist/modules/account/enums/authenticator-type.js +5 -0
  131. package/dist/modules/account/enums/o-auth-provider.d.ts +41 -0
  132. package/dist/modules/account/enums/o-auth-provider.js +43 -0
  133. package/dist/modules/account/index.d.ts +2 -0
  134. package/dist/modules/account/index.js +3 -0
  135. package/dist/modules/account/schema.d.ts +7 -0
  136. package/dist/modules/account/schema.js +8 -0
  137. package/dist/modules/account/service.d.ts +530 -0
  138. package/dist/modules/account/service.js +1263 -0
  139. package/dist/modules/account/types.d.ts +411 -0
  140. package/dist/modules/account/types.js +2 -0
  141. package/dist/modules/accounv1/index.d.ts +3 -0
  142. package/dist/modules/accounv1/index.js +4 -0
  143. package/dist/modules/accounv1/schema.d.ts +43 -0
  144. package/dist/modules/accounv1/schema.js +44 -0
  145. package/dist/modules/accounv1/service.d.ts +14 -0
  146. package/dist/modules/accounv1/service.js +28 -0
  147. package/dist/modules/accounv1/types.d.ts +14 -0
  148. package/dist/modules/accounv1/types.js +2 -0
  149. package/dist/modules/acl/service.d.ts +26 -0
  150. package/dist/modules/acl/service.js +27 -0
  151. package/dist/modules/agent/index.d.ts +3 -0
  152. package/dist/modules/agent/index.js +4 -0
  153. package/dist/modules/agent/schema.d.ts +20 -0
  154. package/dist/modules/agent/schema.js +21 -0
  155. package/dist/modules/agent/service.d.ts +12 -0
  156. package/dist/modules/agent/service.js +22 -0
  157. package/dist/modules/agent/types.d.ts +11 -0
  158. package/dist/modules/agent/types.js +2 -0
  159. package/dist/modules/ai/index.d.ts +1 -0
  160. package/dist/modules/ai/index.js +2 -0
  161. package/dist/modules/ai/node/index.d.ts +1 -0
  162. package/dist/modules/ai/node/index.js +2 -0
  163. package/dist/modules/ai/node/service.d.ts +5 -0
  164. package/dist/modules/ai/node/service.js +12 -0
  165. package/dist/modules/bpm/index.d.ts +3 -0
  166. package/dist/modules/bpm/index.js +4 -0
  167. package/dist/modules/bpm/schema.d.ts +18 -0
  168. package/dist/modules/bpm/schema.js +19 -0
  169. package/dist/modules/bpm/service.d.ts +11 -0
  170. package/dist/modules/bpm/service.js +20 -0
  171. package/dist/modules/bpm/types.d.ts +9 -0
  172. package/dist/modules/bpm/types.js +2 -0
  173. package/dist/modules/builder/index.d.ts +3 -0
  174. package/dist/modules/builder/index.js +4 -0
  175. package/dist/modules/builder/schema.d.ts +92 -0
  176. package/dist/modules/builder/schema.js +93 -0
  177. package/dist/modules/builder/service.d.ts +25 -0
  178. package/dist/modules/builder/service.js +61 -0
  179. package/dist/modules/builder/types.d.ts +100 -0
  180. package/dist/modules/builder/types.js +2 -0
  181. package/dist/modules/datasource/index.d.ts +3 -0
  182. package/dist/modules/datasource/index.js +4 -0
  183. package/dist/modules/datasource/schema.d.ts +55 -0
  184. package/dist/modules/datasource/schema.js +56 -0
  185. package/dist/modules/datasource/service.d.ts +19 -0
  186. package/dist/modules/datasource/service.js +43 -0
  187. package/dist/modules/datasource/types.d.ts +28 -0
  188. package/dist/modules/datasource/types.js +2 -0
  189. package/dist/modules/emploid/index.d.ts +3 -0
  190. package/dist/modules/emploid/index.js +4 -0
  191. package/dist/modules/emploid/schema.d.ts +1831 -0
  192. package/dist/modules/emploid/schema.js +1710 -0
  193. package/dist/modules/emploid/service.d.ts +336 -0
  194. package/dist/modules/emploid/service.js +998 -0
  195. package/dist/modules/emploid/types.d.ts +660 -0
  196. package/dist/modules/emploid/types.js +2 -0
  197. package/dist/modules/google/index.d.ts +3 -0
  198. package/dist/modules/google/index.js +4 -0
  199. package/dist/modules/google/schema.d.ts +13 -0
  200. package/dist/modules/google/schema.js +14 -0
  201. package/dist/modules/google/service.d.ts +10 -0
  202. package/dist/modules/google/service.js +16 -0
  203. package/dist/modules/google/types.d.ts +12 -0
  204. package/dist/modules/google/types.js +2 -0
  205. package/dist/modules/hooks/index.d.ts +2 -0
  206. package/dist/modules/hooks/index.js +3 -0
  207. package/dist/modules/hooks/lib/Hooks.d.ts +32 -0
  208. package/dist/modules/hooks/lib/Hooks.js +64 -0
  209. package/dist/modules/hooks/lib/jobs/index.d.ts +2 -0
  210. package/dist/modules/hooks/lib/jobs/index.js +3 -0
  211. package/dist/modules/hooks/lib/jobs/job1.d.ts +1 -0
  212. package/dist/modules/hooks/lib/jobs/job1.js +16 -0
  213. package/dist/modules/hooks/lib/jobs/log-job.d.ts +1 -0
  214. package/dist/modules/hooks/lib/jobs/log-job.js +9 -0
  215. package/dist/modules/hooks/lib/wait.d.ts +8 -0
  216. package/dist/modules/hooks/lib/wait.js +13 -0
  217. package/dist/modules/index.d.ts +18 -0
  218. package/dist/modules/index.js +19 -0
  219. package/dist/modules/mail/index.d.ts +3 -0
  220. package/dist/modules/mail/index.js +4 -0
  221. package/dist/modules/mail/schema.d.ts +6 -0
  222. package/dist/modules/mail/schema.js +7 -0
  223. package/dist/modules/mail/service.d.ts +8 -0
  224. package/dist/modules/mail/service.js +10 -0
  225. package/dist/modules/mail/types.d.ts +6 -0
  226. package/dist/modules/mail/types.js +2 -0
  227. package/dist/modules/notion/index.d.ts +3 -0
  228. package/dist/modules/notion/index.js +4 -0
  229. package/dist/modules/notion/schema.d.ts +13 -0
  230. package/dist/modules/notion/schema.js +14 -0
  231. package/dist/modules/notion/service.d.ts +10 -0
  232. package/dist/modules/notion/service.js +19 -0
  233. package/dist/modules/notion/types.d.ts +11 -0
  234. package/dist/modules/notion/types.js +2 -0
  235. package/dist/modules/organization/index.d.ts +3 -0
  236. package/dist/modules/organization/index.js +4 -0
  237. package/dist/modules/organization/schema.d.ts +65 -0
  238. package/dist/modules/organization/schema.js +56 -0
  239. package/dist/modules/organization/service.d.ts +20 -0
  240. package/dist/modules/organization/service.js +46 -0
  241. package/dist/modules/organization/types.d.ts +55 -0
  242. package/dist/modules/organization/types.js +2 -0
  243. package/dist/modules/scheduled-job/index.d.ts +5 -0
  244. package/dist/modules/scheduled-job/index.js +6 -0
  245. package/dist/modules/scheduled-job/lib/Schedules.d.ts +34 -0
  246. package/dist/modules/scheduled-job/lib/Schedules.js +65 -0
  247. package/dist/modules/scheduled-job/lib/jobs/index.d.ts +1 -0
  248. package/dist/modules/scheduled-job/lib/jobs/index.js +2 -0
  249. package/dist/modules/scheduled-job/lib/jobs/job1.d.ts +1 -0
  250. package/dist/modules/scheduled-job/lib/jobs/job1.js +10 -0
  251. package/dist/modules/scheduled-job/lib/wait.d.ts +8 -0
  252. package/dist/modules/scheduled-job/lib/wait.js +13 -0
  253. package/dist/modules/scheduled-job/schema.d.ts +39 -0
  254. package/dist/modules/scheduled-job/schema.js +40 -0
  255. package/dist/modules/scheduled-job/service.d.ts +20 -0
  256. package/dist/modules/scheduled-job/service.js +46 -0
  257. package/dist/modules/scheduled-job/types.d.ts +66 -0
  258. package/dist/modules/scheduled-job/types.js +2 -0
  259. package/dist/modules/scrapflow/index.d.ts +2 -0
  260. package/dist/modules/scrapflow/index.js +3 -0
  261. package/dist/modules/scrapflow/schema.d.ts +105 -0
  262. package/dist/modules/scrapflow/schema.js +106 -0
  263. package/dist/modules/scrapflow/service.d.ts +24 -0
  264. package/dist/modules/scrapflow/service.js +61 -0
  265. package/dist/modules/scrapflow/types.d.ts +0 -0
  266. package/dist/modules/scrapflow/types.js +1 -0
  267. package/dist/modules/task/index.d.ts +3 -0
  268. package/dist/modules/task/index.js +4 -0
  269. package/dist/modules/task/schema.d.ts +355 -0
  270. package/dist/modules/task/schema.js +371 -0
  271. package/dist/modules/task/service.d.ts +69 -0
  272. package/dist/modules/task/service.js +193 -0
  273. package/dist/modules/task/types.d.ts +293 -0
  274. package/dist/modules/task/types.js +37 -0
  275. package/dist/modules/tenant/index.d.ts +2 -0
  276. package/dist/modules/tenant/index.js +3 -0
  277. package/dist/modules/tenant/schema.d.ts +26 -0
  278. package/dist/modules/tenant/schema.js +28 -0
  279. package/dist/modules/tenant/service.d.ts +14 -0
  280. package/dist/modules/tenant/service.js +28 -0
  281. package/dist/modules/tenant/tenant.d.ts +32 -0
  282. package/dist/modules/tenant/tenant.js +125 -0
  283. package/dist/modules/tenant/types.d.ts +20 -0
  284. package/dist/modules/tenant/types.js +2 -0
  285. package/dist/modules/waitlist/index.d.ts +3 -0
  286. package/dist/modules/waitlist/index.js +4 -0
  287. package/dist/modules/waitlist/schema.d.ts +17 -0
  288. package/dist/modules/waitlist/schema.js +18 -0
  289. package/dist/modules/waitlist/service.d.ts +13 -0
  290. package/dist/modules/waitlist/service.js +28 -0
  291. package/dist/modules/waitlist/types.d.ts +14 -0
  292. package/dist/modules/waitlist/types.js +2 -0
  293. package/dist/permission.d.ts +43 -0
  294. package/dist/permission.js +54 -0
  295. package/dist/query.d.ts +194 -0
  296. package/dist/query.js +204 -0
  297. package/dist/role.d.ts +70 -0
  298. package/dist/role.js +94 -0
  299. package/dist/service-client.d.ts +10 -0
  300. package/dist/service-client.js +31 -0
  301. package/dist/service.d.ts +11 -0
  302. package/dist/service.js +23 -0
  303. package/dist/services/applets.d.ts +9 -0
  304. package/dist/services/applets.js +40 -0
  305. package/dist/services/avatars.d.ts +115 -0
  306. package/dist/services/avatars.js +251 -0
  307. package/dist/services/chat-flow.d.ts +7 -0
  308. package/dist/services/chat-flow.js +26 -0
  309. package/dist/services/community.d.ts +19 -0
  310. package/dist/services/community.js +69 -0
  311. package/dist/services/configuration.d.ts +5 -0
  312. package/dist/services/configuration.js +11 -0
  313. package/dist/services/databases.d.ts +613 -0
  314. package/dist/services/databases.js +1736 -0
  315. package/dist/services/functions.d.ts +319 -0
  316. package/dist/services/functions.js +810 -0
  317. package/dist/services/graphql.d.ts +25 -0
  318. package/dist/services/graphql.js +57 -0
  319. package/dist/services/health.d.ts +231 -0
  320. package/dist/services/health.js +463 -0
  321. package/dist/services/locale.d.ts +80 -0
  322. package/dist/services/locale.js +144 -0
  323. package/dist/services/messaging.d.ts +685 -0
  324. package/dist/services/messaging.js +1920 -0
  325. package/dist/services/permissions.d.ts +20 -0
  326. package/dist/services/permissions.js +90 -0
  327. package/dist/services/pricing.d.ts +15 -0
  328. package/dist/services/pricing.js +21 -0
  329. package/dist/services/projects.d.ts +542 -0
  330. package/dist/services/projects.js +1526 -0
  331. package/dist/services/roles.d.ts +19 -0
  332. package/dist/services/roles.js +72 -0
  333. package/dist/services/schema.d.ts +17 -0
  334. package/dist/services/schema.js +48 -0
  335. package/dist/services/storage.d.ts +189 -0
  336. package/dist/services/storage.js +474 -0
  337. package/dist/services/subscription.d.ts +15 -0
  338. package/dist/services/subscription.js +30 -0
  339. package/dist/services/teams.d.ts +167 -0
  340. package/dist/services/teams.js +395 -0
  341. package/dist/services/tenant-subscription.d.ts +12 -0
  342. package/dist/services/tenant-subscription.js +52 -0
  343. package/dist/services/users.d.ts +499 -0
  344. package/dist/services/users.js +1283 -0
  345. package/package.json +1 -1
  346. package/src/modules/emploid/schema.ts +19 -0
  347. package/src/modules/emploid/service.ts +22 -1
  348. package/src/modules/emploid/types.ts +10 -0
@@ -0,0 +1,998 @@
1
+ import { ServiceClient } from "../../service-client";
2
+ export class EmploidService extends ServiceClient {
3
+ getServiceName() {
4
+ return 'com.appconda.service.emploid';
5
+ }
6
+ isHttpUrl(value) {
7
+ return /^https?:\/\//i.test(value);
8
+ }
9
+ normalizeStoragePath(pathLike) {
10
+ const normalized = String(pathLike || "").trim();
11
+ if (!normalized) {
12
+ return "";
13
+ }
14
+ if (this.isHttpUrl(normalized)) {
15
+ return normalized;
16
+ }
17
+ return normalized.startsWith("/") ? normalized : `/${normalized}`;
18
+ }
19
+ resolveEnvEndpoint() {
20
+ const envCandidates = [
21
+ typeof process !== "undefined" ? process?.env?.APPCONDA_ENDPOINT : "",
22
+ typeof process !== "undefined" ? process?.env?.NEXT_PUBLIC_APPCONDA_ENDPOINT : "",
23
+ typeof process !== "undefined" ? process?.env?._APP_APPCONDA_ENDPOINT : "",
24
+ ];
25
+ for (const candidate of envCandidates) {
26
+ const normalized = String(candidate || "").trim().replace(/\/+$/, "");
27
+ if (this.isHttpUrl(normalized)) {
28
+ return normalized;
29
+ }
30
+ }
31
+ return "";
32
+ }
33
+ resolveStorageViewUrl(storagePath) {
34
+ const normalizedPath = this.normalizeStoragePath(storagePath);
35
+ if (!normalizedPath) {
36
+ return "";
37
+ }
38
+ if (this.isHttpUrl(normalizedPath)) {
39
+ return normalizedPath;
40
+ }
41
+ const endpoint = String(this.client.config.endpoint || "").trim().replace(/\/+$/, "");
42
+ if (this.isHttpUrl(endpoint)) {
43
+ return `${endpoint}${normalizedPath}`;
44
+ }
45
+ if (typeof window !== "undefined") {
46
+ const protocol = window?.location?.protocol || "";
47
+ if (protocol && protocol !== "file:") {
48
+ const origin = String(window?.location?.origin || "").replace(/\/+$/, "");
49
+ if (origin) {
50
+ const normalizedEndpoint = endpoint
51
+ ? (endpoint.startsWith("/") ? endpoint : `/${endpoint}`)
52
+ : "";
53
+ return `${origin}${normalizedEndpoint}${normalizedPath}`;
54
+ }
55
+ }
56
+ }
57
+ const envEndpoint = this.resolveEnvEndpoint();
58
+ if (envEndpoint) {
59
+ return `${envEndpoint}${normalizedPath}`;
60
+ }
61
+ return normalizedPath;
62
+ }
63
+ async CreateEmploid(payload) {
64
+ return await this.actionCall('emploid', 'CreateEmploid', payload);
65
+ }
66
+ async UpdateEmploid(payload) {
67
+ return await this.actionCall('emploid', 'UpdateEmploid', payload);
68
+ }
69
+ async DeleteEmploid(payload) {
70
+ return await this.actionCall('emploid', 'DeleteEmploid', payload);
71
+ }
72
+ async PublishEmploid(payload) {
73
+ return await this.actionCall('emploid', 'PublishEmploid', payload);
74
+ }
75
+ async ListEmploids(payload) {
76
+ return await this.actionCall('emploid', 'ListEmploids', payload);
77
+ }
78
+ async ListEmploidsPaginated(payload) {
79
+ return await this.actionCall('emploid', 'ListEmploidsPaginated', payload);
80
+ }
81
+ async CreateInstruction(payload) {
82
+ return await this.actionCall('emploid', 'CreateInstruction', payload);
83
+ }
84
+ async ListInstructions(payload) {
85
+ return await this.actionCall('emploid', 'ListInstructions', payload);
86
+ }
87
+ async UpdateInstruction(payload) {
88
+ return await this.actionCall('emploid', 'UpdateInstruction', payload);
89
+ }
90
+ async DeleteInstruction(payload) {
91
+ return await this.actionCall('emploid', 'DeleteInstruction', payload);
92
+ }
93
+ async CreateConstraint(payload) {
94
+ return await this.actionCall('emploid', 'CreateConstraint', payload);
95
+ }
96
+ async ListConstraints(payload) {
97
+ return await this.actionCall('emploid', 'ListConstraints', payload);
98
+ }
99
+ async UpdateConstraint(payload) {
100
+ return await this.actionCall('emploid', 'UpdateConstraint', payload);
101
+ }
102
+ async DeleteConstraint(payload) {
103
+ return await this.actionCall('emploid', 'DeleteConstraint', payload);
104
+ }
105
+ async ListScopes(payload) {
106
+ return await this.actionCall('emploid', 'ListScopes', payload);
107
+ }
108
+ async GetScopeByType(payload) {
109
+ return await this.actionCall('emploid', 'GetScopeByType', payload);
110
+ }
111
+ async CreateScope(payload) {
112
+ return await this.actionCall('emploid', 'CreateScope', payload);
113
+ }
114
+ async UpdateScope(payload) {
115
+ return await this.actionCall('emploid', 'UpdateScope', payload);
116
+ }
117
+ async DeleteScope(payload) {
118
+ return await this.actionCall('emploid', 'DeleteScope', payload);
119
+ }
120
+ async UploadScopeFile(payload) {
121
+ const result = await this.actionCall("scope", "UploadFile", payload);
122
+ const storagePath = this.normalizeStoragePath(String(result?.path || result?.filePath || result?.url || ""));
123
+ const resolvedUrl = this.resolveStorageViewUrl(storagePath);
124
+ return {
125
+ ...result,
126
+ fileId: String(result?.fileId || result?.id || payload.attachmentId || ""),
127
+ path: storagePath,
128
+ filePath: resolvedUrl || storagePath,
129
+ url: resolvedUrl || storagePath,
130
+ };
131
+ }
132
+ async ResolveScopeFileView(payload) {
133
+ const result = await this.actionCall("scope", "ResolveScopeFileView", payload);
134
+ const storagePath = this.normalizeStoragePath(String(result?.path || result?.filePath || result?.url || ""));
135
+ const resolvedUrl = this.resolveStorageViewUrl(storagePath);
136
+ return {
137
+ ...result,
138
+ fileId: String(result?.fileId || payload.fileId || ""),
139
+ path: storagePath,
140
+ filePath: resolvedUrl || storagePath,
141
+ url: resolvedUrl || storagePath,
142
+ };
143
+ }
144
+ async CreateOccupation(payload) {
145
+ return await this.actionCall('occupation', 'CreateOccupation', payload);
146
+ }
147
+ async UpdateOccupation(payload) {
148
+ return await this.actionCall('occupation', 'UpdateOccupation', payload);
149
+ }
150
+ async DeleteOccupation(payload) {
151
+ return await this.actionCall('occupation', 'DeleteOccupation', payload);
152
+ }
153
+ async ListOccupations(payload) {
154
+ return await this.actionCall('occupation', 'ListOccupations', payload);
155
+ }
156
+ async PublishDomain(payload) {
157
+ return await this.actionCall('occupation', 'PublishDomain', payload);
158
+ }
159
+ async CreateDomainTopic(payload) {
160
+ return await this.actionCall('occupation', 'CreateDomainTopic', payload);
161
+ }
162
+ async UpdateDomainTopic(payload) {
163
+ return await this.actionCall('occupation', 'UpdateDomainTopic', payload);
164
+ }
165
+ async DeleteDomainTopic(payload) {
166
+ return await this.actionCall('occupation', 'DeleteDomainTopic', payload);
167
+ }
168
+ async ListDomainTopics(payload) {
169
+ return await this.actionCall('occupation', 'ListDomainTopics', payload);
170
+ }
171
+ async CreateJobDefinition(payload) {
172
+ return await this.actionCall('emploid', 'CreateJobDefinition', payload);
173
+ }
174
+ async UpdateJobDefinition(payload) {
175
+ return await this.actionCall('emploid', 'UpdateJobDefinition', payload);
176
+ }
177
+ async DeleteJobDefinition(payload) {
178
+ return await this.actionCall('emploid', 'DeleteJobDefinition', payload);
179
+ }
180
+ async ListJobDefinitions(payload) {
181
+ return await this.actionCall('emploid', 'ListJobDefinitions', payload);
182
+ }
183
+ async CreateCompetency(payload) {
184
+ return await this.actionCall('emploid', 'CreateCompetency', payload);
185
+ }
186
+ async UpdateCompetency(payload) {
187
+ return await this.actionCall('emploid', 'UpdateCompetency', payload);
188
+ }
189
+ async DeleteCompetency(payload) {
190
+ return await this.actionCall('emploid', 'DeleteCompetency', payload);
191
+ }
192
+ async ListCompetencies(payload) {
193
+ return await this.actionCall('emploid', 'ListCompetencies', payload);
194
+ }
195
+ async CreateTaskTemplate(payload) {
196
+ return await this.actionCall('emploid', 'CreateTaskTemplate', payload);
197
+ }
198
+ async UpdateTaskTemplate(payload) {
199
+ return await this.actionCall('emploid', 'UpdateTaskTemplate', payload);
200
+ }
201
+ async DeleteTaskTemplate(payload) {
202
+ return await this.actionCall('emploid', 'DeleteTaskTemplate', payload);
203
+ }
204
+ async ListTaskTemplates(payload) {
205
+ return await this.actionCall('emploid', 'ListTaskTemplates', payload);
206
+ }
207
+ async CreateAgentFlow(payload) {
208
+ return await this.actionCall('agent-flow', 'CreateAgentFlow', payload);
209
+ }
210
+ async DeleteAgentFlow(payload) {
211
+ return await this.actionCall('agent-flow', 'DeleteAgentFlow', payload);
212
+ }
213
+ async DuplicateAgentFlow(payload) {
214
+ return await this.actionCall('agent-flow', 'DuplicateAgentFlow', payload);
215
+ }
216
+ async ChangeAgentflowProject(payload) {
217
+ return await this.actionCall('agent-flow', 'ChangeAgentflowProject', payload);
218
+ }
219
+ async UpdateAgentFlow(payload) {
220
+ return await this.actionCall('agent-flow', 'UpdateAgentFlow', payload);
221
+ }
222
+ async ListAgentFlows(payload) {
223
+ return await this.actionCall('agent-flow', 'ListAgentFlows', payload);
224
+ }
225
+ async CreateAgentFlowFolder(payload) {
226
+ return await this.actionCall('agent-flow', 'CreateAgentFlowFolder', payload);
227
+ }
228
+ async UpdateAgentFlowFolder(payload) {
229
+ return await this.actionCall('agent-flow', 'UpdateAgentFlowFolder', payload);
230
+ }
231
+ async DeleteAgentFlowFolder(payload) {
232
+ return await this.actionCall('agent-flow', 'DeleteAgentFlowFolder', payload);
233
+ }
234
+ async ListAgentFlowFolders(payload) {
235
+ return await this.actionCall('agent-flow', 'ListAgentFlowFolders', payload);
236
+ }
237
+ async GetPrivateAgentFlowFolder(payload) {
238
+ return await this.actionCall('agent-flow', 'GetPrivateAgentFlowFolder', payload);
239
+ }
240
+ async ListDriveItems(payload) {
241
+ return await this.actionCall("drive", "ListDriveItems", payload);
242
+ }
243
+ async ListDriveTree(payload) {
244
+ return await this.actionCall("drive", "ListDriveTree", payload);
245
+ }
246
+ async SearchDriveItems(payload) {
247
+ return await this.actionCall("drive", "SearchDriveItems", payload);
248
+ }
249
+ async CreateDriveFolder(payload) {
250
+ return await this.actionCall("drive", "CreateDriveFolder", payload);
251
+ }
252
+ async PrepareDriveUpload(payload) {
253
+ return await this.actionCall("drive", "PrepareDriveUpload", payload);
254
+ }
255
+ async RenameDriveItem(payload) {
256
+ return await this.actionCall("drive", "RenameDriveItem", payload);
257
+ }
258
+ async MoveDriveItem(payload) {
259
+ return await this.actionCall("drive", "MoveDriveItem", payload);
260
+ }
261
+ async GetDriveDeleteImpact(payload) {
262
+ return await this.actionCall("drive", "GetDriveDeleteImpact", payload);
263
+ }
264
+ async DeleteDriveItem(payload) {
265
+ return await this.actionCall("drive", "DeleteDriveItem", payload);
266
+ }
267
+ async ResolveDriveDownload(payload) {
268
+ const result = await this.actionCall("drive", "ResolveDriveDownload", payload);
269
+ const storagePath = this.normalizeStoragePath(String(result?.path || result?.filePath || result?.url || ""));
270
+ const resolvedUrl = this.resolveStorageViewUrl(storagePath);
271
+ return {
272
+ ...result,
273
+ fileId: String(result?.itemId || payload.itemId || ""),
274
+ path: storagePath,
275
+ filePath: resolvedUrl || storagePath,
276
+ url: resolvedUrl || storagePath,
277
+ };
278
+ }
279
+ async ListDriveRoots(payload) {
280
+ return await this.actionCall("drive", "ListDriveRoots", payload);
281
+ }
282
+ async EnsureDriveProviderCredential(payload) {
283
+ return await this.actionCall("drive", "EnsureDriveProviderCredential", payload);
284
+ }
285
+ async ListDriveProviderFolders(payload) {
286
+ return await this.actionCall("drive", "ListDriveProviderFolders", payload);
287
+ }
288
+ async CreateDriveRoot(payload) {
289
+ return await this.actionCall("drive", "CreateDriveRoot", payload);
290
+ }
291
+ async DeleteDriveRoot(payload) {
292
+ return await this.actionCall("drive", "DeleteDriveRoot", payload);
293
+ }
294
+ async ListDriveRootItems(payload) {
295
+ return await this.actionCall("drive", "ListDriveRootItems", payload);
296
+ }
297
+ async ListDriveRootTree(payload) {
298
+ return await this.actionCall("drive", "ListDriveRootTree", payload);
299
+ }
300
+ async SearchDriveRootItems(payload) {
301
+ return await this.actionCall("drive", "SearchDriveRootItems", payload);
302
+ }
303
+ async CreateDriveRootFolder(payload) {
304
+ return await this.actionCall("drive", "CreateDriveRootFolder", payload);
305
+ }
306
+ async UploadDriveRootFiles(payload) {
307
+ return await this.actionCall("drive", "UploadDriveRootFiles", payload);
308
+ }
309
+ async RenameDriveRootItem(payload) {
310
+ return await this.actionCall("drive", "RenameDriveRootItem", payload);
311
+ }
312
+ async MoveDriveRootItem(payload) {
313
+ return await this.actionCall("drive", "MoveDriveRootItem", payload);
314
+ }
315
+ async GetDriveRootDeleteImpact(payload) {
316
+ return await this.actionCall("drive", "GetDriveRootDeleteImpact", payload);
317
+ }
318
+ async DeleteDriveRootItem(payload) {
319
+ return await this.actionCall("drive", "DeleteDriveRootItem", payload);
320
+ }
321
+ async ReadDriveRootFileContent(payload) {
322
+ return await this.actionCall("drive", "ReadDriveRootFileContent", payload);
323
+ }
324
+ async ResolveDriveRootDownload(payload) {
325
+ const result = await this.actionCall("drive", "ResolveDriveRootDownload", payload);
326
+ const rawUrl = String(result?.url || "");
327
+ const normalizedUrl = rawUrl.startsWith("data:") ? rawUrl : this.normalizeStoragePath(rawUrl);
328
+ const resolvedUrl = rawUrl.startsWith("data:")
329
+ ? rawUrl
330
+ : (this.resolveStorageViewUrl(normalizedUrl) || normalizedUrl);
331
+ return {
332
+ ...result,
333
+ fileId: String(result?.itemId || payload.itemId || ""),
334
+ path: normalizedUrl,
335
+ filePath: resolvedUrl || normalizedUrl,
336
+ url: resolvedUrl || normalizedUrl,
337
+ };
338
+ }
339
+ async CreateExtension(payload) {
340
+ return await this.actionCall('extension', 'CreateExtension', payload);
341
+ }
342
+ async UpdateExtension(payload) {
343
+ return await this.actionCall('extension', 'UpdateExtension', payload);
344
+ }
345
+ async DeleteExtension(payload) {
346
+ return await this.actionCall('extension', 'DeleteExtension', payload);
347
+ }
348
+ async ListExtensions(payload) {
349
+ return await this.actionCall('extension', 'ListExtensions', payload);
350
+ }
351
+ // -----------------Assistant-----------------
352
+ async CreateAssistant(payload) {
353
+ return await this.actionCall('assistant', 'CreateAssistant', payload);
354
+ }
355
+ async UpdateAssistant(payload) {
356
+ return await this.actionCall('assistant', 'UpdateAssistant', payload);
357
+ }
358
+ async DeleteAssistant(payload) {
359
+ return await this.actionCall('assistant', 'DeleteAssistant', payload);
360
+ }
361
+ async ListAssistants(payload) {
362
+ return await this.actionCall('assistant', 'ListAssistants', payload);
363
+ }
364
+ async CreateAssistantInstruction(payload) {
365
+ return await this.actionCall('assistant', 'CreateAssistantInstruction', payload);
366
+ }
367
+ async ListAssistantInstructions(payload) {
368
+ return await this.actionCall('assistant', 'ListAssistantInstructions', payload);
369
+ }
370
+ async CreateAssistantConstraint(payload) {
371
+ return await this.actionCall('assistant', 'CreateAssistantConstraint', payload);
372
+ }
373
+ async ListAssistantConstraints(payload) {
374
+ return await this.actionCall('assistant', 'ListAssistantConstraints', payload);
375
+ }
376
+ async CreateAssistantDatasource(payload) {
377
+ return await this.actionCall('assistant', 'CreateAssistantDatasource', payload);
378
+ }
379
+ async UpdateAssistantDatasource(payload) {
380
+ return await this.actionCall('assistant', 'UpdateAssistantDatasource', payload);
381
+ }
382
+ async DeleteAssistantDatasource(payload) {
383
+ return await this.actionCall('assistant', 'DeleteAssistantDatasource', payload);
384
+ }
385
+ async ListAssistantDatasources(payload) {
386
+ return await this.actionCall('assistant', 'ListAssistantDatasources', payload);
387
+ }
388
+ async CreateAssistantSkill(payload) {
389
+ return await this.actionCall('assistant', 'CreateAssistantSkill', payload);
390
+ }
391
+ async UpdateAssistantSkill(payload) {
392
+ return await this.actionCall('assistant', 'UpdateAssistantSkill', payload);
393
+ }
394
+ async DeleteAssistantSkill(payload) {
395
+ return await this.actionCall('assistant', 'DeleteAssistantSkill', payload);
396
+ }
397
+ async ListAssistantSkills(payload) {
398
+ return await this.actionCall('assistant', 'ListAssistantSkills', payload);
399
+ }
400
+ async CreateAssistantChannel(payload) {
401
+ return await this.actionCall('assistant', 'CreateAssistantChannel', payload);
402
+ }
403
+ async UpdateAssistantChannel(payload) {
404
+ return await this.actionCall('assistant', 'UpdateAssistantChannel', payload);
405
+ }
406
+ async DeleteAssistantChannel(payload) {
407
+ return await this.actionCall('assistant', 'DeleteAssistantChannel', payload);
408
+ }
409
+ async ListAssistantChannels(payload) {
410
+ return await this.actionCall('assistant', 'ListAssistantChannels', payload);
411
+ }
412
+ //---------------------------------------
413
+ //-----------------Datasources--------------
414
+ async CreateDatasource(payload) {
415
+ return await this.actionCall('data-source', 'CreateDatasource', payload);
416
+ }
417
+ async UpdateDatasource(payload) {
418
+ return await this.actionCall('data-source', 'UpdateDatasource', payload);
419
+ }
420
+ async DeleteDatasource(payload) {
421
+ return await this.actionCall('data-ource', 'DeleteDatasource', payload);
422
+ }
423
+ async ListDatasources(payload) {
424
+ return await this.actionCall('data-source', 'ListDatasources', payload);
425
+ }
426
+ //-----------------------------------------
427
+ //-----------------------Skills----------------
428
+ async CreateSkill(payload) {
429
+ return await this.actionCall('skill', 'CreateSkill', payload);
430
+ }
431
+ async ListSkills(payload) {
432
+ return await this.actionCall('skill', 'ListSkills', payload);
433
+ }
434
+ async UpdateSkill(payload) {
435
+ return await this.actionCall('skill', 'UpdateSkill', payload);
436
+ }
437
+ async DeleteSkill(payload) {
438
+ return await this.actionCall('skill', 'DeleteSkill', payload);
439
+ }
440
+ //--------------------------------------------
441
+ //-----------------------Channels----------------
442
+ async CreateChannel(payload) {
443
+ return await this.actionCall('channel', 'CreateChannel', payload);
444
+ }
445
+ async ListChannels(payload) {
446
+ return await this.actionCall('channel', 'ListChannels', payload);
447
+ }
448
+ async UpdateChannel(payload) {
449
+ return await this.actionCall('channel', 'UpdateChannel', payload);
450
+ }
451
+ async DeleteChannel(payload) {
452
+ return await this.actionCall('channel', 'DeleteChannel', payload);
453
+ }
454
+ //--------------------------------------------
455
+ //-----------------------Knowledge----------------
456
+ async CreateKnowledge(payload) {
457
+ return await this.actionCall('knowledge', 'CreateKnowledge', payload);
458
+ }
459
+ async ListKnowledges(payload) {
460
+ return await this.actionCall('knowledge', 'ListKnowledges', payload);
461
+ }
462
+ async UpdateKnowledge(payload) {
463
+ return await this.actionCall('knowledge', 'UpdateKnowledge', payload);
464
+ }
465
+ async DeleteKnowledge(payload) {
466
+ return await this.actionCall('knowledge', 'DeleteKnowledge', payload);
467
+ }
468
+ //----------------WORKER----------------------------
469
+ async CreateWorker(payload) {
470
+ return await this.actionCall('worker', 'CreateWorker', payload);
471
+ }
472
+ async UpdateWorker(payload) {
473
+ return await this.actionCall('worker', 'UpdateWorker', payload);
474
+ }
475
+ async DeleteWorker(payload) {
476
+ return await this.actionCall('worker', 'DeleteWorker', payload);
477
+ }
478
+ async PublishWorkerToMarketStore(payload) {
479
+ return await this.actionCall('market-store', 'PublishWorkerToMarketStore', payload);
480
+ }
481
+ async ListWorkers(payload) {
482
+ return await this.actionCall('worker', 'ListWorkers', payload);
483
+ }
484
+ async CreateWorkerTopic(payload) {
485
+ return await this.actionCall('worker', 'CreateWorkerTopic', payload);
486
+ }
487
+ async UpdateWorkerTopic(payload) {
488
+ return await this.actionCall('worker', 'UpdateWorkerTopic', payload);
489
+ }
490
+ async DeleteWorkerTopic(payload) {
491
+ return await this.actionCall('worker', 'DeleteWorkerTopic', payload);
492
+ }
493
+ async ListWorkerTopics(payload) {
494
+ return await this.actionCall('worker', 'ListWorkerTopics', payload);
495
+ }
496
+ async ListMarketStoreItems(payload) {
497
+ return await this.actionCall('market-store', 'ListMarketStoreItems', payload);
498
+ }
499
+ async GetMarketStoreItem(payload) {
500
+ return await this.actionCall('market-store', 'GetMarketStoreItem', payload);
501
+ }
502
+ //--------------------------------------------
503
+ //--------------------Topics-------------------
504
+ async CreateTopic(payload) {
505
+ return await this.actionCall('topic', 'CreateTopic', payload);
506
+ }
507
+ async UpdateTopic(payload) {
508
+ return await this.actionCall('topic', 'UpdateTopic', payload);
509
+ }
510
+ async DeleteTopic(payload) {
511
+ return await this.actionCall('topic', 'DeleteTopic', payload);
512
+ }
513
+ async ListTopics(payload) {
514
+ return await this.actionCall('topic', 'ListTopics', payload);
515
+ }
516
+ async EnhanceTopic(payload) {
517
+ return await this.actionCall('topic', 'EnhanceTopic', payload);
518
+ }
519
+ //---------------------------------------------
520
+ async CreateInput(payload) {
521
+ return await this.actionCall('input-output', 'CreateInput', payload);
522
+ }
523
+ async UpdateInput(payload) {
524
+ return await this.actionCall('input-output', 'UpdateInput', payload);
525
+ }
526
+ async DeleteInput(payload) {
527
+ return await this.actionCall('input-output', 'DeleteInput', payload);
528
+ }
529
+ async ListInputs(payload) {
530
+ return await this.actionCall('input-output', 'ListInputs', payload);
531
+ }
532
+ async CreateTeam(payload) {
533
+ return await this.actionCall('team', 'CreateTeam', payload);
534
+ }
535
+ async ListTeams(payload) {
536
+ return await this.actionCall('team', 'ListTeams', payload);
537
+ }
538
+ async UpdateTeam(payload) {
539
+ return await this.actionCall('team', 'UpdateTeam', payload);
540
+ }
541
+ async DeleteTeam(payload) {
542
+ return await this.actionCall('team', 'DeleteTeam', payload);
543
+ }
544
+ async SaveChat(payload) {
545
+ return await this.actionCall('chat', 'SaveChat', payload);
546
+ }
547
+ async DeleteChatById(payload) {
548
+ return await this.actionCall('chat', 'DeleteChatById', payload);
549
+ }
550
+ async GetChatById(payload) {
551
+ return await this.actionCall('chat', 'GetChatById', payload);
552
+ }
553
+ async GetChatsByUserId(payload) {
554
+ return await this.actionCall('chat', 'GetChatsByUserId', payload);
555
+ }
556
+ async SaveMessages(payload) {
557
+ return await this.actionCall('chat', 'SaveMessages', payload);
558
+ }
559
+ async GetMessagesByChatId(payload) {
560
+ return await this.actionCall('chat', 'GetMessagesByChatId', payload);
561
+ }
562
+ async GetMessageById(payload) {
563
+ return await this.actionCall('chat', 'GetMessageById', payload);
564
+ }
565
+ async VoteMessage(payload) {
566
+ return await this.actionCall('chat', 'VoteMessage', payload);
567
+ }
568
+ async GetVotesByChatId(payload) {
569
+ return await this.actionCall('chat', 'GetVotesByChatId', payload);
570
+ }
571
+ async DeleteDocumentsByIdAfterTimestamp(payload) {
572
+ return await this.actionCall('chat', 'DeleteDocumentsByIdAfterTimestamp', payload);
573
+ }
574
+ async SaveSuggestions(payload) {
575
+ return await this.actionCall('chat', 'SaveSuggestions', payload);
576
+ }
577
+ async GetSuggestionsByDocumentId(payload) {
578
+ return await this.actionCall('chat', 'GetSuggestionsByDocumentId', payload);
579
+ }
580
+ async DeleteMessagesByChatIdAfterTimestamp(payload) {
581
+ return await this.actionCall('chat', 'DeleteMessagesByChatIdAfterTimestamp', payload);
582
+ }
583
+ async UpdateChatVisiblityById(payload) {
584
+ return await this.actionCall('chat', 'UpdateChatVisiblityById', payload);
585
+ }
586
+ async UpdateChatLastContextById(payload) {
587
+ return await this.actionCall('chat', 'UpdateChatLastContextById', payload);
588
+ }
589
+ async GetMessageCountByUserId(payload) {
590
+ return await this.actionCall('chat', 'GetMessageCountByUserId', payload);
591
+ }
592
+ async CreateStreamId(payload) {
593
+ return await this.actionCall('chat', 'CreateStreamId', payload);
594
+ }
595
+ async GetStreamIdsByChatId(payload) {
596
+ return await this.actionCall('chat', 'GetStreamIdsByChatId', payload);
597
+ }
598
+ async SaveDocument(payload) {
599
+ return await this.actionCall('chat', 'SaveDocument', payload);
600
+ }
601
+ async GetDocumentById(payload) {
602
+ return await this.actionCall('chat', 'GetDocumentById', payload);
603
+ }
604
+ async GetDocumentsById(payload) {
605
+ return await this.actionCall('chat', 'GetDocumentsById', payload);
606
+ }
607
+ async CreateCommand(payload) {
608
+ /* debugger
609
+ if ( typeof payload.inputs === 'object' ) {
610
+ payload.inputs = JSON.stringify(payload.inputs) as any;
611
+ } */
612
+ return await this.actionCall('command', 'CreateCommand', payload);
613
+ }
614
+ async ListCommands(payload) {
615
+ return await this.actionCall('command', 'ListCommands', payload);
616
+ }
617
+ async UpdateCommand(payload) {
618
+ return await this.actionCall('command', 'UpdateCommand', payload);
619
+ }
620
+ async DeleteCommand(payload) {
621
+ return await this.actionCall('command', 'DeleteCommand', payload);
622
+ }
623
+ //------------------Collections-------------------
624
+ async CreateDataModel(payload) {
625
+ return await this.actionCall("collection", "CreateDataModel", payload);
626
+ }
627
+ async UpdateDataModel(payload) {
628
+ return await this.actionCall("collection", "UpdateDataModel", payload);
629
+ }
630
+ async DeleteDataModel(payload) {
631
+ return await this.actionCall("collection", "DeleteDataModel", payload);
632
+ }
633
+ async GetDataModelById(payload) {
634
+ return await this.actionCall("collection", "GetDataModelById", payload);
635
+ }
636
+ async ExportDataModel(payload) {
637
+ return await this.actionCall("collection", "ExportDataModel", payload);
638
+ }
639
+ async ImportDataModel(payload) {
640
+ return await this.actionCall("collection", "ImportDataModel", payload);
641
+ }
642
+ async ListDataModels(payload) {
643
+ return await this.actionCall("collection", "ListDataModels", payload);
644
+ }
645
+ async RestoreDataModel(payload) {
646
+ return await this.actionCall("collection", "RestoreDataModel", payload);
647
+ }
648
+ async HardDeleteDataModel(payload) {
649
+ return await this.actionCall("collection", "HardDeleteDataModel", payload);
650
+ }
651
+ async CreateCollection(payload) {
652
+ return await this.actionCall("collection", "CreateCollection", payload);
653
+ }
654
+ async ListCollections(payload) {
655
+ return await this.actionCall("collection", "ListCollections", payload);
656
+ }
657
+ async GetCollectionById(payload) {
658
+ return await this.actionCall("collection", "GetCollectionById", payload);
659
+ }
660
+ async CreateRecord(payload) {
661
+ return await this.actionCall("collection", "CreateRecord", payload);
662
+ }
663
+ async UploadCollectionFile(payload) {
664
+ const result = await this.actionCall("collection", "UploadCollectionFile", payload);
665
+ const storagePath = this.normalizeStoragePath(String(result?.path || result?.filePath || result?.url || ""));
666
+ const resolvedUrl = this.resolveStorageViewUrl(storagePath);
667
+ return {
668
+ ...result,
669
+ fileId: String(result?.itemId || result?.fileId || result?.id || payload.itemId || ""),
670
+ path: storagePath,
671
+ filePath: resolvedUrl || storagePath,
672
+ url: resolvedUrl || storagePath,
673
+ };
674
+ }
675
+ async ResolveCollectionFileView(payload) {
676
+ const result = await this.actionCall("collection", "ResolveCollectionFileView", payload);
677
+ const storagePath = this.normalizeStoragePath(String(result?.path || result?.filePath || result?.url || ""));
678
+ const resolvedUrl = this.resolveStorageViewUrl(storagePath);
679
+ return {
680
+ ...result,
681
+ fileId: String(result?.fileId || result?.itemId || payload.itemId || ""),
682
+ path: storagePath,
683
+ filePath: resolvedUrl || storagePath,
684
+ url: resolvedUrl || storagePath,
685
+ };
686
+ }
687
+ async GetRecordById(payload) {
688
+ return await this.actionCall("collection", "GetRecordById", payload);
689
+ }
690
+ async ListRecords(payload) {
691
+ return await this.actionCall("collection", "ListRecords", payload);
692
+ }
693
+ async UpdateRecord(payload) {
694
+ return await this.actionCall("collection", "UpdateRecord", payload);
695
+ }
696
+ async DeleteRecord(payload) {
697
+ return await this.actionCall("collection", "DeleteRecord", payload);
698
+ }
699
+ async RestoreRecord(payload) {
700
+ return await this.actionCall("collection", "RestoreRecord", payload);
701
+ }
702
+ async UpsertRecord(payload) {
703
+ return await this.actionCall("collection", "UpsertRecord", payload);
704
+ }
705
+ async BulkCreateRecords(payload) {
706
+ return await this.actionCall("collection", "BulkCreateRecords", payload);
707
+ }
708
+ async EnsureAirtableImportCredential(payload) {
709
+ return await this.actionCall("collection", "EnsureAirtableImportCredential", payload);
710
+ }
711
+ async ListAirtableImportSources(payload) {
712
+ return await this.actionCall("collection", "ListAirtableImportSources", payload);
713
+ }
714
+ async PreviewAirtableImport(payload) {
715
+ return await this.actionCall("collection", "PreviewAirtableImport", payload);
716
+ }
717
+ async RunAirtableImport(payload) {
718
+ return await this.actionCall("collection", "RunAirtableImport", payload);
719
+ }
720
+ async EnsureLinearImportCredential(payload) {
721
+ return await this.actionCall("collection", "EnsureLinearImportCredential", payload);
722
+ }
723
+ async ListLinearImportSources(payload) {
724
+ return await this.actionCall("collection", "ListLinearImportSources", payload);
725
+ }
726
+ async PreviewLinearImport(payload) {
727
+ return await this.actionCall("collection", "PreviewLinearImport", payload);
728
+ }
729
+ async RunLinearImport(payload) {
730
+ return await this.actionCall("collection", "RunLinearImport", payload);
731
+ }
732
+ async EnsureGmailImportCredential(payload) {
733
+ return await this.actionCall("collection", "EnsureGmailImportCredential", payload);
734
+ }
735
+ async EnsureGithubImportCredential(payload) {
736
+ return await this.actionCall("collection", "EnsureGithubImportCredential", payload);
737
+ }
738
+ async ListGmailImportSources(payload) {
739
+ return await this.actionCall("collection", "ListGmailImportSources", payload);
740
+ }
741
+ async ListGithubImportSources(payload) {
742
+ return await this.actionCall("collection", "ListGithubImportSources", payload);
743
+ }
744
+ async PreviewGmailImport(payload) {
745
+ return await this.actionCall("collection", "PreviewGmailImport", payload);
746
+ }
747
+ async PreviewCsvImport(payload) {
748
+ return await this.actionCall("collection", "PreviewCsvImport", payload);
749
+ }
750
+ async PreviewGithubImport(payload) {
751
+ return await this.actionCall("collection", "PreviewGithubImport", payload);
752
+ }
753
+ async RunGmailImport(payload) {
754
+ return await this.actionCall("collection", "RunGmailImport", payload);
755
+ }
756
+ async RunCsvImport(payload) {
757
+ return await this.actionCall("collection", "RunCsvImport", payload);
758
+ }
759
+ async RunGithubImport(payload) {
760
+ return await this.actionCall("collection", "RunGithubImport", payload);
761
+ }
762
+ async EnsureNotionImportCredential(payload) {
763
+ return await this.actionCall("collection", "EnsureNotionImportCredential", payload);
764
+ }
765
+ async ListNotionImportSources(payload) {
766
+ return await this.actionCall("collection", "ListNotionImportSources", payload);
767
+ }
768
+ async PreviewNotionImport(payload) {
769
+ return await this.actionCall("collection", "PreviewNotionImport", payload);
770
+ }
771
+ async RunNotionImport(payload) {
772
+ return await this.actionCall("collection", "RunNotionImport", payload);
773
+ }
774
+ async EnsureJiraImportCredential(payload) {
775
+ return await this.actionCall("collection", "EnsureJiraImportCredential", payload);
776
+ }
777
+ async ListJiraImportSources(payload) {
778
+ return await this.actionCall("collection", "ListJiraImportSources", payload);
779
+ }
780
+ async PreviewJiraImport(payload) {
781
+ return await this.actionCall("collection", "PreviewJiraImport", payload);
782
+ }
783
+ async RunJiraImport(payload) {
784
+ return await this.actionCall("collection", "RunJiraImport", payload);
785
+ }
786
+ async EnsureTrelloImportCredential(payload) {
787
+ return await this.actionCall("collection", "EnsureTrelloImportCredential", payload);
788
+ }
789
+ async ConnectTrelloImportCredential(payload) {
790
+ return await this.actionCall("collection", "ConnectTrelloImportCredential", payload);
791
+ }
792
+ async ListTrelloImportSources(payload) {
793
+ return await this.actionCall("collection", "ListTrelloImportSources", payload);
794
+ }
795
+ async PreviewTrelloImport(payload) {
796
+ return await this.actionCall("collection", "PreviewTrelloImport", payload);
797
+ }
798
+ async RunTrelloImport(payload) {
799
+ return await this.actionCall("collection", "RunTrelloImport", payload);
800
+ }
801
+ async BulkUpdateRecords(payload) {
802
+ return await this.actionCall("collection", "BulkUpdateRecords", payload);
803
+ }
804
+ async BulkDeleteRecords(payload) {
805
+ return await this.actionCall("collection", "BulkDeleteRecords", payload);
806
+ }
807
+ async DuplicateRecord(payload) {
808
+ return await this.actionCall("collection", "DuplicateRecord", payload);
809
+ }
810
+ async QueryRecords(payload) {
811
+ return await this.actionCall("collection", "QueryRecords", payload);
812
+ }
813
+ async SearchRecords(payload) {
814
+ return await this.actionCall("collection", "SearchRecords", payload);
815
+ }
816
+ async CountRecords(payload) {
817
+ return await this.actionCall("collection", "CountRecords", payload);
818
+ }
819
+ async GroupRecords(payload) {
820
+ return await this.actionCall("collection", "GroupRecords", payload);
821
+ }
822
+ async AggregateRecords(payload) {
823
+ return await this.actionCall("collection", "AggregateRecords", payload);
824
+ }
825
+ async DistinctFieldValues(payload) {
826
+ return await this.actionCall("collection", "DistinctFieldValues", payload);
827
+ }
828
+ async CreateCollectionField(payload) {
829
+ return await this.actionCall("collection", "CreateCollectionField", payload);
830
+ }
831
+ async UpdateCollectionField(payload) {
832
+ return await this.actionCall("collection", "UpdateCollectionField", payload);
833
+ }
834
+ async DeleteCollectionField(payload) {
835
+ return await this.actionCall("collection", "DeleteCollectionField", payload);
836
+ }
837
+ async ListCollectionAutomationRules(payload) {
838
+ return await this.actionCall("collection", "ListCollectionAutomationRules", payload);
839
+ }
840
+ async CreateCollectionAutomationRule(payload) {
841
+ return await this.actionCall("collection", "CreateCollectionAutomationRule", payload);
842
+ }
843
+ async UpdateCollectionAutomationRule(payload) {
844
+ return await this.actionCall("collection", "UpdateCollectionAutomationRule", payload);
845
+ }
846
+ async DeleteCollectionAutomationRule(payload) {
847
+ return await this.actionCall("collection", "DeleteCollectionAutomationRule", payload);
848
+ }
849
+ async ListCollectionViews(payload) {
850
+ return await this.actionCall("collection", "ListCollectionViews", payload);
851
+ }
852
+ async CreateCollectionView(payload) {
853
+ return await this.actionCall("collection", "CreateCollectionView", payload);
854
+ }
855
+ async UpdateCollectionView(payload) {
856
+ return await this.actionCall("collection", "UpdateCollectionView", payload);
857
+ }
858
+ async DeleteCollectionView(payload) {
859
+ return await this.actionCall("collection", "DeleteCollectionView", payload);
860
+ }
861
+ async ListCollectionButtons(payload) {
862
+ return await this.actionCall("collection", "ListCollectionButtons", payload);
863
+ }
864
+ async CreateCollectionButton(payload) {
865
+ return await this.actionCall("collection", "CreateCollectionButton", payload);
866
+ }
867
+ async UpdateCollectionButton(payload) {
868
+ return await this.actionCall("collection", "UpdateCollectionButton", payload);
869
+ }
870
+ async DeleteCollectionButton(payload) {
871
+ return await this.actionCall("collection", "DeleteCollectionButton", payload);
872
+ }
873
+ async ExecuteCollectionButton(payload) {
874
+ return await this.actionCall("collection", "ExecuteCollectionButton", payload);
875
+ }
876
+ async ExecuteCollectionAiField(payload) {
877
+ return await this.actionCall("collection", "ExecuteCollectionAiField", payload);
878
+ }
879
+ async ListCollectionRelations(payload) {
880
+ return await this.actionCall("collection", "ListCollectionRelations", payload);
881
+ }
882
+ async CreateCollectionRelation(payload) {
883
+ return await this.actionCall("collection", "CreateCollectionRelation", payload);
884
+ }
885
+ async UpdateCollectionRelation(payload) {
886
+ return await this.actionCall("collection", "UpdateCollectionRelation", payload);
887
+ }
888
+ async DeleteCollectionRelation(payload) {
889
+ return await this.actionCall("collection", "DeleteCollectionRelation", payload);
890
+ }
891
+ async ListRelationCandidates(payload) {
892
+ return await this.actionCall("collection", "ListRelationCandidates", payload);
893
+ }
894
+ async GetRecordRelations(payload) {
895
+ return await this.actionCall("collection", "GetRecordRelations", payload);
896
+ }
897
+ async ReorderCollectionFields(payload) {
898
+ return await this.actionCall("collection", "ReorderCollectionFields", payload);
899
+ }
900
+ async GetCollectionSchema(payload) {
901
+ return await this.actionCall("collection", "GetCollectionSchema", payload);
902
+ }
903
+ async ValidateRecord(payload) {
904
+ return await this.actionCall("collection", "ValidateRecord", payload);
905
+ }
906
+ async PreviewValidationErrors(payload) {
907
+ return await this.actionCall("collection", "PreviewValidationErrors", payload);
908
+ }
909
+ async CheckRecordPermission(payload) {
910
+ return await this.actionCall("collection", "CheckRecordPermission", payload);
911
+ }
912
+ async ListRecordPermissions(payload) {
913
+ return await this.actionCall("collection", "ListRecordPermissions", payload);
914
+ }
915
+ async GrantRecordPermission(payload) {
916
+ return await this.actionCall("collection", "GrantRecordPermission", payload);
917
+ }
918
+ async RevokeRecordPermission(payload) {
919
+ return await this.actionCall("collection", "RevokeRecordPermission", payload);
920
+ }
921
+ //---wiki--------
922
+ async CreateWikiPage(payload) {
923
+ return await this.actionCall("wiki", "CreateWikiPage", payload);
924
+ }
925
+ async UpdateWikiPage(payload) {
926
+ return await this.actionCall("wiki", "UpdateWikiPage", payload);
927
+ }
928
+ async DeleteWikiPage(payload) {
929
+ return await this.actionCall("wiki", "DeleteWikiPage", payload);
930
+ }
931
+ async ListWikiPages(payload) {
932
+ return await this.actionCall("wiki", "ListWikiPages", payload);
933
+ }
934
+ async SetWikiPageUserState(payload) {
935
+ return await this.actionCall("wiki", "SetWikiPageUserState", payload);
936
+ }
937
+ async UploadWikiFile(payload) {
938
+ return await this.actionCall("wiki", "UploadFile", payload);
939
+ }
940
+ async ResolveWikiFileView(payload) {
941
+ const result = await this.actionCall("wiki", "ResolveWikiFileView", payload);
942
+ const storagePath = this.normalizeStoragePath(String(result?.path || result?.filePath || result?.url || ""));
943
+ const resolvedUrl = this.resolveStorageViewUrl(storagePath);
944
+ return {
945
+ ...result,
946
+ fileId: String(result?.fileId || payload.fileId || ""),
947
+ path: storagePath,
948
+ filePath: resolvedUrl || storagePath,
949
+ url: resolvedUrl || storagePath,
950
+ };
951
+ }
952
+ async CreateWikiComment(payload) {
953
+ return await this.actionCall("wiki", "CreateWikiComment", payload);
954
+ }
955
+ async UpdateWikiComment(payload) {
956
+ const normalizedPayload = {
957
+ ...payload,
958
+ ...(typeof payload.resolved === "boolean"
959
+ ? { resolved: payload.resolved ? "true" : "false" }
960
+ : {}),
961
+ };
962
+ return await this.actionCall("wiki", "UpdateWikiComment", normalizedPayload);
963
+ }
964
+ async DeleteWikiComment(payload) {
965
+ return await this.actionCall("wiki", "DeleteWikiComment", payload);
966
+ }
967
+ async ListWikiComments(payload) {
968
+ return await this.actionCall("wiki", "ListWikiComments", payload);
969
+ }
970
+ async RestoreWikiPage(payload) {
971
+ return await this.actionCall("wiki", "RestoreWikiPage", payload);
972
+ }
973
+ async GetWikiPageById(payload) {
974
+ return await this.actionCall("wiki", "GetWikiPageById", payload);
975
+ }
976
+ async GetWikiPageBySlug(payload) {
977
+ return await this.actionCall("wiki", "GetWikiPageBySlug", payload);
978
+ }
979
+ async GetWikiTree(payload) {
980
+ return await this.actionCall("wiki", "GetWikiTree", payload);
981
+ }
982
+ /* ------------------------------------------------------------------
983
+ * Wiki Revision
984
+ * ------------------------------------------------------------------ */
985
+ async CreateWikiRevision(payload) {
986
+ return await this.actionCall("wiki", "CreateWikiRevision", payload);
987
+ }
988
+ async GetLatestWikiRevision(payload) {
989
+ return await this.actionCall("wiki", "GetLatestWikiRevision", payload);
990
+ }
991
+ async GetWikiRevisionById(payload) {
992
+ return await this.actionCall("wiki", "GetWikiRevisionById", payload);
993
+ }
994
+ async ListChatHistory(payload) {
995
+ return await this.get("/chat/history", payload);
996
+ }
997
+ }
998
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2R1bGVzL2VtcGxvaWQvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFPckQsTUFBTSxPQUFPLGNBQWUsU0FBUSxhQUFhO0lBQ25DLGNBQWM7UUFDcEIsT0FBTyw4QkFBOEIsQ0FBQztJQUMxQyxDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQWE7UUFDM0IsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxRQUFnQjtRQUN6QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNkLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sVUFBVSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE1BQU0sYUFBYSxHQUFHO1lBQ2xCLE9BQU8sT0FBTyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyRSxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakYsT0FBTyxPQUFPLEtBQUssV0FBVyxD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RUFBRSxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FDcEIsT0FBMEM7UUFFMUMsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7OzRFQUV3RTtJQUVqRSxLQUFLLENBQUMsa0JBQWtCLENBQzNCLE9BQWlEO1FBRWpELE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0sS0FBSyxDQUFDLHFCQUFxQixDQUM5QixPQUFvRDtRQUVwRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUIsQ0FDNUIsT0FBa0Q7UUFFbEQsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZSxDQUN4QixPQUE4QztRQUU5QyxPQUFPLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBTZXJ2aWNlQ2xpZW50IH0gZnJvbSBcIi4uLy4uL3NlcnZpY2UtY2xpZW50XCI7XG5cblxuaW1wb3J0IHsgQWdncmVnYXRlUmVjb3Jkc1NjaGVtYSwgQnVsa0NyZWF0ZVJlY29yZHNTY2hlbWEsIEJ1bGtEZWxldGVSZWNvcmRzU2NoZW1hLCBCdWxrVXBkYXRlUmVjb3Jkc1NjaGVtYSwgQ2hhbmdlQWdlbnRmbG93UHJvamVjdFNjaGVtYSwgQ2hlY2tSZWNvcmRQZXJtaXNzaW9uU2NoZW1hLCBDb25uZWN0VHJlbGxvSW1wb3J0Q3JlZGVudGlhbFNjaGVtYSwgQ291bnRSZWNvcmRzU2NoZW1hLCBDcmVhdGVBZ2VudEZsb3dGb2xkZXJTY2hlbWEsIENyZWF0ZUFnZW50Rmxvd1NjaGVtYSwgQ3JlYXRlQXNzaXN0YW50Q2hhbm5lbFNjaGVtYSwgQ3JlYXRlQXNzaXN0YW50Q29uc3RyYWludFNjaGVtYSwgQ3JlYXRlQXNzaXN0YW50RGF0YXNvdXJjZVNjaGVtYSwgQ3JlYXRlQXNzaXN0YW50SW5zdHJ1Y3Rpb25TY2hlbWEsIENyZWF0ZUFzc2lzdGFudFNjaGVtYSwgQ3JlYXRlQXNzaXN0YW50U2tpbGxTY2hlbWEsIENyZWF0ZUNoYW5uZWxTY2hlbWEsIENyZWF0ZUNvbGxlY3Rpb25BdXRvbWF0aW9uUnVsZVNjaGVtYSwgQ3JlYXRlQ29sbGVjdGlvbkJ1dHRvblNjaGVtYSwgQ3JlYXRlQ29sbGVjdGlvbkZpZWxkU2NoZW1hLCBDcmVhdGVDb2xsZWN0aW9uUmVsYXRpb25TY2hlbWEsIENyZWF0ZUNvbGxlY3Rpb25TY2hlbWEsIENyZWF0ZUNvbGxlY3Rpb25WaWV3U2NoZW1hLCBDcmVhdGVDb21tYW5kU2NoZW1hLCBDcmVhdGVDb21wZXRlbmN5U2NoZW1hLCBDcmVhdGVDb25zdHJhaW50U2NoZW1hLCBDcmVhdGVEYXRhTW9kZWxTY2hlbWEsIENyZWF0ZURhdGFzb3VyY2VTY2hlbWEsIENyZWF0ZURvbWFpblRvcGljU2NoZW1hLCBDcmVhdGVEcml2ZUZvbGRlclNjaGVtYSwgQ3JlYXRlRHJpdmVSb290Rm9sZGVyU2NoZW1hLCBDcmVhdGVEcml2ZVJvb3RTY2hlbWEsIENyZWF0ZUVtcGxvaWRTY2hlbWEsIENyZWF0ZUV4dGVuc2lvblNjaGVtYSwgQ3JlYXRlSW5wdXRTY2hlbWEsIENyZWF0ZUluc3RydWN0aW9uU2NoZW1hLCBDcmVhdGVKb2JEZWZpbml0aW9uU2NoZW1hLCBDcmVhdGVLbm93bGVkZ2VTY2hlbWEsIENyZWF0ZU9jY3VwYXRpb25TY2hlbWEsIENyZWF0ZVJlY29yZFNjaGVtYSwgQ3JlYXRlU2NvcGVTY2hlbWEsIENyZWF0ZVNraWxsU2NoZW1hLCBDcmVhdGVTdHJlYW1JZFNjaGVtYSwgQ3JlYXRlVGFza1RlbXBsYXRlU2NoZW1hLCBDcmVhdGVUZWFtU2NoZW1hLCBDcmVhdGVUb3BpY1NjaGVtYSwgQ3JlYXRlV2lraUNvbW1lbnRTY2hlbWEsIENyZWF0ZVdpa2lQYWdlU2NoZW1hLCBDcmVhdGVXaWtpUmV2aXNpb25TY2hlbWEsIENyZWF0ZVdvcmtlclNjaGVtYSwgQ3JlYXRlV29ya2VyVG9waWNTY2hlbWEsIERlbGV0ZUFnZW50Rmxvd0ZvbGRlclNjaGVtYSwgRGVsZXRlQWdlbnRGbG93U2NoZW1hLCBEZWxldGVBc3Npc3RhbnRDaGFubmVsU2NoZW1hLCBEZWxldGVBc3Npc3RhbnREYXRhc291cmNlU2NoZW1hLCBEZWxldGVBc3Npc3RhbnRTY2hlbWEsIERlbGV0ZUFzc2lzdGFudFNraWxsU2NoZW1hLCBEZWxldGVDaGFubmVsU2NoZW1hLCBEZWxldGVDaGF0QnlJZFNjaGVtYSwgRGVsZXRlQ29sbGVjdGlvbkF1dG9tYXRpb25SdWxlU2NoZW1hLCBEZWxldGVDb2xsZWN0aW9uQnV0dG9uU2NoZW1hLCBEZWxldGVDb2xsZWN0aW9uRmllbGRTY2hlbWEsIERlbGV0ZUNvbGxlY3Rpb25SZWxhdGlvblNjaGVtYSwgRGVsZXRlQ29sbGVjdGlvblZpZXdTY2hlbWEsIERlbGV0ZUNvbW1hbmRTY2hlbWEsIERlbGV0ZUNvbXBldGVuY3lTY2hlbWEsIERlbGV0ZUNvbnN0cmFpbnRTY2hlbWEsIERlbGV0ZURhdGFNb2RlbFNjaGVtYSwgRGVsZXRlRGF0YXNvdXJjZVNjaGVtYSwgRGVsZXRlRG9jdW1lbnRzQnlJZEFmdGVyVGltZXN0YW1wU2NoZW1hLCBEZWxldGVEb21haW5Ub3BpY1NjaGVtYSwgRGVsZXRlRHJpdmVJdGVtU2NoZW1hLCBEZWxldGVEcml2ZVJvb3RJdGVtU2NoZW1hLCBEZWxldGVEcml2ZVJvb3RTY2hlbWEsIERlbGV0ZUVtcGxvaWRTY2hlbWEsIERlbGV0ZUV4dGVuc2lvblNjaGVtYSwgRGVsZXRlSW5wdXRTY2hlbWEsIERlbGV0ZUluc3RydWN0aW9uU2NoZW1hLCBEZWxldGVKb2JEZWZpbml0aW9uU2NoZW1hLCBEZWxldGVLbm93bGVkZ2VTY2hlbWEsIERlbGV0ZU1lc3NhZ2VzQnlDaGF0SWRBZnRlclRpbWVzdGFtcFNjaGVtYSwgRGVsZXRlT2NjdXBhdGlvblNjaGVtYSwgRGVsZXRlUmVjb3JkU2NoZW1hLCBEZWxldGVTY29wZVNjaGVtYSwgRGVsZXRlU2tpbGxTY2hlbWEsIERlbGV0ZVRhc2tUZW1wbGF0ZVNjaGVtYSwgRGVsZXRlVGVhbVNjaGVtYSwgRGVsZXRlVG9waWNTY2hlbWEsIERlbGV0ZVdpa2lDb21tZW50U2NoZW1hLCBEZWxldGVXaWtpUGFnZVNjaGVtYSwgRGVsZXRlV29ya2VyU2NoZW1hLCBEZWxldGVXb3JrZXJUb3BpY1NjaGVtYSwgRGlzdGluY3RGaWVsZFZhbHVlc1NjaGVtYSwgRHVwbGljYXRlQWdlbnRGbG93U2NoZW1hLCBEdXBsaWNhdGVSZWNvcmRTY2hlbWEsIEVuaGFuY2VUb3BpY1NjaGVtYSwgRW5zdXJlQWlydGFibGVJbXBvcnRDcmVkZW50aWFsU2NoZW1hLCBFbnN1cmVEcml2ZVByb3ZpZGVyQ3JlZGVudGlhbFNjaGVtYSwgRW5zdXJlR21haWxJbXBvcnRDcmVkZW50aWFsU2NoZW1hLCBFbnN1cmVHaXRodWJJbXBvcnRDcmVkZW50aWFsU2NoZW1hLCBFbnN1cmVKaXJhSW1wb3J0Q3JlZGVudGlhbFNjaGVtYSwgRW5zdXJlTGluZWFySW1wb3J0Q3JlZGVudGlhbFNjaGVtYSwgRW5zdXJlTm90aW9uSW1wb3J0Q3JlZGVudGlhbFNjaGVtYSwgRW5zdXJlVHJlbGxvSW1wb3J0Q3JlZGVudGlhbFNjaGVtYSwgRXhlY3V0ZUNvbGxlY3Rpb25BaUZpZWxkU2NoZW1hLCBFeGVjdXRlQ29sbGVjdGlvbkJ1dHRvblNjaGVtYSwgRXhwb3J0RGF0YU1vZGVsU2NoZW1hLCBHZXRDaGF0QnlJZFNjaGVtYSwgR2V0Q2hhdHNCeVVzZXJJZFNjaGVtYSwgR2V0Q29sbGVjdGlvbkJ5SWRTY2hlbWEsIEdldENvbGxlY3Rpb25TY2hlbWFTY2hlbWEsIEdldERhdGFNb2RlbEJ5SWRTY2hlbWEsIEdldERvY3VtZW50QnlJZFNjaGVtYSwgR2V0RG9jdW1lbnRzQnlJZFNjaGVtYSwgR2V0RHJpdmVEZWxldGVJbXBhY3RTY2hlbWEsIEdldERyaXZlUm9vdERlbGV0ZUltcGFjdFNjaGVtYSwgR2V0TGF0ZXN0V2lraVJldmlzaW9uU2NoZW1hLCBHZXRNYXJrZXRTdG9yZUl0ZW1TY2hlbWEsIEdldE1lc3NhZ2VCeUlkU2NoZW1hLCBHZXRNZXNzYWdlQ291bnRCeVVzZXJJZFNjaGVtYSwgR2V0TWVzc2FnZXNCeUNoYXRJZFNjaGVtYSwgR2V0UHJpdmF0ZUFnZW50Rmxvd0ZvbGRlclNjaGVtYSwgR2V0UmVjb3JkQnlJZFNjaGVtYSwgR2V0UmVjb3JkUmVsYXRpb25zU2NoZW1hLCBHZXRTY29wZUJ5VHlwZVNjaGVtYSwgR2V0U3RyZWFtSWRzQnlDaGF0SWRTY2hlbWEsIEdldFN1Z2dlc3Rpb25zQnlEb2N1bWVudElkU2NoZW1hLCBHZXRWb3Rlc0J5Q2hhdElkU2NoZW1hLCBHZXRXaWtpUGFnZUJ5SWRTY2hlbWEsIEdldFdpa2lQYWdlQnlTbHVnU2NoZW1hLCBHZXRXaWtpUmV2aXNpb25CeUlkU2NoZW1hLCBHZXRXaWtpVHJlZVNjaGVtYSwgR3JhbnRSZWNvcmRQZXJtaXNzaW9uU2NoZW1hLCBHcm91cFJlY29yZHNTY2hlbWEsIEhhcmREZWxldGVEYXRhTW9kZWxTY2hlbWEsIExpc3RBZ2VudEZsb3dGb2xkZXJzU2NoZW1hLCBMaXN0QWdlbnRGbG93c1NjaGVtYSwgTGlzdEFpcnRhYmxlSW1wb3J0U291cmNlc1NjaGVtYSwgTGlzdEFzc2lzdGFudENoYW5uZWxzU2NoZW1hLCBMaXN0QXNzaXN0YW50Q29uc3RyYWludHNTY2hlbWEsIExpc3RBc3Npc3RhbnREYXRhc291cmNlc1NjaGVtYSwgTGlzdEFzc2lzdGFudEluc3RydWN0aW9uc1NjaGVtYSwgTGlzdEFzc2lzdGFudFNraWxsc1NjaGVtYSwgTGlzdEFzc2lzdGFudHNTY2hlbWEsIExpc3RDaGFubmVsc1NjaGVtYSwgTGlzdENoYXRIaXN0b3J5U2NoZW1hLCBMaXN0Q29sbGVjdGlvbkF1dG9tYXRpb25SdWxlc1NjaGVtYSwgTGlzdENvbGxlY3Rpb25CdXR0b25zU2NoZW1hLCBMaXN0Q29sbGVjdGlvblJlbGF0aW9uc1NjaGVtYSwgTGlzdENvbGxlY3Rpb25zU2NoZW1hLCBMaXN0Q29sbGVjdGlvblZpZXdzU2NoZW1hLCBMaXN0Q29tbWFuZHNTY2hlbWEsIExpc3RDb21wZXRlbmNpZXNTY2hlbWEsIExpc3RDb25zdHJhaW50c1NjaGVtYSwgTGlzdERhdGFNb2RlbHNTY2hlbWEsIExpc3REYXRhc291cmNlc1NjaGVtYSwgTGlzdERvbWFpblRvcGljc1NjaGVtYSwgTGlzdERyaXZlSXRlbXNTY2hlbWEsIExpc3REcml2ZVByb3ZpZGVyRm9sZGVyc1NjaGVtYSwgTGlzdERyaXZlUm9vdEl0ZW1zU2NoZW1hLCBMaXN0RHJpdmVSb290c1NjaGVtYSwgTGlzdERyaXZlUm9vdFRyZWVTY2hlbWEsIExpc3REcml2ZVRyZWVTY2hlbWEsIExpc3RFbXBsb2lkc1BhZ2luYXRlZFNjaGVtYSwgTGlzdEVtcGxvaWRzU2NoZW1hLCBMaXN0RXh0ZW5zaW9uc1NjaGVtYSwgTGlzdEdtYWlsSW1wb3J0U291cmNlc1NjaGVtYSwgTGlzdEdpdGh1YkltcG9ydFNvdXJjZXNTY2hlbWEsIExpc3RJbnB1dFNjaGVtYSwgTGlzdEluc3RydWN0aW9uc1NjaGVtYSwgTGlzdEppcmFJbXBvcnRTb3VyY2VzU2NoZW1hLCBMaXN0Sm9iRGVmaW5pdGlvblNjaGVtYSwgTGlzdEtub3dsZWRnZXNTY2hlbWEsIExpc3RMaW5lYXJJbXBvcnRTb3VyY2VzU2NoZW1hLCBMaXN0TWFya2V0U3RvcmVJdGVtc1NjaGVtYSwgTGlzdE5vdGlvbkltcG9ydFNvdXJjZXNTY2hlbWEsIExpc3RPY2N1cGF0aW9uc1NjaGVtYSwgTGlzdFJlY29yZFBlcm1pc3Npb25zU2NoZW1hLCBMaXN0UmVjb3Jkc1NjaGVtYSwgTGlzdFJlbGF0aW9uQ2FuZGlkYXRlc1NjaGVtYSwgTGlzdFNjb3Blc1NjaGVtYSwgTGlzdFNraWxsc1NjaGVtYSwgTGlzdFRhc2tUZW1wbGF0ZXNTY2hlbWEsIExpc3RUZWFtc1NjaGVtYSwgTGlzdFRvcGljc1NjaGVtYSwgTGlzdFRyZWxsb0ltcG9ydFNvdXJjZXNTY2hlbWEsIExpc3RXaWtpQ29tbWVudHNTY2hlbWEsIExpc3RXaWtpUGFnZXNTY2hlbWEsIExpc3RXb3JrZXJzU2NoZW1hLCBMaXN0V29ya2VyVG9waWNzU2NoZW1hLCBNb3ZlRHJpdmVJdGVtU2NoZW1hLCBNb3ZlRHJpdmVSb290SXRlbVNjaGVtYSwgUHJlcGFyZURyaXZlVXBsb2FkU2NoZW1hLCBQcmV2aWV3QWlydGFibGVJbXBvcnRTY2hlbWEsIFByZXZpZXdDc3ZJbXBvcnRTY2hlbWEsIFByZXZpZXdHbWFpbEltcG9ydFNjaGVtYSwgUHJldmlld0dpdGh1YkltcG9ydFNjaGVtYSwgUHJldmlld0ppcmFJbXBvcnRTY2hlbWEsIFByZXZpZXdMaW5lYXJJbXBvcnRTY2hlbWEsIFByZXZpZXdOb3Rpb25JbXBvcnRTY2hlbWEsIFByZXZpZXdUcmVsbG9JbXBvcnRTY2hlbWEsIFByZXZpZXdWYWxpZGF0aW9uRXJyb3JzU2NoZW1hLCBQdWJsaXNoRG9tYWluU2NoZW1hLCBQdWJsaXNoRW1wbG9pZFNjaGVtYSwgUHVibGlzaFdvcmtlclRvTWFya2V0U3RvcmVTY2hlbWEsIFF1ZXJ5UmVjb3Jkc1NjaGVtYSwgUmVhZERyaXZlUm9vdEZpbGVDb250ZW50U2NoZW1hLCBSZW5hbWVEcml2ZUl0ZW1TY2hlbWEsIFJlbmFtZURyaXZlUm9vdEl0ZW1TY2hlbWEsIFJlb3JkZXJDb2xsZWN0aW9uRmllbGRzU2NoZW1hLCBSZXNvbHZlQ29sbGVjdGlvbkZpbGVWaWV3U2NoZW1hLCBSZXNvbHZlRHJpdmVEb3dubG9hZFNjaGVtYSwgUmVzb2x2ZURyaXZlUm9vdERvd25sb2FkU2NoZW1hLCBSZXNvbHZlU2NvcGVGaWxlVmlld1NjaGVtYSwgUmVzb2x2ZVdpa2lGaWxlVmlld1NjaGVtYSwgUmVzdG9yZURhdGFNb2RlbFNjaGVtYSwgUmVzdG9yZVJlY29yZFNjaGVtYSwgUmVzdG9yZVdpa2lQYWdlU2NoZW1hLCBSZXZva2VSZWNvcmRQZXJtaXNzaW9uU2NoZW1hLCBSdW5BaXJ0YWJsZUltcG9ydFNjaGVtYSwgUnVuQ3N2SW1wb3J0U2NoZW1hLCBSdW5HbWFpbEltcG9ydFNjaGVtYSwgUnVuR2l0aHViSW1wb3J0U2NoZW1hLCBSdW5KaXJhSW1wb3J0U2NoZW1hLCBSdW5MaW5lYXJJbXBvcnRTY2hlbWEsIFJ1bk5vdGlvbkltcG9ydFNjaGVtYSwgUnVuVHJlbGxvSW1wb3J0U2NoZW1hLCBTYXZlQ2hhdFNjaGVtYSwgU2F2ZURvY3VtZW50U2NoZW1hLCBTYXZlTWVzc2FnZXNTY2hlbWEsIFNhdmVTdWdnZXN0aW9uc1NjaGVtYSwgU2VhcmNoRHJpdmVJdGVtc1NjaGVtYSwgU2VhcmNoRHJpdmVSb290SXRlbXNTY2hlbWEsIFNlYXJjaFJlY29yZHNTY2hlbWEsIFNldFdpa2lQYWdlVXNlclN0YXRlU2NoZW1hLCBVcGRhdGVBZ2VudEZsb3dGb2xkZXJTY2hlbWEsIFVwZGF0ZUFnZW50Rmxvd1NjaGVtYSwgVXBkYXRlQXNzaXN0YW50Q2hhbm5lbFNjaGVtYSwgVXBkYXRlQXNzaXN0YW50RGF0YXNvdXJjZVNjaGVtYSwgVXBkYXRlQXNzaXN0YW50U2NoZW1hLCBVcGRhdGVBc3Npc3RhbnRTa2lsbFNjaGVtYSwgVXBkYXRlQ2hhbm5lbFNjaGVtYSwgVXBkYXRlQ2hhdExhc3RDb250ZXh0QnlJZFNjaGVtYSwgVXBkYXRlQ2hhdFZpc2libGl0eUJ5SWRTY2hlbWEsIFVwZGF0ZUNvbGxlY3Rpb25BdXRvbWF0aW9uUnVsZVNjaGVtYSwgVXBkYXRlQ29sbGVjdGlvbkJ1dHRvblNjaGVtYSwgVXBkYXRlQ29sbGVjdGlvbkZpZWxkU2NoZW1hLCBVcGRhdGVDb2xsZWN0aW9uUmVsYXRpb25TY2hlbWEsIFVwZGF0ZUNvbGxlY3Rpb25WaWV3U2NoZW1hLCBVcGRhdGVDb21tYW5kU2NoZW1hLCBVcGRhdGVDb21wZXRlbmN5U2NoZW1hLCBVcGRhdGVDb25zdHJhaW50U2NoZW1hLCBVcGRhdGVEYXRhTW9kZWxTY2hlbWEsIFVwZGF0ZURhdGFzb3VyY2VTY2hlbWEsIFVwZGF0ZURvbWFpblRvcGljU2NoZW1hLCBVcGRhdGVFbXBsb2lkU2NoZW1hLCBVcGRhdGVFeHRlbnNpb25TY2hlbWEsIFVwZGF0ZUlucHV0U2NoZW1hLCBVcGRhdGVJbnN0cnVjdGlvblNjaGVtYSwgVXBkYXRlSm9iRGVmaW5pdGlvblNjaGVtYSwgVXBkYXRlS25vd2xlZGdlU2NoZW1hLCBVcGRhdGVPY2N1cGF0aW9uU2NoZW1hLCBVcGRhdGVSZWNvcmRTY2hlbWEsIFVwZGF0ZVNjb3BlU2NoZW1hLCBVcGRhdGVTa2lsbFNjaGVtYSwgVXBkYXRlVGFza1RlbXBsYXRlU2NoZW1hLCBVcGRhdGVUZWFtU2NoZW1hLCBVcGRhdGVUb3BpY1NjaGVtYSwgVXBkYXRlV2lraUNvbW1lbnRTY2hlbWEsIFVwZGF0ZVdpa2lQYWdlU2NoZW1hLCBVcGRhdGVXb3JrZXJTY2hlbWEsIFVwZGF0ZVdvcmtlclRvcGljU2NoZW1hLCBVcGxvYWRDb2xsZWN0aW9uRmlsZVNjaGVtYSwgVXBsb2FkRHJpdmVSb290RmlsZXNTY2hlbWEsIFVwbG9hZEVkaXRvckZpbGVTY2hlbWEsIFVwc2VydFJlY29yZFNjaGVtYSwgVmFsaWRhdGVSZWNvcmRTY2hlbWEsIFZvdGVNZXNzYWdlU2NoZW1hIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBUQWdlbnRGbG93LCBUQWdlbnRGbG93Rm9sZGVyLCBUQXNzaXN0YW50LCBUQXNzaXN0YW50Q2hhbm5lbCwgVEFzc2lzdGFudENvbnN0cmFpbnQsIFRBc3Npc3RhbnREYXRhc291cmNlLCBUQXNzaXN0YW50SW5zdHJ1Y3Rpb24sIFRBc3Npc3RhbnRTa2lsbCwgVENoYW5uZWwsIFRDaGF0LCBUQ29sbGVjdGlvbkF1dG9tYXRpb25SdWxlLCBUQ29sbGVjdGlvbkJ1dHRvbiwgVENvbGxlY3Rpb25SZWxhdGlvbiwgVENvbGxlY3Rpb25WaWV3LCBUQ29tbWFuZCwgVENvbXBldGVuY3ksIFRDb25zdHJhaW50LCBURGF0YXNvdXJjZSwgVERlbGV0ZUFnZW50Rmxvd1Jlc3VsdCwgVERvY3VtZW50LCBURG9tYWluVG9waWMsIFREcml2ZURlbGV0ZUltcGFjdCwgVERyaXZlRmlsZUNvbnRlbnQsIFREcml2ZUl0ZW0sIFREcml2ZVByb3ZpZGVyRm9sZGVyLCBURHJpdmVSb290LCBURHJpdmVSb290UHJvdmlkZXIsIFREcml2ZVRyZWVOb2RlLCBURW1wbG9pZCwgVEVuaGFuY2VUb3BpYywgVEV4dGVuc2lvbiwgVElucHV0LCBUSW5zdHJ1Y3Rpb24sIFRKb2JEZWZpbml0aW9uLCBUS25vd2xlZGdlLCBUTWFya2V0U3RvcmVJdGVtLCBUT2NjdXBhdGlvbiwgVFBhZ2luYXRlZEVtcGxvaWRzUmVzdWx0LCBUUHJlcGFyZWREcml2ZVVwbG9hZCwgVFB1Ymxpc2hFbXBsb2lkLCBUUHVibGlzaFdvcmtlclRvTWFya2V0U3RvcmUsIFRSZWxhdGlvblJlY29yZE9wdGlvbiwgVFNjb3BlLCBUU2tpbGwsIFRTdHJlYW1JZCwgVFRhc2tUZW1wbGF0ZSwgVFRlYW0sIFRUb3BpYywgVFVwbG9hZGVkRmlsZSwgVFdpa2lDb21tZW50LCBUV2lraUNvbW1lbnRQYWdpbmF0aW9uLCBUV2lraUZpbGVWaWV3UmVzb2x1dGlvbiwgVFdvcmtlciwgVFdvcmtlclRvcGljIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IEltcG9ydERhdGFNb2RlbFNjaGVtYSB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5leHBvcnQgY2xhc3MgRW1wbG9pZFNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlQ2xpZW50IHtcbiAgICBwcm90ZWN0ZWQgZ2V0U2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICdjb20uYXBwY29uZGEuc2VydmljZS5lbXBsb2lkJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzSHR0cFVybCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZVN0b3JhZ2VQYXRoKHBhdGhMaWtlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gU3RyaW5nKHBhdGhMaWtlIHx8IFwiXCIpLnRyaW0oKTtcbiAgICAgICAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzSHR0cFVybChub3JtYWxpemVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZC5zdGFydHNXaXRoKFwiL1wiKSA/IG5vcm1hbGl6ZWQgOiBgLyR7bm9ybWFsaXplZH1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzb2x2ZUVudkVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGVudkNhbmRpZGF0ZXMgPSBbXG4gICAgICAgICAgICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiA/IHByb2Nlc3M/LmVudj8uQVBQQ09OREFfRU5EUE9JTlQgOiBcIlwiLFxuICAgICAgICAgICAgdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgPyBwcm9jZXNzPy5lbnY/Lk5FWFRfUFVCTElDX0FQUENPTkRBX0VORFBPSU5UIDogXCJcIixcbiAgICAgICAgICAgIHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiID8gcHJvY2Vzcz8uZW52Py5fQVBQX0FQUENPTkRBX0VORFBPSU5UIDogXCJcIixcbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBlbnZDYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkID0gU3RyaW5nKGNhbmRpZGF0ZSB8fCBcIlwiKS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSHR0cFVybChub3JtYWxpemVkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNvbHZlU3RvcmFnZVZpZXdVcmwoc3RvcmFnZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gdGhpcy5ub3JtYWxpemVTdG9yYWdlUGF0aChzdG9yYWdlUGF0aCk7XG4gICAgICAgIGlmICghbm9ybWFsaXplZFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNIdHRwVXJsKG5vcm1hbGl6ZWRQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBTdHJpbmcodGhpcy5jbGllbnQuY29uZmlnLmVuZHBvaW50IHx8IFwiXCIpLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xuICAgICAgICBpZiAodGhpcy5pc0h0dHBVcmwoZW5kcG9pbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7ZW5kcG9pbnR9JHtub3JtYWxpemVkUGF0aH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3RvY29sID0gd2luZG93Py5sb2NhdGlvbj8ucHJvdG9jb2wgfHwgXCJcIjtcbiAgICAgICAgICAgIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbCAhPT0gXCJmaWxlOlwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gU3RyaW5nKHdpbmRvdz8ubG9jYXRpb24/Lm9yaWdpbiB8fCBcIlwiKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xuICAgICAgICAgICAgICAgIGlmIChvcmlnaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEVuZHBvaW50ID0gZW5kcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKGVuZHBvaW50LnN0YXJ0c1dpdGgoXCIvXCIpID8gZW5kcG9pbnQgOiBgLyR7ZW5kcG9pbnR9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke29yaWdpbn0ke25vcm1hbGl6ZWRFbmRwb2ludH0ke25vcm1hbGl6ZWRQYXRofWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW52RW5kcG9pbnQgPSB0aGlzLnJlc29sdmVFbnZFbmRwb2ludCgpO1xuICAgICAgICBpZiAoZW52RW5kcG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtlbnZFbmRwb2ludH0ke25vcm1hbGl6ZWRQYXRofWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBhdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUVtcGxvaWQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlRW1wbG9pZFNjaGVtYT4pOiBQcm9taXNlPFRFbXBsb2lkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2VtcGxvaWQnLCAnQ3JlYXRlRW1wbG9pZCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVFbXBsb2lkKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZUVtcGxvaWRTY2hlbWE+KTogUHJvbWlzZTxURW1wbG9pZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdlbXBsb2lkJywgJ1VwZGF0ZUVtcGxvaWQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlRW1wbG9pZChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVFbXBsb2lkU2NoZW1hPik6IFByb21pc2U8VEVtcGxvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdEZWxldGVFbXBsb2lkJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFB1Ymxpc2hFbXBsb2lkKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFB1Ymxpc2hFbXBsb2lkU2NoZW1hPik6IFByb21pc2U8VFB1Ymxpc2hFbXBsb2lkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2VtcGxvaWQnLCAnUHVibGlzaEVtcGxvaWQnLCBwYXlsb2FkKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIExpc3RFbXBsb2lkcyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0RW1wbG9pZHNTY2hlbWE+KTogUHJvbWlzZTxURW1wbG9pZFtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2VtcGxvaWQnLCAnTGlzdEVtcGxvaWRzJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RFbXBsb2lkc1BhZ2luYXRlZChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0RW1wbG9pZHNQYWdpbmF0ZWRTY2hlbWE+KTogUHJvbWlzZTxUUGFnaW5hdGVkRW1wbG9pZHNSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdMaXN0RW1wbG9pZHNQYWdpbmF0ZWQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlSW5zdHJ1Y3Rpb24ocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlSW5zdHJ1Y3Rpb25TY2hlbWE+KTogUHJvbWlzZTxUSW5zdHJ1Y3Rpb24+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdDcmVhdGVJbnN0cnVjdGlvbicsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0SW5zdHJ1Y3Rpb25zKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RJbnN0cnVjdGlvbnNTY2hlbWE+KTogUHJvbWlzZTxUSW5zdHJ1Y3Rpb25bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdlbXBsb2lkJywgJ0xpc3RJbnN0cnVjdGlvbnMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlSW5zdHJ1Y3Rpb24ocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlSW5zdHJ1Y3Rpb25TY2hlbWE+KTogUHJvbWlzZTxUSW5zdHJ1Y3Rpb24+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdVcGRhdGVJbnN0cnVjdGlvbicsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVJbnN0cnVjdGlvbihwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVJbnN0cnVjdGlvblNjaGVtYT4pOiBQcm9taXNlPFRJbnN0cnVjdGlvbj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdlbXBsb2lkJywgJ0RlbGV0ZUluc3RydWN0aW9uJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUNvbnN0cmFpbnQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlQ29uc3RyYWludFNjaGVtYT4pOiBQcm9taXNlPFRDb25zdHJhaW50PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2VtcGxvaWQnLCAnQ3JlYXRlQ29uc3RyYWludCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0Q29uc3RyYWludHMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdENvbnN0cmFpbnRzU2NoZW1hPik6IFByb21pc2U8VENvbnN0cmFpbnRbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdlbXBsb2lkJywgJ0xpc3RDb25zdHJhaW50cycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVDb25zdHJhaW50KHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZUNvbnN0cmFpbnRTY2hlbWE+KTogUHJvbWlzZTxUQ29uc3RyYWludD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdlbXBsb2lkJywgJ1VwZGF0ZUNvbnN0cmFpbnQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlQ29uc3RyYWludChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVDb25zdHJhaW50U2NoZW1hPik6IFByb21pc2U8VENvbnN0cmFpbnQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdEZWxldGVDb25zdHJhaW50JywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RTY29wZXMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdFNjb3Blc1NjaGVtYT4pOiBQcm9taXNlPFRTY29wZVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2VtcGxvaWQnLCAnTGlzdFNjb3BlcycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBHZXRTY29wZUJ5VHlwZShwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBHZXRTY29wZUJ5VHlwZVNjaGVtYT4pOiBQcm9taXNlPFRTY29wZSB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdHZXRTY29wZUJ5VHlwZScsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBDcmVhdGVTY29wZShwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVTY29wZVNjaGVtYT4pOiBQcm9taXNlPFRTY29wZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdlbXBsb2lkJywgJ0NyZWF0ZVNjb3BlJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZVNjb3BlKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZVNjb3BlU2NoZW1hPik6IFByb21pc2U8VFNjb3BlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2VtcGxvaWQnLCAnVXBkYXRlU2NvcGUnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlU2NvcGUocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlU2NvcGVTY2hlbWE+KTogUHJvbWlzZTxUU2NvcGU+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdEZWxldGVTY29wZScsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGxvYWRTY29wZUZpbGUoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwbG9hZEVkaXRvckZpbGVTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxUVXBsb2FkZWRGaWxlPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWN0aW9uQ2FsbDxhbnk+KFwic2NvcGVcIiwgXCJVcGxvYWRGaWxlXCIsIHBheWxvYWQpO1xuICAgICAgICBjb25zdCBzdG9yYWdlUGF0aCA9XG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZVN0b3JhZ2VQYXRoKFN0cmluZyhyZXN1bHQ/LnBhdGggfHwgcmVzdWx0Py5maWxlUGF0aCB8fCByZXN1bHQ/LnVybCB8fCBcIlwiKSk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkVXJsID0gdGhpcy5yZXNvbHZlU3RvcmFnZVZpZXdVcmwoc3RvcmFnZVBhdGgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICBmaWxlSWQ6IFN0cmluZyhyZXN1bHQ/LmZpbGVJZCB8fCByZXN1bHQ/LmlkIHx8IHBheWxvYWQuYXR0YWNobWVudElkIHx8IFwiXCIpLFxuICAgICAgICAgICAgcGF0aDogc3RvcmFnZVBhdGgsXG4gICAgICAgICAgICBmaWxlUGF0aDogcmVzb2x2ZWRVcmwgfHwgc3RvcmFnZVBhdGgsXG4gICAgICAgICAgICB1cmw6IHJlc29sdmVkVXJsIHx8IHN0b3JhZ2VQYXRoLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBSZXNvbHZlU2NvcGVGaWxlVmlldyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUmVzb2x2ZVNjb3BlRmlsZVZpZXdTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxUV2lraUZpbGVWaWV3UmVzb2x1dGlvbj4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbkNhbGw8YW55PihcInNjb3BlXCIsIFwiUmVzb2x2ZVNjb3BlRmlsZVZpZXdcIiwgcGF5bG9hZCk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VQYXRoID1cbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplU3RvcmFnZVBhdGgoU3RyaW5nKHJlc3VsdD8ucGF0aCB8fCByZXN1bHQ/LmZpbGVQYXRoIHx8IHJlc3VsdD8udXJsIHx8IFwiXCIpKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRVcmwgPSB0aGlzLnJlc29sdmVTdG9yYWdlVmlld1VybChzdG9yYWdlUGF0aCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVJZDogU3RyaW5nKHJlc3VsdD8uZmlsZUlkIHx8IHBheWxvYWQuZmlsZUlkIHx8IFwiXCIpLFxuICAgICAgICAgICAgcGF0aDogc3RvcmFnZVBhdGgsXG4gICAgICAgICAgICBmaWxlUGF0aDogcmVzb2x2ZWRVcmwgfHwgc3RvcmFnZVBhdGgsXG4gICAgICAgICAgICB1cmw6IHJlc29sdmVkVXJsIHx8IHN0b3JhZ2VQYXRoLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBDcmVhdGVPY2N1cGF0aW9uKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENyZWF0ZU9jY3VwYXRpb25TY2hlbWE+KTogUHJvbWlzZTxUT2NjdXBhdGlvbj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdvY2N1cGF0aW9uJywgJ0NyZWF0ZU9jY3VwYXRpb24nLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlT2NjdXBhdGlvbihwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGRhdGVPY2N1cGF0aW9uU2NoZW1hPik6IFByb21pc2U8VE9jY3VwYXRpb24+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnb2NjdXBhdGlvbicsICdVcGRhdGVPY2N1cGF0aW9uJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZU9jY3VwYXRpb24ocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlT2NjdXBhdGlvblNjaGVtYT4pOiBQcm9taXNlPFRPY2N1cGF0aW9uPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ29jY3VwYXRpb24nLCAnRGVsZXRlT2NjdXBhdGlvbicsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0T2NjdXBhdGlvbnMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdE9jY3VwYXRpb25zU2NoZW1hPik6IFByb21pc2U8VE9jY3VwYXRpb25bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdvY2N1cGF0aW9uJywgJ0xpc3RPY2N1cGF0aW9ucycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBQdWJsaXNoRG9tYWluKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFB1Ymxpc2hEb21haW5TY2hlbWE+KTogUHJvbWlzZTxUT2NjdXBhdGlvbj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdvY2N1cGF0aW9uJywgJ1B1Ymxpc2hEb21haW4nLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlRG9tYWluVG9waWMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlRG9tYWluVG9waWNTY2hlbWE+KTogUHJvbWlzZTxURG9tYWluVG9waWM+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnb2NjdXBhdGlvbicsICdDcmVhdGVEb21haW5Ub3BpYycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVEb21haW5Ub3BpYyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGRhdGVEb21haW5Ub3BpY1NjaGVtYT4pOiBQcm9taXNlPFREb21haW5Ub3BpYz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdvY2N1cGF0aW9uJywgJ1VwZGF0ZURvbWFpblRvcGljJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZURvbWFpblRvcGljKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIERlbGV0ZURvbWFpblRvcGljU2NoZW1hPik6IFByb21pc2U8VERvbWFpblRvcGljPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ29jY3VwYXRpb24nLCAnRGVsZXRlRG9tYWluVG9waWMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdERvbWFpblRvcGljcyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0RG9tYWluVG9waWNzU2NoZW1hPik6IFByb21pc2U8VERvbWFpblRvcGljW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnb2NjdXBhdGlvbicsICdMaXN0RG9tYWluVG9waWNzJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUpvYkRlZmluaXRpb24ocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlSm9iRGVmaW5pdGlvblNjaGVtYT4pOiBQcm9taXNlPFRKb2JEZWZpbml0aW9uPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2VtcGxvaWQnLCAnQ3JlYXRlSm9iRGVmaW5pdGlvbicsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVKb2JEZWZpbml0aW9uKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZUpvYkRlZmluaXRpb25TY2hlbWE+KTogUHJvbWlzZTxUSm9iRGVmaW5pdGlvbj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdlbXBsb2lkJywgJ1VwZGF0ZUpvYkRlZmluaXRpb24nLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlSm9iRGVmaW5pdGlvbihwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVKb2JEZWZpbml0aW9uU2NoZW1hPik6IFByb21pc2U8VEpvYkRlZmluaXRpb24+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdEZWxldGVKb2JEZWZpbml0aW9uJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RKb2JEZWZpbml0aW9ucyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0Sm9iRGVmaW5pdGlvblNjaGVtYT4pOiBQcm9taXNlPFRKb2JEZWZpbml0aW9uW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdMaXN0Sm9iRGVmaW5pdGlvbnMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlQ29tcGV0ZW5jeShwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVDb21wZXRlbmN5U2NoZW1hPik6IFByb21pc2U8VENvbXBldGVuY3k+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdDcmVhdGVDb21wZXRlbmN5JywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZUNvbXBldGVuY3kocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlQ29tcGV0ZW5jeVNjaGVtYT4pOiBQcm9taXNlPFRDb21wZXRlbmN5PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2VtcGxvaWQnLCAnVXBkYXRlQ29tcGV0ZW5jeScsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVDb21wZXRlbmN5KHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIERlbGV0ZUNvbXBldGVuY3lTY2hlbWE+KTogUHJvbWlzZTxUQ29tcGV0ZW5jeT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdlbXBsb2lkJywgJ0RlbGV0ZUNvbXBldGVuY3knLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdENvbXBldGVuY2llcyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0Q29tcGV0ZW5jaWVzU2NoZW1hPik6IFByb21pc2U8VENvbXBldGVuY3lbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdlbXBsb2lkJywgJ0xpc3RDb21wZXRlbmNpZXMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlVGFza1RlbXBsYXRlKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENyZWF0ZVRhc2tUZW1wbGF0ZVNjaGVtYT4pOiBQcm9taXNlPFRUYXNrVGVtcGxhdGU+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdDcmVhdGVUYXNrVGVtcGxhdGUnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlVGFza1RlbXBsYXRlKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZVRhc2tUZW1wbGF0ZVNjaGVtYT4pOiBQcm9taXNlPFRUYXNrVGVtcGxhdGU+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdVcGRhdGVUYXNrVGVtcGxhdGUnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlVGFza1RlbXBsYXRlKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIERlbGV0ZVRhc2tUZW1wbGF0ZVNjaGVtYT4pOiBQcm9taXNlPFRUYXNrVGVtcGxhdGU+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdEZWxldGVUYXNrVGVtcGxhdGUnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdFRhc2tUZW1wbGF0ZXMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdFRhc2tUZW1wbGF0ZXNTY2hlbWE+KTogUHJvbWlzZTxUVGFza1RlbXBsYXRlW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZW1wbG9pZCcsICdMaXN0VGFza1RlbXBsYXRlcycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBDcmVhdGVBZ2VudEZsb3cocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlQWdlbnRGbG93U2NoZW1hPik6IFByb21pc2U8VEFnZW50Rmxvdz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhZ2VudC1mbG93JywgJ0NyZWF0ZUFnZW50RmxvdycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVBZ2VudEZsb3cocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlQWdlbnRGbG93U2NoZW1hPik6IFByb21pc2U8VERlbGV0ZUFnZW50Rmxvd1Jlc3VsdD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhZ2VudC1mbG93JywgJ0RlbGV0ZUFnZW50RmxvdycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEdXBsaWNhdGVBZ2VudEZsb3cocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRHVwbGljYXRlQWdlbnRGbG93U2NoZW1hPik6IFByb21pc2U8VEFnZW50Rmxvdz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhZ2VudC1mbG93JywgJ0R1cGxpY2F0ZUFnZW50RmxvdycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBDaGFuZ2VBZ2VudGZsb3dQcm9qZWN0KHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENoYW5nZUFnZW50Zmxvd1Byb2plY3RTY2hlbWE+KTogUHJvbWlzZTxUQWdlbnRGbG93PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2FnZW50LWZsb3cnLCAnQ2hhbmdlQWdlbnRmbG93UHJvamVjdCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVBZ2VudEZsb3cocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlQWdlbnRGbG93U2NoZW1hPik6IFByb21pc2U8VEFnZW50Rmxvdz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhZ2VudC1mbG93JywgJ1VwZGF0ZUFnZW50RmxvdycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0QWdlbnRGbG93cyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0QWdlbnRGbG93c1NjaGVtYT4pOiBQcm9taXNlPFRBZ2VudEZsb3dbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhZ2VudC1mbG93JywgJ0xpc3RBZ2VudEZsb3dzJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUFnZW50Rmxvd0ZvbGRlcihwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVBZ2VudEZsb3dGb2xkZXJTY2hlbWE+KTogUHJvbWlzZTxUQWdlbnRGbG93Rm9sZGVyPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2FnZW50LWZsb3cnLCAnQ3JlYXRlQWdlbnRGbG93Rm9sZGVyJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZUFnZW50Rmxvd0ZvbGRlcihwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGRhdGVBZ2VudEZsb3dGb2xkZXJTY2hlbWE+KTogUHJvbWlzZTxUQWdlbnRGbG93Rm9sZGVyPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2FnZW50LWZsb3cnLCAnVXBkYXRlQWdlbnRGbG93Rm9sZGVyJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZUFnZW50Rmxvd0ZvbGRlcihwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVBZ2VudEZsb3dGb2xkZXJTY2hlbWE+KTogUHJvbWlzZTxUQWdlbnRGbG93Rm9sZGVyPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2FnZW50LWZsb3cnLCAnRGVsZXRlQWdlbnRGbG93Rm9sZGVyJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RBZ2VudEZsb3dGb2xkZXJzKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RBZ2VudEZsb3dGb2xkZXJzU2NoZW1hPik6IFByb21pc2U8VEFnZW50Rmxvd0ZvbGRlcltdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2FnZW50LWZsb3cnLCAnTGlzdEFnZW50Rmxvd0ZvbGRlcnMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgR2V0UHJpdmF0ZUFnZW50Rmxvd0ZvbGRlcihwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBHZXRQcml2YXRlQWdlbnRGbG93Rm9sZGVyU2NoZW1hPik6IFByb21pc2U8VEFnZW50Rmxvd0ZvbGRlciB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnYWdlbnQtZmxvdycsICdHZXRQcml2YXRlQWdlbnRGbG93Rm9sZGVyJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3REcml2ZUl0ZW1zKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0RHJpdmVJdGVtc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPHsgY3VycmVudEZvbGRlcjogVERyaXZlSXRlbTsgaXRlbXM6IFREcml2ZUl0ZW1bXSB9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJkcml2ZVwiLCBcIkxpc3REcml2ZUl0ZW1zXCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0RHJpdmVUcmVlKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0RHJpdmVUcmVlU2NoZW1hPlxuICAgICk6IFByb21pc2U8VERyaXZlVHJlZU5vZGU+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcImRyaXZlXCIsIFwiTGlzdERyaXZlVHJlZVwiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgU2VhcmNoRHJpdmVJdGVtcyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgU2VhcmNoRHJpdmVJdGVtc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPFREcml2ZUl0ZW1bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFwiZHJpdmVcIiwgXCJTZWFyY2hEcml2ZUl0ZW1zXCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBDcmVhdGVEcml2ZUZvbGRlcihcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlRHJpdmVGb2xkZXJTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxURHJpdmVJdGVtPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJkcml2ZVwiLCBcIkNyZWF0ZURyaXZlRm9sZGVyXCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBQcmVwYXJlRHJpdmVVcGxvYWQoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFByZXBhcmVEcml2ZVVwbG9hZFNjaGVtYT5cbiAgICApOiBQcm9taXNlPFRQcmVwYXJlZERyaXZlVXBsb2FkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJkcml2ZVwiLCBcIlByZXBhcmVEcml2ZVVwbG9hZFwiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUmVuYW1lRHJpdmVJdGVtKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBSZW5hbWVEcml2ZUl0ZW1TY2hlbWE+XG4gICAgKTogUHJvbWlzZTxURHJpdmVJdGVtPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJkcml2ZVwiLCBcIlJlbmFtZURyaXZlSXRlbVwiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTW92ZURyaXZlSXRlbShcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTW92ZURyaXZlSXRlbVNjaGVtYT5cbiAgICApOiBQcm9taXNlPFREcml2ZUl0ZW0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcImRyaXZlXCIsIFwiTW92ZURyaXZlSXRlbVwiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgR2V0RHJpdmVEZWxldGVJbXBhY3QoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEdldERyaXZlRGVsZXRlSW1wYWN0U2NoZW1hPlxuICAgICk6IFByb21pc2U8VERyaXZlRGVsZXRlSW1wYWN0PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJkcml2ZVwiLCBcIkdldERyaXZlRGVsZXRlSW1wYWN0XCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVEcml2ZUl0ZW0oXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIERlbGV0ZURyaXZlSXRlbVNjaGVtYT5cbiAgICApOiBQcm9taXNlPHsgaWQ6IHN0cmluZzsgZGVsZXRlZDogYm9vbGVhbjsgdG90YWxJdGVtczogbnVtYmVyIH0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcImRyaXZlXCIsIFwiRGVsZXRlRHJpdmVJdGVtXCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBSZXNvbHZlRHJpdmVEb3dubG9hZChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUmVzb2x2ZURyaXZlRG93bmxvYWRTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxUV2lraUZpbGVWaWV3UmVzb2x1dGlvbj4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbkNhbGw8YW55PihcImRyaXZlXCIsIFwiUmVzb2x2ZURyaXZlRG93bmxvYWRcIiwgcGF5bG9hZCk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VQYXRoID1cbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplU3RvcmFnZVBhdGgoU3RyaW5nKHJlc3VsdD8ucGF0aCB8fCByZXN1bHQ/LmZpbGVQYXRoIHx8IHJlc3VsdD8udXJsIHx8IFwiXCIpKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRVcmwgPSB0aGlzLnJlc29sdmVTdG9yYWdlVmlld1VybChzdG9yYWdlUGF0aCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVJZDogU3RyaW5nKHJlc3VsdD8uaXRlbUlkIHx8IHBheWxvYWQuaXRlbUlkIHx8IFwiXCIpLFxuICAgICAgICAgICAgcGF0aDogc3RvcmFnZVBhdGgsXG4gICAgICAgICAgICBmaWxlUGF0aDogcmVzb2x2ZWRVcmwgfHwgc3RvcmFnZVBhdGgsXG4gICAgICAgICAgICB1cmw6IHJlc29sdmVkVXJsIHx8IHN0b3JhZ2VQYXRoLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0RHJpdmVSb290cyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdERyaXZlUm9vdHNTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxURHJpdmVSb290W10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcImRyaXZlXCIsIFwiTGlzdERyaXZlUm9vdHNcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEVuc3VyZURyaXZlUHJvdmlkZXJDcmVkZW50aWFsKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBFbnN1cmVEcml2ZVByb3ZpZGVyQ3JlZGVudGlhbFNjaGVtYT5cbiAgICApOiBQcm9taXNlPHsgY3JlZGVudGlhbElkOiBzdHJpbmc7IGNvbm5lY3RlZDogYm9vbGVhbjsgcHJvdmlkZXI6IFREcml2ZVJvb3RQcm92aWRlciB9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJkcml2ZVwiLCBcIkVuc3VyZURyaXZlUHJvdmlkZXJDcmVkZW50aWFsXCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0RHJpdmVQcm92aWRlckZvbGRlcnMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3REcml2ZVByb3ZpZGVyRm9sZGVyc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPHtcbiAgICAgICAgY3JlZGVudGlhbElkOiBzdHJpbmc7XG4gICAgICAgIGNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICAgICAgY3VycmVudEZvbGRlcjogVERyaXZlUHJvdmlkZXJGb2xkZXI7XG4gICAgICAgIGZvbGRlcnM6IFREcml2ZVByb3ZpZGVyRm9sZGVyW107XG4gICAgfT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFwiZHJpdmVcIiwgXCJMaXN0RHJpdmVQcm92aWRlckZvbGRlcnNcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZURyaXZlUm9vdChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlRHJpdmVSb290U2NoZW1hPlxuICAgICk6IFByb21pc2U8VERyaXZlUm9vdD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFwiZHJpdmVcIiwgXCJDcmVhdGVEcml2ZVJvb3RcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZURyaXZlUm9vdChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlRHJpdmVSb290U2NoZW1hPlxuICAgICk6IFByb21pc2U8eyBpZDogc3RyaW5nOyBkZWxldGVkOiBib29sZWFuIH0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcImRyaXZlXCIsIFwiRGVsZXRlRHJpdmVSb290XCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0RHJpdmVSb290SXRlbXMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3REcml2ZVJvb3RJdGVtc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPHsgY3VycmVudEZvbGRlcjogVERyaXZlSXRlbTsgaXRlbXM6IFREcml2ZUl0ZW1bXSB9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJkcml2ZVwiLCBcIkxpc3REcml2ZVJvb3RJdGVtc1wiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdERyaXZlUm9vdFRyZWUoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3REcml2ZVJvb3RUcmVlU2NoZW1hPlxuICAgICk6IFByb21pc2U8VERyaXZlVHJlZU5vZGU+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcImRyaXZlXCIsIFwiTGlzdERyaXZlUm9vdFRyZWVcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFNlYXJjaERyaXZlUm9vdEl0ZW1zKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBTZWFyY2hEcml2ZVJvb3RJdGVtc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPFREcml2ZUl0ZW1bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFwiZHJpdmVcIiwgXCJTZWFyY2hEcml2ZVJvb3RJdGVtc1wiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlRHJpdmVSb290Rm9sZGVyKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVEcml2ZVJvb3RGb2xkZXJTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxURHJpdmVJdGVtPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJkcml2ZVwiLCBcIkNyZWF0ZURyaXZlUm9vdEZvbGRlclwiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBsb2FkRHJpdmVSb290RmlsZXMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwbG9hZERyaXZlUm9vdEZpbGVzU2NoZW1hPlxuICAgICk6IFByb21pc2U8VERyaXZlSXRlbVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJkcml2ZVwiLCBcIlVwbG9hZERyaXZlUm9vdEZpbGVzXCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBSZW5hbWVEcml2ZVJvb3RJdGVtKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBSZW5hbWVEcml2ZVJvb3RJdGVtU2NoZW1hPlxuICAgICk6IFByb21pc2U8VERyaXZlSXRlbT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFwiZHJpdmVcIiwgXCJSZW5hbWVEcml2ZVJvb3RJdGVtXCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBNb3ZlRHJpdmVSb290SXRlbShcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTW92ZURyaXZlUm9vdEl0ZW1TY2hlbWE+XG4gICAgKTogUHJvbWlzZTxURHJpdmVJdGVtPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJkcml2ZVwiLCBcIk1vdmVEcml2ZVJvb3RJdGVtXCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBHZXREcml2ZVJvb3REZWxldGVJbXBhY3QoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEdldERyaXZlUm9vdERlbGV0ZUltcGFjdFNjaGVtYT5cbiAgICApOiBQcm9taXNlPFREcml2ZURlbGV0ZUltcGFjdD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFwiZHJpdmVcIiwgXCJHZXREcml2ZVJvb3REZWxldGVJbXBhY3RcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZURyaXZlUm9vdEl0ZW0oXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIERlbGV0ZURyaXZlUm9vdEl0ZW1TY2hlbWE+XG4gICAgKTogUHJvbWlzZTx7IGlkOiBzdHJpbmc7IGRlbGV0ZWQ6IGJvb2xlYW47IHRvdGFsSXRlbXM6IG51bWJlciB9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJkcml2ZVwiLCBcIkRlbGV0ZURyaXZlUm9vdEl0ZW1cIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFJlYWREcml2ZVJvb3RGaWxlQ29udGVudChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUmVhZERyaXZlUm9vdEZpbGVDb250ZW50U2NoZW1hPlxuICAgICk6IFByb21pc2U8VERyaXZlRmlsZUNvbnRlbnQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcImRyaXZlXCIsIFwiUmVhZERyaXZlUm9vdEZpbGVDb250ZW50XCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBSZXNvbHZlRHJpdmVSb290RG93bmxvYWQoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFJlc29sdmVEcml2ZVJvb3REb3dubG9hZFNjaGVtYT5cbiAgICApOiBQcm9taXNlPFRXaWtpRmlsZVZpZXdSZXNvbHV0aW9uPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWN0aW9uQ2FsbDxhbnk+KFwiZHJpdmVcIiwgXCJSZXNvbHZlRHJpdmVSb290RG93bmxvYWRcIiwgcGF5bG9hZCk7XG4gICAgICAgIGNvbnN0IHJhd1VybCA9IFN0cmluZyhyZXN1bHQ/LnVybCB8fCBcIlwiKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFVybCA9IHJhd1VybC5zdGFydHNXaXRoKFwiZGF0YTpcIikgPyByYXdVcmwgOiB0aGlzLm5vcm1hbGl6ZVN0b3JhZ2VQYXRoKHJhd1VybCk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkVXJsID0gcmF3VXJsLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKVxuICAgICAgICAgICAgPyByYXdVcmxcbiAgICAgICAgICAgIDogKHRoaXMucmVzb2x2ZVN0b3JhZ2VWaWV3VXJsKG5vcm1hbGl6ZWRVcmwpIHx8IG5vcm1hbGl6ZWRVcmwpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICBmaWxlSWQ6IFN0cmluZyhyZXN1bHQ/Lml0ZW1JZCB8fCBwYXlsb2FkLml0ZW1JZCB8fCBcIlwiKSxcbiAgICAgICAgICAgIHBhdGg6IG5vcm1hbGl6ZWRVcmwsXG4gICAgICAgICAgICBmaWxlUGF0aDogcmVzb2x2ZWRVcmwgfHwgbm9ybWFsaXplZFVybCxcbiAgICAgICAgICAgIHVybDogcmVzb2x2ZWRVcmwgfHwgbm9ybWFsaXplZFVybCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlRXh0ZW5zaW9uKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENyZWF0ZUV4dGVuc2lvblNjaGVtYT4pOiBQcm9taXNlPFRFeHRlbnNpb24+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZXh0ZW5zaW9uJywgJ0NyZWF0ZUV4dGVuc2lvbicsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVFeHRlbnNpb24ocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlRXh0ZW5zaW9uU2NoZW1hPik6IFByb21pc2U8VEV4dGVuc2lvbj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdleHRlbnNpb24nLCAnVXBkYXRlRXh0ZW5zaW9uJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZUV4dGVuc2lvbihwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVFeHRlbnNpb25TY2hlbWE+KTogUHJvbWlzZTxURXh0ZW5zaW9uPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2V4dGVuc2lvbicsICdEZWxldGVFeHRlbnNpb24nLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdEV4dGVuc2lvbnMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdEV4dGVuc2lvbnNTY2hlbWE+KTogUHJvbWlzZTxURXh0ZW5zaW9uW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZXh0ZW5zaW9uJywgJ0xpc3RFeHRlbnNpb25zJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS1Bc3Npc3RhbnQtLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUFzc2lzdGFudChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVBc3Npc3RhbnRTY2hlbWE+KTogUHJvbWlzZTxUQXNzaXN0YW50PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2Fzc2lzdGFudCcsICdDcmVhdGVBc3Npc3RhbnQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlQXNzaXN0YW50KHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZUFzc2lzdGFudFNjaGVtYT4pOiBQcm9taXNlPFRBc3Npc3RhbnQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnYXNzaXN0YW50JywgJ1VwZGF0ZUFzc2lzdGFudCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVBc3Npc3RhbnQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlQXNzaXN0YW50U2NoZW1hPik6IFByb21pc2U8VEFzc2lzdGFudD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhc3Npc3RhbnQnLCAnRGVsZXRlQXNzaXN0YW50JywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RBc3Npc3RhbnRzKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RBc3Npc3RhbnRzU2NoZW1hPik6IFByb21pc2U8VEFzc2lzdGFudFtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2Fzc2lzdGFudCcsICdMaXN0QXNzaXN0YW50cycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBDcmVhdGVBc3Npc3RhbnRJbnN0cnVjdGlvbihwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVBc3Npc3RhbnRJbnN0cnVjdGlvblNjaGVtYT4pOiBQcm9taXNlPFRBc3Npc3RhbnRJbnN0cnVjdGlvbj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhc3Npc3RhbnQnLCAnQ3JlYXRlQXNzaXN0YW50SW5zdHJ1Y3Rpb24nLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdEFzc2lzdGFudEluc3RydWN0aW9ucyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0QXNzaXN0YW50SW5zdHJ1Y3Rpb25zU2NoZW1hPik6IFByb21pc2U8VEFzc2lzdGFudEluc3RydWN0aW9uW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnYXNzaXN0YW50JywgJ0xpc3RBc3Npc3RhbnRJbnN0cnVjdGlvbnMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlQXNzaXN0YW50Q29uc3RyYWludChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVBc3Npc3RhbnRDb25zdHJhaW50U2NoZW1hPik6IFByb21pc2U8VEFzc2lzdGFudENvbnN0cmFpbnQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnYXNzaXN0YW50JywgJ0NyZWF0ZUFzc2lzdGFudENvbnN0cmFpbnQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdEFzc2lzdGFudENvbnN0cmFpbnRzKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RBc3Npc3RhbnRDb25zdHJhaW50c1NjaGVtYT4pOiBQcm9taXNlPFRBc3Npc3RhbnRDb25zdHJhaW50W10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnYXNzaXN0YW50JywgJ0xpc3RBc3Npc3RhbnRDb25zdHJhaW50cycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBDcmVhdGVBc3Npc3RhbnREYXRhc291cmNlKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENyZWF0ZUFzc2lzdGFudERhdGFzb3VyY2VTY2hlbWE+KTogUHJvbWlzZTxUQXNzaXN0YW50RGF0YXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhc3Npc3RhbnQnLCAnQ3JlYXRlQXNzaXN0YW50RGF0YXNvdXJjZScsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVBc3Npc3RhbnREYXRhc291cmNlKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZUFzc2lzdGFudERhdGFzb3VyY2VTY2hlbWE+KTogUHJvbWlzZTxUQXNzaXN0YW50RGF0YXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhc3Npc3RhbnQnLCAnVXBkYXRlQXNzaXN0YW50RGF0YXNvdXJjZScsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVBc3Npc3RhbnREYXRhc291cmNlKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIERlbGV0ZUFzc2lzdGFudERhdGFzb3VyY2VTY2hlbWE+KTogUHJvbWlzZTxUQXNzaXN0YW50RGF0YXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhc3Npc3RhbnQnLCAnRGVsZXRlQXNzaXN0YW50RGF0YXNvdXJjZScsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0QXNzaXN0YW50RGF0YXNvdXJjZXMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdEFzc2lzdGFudERhdGFzb3VyY2VzU2NoZW1hPik6IFByb21pc2U8VEFzc2lzdGFudERhdGFzb3VyY2VbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhc3Npc3RhbnQnLCAnTGlzdEFzc2lzdGFudERhdGFzb3VyY2VzJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUFzc2lzdGFudFNraWxsKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENyZWF0ZUFzc2lzdGFudFNraWxsU2NoZW1hPik6IFByb21pc2U8VEFzc2lzdGFudFNraWxsPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2Fzc2lzdGFudCcsICdDcmVhdGVBc3Npc3RhbnRTa2lsbCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVBc3Npc3RhbnRTa2lsbChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGRhdGVBc3Npc3RhbnRTa2lsbFNjaGVtYT4pOiBQcm9taXNlPFRBc3Npc3RhbnRTa2lsbD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdhc3Npc3RhbnQnLCAnVXBkYXRlQXNzaXN0YW50U2tpbGwnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlQXNzaXN0YW50U2tpbGwocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlQXNzaXN0YW50U2tpbGxTY2hlbWE+KTogUHJvbWlzZTxUQXNzaXN0YW50U2tpbGw+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnYXNzaXN0YW50JywgJ0RlbGV0ZUFzc2lzdGFudFNraWxsJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RBc3Npc3RhbnRTa2lsbHMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdEFzc2lzdGFudFNraWxsc1NjaGVtYT4pOiBQcm9taXNlPFRBc3Npc3RhbnRTa2lsbFtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2Fzc2lzdGFudCcsICdMaXN0QXNzaXN0YW50U2tpbGxzJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUFzc2lzdGFudENoYW5uZWwocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlQXNzaXN0YW50Q2hhbm5lbFNjaGVtYT4pOiBQcm9taXNlPFRBc3Npc3RhbnRDaGFubmVsPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2Fzc2lzdGFudCcsICdDcmVhdGVBc3Npc3RhbnRDaGFubmVsJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZUFzc2lzdGFudENoYW5uZWwocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlQXNzaXN0YW50Q2hhbm5lbFNjaGVtYT4pOiBQcm9taXNlPFRBc3Npc3RhbnRDaGFubmVsPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2Fzc2lzdGFudCcsICdVcGRhdGVBc3Npc3RhbnRDaGFubmVsJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZUFzc2lzdGFudENoYW5uZWwocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlQXNzaXN0YW50Q2hhbm5lbFNjaGVtYT4pOiBQcm9taXNlPFRBc3Npc3RhbnRDaGFubmVsPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2Fzc2lzdGFudCcsICdEZWxldGVBc3Npc3RhbnRDaGFubmVsJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RBc3Npc3RhbnRDaGFubmVscyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0QXNzaXN0YW50Q2hhbm5lbHNTY2hlbWE+KTogUHJvbWlzZTxUQXNzaXN0YW50Q2hhbm5lbFtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2Fzc2lzdGFudCcsICdMaXN0QXNzaXN0YW50Q2hhbm5lbHMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLURhdGFzb3VyY2VzLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBhc3luYyBDcmVhdGVEYXRhc291cmNlKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENyZWF0ZURhdGFzb3VyY2VTY2hlbWE+KTogUHJvbWlzZTxURGF0YXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdkYXRhLXNvdXJjZScsICdDcmVhdGVEYXRhc291cmNlJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZURhdGFzb3VyY2UocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlRGF0YXNvdXJjZVNjaGVtYT4pOiBQcm9taXNlPFREYXRhc291cmNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2RhdGEtc291cmNlJywgJ1VwZGF0ZURhdGFzb3VyY2UnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlRGF0YXNvdXJjZShwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVEYXRhc291cmNlU2NoZW1hPik6IFByb21pc2U8VERhdGFzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnZGF0YS1vdXJjZScsICdEZWxldGVEYXRhc291cmNlJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3REYXRhc291cmNlcyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0RGF0YXNvdXJjZXNTY2hlbWE+KTogUHJvbWlzZTxURGF0YXNvdXJjZVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2RhdGEtc291cmNlJywgJ0xpc3REYXRhc291cmNlcycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Ta2lsbHMtLS0tLS0tLS0tLS0tLS0tXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZVNraWxsKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENyZWF0ZVNraWxsU2NoZW1hPik6IFByb21pc2U8VFNraWxsPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ3NraWxsJywgJ0NyZWF0ZVNraWxsJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RTa2lsbHMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdFNraWxsc1NjaGVtYT4pOiBQcm9taXNlPFRTa2lsbFtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ3NraWxsJywgJ0xpc3RTa2lsbHMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlU2tpbGwocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlU2tpbGxTY2hlbWE+KTogUHJvbWlzZTxUU2tpbGw+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnc2tpbGwnLCAnVXBkYXRlU2tpbGwnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlU2tpbGwocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlU2tpbGxTY2hlbWE+KTogUHJvbWlzZTxUU2tpbGw+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnc2tpbGwnLCAnRGVsZXRlU2tpbGwnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ2hhbm5lbHMtLS0tLS0tLS0tLS0tLS0tXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUNoYW5uZWwocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlQ2hhbm5lbFNjaGVtYT4pOiBQcm9taXNlPFRDaGFubmVsPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2NoYW5uZWwnLCAnQ3JlYXRlQ2hhbm5lbCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0Q2hhbm5lbHMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdENoYW5uZWxzU2NoZW1hPik6IFByb21pc2U8VENoYW5uZWxbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdjaGFubmVsJywgJ0xpc3RDaGFubmVscycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVDaGFubmVsKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZUNoYW5uZWxTY2hlbWE+KTogUHJvbWlzZTxUQ2hhbm5lbD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdjaGFubmVsJywgJ1VwZGF0ZUNoYW5uZWwnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlQ2hhbm5lbChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVDaGFubmVsU2NoZW1hPik6IFByb21pc2U8VENoYW5uZWw+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnY2hhbm5lbCcsICdEZWxldGVDaGFubmVsJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUtub3dsZWRnZS0tLS0tLS0tLS0tLS0tLS1cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlS25vd2xlZGdlKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENyZWF0ZUtub3dsZWRnZVNjaGVtYT4pOiBQcm9taXNlPFRLbm93bGVkZ2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgna25vd2xlZGdlJywgJ0NyZWF0ZUtub3dsZWRnZScsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0S25vd2xlZGdlcyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0S25vd2xlZGdlc1NjaGVtYT4pOiBQcm9taXNlPFRLbm93bGVkZ2VbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdrbm93bGVkZ2UnLCAnTGlzdEtub3dsZWRnZXMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlS25vd2xlZGdlKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZUtub3dsZWRnZVNjaGVtYT4pOiBQcm9taXNlPFRLbm93bGVkZ2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgna25vd2xlZGdlJywgJ1VwZGF0ZUtub3dsZWRnZScsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVLbm93bGVkZ2UocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlS25vd2xlZGdlU2NoZW1hPik6IFByb21pc2U8VEtub3dsZWRnZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdrbm93bGVkZ2UnLCAnRGVsZXRlS25vd2xlZGdlJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tV09SS0VSLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZVdvcmtlcihwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVXb3JrZXJTY2hlbWE+KTogUHJvbWlzZTxUV29ya2VyPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ3dvcmtlcicsICdDcmVhdGVXb3JrZXInLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlV29ya2VyKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZVdvcmtlclNjaGVtYT4pOiBQcm9taXNlPFRXb3JrZXI+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnd29ya2VyJywgJ1VwZGF0ZVdvcmtlcicsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVXb3JrZXIocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlV29ya2VyU2NoZW1hPik6IFByb21pc2U8VFdvcmtlcj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCd3b3JrZXInLCAnRGVsZXRlV29ya2VyJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFB1Ymxpc2hXb3JrZXJUb01hcmtldFN0b3JlKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFB1Ymxpc2hXb3JrZXJUb01hcmtldFN0b3JlU2NoZW1hPik6IFByb21pc2U8VFB1Ymxpc2hXb3JrZXJUb01hcmtldFN0b3JlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ21hcmtldC1zdG9yZScsICdQdWJsaXNoV29ya2VyVG9NYXJrZXRTdG9yZScsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0V29ya2VycyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0V29ya2Vyc1NjaGVtYT4pOiBQcm9taXNlPFRXb3JrZXJbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCd3b3JrZXInLCAnTGlzdFdvcmtlcnMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlV29ya2VyVG9waWMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlV29ya2VyVG9waWNTY2hlbWE+KTogUHJvbWlzZTxUV29ya2VyVG9waWM+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnd29ya2VyJywgJ0NyZWF0ZVdvcmtlclRvcGljJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZVdvcmtlclRvcGljKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZVdvcmtlclRvcGljU2NoZW1hPik6IFByb21pc2U8VFdvcmtlclRvcGljPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ3dvcmtlcicsICdVcGRhdGVXb3JrZXJUb3BpYycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVXb3JrZXJUb3BpYyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVXb3JrZXJUb3BpY1NjaGVtYT4pOiBQcm9taXNlPFRXb3JrZXJUb3BpYz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCd3b3JrZXInLCAnRGVsZXRlV29ya2VyVG9waWMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdFdvcmtlclRvcGljcyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0V29ya2VyVG9waWNzU2NoZW1hPik6IFByb21pc2U8VFdvcmtlclRvcGljW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnd29ya2VyJywgJ0xpc3RXb3JrZXJUb3BpY3MnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdE1hcmtldFN0b3JlSXRlbXMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdE1hcmtldFN0b3JlSXRlbXNTY2hlbWE+KTogUHJvbWlzZTxUTWFya2V0U3RvcmVJdGVtW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnbWFya2V0LXN0b3JlJywgJ0xpc3RNYXJrZXRTdG9yZUl0ZW1zJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEdldE1hcmtldFN0b3JlSXRlbShwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBHZXRNYXJrZXRTdG9yZUl0ZW1TY2hlbWE+KTogUHJvbWlzZTxUTWFya2V0U3RvcmVJdGVtIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdtYXJrZXQtc3RvcmUnLCAnR2V0TWFya2V0U3RvcmVJdGVtJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLVRvcGljcy0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBhc3luYyBDcmVhdGVUb3BpYyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVUb3BpY1NjaGVtYT4pOiBQcm9taXNlPFRUb3BpYz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCd0b3BpYycsICdDcmVhdGVUb3BpYycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVUb3BpYyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGRhdGVUb3BpY1NjaGVtYT4pOiBQcm9taXNlPFRUb3BpYz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCd0b3BpYycsICdVcGRhdGVUb3BpYycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVUb3BpYyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVUb3BpY1NjaGVtYT4pOiBQcm9taXNlPFRUb3BpYz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCd0b3BpYycsICdEZWxldGVUb3BpYycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0VG9waWNzKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RUb3BpY3NTY2hlbWE+KTogUHJvbWlzZTxUVG9waWNbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCd0b3BpYycsICdMaXN0VG9waWNzJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEVuaGFuY2VUb3BpYyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBFbmhhbmNlVG9waWNTY2hlbWE+KTogUHJvbWlzZTxURW5oYW5jZVRvcGljPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ3RvcGljJywgJ0VuaGFuY2VUb3BpYycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlSW5wdXQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlSW5wdXRTY2hlbWE+KTogUHJvbWlzZTxUSW5wdXQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnaW5wdXQtb3V0cHV0JywgJ0NyZWF0ZUlucHV0JywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZUlucHV0KHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZUlucHV0U2NoZW1hPik6IFByb21pc2U8VElucHV0PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2lucHV0LW91dHB1dCcsICdVcGRhdGVJbnB1dCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVJbnB1dChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVJbnB1dFNjaGVtYT4pOiBQcm9taXNlPFRJbnB1dD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdpbnB1dC1vdXRwdXQnLCAnRGVsZXRlSW5wdXQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdElucHV0cyhwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0SW5wdXRTY2hlbWE+KTogUHJvbWlzZTxUSW5wdXRbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdpbnB1dC1vdXRwdXQnLCAnTGlzdElucHV0cycsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBDcmVhdGVUZWFtKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENyZWF0ZVRlYW1TY2hlbWE+KTogUHJvbWlzZTxUVGVhbT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCd0ZWFtJywgJ0NyZWF0ZVRlYW0nLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdFRlYW1zKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RUZWFtc1NjaGVtYT4pOiBQcm9taXNlPFRUZWFtW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgndGVhbScsICdMaXN0VGVhbXMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlVGVhbShwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGRhdGVUZWFtU2NoZW1hPik6IFByb21pc2U8VFRlYW0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgndGVhbScsICdVcGRhdGVUZWFtJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZVRlYW0ocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlVGVhbVNjaGVtYT4pOiBQcm9taXNlPFRUZWFtPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ3RlYW0nLCAnRGVsZXRlVGVhbScsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBTYXZlQ2hhdChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBTYXZlQ2hhdFNjaGVtYT4pOiBQcm9taXNlPFRDaGF0PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2NoYXQnLCAnU2F2ZUNoYXQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlQ2hhdEJ5SWQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlQ2hhdEJ5SWRTY2hlbWE+KTogUHJvbWlzZTxUQ2hhdD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdjaGF0JywgJ0RlbGV0ZUNoYXRCeUlkJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEdldENoYXRCeUlkKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEdldENoYXRCeUlkU2NoZW1hPik6IFByb21pc2U8VENoYXQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnY2hhdCcsICdHZXRDaGF0QnlJZCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBHZXRDaGF0c0J5VXNlcklkKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEdldENoYXRzQnlVc2VySWRTY2hlbWE+KTogUHJvbWlzZTxUQ2hhdFtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2NoYXQnLCAnR2V0Q2hhdHNCeVVzZXJJZCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBTYXZlTWVzc2FnZXMocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgU2F2ZU1lc3NhZ2VzU2NoZW1hPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdjaGF0JywgJ1NhdmVNZXNzYWdlcycsIHBheWxvYWQpO1xuICAgIH1cblxuXG4gICAgcHVibGljIGFzeW5jIEdldE1lc3NhZ2VzQnlDaGF0SWQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgR2V0TWVzc2FnZXNCeUNoYXRJZFNjaGVtYT4pOiBQcm9taXNlPFRDaGF0W10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnY2hhdCcsICdHZXRNZXNzYWdlc0J5Q2hhdElkJywgcGF5bG9hZCk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgYXN5bmMgR2V0TWVzc2FnZUJ5SWQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgR2V0TWVzc2FnZUJ5SWRTY2hlbWE+KTogUHJvbWlzZTxUQ2hhdFtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2NoYXQnLCAnR2V0TWVzc2FnZUJ5SWQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVm90ZU1lc3NhZ2UocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVm90ZU1lc3NhZ2VTY2hlbWE+KTogUHJvbWlzZTxUQ2hhdFtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2NoYXQnLCAnVm90ZU1lc3NhZ2UnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgR2V0Vm90ZXNCeUNoYXRJZChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBHZXRWb3Rlc0J5Q2hhdElkU2NoZW1hPik6IFByb21pc2U8VENoYXRbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdjaGF0JywgJ0dldFZvdGVzQnlDaGF0SWQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlRG9jdW1lbnRzQnlJZEFmdGVyVGltZXN0YW1wKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIERlbGV0ZURvY3VtZW50c0J5SWRBZnRlclRpbWVzdGFtcFNjaGVtYT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnY2hhdCcsICdEZWxldGVEb2N1bWVudHNCeUlkQWZ0ZXJUaW1lc3RhbXAnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgU2F2ZVN1Z2dlc3Rpb25zKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFNhdmVTdWdnZXN0aW9uc1NjaGVtYT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnY2hhdCcsICdTYXZlU3VnZ2VzdGlvbnMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgR2V0U3VnZ2VzdGlvbnNCeURvY3VtZW50SWQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgR2V0U3VnZ2VzdGlvbnNCeURvY3VtZW50SWRTY2hlbWE+KTogUHJvbWlzZTxUQ2hhdFtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2NoYXQnLCAnR2V0U3VnZ2VzdGlvbnNCeURvY3VtZW50SWQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlTWVzc2FnZXNCeUNoYXRJZEFmdGVyVGltZXN0YW1wKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIERlbGV0ZU1lc3NhZ2VzQnlDaGF0SWRBZnRlclRpbWVzdGFtcFNjaGVtYT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnY2hhdCcsICdEZWxldGVNZXNzYWdlc0J5Q2hhdElkQWZ0ZXJUaW1lc3RhbXAnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlQ2hhdFZpc2libGl0eUJ5SWQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlQ2hhdFZpc2libGl0eUJ5SWRTY2hlbWE+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2NoYXQnLCAnVXBkYXRlQ2hhdFZpc2libGl0eUJ5SWQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlQ2hhdExhc3RDb250ZXh0QnlJZChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGRhdGVDaGF0TGFzdENvbnRleHRCeUlkU2NoZW1hPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdjaGF0JywgJ1VwZGF0ZUNoYXRMYXN0Q29udGV4dEJ5SWQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgR2V0TWVzc2FnZUNvdW50QnlVc2VySWQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgR2V0TWVzc2FnZUNvdW50QnlVc2VySWRTY2hlbWE+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnY2hhdCcsICdHZXRNZXNzYWdlQ291bnRCeVVzZXJJZCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBDcmVhdGVTdHJlYW1JZChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVTdHJlYW1JZFNjaGVtYT4pOiBQcm9taXNlPFRTdHJlYW1JZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdjaGF0JywgJ0NyZWF0ZVN0cmVhbUlkJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEdldFN0cmVhbUlkc0J5Q2hhdElkKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEdldFN0cmVhbUlkc0J5Q2hhdElkU2NoZW1hPik6IFByb21pc2U8VFN0cmVhbUlkW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnY2hhdCcsICdHZXRTdHJlYW1JZHNCeUNoYXRJZCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBTYXZlRG9jdW1lbnQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgU2F2ZURvY3VtZW50U2NoZW1hPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdjaGF0JywgJ1NhdmVEb2N1bWVudCcsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBHZXREb2N1bWVudEJ5SWQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgR2V0RG9jdW1lbnRCeUlkU2NoZW1hPik6IFByb21pc2U8VERvY3VtZW50PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2NoYXQnLCAnR2V0RG9jdW1lbnRCeUlkJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEdldERvY3VtZW50c0J5SWQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgR2V0RG9jdW1lbnRzQnlJZFNjaGVtYT4pOiBQcm9taXNlPFREb2N1bWVudFtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2NoYXQnLCAnR2V0RG9jdW1lbnRzQnlJZCcsIHBheWxvYWQpO1xuICAgIH1cblxuXG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlQ29tbWFuZChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVDb21tYW5kU2NoZW1hPik6IFByb21pc2U8VENvbW1hbmQ+IHtcbiAgICAgICAgLyogIGRlYnVnZ2VyXG4gICAgICAgICAgaWYgKCB0eXBlb2YgcGF5bG9hZC5pbnB1dHMgPT09ICdvYmplY3QnICkge1xuICAgICAgICAgICAgICBwYXlsb2FkLmlucHV0cyA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQuaW5wdXRzKSBhcyBhbnk7XG4gICAgICAgICAgfSAqL1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKCdjb21tYW5kJywgJ0NyZWF0ZUNvbW1hbmQnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdENvbW1hbmRzKHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RDb21tYW5kc1NjaGVtYT4pOiBQcm9taXNlPFRDb21tYW5kW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnY29tbWFuZCcsICdMaXN0Q29tbWFuZHMnLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlQ29tbWFuZChwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGRhdGVDb21tYW5kU2NoZW1hPik6IFByb21pc2U8VENvbW1hbmQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbCgnY29tbWFuZCcsICdVcGRhdGVDb21tYW5kJywgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZUNvbW1hbmQocGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlQ29tbWFuZFNjaGVtYT4pOiBQcm9taXNlPFRDb21tYW5kPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoJ2NvbW1hbmQnLCAnRGVsZXRlQ29tbWFuZCcsIHBheWxvYWQpO1xuICAgIH1cblxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS1Db2xsZWN0aW9ucy0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZURhdGFNb2RlbChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlRGF0YU1vZGVsU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiQ3JlYXRlRGF0YU1vZGVsXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZURhdGFNb2RlbChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlRGF0YU1vZGVsU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiVXBkYXRlRGF0YU1vZGVsXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZURhdGFNb2RlbChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlRGF0YU1vZGVsU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiRGVsZXRlRGF0YU1vZGVsXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEdldERhdGFNb2RlbEJ5SWQoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEdldERhdGFNb2RlbEJ5SWRTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJHZXREYXRhTW9kZWxCeUlkXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEV4cG9ydERhdGFNb2RlbChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRXhwb3J0RGF0YU1vZGVsU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiRXhwb3J0RGF0YU1vZGVsXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEltcG9ydERhdGFNb2RlbChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgSW1wb3J0RGF0YU1vZGVsU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiSW1wb3J0RGF0YU1vZGVsXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3REYXRhTW9kZWxzKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0RGF0YU1vZGVsc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkxpc3REYXRhTW9kZWxzXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFJlc3RvcmVEYXRhTW9kZWwoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFJlc3RvcmVEYXRhTW9kZWxTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJSZXN0b3JlRGF0YU1vZGVsXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEhhcmREZWxldGVEYXRhTW9kZWwoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEhhcmREZWxldGVEYXRhTW9kZWxTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJIYXJkRGVsZXRlRGF0YU1vZGVsXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUNvbGxlY3Rpb24oXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENyZWF0ZUNvbGxlY3Rpb25TY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJDcmVhdGVDb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RDb2xsZWN0aW9ucyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdENvbGxlY3Rpb25zU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiTGlzdENvbGxlY3Rpb25zXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEdldENvbGxlY3Rpb25CeUlkKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBHZXRDb2xsZWN0aW9uQnlJZFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkdldENvbGxlY3Rpb25CeUlkXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlUmVjb3JkKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVSZWNvcmRTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJDcmVhdGVSZWNvcmRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBsb2FkQ29sbGVjdGlvbkZpbGUoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwbG9hZENvbGxlY3Rpb25GaWxlU2NoZW1hPlxuICAgICk6IFByb21pc2U8VFVwbG9hZGVkRmlsZT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbkNhbGw8YW55PihcImNvbGxlY3Rpb25cIiwgXCJVcGxvYWRDb2xsZWN0aW9uRmlsZVwiLCBwYXlsb2FkKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZVBhdGggPVxuICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVTdG9yYWdlUGF0aChTdHJpbmcocmVzdWx0Py5wYXRoIHx8IHJlc3VsdD8uZmlsZVBhdGggfHwgcmVzdWx0Py51cmwgfHwgXCJcIikpO1xuICAgICAgICBjb25zdCByZXNvbHZlZFVybCA9IHRoaXMucmVzb2x2ZVN0b3JhZ2VWaWV3VXJsKHN0b3JhZ2VQYXRoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgZmlsZUlkOiBTdHJpbmcocmVzdWx0Py5pdGVtSWQgfHwgcmVzdWx0Py5maWxlSWQgfHwgcmVzdWx0Py5pZCB8fCBwYXlsb2FkLml0ZW1JZCB8fCBcIlwiKSxcbiAgICAgICAgICAgIHBhdGg6IHN0b3JhZ2VQYXRoLFxuICAgICAgICAgICAgZmlsZVBhdGg6IHJlc29sdmVkVXJsIHx8IHN0b3JhZ2VQYXRoLFxuICAgICAgICAgICAgdXJsOiByZXNvbHZlZFVybCB8fCBzdG9yYWdlUGF0aCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUmVzb2x2ZUNvbGxlY3Rpb25GaWxlVmlldyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUmVzb2x2ZUNvbGxlY3Rpb25GaWxlVmlld1NjaGVtYT5cbiAgICApOiBQcm9taXNlPFRXaWtpRmlsZVZpZXdSZXNvbHV0aW9uPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWN0aW9uQ2FsbDxhbnk+KFwiY29sbGVjdGlvblwiLCBcIlJlc29sdmVDb2xsZWN0aW9uRmlsZVZpZXdcIiwgcGF5bG9hZCk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VQYXRoID1cbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplU3RvcmFnZVBhdGgoU3RyaW5nKHJlc3VsdD8ucGF0aCB8fCByZXN1bHQ/LmZpbGVQYXRoIHx8IHJlc3VsdD8udXJsIHx8IFwiXCIpKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRVcmwgPSB0aGlzLnJlc29sdmVTdG9yYWdlVmlld1VybChzdG9yYWdlUGF0aCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVJZDogU3RyaW5nKHJlc3VsdD8uZmlsZUlkIHx8IHJlc3VsdD8uaXRlbUlkIHx8IHBheWxvYWQuaXRlbUlkIHx8IFwiXCIpLFxuICAgICAgICAgICAgcGF0aDogc3RvcmFnZVBhdGgsXG4gICAgICAgICAgICBmaWxlUGF0aDogcmVzb2x2ZWRVcmwgfHwgc3RvcmFnZVBhdGgsXG4gICAgICAgICAgICB1cmw6IHJlc29sdmVkVXJsIHx8IHN0b3JhZ2VQYXRoLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBHZXRSZWNvcmRCeUlkKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBHZXRSZWNvcmRCeUlkU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiR2V0UmVjb3JkQnlJZFwiLFxuICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgcHVibGljIGFzeW5jIExpc3RSZWNvcmRzKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0UmVjb3Jkc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPHtcbiAgICAgICAgdG90YWw6IG51bWJlcjtcbiAgICAgICAgcmVjb3JkczogYW55W107XG4gICAgfT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkxpc3RSZWNvcmRzXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZVJlY29yZChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlUmVjb3JkU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiVXBkYXRlUmVjb3JkXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZVJlY29yZChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlUmVjb3JkU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiRGVsZXRlUmVjb3JkXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgYXN5bmMgUmVzdG9yZVJlY29yZChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUmVzdG9yZVJlY29yZFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIlJlc3RvcmVSZWNvcmRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVXBzZXJ0UmVjb3JkKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcHNlcnRSZWNvcmRTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJVcHNlcnRSZWNvcmRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQnVsa0NyZWF0ZVJlY29yZHMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEJ1bGtDcmVhdGVSZWNvcmRzU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiQnVsa0NyZWF0ZVJlY29yZHNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRW5zdXJlQWlydGFibGVJbXBvcnRDcmVkZW50aWFsKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBFbnN1cmVBaXJ0YWJsZUltcG9ydENyZWRlbnRpYWxTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJFbnN1cmVBaXJ0YWJsZUltcG9ydENyZWRlbnRpYWxcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdEFpcnRhYmxlSW1wb3J0U291cmNlcyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdEFpcnRhYmxlSW1wb3J0U291cmNlc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkxpc3RBaXJ0YWJsZUltcG9ydFNvdXJjZXNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUHJldmlld0FpcnRhYmxlSW1wb3J0KFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBQcmV2aWV3QWlydGFibGVJbXBvcnRTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJQcmV2aWV3QWlydGFibGVJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUnVuQWlydGFibGVJbXBvcnQoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFJ1bkFpcnRhYmxlSW1wb3J0U2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiUnVuQWlydGFibGVJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRW5zdXJlTGluZWFySW1wb3J0Q3JlZGVudGlhbChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRW5zdXJlTGluZWFySW1wb3J0Q3JlZGVudGlhbFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkVuc3VyZUxpbmVhckltcG9ydENyZWRlbnRpYWxcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdExpbmVhckltcG9ydFNvdXJjZXMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RMaW5lYXJJbXBvcnRTb3VyY2VzU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiTGlzdExpbmVhckltcG9ydFNvdXJjZXNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUHJldmlld0xpbmVhckltcG9ydChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUHJldmlld0xpbmVhckltcG9ydFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIlByZXZpZXdMaW5lYXJJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUnVuTGluZWFySW1wb3J0KFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBSdW5MaW5lYXJJbXBvcnRTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJSdW5MaW5lYXJJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRW5zdXJlR21haWxJbXBvcnRDcmVkZW50aWFsKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBFbnN1cmVHbWFpbEltcG9ydENyZWRlbnRpYWxTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJFbnN1cmVHbWFpbEltcG9ydENyZWRlbnRpYWxcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRW5zdXJlR2l0aHViSW1wb3J0Q3JlZGVudGlhbChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRW5zdXJlR2l0aHViSW1wb3J0Q3JlZGVudGlhbFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkVuc3VyZUdpdGh1YkltcG9ydENyZWRlbnRpYWxcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdEdtYWlsSW1wb3J0U291cmNlcyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdEdtYWlsSW1wb3J0U291cmNlc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkxpc3RHbWFpbEltcG9ydFNvdXJjZXNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdEdpdGh1YkltcG9ydFNvdXJjZXMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RHaXRodWJJbXBvcnRTb3VyY2VzU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiTGlzdEdpdGh1YkltcG9ydFNvdXJjZXNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUHJldmlld0dtYWlsSW1wb3J0KFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBQcmV2aWV3R21haWxJbXBvcnRTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJQcmV2aWV3R21haWxJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUHJldmlld0NzdkltcG9ydChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUHJldmlld0NzdkltcG9ydFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIlByZXZpZXdDc3ZJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUHJldmlld0dpdGh1YkltcG9ydChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUHJldmlld0dpdGh1YkltcG9ydFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIlByZXZpZXdHaXRodWJJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUnVuR21haWxJbXBvcnQoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFJ1bkdtYWlsSW1wb3J0U2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiUnVuR21haWxJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUnVuQ3N2SW1wb3J0KFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBSdW5Dc3ZJbXBvcnRTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJSdW5Dc3ZJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUnVuR2l0aHViSW1wb3J0KFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBSdW5HaXRodWJJbXBvcnRTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJSdW5HaXRodWJJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRW5zdXJlTm90aW9uSW1wb3J0Q3JlZGVudGlhbChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRW5zdXJlTm90aW9uSW1wb3J0Q3JlZGVudGlhbFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkVuc3VyZU5vdGlvbkltcG9ydENyZWRlbnRpYWxcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdE5vdGlvbkltcG9ydFNvdXJjZXMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3ROb3Rpb25JbXBvcnRTb3VyY2VzU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiTGlzdE5vdGlvbkltcG9ydFNvdXJjZXNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUHJldmlld05vdGlvbkltcG9ydChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUHJldmlld05vdGlvbkltcG9ydFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIlByZXZpZXdOb3Rpb25JbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUnVuTm90aW9uSW1wb3J0KFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBSdW5Ob3Rpb25JbXBvcnRTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJSdW5Ob3Rpb25JbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRW5zdXJlSmlyYUltcG9ydENyZWRlbnRpYWwoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEVuc3VyZUppcmFJbXBvcnRDcmVkZW50aWFsU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiRW5zdXJlSmlyYUltcG9ydENyZWRlbnRpYWxcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdEppcmFJbXBvcnRTb3VyY2VzKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0SmlyYUltcG9ydFNvdXJjZXNTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJMaXN0SmlyYUltcG9ydFNvdXJjZXNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUHJldmlld0ppcmFJbXBvcnQoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFByZXZpZXdKaXJhSW1wb3J0U2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiUHJldmlld0ppcmFJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUnVuSmlyYUltcG9ydChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUnVuSmlyYUltcG9ydFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIlJ1bkppcmFJbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRW5zdXJlVHJlbGxvSW1wb3J0Q3JlZGVudGlhbChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRW5zdXJlVHJlbGxvSW1wb3J0Q3JlZGVudGlhbFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkVuc3VyZVRyZWxsb0ltcG9ydENyZWRlbnRpYWxcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQ29ubmVjdFRyZWxsb0ltcG9ydENyZWRlbnRpYWwoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENvbm5lY3RUcmVsbG9JbXBvcnRDcmVkZW50aWFsU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiQ29ubmVjdFRyZWxsb0ltcG9ydENyZWRlbnRpYWxcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdFRyZWxsb0ltcG9ydFNvdXJjZXMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RUcmVsbG9JbXBvcnRTb3VyY2VzU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiTGlzdFRyZWxsb0ltcG9ydFNvdXJjZXNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUHJldmlld1RyZWxsb0ltcG9ydChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUHJldmlld1RyZWxsb0ltcG9ydFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIlByZXZpZXdUcmVsbG9JbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUnVuVHJlbGxvSW1wb3J0KFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBSdW5UcmVsbG9JbXBvcnRTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJSdW5UcmVsbG9JbXBvcnRcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQnVsa1VwZGF0ZVJlY29yZHMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEJ1bGtVcGRhdGVSZWNvcmRzU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiQnVsa1VwZGF0ZVJlY29yZHNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQnVsa0RlbGV0ZVJlY29yZHMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEJ1bGtEZWxldGVSZWNvcmRzU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiQnVsa0RlbGV0ZVJlY29yZHNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIER1cGxpY2F0ZVJlY29yZChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRHVwbGljYXRlUmVjb3JkU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiRHVwbGljYXRlUmVjb3JkXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFF1ZXJ5UmVjb3JkcyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgUXVlcnlSZWNvcmRzU2NoZW1hPlxuICAgICk6IFByb21pc2U8e1xuICAgICAgICB0b3RhbDogbnVtYmVyO1xuICAgICAgICByZWNvcmRzOiBhbnlbXTtcbiAgICB9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiUXVlcnlSZWNvcmRzXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFNlYXJjaFJlY29yZHMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFNlYXJjaFJlY29yZHNTY2hlbWE+XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHRvdGFsOiBudW1iZXI7XG4gICAgICAgIHJlY29yZHM6IGFueVtdO1xuICAgIH0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJTZWFyY2hSZWNvcmRzXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENvdW50UmVjb3JkcyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ291bnRSZWNvcmRzU2NoZW1hPlxuICAgICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiQ291bnRSZWNvcmRzXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEdyb3VwUmVjb3JkcyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgR3JvdXBSZWNvcmRzU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJHcm91cFJlY29yZHNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQWdncmVnYXRlUmVjb3JkcyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQWdncmVnYXRlUmVjb3Jkc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiQWdncmVnYXRlUmVjb3Jkc1wiLFxuICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEaXN0aW5jdEZpZWxkVmFsdWVzKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEaXN0aW5jdEZpZWxkVmFsdWVzU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJEaXN0aW5jdEZpZWxkVmFsdWVzXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUNvbGxlY3Rpb25GaWVsZChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlQ29sbGVjdGlvbkZpZWxkU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiQ3JlYXRlQ29sbGVjdGlvbkZpZWxkXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZUNvbGxlY3Rpb25GaWVsZChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlQ29sbGVjdGlvbkZpZWxkU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiVXBkYXRlQ29sbGVjdGlvbkZpZWxkXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZUNvbGxlY3Rpb25GaWVsZChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlQ29sbGVjdGlvbkZpZWxkU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiRGVsZXRlQ29sbGVjdGlvbkZpZWxkXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RDb2xsZWN0aW9uQXV0b21hdGlvblJ1bGVzKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0Q29sbGVjdGlvbkF1dG9tYXRpb25SdWxlc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPFRDb2xsZWN0aW9uQXV0b21hdGlvblJ1bGVbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkxpc3RDb2xsZWN0aW9uQXV0b21hdGlvblJ1bGVzXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUNvbGxlY3Rpb25BdXRvbWF0aW9uUnVsZShcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlQ29sbGVjdGlvbkF1dG9tYXRpb25SdWxlU2NoZW1hPlxuICAgICk6IFByb21pc2U8VENvbGxlY3Rpb25BdXRvbWF0aW9uUnVsZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkNyZWF0ZUNvbGxlY3Rpb25BdXRvbWF0aW9uUnVsZVwiLFxuICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVDb2xsZWN0aW9uQXV0b21hdGlvblJ1bGUoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZUNvbGxlY3Rpb25BdXRvbWF0aW9uUnVsZVNjaGVtYT5cbiAgICApOiBQcm9taXNlPFRDb2xsZWN0aW9uQXV0b21hdGlvblJ1bGU+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJVcGRhdGVDb2xsZWN0aW9uQXV0b21hdGlvblJ1bGVcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlQ29sbGVjdGlvbkF1dG9tYXRpb25SdWxlKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVDb2xsZWN0aW9uQXV0b21hdGlvblJ1bGVTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJEZWxldGVDb2xsZWN0aW9uQXV0b21hdGlvblJ1bGVcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdENvbGxlY3Rpb25WaWV3cyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdENvbGxlY3Rpb25WaWV3c1NjaGVtYT5cbiAgICApOiBQcm9taXNlPFRDb2xsZWN0aW9uVmlld1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiTGlzdENvbGxlY3Rpb25WaWV3c1wiLFxuICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBDcmVhdGVDb2xsZWN0aW9uVmlldyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlQ29sbGVjdGlvblZpZXdTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxUQ29sbGVjdGlvblZpZXc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJDcmVhdGVDb2xsZWN0aW9uVmlld1wiLFxuICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVDb2xsZWN0aW9uVmlldyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgVXBkYXRlQ29sbGVjdGlvblZpZXdTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxUQ29sbGVjdGlvblZpZXc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJVcGRhdGVDb2xsZWN0aW9uVmlld1wiLFxuICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVDb2xsZWN0aW9uVmlldyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlQ29sbGVjdGlvblZpZXdTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJEZWxldGVDb2xsZWN0aW9uVmlld1wiLFxuICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBMaXN0Q29sbGVjdGlvbkJ1dHRvbnMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RDb2xsZWN0aW9uQnV0dG9uc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPFRDb2xsZWN0aW9uQnV0dG9uW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJMaXN0Q29sbGVjdGlvbkJ1dHRvbnNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlQ29sbGVjdGlvbkJ1dHRvbihcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlQ29sbGVjdGlvbkJ1dHRvblNjaGVtYT5cbiAgICApOiBQcm9taXNlPFRDb2xsZWN0aW9uQnV0dG9uPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiQ3JlYXRlQ29sbGVjdGlvbkJ1dHRvblwiLFxuICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVDb2xsZWN0aW9uQnV0dG9uKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGRhdGVDb2xsZWN0aW9uQnV0dG9uU2NoZW1hPlxuICAgICk6IFByb21pc2U8VENvbGxlY3Rpb25CdXR0b24+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJVcGRhdGVDb2xsZWN0aW9uQnV0dG9uXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZUNvbGxlY3Rpb25CdXR0b24oXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIERlbGV0ZUNvbGxlY3Rpb25CdXR0b25TY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJEZWxldGVDb2xsZWN0aW9uQnV0dG9uXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEV4ZWN1dGVDb2xsZWN0aW9uQnV0dG9uKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBFeGVjdXRlQ29sbGVjdGlvbkJ1dHRvblNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkV4ZWN1dGVDb2xsZWN0aW9uQnV0dG9uXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEV4ZWN1dGVDb2xsZWN0aW9uQWlGaWVsZChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRXhlY3V0ZUNvbGxlY3Rpb25BaUZpZWxkU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiRXhlY3V0ZUNvbGxlY3Rpb25BaUZpZWxkXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RDb2xsZWN0aW9uUmVsYXRpb25zKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBMaXN0Q29sbGVjdGlvblJlbGF0aW9uc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPFRDb2xsZWN0aW9uUmVsYXRpb25bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkxpc3RDb2xsZWN0aW9uUmVsYXRpb25zXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZUNvbGxlY3Rpb25SZWxhdGlvbihcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlQ29sbGVjdGlvblJlbGF0aW9uU2NoZW1hPlxuICAgICk6IFByb21pc2U8VENvbGxlY3Rpb25SZWxhdGlvbj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkNyZWF0ZUNvbGxlY3Rpb25SZWxhdGlvblwiLFxuICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBVcGRhdGVDb2xsZWN0aW9uUmVsYXRpb24oXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFVwZGF0ZUNvbGxlY3Rpb25SZWxhdGlvblNjaGVtYT5cbiAgICApOiBQcm9taXNlPFRDb2xsZWN0aW9uUmVsYXRpb24+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJVcGRhdGVDb2xsZWN0aW9uUmVsYXRpb25cIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlQ29sbGVjdGlvblJlbGF0aW9uKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBEZWxldGVDb2xsZWN0aW9uUmVsYXRpb25TY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJEZWxldGVDb2xsZWN0aW9uUmVsYXRpb25cIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdFJlbGF0aW9uQ2FuZGlkYXRlcyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdFJlbGF0aW9uQ2FuZGlkYXRlc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPHsgZmllbGRJZDogc3RyaW5nOyBpdGVtczogVFJlbGF0aW9uUmVjb3JkT3B0aW9uW10gfT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIkxpc3RSZWxhdGlvbkNhbmRpZGF0ZXNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgR2V0UmVjb3JkUmVsYXRpb25zKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBHZXRSZWNvcmRSZWxhdGlvbnNTY2hlbWE+XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHJlY29yZElkOiBzdHJpbmc7XG4gICAgICAgIHZhbHVlczogUmVjb3JkPHN0cmluZywgVFJlbGF0aW9uUmVjb3JkT3B0aW9uW10gfCBUUmVsYXRpb25SZWNvcmRPcHRpb24gfCBudWxsPjtcbiAgICB9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiR2V0UmVjb3JkUmVsYXRpb25zXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFJlb3JkZXJDb2xsZWN0aW9uRmllbGRzKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBSZW9yZGVyQ29sbGVjdGlvbkZpZWxkc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIlJlb3JkZXJDb2xsZWN0aW9uRmllbGRzXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEdldENvbGxlY3Rpb25TY2hlbWEoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEdldENvbGxlY3Rpb25TY2hlbWFTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJHZXRDb2xsZWN0aW9uU2NoZW1hXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFZhbGlkYXRlUmVjb3JkKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBWYWxpZGF0ZVJlY29yZFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIlZhbGlkYXRlUmVjb3JkXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFByZXZpZXdWYWxpZGF0aW9uRXJyb3JzKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBQcmV2aWV3VmFsaWRhdGlvbkVycm9yc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJjb2xsZWN0aW9uXCIsXG4gICAgICAgICAgICBcIlByZXZpZXdWYWxpZGF0aW9uRXJyb3JzXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIENoZWNrUmVjb3JkUGVybWlzc2lvbihcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ2hlY2tSZWNvcmRQZXJtaXNzaW9uU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiQ2hlY2tSZWNvcmRQZXJtaXNzaW9uXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RSZWNvcmRQZXJtaXNzaW9ucyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdFJlY29yZFBlcm1pc3Npb25zU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJMaXN0UmVjb3JkUGVybWlzc2lvbnNcIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgR3JhbnRSZWNvcmRQZXJtaXNzaW9uKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBHcmFudFJlY29yZFBlcm1pc3Npb25TY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcbiAgICAgICAgICAgIFwiY29sbGVjdGlvblwiLFxuICAgICAgICAgICAgXCJHcmFudFJlY29yZFBlcm1pc3Npb25cIixcbiAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBhc3luYyBSZXZva2VSZWNvcmRQZXJtaXNzaW9uKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBSZXZva2VSZWNvcmRQZXJtaXNzaW9uU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXG4gICAgICAgICAgICBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgICAgIFwiUmV2b2tlUmVjb3JkUGVybWlzc2lvblwiLFxuICAgICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgLy8tLS13aWtpLS0tLS0tLS1cblxuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZVdpa2lQYWdlKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBDcmVhdGVXaWtpUGFnZVNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFxuICAgICAgICAgICAgXCJ3aWtpXCIsXG4gICAgICAgICAgICBcIkNyZWF0ZVdpa2lQYWdlXCIsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZVdpa2lQYWdlKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGRhdGVXaWtpUGFnZVNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFwid2lraVwiLCBcIlVwZGF0ZVdpa2lQYWdlXCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVXaWtpUGFnZShcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgRGVsZXRlV2lraVBhZ2VTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcIndpa2lcIiwgXCJEZWxldGVXaWtpUGFnZVwiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdFdpa2lQYWdlcyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdFdpa2lQYWdlc1NjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJ3aWtpXCIsIFwiTGlzdFdpa2lQYWdlc1wiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgU2V0V2lraVBhZ2VVc2VyU3RhdGUoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFNldFdpa2lQYWdlVXNlclN0YXRlU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJ3aWtpXCIsIFwiU2V0V2lraVBhZ2VVc2VyU3RhdGVcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwbG9hZFdpa2lGaWxlKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGxvYWRFZGl0b3JGaWxlU2NoZW1hPlxuICAgICk6IFByb21pc2U8VFVwbG9hZGVkRmlsZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFwid2lraVwiLCBcIlVwbG9hZEZpbGVcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFJlc29sdmVXaWtpRmlsZVZpZXcoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIFJlc29sdmVXaWtpRmlsZVZpZXdTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxUV2lraUZpbGVWaWV3UmVzb2x1dGlvbj4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbkNhbGw8YW55PihcIndpa2lcIiwgXCJSZXNvbHZlV2lraUZpbGVWaWV3XCIsIHBheWxvYWQpO1xuICAgICAgICBjb25zdCBzdG9yYWdlUGF0aCA9XG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZVN0b3JhZ2VQYXRoKFN0cmluZyhyZXN1bHQ/LnBhdGggfHwgcmVzdWx0Py5maWxlUGF0aCB8fCByZXN1bHQ/LnVybCB8fCBcIlwiKSk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkVXJsID0gdGhpcy5yZXNvbHZlU3RvcmFnZVZpZXdVcmwoc3RvcmFnZVBhdGgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICBmaWxlSWQ6IFN0cmluZyhyZXN1bHQ/LmZpbGVJZCB8fCBwYXlsb2FkLmZpbGVJZCB8fCBcIlwiKSxcbiAgICAgICAgICAgIHBhdGg6IHN0b3JhZ2VQYXRoLFxuICAgICAgICAgICAgZmlsZVBhdGg6IHJlc29sdmVkVXJsIHx8IHN0b3JhZ2VQYXRoLFxuICAgICAgICAgICAgdXJsOiByZXNvbHZlZFVybCB8fCBzdG9yYWdlUGF0aCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgQ3JlYXRlV2lraUNvbW1lbnQoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIENyZWF0ZVdpa2lDb21tZW50U2NoZW1hPlxuICAgICk6IFByb21pc2U8VFdpa2lDb21tZW50PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJ3aWtpXCIsIFwiQ3JlYXRlV2lraUNvbW1lbnRcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZVdpa2lDb21tZW50KFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBVcGRhdGVXaWtpQ29tbWVudFNjaGVtYT5cbiAgICApOiBQcm9taXNlPFRXaWtpQ29tbWVudD4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUGF5bG9hZCA9IHtcbiAgICAgICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgICAgICAuLi4odHlwZW9mIHBheWxvYWQucmVzb2x2ZWQgPT09IFwiYm9vbGVhblwiXG4gICAgICAgICAgICAgICAgPyB7IHJlc29sdmVkOiBwYXlsb2FkLnJlc29sdmVkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9IGFzIGFueTtcblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFwid2lraVwiLCBcIlVwZGF0ZVdpa2lDb21tZW50XCIsIG5vcm1hbGl6ZWRQYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlV2lraUNvbW1lbnQoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIERlbGV0ZVdpa2lDb21tZW50U2NoZW1hPlxuICAgICk6IFByb21pc2U8eyBpZDogc3RyaW5nOyBkZWxldGVkQXQ6IHN0cmluZyB9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJ3aWtpXCIsIFwiRGVsZXRlV2lraUNvbW1lbnRcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RXaWtpQ29tbWVudHMoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIExpc3RXaWtpQ29tbWVudHNTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxUV2lraUNvbW1lbnRQYWdpbmF0aW9uPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJ3aWtpXCIsIFwiTGlzdFdpa2lDb21tZW50c1wiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgUmVzdG9yZVdpa2lQYWdlKFxuICAgICAgICBwYXlsb2FkOiB6LmluZmVyPHR5cGVvZiBSZXN0b3JlV2lraVBhZ2VTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcIndpa2lcIiwgXCJSZXN0b3JlV2lraVBhZ2VcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEdldFdpa2lQYWdlQnlJZChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgR2V0V2lraVBhZ2VCeUlkU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJ3aWtpXCIsIFwiR2V0V2lraVBhZ2VCeUlkXCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBHZXRXaWtpUGFnZUJ5U2x1ZyhcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgR2V0V2lraVBhZ2VCeVNsdWdTY2hlbWE+XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aW9uQ2FsbChcIndpa2lcIiwgXCJHZXRXaWtpUGFnZUJ5U2x1Z1wiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgR2V0V2lraVRyZWUoXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEdldFdpa2lUcmVlU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJ3aWtpXCIsIFwiR2V0V2lraVRyZWVcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogV2lraSBSZXZpc2lvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgcHVibGljIGFzeW5jIENyZWF0ZVdpa2lSZXZpc2lvbihcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgQ3JlYXRlV2lraVJldmlzaW9uU2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFjdGlvbkNhbGwoXCJ3aWtpXCIsIFwiQ3JlYXRlV2lraVJldmlzaW9uXCIsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBHZXRMYXRlc3RXaWtpUmV2aXNpb24oXG4gICAgICAgIHBheWxvYWQ6IHouaW5mZXI8dHlwZW9mIEdldExhdGVzdFdpa2lSZXZpc2lvblNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFwid2lraVwiLCBcIkdldExhdGVzdFdpa2lSZXZpc2lvblwiLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgR2V0V2lraVJldmlzaW9uQnlJZChcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgR2V0V2lraVJldmlzaW9uQnlJZFNjaGVtYT5cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hY3Rpb25DYWxsKFwid2lraVwiLCBcIkdldFdpa2lSZXZpc2lvbkJ5SWRcIiwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIExpc3RDaGF0SGlzdG9yeShcbiAgICAgICAgcGF5bG9hZDogei5pbmZlcjx0eXBlb2YgTGlzdENoYXRIaXN0b3J5U2NoZW1hPlxuICAgICk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0KFwiL2NoYXQvaGlzdG9yeVwiLCBwYXlsb2FkKTtcbiAgICB9XG5cbn1cbiJdfQ==