@veeroute/lss-studio-angular 7.33.3222 → 7.35.3290

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 (608) hide show
  1. package/README.md +3 -3
  2. package/cfg/entity_error_type.yaml +9 -9
  3. package/cfg/table_settings.json +11 -20
  4. package/fesm2022/veeroute-lss-studio-angular.mjs +220 -159
  5. package/fesm2022/veeroute-lss-studio-angular.mjs.map +1 -1
  6. package/package.json +5 -6
  7. package/types/veeroute-lss-studio-angular.d.ts +13407 -0
  8. package/api/api.d.ts +0 -46
  9. package/api/backupsService.d.ts +0 -56
  10. package/api/backupsServiceInterface.d.ts +0 -35
  11. package/api/customFieldsService.d.ts +0 -145
  12. package/api/customFieldsServiceInterface.d.ts +0 -70
  13. package/api/customIconsService.d.ts +0 -144
  14. package/api/customIconsServiceInterface.d.ts +0 -69
  15. package/api/experimentsService.d.ts +0 -546
  16. package/api/experimentsServiceInterface.d.ts +0 -272
  17. package/api/explorerService.d.ts +0 -279
  18. package/api/explorerServiceInterface.d.ts +0 -132
  19. package/api/externalRoutingService.d.ts +0 -101
  20. package/api/externalRoutingServiceInterface.d.ts +0 -55
  21. package/api/factsService.d.ts +0 -213
  22. package/api/factsServiceInterface.d.ts +0 -119
  23. package/api/hardlinksService.d.ts +0 -213
  24. package/api/hardlinksServiceInterface.d.ts +0 -119
  25. package/api/locationsService.d.ts +0 -192
  26. package/api/locationsServiceInterface.d.ts +0 -112
  27. package/api/ordersService.d.ts +0 -236
  28. package/api/ordersServiceInterface.d.ts +0 -132
  29. package/api/performersService.d.ts +0 -236
  30. package/api/performersServiceInterface.d.ts +0 -132
  31. package/api/systemService.d.ts +0 -78
  32. package/api/systemServiceInterface.d.ts +0 -37
  33. package/api/transportsService.d.ts +0 -236
  34. package/api/transportsServiceInterface.d.ts +0 -132
  35. package/api/tripsService.d.ts +0 -372
  36. package/api/tripsServiceInterface.d.ts +0 -218
  37. package/api/userService.d.ts +0 -162
  38. package/api/userServiceInterface.d.ts +0 -79
  39. package/api.base.service.d.ts +0 -21
  40. package/api.module.d.ts +0 -11
  41. package/configuration.d.ts +0 -106
  42. package/encoder.d.ts +0 -11
  43. package/esm2022/api/api.mjs +0 -47
  44. package/esm2022/api/backupsService.mjs +0 -135
  45. package/esm2022/api/backupsServiceInterface.mjs +0 -2
  46. package/esm2022/api/customFieldsService.mjs +0 -312
  47. package/esm2022/api/customFieldsServiceInterface.mjs +0 -2
  48. package/esm2022/api/customIconsService.mjs +0 -313
  49. package/esm2022/api/customIconsServiceInterface.mjs +0 -2
  50. package/esm2022/api/experimentsService.mjs +0 -1163
  51. package/esm2022/api/experimentsServiceInterface.mjs +0 -2
  52. package/esm2022/api/explorerService.mjs +0 -594
  53. package/esm2022/api/explorerServiceInterface.mjs +0 -2
  54. package/esm2022/api/externalRoutingService.mjs +0 -227
  55. package/esm2022/api/externalRoutingServiceInterface.mjs +0 -2
  56. package/esm2022/api/factsService.mjs +0 -509
  57. package/esm2022/api/factsServiceInterface.mjs +0 -2
  58. package/esm2022/api/hardlinksService.mjs +0 -509
  59. package/esm2022/api/hardlinksServiceInterface.mjs +0 -2
  60. package/esm2022/api/locationsService.mjs +0 -459
  61. package/esm2022/api/locationsServiceInterface.mjs +0 -2
  62. package/esm2022/api/ordersService.mjs +0 -565
  63. package/esm2022/api/ordersServiceInterface.mjs +0 -2
  64. package/esm2022/api/performersService.mjs +0 -565
  65. package/esm2022/api/performersServiceInterface.mjs +0 -2
  66. package/esm2022/api/systemService.mjs +0 -149
  67. package/esm2022/api/systemServiceInterface.mjs +0 -2
  68. package/esm2022/api/transportsService.mjs +0 -565
  69. package/esm2022/api/transportsServiceInterface.mjs +0 -2
  70. package/esm2022/api/tripsService.mjs +0 -900
  71. package/esm2022/api/tripsServiceInterface.mjs +0 -2
  72. package/esm2022/api/userService.mjs +0 -312
  73. package/esm2022/api/userServiceInterface.mjs +0 -2
  74. package/esm2022/api.base.service.mjs +0 -79
  75. package/esm2022/api.module.mjs +0 -40
  76. package/esm2022/configuration.mjs +0 -145
  77. package/esm2022/encoder.mjs +0 -19
  78. package/esm2022/index.mjs +0 -8
  79. package/esm2022/model/actualizeSettings.mjs +0 -11
  80. package/esm2022/model/assignedPerformer.mjs +0 -2
  81. package/esm2022/model/assignedTransport.mjs +0 -2
  82. package/esm2022/model/attribute.mjs +0 -11
  83. package/esm2022/model/basicProcess.mjs +0 -19
  84. package/esm2022/model/basicState.mjs +0 -20
  85. package/esm2022/model/box.mjs +0 -2
  86. package/esm2022/model/boxCompatibilities.mjs +0 -11
  87. package/esm2022/model/boxLimits.mjs +0 -2
  88. package/esm2022/model/break.mjs +0 -11
  89. package/esm2022/model/breakRules.mjs +0 -7
  90. package/esm2022/model/calculationHistoryElement.mjs +0 -2
  91. package/esm2022/model/calculationInfo.mjs +0 -2
  92. package/esm2022/model/calculationSettings.mjs +0 -11
  93. package/esm2022/model/calculationState.mjs +0 -2
  94. package/esm2022/model/calculationStatus.mjs +0 -24
  95. package/esm2022/model/capacity.mjs +0 -11
  96. package/esm2022/model/capacityCost.mjs +0 -11
  97. package/esm2022/model/capacityLimit.mjs +0 -11
  98. package/esm2022/model/capacityMultiplier.mjs +0 -11
  99. package/esm2022/model/capacityStatisticsLoad.mjs +0 -11
  100. package/esm2022/model/capacityStatisticsRatio.mjs +0 -11
  101. package/esm2022/model/capacityStatisticsSum.mjs +0 -11
  102. package/esm2022/model/cargo.mjs +0 -2
  103. package/esm2022/model/cargoAction.mjs +0 -2
  104. package/esm2022/model/cargoActionType.mjs +0 -18
  105. package/esm2022/model/cargoCompatibilities.mjs +0 -2
  106. package/esm2022/model/cargoInvoice.mjs +0 -2
  107. package/esm2022/model/cargoInvoiceDetail.mjs +0 -2
  108. package/esm2022/model/cargoInvoiceHonestSign.mjs +0 -11
  109. package/esm2022/model/cargoInvoiceReceipt.mjs +0 -11
  110. package/esm2022/model/cargoInvoiceTax.mjs +0 -28
  111. package/esm2022/model/cargoRotationType.mjs +0 -20
  112. package/esm2022/model/checkResult.mjs +0 -11
  113. package/esm2022/model/compatibilityPenalty.mjs +0 -11
  114. package/esm2022/model/customfieldConvertRule.mjs +0 -2
  115. package/esm2022/model/customfieldEntityType.mjs +0 -28
  116. package/esm2022/model/customfieldsSettings.mjs +0 -2
  117. package/esm2022/model/demand.mjs +0 -2
  118. package/esm2022/model/demandExtraDuration.mjs +0 -11
  119. package/esm2022/model/demandType.mjs +0 -21
  120. package/esm2022/model/entityError.mjs +0 -2
  121. package/esm2022/model/entityErrorType.mjs +0 -36
  122. package/esm2022/model/entityPath.mjs +0 -2
  123. package/esm2022/model/entityType.mjs +0 -44
  124. package/esm2022/model/entityWarning.mjs +0 -2
  125. package/esm2022/model/entityWarningType.mjs +0 -58
  126. package/esm2022/model/experiment.mjs +0 -2
  127. package/esm2022/model/experimentCheck.mjs +0 -2
  128. package/esm2022/model/experimentList.mjs +0 -2
  129. package/esm2022/model/experimentNeighbors.mjs +0 -11
  130. package/esm2022/model/experimentSettings.mjs +0 -2
  131. package/esm2022/model/experimentStatistics.mjs +0 -2
  132. package/esm2022/model/extensionSettings.mjs +0 -11
  133. package/esm2022/model/fact.mjs +0 -2
  134. package/esm2022/model/factEssences.mjs +0 -2
  135. package/esm2022/model/factStatus.mjs +0 -19
  136. package/esm2022/model/factType.mjs +0 -25
  137. package/esm2022/model/featureLifetime.mjs +0 -2
  138. package/esm2022/model/fileNamePath.mjs +0 -11
  139. package/esm2022/model/fileSpecification.mjs +0 -11
  140. package/esm2022/model/filesystem.mjs +0 -2
  141. package/esm2022/model/filesystemColumnType.mjs +0 -23
  142. package/esm2022/model/filesystemCounters.mjs +0 -2
  143. package/esm2022/model/filesystemPath.mjs +0 -2
  144. package/esm2022/model/folder.mjs +0 -2
  145. package/esm2022/model/folderCounters.mjs +0 -11
  146. package/esm2022/model/folderSpecification.mjs +0 -2
  147. package/esm2022/model/folderType.mjs +0 -18
  148. package/esm2022/model/general400.mjs +0 -2
  149. package/esm2022/model/general402.mjs +0 -2
  150. package/esm2022/model/general403.mjs +0 -2
  151. package/esm2022/model/general404.mjs +0 -2
  152. package/esm2022/model/general404Detail.mjs +0 -2
  153. package/esm2022/model/general429.mjs +0 -2
  154. package/esm2022/model/general500.mjs +0 -2
  155. package/esm2022/model/generalStatistics.mjs +0 -2
  156. package/esm2022/model/geoSettings.mjs +0 -2
  157. package/esm2022/model/geopoint.mjs +0 -11
  158. package/esm2022/model/hardlink.mjs +0 -2
  159. package/esm2022/model/hardlinkElement.mjs +0 -2
  160. package/esm2022/model/hardlinkElementType.mjs +0 -19
  161. package/esm2022/model/importSample.mjs +0 -18
  162. package/esm2022/model/importSource.mjs +0 -18
  163. package/esm2022/model/linkedEssence.mjs +0 -23
  164. package/esm2022/model/loadStatistics.mjs +0 -2
  165. package/esm2022/model/location.mjs +0 -2
  166. package/esm2022/model/locationCargosLimit.mjs +0 -2
  167. package/esm2022/model/locationCompatibilities.mjs +0 -11
  168. package/esm2022/model/locationLimit.mjs +0 -2
  169. package/esm2022/model/locationLimitStatistics.mjs +0 -2
  170. package/esm2022/model/locationStatistics.mjs +0 -2
  171. package/esm2022/model/locationTimetableElement.mjs +0 -2
  172. package/esm2022/model/locationTransportsLimit.mjs +0 -11
  173. package/esm2022/model/measurements.mjs +0 -2
  174. package/esm2022/model/models.mjs +0 -261
  175. package/esm2022/model/order.mjs +0 -2
  176. package/esm2022/model/orderCompatibilities.mjs +0 -11
  177. package/esm2022/model/performer.mjs +0 -2
  178. package/esm2022/model/performerCompatibilities.mjs +0 -2
  179. package/esm2022/model/performerLimits.mjs +0 -2
  180. package/esm2022/model/performerShift.mjs +0 -2
  181. package/esm2022/model/performerTariff.mjs +0 -2
  182. package/esm2022/model/performerTariffConstraint.mjs +0 -11
  183. package/esm2022/model/planSettings.mjs +0 -2
  184. package/esm2022/model/planStatistics.mjs +0 -2
  185. package/esm2022/model/possibleEvent.mjs +0 -2
  186. package/esm2022/model/quality.mjs +0 -2
  187. package/esm2022/model/removedItems.mjs +0 -11
  188. package/esm2022/model/replanSettings.mjs +0 -2
  189. package/esm2022/model/replanStrategy.mjs +0 -11
  190. package/esm2022/model/rest.mjs +0 -11
  191. package/esm2022/model/restRules.mjs +0 -2
  192. package/esm2022/model/roundtripStatistics.mjs +0 -2
  193. package/esm2022/model/routingMatrix.mjs +0 -2
  194. package/esm2022/model/routingMatrixWaypoint.mjs +0 -2
  195. package/esm2022/model/routingTransportMatrix.mjs +0 -2
  196. package/esm2022/model/schemaError.mjs +0 -11
  197. package/esm2022/model/service.mjs +0 -26
  198. package/esm2022/model/settingsKeyList.mjs +0 -11
  199. package/esm2022/model/stopDemand.mjs +0 -2
  200. package/esm2022/model/stopStatistics.mjs +0 -2
  201. package/esm2022/model/tableCustomfields.mjs +0 -11
  202. package/esm2022/model/tableCustomfieldsColumnType.mjs +0 -76
  203. package/esm2022/model/tableDataStats.mjs +0 -11
  204. package/esm2022/model/tableExperimentColumnType.mjs +0 -21
  205. package/esm2022/model/tableFact.mjs +0 -2
  206. package/esm2022/model/tableFactColumnType.mjs +0 -27
  207. package/esm2022/model/tableFactFields.mjs +0 -6
  208. package/esm2022/model/tableFactFilter.mjs +0 -2
  209. package/esm2022/model/tableFactFilterList.mjs +0 -2
  210. package/esm2022/model/tableFactList.mjs +0 -2
  211. package/esm2022/model/tableFactMetrics.mjs +0 -2
  212. package/esm2022/model/tableFactMetricsFilterList.mjs +0 -2
  213. package/esm2022/model/tableFilterBoolList.mjs +0 -11
  214. package/esm2022/model/tableFilterDatetimeRange.mjs +0 -11
  215. package/esm2022/model/tableFilterDurationRange.mjs +0 -11
  216. package/esm2022/model/tableFilterEnumList.mjs +0 -11
  217. package/esm2022/model/tableFilterFloatRange.mjs +0 -11
  218. package/esm2022/model/tableFilterIntRange.mjs +0 -11
  219. package/esm2022/model/tableFilterStringList.mjs +0 -11
  220. package/esm2022/model/tableFilterStringSearch.mjs +0 -11
  221. package/esm2022/model/tableFilterType.mjs +0 -24
  222. package/esm2022/model/tableHardlink.mjs +0 -2
  223. package/esm2022/model/tableHardlinkColumnType.mjs +0 -24
  224. package/esm2022/model/tableHardlinkFields.mjs +0 -7
  225. package/esm2022/model/tableHardlinkFilter.mjs +0 -2
  226. package/esm2022/model/tableHardlinkFilterList.mjs +0 -2
  227. package/esm2022/model/tableHardlinkList.mjs +0 -2
  228. package/esm2022/model/tableHardlinkMetrics.mjs +0 -2
  229. package/esm2022/model/tableHardlinkMetricsFilterList.mjs +0 -2
  230. package/esm2022/model/tableListCounters.mjs +0 -2
  231. package/esm2022/model/tableListCountersDetail.mjs +0 -11
  232. package/esm2022/model/tableLocation.mjs +0 -2
  233. package/esm2022/model/tableLocationColumnType.mjs +0 -23
  234. package/esm2022/model/tableLocationFields.mjs +0 -7
  235. package/esm2022/model/tableLocationFilter.mjs +0 -2
  236. package/esm2022/model/tableLocationFilterList.mjs +0 -2
  237. package/esm2022/model/tableLocationList.mjs +0 -2
  238. package/esm2022/model/tableLocationMetrics.mjs +0 -2
  239. package/esm2022/model/tableLocationMetricsFilterList.mjs +0 -2
  240. package/esm2022/model/tableOrder.mjs +0 -2
  241. package/esm2022/model/tableOrderColumnType.mjs +0 -49
  242. package/esm2022/model/tableOrderFields.mjs +0 -7
  243. package/esm2022/model/tableOrderFilter.mjs +0 -2
  244. package/esm2022/model/tableOrderFilterList.mjs +0 -2
  245. package/esm2022/model/tableOrderList.mjs +0 -2
  246. package/esm2022/model/tableOrderMetrics.mjs +0 -2
  247. package/esm2022/model/tableOrderMetricsFilterList.mjs +0 -2
  248. package/esm2022/model/tablePerformer.mjs +0 -2
  249. package/esm2022/model/tablePerformerColumnType.mjs +0 -31
  250. package/esm2022/model/tablePerformerFields.mjs +0 -7
  251. package/esm2022/model/tablePerformerFilter.mjs +0 -2
  252. package/esm2022/model/tablePerformerFilterList.mjs +0 -2
  253. package/esm2022/model/tablePerformerList.mjs +0 -2
  254. package/esm2022/model/tablePerformerMetrics.mjs +0 -2
  255. package/esm2022/model/tablePerformerMetricsFilterList.mjs +0 -2
  256. package/esm2022/model/tableRoundtrip.mjs +0 -2
  257. package/esm2022/model/tableRoundtripColumnType.mjs +0 -51
  258. package/esm2022/model/tableRoundtripFields.mjs +0 -7
  259. package/esm2022/model/tableRoundtripFilter.mjs +0 -2
  260. package/esm2022/model/tableRoundtripFilterList.mjs +0 -2
  261. package/esm2022/model/tableRoundtripList.mjs +0 -2
  262. package/esm2022/model/tableRoundtripMetrics.mjs +0 -2
  263. package/esm2022/model/tableRoundtripMetricsFilterList.mjs +0 -2
  264. package/esm2022/model/tableTransport.mjs +0 -2
  265. package/esm2022/model/tableTransportColumnType.mjs +0 -37
  266. package/esm2022/model/tableTransportFields.mjs +0 -7
  267. package/esm2022/model/tableTransportFilter.mjs +0 -2
  268. package/esm2022/model/tableTransportFilterList.mjs +0 -2
  269. package/esm2022/model/tableTransportList.mjs +0 -2
  270. package/esm2022/model/tableTransportMetrics.mjs +0 -2
  271. package/esm2022/model/tableTransportMetricsFilterList.mjs +0 -2
  272. package/esm2022/model/tableTrip.mjs +0 -2
  273. package/esm2022/model/tableTripColumnType.mjs +0 -53
  274. package/esm2022/model/tableTripFields.mjs +0 -7
  275. package/esm2022/model/tableTripFilter.mjs +0 -2
  276. package/esm2022/model/tableTripFilterList.mjs +0 -2
  277. package/esm2022/model/tableTripList.mjs +0 -2
  278. package/esm2022/model/tableTripMetrics.mjs +0 -2
  279. package/esm2022/model/tableTripMetricsFilterList.mjs +0 -2
  280. package/esm2022/model/tableTripStop.mjs +0 -2
  281. package/esm2022/model/tableTripStopColumnType.mjs +0 -33
  282. package/esm2022/model/tableTripStopFields.mjs +0 -7
  283. package/esm2022/model/tableTripStopFilter.mjs +0 -2
  284. package/esm2022/model/tableTripStopFilterList.mjs +0 -2
  285. package/esm2022/model/tableTripStopList.mjs +0 -2
  286. package/esm2022/model/taskStatistics.mjs +0 -2
  287. package/esm2022/model/timeWindow.mjs +0 -11
  288. package/esm2022/model/timeWindowViolationDetail.mjs +0 -11
  289. package/esm2022/model/timeWindowViolations.mjs +0 -2
  290. package/esm2022/model/tracedata.mjs +0 -2
  291. package/esm2022/model/track.mjs +0 -2
  292. package/esm2022/model/trackList.mjs +0 -2
  293. package/esm2022/model/trackListCustom.mjs +0 -2
  294. package/esm2022/model/trackType.mjs +0 -19
  295. package/esm2022/model/trackpoint.mjs +0 -11
  296. package/esm2022/model/translations.mjs +0 -11
  297. package/esm2022/model/transport.mjs +0 -2
  298. package/esm2022/model/transportCapacityMultiplier.mjs +0 -2
  299. package/esm2022/model/transportCompatibilities.mjs +0 -2
  300. package/esm2022/model/transportLimits.mjs +0 -2
  301. package/esm2022/model/transportLoad.mjs +0 -2
  302. package/esm2022/model/transportShift.mjs +0 -2
  303. package/esm2022/model/transportSpeedMultiplier.mjs +0 -2
  304. package/esm2022/model/transportTariff.mjs +0 -2
  305. package/esm2022/model/transportTariffConstraint.mjs +0 -11
  306. package/esm2022/model/transportType.mjs +0 -32
  307. package/esm2022/model/trip.mjs +0 -2
  308. package/esm2022/model/tripAssumptions.mjs +0 -2
  309. package/esm2022/model/tripExpectations.mjs +0 -2
  310. package/esm2022/model/tripPenalties.mjs +0 -2
  311. package/esm2022/model/tripStartTimeStrategy.mjs +0 -18
  312. package/esm2022/model/tripState.mjs +0 -2
  313. package/esm2022/model/tripStateFlag.mjs +0 -30
  314. package/esm2022/model/tripStatistics.mjs +0 -2
  315. package/esm2022/model/tripStatus.mjs +0 -25
  316. package/esm2022/model/tripsSettings.mjs +0 -2
  317. package/esm2022/model/universal400WithErrorsAndWarnings.mjs +0 -2
  318. package/esm2022/model/universalData.mjs +0 -2
  319. package/esm2022/model/unplannedItems.mjs +0 -11
  320. package/esm2022/model/versionResult.mjs +0 -11
  321. package/esm2022/model/webFact.mjs +0 -2
  322. package/esm2022/model/webHardlink.mjs +0 -2
  323. package/esm2022/model/webLocation.mjs +0 -2
  324. package/esm2022/model/webLocationGeopoint.mjs +0 -2
  325. package/esm2022/model/webLocationGeopointList.mjs +0 -2
  326. package/esm2022/model/webOrder.mjs +0 -2
  327. package/esm2022/model/webOrderGeopoint.mjs +0 -2
  328. package/esm2022/model/webOrderGeopointList.mjs +0 -2
  329. package/esm2022/model/webPerformer.mjs +0 -2
  330. package/esm2022/model/webPerformerGeopoint.mjs +0 -7
  331. package/esm2022/model/webPerformerGeopointList.mjs +0 -2
  332. package/esm2022/model/webTransport.mjs +0 -2
  333. package/esm2022/model/webTransportGeopoint.mjs +0 -7
  334. package/esm2022/model/webTransportGeopointList.mjs +0 -2
  335. package/esm2022/model/webTrip.mjs +0 -2
  336. package/esm2022/model/webTripChart.mjs +0 -2
  337. package/esm2022/model/webTripChartDemand.mjs +0 -2
  338. package/esm2022/model/webTripChartList.mjs +0 -2
  339. package/esm2022/model/workAndRestRules.mjs +0 -2
  340. package/esm2022/param.mjs +0 -2
  341. package/esm2022/provide-api.mjs +0 -15
  342. package/esm2022/variables.mjs +0 -9
  343. package/esm2022/veeroute-lss-studio-angular.mjs +0 -5
  344. package/index.d.ts +0 -7
  345. package/model/actualizeSettings.d.ts +0 -23
  346. package/model/assignedPerformer.d.ts +0 -25
  347. package/model/assignedTransport.d.ts +0 -25
  348. package/model/attribute.d.ts +0 -23
  349. package/model/basicProcess.d.ts +0 -17
  350. package/model/basicState.d.ts +0 -18
  351. package/model/box.d.ts +0 -30
  352. package/model/boxCompatibilities.d.ts +0 -31
  353. package/model/boxLimits.d.ts +0 -17
  354. package/model/break.d.ts +0 -27
  355. package/model/breakRules.d.ts +0 -29
  356. package/model/calculationHistoryElement.d.ts +0 -21
  357. package/model/calculationInfo.d.ts +0 -49
  358. package/model/calculationSettings.d.ts +0 -39
  359. package/model/calculationState.d.ts +0 -23
  360. package/model/calculationStatus.d.ts +0 -22
  361. package/model/capacity.d.ts +0 -35
  362. package/model/capacityCost.d.ts +0 -35
  363. package/model/capacityLimit.d.ts +0 -35
  364. package/model/capacityMultiplier.d.ts +0 -35
  365. package/model/capacityStatisticsLoad.d.ts +0 -35
  366. package/model/capacityStatisticsRatio.d.ts +0 -35
  367. package/model/capacityStatisticsSum.d.ts +0 -35
  368. package/model/cargo.d.ts +0 -34
  369. package/model/cargoAction.d.ts +0 -25
  370. package/model/cargoActionType.d.ts +0 -16
  371. package/model/cargoCompatibilities.d.ts +0 -44
  372. package/model/cargoInvoice.d.ts +0 -30
  373. package/model/cargoInvoiceDetail.d.ts +0 -55
  374. package/model/cargoInvoiceHonestSign.d.ts +0 -23
  375. package/model/cargoInvoiceReceipt.d.ts +0 -27
  376. package/model/cargoInvoiceTax.d.ts +0 -26
  377. package/model/cargoRotationType.d.ts +0 -18
  378. package/model/checkResult.d.ts +0 -19
  379. package/model/compatibilityPenalty.d.ts +0 -23
  380. package/model/customfieldConvertRule.d.ts +0 -25
  381. package/model/customfieldEntityType.d.ts +0 -26
  382. package/model/customfieldsSettings.d.ts +0 -20
  383. package/model/demand.d.ts +0 -47
  384. package/model/demandExtraDuration.d.ts +0 -23
  385. package/model/demandType.d.ts +0 -19
  386. package/model/entityError.d.ts +0 -26
  387. package/model/entityErrorType.d.ts +0 -34
  388. package/model/entityPath.d.ts +0 -22
  389. package/model/entityType.d.ts +0 -42
  390. package/model/entityWarning.d.ts +0 -26
  391. package/model/entityWarningType.d.ts +0 -56
  392. package/model/experiment.d.ts +0 -49
  393. package/model/experimentCheck.d.ts +0 -25
  394. package/model/experimentList.d.ts +0 -22
  395. package/model/experimentNeighbors.d.ts +0 -23
  396. package/model/experimentSettings.d.ts +0 -21
  397. package/model/experimentStatistics.d.ts +0 -31
  398. package/model/extensionSettings.d.ts +0 -35
  399. package/model/fact.d.ts +0 -58
  400. package/model/factEssences.d.ts +0 -20
  401. package/model/factStatus.d.ts +0 -17
  402. package/model/factType.d.ts +0 -23
  403. package/model/featureLifetime.d.ts +0 -24
  404. package/model/fileNamePath.d.ts +0 -23
  405. package/model/fileSpecification.d.ts +0 -27
  406. package/model/filesystem.d.ts +0 -23
  407. package/model/filesystemColumnType.d.ts +0 -21
  408. package/model/filesystemCounters.d.ts +0 -24
  409. package/model/filesystemPath.d.ts +0 -20
  410. package/model/folder.d.ts +0 -60
  411. package/model/folderCounters.d.ts +0 -23
  412. package/model/folderSpecification.d.ts +0 -40
  413. package/model/folderType.d.ts +0 -16
  414. package/model/general400.d.ts +0 -26
  415. package/model/general402.d.ts +0 -21
  416. package/model/general403.d.ts +0 -21
  417. package/model/general404.d.ts +0 -21
  418. package/model/general404Detail.d.ts +0 -17
  419. package/model/general429.d.ts +0 -21
  420. package/model/general500.d.ts +0 -21
  421. package/model/generalStatistics.d.ts +0 -96
  422. package/model/geoSettings.d.ts +0 -40
  423. package/model/geopoint.d.ts +0 -23
  424. package/model/hardlink.d.ts +0 -29
  425. package/model/hardlinkElement.d.ts +0 -21
  426. package/model/hardlinkElementType.d.ts +0 -17
  427. package/model/importSample.d.ts +0 -16
  428. package/model/importSource.d.ts +0 -16
  429. package/model/linkedEssence.d.ts +0 -34
  430. package/model/loadStatistics.d.ts +0 -28
  431. package/model/location.d.ts +0 -49
  432. package/model/locationCargosLimit.d.ts +0 -25
  433. package/model/locationCompatibilities.d.ts +0 -19
  434. package/model/locationLimit.d.ts +0 -42
  435. package/model/locationLimitStatistics.d.ts +0 -33
  436. package/model/locationStatistics.d.ts +0 -40
  437. package/model/locationTimetableElement.d.ts +0 -25
  438. package/model/locationTransportsLimit.d.ts +0 -23
  439. package/model/measurements.d.ts +0 -53
  440. package/model/models.d.ts +0 -260
  441. package/model/order.d.ts +0 -40
  442. package/model/orderCompatibilities.d.ts +0 -31
  443. package/model/performer.d.ts +0 -42
  444. package/model/performerCompatibilities.d.ts +0 -28
  445. package/model/performerLimits.d.ts +0 -24
  446. package/model/performerShift.d.ts +0 -57
  447. package/model/performerTariff.d.ts +0 -28
  448. package/model/performerTariffConstraint.d.ts +0 -23
  449. package/model/planSettings.d.ts +0 -23
  450. package/model/planStatistics.d.ts +0 -31
  451. package/model/possibleEvent.d.ts +0 -42
  452. package/model/quality.d.ts +0 -28
  453. package/model/removedItems.d.ts +0 -63
  454. package/model/replanSettings.d.ts +0 -17
  455. package/model/replanStrategy.d.ts +0 -27
  456. package/model/rest.d.ts +0 -27
  457. package/model/restRules.d.ts +0 -20
  458. package/model/roundtripStatistics.d.ts +0 -24
  459. package/model/routingMatrix.d.ts +0 -28
  460. package/model/routingMatrixWaypoint.d.ts +0 -21
  461. package/model/routingTransportMatrix.d.ts +0 -19
  462. package/model/schemaError.d.ts +0 -23
  463. package/model/service.d.ts +0 -24
  464. package/model/settingsKeyList.d.ts +0 -23
  465. package/model/stopDemand.d.ts +0 -28
  466. package/model/stopStatistics.d.ts +0 -60
  467. package/model/tableCustomfields.d.ts +0 -255
  468. package/model/tableCustomfieldsColumnType.d.ts +0 -74
  469. package/model/tableDataStats.d.ts +0 -47
  470. package/model/tableExperimentColumnType.d.ts +0 -19
  471. package/model/tableFact.d.ts +0 -21
  472. package/model/tableFactColumnType.d.ts +0 -25
  473. package/model/tableFactFields.d.ts +0 -68
  474. package/model/tableFactFilter.d.ts +0 -37
  475. package/model/tableFactFilterList.d.ts +0 -20
  476. package/model/tableFactList.d.ts +0 -22
  477. package/model/tableFactMetrics.d.ts +0 -26
  478. package/model/tableFactMetricsFilterList.d.ts +0 -24
  479. package/model/tableFilterBoolList.d.ts +0 -19
  480. package/model/tableFilterDatetimeRange.d.ts +0 -23
  481. package/model/tableFilterDurationRange.d.ts +0 -23
  482. package/model/tableFilterEnumList.d.ts +0 -19
  483. package/model/tableFilterFloatRange.d.ts +0 -23
  484. package/model/tableFilterIntRange.d.ts +0 -23
  485. package/model/tableFilterStringList.d.ts +0 -23
  486. package/model/tableFilterStringSearch.d.ts +0 -23
  487. package/model/tableFilterType.d.ts +0 -22
  488. package/model/tableHardlink.d.ts +0 -21
  489. package/model/tableHardlinkColumnType.d.ts +0 -22
  490. package/model/tableHardlinkFields.d.ts +0 -57
  491. package/model/tableHardlinkFilter.d.ts +0 -37
  492. package/model/tableHardlinkFilterList.d.ts +0 -20
  493. package/model/tableHardlinkList.d.ts +0 -22
  494. package/model/tableHardlinkMetrics.d.ts +0 -26
  495. package/model/tableHardlinkMetricsFilterList.d.ts +0 -24
  496. package/model/tableListCounters.d.ts +0 -24
  497. package/model/tableListCountersDetail.d.ts +0 -19
  498. package/model/tableLocation.d.ts +0 -21
  499. package/model/tableLocationColumnType.d.ts +0 -21
  500. package/model/tableLocationFields.d.ts +0 -47
  501. package/model/tableLocationFilter.d.ts +0 -37
  502. package/model/tableLocationFilterList.d.ts +0 -20
  503. package/model/tableLocationList.d.ts +0 -22
  504. package/model/tableLocationMetrics.d.ts +0 -26
  505. package/model/tableLocationMetricsFilterList.d.ts +0 -24
  506. package/model/tableOrder.d.ts +0 -21
  507. package/model/tableOrderColumnType.d.ts +0 -47
  508. package/model/tableOrderFields.d.ts +0 -137
  509. package/model/tableOrderFilter.d.ts +0 -37
  510. package/model/tableOrderFilterList.d.ts +0 -20
  511. package/model/tableOrderList.d.ts +0 -22
  512. package/model/tableOrderMetrics.d.ts +0 -26
  513. package/model/tableOrderMetricsFilterList.d.ts +0 -24
  514. package/model/tablePerformer.d.ts +0 -21
  515. package/model/tablePerformerColumnType.d.ts +0 -29
  516. package/model/tablePerformerFields.d.ts +0 -76
  517. package/model/tablePerformerFilter.d.ts +0 -37
  518. package/model/tablePerformerFilterList.d.ts +0 -20
  519. package/model/tablePerformerList.d.ts +0 -22
  520. package/model/tablePerformerMetrics.d.ts +0 -26
  521. package/model/tablePerformerMetricsFilterList.d.ts +0 -24
  522. package/model/tableRoundtrip.d.ts +0 -21
  523. package/model/tableRoundtripColumnType.d.ts +0 -49
  524. package/model/tableRoundtripFields.d.ts +0 -159
  525. package/model/tableRoundtripFilter.d.ts +0 -37
  526. package/model/tableRoundtripFilterList.d.ts +0 -20
  527. package/model/tableRoundtripList.d.ts +0 -22
  528. package/model/tableRoundtripMetrics.d.ts +0 -26
  529. package/model/tableRoundtripMetricsFilterList.d.ts +0 -24
  530. package/model/tableTransport.d.ts +0 -21
  531. package/model/tableTransportColumnType.d.ts +0 -35
  532. package/model/tableTransportFields.d.ts +0 -101
  533. package/model/tableTransportFilter.d.ts +0 -37
  534. package/model/tableTransportFilterList.d.ts +0 -20
  535. package/model/tableTransportList.d.ts +0 -22
  536. package/model/tableTransportMetrics.d.ts +0 -26
  537. package/model/tableTransportMetricsFilterList.d.ts +0 -24
  538. package/model/tableTrip.d.ts +0 -21
  539. package/model/tableTripColumnType.d.ts +0 -51
  540. package/model/tableTripFields.d.ts +0 -165
  541. package/model/tableTripFilter.d.ts +0 -37
  542. package/model/tableTripFilterList.d.ts +0 -20
  543. package/model/tableTripList.d.ts +0 -22
  544. package/model/tableTripMetrics.d.ts +0 -26
  545. package/model/tableTripMetricsFilterList.d.ts +0 -24
  546. package/model/tableTripStop.d.ts +0 -21
  547. package/model/tableTripStopColumnType.d.ts +0 -31
  548. package/model/tableTripStopFields.d.ts +0 -90
  549. package/model/tableTripStopFilter.d.ts +0 -37
  550. package/model/tableTripStopFilterList.d.ts +0 -20
  551. package/model/tableTripStopList.d.ts +0 -22
  552. package/model/taskStatistics.d.ts +0 -20
  553. package/model/timeWindow.d.ts +0 -23
  554. package/model/timeWindowViolationDetail.d.ts +0 -23
  555. package/model/timeWindowViolations.d.ts +0 -24
  556. package/model/tracedata.d.ts +0 -49
  557. package/model/track.d.ts +0 -44
  558. package/model/trackList.d.ts +0 -22
  559. package/model/trackListCustom.d.ts +0 -20
  560. package/model/trackType.d.ts +0 -17
  561. package/model/trackpoint.d.ts +0 -27
  562. package/model/translations.d.ts +0 -23
  563. package/model/transport.d.ts +0 -44
  564. package/model/transportCapacityMultiplier.d.ts +0 -19
  565. package/model/transportCompatibilities.d.ts +0 -28
  566. package/model/transportLimits.d.ts +0 -21
  567. package/model/transportLoad.d.ts +0 -21
  568. package/model/transportShift.d.ts +0 -43
  569. package/model/transportSpeedMultiplier.d.ts +0 -21
  570. package/model/transportTariff.d.ts +0 -26
  571. package/model/transportTariffConstraint.d.ts +0 -23
  572. package/model/transportType.d.ts +0 -30
  573. package/model/trip.d.ts +0 -41
  574. package/model/tripAssumptions.d.ts +0 -45
  575. package/model/tripExpectations.d.ts +0 -26
  576. package/model/tripPenalties.d.ts +0 -24
  577. package/model/tripStartTimeStrategy.d.ts +0 -16
  578. package/model/tripState.d.ts +0 -66
  579. package/model/tripStateFlag.d.ts +0 -28
  580. package/model/tripStatistics.d.ts +0 -41
  581. package/model/tripStatus.d.ts +0 -23
  582. package/model/tripsSettings.d.ts +0 -25
  583. package/model/universal400WithErrorsAndWarnings.d.ts +0 -36
  584. package/model/universalData.d.ts +0 -67
  585. package/model/unplannedItems.d.ts +0 -47
  586. package/model/versionResult.d.ts +0 -27
  587. package/model/webFact.d.ts +0 -24
  588. package/model/webHardlink.d.ts +0 -24
  589. package/model/webLocation.d.ts +0 -26
  590. package/model/webLocationGeopoint.d.ts +0 -33
  591. package/model/webLocationGeopointList.d.ts +0 -30
  592. package/model/webOrder.d.ts +0 -24
  593. package/model/webOrderGeopoint.d.ts +0 -43
  594. package/model/webOrderGeopointList.d.ts +0 -30
  595. package/model/webPerformer.d.ts +0 -24
  596. package/model/webPerformerGeopoint.d.ts +0 -45
  597. package/model/webPerformerGeopointList.d.ts +0 -30
  598. package/model/webTransport.d.ts +0 -24
  599. package/model/webTransportGeopoint.d.ts +0 -45
  600. package/model/webTransportGeopointList.d.ts +0 -30
  601. package/model/webTrip.d.ts +0 -26
  602. package/model/webTripChart.d.ts +0 -22
  603. package/model/webTripChartDemand.d.ts +0 -21
  604. package/model/webTripChartList.d.ts +0 -22
  605. package/model/workAndRestRules.d.ts +0 -27
  606. package/param.d.ts +0 -37
  607. package/provide-api.d.ts +0 -3
  608. package/variables.d.ts +0 -8
@@ -1,459 +0,0 @@
1
- /**
2
- * VRt.Studio [ST]
3
- *
4
- * The version of the OpenAPI document: 7.33.3222
5
- * Contact: support@veeroute.com
6
- *
7
- * NOTE: This class is auto generated by OpenAPI Generator.
8
- * Do not edit the class manually.
9
- */
10
- /* tslint:disable:no-unused-variable member-ordering */
11
- import { Inject, Injectable, Optional } from '@angular/core';
12
- import { HttpParams, HttpContext } from '@angular/common/http';
13
- // @ts-ignore
14
- import { BASE_PATH } from '../variables';
15
- import { BaseService } from '../api.base.service';
16
- import * as i0 from "@angular/core";
17
- import * as i1 from "@angular/common/http";
18
- import * as i2 from "../configuration";
19
- export class LocationsService extends BaseService {
20
- httpClient;
21
- constructor(httpClient, basePath, configuration) {
22
- super(basePath, configuration);
23
- this.httpClient = httpClient;
24
- }
25
- createLocation(requestParameters, observe = 'body', reportProgress = false, options) {
26
- const fileKey = requestParameters?.fileKey;
27
- if (fileKey === null || fileKey === undefined) {
28
- throw new Error('Required parameter fileKey was null or undefined when calling createLocation.');
29
- }
30
- const locationStudio = requestParameters?.locationStudio;
31
- if (locationStudio === null || locationStudio === undefined) {
32
- throw new Error('Required parameter locationStudio was null or undefined when calling createLocation.');
33
- }
34
- let localVarHeaders = this.defaultHeaders;
35
- // authentication (ApiKeyAuth) required
36
- localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
37
- const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
38
- 'application/json'
39
- ]);
40
- if (localVarHttpHeaderAcceptSelected !== undefined) {
41
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
42
- }
43
- const localVarHttpContext = options?.context ?? new HttpContext();
44
- const localVarTransferCache = options?.transferCache ?? true;
45
- // to determine the Content-Type header
46
- const consumes = [
47
- 'application/json'
48
- ];
49
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
50
- if (httpContentTypeSelected !== undefined) {
51
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
52
- }
53
- let responseType_ = 'json';
54
- if (localVarHttpHeaderAcceptSelected) {
55
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
56
- responseType_ = 'text';
57
- }
58
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
59
- responseType_ = 'json';
60
- }
61
- else {
62
- responseType_ = 'blob';
63
- }
64
- }
65
- let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations`;
66
- const { basePath, withCredentials } = this.configuration;
67
- return this.httpClient.request('post', `${basePath}${localVarPath}`, {
68
- context: localVarHttpContext,
69
- body: locationStudio,
70
- responseType: responseType_,
71
- ...(withCredentials ? { withCredentials } : {}),
72
- headers: localVarHeaders,
73
- observe: observe,
74
- transferCache: localVarTransferCache,
75
- reportProgress: reportProgress
76
- });
77
- }
78
- deleteLocation(requestParameters, observe = 'body', reportProgress = false, options) {
79
- const fileKey = requestParameters?.fileKey;
80
- if (fileKey === null || fileKey === undefined) {
81
- throw new Error('Required parameter fileKey was null or undefined when calling deleteLocation.');
82
- }
83
- const essenceKey = requestParameters?.essenceKey;
84
- if (essenceKey === null || essenceKey === undefined) {
85
- throw new Error('Required parameter essenceKey was null or undefined when calling deleteLocation.');
86
- }
87
- let localVarHeaders = this.defaultHeaders;
88
- // authentication (ApiKeyAuth) required
89
- localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
90
- const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
91
- 'application/json'
92
- ]);
93
- if (localVarHttpHeaderAcceptSelected !== undefined) {
94
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
95
- }
96
- const localVarHttpContext = options?.context ?? new HttpContext();
97
- const localVarTransferCache = options?.transferCache ?? true;
98
- let responseType_ = 'json';
99
- if (localVarHttpHeaderAcceptSelected) {
100
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
101
- responseType_ = 'text';
102
- }
103
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
104
- responseType_ = 'json';
105
- }
106
- else {
107
- responseType_ = 'blob';
108
- }
109
- }
110
- let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/${this.configuration.encodeParam({ name: "essenceKey", value: essenceKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
111
- const { basePath, withCredentials } = this.configuration;
112
- return this.httpClient.request('delete', `${basePath}${localVarPath}`, {
113
- context: localVarHttpContext,
114
- responseType: responseType_,
115
- ...(withCredentials ? { withCredentials } : {}),
116
- headers: localVarHeaders,
117
- observe: observe,
118
- transferCache: localVarTransferCache,
119
- reportProgress: reportProgress
120
- });
121
- }
122
- deleteLocationsBatch(requestParameters, observe = 'body', reportProgress = false, options) {
123
- const fileKey = requestParameters?.fileKey;
124
- if (fileKey === null || fileKey === undefined) {
125
- throw new Error('Required parameter fileKey was null or undefined when calling deleteLocationsBatch.');
126
- }
127
- const requestBody = requestParameters?.requestBody;
128
- if (requestBody === null || requestBody === undefined) {
129
- throw new Error('Required parameter requestBody was null or undefined when calling deleteLocationsBatch.');
130
- }
131
- let localVarHeaders = this.defaultHeaders;
132
- // authentication (ApiKeyAuth) required
133
- localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
134
- const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
135
- 'application/json'
136
- ]);
137
- if (localVarHttpHeaderAcceptSelected !== undefined) {
138
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
139
- }
140
- const localVarHttpContext = options?.context ?? new HttpContext();
141
- const localVarTransferCache = options?.transferCache ?? true;
142
- // to determine the Content-Type header
143
- const consumes = [
144
- 'application/json'
145
- ];
146
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
147
- if (httpContentTypeSelected !== undefined) {
148
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
149
- }
150
- let responseType_ = 'json';
151
- if (localVarHttpHeaderAcceptSelected) {
152
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
153
- responseType_ = 'text';
154
- }
155
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
156
- responseType_ = 'json';
157
- }
158
- else {
159
- responseType_ = 'blob';
160
- }
161
- }
162
- let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/batch/table`;
163
- const { basePath, withCredentials } = this.configuration;
164
- return this.httpClient.request('delete', `${basePath}${localVarPath}`, {
165
- context: localVarHttpContext,
166
- body: requestBody,
167
- responseType: responseType_,
168
- ...(withCredentials ? { withCredentials } : {}),
169
- headers: localVarHeaders,
170
- observe: observe,
171
- transferCache: localVarTransferCache,
172
- reportProgress: reportProgress
173
- });
174
- }
175
- readLocation(requestParameters, observe = 'body', reportProgress = false, options) {
176
- const fileKey = requestParameters?.fileKey;
177
- if (fileKey === null || fileKey === undefined) {
178
- throw new Error('Required parameter fileKey was null or undefined when calling readLocation.');
179
- }
180
- const essenceKey = requestParameters?.essenceKey;
181
- if (essenceKey === null || essenceKey === undefined) {
182
- throw new Error('Required parameter essenceKey was null or undefined when calling readLocation.');
183
- }
184
- let localVarHeaders = this.defaultHeaders;
185
- // authentication (ApiKeyAuth) required
186
- localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
187
- const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
188
- 'application/json'
189
- ]);
190
- if (localVarHttpHeaderAcceptSelected !== undefined) {
191
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
192
- }
193
- const localVarHttpContext = options?.context ?? new HttpContext();
194
- const localVarTransferCache = options?.transferCache ?? true;
195
- let responseType_ = 'json';
196
- if (localVarHttpHeaderAcceptSelected) {
197
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
198
- responseType_ = 'text';
199
- }
200
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
201
- responseType_ = 'json';
202
- }
203
- else {
204
- responseType_ = 'blob';
205
- }
206
- }
207
- let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/${this.configuration.encodeParam({ name: "essenceKey", value: essenceKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
208
- const { basePath, withCredentials } = this.configuration;
209
- return this.httpClient.request('get', `${basePath}${localVarPath}`, {
210
- context: localVarHttpContext,
211
- responseType: responseType_,
212
- ...(withCredentials ? { withCredentials } : {}),
213
- headers: localVarHeaders,
214
- observe: observe,
215
- transferCache: localVarTransferCache,
216
- reportProgress: reportProgress
217
- });
218
- }
219
- readLocationsGeopoints(requestParameters, observe = 'body', reportProgress = false, options) {
220
- const fileKey = requestParameters?.fileKey;
221
- if (fileKey === null || fileKey === undefined) {
222
- throw new Error('Required parameter fileKey was null or undefined when calling readLocationsGeopoints.');
223
- }
224
- const offset = requestParameters?.offset;
225
- const limit = requestParameters?.limit;
226
- const tableLocationFilterListStudio = requestParameters?.tableLocationFilterListStudio;
227
- let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
228
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, offset, 'offset');
229
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, 'limit');
230
- let localVarHeaders = this.defaultHeaders;
231
- // authentication (ApiKeyAuth) required
232
- localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
233
- const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
234
- 'application/json'
235
- ]);
236
- if (localVarHttpHeaderAcceptSelected !== undefined) {
237
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
238
- }
239
- const localVarHttpContext = options?.context ?? new HttpContext();
240
- const localVarTransferCache = options?.transferCache ?? true;
241
- // to determine the Content-Type header
242
- const consumes = [
243
- 'application/json'
244
- ];
245
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
246
- if (httpContentTypeSelected !== undefined) {
247
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
248
- }
249
- let responseType_ = 'json';
250
- if (localVarHttpHeaderAcceptSelected) {
251
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
252
- responseType_ = 'text';
253
- }
254
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
255
- responseType_ = 'json';
256
- }
257
- else {
258
- responseType_ = 'blob';
259
- }
260
- }
261
- let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/batch/geopoints`;
262
- const { basePath, withCredentials } = this.configuration;
263
- return this.httpClient.request('post', `${basePath}${localVarPath}`, {
264
- context: localVarHttpContext,
265
- body: tableLocationFilterListStudio,
266
- params: localVarQueryParameters,
267
- responseType: responseType_,
268
- ...(withCredentials ? { withCredentials } : {}),
269
- headers: localVarHeaders,
270
- observe: observe,
271
- transferCache: localVarTransferCache,
272
- reportProgress: reportProgress
273
- });
274
- }
275
- readLocationsMetrics(requestParameters, observe = 'body', reportProgress = false, options) {
276
- const fileKey = requestParameters?.fileKey;
277
- if (fileKey === null || fileKey === undefined) {
278
- throw new Error('Required parameter fileKey was null or undefined when calling readLocationsMetrics.');
279
- }
280
- const tableLocationMetricsFilterListStudio = requestParameters?.tableLocationMetricsFilterListStudio;
281
- if (tableLocationMetricsFilterListStudio === null || tableLocationMetricsFilterListStudio === undefined) {
282
- throw new Error('Required parameter tableLocationMetricsFilterListStudio was null or undefined when calling readLocationsMetrics.');
283
- }
284
- let localVarHeaders = this.defaultHeaders;
285
- // authentication (ApiKeyAuth) required
286
- localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
287
- const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
288
- 'application/json'
289
- ]);
290
- if (localVarHttpHeaderAcceptSelected !== undefined) {
291
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
292
- }
293
- const localVarHttpContext = options?.context ?? new HttpContext();
294
- const localVarTransferCache = options?.transferCache ?? true;
295
- // to determine the Content-Type header
296
- const consumes = [
297
- 'application/json'
298
- ];
299
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
300
- if (httpContentTypeSelected !== undefined) {
301
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
302
- }
303
- let responseType_ = 'json';
304
- if (localVarHttpHeaderAcceptSelected) {
305
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
306
- responseType_ = 'text';
307
- }
308
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
309
- responseType_ = 'json';
310
- }
311
- else {
312
- responseType_ = 'blob';
313
- }
314
- }
315
- let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/batch/metrics`;
316
- const { basePath, withCredentials } = this.configuration;
317
- return this.httpClient.request('post', `${basePath}${localVarPath}`, {
318
- context: localVarHttpContext,
319
- body: tableLocationMetricsFilterListStudio,
320
- responseType: responseType_,
321
- ...(withCredentials ? { withCredentials } : {}),
322
- headers: localVarHeaders,
323
- observe: observe,
324
- transferCache: localVarTransferCache,
325
- reportProgress: reportProgress
326
- });
327
- }
328
- readLocationsTable(requestParameters, observe = 'body', reportProgress = false, options) {
329
- const fileKey = requestParameters?.fileKey;
330
- if (fileKey === null || fileKey === undefined) {
331
- throw new Error('Required parameter fileKey was null or undefined when calling readLocationsTable.');
332
- }
333
- const offset = requestParameters?.offset;
334
- const limit = requestParameters?.limit;
335
- const sortField = requestParameters?.sortField;
336
- const sortCustomfield = requestParameters?.sortCustomfield;
337
- const sortDirection = requestParameters?.sortDirection;
338
- const tableLocationFilterListStudio = requestParameters?.tableLocationFilterListStudio;
339
- let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
340
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, offset, 'offset');
341
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, 'limit');
342
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, sortField, 'sort_field');
343
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, sortCustomfield, 'sort_customfield');
344
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, sortDirection, 'sort_direction');
345
- let localVarHeaders = this.defaultHeaders;
346
- // authentication (ApiKeyAuth) required
347
- localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
348
- const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
349
- 'application/json'
350
- ]);
351
- if (localVarHttpHeaderAcceptSelected !== undefined) {
352
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
353
- }
354
- const localVarHttpContext = options?.context ?? new HttpContext();
355
- const localVarTransferCache = options?.transferCache ?? true;
356
- // to determine the Content-Type header
357
- const consumes = [
358
- 'application/json'
359
- ];
360
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
361
- if (httpContentTypeSelected !== undefined) {
362
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
363
- }
364
- let responseType_ = 'json';
365
- if (localVarHttpHeaderAcceptSelected) {
366
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
367
- responseType_ = 'text';
368
- }
369
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
370
- responseType_ = 'json';
371
- }
372
- else {
373
- responseType_ = 'blob';
374
- }
375
- }
376
- let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations/batch/table`;
377
- const { basePath, withCredentials } = this.configuration;
378
- return this.httpClient.request('post', `${basePath}${localVarPath}`, {
379
- context: localVarHttpContext,
380
- body: tableLocationFilterListStudio,
381
- params: localVarQueryParameters,
382
- responseType: responseType_,
383
- ...(withCredentials ? { withCredentials } : {}),
384
- headers: localVarHeaders,
385
- observe: observe,
386
- transferCache: localVarTransferCache,
387
- reportProgress: reportProgress
388
- });
389
- }
390
- updateLocation(requestParameters, observe = 'body', reportProgress = false, options) {
391
- const fileKey = requestParameters?.fileKey;
392
- if (fileKey === null || fileKey === undefined) {
393
- throw new Error('Required parameter fileKey was null or undefined when calling updateLocation.');
394
- }
395
- const locationStudio = requestParameters?.locationStudio;
396
- if (locationStudio === null || locationStudio === undefined) {
397
- throw new Error('Required parameter locationStudio was null or undefined when calling updateLocation.');
398
- }
399
- let localVarHeaders = this.defaultHeaders;
400
- // authentication (ApiKeyAuth) required
401
- localVarHeaders = this.configuration.addCredentialToHeaders('ApiKeyAuth', 'Authorization', localVarHeaders, 'Bearer ');
402
- const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
403
- 'application/json'
404
- ]);
405
- if (localVarHttpHeaderAcceptSelected !== undefined) {
406
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
407
- }
408
- const localVarHttpContext = options?.context ?? new HttpContext();
409
- const localVarTransferCache = options?.transferCache ?? true;
410
- // to determine the Content-Type header
411
- const consumes = [
412
- 'application/json'
413
- ];
414
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
415
- if (httpContentTypeSelected !== undefined) {
416
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
417
- }
418
- let responseType_ = 'json';
419
- if (localVarHttpHeaderAcceptSelected) {
420
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
421
- responseType_ = 'text';
422
- }
423
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
424
- responseType_ = 'json';
425
- }
426
- else {
427
- responseType_ = 'blob';
428
- }
429
- }
430
- let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "fileKey", value: fileKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/locations`;
431
- const { basePath, withCredentials } = this.configuration;
432
- return this.httpClient.request('put', `${basePath}${localVarPath}`, {
433
- context: localVarHttpContext,
434
- body: locationStudio,
435
- responseType: responseType_,
436
- ...(withCredentials ? { withCredentials } : {}),
437
- headers: localVarHeaders,
438
- observe: observe,
439
- transferCache: localVarTransferCache,
440
- reportProgress: reportProgress
441
- });
442
- }
443
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocationsService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
444
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocationsService, providedIn: 'root' });
445
- }
446
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocationsService, decorators: [{
447
- type: Injectable,
448
- args: [{
449
- providedIn: 'root'
450
- }]
451
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
452
- type: Optional
453
- }, {
454
- type: Inject,
455
- args: [BASE_PATH]
456
- }] }, { type: i2.Configuration, decorators: [{
457
- type: Optional
458
- }] }] });
459
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb25zU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9sb2NhdGlvbnNTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUEyQixlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUEyQixVQUFVLEVBQ1UsV0FBVyxFQUN4RCxNQUFZLHNCQUFzQixDQUFDO0FBbUM1QyxhQUFhO0FBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBMEIsY0FBYyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQWtCbEQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFdBQVc7SUFFdkI7SUFBdEIsWUFBc0IsVUFBc0IsRUFBaUMsUUFBeUIsRUFBYyxhQUE2QjtRQUM3SSxLQUFLLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRGIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUU1QyxDQUFDO0lBWU0sY0FBYyxDQUFDLGlCQUE4QyxFQUFFLFVBQWUsTUFBTSxFQUFFLGlCQUEwQixLQUFLLEVBQUUsT0FBaUc7UUFDM04sTUFBTSxPQUFPLEdBQUcsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1FBQzNDLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxjQUFjLENBQUM7UUFDekQsSUFBSSxjQUFjLEtBQUssSUFBSSxJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLHNGQUFzRixDQUFDLENBQUM7UUFDNUcsQ0FB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QU8sRUFBRSxtQkFBbUI7WUFDNUIsSUFBSSxFQUFFLGNBQWM7WUFDcEIsWUFBWSxFQUFPLGFBQWE7WUFDaEMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9DLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQzt3R0E3a0JRLGdCQUFnQiw0Q0FFeUMsU0FBUzs0R0FGbEUsZ0JBQWdCLGNBRmYsTUFBTTs7NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBR2tELFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsU0FBUzs7MEJBQThCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZSdC5TdHVkaW8gW1NUXVxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiA3LjMzLjMyMjJcbiAqIENvbnRhY3Q6IHN1cHBvcnRAdmVlcm91dGUuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvci5cbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyxcbiAgICAgICAgIEh0dHBSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwUGFyYW1ldGVyQ29kZWMsIEh0dHBDb250ZXh0IFxuICAgICAgICB9ICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYyB9ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9lbmNvZGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDQwMFN0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw0MDAnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDQwMlN0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw0MDInO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDQwM1N0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw0MDMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDQwNFN0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw0MDQnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDQyOVN0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw0MjknO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgR2VuZXJhbDUwMFN0dWRpbyB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWw1MDAnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgTG9jYXRpb25TdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9sb2NhdGlvbic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBUYWJsZUN1c3RvbWZpZWxkc0NvbHVtblR5cGVTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC90YWJsZUN1c3RvbWZpZWxkc0NvbHVtblR5cGUnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVGFibGVMb2NhdGlvbkNvbHVtblR5cGVTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC90YWJsZUxvY2F0aW9uQ29sdW1uVHlwZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBUYWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbyB9IGZyb20gJy4uL21vZGVsL3RhYmxlTG9jYXRpb25GaWx0ZXJMaXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFRhYmxlTG9jYXRpb25MaXN0U3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvdGFibGVMb2NhdGlvbkxpc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVGFibGVMb2NhdGlvbk1ldHJpY3NGaWx0ZXJMaXN0U3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvdGFibGVMb2NhdGlvbk1ldHJpY3NGaWx0ZXJMaXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvdGFibGVMb2NhdGlvbk1ldHJpY3MnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgV2ViTG9jYXRpb25HZW9wb2ludExpc3RTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC93ZWJMb2NhdGlvbkdlb3BvaW50TGlzdCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBXZWJMb2NhdGlvblN0dWRpbyB9IGZyb20gJy4uL21vZGVsL3dlYkxvY2F0aW9uJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQkFTRV9QQVRILCBDT0xMRUNUSU9OX0ZPUk1BVFMgfSAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uL2FwaS5iYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBMb2NhdGlvbnNTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIENyZWF0ZUxvY2F0aW9uUmVxdWVzdFBhcmFtcyxcbiAgICBEZWxldGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsXG4gICAgRGVsZXRlTG9jYXRpb25zQmF0Y2hSZXF1ZXN0UGFyYW1zLFxuICAgIFJlYWRMb2NhdGlvblJlcXVlc3RQYXJhbXMsXG4gICAgUmVhZExvY2F0aW9uc0dlb3BvaW50c1JlcXVlc3RQYXJhbXMsXG4gICAgUmVhZExvY2F0aW9uc01ldHJpY3NSZXF1ZXN0UGFyYW1zLFxuICAgIFJlYWRMb2NhdGlvbnNUYWJsZVJlcXVlc3RQYXJhbXMsXG4gICAgVXBkYXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zXG59IGZyb20gJy4vbG9jYXRpb25zU2VydmljZUludGVyZmFjZSc7XG5cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMb2NhdGlvbnNTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2UgaW1wbGVtZW50cyBMb2NhdGlvbnNTZXJ2aWNlSW50ZXJmYWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3VwZXIoYmFzZVBhdGgsIGNvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBsb2NhdGlvblxuICAgICAqIENyZWF0ZSBsb2NhdGlvbi5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlTG9jYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IENyZWF0ZUxvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxXZWJMb2NhdGlvblN0dWRpbz47XG4gICAgcHVibGljIGNyZWF0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBDcmVhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxXZWJMb2NhdGlvblN0dWRpbz4+O1xuICAgIHB1YmxpYyBjcmVhdGVMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogQ3JlYXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFdlYkxvY2F0aW9uU3R1ZGlvPj47XG4gICAgcHVibGljIGNyZWF0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBDcmVhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsZUtleTtcbiAgICAgICAgaWYgKGZpbGVLZXkgPT09IG51bGwgfHwgZmlsZUtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBmaWxlS2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgY3JlYXRlTG9jYXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYXRpb25TdHVkaW8gPSByZXF1ZXN0UGFyYW1ldGVycz8ubG9jYXRpb25TdHVkaW87XG4gICAgICAgIGlmIChsb2NhdGlvblN0dWRpbyA9PT0gbnVsbCB8fCBsb2NhdGlvblN0dWRpbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBsb2NhdGlvblN0dWRpbyB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZUxvY2F0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKEFwaUtleUF1dGgpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFySGVhZGVycyA9IHRoaXMuY29uZmlndXJhdGlvbi5hZGRDcmVkZW50aWFsVG9IZWFkZXJzKCdBcGlLZXlBdXRoJywgJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckhlYWRlcnMsICdCZWFyZXIgJyk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnM/Lmh0dHBIZWFkZXJBY2NlcHQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCA9IG9wdGlvbnM/LmNvbnRleHQgPz8gbmV3IEh0dHBDb250ZXh0KCk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuID0gb3B0aW9ucz8udHJhbnNmZXJDYWNoZSA/PyB0cnVlO1xuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9zdHVkaW8vZXhwZXJpbWVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiZmlsZUtleVwiLCB2YWx1ZTogZmlsZUtleSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiBcInV1aWRcIn0pfS9sb2NhdGlvbnNgO1xuICAgICAgICBjb25zdCB7IGJhc2VQYXRoLCB3aXRoQ3JlZGVudGlhbHMgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFdlYkxvY2F0aW9uU3R1ZGlvPigncG9zdCcsIGAke2Jhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBsb2NhdGlvblN0dWRpbyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICAuLi4od2l0aENyZWRlbnRpYWxzID8geyB3aXRoQ3JlZGVudGlhbHMgfSA6IHt9KSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGxvY2F0aW9uXG4gICAgICogUmVtb3ZpbmcgYSBsb2NhdGlvbiBieSBrZXkuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBEZWxldGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PjtcbiAgICBwdWJsaWMgZGVsZXRlTG9jYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IERlbGV0ZUxvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+O1xuICAgIHB1YmxpYyBkZWxldGVMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogRGVsZXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+O1xuICAgIHB1YmxpYyBkZWxldGVMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogRGVsZXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBmaWxlS2V5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmZpbGVLZXk7XG4gICAgICAgIGlmIChmaWxlS2V5ID09PSBudWxsIHx8IGZpbGVLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgZmlsZUtleSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGRlbGV0ZUxvY2F0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVzc2VuY2VLZXkgPSByZXF1ZXN0UGFyYW1ldGVycz8uZXNzZW5jZUtleTtcbiAgICAgICAgaWYgKGVzc2VuY2VLZXkgPT09IG51bGwgfHwgZXNzZW5jZUtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBlc3NlbmNlS2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZGVsZXRlTG9jYXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoQXBpS2V5QXV0aCkgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5jb25maWd1cmF0aW9uLmFkZENyZWRlbnRpYWxUb0hlYWRlcnMoJ0FwaUtleUF1dGgnLCAnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFySGVhZGVycywgJ0JlYXJlciAnKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucz8uaHR0cEhlYWRlckFjY2VwdCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdKTtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/PyBuZXcgSHR0cENvbnRleHQoKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gPSBvcHRpb25zPy50cmFuc2ZlckNhY2hlID8/IHRydWU7XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvc3R1ZGlvL2V4cGVyaW1lbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImZpbGVLZXlcIiwgdmFsdWU6IGZpbGVLZXksIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vbG9jYXRpb25zLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImVzc2VuY2VLZXlcIiwgdmFsdWU6IGVzc2VuY2VLZXksIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgY29uc3QgeyBiYXNlUGF0aCwgd2l0aENyZWRlbnRpYWxzIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxhbnk+KCdkZWxldGUnLCBgJHtiYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgLi4uKHdpdGhDcmVkZW50aWFscyA/IHsgd2l0aENyZWRlbnRpYWxzIH0gOiB7fSksXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBsb2NhdGlvbnMgKGJhdGNoKVxuICAgICAqIFJlbW92aW5nIGxvY2F0aW9ucyBmcm9tIHRoZSBmaWxlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVMb2NhdGlvbnNCYXRjaChyZXF1ZXN0UGFyYW1ldGVyczogRGVsZXRlTG9jYXRpb25zQmF0Y2hSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcHVibGljIGRlbGV0ZUxvY2F0aW9uc0JhdGNoKHJlcXVlc3RQYXJhbWV0ZXJzOiBEZWxldGVMb2NhdGlvbnNCYXRjaFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PjtcbiAgICBwdWJsaWMgZGVsZXRlTG9jYXRpb25zQmF0Y2gocmVxdWVzdFBhcmFtZXRlcnM6IERlbGV0ZUxvY2F0aW9uc0JhdGNoUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PjtcbiAgICBwdWJsaWMgZGVsZXRlTG9jYXRpb25zQmF0Y2gocmVxdWVzdFBhcmFtZXRlcnM6IERlbGV0ZUxvY2F0aW9uc0JhdGNoUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgZmlsZUtleSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWxlS2V5O1xuICAgICAgICBpZiAoZmlsZUtleSA9PT0gbnVsbCB8fCBmaWxlS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZpbGVLZXkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVMb2NhdGlvbnNCYXRjaC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5yZXF1ZXN0Qm9keTtcbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ID09PSBudWxsIHx8IHJlcXVlc3RCb2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHJlcXVlc3RCb2R5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZGVsZXRlTG9jYXRpb25zQmF0Y2guJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoQXBpS2V5QXV0aCkgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5jb25maWd1cmF0aW9uLmFkZENyZWRlbnRpYWxUb0hlYWRlcnMoJ0FwaUtleUF1dGgnLCAnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFySGVhZGVycywgJ0JlYXJlciAnKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucz8uaHR0cEhlYWRlckFjY2VwdCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdKTtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/PyBuZXcgSHR0cENvbnRleHQoKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gPSBvcHRpb25zPy50cmFuc2ZlckNhY2hlID8/IHRydWU7XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3N0dWRpby9leHBlcmltZW50cy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJmaWxlS2V5XCIsIHZhbHVlOiBmaWxlS2V5LCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9L2xvY2F0aW9ucy9iYXRjaC90YWJsZWA7XG4gICAgICAgIGNvbnN0IHsgYmFzZVBhdGgsIHdpdGhDcmVkZW50aWFscyB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8YW55PignZGVsZXRlJywgYCR7YmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIC4uLih3aXRoQ3JlZGVudGlhbHMgPyB7IHdpdGhDcmVkZW50aWFscyB9IDoge30pLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGxvY2F0aW9uXG4gICAgICogR2V0dGluZyBsb2NhdGlvbiBpbmZvcm1hdGlvbiBieSBrZXkuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxXZWJMb2NhdGlvblN0dWRpbz47XG4gICAgcHVibGljIHJlYWRMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFdlYkxvY2F0aW9uU3R1ZGlvPj47XG4gICAgcHVibGljIHJlYWRMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxXZWJMb2NhdGlvblN0dWRpbz4+O1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsZUtleTtcbiAgICAgICAgaWYgKGZpbGVLZXkgPT09IG51bGwgfHwgZmlsZUtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBmaWxlS2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcmVhZExvY2F0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVzc2VuY2VLZXkgPSByZXF1ZXN0UGFyYW1ldGVycz8uZXNzZW5jZUtleTtcbiAgICAgICAgaWYgKGVzc2VuY2VLZXkgPT09IG51bGwgfHwgZXNzZW5jZUtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBlc3NlbmNlS2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcmVhZExvY2F0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKEFwaUtleUF1dGgpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFySGVhZGVycyA9IHRoaXMuY29uZmlndXJhdGlvbi5hZGRDcmVkZW50aWFsVG9IZWFkZXJzKCdBcGlLZXlBdXRoJywgJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckhlYWRlcnMsICdCZWFyZXIgJyk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnM/Lmh0dHBIZWFkZXJBY2NlcHQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCA9IG9wdGlvbnM/LmNvbnRleHQgPz8gbmV3IEh0dHBDb250ZXh0KCk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuID0gb3B0aW9ucz8udHJhbnNmZXJDYWNoZSA/PyB0cnVlO1xuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3N0dWRpby9leHBlcmltZW50cy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJmaWxlS2V5XCIsIHZhbHVlOiBmaWxlS2V5LCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9L2xvY2F0aW9ucy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJlc3NlbmNlS2V5XCIsIHZhbHVlOiBlc3NlbmNlS2V5LCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIGNvbnN0IHsgYmFzZVBhdGgsIHdpdGhDcmVkZW50aWFscyB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8V2ViTG9jYXRpb25TdHVkaW8+KCdnZXQnLCBgJHtiYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgLi4uKHdpdGhDcmVkZW50aWFscyA/IHsgd2l0aENyZWRlbnRpYWxzIH0gOiB7fSksXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvY2F0aW9uIGdlb3BvaW50c1xuICAgICAqIEdldHRpbmcgYSBnZW9wb2ludHMuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRMb2NhdGlvbnNHZW9wb2ludHMocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNHZW9wb2ludHNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFdlYkxvY2F0aW9uR2VvcG9pbnRMaXN0U3R1ZGlvPjtcbiAgICBwdWJsaWMgcmVhZExvY2F0aW9uc0dlb3BvaW50cyhyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uc0dlb3BvaW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxXZWJMb2NhdGlvbkdlb3BvaW50TGlzdFN0dWRpbz4+O1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zR2VvcG9pbnRzKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWFkTG9jYXRpb25zR2VvcG9pbnRzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxXZWJMb2NhdGlvbkdlb3BvaW50TGlzdFN0dWRpbz4+O1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zR2VvcG9pbnRzKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWFkTG9jYXRpb25zR2VvcG9pbnRzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgZmlsZUtleSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWxlS2V5O1xuICAgICAgICBpZiAoZmlsZUtleSA9PT0gbnVsbCB8fCBmaWxlS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZpbGVLZXkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZWFkTG9jYXRpb25zR2VvcG9pbnRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgICAgICBjb25zdCB0YWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy50YWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbztcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgPGFueT5vZmZzZXQsICdvZmZzZXQnKTtcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICA8YW55PmxpbWl0LCAnbGltaXQnKTtcblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoQXBpS2V5QXV0aCkgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5jb25maWd1cmF0aW9uLmFkZENyZWRlbnRpYWxUb0hlYWRlcnMoJ0FwaUtleUF1dGgnLCAnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFySGVhZGVycywgJ0JlYXJlciAnKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucz8uaHR0cEhlYWRlckFjY2VwdCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdKTtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/PyBuZXcgSHR0cENvbnRleHQoKTtcblxuICAgICAgICBjb25zdCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gPSBvcHRpb25zPy50cmFuc2ZlckNhY2hlID8/IHRydWU7XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3N0dWRpby9leHBlcmltZW50cy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJmaWxlS2V5XCIsIHZhbHVlOiBmaWxlS2V5LCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9L2xvY2F0aW9ucy9iYXRjaC9nZW9wb2ludHNgO1xuICAgICAgICBjb25zdCB7IGJhc2VQYXRoLCB3aXRoQ3JlZGVudGlhbHMgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFdlYkxvY2F0aW9uR2VvcG9pbnRMaXN0U3R1ZGlvPigncG9zdCcsIGAke2Jhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiB0YWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbyxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIC4uLih3aXRoQ3JlZGVudGlhbHMgPyB7IHdpdGhDcmVkZW50aWFscyB9IDoge30pLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2NhdGlvbiBtZXRyaWNzXG4gICAgICogQ2FsY3VsYXRlIGdlbmVyYWwgbWV0cmljcyBmb3Igc2VsZWN0ZWQgbG9jYXRpb25zLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zTWV0cmljcyhyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uc01ldHJpY3NSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvPjtcbiAgICBwdWJsaWMgcmVhZExvY2F0aW9uc01ldHJpY3MocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNNZXRyaWNzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvPj47XG4gICAgcHVibGljIHJlYWRMb2NhdGlvbnNNZXRyaWNzKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWFkTG9jYXRpb25zTWV0cmljc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8VGFibGVMb2NhdGlvbk1ldHJpY3NTdHVkaW8+PjtcbiAgICBwdWJsaWMgcmVhZExvY2F0aW9uc01ldHJpY3MocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNNZXRyaWNzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgZmlsZUtleSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWxlS2V5O1xuICAgICAgICBpZiAoZmlsZUtleSA9PT0gbnVsbCB8fCBmaWxlS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZpbGVLZXkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZWFkTG9jYXRpb25zTWV0cmljcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWJsZUxvY2F0aW9uTWV0cmljc0ZpbHRlckxpc3RTdHVkaW8gPSByZXF1ZXN0UGFyYW1ldGVycz8udGFibGVMb2NhdGlvbk1ldHJpY3NGaWx0ZXJMaXN0U3R1ZGlvO1xuICAgICAgICBpZiAodGFibGVMb2NhdGlvbk1ldHJpY3NGaWx0ZXJMaXN0U3R1ZGlvID09PSBudWxsIHx8IHRhYmxlTG9jYXRpb25NZXRyaWNzRmlsdGVyTGlzdFN0dWRpbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB0YWJsZUxvY2F0aW9uTWV0cmljc0ZpbHRlckxpc3RTdHVkaW8gd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZWFkTG9jYXRpb25zTWV0cmljcy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChBcGlLZXlBdXRoKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkQ3JlZGVudGlhbFRvSGVhZGVycygnQXBpS2V5QXV0aCcsICdBdXRob3JpemF0aW9uJywgbG9jYWxWYXJIZWFkZXJzLCAnQmVhcmVyICcpO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zPy5odHRwSGVhZGVyQWNjZXB0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgPSBvcHRpb25zPy5jb250ZXh0ID8/IG5ldyBIdHRwQ29udGV4dCgpO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiA9IG9wdGlvbnM/LnRyYW5zZmVyQ2FjaGUgPz8gdHJ1ZTtcblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvc3R1ZGlvL2V4cGVyaW1lbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImZpbGVLZXlcIiwgdmFsdWU6IGZpbGVLZXksIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vbG9jYXRpb25zL2JhdGNoL21ldHJpY3NgO1xuICAgICAgICBjb25zdCB7IGJhc2VQYXRoLCB3aXRoQ3JlZGVudGlhbHMgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvPigncG9zdCcsIGAke2Jhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiB0YWJsZUxvY2F0aW9uTWV0cmljc0ZpbHRlckxpc3RTdHVkaW8sXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgLi4uKHdpdGhDcmVkZW50aWFscyA/IHsgd2l0aENyZWRlbnRpYWxzIH0gOiB7fSksXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvY2F0aW9ucyBsaXN0XG4gICAgICogR2V0dGluZyBhIGxvY2F0aW9ucyBsaXN0LlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zVGFibGUocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNUYWJsZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8VGFibGVMb2NhdGlvbkxpc3RTdHVkaW8+O1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zVGFibGUocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNUYWJsZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxUYWJsZUxvY2F0aW9uTGlzdFN0dWRpbz4+O1xuICAgIHB1YmxpYyByZWFkTG9jYXRpb25zVGFibGUocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNUYWJsZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8VGFibGVMb2NhdGlvbkxpc3RTdHVkaW8+PjtcbiAgICBwdWJsaWMgcmVhZExvY2F0aW9uc1RhYmxlKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWFkTG9jYXRpb25zVGFibGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBmaWxlS2V5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmZpbGVLZXk7XG4gICAgICAgIGlmIChmaWxlS2V5ID09PSBudWxsIHx8IGZpbGVLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgZmlsZUtleSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHJlYWRMb2NhdGlvbnNUYWJsZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvZmZzZXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ub2Zmc2V0O1xuICAgICAgICBjb25zdCBsaW1pdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5saW1pdDtcbiAgICAgICAgY29uc3Qgc29ydEZpZWxkID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNvcnRGaWVsZDtcbiAgICAgICAgY29uc3Qgc29ydEN1c3RvbWZpZWxkID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNvcnRDdXN0b21maWVsZDtcbiAgICAgICAgY29uc3Qgc29ydERpcmVjdGlvbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zb3J0RGlyZWN0aW9uO1xuICAgICAgICBjb25zdCB0YWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy50YWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbztcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgPGFueT5vZmZzZXQsICdvZmZzZXQnKTtcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICA8YW55PmxpbWl0LCAnbGltaXQnKTtcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICA8YW55PnNvcnRGaWVsZCwgJ3NvcnRfZmllbGQnKTtcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICA8YW55PnNvcnRDdXN0b21maWVsZCwgJ3NvcnRfY3VzdG9tZmllbGQnKTtcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICA8YW55PnNvcnREaXJlY3Rpb24sICdzb3J0X2RpcmVjdGlvbicpO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChBcGlLZXlBdXRoKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkQ3JlZGVudGlhbFRvSGVhZGVycygnQXBpS2V5QXV0aCcsICdBdXRob3JpemF0aW9uJywgbG9jYWxWYXJIZWFkZXJzLCAnQmVhcmVyICcpO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zPy5odHRwSGVhZGVyQWNjZXB0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgPSBvcHRpb25zPy5jb250ZXh0ID8/IG5ldyBIdHRwQ29udGV4dCgpO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiA9IG9wdGlvbnM/LnRyYW5zZmVyQ2FjaGUgPz8gdHJ1ZTtcblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvc3R1ZGlvL2V4cGVyaW1lbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImZpbGVLZXlcIiwgdmFsdWU6IGZpbGVLZXksIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vbG9jYXRpb25zL2JhdGNoL3RhYmxlYDtcbiAgICAgICAgY29uc3QgeyBiYXNlUGF0aCwgd2l0aENyZWRlbnRpYWxzIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxUYWJsZUxvY2F0aW9uTGlzdFN0dWRpbz4oJ3Bvc3QnLCBgJHtiYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogdGFibGVMb2NhdGlvbkZpbHRlckxpc3RTdHVkaW8sXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICAuLi4od2l0aENyZWRlbnRpYWxzID8geyB3aXRoQ3JlZGVudGlhbHMgfSA6IHt9KSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGxvY2F0aW9uXG4gICAgICogVXBkYXRpbmcgdGhlIGxvY2F0aW9uIGJ5IGtleS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlTG9jYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFVwZGF0ZUxvY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxXZWJMb2NhdGlvblN0dWRpbz47XG4gICAgcHVibGljIHVwZGF0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBVcGRhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxXZWJMb2NhdGlvblN0dWRpbz4+O1xuICAgIHB1YmxpYyB1cGRhdGVMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogVXBkYXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFdlYkxvY2F0aW9uU3R1ZGlvPj47XG4gICAgcHVibGljIHVwZGF0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBVcGRhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsZUtleTtcbiAgICAgICAgaWYgKGZpbGVLZXkgPT09IG51bGwgfHwgZmlsZUtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBmaWxlS2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdXBkYXRlTG9jYXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYXRpb25TdHVkaW8gPSByZXF1ZXN0UGFyYW1ldGVycz8ubG9jYXRpb25TdHVkaW87XG4gICAgICAgIGlmIChsb2NhdGlvblN0dWRpbyA9PT0gbnVsbCB8fCBsb2NhdGlvblN0dWRpbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBsb2NhdGlvblN0dWRpbyB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwZGF0ZUxvY2F0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKEFwaUtleUF1dGgpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFySGVhZGVycyA9IHRoaXMuY29uZmlndXJhdGlvbi5hZGRDcmVkZW50aWFsVG9IZWFkZXJzKCdBcGlLZXlBdXRoJywgJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckhlYWRlcnMsICdCZWFyZXIgJyk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnM/Lmh0dHBIZWFkZXJBY2NlcHQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCA9IG9wdGlvbnM/LmNvbnRleHQgPz8gbmV3IEh0dHBDb250ZXh0KCk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuID0gb3B0aW9ucz8udHJhbnNmZXJDYWNoZSA/PyB0cnVlO1xuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9zdHVkaW8vZXhwZXJpbWVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiZmlsZUtleVwiLCB2YWx1ZTogZmlsZUtleSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiBcInV1aWRcIn0pfS9sb2NhdGlvbnNgO1xuICAgICAgICBjb25zdCB7IGJhc2VQYXRoLCB3aXRoQ3JlZGVudGlhbHMgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFdlYkxvY2F0aW9uU3R1ZGlvPigncHV0JywgYCR7YmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGxvY2F0aW9uU3R1ZGlvLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIC4uLih3aXRoQ3JlZGVudGlhbHMgPyB7IHdpdGhDcmVkZW50aWFscyB9IDoge30pLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb25zU2VydmljZUludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9sb2NhdGlvbnNTZXJ2aWNlSW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZSdC5TdHVkaW8gW1NUXVxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiA3LjMzLjMyMjJcbiAqIENvbnRhY3Q6IHN1cHBvcnRAdmVlcm91dGUuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvci5cbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBHZW5lcmFsNDAwU3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IEdlbmVyYWw0MDJTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgR2VuZXJhbDQwM1N0dWRpbyB9IGZyb20gJy4uL21vZGVsL21vZGVscyc7XG5pbXBvcnQgeyBHZW5lcmFsNDA0U3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IEdlbmVyYWw0MjlTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgR2VuZXJhbDUwMFN0dWRpbyB9IGZyb20gJy4uL21vZGVsL21vZGVscyc7XG5pbXBvcnQgeyBMb2NhdGlvblN0dWRpbyB9IGZyb20gJy4uL21vZGVsL21vZGVscyc7XG5pbXBvcnQgeyBUYWJsZUN1c3RvbWZpZWxkc0NvbHVtblR5cGVTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVMb2NhdGlvbkNvbHVtblR5cGVTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVMb2NhdGlvbkZpbHRlckxpc3RTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVMb2NhdGlvbkxpc3RTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVMb2NhdGlvbk1ldHJpY3NGaWx0ZXJMaXN0U3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IFdlYkxvY2F0aW9uR2VvcG9pbnRMaXN0U3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IFdlYkxvY2F0aW9uU3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcblxuXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XG5cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICBsb2NhdGlvblN0dWRpbzogTG9jYXRpb25TdHVkaW87XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlTG9jYXRpb25SZXF1ZXN0UGFyYW1zIHtcbiAgICBmaWxlS2V5OiBzdHJpbmc7XG4gICAgZXNzZW5jZUtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZUxvY2F0aW9uc0JhdGNoUmVxdWVzdFBhcmFtcyB7XG4gICAgZmlsZUtleTogc3RyaW5nO1xuICAgIHJlcXVlc3RCb2R5OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRMb2NhdGlvblJlcXVlc3RQYXJhbXMge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICBlc3NlbmNlS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZExvY2F0aW9uc0dlb3BvaW50c1JlcXVlc3RQYXJhbXMge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgdGFibGVMb2NhdGlvbkZpbHRlckxpc3RTdHVkaW8/OiBUYWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFkTG9jYXRpb25zTWV0cmljc1JlcXVlc3RQYXJhbXMge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICB0YWJsZUxvY2F0aW9uTWV0cmljc0ZpbHRlckxpc3RTdHVkaW86IFRhYmxlTG9jYXRpb25NZXRyaWNzRmlsdGVyTGlzdFN0dWRpbztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFkTG9jYXRpb25zVGFibGVSZXF1ZXN0UGFyYW1zIHtcbiAgICBmaWxlS2V5OiBzdHJpbmc7XG4gICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIHNvcnRGaWVsZD86IFRhYmxlTG9jYXRpb25Db2x1bW5UeXBlU3R1ZGlvO1xuICAgIHNvcnRDdXN0b21maWVsZD86IFRhYmxlQ3VzdG9tZmllbGRzQ29sdW1uVHlwZVN0dWRpbztcbiAgICBzb3J0RGlyZWN0aW9uPzogJ0FTQycgfCAnREVTQyc7XG4gICAgdGFibGVMb2NhdGlvbkZpbHRlckxpc3RTdHVkaW8/OiBUYWJsZUxvY2F0aW9uRmlsdGVyTGlzdFN0dWRpbztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICBsb2NhdGlvblN0dWRpbzogTG9jYXRpb25TdHVkaW87XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbnNTZXJ2aWNlSW50ZXJmYWNlIHtcbiAgICBkZWZhdWx0SGVhZGVyczogSHR0cEhlYWRlcnM7XG4gICAgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbjtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBsb2NhdGlvblxuICAgICAqIENyZWF0ZSBsb2NhdGlvbi5cbiogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICovXG4gICAgY3JlYXRlTG9jYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM6IENyZWF0ZUxvY2F0aW9uUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8V2ViTG9jYXRpb25TdHVkaW8+O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGxvY2F0aW9uXG4gICAgICogUmVtb3ZpbmcgYSBsb2NhdGlvbiBieSBrZXkuXG4qIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqL1xuICAgIGRlbGV0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBEZWxldGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPHt9PjtcblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBsb2NhdGlvbnMgKGJhdGNoKVxuICAgICAqIFJlbW92aW5nIGxvY2F0aW9ucyBmcm9tIHRoZSBmaWxlLlxuKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKi9cbiAgICBkZWxldGVMb2NhdGlvbnNCYXRjaChyZXF1ZXN0UGFyYW1ldGVyczogRGVsZXRlTG9jYXRpb25zQmF0Y2hSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTx7fT47XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGxvY2F0aW9uXG4gICAgICogR2V0dGluZyBsb2NhdGlvbiBpbmZvcm1hdGlvbiBieSBrZXkuXG4qIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqL1xuICAgIHJlYWRMb2NhdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8V2ViTG9jYXRpb25TdHVkaW8+O1xuXG4gICAgLyoqXG4gICAgICogTG9jYXRpb24gZ2VvcG9pbnRzXG4gICAgICogR2V0dGluZyBhIGdlb3BvaW50cy5cbiogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICovXG4gICAgcmVhZExvY2F0aW9uc0dlb3BvaW50cyhyZXF1ZXN0UGFyYW1ldGVyczogUmVhZExvY2F0aW9uc0dlb3BvaW50c1JlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPFdlYkxvY2F0aW9uR2VvcG9pbnRMaXN0U3R1ZGlvPjtcblxuICAgIC8qKlxuICAgICAqIExvY2F0aW9uIG1ldHJpY3NcbiAgICAgKiBDYWxjdWxhdGUgZ2VuZXJhbCBtZXRyaWNzIGZvciBzZWxlY3RlZCBsb2NhdGlvbnMuXG4qIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqL1xuICAgIHJlYWRMb2NhdGlvbnNNZXRyaWNzKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWFkTG9jYXRpb25zTWV0cmljc1JlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPFRhYmxlTG9jYXRpb25NZXRyaWNzU3R1ZGlvPjtcblxuICAgIC8qKlxuICAgICAqIExvY2F0aW9ucyBsaXN0XG4gICAgICogR2V0dGluZyBhIGxvY2F0aW9ucyBsaXN0LlxuKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKi9cbiAgICByZWFkTG9jYXRpb25zVGFibGUocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRMb2NhdGlvbnNUYWJsZVJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPFRhYmxlTG9jYXRpb25MaXN0U3R1ZGlvPjtcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBsb2NhdGlvblxuICAgICAqIFVwZGF0aW5nIHRoZSBsb2NhdGlvbiBieSBrZXkuXG4qIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqL1xuICAgIHVwZGF0ZUxvY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBVcGRhdGVMb2NhdGlvblJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPFdlYkxvY2F0aW9uU3R1ZGlvPjtcblxufVxuIl19