@microsoft/terraform-cdk-constructs 1.9.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/.jsii +38110 -28389
  2. package/API.md +40683 -30877
  3. package/lib/azure-actiongroup/lib/action-group.d.ts +3 -3
  4. package/lib/azure-actiongroup/lib/action-group.js +5 -5
  5. package/lib/azure-actiongroup/test/action-group.integ.d.ts +1 -1
  6. package/lib/azure-actiongroup/test/action-group.integ.js +5 -5
  7. package/lib/azure-actiongroup/test/action-group.spec.js +9 -9
  8. package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +3 -3
  9. package/lib/azure-activitylogalert/lib/activity-log-alert.js +5 -5
  10. package/lib/azure-activitylogalert/test/activity-log-alert.integ.d.ts +1 -1
  11. package/lib/azure-activitylogalert/test/activity-log-alert.integ.js +6 -6
  12. package/lib/azure-activitylogalert/test/activity-log-alert.spec.js +9 -9
  13. package/lib/azure-aks/lib/aks-cluster.d.ts +6 -6
  14. package/lib/azure-aks/lib/aks-cluster.js +8 -8
  15. package/lib/azure-aks/test/aks-cluster.integ.d.ts +1 -1
  16. package/lib/azure-aks/test/aks-cluster.integ.js +5 -5
  17. package/lib/azure-aks/test/aks-cluster.spec.js +12 -12
  18. package/lib/azure-containerapps/index.d.ts +1 -0
  19. package/lib/azure-containerapps/index.js +18 -0
  20. package/lib/azure-containerapps/lib/container-app-environment-schemas.d.ts +50 -0
  21. package/lib/azure-containerapps/lib/container-app-environment-schemas.js +522 -0
  22. package/lib/azure-containerapps/lib/container-app-environment.d.ts +374 -0
  23. package/lib/azure-containerapps/lib/container-app-environment.js +310 -0
  24. package/lib/azure-containerapps/lib/container-app-schemas.d.ts +48 -0
  25. package/lib/azure-containerapps/lib/container-app-schemas.js +466 -0
  26. package/lib/azure-containerapps/lib/container-app.d.ts +925 -0
  27. package/lib/azure-containerapps/lib/container-app.js +320 -0
  28. package/lib/azure-containerapps/lib/index.d.ts +4 -0
  29. package/lib/azure-containerapps/lib/index.js +21 -0
  30. package/lib/azure-containerapps/test/container-app-environment.integ.d.ts +10 -0
  31. package/lib/azure-containerapps/test/container-app-environment.integ.js +82 -0
  32. package/lib/azure-containerapps/test/container-app-environment.spec.d.ts +9 -0
  33. package/lib/azure-containerapps/test/container-app-environment.spec.js +412 -0
  34. package/lib/azure-containerapps/test/container-app.integ.d.ts +10 -0
  35. package/lib/azure-containerapps/test/container-app.integ.js +119 -0
  36. package/lib/azure-containerapps/test/container-app.spec.d.ts +9 -0
  37. package/lib/azure-containerapps/test/container-app.spec.js +839 -0
  38. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +3 -3
  39. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +5 -5
  40. package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.js +9 -9
  41. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.d.ts +7 -7
  42. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +9 -9
  43. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.d.ts +4 -4
  44. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +6 -6
  45. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.d.ts +4 -4
  46. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +6 -6
  47. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.d.ts +1 -1
  48. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.js +5 -5
  49. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.js +11 -11
  50. package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.js +14 -14
  51. package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.js +12 -12
  52. package/lib/azure-dnsresolver/lib/dns-resolver.d.ts +8 -8
  53. package/lib/azure-dnsresolver/lib/dns-resolver.js +10 -10
  54. package/lib/azure-dnsresolver/lib/inbound-endpoint.d.ts +6 -6
  55. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +8 -8
  56. package/lib/azure-dnsresolver/lib/outbound-endpoint.d.ts +7 -7
  57. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +9 -9
  58. package/lib/azure-dnsresolver/test/dns-resolver.integ.d.ts +1 -1
  59. package/lib/azure-dnsresolver/test/dns-resolver.integ.js +5 -5
  60. package/lib/azure-dnsresolver/test/dns-resolver.spec.js +11 -11
  61. package/lib/azure-dnsresolver/test/inbound-endpoint.integ.d.ts +1 -1
  62. package/lib/azure-dnsresolver/test/inbound-endpoint.integ.js +5 -5
  63. package/lib/azure-dnsresolver/test/inbound-endpoint.spec.js +12 -12
  64. package/lib/azure-dnsresolver/test/outbound-endpoint.integ.d.ts +1 -1
  65. package/lib/azure-dnsresolver/test/outbound-endpoint.integ.js +5 -5
  66. package/lib/azure-dnsresolver/test/outbound-endpoint.spec.js +9 -9
  67. package/lib/azure-dnszone/lib/dns-zone.d.ts +6 -6
  68. package/lib/azure-dnszone/lib/dns-zone.js +8 -8
  69. package/lib/azure-dnszone/lib/records/dns-records.d.ts +31 -31
  70. package/lib/azure-dnszone/lib/records/dns-records.js +42 -42
  71. package/lib/azure-dnszone/test/dns-records.integ.d.ts +1 -1
  72. package/lib/azure-dnszone/test/dns-records.integ.js +5 -5
  73. package/lib/azure-dnszone/test/dns-records.spec.js +57 -57
  74. package/lib/azure-dnszone/test/dns-zone.integ.d.ts +1 -1
  75. package/lib/azure-dnszone/test/dns-zone.integ.js +5 -5
  76. package/lib/azure-dnszone/test/dns-zone.spec.js +11 -11
  77. package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.d.ts +1 -1
  78. package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.js +3 -3
  79. package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.d.ts +1 -1
  80. package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.js +6 -6
  81. package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.js +6 -6
  82. package/lib/azure-metricalert/lib/metric-alert.d.ts +3 -3
  83. package/lib/azure-metricalert/lib/metric-alert.js +5 -5
  84. package/lib/azure-metricalert/test/metric-alert.integ.d.ts +1 -1
  85. package/lib/azure-metricalert/test/metric-alert.integ.js +5 -5
  86. package/lib/azure-metricalert/test/metric-alert.spec.js +9 -9
  87. package/lib/azure-networkinterface/lib/network-interface.d.ts +5 -5
  88. package/lib/azure-networkinterface/lib/network-interface.js +7 -7
  89. package/lib/azure-networkinterface/test/network-interface.integ.d.ts +1 -1
  90. package/lib/azure-networkinterface/test/network-interface.integ.js +5 -5
  91. package/lib/azure-networkinterface/test/network-interface.spec.js +11 -11
  92. package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +6 -6
  93. package/lib/azure-networksecuritygroup/lib/network-security-group.js +8 -8
  94. package/lib/azure-networksecuritygroup/test/network-security-group.integ.d.ts +1 -1
  95. package/lib/azure-networksecuritygroup/test/network-security-group.integ.js +5 -5
  96. package/lib/azure-networksecuritygroup/test/network-security-group.spec.js +12 -12
  97. package/lib/azure-networkwatcher/lib/network-watcher.d.ts +1 -1
  98. package/lib/azure-networkwatcher/lib/network-watcher.js +3 -3
  99. package/lib/azure-networkwatcher/test/network-watcher.integ.d.ts +1 -1
  100. package/lib/azure-networkwatcher/test/network-watcher.integ.js +6 -6
  101. package/lib/azure-networkwatcher/test/network-watcher.spec.js +6 -6
  102. package/lib/azure-policyassignment/lib/policy-assignment.d.ts +3 -3
  103. package/lib/azure-policyassignment/lib/policy-assignment.js +5 -5
  104. package/lib/azure-policyassignment/test/policy-assignment.integ.d.ts +1 -1
  105. package/lib/azure-policyassignment/test/policy-assignment.integ.js +5 -5
  106. package/lib/azure-policyassignment/test/policy-assignment.spec.js +12 -12
  107. package/lib/azure-policydefinition/lib/policy-definition.d.ts +3 -3
  108. package/lib/azure-policydefinition/lib/policy-definition.js +5 -5
  109. package/lib/azure-policydefinition/test/policy-definition.integ.d.ts +1 -1
  110. package/lib/azure-policydefinition/test/policy-definition.integ.js +5 -5
  111. package/lib/azure-policydefinition/test/policy-definition.spec.js +19 -19
  112. package/lib/azure-policysetdefinition/lib/policy-set-definition.d.ts +1 -1
  113. package/lib/azure-policysetdefinition/lib/policy-set-definition.js +3 -3
  114. package/lib/azure-policysetdefinition/test/policy-set-definition.integ.d.ts +1 -1
  115. package/lib/azure-policysetdefinition/test/policy-set-definition.integ.js +6 -6
  116. package/lib/azure-policysetdefinition/test/policy-set-definition.spec.js +6 -6
  117. package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +10 -10
  118. package/lib/azure-privatednszone/lib/private-dns-zone.js +12 -12
  119. package/lib/azure-privatednszone/lib/records/private-dns-records.d.ts +25 -25
  120. package/lib/azure-privatednszone/lib/records/private-dns-records.js +34 -34
  121. package/lib/azure-privatednszone/test/private-dns-records.integ.d.ts +1 -1
  122. package/lib/azure-privatednszone/test/private-dns-records.integ.js +5 -5
  123. package/lib/azure-privatednszone/test/private-dns-records.spec.js +49 -49
  124. package/lib/azure-privatednszone/test/private-dns-zone.integ.d.ts +1 -1
  125. package/lib/azure-privatednszone/test/private-dns-zone.integ.js +5 -5
  126. package/lib/azure-privatednszone/test/private-dns-zone.spec.js +12 -12
  127. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.d.ts +6 -6
  128. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +8 -8
  129. package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.d.ts +1 -1
  130. package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.js +5 -5
  131. package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.js +12 -12
  132. package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +5 -5
  133. package/lib/azure-publicipaddress/lib/public-ip-address.js +7 -7
  134. package/lib/azure-publicipaddress/test/public-ip-address.integ.d.ts +1 -1
  135. package/lib/azure-publicipaddress/test/public-ip-address.integ.js +6 -6
  136. package/lib/azure-publicipaddress/test/public-ip-address.spec.js +11 -11
  137. package/lib/azure-resourcegroup/lib/resource-group.d.ts +5 -5
  138. package/lib/azure-resourcegroup/lib/resource-group.js +7 -7
  139. package/lib/azure-resourcegroup/test/resource-group.integ.d.ts +1 -1
  140. package/lib/azure-resourcegroup/test/resource-group.integ.js +5 -5
  141. package/lib/azure-resourcegroup/test/resource-group.spec.js +14 -14
  142. package/lib/azure-roleassignment/lib/role-assignment.d.ts +3 -3
  143. package/lib/azure-roleassignment/lib/role-assignment.js +5 -5
  144. package/lib/azure-roleassignment/test/role-assignment.integ.d.ts +1 -1
  145. package/lib/azure-roleassignment/test/role-assignment.integ.js +5 -5
  146. package/lib/azure-roleassignment/test/role-assignment.spec.js +12 -12
  147. package/lib/azure-roledefinition/lib/role-definition.d.ts +3 -3
  148. package/lib/azure-roledefinition/lib/role-definition.js +5 -5
  149. package/lib/azure-roledefinition/test/role-definition.integ.d.ts +1 -1
  150. package/lib/azure-roledefinition/test/role-definition.integ.js +5 -5
  151. package/lib/azure-roledefinition/test/role-definition.spec.js +12 -12
  152. package/lib/azure-storageaccount/lib/storage-account.d.ts +6 -6
  153. package/lib/azure-storageaccount/lib/storage-account.js +8 -8
  154. package/lib/azure-storageaccount/test/storage-account.integ.d.ts +1 -1
  155. package/lib/azure-storageaccount/test/storage-account.integ.js +5 -5
  156. package/lib/azure-storageaccount/test/storage-account.spec.js +11 -11
  157. package/lib/azure-subnet/lib/subnet.d.ts +3 -3
  158. package/lib/azure-subnet/lib/subnet.js +5 -5
  159. package/lib/azure-subnet/test/subnet.integ.d.ts +1 -1
  160. package/lib/azure-subnet/test/subnet.integ.js +5 -5
  161. package/lib/azure-subnet/test/subnet.spec.js +9 -9
  162. package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +6 -6
  163. package/lib/azure-virtualmachine/lib/virtual-machine.js +8 -8
  164. package/lib/azure-virtualmachine/test/virtual-machine.integ.d.ts +1 -1
  165. package/lib/azure-virtualmachine/test/virtual-machine.integ.js +5 -5
  166. package/lib/azure-virtualmachine/test/virtual-machine.spec.js +17 -17
  167. package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +6 -6
  168. package/lib/azure-virtualnetwork/lib/virtual-network.js +8 -8
  169. package/lib/azure-virtualnetwork/test/virtual-network.integ.d.ts +1 -1
  170. package/lib/azure-virtualnetwork/test/virtual-network.integ.js +5 -5
  171. package/lib/azure-virtualnetwork/test/virtual-network.spec.js +12 -12
  172. package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.d.ts +5 -5
  173. package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.js +7 -7
  174. package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.integ.d.ts +1 -1
  175. package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.integ.js +5 -5
  176. package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.spec.js +13 -13
  177. package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.d.ts +5 -5
  178. package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.js +7 -7
  179. package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.integ.d.ts +1 -1
  180. package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.integ.js +5 -5
  181. package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.spec.js +20 -20
  182. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.d.ts +4 -4
  183. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +6 -6
  184. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.d.ts +4 -4
  185. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +6 -6
  186. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.d.ts +4 -4
  187. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +6 -6
  188. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.d.ts +4 -4
  189. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +6 -6
  190. package/lib/azure-virtualnetworkmanager/lib/network-group.d.ts +4 -4
  191. package/lib/azure-virtualnetworkmanager/lib/network-group.js +6 -6
  192. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.d.ts +4 -4
  193. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +6 -6
  194. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.d.ts +4 -4
  195. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +6 -6
  196. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.d.ts +4 -4
  197. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +6 -6
  198. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +7 -7
  199. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +9 -9
  200. package/lib/azure-virtualnetworkmanager/test/ipam-pool-static-cidr.spec.js +17 -17
  201. package/lib/azure-virtualnetworkmanager/test/ipam-pool.spec.js +15 -15
  202. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +1 -1
  203. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +5 -5
  204. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +57 -57
  205. package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +6 -6
  206. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +8 -8
  207. package/lib/azure-vmss/test/virtual-machine-scale-set.integ.d.ts +1 -1
  208. package/lib/azure-vmss/test/virtual-machine-scale-set.integ.js +5 -5
  209. package/lib/azure-vmss/test/virtual-machine-scale-set.spec.js +12 -12
  210. package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.js +6 -6
  211. package/lib/core-azure/lib/azapi/azapi-resource.d.ts +7 -7
  212. package/lib/core-azure/lib/azapi/azapi-resource.js +6 -6
  213. package/lib/core-azure/lib/azapi/azapi-resource.spec.js +7 -7
  214. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.d.ts +12 -12
  215. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +15 -15
  216. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.d.ts +35 -35
  217. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +58 -58
  218. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.d.ts +25 -25
  219. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.js +49 -49
  220. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.d.ts +13 -13
  221. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.js +22 -22
  222. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.d.ts +24 -24
  223. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.js +40 -40
  224. package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.d.ts +44 -44
  225. package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.js +72 -72
  226. package/lib/core-azure/lib/azapi/providers-azapi/index.js +2 -2
  227. package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.js +2 -2
  228. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.d.ts +54 -54
  229. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +86 -86
  230. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.d.ts +65 -65
  231. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +102 -102
  232. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.d.ts +25 -25
  233. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +62 -62
  234. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.d.ts +36 -36
  235. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +69 -69
  236. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
  237. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  238. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  239. package/lib/index.d.ts +3 -0
  240. package/lib/index.js +5 -2
  241. package/lib/testing/index.d.ts +1 -1
  242. package/lib/testing/index.js +8 -8
  243. package/lib/testing/lib/cleanup.js +1 -1
  244. package/lib/testing/lib/metadata.js +1 -1
  245. package/package.json +10 -22
  246. package/setup.js +2 -2
@@ -22,7 +22,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
22
22
  * - JSII compliance for multi-language support
23
23
  * - Convenience methods for creating child resources
24
24
  */
25
- const cdktf = require("cdktf");
25
+ const cdktn = require("cdktn");
26
26
  const connectivity_configuration_1 = require("./connectivity-configuration");
27
27
  const ipam_pool_1 = require("./ipam-pool");
28
28
  const network_group_1 = require("./network-group");
@@ -81,27 +81,27 @@ class VirtualNetworkManager extends azapi_resource_1.AzapiResource {
81
81
  // Extract properties from the AZAPI resource outputs using Terraform interpolation
82
82
  this.resourceName = `\${${this.terraformResource.fqn}.name}`;
83
83
  // Create Terraform outputs for easy access and referencing from other resources
84
- this.idOutput = new cdktf.TerraformOutput(this, "id", {
84
+ this.idOutput = new cdktn.TerraformOutput(this, "id", {
85
85
  value: this.id,
86
86
  description: "The ID of the Virtual Network Manager",
87
87
  });
88
- this.nameOutput = new cdktf.TerraformOutput(this, "name", {
88
+ this.nameOutput = new cdktn.TerraformOutput(this, "name", {
89
89
  value: this.resourceName,
90
90
  description: "The name of the Virtual Network Manager",
91
91
  });
92
- this.locationOutput = new cdktf.TerraformOutput(this, "location", {
92
+ this.locationOutput = new cdktn.TerraformOutput(this, "location", {
93
93
  value: `\${${this.terraformResource.fqn}.location}`,
94
94
  description: "The location of the Virtual Network Manager",
95
95
  });
96
- this.tagsOutput = new cdktf.TerraformOutput(this, "tags", {
96
+ this.tagsOutput = new cdktn.TerraformOutput(this, "tags", {
97
97
  value: `\${${this.terraformResource.fqn}.tags}`,
98
98
  description: "The tags assigned to the Virtual Network Manager",
99
99
  });
100
- this.scopeOutput = new cdktf.TerraformOutput(this, "scope", {
100
+ this.scopeOutput = new cdktn.TerraformOutput(this, "scope", {
101
101
  value: `\${${this.terraformResource.fqn}.output.properties.networkManagerScopes}`,
102
102
  description: "The management scope of the Virtual Network Manager",
103
103
  });
104
- this.scopeAccessesOutput = new cdktf.TerraformOutput(this, "scopeAccesses", {
104
+ this.scopeAccessesOutput = new cdktn.TerraformOutput(this, "scopeAccesses", {
105
105
  value: `\${${this.terraformResource.fqn}.output.properties.networkManagerScopeAccesses}`,
106
106
  description: "The enabled features of the Virtual Network Manager",
107
107
  });
@@ -303,8 +303,8 @@ class VirtualNetworkManager extends azapi_resource_1.AzapiResource {
303
303
  }
304
304
  exports.VirtualNetworkManager = VirtualNetworkManager;
305
305
  _a = JSII_RTTI_SYMBOL_1;
306
- VirtualNetworkManager[_a] = { fqn: "@microsoft/terraform-cdk-constructs.VirtualNetworkManager", version: "1.9.0" };
306
+ VirtualNetworkManager[_a] = { fqn: "@microsoft/terraform-cdk-constructs.VirtualNetworkManager", version: "2.2.0" };
307
307
  (() => {
308
308
  azapi_resource_1.AzapiResource.registerSchemas(virtual_network_manager_schemas_1.VIRTUAL_NETWORK_MANAGER_TYPE, virtual_network_manager_schemas_1.ALL_VIRTUAL_NETWORK_MANAGER_VERSIONS);
309
309
  })();
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1uZXR3b3JrLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtdmlydHVhbG5ldHdvcmttYW5hZ2VyL2xpYi92aXJ0dWFsLW5ldHdvcmstbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCwrQkFBK0I7QUFFL0IsNkVBQXlFO0FBS3pFLDJDQUF1QztBQUN2QyxtREFBK0M7QUFDL0MsaUZBQTRFO0FBQzVFLHVGQUcyQztBQUMzQyw4RUFHbUQ7QUFnT25EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLDhCQUFhO0lBd0J0RDs7Ozs7Ozs7OztPQVVHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixtRkFBbUY7UUFDbkYsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUU3RCxnRkFBZ0Y7UUFDaEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUNwRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZCxXQUFXLEVBQUUsdUNBQXVDO1NBQ3JELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEQsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3hCLFdBQVcsRUFBRSx5Q0FBeUM7U0FDdkQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNoRSxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxZQUFZO1lBQ25ELFdBQVcsRUFBRSw2Q0FBNkM7U0FDM0QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxRQUFRO1lBQy9DLFdBQVcsRUFBRSxrREFBa0Q7U0FDaEUsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTtZQUMxRCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRywwQ0FBMEM7WUFDakYsV0FBVyxFQUFFLHFEQUFxRDtTQUNuRSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUNsRCxJQUFJLEVBQ0osZUFBZSxFQUNmO1lBQ0UsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsaURBQWlEO1lBQ3hGLFdBQVcsRUFBRSxxREFBcUQ7U0FDbkUsQ0FDRixDQUFDO1FBRUYsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFNUQsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsK0NBQStDO0lBQy9DLGdGQUFnRjtJQUVoRjs7O09BR0c7SUFDTyxlQUFlLENBQUMsS0FBVTtRQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUFtQyxDQUFDO1FBQ3ZELE9BQU8sVUFBVSxDQUFDLGVBQWUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZO1FBQ3BCLE9BQU8sbUNBQW1DLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBbUMsQ0FBQztRQUN2RCxPQUFPO1lBQ0wsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3BCLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxVQUFVLENBQUMsb0JBQW9CO2dCQUNyRCwyQkFBMkIsRUFBRSxVQUFVLENBQUMsMkJBQTJCO2dCQUNuRSxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7YUFDcEM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGdGQUFnRjtJQUNoRix3REFBd0Q7SUFDeEQsZ0ZBQWdGO0lBRWhGOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsS0FBYSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM5Qix5Q0FBeUM7UUFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTLENBQUMsR0FBVztRQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLHVFQUF1RTtJQUN2RSxnRkFBZ0Y7SUFFaEY7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBQ0ksZUFBZSxDQUNwQixFQUFVLEVBQ1YsS0FBMkI7UUFFM0IsT0FBTyxJQUFJLDRCQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNoQyxHQUFHLEtBQUs7WUFDUixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBQ0ksNEJBQTRCLENBQ2pDLEVBQVUsRUFDVixLQUF3QztRQUV4QyxPQUFPLElBQUksc0RBQXlCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUM3QyxHQUFHLEtBQUs7WUFDUixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0ksNkJBQTZCLENBQ2xDLEVBQVUsRUFDVixLQUF5QztRQUV6QyxPQUFPLElBQUkseURBQTBCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUM5QyxHQUFHLEtBQUs7WUFDUixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSSxXQUFXLENBQUMsRUFBVSxFQUFFLEtBQXVCO1FBQ3BELE9BQU8sSUFBSSxvQkFBUSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDNUIsR0FBRyxLQUFLO1lBQ1IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdGQUFnRjtJQUNoRix5QkFBeUI7SUFDekIsZ0ZBQWdGO0lBRWhGOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUM5QyxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO2FBQ3pDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQTFTSCxzREEyU0M7OztBQTFTQztJQUNFLDhCQUFhLENBQUMsZUFBZSxDQUMzQiw4REFBNEIsRUFDNUIsc0VBQW9DLENBQ3JDLENBQUM7QUFDSixDQUFDLEdBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXIgaW1wbGVtZW50YXRpb24gdXNpbmcgQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgdW5pZmllZCBpbXBsZW1lbnRhdGlvbiBmb3IgQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJzIHRoYXRcbiAqIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIG1hbmFnZW1lbnQsIHNjaGVtYSB2YWxpZGF0aW9uLCBhbmQgcHJvcGVydHlcbiAqIHRyYW5zZm9ybWF0aW9uIGFjcm9zcyBhbGwgc3VwcG9ydGVkIEFQSSB2ZXJzaW9ucy5cbiAqXG4gKiBTdXBwb3J0ZWQgQVBJIFZlcnNpb25zOlxuICogLSAyMDIzLTExLTAxIChNYWludGVuYW5jZSlcbiAqIC0gMjAyNC0wNS0wMSAoQWN0aXZlLCBMYXRlc3QpXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gRXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzXG4gKiAtIFNjaGVtYS1kcml2ZW4gdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gRnVsbCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gKiAtIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICogLSBDb252ZW5pZW5jZSBtZXRob2RzIGZvciBjcmVhdGluZyBjaGlsZCByZXNvdXJjZXNcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb25uZWN0aXZpdHlDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vY29ubmVjdGl2aXR5LWNvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB7XG4gIENvbm5lY3Rpdml0eUdyb3VwSXRlbSxcbiAgSHViLFxufSBmcm9tIFwiLi9jb25uZWN0aXZpdHktY29uZmlndXJhdGlvbi1zY2hlbWFzXCI7XG5pbXBvcnQgeyBJcGFtUG9vbCB9IGZyb20gXCIuL2lwYW0tcG9vbFwiO1xuaW1wb3J0IHsgTmV0d29ya0dyb3VwIH0gZnJvbSBcIi4vbmV0d29yay1ncm91cFwiO1xuaW1wb3J0IHsgU2VjdXJpdHlBZG1pbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi9zZWN1cml0eS1hZG1pbi1jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQge1xuICBBTExfVklSVFVBTF9ORVRXT1JLX01BTkFHRVJfVkVSU0lPTlMsXG4gIFZJUlRVQUxfTkVUV09SS19NQU5BR0VSX1RZUEUsXG59IGZyb20gXCIuL3ZpcnR1YWwtbmV0d29yay1tYW5hZ2VyLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogU2NvcGUgY29uZmlndXJhdGlvbiBmb3IgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrTWFuYWdlclNjb3BlcyB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBtYW5hZ2VtZW50IGdyb3VwIElEcyB0aGF0IGRlZmluZSB0aGUgc2NvcGVcbiAgICogQGV4YW1wbGUgW1wiL3Byb3ZpZGVycy9NaWNyb3NvZnQuTWFuYWdlbWVudC9tYW5hZ2VtZW50R3JvdXBzL21nMVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgbWFuYWdlbWVudEdyb3Vwcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBzdWJzY3JpcHRpb24gSURzIHRoYXQgZGVmaW5lIHRoZSBzY29wZVxuICAgKiBAZXhhbXBsZSBbXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIl1cbiAgICovXG4gIHJlYWRvbmx5IHN1YnNjcmlwdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcbiAqXG4gKiBFeHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB3aXRoIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXJ0dWFsTmV0d29ya01hbmFnZXJQcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBSZXNvdXJjZSBJRCBvZiB0aGUgcmVzb3VyY2UgZ3JvdXAgd2hlcmUgdGhlIG5ldHdvcmsgbWFuYWdlciB3aWxsIGJlIGNyZWF0ZWRcbiAgICogQGV4YW1wbGUgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvbXktcmdcIlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VHcm91cElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHNjb3BlIG9mIG1hbmFnZW1lbnQgKG1hbmFnZW1lbnQgZ3JvdXBzIGFuZC9vciBzdWJzY3JpcHRpb25zKVxuICAgKiBBdCBsZWFzdCBvbmUgb2YgbWFuYWdlbWVudEdyb3VwcyBvciBzdWJzY3JpcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrTWFuYWdlclNjb3BlczogTmV0d29ya01hbmFnZXJTY29wZXM7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIGZlYXR1cmVzIGVuYWJsZWQgZm9yIHRoZSBuZXR3b3JrIG1hbmFnZXJcbiAgICogVmFsaWQgdmFsdWVzOiBcIkNvbm5lY3Rpdml0eVwiLCBcIlNlY3VyaXR5QWRtaW5cIiwgXCJSb3V0aW5nXCJcbiAgICogQGV4YW1wbGUgW1wiQ29ubmVjdGl2aXR5XCIsIFwiU2VjdXJpdHlBZG1pblwiXVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya01hbmFnZXJTY29wZUFjY2Vzc2VzOiAoXG4gICAgfCBcIkNvbm5lY3Rpdml0eVwiXG4gICAgfCBcIlNlY3VyaXR5QWRtaW5cIlxuICAgIHwgXCJSb3V0aW5nXCJcbiAgKVtdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBvZiB0aGUgbmV0d29yayBtYW5hZ2VyXG4gICAqIEBleGFtcGxlIFwiQ2VudHJhbCBuZXR3b3JrIG1hbmFnZW1lbnQgZm9yIHByb2R1Y3Rpb24gd29ya2xvYWRzXCJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZWN5Y2xlIHJ1bGVzIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAqIFVzZWZ1bCBmb3IgcHJvcGVydGllcyB0aGF0IGFyZSBleHRlcm5hbGx5IG1hbmFnZWRcbiAgICogQGV4YW1wbGUgW1widGFnc1wiXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlQ2hhbmdlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFkZGluZyBhIE5ldHdvcmtHcm91cCB2aWEgdGhlIGNvbnZlbmllbmNlIG1ldGhvZFxuICogVGhpcyBpbnRlcmZhY2UgZXhjbHVkZXMgbmV0d29ya01hbmFnZXJJZCBhcyBpdCdzIGF1dG9tYXRpY2FsbHkgc2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkTmV0d29ya0dyb3VwUHJvcHMgZXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIG5ldHdvcmsgZ3JvdXBcbiAgICogQGV4YW1wbGUgXCJQcm9kdWN0aW9uIHZpcnR1YWwgbmV0d29ya3MgZm9yIHJlZ2lvbiBFYXN0IFVTXCJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIG1lbWJlcnMgaW4gdGhpcyBuZXR3b3JrIGdyb3VwXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAoY2FuIGNvbnRhaW4gYm90aCBWaXJ0dWFsTmV0d29yayBhbmQgU3VibmV0IG1lbWJlcnMpXG4gICAqIEBleGFtcGxlIFwiVmlydHVhbE5ldHdvcmtcIlxuICAgKiBAZXhhbXBsZSBcIlN1Ym5ldFwiXG4gICAqL1xuICByZWFkb25seSBtZW1iZXJUeXBlPzogXCJWaXJ0dWFsTmV0d29ya1wiIHwgXCJTdWJuZXRcIjtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJ0YWdzXCJdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYWRkaW5nIGEgQ29ubmVjdGl2aXR5Q29uZmlndXJhdGlvbiB2aWEgdGhlIGNvbnZlbmllbmNlIG1ldGhvZFxuICogVGhpcyBpbnRlcmZhY2UgZXhjbHVkZXMgbmV0d29ya01hbmFnZXJJZCBhcyBpdCdzIGF1dG9tYXRpY2FsbHkgc2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQ29ubmVjdGl2aXR5Q29uZmlndXJhdGlvblByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBjb25uZWN0aXZpdHkgY29uZmlndXJhdGlvblxuICAgKiBAZXhhbXBsZSBcIkh1Yi1hbmQtc3Bva2UgdG9wb2xvZ3kgZm9yIHByb2R1Y3Rpb24gd29ya2xvYWRzXCJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25uZWN0aXZpdHkgdG9wb2xvZ3kgdHlwZVxuICAgKiAtIEh1YkFuZFNwb2tlOiBDZW50cmFsIGh1YiB3aXRoIHNwb2tlIFZOZXRzXG4gICAqIC0gTWVzaDogQWxsIFZOZXRzIGNhbiBjb21tdW5pY2F0ZSBkaXJlY3RseVxuICAgKiBAZXhhbXBsZSBcIkh1YkFuZFNwb2tlXCJcbiAgICogQGV4YW1wbGUgXCJNZXNoXCJcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpdml0eVRvcG9sb2d5OiBcIkh1YkFuZFNwb2tlXCIgfCBcIk1lc2hcIjtcblxuICAvKipcbiAgICogTmV0d29yayBncm91cHMgdG8gYXBwbHkgdGhpcyBjb25maWd1cmF0aW9uIHRvXG4gICAqIEVhY2ggaXRlbSBzcGVjaWZpZXMgYSBuZXR3b3JrIGdyb3VwIGFuZCBob3cgaXQgc2hvdWxkIGNvbm5lY3RcbiAgICovXG4gIHJlYWRvbmx5IGFwcGxpZXNUb0dyb3VwczogQ29ubmVjdGl2aXR5R3JvdXBJdGVtW107XG5cbiAgLyoqXG4gICAqIEh1YiBWTmV0cyBmb3IgaHViLWFuZC1zcG9rZSB0b3BvbG9neVxuICAgKiBSZXF1aXJlZCB3aGVuIGNvbm5lY3Rpdml0eVRvcG9sb2d5IGlzIFwiSHViQW5kU3Bva2VcIlxuICAgKiBAZXhhbXBsZSBbeyByZXNvdXJjZUlkOiBcIi9zdWJzY3JpcHRpb25zLy4uLi92aXJ0dWFsTmV0d29ya3MvaHViLXZuZXRcIiwgcmVzb3VyY2VUeXBlOiBcIk1pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrc1wiIH1dXG4gICAqL1xuICByZWFkb25seSBodWJzPzogSHViW107XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBnbG9iYWwgbWVzaCBjb25uZWN0aXZpdHlcbiAgICogQWxsb3dzIG1lc2ggY29ubmVjdGl2aXR5IGFjcm9zcyByZWdpb25zXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc0dsb2JhbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBleGlzdGluZyBwZWVyaW5ncyB3aGVuIGFwcGx5aW5nIHRoaXMgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlRXhpc3RpbmdQZWVyaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJ0YWdzXCJdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYWRkaW5nIGEgU2VjdXJpdHlBZG1pbkNvbmZpZ3VyYXRpb24gdmlhIHRoZSBjb252ZW5pZW5jZSBtZXRob2RcbiAqIFRoaXMgaW50ZXJmYWNlIGV4Y2x1ZGVzIG5ldHdvcmtNYW5hZ2VySWQgYXMgaXQncyBhdXRvbWF0aWNhbGx5IHNldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uUHJvcHMgZXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHNlY3VyaXR5IGFkbWluIGNvbmZpZ3VyYXRpb25cbiAgICogQGV4YW1wbGUgXCJPcmdhbml6YXRpb24td2lkZSBzZWN1cml0eSBydWxlcyBmb3IgcHJvZHVjdGlvbiB3b3JrbG9hZHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlcnZpY2VzIHRvIGFwcGx5IHRoZSBzZWN1cml0eSBhZG1pbiBjb25maWd1cmF0aW9uIG9uXG4gICAqIEBleGFtcGxlIFtcIk5vbmVcIl1cbiAgICogQGV4YW1wbGUgW1wiQWxsXCJdXG4gICAqL1xuICByZWFkb25seSBhcHBseU9uTmV0d29ya0ludGVudFBvbGljeUJhc2VkU2VydmljZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJ0YWdzXCJdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYWRkaW5nIGFuIElwYW1Qb29sIHZpYSB0aGUgY29udmVuaWVuY2UgbWV0aG9kXG4gKiBUaGlzIGludGVyZmFjZSBleGNsdWRlcyBuZXR3b3JrTWFuYWdlcklkIGFzIGl0J3MgYXV0b21hdGljYWxseSBzZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRJcGFtUG9vbFByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIElQIGFkZHJlc3MgcHJlZml4ZXMgZm9yIHRoZSBwb29sXG4gICAqIE11c3QgYmUgdmFsaWQgQ0lEUiBub3RhdGlvbiAoZS5nLiwgXCIxMC4wLjAuMC84XCIpXG4gICAqIE11bHRpcGxlIHByZWZpeGVzIG11c3Qgbm90IG92ZXJsYXBcbiAgICogQGV4YW1wbGUgW1wiMTAuMC4wLjAvOFwiLCBcIjE3Mi4xNi4wLjAvMTJcIl1cbiAgICovXG4gIHJlYWRvbmx5IGFkZHJlc3NQcmVmaXhlczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBJUEFNIHBvb2xcbiAgICogQGV4YW1wbGUgXCJQcm9kdWN0aW9uIElQIGFkZHJlc3MgcG9vbCBmb3IgRWFzdCBVUyByZWdpb25cIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZyaWVuZGx5IGRpc3BsYXkgbmFtZVxuICAgKiBAZXhhbXBsZSBcIkVhc3QgVVMgUHJvZHVjdGlvbiBQb29sXCJcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHBhcmVudCBwb29sIGZvciBoaWVyYXJjaGljYWwgcG9vbHNcbiAgICogTGVhdmUgZW1wdHkvdW5kZWZpbmVkIGZvciByb290IHBvb2xzXG4gICAqIEBleGFtcGxlIFwicm9vdC1wb29sXCJcbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudFBvb2xOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZWN5Y2xlIHJ1bGVzIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAqIEBleGFtcGxlIFtcInRhZ3NcIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBib2R5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlydHVhbE5ldHdvcmtNYW5hZ2VyUHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IG5ldHdvcmtNYW5hZ2VyU2NvcGVzOiBOZXR3b3JrTWFuYWdlclNjb3BlcztcbiAgcmVhZG9ubHkgbmV0d29ya01hbmFnZXJTY29wZUFjY2Vzc2VzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGJvZHkgaW50ZXJmYWNlIGZvciBBenVyZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBBUEkgY2FsbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXJ0dWFsTmV0d29ya01hbmFnZXJCb2R5IHtcbiAgcmVhZG9ubHkgbG9jYXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IFZpcnR1YWxOZXR3b3JrTWFuYWdlclByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXIgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2luZ2xlLCB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlc1xuICogdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgdmFsaWRhdGlvbiwgYW5kIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uIHdoaWxlIG1haW50YWluaW5nXG4gKiBmdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIHVzYWdlIHdpdGggYXV0b21hdGljIHZlcnNpb24gcmVzb2x1dGlvbjpcbiAqIGNvbnN0IG5ldHdvcmtNYW5hZ2VyID0gbmV3IFZpcnR1YWxOZXR3b3JrTWFuYWdlcih0aGlzLCBcIm1hbmFnZXJcIiwge1xuICogICBuYW1lOiBcIm15LW5ldHdvcmstbWFuYWdlclwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICogICBuZXR3b3JrTWFuYWdlclNjb3Blczoge1xuICogICAgIHN1YnNjcmlwdGlvbnM6IFtcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiXVxuICogICB9LFxuICogICBuZXR3b3JrTWFuYWdlclNjb3BlQWNjZXNzZXM6IFtcIkNvbm5lY3Rpdml0eVwiLCBcIlNlY3VyaXR5QWRtaW5cIl1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVc2FnZSB3aXRoIGV4cGxpY2l0IHZlcnNpb24gcGlubmluZzpcbiAqIGNvbnN0IG5ldHdvcmtNYW5hZ2VyID0gbmV3IFZpcnR1YWxOZXR3b3JrTWFuYWdlcih0aGlzLCBcIm1hbmFnZXJcIiwge1xuICogICBuYW1lOiBcIm15LW5ldHdvcmstbWFuYWdlclwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICogICBhcGlWZXJzaW9uOiBcIjIwMjQtMDUtMDFcIixcbiAqICAgbmV0d29ya01hbmFnZXJTY29wZXM6IHtcbiAqICAgICBzdWJzY3JpcHRpb25zOiBbXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIl1cbiAqICAgfSxcbiAqICAgbmV0d29ya01hbmFnZXJTY29wZUFjY2Vzc2VzOiBbXCJDb25uZWN0aXZpdHlcIiwgXCJTZWN1cml0eUFkbWluXCJdXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgVmlydHVhbE5ldHdvcmtNYW5hZ2VyIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBWSVJUVUFMX05FVFdPUktfTUFOQUdFUl9UWVBFLFxuICAgICAgQUxMX1ZJUlRVQUxfTkVUV09SS19NQU5BR0VSX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXIgaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogVmlydHVhbE5ldHdvcmtNYW5hZ2VyUHJvcHM7XG5cbiAgLy8gT3V0cHV0IHByb3BlcnRpZXMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZ1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IGxvY2F0aW9uT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSB0YWdzT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBzY29wZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVBY2Nlc3Nlc091dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzIHRoYXQgbWF0Y2ggdGhlIHN0YW5kYXJkIGludGVyZmFjZVxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXIgdXNpbmcgdGhlIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gICAqXG4gICAqIFRoZSBjb25zdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgcmVnaXN0cmF0aW9uLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgcmVzb3VyY2UgY3JlYXRpb24uIEl0IG1haW50YWlucyBmdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBleGlzdGluZyBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBpbXBsZW1lbnRhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVmlydHVhbE5ldHdvcmtNYW5hZ2VyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIEV4dHJhY3QgcHJvcGVydGllcyBmcm9tIHRoZSBBWkFQSSByZXNvdXJjZSBvdXRwdXRzIHVzaW5nIFRlcnJhZm9ybSBpbnRlcnBvbGF0aW9uXG4gICAgdGhpcy5yZXNvdXJjZU5hbWUgPSBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YDtcblxuICAgIC8vIENyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0cyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nIGZyb20gb3RoZXIgcmVzb3VyY2VzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnJlc291cmNlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlclwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2NhdGlvbk91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJsb2NhdGlvblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5sb2NhdGlvbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGxvY2F0aW9uIG9mIHRoZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlclwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy50YWdzT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcInRhZ3NcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0udGFnc31gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHRhZ3MgYXNzaWduZWQgdG8gdGhlIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNjb3BlT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcInNjb3BlXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLm5ldHdvcmtNYW5hZ2VyU2NvcGVzfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbWFuYWdlbWVudCBzY29wZSBvZiB0aGUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcIixcbiAgICB9KTtcblxuICAgIHRoaXMuc2NvcGVBY2Nlc3Nlc091dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgXCJzY29wZUFjY2Vzc2VzXCIsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLm5ldHdvcmtNYW5hZ2VyU2NvcGVBY2Nlc3Nlc31gLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgZW5hYmxlZCBmZWF0dXJlcyBvZiB0aGUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcIixcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIG9yaWdpbmFsIG5hbWluZyBjb252ZW50aW9uXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5sb2NhdGlvbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImxvY2F0aW9uXCIpO1xuICAgIHRoaXMudGFnc091dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInRhZ3NcIik7XG4gICAgdGhpcy5zY29wZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInNjb3BlXCIpO1xuICAgIHRoaXMuc2NvcGVBY2Nlc3Nlc091dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInNjb3BlQWNjZXNzZXNcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBwYXJlbnQgcmVzb3VyY2UgSUQgZm9yIHRoZSBOZXR3b3JrIE1hbmFnZXJcbiAgICogTmV0d29yayBNYW5hZ2VycyBhcmUgc2NvcGVkIHRvIHJlc291cmNlIGdyb3Vwc1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgVmlydHVhbE5ldHdvcmtNYW5hZ2VyUHJvcHM7XG4gICAgcmV0dXJuIHR5cGVkUHJvcHMucmVzb3VyY2VHcm91cElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICogUmV0dXJucyB0aGUgbW9zdCByZWNlbnQgc3RhYmxlIHZlcnNpb24gYXMgdGhlIGRlZmF1bHRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjQtMDUtMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlcnNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJNaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrTWFuYWdlcnNcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKiBVc2VzIHRoZSBmcmFtZXdvcmsncyBzY2hlbWEgcmVzb2x1dGlvbiB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHNjaGVtYVxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgcHJvcGVydGllcyBpbnRvIHRoZSBKU09OIGZvcm1hdCBleHBlY3RlZCBieSBBenVyZSBSRVNUIEFQSVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgVmlydHVhbE5ldHdvcmtNYW5hZ2VyUHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2F0aW9uOiB0eXBlZFByb3BzLmxvY2F0aW9uLFxuICAgICAgdGFnczogdGhpcy5hbGxUYWdzKCksXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIG5ldHdvcmtNYW5hZ2VyU2NvcGVzOiB0eXBlZFByb3BzLm5ldHdvcmtNYW5hZ2VyU2NvcGVzLFxuICAgICAgICBuZXR3b3JrTWFuYWdlclNjb3BlQWNjZXNzZXM6IHR5cGVkUHJvcHMubmV0d29ya01hbmFnZXJTY29wZUFjY2Vzc2VzLFxuICAgICAgICBkZXNjcmlwdGlvbjogdHlwZWRQcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBVQkxJQyBNRVRIT0RTIEZPUiBWSVJUVUFMIE5FVFdPUksgTUFOQUdFUiBPUEVSQVRJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFkZCBhIHRhZyB0byB0aGUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcbiAgICogTm90ZTogVGhpcyBtb2RpZmllcyB0aGUgY29uc3RydWN0IHByb3BzIGJ1dCByZXF1aXJlcyBhIG5ldyBkZXBsb3ltZW50IHRvIHRha2UgZWZmZWN0XG4gICAqL1xuICBwdWJsaWMgYWRkVGFnKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnRhZ3MpIHtcbiAgICAgICh0aGlzLnByb3BzIGFzIGFueSkudGFncyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnByb3BzLnRhZ3MhW2tleV0gPSB2YWx1ZTtcbiAgICAvLyBBcHBseSB0aGUgdGFnIGRpcmVjdGx5IHRvIHRoZSByZXNvdXJjZVxuICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoYHRhZ3MuJHtrZXl9YCwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHRhZyBmcm9tIHRoZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlclxuICAgKiBOb3RlOiBUaGlzIG1vZGlmaWVzIHRoZSBjb25zdHJ1Y3QgcHJvcHMgYnV0IHJlcXVpcmVzIGEgbmV3IGRlcGxveW1lbnQgdG8gdGFrZSBlZmZlY3RcbiAgICovXG4gIHB1YmxpYyByZW1vdmVUYWcoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy50YWdzICYmIHRoaXMucHJvcHMudGFnc1trZXldKSB7XG4gICAgICBkZWxldGUgdGhpcy5wcm9wcy50YWdzW2tleV07XG4gICAgICAvLyBSZW1vdmUgdGhlIHRhZyBmcm9tIHRoZSByZXNvdXJjZVxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShgdGFncy4ke2tleX1gLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT05WRU5JRU5DRSBNRVRIT0RTIEZPUiBDSElMRCBSRVNPVVJDRVMgKE9QVElPTiBBIC0gSFlCUklEIEFQUFJPQUNIKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgTmV0d29ya0dyb3VwXG4gICAqXG4gICAqIFRoaXMgaXMgYSBoZWxwZXIgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIE5ldHdvcmtHcm91cCB3aXRoIHRoZSBuZXR3b3JrTWFuYWdlcklkXG4gICAqIGF1dG9tYXRpY2FsbHkgc2V0IHRvIHRoaXMgTmV0d29yayBNYW5hZ2VyJ3MgSUQuIFlvdSBjYW4gYWxzbyBjcmVhdGUgTmV0d29ya0dyb3Vwc1xuICAgKiBkaXJlY3RseSB1c2luZzogbmV3IE5ldHdvcmtHcm91cChzY29wZSwgaWQsIHsgbmV0d29ya01hbmFnZXJJZDogdm5tLmlkLCAuLi5wcm9wcyB9KVxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBuZXR3b3JrIGdyb3VwIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gcHJvcHMgLSBOZXR3b3JrR3JvdXAgcHJvcGVydGllcyAobmV0d29ya01hbmFnZXJJZCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5KVxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBOZXR3b3JrR3JvdXAgaW5zdGFuY2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgcHJvZEdyb3VwID0gbmV0d29ya01hbmFnZXIuYWRkTmV0d29ya0dyb3VwKFwicHJvZC1ncm91cFwiLCB7XG4gICAqICAgbmFtZTogXCJwcm9kdWN0aW9uLXZuZXRzXCIsXG4gICAqICAgZGVzY3JpcHRpb246IFwiUHJvZHVjdGlvbiB2aXJ0dWFsIG5ldHdvcmtzXCIsXG4gICAqICAgbWVtYmVyVHlwZTogXCJWaXJ0dWFsTmV0d29ya1wiXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZE5ldHdvcmtHcm91cChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBZGROZXR3b3JrR3JvdXBQcm9wcyxcbiAgKTogTmV0d29ya0dyb3VwIHtcbiAgICByZXR1cm4gbmV3IE5ldHdvcmtHcm91cCh0aGlzLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBuZXR3b3JrTWFuYWdlcklkOiB0aGlzLmlkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBjcmVhdGUgYSBDb25uZWN0aXZpdHlDb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFRoaXMgaXMgYSBoZWxwZXIgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIENvbm5lY3Rpdml0eUNvbmZpZ3VyYXRpb24gd2l0aCB0aGVcbiAgICogbmV0d29ya01hbmFnZXJJZCBhdXRvbWF0aWNhbGx5IHNldCB0byB0aGlzIE5ldHdvcmsgTWFuYWdlcidzIElELlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb25uZWN0aXZpdHkgY29uZmlndXJhdGlvbiBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIHByb3BzIC0gQ29ubmVjdGl2aXR5Q29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIChuZXR3b3JrTWFuYWdlcklkIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkpXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIENvbm5lY3Rpdml0eUNvbmZpZ3VyYXRpb24gaW5zdGFuY2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgaHViU3Bva2UgPSBuZXR3b3JrTWFuYWdlci5hZGRDb25uZWN0aXZpdHlDb25maWd1cmF0aW9uKFwiaHViLXNwb2tlXCIsIHtcbiAgICogICBuYW1lOiBcInByb2R1Y3Rpb24taHViLXNwb2tlXCIsXG4gICAqICAgY29ubmVjdGl2aXR5VG9wb2xvZ3k6IFwiSHViQW5kU3Bva2VcIixcbiAgICogICBhcHBsaWVzVG9Hcm91cHM6IFt7IG5ldHdvcmtHcm91cElkOiBwcm9kR3JvdXAuaWQgfV0sXG4gICAqICAgaHViczogW3sgcmVzb3VyY2VJZDogaHViVm5ldC5pZCwgcmVzb3VyY2VUeXBlOiBcIk1pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrc1wiIH1dXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZENvbm5lY3Rpdml0eUNvbmZpZ3VyYXRpb24oXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQWRkQ29ubmVjdGl2aXR5Q29uZmlndXJhdGlvblByb3BzLFxuICApOiBDb25uZWN0aXZpdHlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbm5lY3Rpdml0eUNvbmZpZ3VyYXRpb24odGhpcywgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgbmV0d29ya01hbmFnZXJJZDogdGhpcy5pZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgU2VjdXJpdHlBZG1pbkNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogVGhpcyBpcyBhIGhlbHBlciBtZXRob2QgdGhhdCBjcmVhdGVzIGEgU2VjdXJpdHlBZG1pbkNvbmZpZ3VyYXRpb24gd2l0aCB0aGVcbiAgICogbmV0d29ya01hbmFnZXJJZCBhdXRvbWF0aWNhbGx5IHNldCB0byB0aGlzIE5ldHdvcmsgTWFuYWdlcidzIElELlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzZWN1cml0eSBhZG1pbiBjb25maWd1cmF0aW9uIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gcHJvcHMgLSBTZWN1cml0eUFkbWluQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIChuZXR3b3JrTWFuYWdlcklkIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkpXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uIGluc3RhbmNlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHNlY3VyaXR5Q29uZmlnID0gbmV0d29ya01hbmFnZXIuYWRkU2VjdXJpdHlBZG1pbkNvbmZpZ3VyYXRpb24oXCJzZWN1cml0eVwiLCB7XG4gICAqICAgbmFtZTogXCJwcm9kdWN0aW9uLXNlY3VyaXR5XCIsXG4gICAqICAgZGVzY3JpcHRpb246IFwiSGlnaC1wcmlvcml0eSBzZWN1cml0eSBydWxlcyBmb3IgcHJvZHVjdGlvblwiXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFkZFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uUHJvcHMsXG4gICk6IFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uKHRoaXMsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIG5ldHdvcmtNYW5hZ2VySWQ6IHRoaXMuaWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGNyZWF0ZSBhbiBJcGFtUG9vbFxuICAgKlxuICAgKiBUaGlzIGlzIGEgaGVscGVyIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYW4gSXBhbVBvb2wgd2l0aCB0aGUgbmV0d29ya01hbmFnZXJJZFxuICAgKiBhdXRvbWF0aWNhbGx5IHNldCB0byB0aGlzIE5ldHdvcmsgTWFuYWdlcidzIElELiBZb3UgY2FuIGFsc28gY3JlYXRlIElwYW1Qb29sc1xuICAgKiBkaXJlY3RseSB1c2luZzogbmV3IElwYW1Qb29sKHNjb3BlLCBpZCwgeyBuZXR3b3JrTWFuYWdlcklkOiB2bm0uaWQsIC4uLnByb3BzIH0pXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIElQQU0gcG9vbCBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIHByb3BzIC0gSXBhbVBvb2wgcHJvcGVydGllcyAobmV0d29ya01hbmFnZXJJZCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5KVxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBJcGFtUG9vbCBpbnN0YW5jZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBpcGFtUG9vbCA9IG5ldHdvcmtNYW5hZ2VyLmFkZElwYW1Qb29sKFwicHJvZC1wb29sXCIsIHtcbiAgICogICBuYW1lOiBcInByb2R1Y3Rpb24tcG9vbFwiLFxuICAgKiAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgKiAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4wLjAvOFwiXSxcbiAgICogICBkZXNjcmlwdGlvbjogXCJQcm9kdWN0aW9uIElQIGFkZHJlc3MgcG9vbFwiLFxuICAgKiAgIGRpc3BsYXlOYW1lOiBcIlByb2R1Y3Rpb24gUG9vbFwiXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZElwYW1Qb29sKGlkOiBzdHJpbmcsIHByb3BzOiBBZGRJcGFtUG9vbFByb3BzKTogSXBhbVBvb2wge1xuICAgIHJldHVybiBuZXcgSXBhbVBvb2wodGhpcywgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgbmV0d29ya01hbmFnZXJJZDogdGhpcy5pZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSEVMUEVSIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBwbGllcyBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXMgaWYgc3BlY2lmaWVkIGluIHByb3BzXG4gICAqL1xuICBwcml2YXRlIF9hcHBseUlnbm9yZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyAmJiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShcImxpZmVjeWNsZVwiLCB7XG4gICAgICAgIGlnbm9yZV9jaGFuZ2VzOiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1uZXR3b3JrLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtdmlydHVhbG5ldHdvcmttYW5hZ2VyL2xpYi92aXJ0dWFsLW5ldHdvcmstbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCwrQkFBK0I7QUFFL0IsNkVBQXlFO0FBS3pFLDJDQUF1QztBQUN2QyxtREFBK0M7QUFDL0MsaUZBQTRFO0FBQzVFLHVGQUcyQztBQUMzQyw4RUFHbUQ7QUFnT25EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLDhCQUFhO0lBd0J0RDs7Ozs7Ozs7OztPQVVHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixtRkFBbUY7UUFDbkYsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUU3RCxnRkFBZ0Y7UUFDaEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUNwRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZCxXQUFXLEVBQUUsdUNBQXVDO1NBQ3JELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEQsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3hCLFdBQVcsRUFBRSx5Q0FBeUM7U0FDdkQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxD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O0lBQ0ksNkJBQTZCLENBQ2xDLEVBQVUsRUFDVixLQUF5QztRQUV6QyxPQUFPLElBQUkseURBQTBCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUM5QyxHQUFHLEtBQUs7WUFDUixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSSxXQUFXLENBQUMsRUFBVSxFQUFFLEtBQXVCO1FBQ3BELE9BQU8sSUFBSSxvQkFBUSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDNUIsR0FBRyxLQUFLO1lBQ1IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdGQUFnRjtJQUNoRix5QkFBeUI7SUFDekIsZ0ZBQWdGO0lBRWhGOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUM5QyxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO2FBQ3pDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQTFTSCxzREEyU0M7OztBQTFTQztJQUNFLDhCQUFhLENBQUMsZUFBZSxDQUMzQiw4REFBNEIsRUFDNUIsc0VBQW9DLENBQ3JDLENBQUM7QUFDSixDQUFDLEdBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXIgaW1wbGVtZW50YXRpb24gdXNpbmcgQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgdW5pZmllZCBpbXBsZW1lbnRhdGlvbiBmb3IgQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJzIHRoYXRcbiAqIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIG1hbmFnZW1lbnQsIHNjaGVtYSB2YWxpZGF0aW9uLCBhbmQgcHJvcGVydHlcbiAqIHRyYW5zZm9ybWF0aW9uIGFjcm9zcyBhbGwgc3VwcG9ydGVkIEFQSSB2ZXJzaW9ucy5cbiAqXG4gKiBTdXBwb3J0ZWQgQVBJIFZlcnNpb25zOlxuICogLSAyMDIzLTExLTAxIChNYWludGVuYW5jZSlcbiAqIC0gMjAyNC0wNS0wMSAoQWN0aXZlLCBMYXRlc3QpXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gRXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzXG4gKiAtIFNjaGVtYS1kcml2ZW4gdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gRnVsbCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gKiAtIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICogLSBDb252ZW5pZW5jZSBtZXRob2RzIGZvciBjcmVhdGluZyBjaGlsZCByZXNvdXJjZXNcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0biBmcm9tIFwiY2RrdG5cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb25uZWN0aXZpdHlDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vY29ubmVjdGl2aXR5LWNvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB7XG4gIENvbm5lY3Rpdml0eUdyb3VwSXRlbSxcbiAgSHViLFxufSBmcm9tIFwiLi9jb25uZWN0aXZpdHktY29uZmlndXJhdGlvbi1zY2hlbWFzXCI7XG5pbXBvcnQgeyBJcGFtUG9vbCB9IGZyb20gXCIuL2lwYW0tcG9vbFwiO1xuaW1wb3J0IHsgTmV0d29ya0dyb3VwIH0gZnJvbSBcIi4vbmV0d29yay1ncm91cFwiO1xuaW1wb3J0IHsgU2VjdXJpdHlBZG1pbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi9zZWN1cml0eS1hZG1pbi1jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQge1xuICBBTExfVklSVFVBTF9ORVRXT1JLX01BTkFHRVJfVkVSU0lPTlMsXG4gIFZJUlRVQUxfTkVUV09SS19NQU5BR0VSX1RZUEUsXG59IGZyb20gXCIuL3ZpcnR1YWwtbmV0d29yay1tYW5hZ2VyLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogU2NvcGUgY29uZmlndXJhdGlvbiBmb3IgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrTWFuYWdlclNjb3BlcyB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBtYW5hZ2VtZW50IGdyb3VwIElEcyB0aGF0IGRlZmluZSB0aGUgc2NvcGVcbiAgICogQGV4YW1wbGUgW1wiL3Byb3ZpZGVycy9NaWNyb3NvZnQuTWFuYWdlbWVudC9tYW5hZ2VtZW50R3JvdXBzL21nMVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgbWFuYWdlbWVudEdyb3Vwcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBzdWJzY3JpcHRpb24gSURzIHRoYXQgZGVmaW5lIHRoZSBzY29wZVxuICAgKiBAZXhhbXBsZSBbXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIl1cbiAgICovXG4gIHJlYWRvbmx5IHN1YnNjcmlwdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcbiAqXG4gKiBFeHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB3aXRoIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXJ0dWFsTmV0d29ya01hbmFnZXJQcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBSZXNvdXJjZSBJRCBvZiB0aGUgcmVzb3VyY2UgZ3JvdXAgd2hlcmUgdGhlIG5ldHdvcmsgbWFuYWdlciB3aWxsIGJlIGNyZWF0ZWRcbiAgICogQGV4YW1wbGUgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvbXktcmdcIlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VHcm91cElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHNjb3BlIG9mIG1hbmFnZW1lbnQgKG1hbmFnZW1lbnQgZ3JvdXBzIGFuZC9vciBzdWJzY3JpcHRpb25zKVxuICAgKiBBdCBsZWFzdCBvbmUgb2YgbWFuYWdlbWVudEdyb3VwcyBvciBzdWJzY3JpcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrTWFuYWdlclNjb3BlczogTmV0d29ya01hbmFnZXJTY29wZXM7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIGZlYXR1cmVzIGVuYWJsZWQgZm9yIHRoZSBuZXR3b3JrIG1hbmFnZXJcbiAgICogVmFsaWQgdmFsdWVzOiBcIkNvbm5lY3Rpdml0eVwiLCBcIlNlY3VyaXR5QWRtaW5cIiwgXCJSb3V0aW5nXCJcbiAgICogQGV4YW1wbGUgW1wiQ29ubmVjdGl2aXR5XCIsIFwiU2VjdXJpdHlBZG1pblwiXVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya01hbmFnZXJTY29wZUFjY2Vzc2VzOiAoXG4gICAgfCBcIkNvbm5lY3Rpdml0eVwiXG4gICAgfCBcIlNlY3VyaXR5QWRtaW5cIlxuICAgIHwgXCJSb3V0aW5nXCJcbiAgKVtdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBvZiB0aGUgbmV0d29yayBtYW5hZ2VyXG4gICAqIEBleGFtcGxlIFwiQ2VudHJhbCBuZXR3b3JrIG1hbmFnZW1lbnQgZm9yIHByb2R1Y3Rpb24gd29ya2xvYWRzXCJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZWN5Y2xlIHJ1bGVzIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAqIFVzZWZ1bCBmb3IgcHJvcGVydGllcyB0aGF0IGFyZSBleHRlcm5hbGx5IG1hbmFnZWRcbiAgICogQGV4YW1wbGUgW1widGFnc1wiXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlQ2hhbmdlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFkZGluZyBhIE5ldHdvcmtHcm91cCB2aWEgdGhlIGNvbnZlbmllbmNlIG1ldGhvZFxuICogVGhpcyBpbnRlcmZhY2UgZXhjbHVkZXMgbmV0d29ya01hbmFnZXJJZCBhcyBpdCdzIGF1dG9tYXRpY2FsbHkgc2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkTmV0d29ya0dyb3VwUHJvcHMgZXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIG5ldHdvcmsgZ3JvdXBcbiAgICogQGV4YW1wbGUgXCJQcm9kdWN0aW9uIHZpcnR1YWwgbmV0d29ya3MgZm9yIHJlZ2lvbiBFYXN0IFVTXCJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIG1lbWJlcnMgaW4gdGhpcyBuZXR3b3JrIGdyb3VwXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAoY2FuIGNvbnRhaW4gYm90aCBWaXJ0dWFsTmV0d29yayBhbmQgU3VibmV0IG1lbWJlcnMpXG4gICAqIEBleGFtcGxlIFwiVmlydHVhbE5ldHdvcmtcIlxuICAgKiBAZXhhbXBsZSBcIlN1Ym5ldFwiXG4gICAqL1xuICByZWFkb25seSBtZW1iZXJUeXBlPzogXCJWaXJ0dWFsTmV0d29ya1wiIHwgXCJTdWJuZXRcIjtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJ0YWdzXCJdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYWRkaW5nIGEgQ29ubmVjdGl2aXR5Q29uZmlndXJhdGlvbiB2aWEgdGhlIGNvbnZlbmllbmNlIG1ldGhvZFxuICogVGhpcyBpbnRlcmZhY2UgZXhjbHVkZXMgbmV0d29ya01hbmFnZXJJZCBhcyBpdCdzIGF1dG9tYXRpY2FsbHkgc2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQ29ubmVjdGl2aXR5Q29uZmlndXJhdGlvblByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBjb25uZWN0aXZpdHkgY29uZmlndXJhdGlvblxuICAgKiBAZXhhbXBsZSBcIkh1Yi1hbmQtc3Bva2UgdG9wb2xvZ3kgZm9yIHByb2R1Y3Rpb24gd29ya2xvYWRzXCJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25uZWN0aXZpdHkgdG9wb2xvZ3kgdHlwZVxuICAgKiAtIEh1YkFuZFNwb2tlOiBDZW50cmFsIGh1YiB3aXRoIHNwb2tlIFZOZXRzXG4gICAqIC0gTWVzaDogQWxsIFZOZXRzIGNhbiBjb21tdW5pY2F0ZSBkaXJlY3RseVxuICAgKiBAZXhhbXBsZSBcIkh1YkFuZFNwb2tlXCJcbiAgICogQGV4YW1wbGUgXCJNZXNoXCJcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpdml0eVRvcG9sb2d5OiBcIkh1YkFuZFNwb2tlXCIgfCBcIk1lc2hcIjtcblxuICAvKipcbiAgICogTmV0d29yayBncm91cHMgdG8gYXBwbHkgdGhpcyBjb25maWd1cmF0aW9uIHRvXG4gICAqIEVhY2ggaXRlbSBzcGVjaWZpZXMgYSBuZXR3b3JrIGdyb3VwIGFuZCBob3cgaXQgc2hvdWxkIGNvbm5lY3RcbiAgICovXG4gIHJlYWRvbmx5IGFwcGxpZXNUb0dyb3VwczogQ29ubmVjdGl2aXR5R3JvdXBJdGVtW107XG5cbiAgLyoqXG4gICAqIEh1YiBWTmV0cyBmb3IgaHViLWFuZC1zcG9rZSB0b3BvbG9neVxuICAgKiBSZXF1aXJlZCB3aGVuIGNvbm5lY3Rpdml0eVRvcG9sb2d5IGlzIFwiSHViQW5kU3Bva2VcIlxuICAgKiBAZXhhbXBsZSBbeyByZXNvdXJjZUlkOiBcIi9zdWJzY3JpcHRpb25zLy4uLi92aXJ0dWFsTmV0d29ya3MvaHViLXZuZXRcIiwgcmVzb3VyY2VUeXBlOiBcIk1pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrc1wiIH1dXG4gICAqL1xuICByZWFkb25seSBodWJzPzogSHViW107XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBnbG9iYWwgbWVzaCBjb25uZWN0aXZpdHlcbiAgICogQWxsb3dzIG1lc2ggY29ubmVjdGl2aXR5IGFjcm9zcyByZWdpb25zXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc0dsb2JhbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBleGlzdGluZyBwZWVyaW5ncyB3aGVuIGFwcGx5aW5nIHRoaXMgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlRXhpc3RpbmdQZWVyaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJ0YWdzXCJdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYWRkaW5nIGEgU2VjdXJpdHlBZG1pbkNvbmZpZ3VyYXRpb24gdmlhIHRoZSBjb252ZW5pZW5jZSBtZXRob2RcbiAqIFRoaXMgaW50ZXJmYWNlIGV4Y2x1ZGVzIG5ldHdvcmtNYW5hZ2VySWQgYXMgaXQncyBhdXRvbWF0aWNhbGx5IHNldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uUHJvcHMgZXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHNlY3VyaXR5IGFkbWluIGNvbmZpZ3VyYXRpb25cbiAgICogQGV4YW1wbGUgXCJPcmdhbml6YXRpb24td2lkZSBzZWN1cml0eSBydWxlcyBmb3IgcHJvZHVjdGlvbiB3b3JrbG9hZHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlcnZpY2VzIHRvIGFwcGx5IHRoZSBzZWN1cml0eSBhZG1pbiBjb25maWd1cmF0aW9uIG9uXG4gICAqIEBleGFtcGxlIFtcIk5vbmVcIl1cbiAgICogQGV4YW1wbGUgW1wiQWxsXCJdXG4gICAqL1xuICByZWFkb25seSBhcHBseU9uTmV0d29ya0ludGVudFBvbGljeUJhc2VkU2VydmljZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJ0YWdzXCJdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYWRkaW5nIGFuIElwYW1Qb29sIHZpYSB0aGUgY29udmVuaWVuY2UgbWV0aG9kXG4gKiBUaGlzIGludGVyZmFjZSBleGNsdWRlcyBuZXR3b3JrTWFuYWdlcklkIGFzIGl0J3MgYXV0b21hdGljYWxseSBzZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRJcGFtUG9vbFByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIElQIGFkZHJlc3MgcHJlZml4ZXMgZm9yIHRoZSBwb29sXG4gICAqIE11c3QgYmUgdmFsaWQgQ0lEUiBub3RhdGlvbiAoZS5nLiwgXCIxMC4wLjAuMC84XCIpXG4gICAqIE11bHRpcGxlIHByZWZpeGVzIG11c3Qgbm90IG92ZXJsYXBcbiAgICogQGV4YW1wbGUgW1wiMTAuMC4wLjAvOFwiLCBcIjE3Mi4xNi4wLjAvMTJcIl1cbiAgICovXG4gIHJlYWRvbmx5IGFkZHJlc3NQcmVmaXhlczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBJUEFNIHBvb2xcbiAgICogQGV4YW1wbGUgXCJQcm9kdWN0aW9uIElQIGFkZHJlc3MgcG9vbCBmb3IgRWFzdCBVUyByZWdpb25cIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZyaWVuZGx5IGRpc3BsYXkgbmFtZVxuICAgKiBAZXhhbXBsZSBcIkVhc3QgVVMgUHJvZHVjdGlvbiBQb29sXCJcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHBhcmVudCBwb29sIGZvciBoaWVyYXJjaGljYWwgcG9vbHNcbiAgICogTGVhdmUgZW1wdHkvdW5kZWZpbmVkIGZvciByb290IHBvb2xzXG4gICAqIEBleGFtcGxlIFwicm9vdC1wb29sXCJcbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudFBvb2xOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZWN5Y2xlIHJ1bGVzIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAqIEBleGFtcGxlIFtcInRhZ3NcIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBib2R5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlydHVhbE5ldHdvcmtNYW5hZ2VyUHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IG5ldHdvcmtNYW5hZ2VyU2NvcGVzOiBOZXR3b3JrTWFuYWdlclNjb3BlcztcbiAgcmVhZG9ubHkgbmV0d29ya01hbmFnZXJTY29wZUFjY2Vzc2VzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGJvZHkgaW50ZXJmYWNlIGZvciBBenVyZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBBUEkgY2FsbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXJ0dWFsTmV0d29ya01hbmFnZXJCb2R5IHtcbiAgcmVhZG9ubHkgbG9jYXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IFZpcnR1YWxOZXR3b3JrTWFuYWdlclByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXIgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2luZ2xlLCB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlc1xuICogdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgdmFsaWRhdGlvbiwgYW5kIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uIHdoaWxlIG1haW50YWluaW5nXG4gKiBmdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIHVzYWdlIHdpdGggYXV0b21hdGljIHZlcnNpb24gcmVzb2x1dGlvbjpcbiAqIGNvbnN0IG5ldHdvcmtNYW5hZ2VyID0gbmV3IFZpcnR1YWxOZXR3b3JrTWFuYWdlcih0aGlzLCBcIm1hbmFnZXJcIiwge1xuICogICBuYW1lOiBcIm15LW5ldHdvcmstbWFuYWdlclwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICogICBuZXR3b3JrTWFuYWdlclNjb3Blczoge1xuICogICAgIHN1YnNjcmlwdGlvbnM6IFtcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiXVxuICogICB9LFxuICogICBuZXR3b3JrTWFuYWdlclNjb3BlQWNjZXNzZXM6IFtcIkNvbm5lY3Rpdml0eVwiLCBcIlNlY3VyaXR5QWRtaW5cIl1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVc2FnZSB3aXRoIGV4cGxpY2l0IHZlcnNpb24gcGlubmluZzpcbiAqIGNvbnN0IG5ldHdvcmtNYW5hZ2VyID0gbmV3IFZpcnR1YWxOZXR3b3JrTWFuYWdlcih0aGlzLCBcIm1hbmFnZXJcIiwge1xuICogICBuYW1lOiBcIm15LW5ldHdvcmstbWFuYWdlclwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICogICBhcGlWZXJzaW9uOiBcIjIwMjQtMDUtMDFcIixcbiAqICAgbmV0d29ya01hbmFnZXJTY29wZXM6IHtcbiAqICAgICBzdWJzY3JpcHRpb25zOiBbXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIl1cbiAqICAgfSxcbiAqICAgbmV0d29ya01hbmFnZXJTY29wZUFjY2Vzc2VzOiBbXCJDb25uZWN0aXZpdHlcIiwgXCJTZWN1cml0eUFkbWluXCJdXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgVmlydHVhbE5ldHdvcmtNYW5hZ2VyIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBWSVJUVUFMX05FVFdPUktfTUFOQUdFUl9UWVBFLFxuICAgICAgQUxMX1ZJUlRVQUxfTkVUV09SS19NQU5BR0VSX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXIgaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogVmlydHVhbE5ldHdvcmtNYW5hZ2VyUHJvcHM7XG5cbiAgLy8gT3V0cHV0IHByb3BlcnRpZXMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZ1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RuLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RuLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IGxvY2F0aW9uT3V0cHV0OiBjZGt0bi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSB0YWdzT3V0cHV0OiBjZGt0bi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBzY29wZU91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVBY2Nlc3Nlc091dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzIHRoYXQgbWF0Y2ggdGhlIHN0YW5kYXJkIGludGVyZmFjZVxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQXp1cmUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXIgdXNpbmcgdGhlIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gICAqXG4gICAqIFRoZSBjb25zdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgcmVnaXN0cmF0aW9uLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgcmVzb3VyY2UgY3JlYXRpb24uIEl0IG1haW50YWlucyBmdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBleGlzdGluZyBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlciBpbXBsZW1lbnRhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVmlydHVhbE5ldHdvcmtNYW5hZ2VyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIEV4dHJhY3QgcHJvcGVydGllcyBmcm9tIHRoZSBBWkFQSSByZXNvdXJjZSBvdXRwdXRzIHVzaW5nIFRlcnJhZm9ybSBpbnRlcnBvbGF0aW9uXG4gICAgdGhpcy5yZXNvdXJjZU5hbWUgPSBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YDtcblxuICAgIC8vIENyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0cyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nIGZyb20gb3RoZXIgcmVzb3VyY2VzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnJlc291cmNlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlclwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2NhdGlvbk91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJsb2NhdGlvblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5sb2NhdGlvbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGxvY2F0aW9uIG9mIHRoZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlclwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy50YWdzT3V0cHV0ID0gbmV3IGNka3RuLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcInRhZ3NcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0udGFnc31gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHRhZ3MgYXNzaWduZWQgdG8gdGhlIFZpcnR1YWwgTmV0d29yayBNYW5hZ2VyXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNjb3BlT3V0cHV0ID0gbmV3IGNka3RuLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcInNjb3BlXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLm5ldHdvcmtNYW5hZ2VyU2NvcGVzfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbWFuYWdlbWVudCBzY29wZSBvZiB0aGUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcIixcbiAgICB9KTtcblxuICAgIHRoaXMuc2NvcGVBY2Nlc3Nlc091dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgXCJzY29wZUFjY2Vzc2VzXCIsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLm5ldHdvcmtNYW5hZ2VyU2NvcGVBY2Nlc3Nlc31gLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgZW5hYmxlZCBmZWF0dXJlcyBvZiB0aGUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcIixcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIG9yaWdpbmFsIG5hbWluZyBjb252ZW50aW9uXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5sb2NhdGlvbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImxvY2F0aW9uXCIpO1xuICAgIHRoaXMudGFnc091dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInRhZ3NcIik7XG4gICAgdGhpcy5zY29wZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInNjb3BlXCIpO1xuICAgIHRoaXMuc2NvcGVBY2Nlc3Nlc091dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInNjb3BlQWNjZXNzZXNcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBwYXJlbnQgcmVzb3VyY2UgSUQgZm9yIHRoZSBOZXR3b3JrIE1hbmFnZXJcbiAgICogTmV0d29yayBNYW5hZ2VycyBhcmUgc2NvcGVkIHRvIHJlc291cmNlIGdyb3Vwc1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgVmlydHVhbE5ldHdvcmtNYW5hZ2VyUHJvcHM7XG4gICAgcmV0dXJuIHR5cGVkUHJvcHMucmVzb3VyY2VHcm91cElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICogUmV0dXJucyB0aGUgbW9zdCByZWNlbnQgc3RhYmxlIHZlcnNpb24gYXMgdGhlIGRlZmF1bHRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjQtMDUtMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlcnNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJNaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrTWFuYWdlcnNcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKiBVc2VzIHRoZSBmcmFtZXdvcmsncyBzY2hlbWEgcmVzb2x1dGlvbiB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHNjaGVtYVxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgcHJvcGVydGllcyBpbnRvIHRoZSBKU09OIGZvcm1hdCBleHBlY3RlZCBieSBBenVyZSBSRVNUIEFQSVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgVmlydHVhbE5ldHdvcmtNYW5hZ2VyUHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2F0aW9uOiB0eXBlZFByb3BzLmxvY2F0aW9uLFxuICAgICAgdGFnczogdGhpcy5hbGxUYWdzKCksXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIG5ldHdvcmtNYW5hZ2VyU2NvcGVzOiB0eXBlZFByb3BzLm5ldHdvcmtNYW5hZ2VyU2NvcGVzLFxuICAgICAgICBuZXR3b3JrTWFuYWdlclNjb3BlQWNjZXNzZXM6IHR5cGVkUHJvcHMubmV0d29ya01hbmFnZXJTY29wZUFjY2Vzc2VzLFxuICAgICAgICBkZXNjcmlwdGlvbjogdHlwZWRQcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBVQkxJQyBNRVRIT0RTIEZPUiBWSVJUVUFMIE5FVFdPUksgTUFOQUdFUiBPUEVSQVRJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFkZCBhIHRhZyB0byB0aGUgVmlydHVhbCBOZXR3b3JrIE1hbmFnZXJcbiAgICogTm90ZTogVGhpcyBtb2RpZmllcyB0aGUgY29uc3RydWN0IHByb3BzIGJ1dCByZXF1aXJlcyBhIG5ldyBkZXBsb3ltZW50IHRvIHRha2UgZWZmZWN0XG4gICAqL1xuICBwdWJsaWMgYWRkVGFnKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnRhZ3MpIHtcbiAgICAgICh0aGlzLnByb3BzIGFzIGFueSkudGFncyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnByb3BzLnRhZ3MhW2tleV0gPSB2YWx1ZTtcbiAgICAvLyBBcHBseSB0aGUgdGFnIGRpcmVjdGx5IHRvIHRoZSByZXNvdXJjZVxuICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoYHRhZ3MuJHtrZXl9YCwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHRhZyBmcm9tIHRoZSBWaXJ0dWFsIE5ldHdvcmsgTWFuYWdlclxuICAgKiBOb3RlOiBUaGlzIG1vZGlmaWVzIHRoZSBjb25zdHJ1Y3QgcHJvcHMgYnV0IHJlcXVpcmVzIGEgbmV3IGRlcGxveW1lbnQgdG8gdGFrZSBlZmZlY3RcbiAgICovXG4gIHB1YmxpYyByZW1vdmVUYWcoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy50YWdzICYmIHRoaXMucHJvcHMudGFnc1trZXldKSB7XG4gICAgICBkZWxldGUgdGhpcy5wcm9wcy50YWdzW2tleV07XG4gICAgICAvLyBSZW1vdmUgdGhlIHRhZyBmcm9tIHRoZSByZXNvdXJjZVxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShgdGFncy4ke2tleX1gLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT05WRU5JRU5DRSBNRVRIT0RTIEZPUiBDSElMRCBSRVNPVVJDRVMgKE9QVElPTiBBIC0gSFlCUklEIEFQUFJPQUNIKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgTmV0d29ya0dyb3VwXG4gICAqXG4gICAqIFRoaXMgaXMgYSBoZWxwZXIgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIE5ldHdvcmtHcm91cCB3aXRoIHRoZSBuZXR3b3JrTWFuYWdlcklkXG4gICAqIGF1dG9tYXRpY2FsbHkgc2V0IHRvIHRoaXMgTmV0d29yayBNYW5hZ2VyJ3MgSUQuIFlvdSBjYW4gYWxzbyBjcmVhdGUgTmV0d29ya0dyb3Vwc1xuICAgKiBkaXJlY3RseSB1c2luZzogbmV3IE5ldHdvcmtHcm91cChzY29wZSwgaWQsIHsgbmV0d29ya01hbmFnZXJJZDogdm5tLmlkLCAuLi5wcm9wcyB9KVxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBuZXR3b3JrIGdyb3VwIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gcHJvcHMgLSBOZXR3b3JrR3JvdXAgcHJvcGVydGllcyAobmV0d29ya01hbmFnZXJJZCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5KVxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBOZXR3b3JrR3JvdXAgaW5zdGFuY2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgcHJvZEdyb3VwID0gbmV0d29ya01hbmFnZXIuYWRkTmV0d29ya0dyb3VwKFwicHJvZC1ncm91cFwiLCB7XG4gICAqICAgbmFtZTogXCJwcm9kdWN0aW9uLXZuZXRzXCIsXG4gICAqICAgZGVzY3JpcHRpb246IFwiUHJvZHVjdGlvbiB2aXJ0dWFsIG5ldHdvcmtzXCIsXG4gICAqICAgbWVtYmVyVHlwZTogXCJWaXJ0dWFsTmV0d29ya1wiXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZE5ldHdvcmtHcm91cChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBZGROZXR3b3JrR3JvdXBQcm9wcyxcbiAgKTogTmV0d29ya0dyb3VwIHtcbiAgICByZXR1cm4gbmV3IE5ldHdvcmtHcm91cCh0aGlzLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBuZXR3b3JrTWFuYWdlcklkOiB0aGlzLmlkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBjcmVhdGUgYSBDb25uZWN0aXZpdHlDb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFRoaXMgaXMgYSBoZWxwZXIgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIENvbm5lY3Rpdml0eUNvbmZpZ3VyYXRpb24gd2l0aCB0aGVcbiAgICogbmV0d29ya01hbmFnZXJJZCBhdXRvbWF0aWNhbGx5IHNldCB0byB0aGlzIE5ldHdvcmsgTWFuYWdlcidzIElELlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb25uZWN0aXZpdHkgY29uZmlndXJhdGlvbiBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIHByb3BzIC0gQ29ubmVjdGl2aXR5Q29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIChuZXR3b3JrTWFuYWdlcklkIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkpXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIENvbm5lY3Rpdml0eUNvbmZpZ3VyYXRpb24gaW5zdGFuY2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgaHViU3Bva2UgPSBuZXR3b3JrTWFuYWdlci5hZGRDb25uZWN0aXZpdHlDb25maWd1cmF0aW9uKFwiaHViLXNwb2tlXCIsIHtcbiAgICogICBuYW1lOiBcInByb2R1Y3Rpb24taHViLXNwb2tlXCIsXG4gICAqICAgY29ubmVjdGl2aXR5VG9wb2xvZ3k6IFwiSHViQW5kU3Bva2VcIixcbiAgICogICBhcHBsaWVzVG9Hcm91cHM6IFt7IG5ldHdvcmtHcm91cElkOiBwcm9kR3JvdXAuaWQgfV0sXG4gICAqICAgaHViczogW3sgcmVzb3VyY2VJZDogaHViVm5ldC5pZCwgcmVzb3VyY2VUeXBlOiBcIk1pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrc1wiIH1dXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZENvbm5lY3Rpdml0eUNvbmZpZ3VyYXRpb24oXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQWRkQ29ubmVjdGl2aXR5Q29uZmlndXJhdGlvblByb3BzLFxuICApOiBDb25uZWN0aXZpdHlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbm5lY3Rpdml0eUNvbmZpZ3VyYXRpb24odGhpcywgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgbmV0d29ya01hbmFnZXJJZDogdGhpcy5pZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgU2VjdXJpdHlBZG1pbkNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogVGhpcyBpcyBhIGhlbHBlciBtZXRob2QgdGhhdCBjcmVhdGVzIGEgU2VjdXJpdHlBZG1pbkNvbmZpZ3VyYXRpb24gd2l0aCB0aGVcbiAgICogbmV0d29ya01hbmFnZXJJZCBhdXRvbWF0aWNhbGx5IHNldCB0byB0aGlzIE5ldHdvcmsgTWFuYWdlcidzIElELlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzZWN1cml0eSBhZG1pbiBjb25maWd1cmF0aW9uIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gcHJvcHMgLSBTZWN1cml0eUFkbWluQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIChuZXR3b3JrTWFuYWdlcklkIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkpXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uIGluc3RhbmNlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHNlY3VyaXR5Q29uZmlnID0gbmV0d29ya01hbmFnZXIuYWRkU2VjdXJpdHlBZG1pbkNvbmZpZ3VyYXRpb24oXCJzZWN1cml0eVwiLCB7XG4gICAqICAgbmFtZTogXCJwcm9kdWN0aW9uLXNlY3VyaXR5XCIsXG4gICAqICAgZGVzY3JpcHRpb246IFwiSGlnaC1wcmlvcml0eSBzZWN1cml0eSBydWxlcyBmb3IgcHJvZHVjdGlvblwiXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFkZFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uUHJvcHMsXG4gICk6IFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IFNlY3VyaXR5QWRtaW5Db25maWd1cmF0aW9uKHRoaXMsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIG5ldHdvcmtNYW5hZ2VySWQ6IHRoaXMuaWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGNyZWF0ZSBhbiBJcGFtUG9vbFxuICAgKlxuICAgKiBUaGlzIGlzIGEgaGVscGVyIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYW4gSXBhbVBvb2wgd2l0aCB0aGUgbmV0d29ya01hbmFnZXJJZFxuICAgKiBhdXRvbWF0aWNhbGx5IHNldCB0byB0aGlzIE5ldHdvcmsgTWFuYWdlcidzIElELiBZb3UgY2FuIGFsc28gY3JlYXRlIElwYW1Qb29sc1xuICAgKiBkaXJlY3RseSB1c2luZzogbmV3IElwYW1Qb29sKHNjb3BlLCBpZCwgeyBuZXR3b3JrTWFuYWdlcklkOiB2bm0uaWQsIC4uLnByb3BzIH0pXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIElQQU0gcG9vbCBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIHByb3BzIC0gSXBhbVBvb2wgcHJvcGVydGllcyAobmV0d29ya01hbmFnZXJJZCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5KVxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBJcGFtUG9vbCBpbnN0YW5jZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBpcGFtUG9vbCA9IG5ldHdvcmtNYW5hZ2VyLmFkZElwYW1Qb29sKFwicHJvZC1wb29sXCIsIHtcbiAgICogICBuYW1lOiBcInByb2R1Y3Rpb24tcG9vbFwiLFxuICAgKiAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgKiAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4wLjAvOFwiXSxcbiAgICogICBkZXNjcmlwdGlvbjogXCJQcm9kdWN0aW9uIElQIGFkZHJlc3MgcG9vbFwiLFxuICAgKiAgIGRpc3BsYXlOYW1lOiBcIlByb2R1Y3Rpb24gUG9vbFwiXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZElwYW1Qb29sKGlkOiBzdHJpbmcsIHByb3BzOiBBZGRJcGFtUG9vbFByb3BzKTogSXBhbVBvb2wge1xuICAgIHJldHVybiBuZXcgSXBhbVBvb2wodGhpcywgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgbmV0d29ya01hbmFnZXJJZDogdGhpcy5pZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSEVMUEVSIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBwbGllcyBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXMgaWYgc3BlY2lmaWVkIGluIHByb3BzXG4gICAqL1xuICBwcml2YXRlIF9hcHBseUlnbm9yZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyAmJiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShcImxpZmVjeWNsZVwiLCB7XG4gICAgICAgIGlnbm9yZV9jaGFuZ2VzOiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -5,8 +5,8 @@
5
5
  * Unit tests for the IPAM Pool Static CIDR construct
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- const cdktf_1 = require("cdktf");
9
- const cdktf = require("cdktf");
8
+ const cdktn_1 = require("cdktn");
9
+ const cdktn = require("cdktn");
10
10
  const ipam_pool_1 = require("../lib/ipam-pool");
11
11
  const ipam_pool_static_cidr_1 = require("../lib/ipam-pool-static-cidr");
12
12
  const virtual_network_manager_1 = require("../lib/virtual-network-manager");
@@ -16,8 +16,8 @@ describe("IpamPoolStaticCidr", () => {
16
16
  let manager;
17
17
  let pool;
18
18
  beforeEach(() => {
19
- app = cdktf_1.Testing.app();
20
- stack = new cdktf.TerraformStack(app, "test-stack");
19
+ app = cdktn_1.Testing.app();
20
+ stack = new cdktn.TerraformStack(app, "test-stack");
21
21
  manager = new virtual_network_manager_1.VirtualNetworkManager(stack, "TestManager", {
22
22
  name: "test-manager",
23
23
  location: "eastus",
@@ -206,9 +206,9 @@ describe("IpamPoolStaticCidr", () => {
206
206
  ipamPoolId: pool.id,
207
207
  addressPrefixes: ["10.0.1.0/24"],
208
208
  });
209
- expect(staticCidr.idOutput).toBeInstanceOf(cdktf.TerraformOutput);
210
- expect(staticCidr.nameOutput).toBeInstanceOf(cdktf.TerraformOutput);
211
- expect(staticCidr.addressPrefixOutput).toBeInstanceOf(cdktf.TerraformOutput);
209
+ expect(staticCidr.idOutput).toBeInstanceOf(cdktn.TerraformOutput);
210
+ expect(staticCidr.nameOutput).toBeInstanceOf(cdktn.TerraformOutput);
211
+ expect(staticCidr.addressPrefixOutput).toBeInstanceOf(cdktn.TerraformOutput);
212
212
  });
213
213
  it("should have correct output logical IDs", () => {
214
214
  new ipam_pool_static_cidr_1.IpamPoolStaticCidr(stack, "TestStaticCidr", {
@@ -216,7 +216,7 @@ describe("IpamPoolStaticCidr", () => {
216
216
  ipamPoolId: pool.id,
217
217
  addressPrefixes: ["10.0.1.0/24"],
218
218
  });
219
- const synthesized = cdktf_1.Testing.synth(stack);
219
+ const synthesized = cdktn_1.Testing.synth(stack);
220
220
  const stackConfig = JSON.parse(synthesized);
221
221
  expect(stackConfig.output).toBeDefined();
222
222
  expect(stackConfig.output.id).toBeDefined();
@@ -248,7 +248,7 @@ describe("IpamPoolStaticCidr", () => {
248
248
  ipamPoolId: pool.id,
249
249
  addressPrefixes: ["10.0.1.0/24"],
250
250
  });
251
- const manifest = JSON.stringify(cdktf_1.Testing.synth(stack));
251
+ const manifest = JSON.stringify(cdktn_1.Testing.synth(stack));
252
252
  expect(manifest).toContain("Microsoft.Network/networkManagers/ipamPools/staticCidrs@2024-05-01");
253
253
  });
254
254
  });
@@ -279,7 +279,7 @@ describe("IpamPoolStaticCidr", () => {
279
279
  addressPrefixes: ["10.0.1.0/24"],
280
280
  ignoreChanges: ["description"],
281
281
  });
282
- const manifest = JSON.stringify(cdktf_1.Testing.synth(stack));
282
+ const manifest = JSON.stringify(cdktn_1.Testing.synth(stack));
283
283
  expect(manifest).toContain("ignore_changes");
284
284
  });
285
285
  it("should apply multiple ignore changes", () => {
@@ -289,7 +289,7 @@ describe("IpamPoolStaticCidr", () => {
289
289
  addressPrefixes: ["10.0.1.0/24"],
290
290
  ignoreChanges: ["description", "numberOfIPAddresses"],
291
291
  });
292
- const manifest = JSON.stringify(cdktf_1.Testing.synth(stack));
292
+ const manifest = JSON.stringify(cdktn_1.Testing.synth(stack));
293
293
  expect(manifest).toContain("ignore_changes");
294
294
  });
295
295
  });
@@ -301,7 +301,7 @@ describe("IpamPoolStaticCidr", () => {
301
301
  addressPrefixes: ["10.0.1.0/24"],
302
302
  description: "Test CIDR",
303
303
  });
304
- const output = cdktf_1.Testing.synth(stack);
304
+ const output = cdktn_1.Testing.synth(stack);
305
305
  expect(output).toBeDefined();
306
306
  });
307
307
  it("should include address prefix in resource body", () => {
@@ -310,7 +310,7 @@ describe("IpamPoolStaticCidr", () => {
310
310
  ipamPoolId: pool.id,
311
311
  addressPrefixes: ["10.0.1.0/24"],
312
312
  });
313
- const manifest = JSON.stringify(cdktf_1.Testing.synth(stack));
313
+ const manifest = JSON.stringify(cdktn_1.Testing.synth(stack));
314
314
  expect(manifest).toContain("10.0.1.0/24");
315
315
  });
316
316
  it("should include optional properties when specified", () => {
@@ -320,7 +320,7 @@ describe("IpamPoolStaticCidr", () => {
320
320
  addressPrefixes: ["10.0.1.0/24"],
321
321
  description: "Test description",
322
322
  });
323
- const manifest = JSON.stringify(cdktf_1.Testing.synth(stack));
323
+ const manifest = JSON.stringify(cdktn_1.Testing.synth(stack));
324
324
  expect(manifest).toContain("Test description");
325
325
  });
326
326
  it("should not include location in resource body", () => {
@@ -329,7 +329,7 @@ describe("IpamPoolStaticCidr", () => {
329
329
  ipamPoolId: pool.id,
330
330
  addressPrefixes: ["10.0.1.0/24"],
331
331
  });
332
- const manifest = JSON.stringify(cdktf_1.Testing.synth(stack));
332
+ const manifest = JSON.stringify(cdktn_1.Testing.synth(stack));
333
333
  // Child resources don't have location in body
334
334
  expect(manifest).toContain("addressPrefixes");
335
335
  expect(manifest).toContain("10.0.1.0/24");
@@ -340,7 +340,7 @@ describe("IpamPoolStaticCidr", () => {
340
340
  ipamPoolId: pool.id,
341
341
  addressPrefixes: ["10.0.1.0/24"],
342
342
  });
343
- const manifest = JSON.stringify(cdktf_1.Testing.synth(stack));
343
+ const manifest = JSON.stringify(cdktn_1.Testing.synth(stack));
344
344
  // Child resources inherit tags from parent, not specified in body
345
345
  expect(manifest).toContain("addressPrefixes");
346
346
  expect(manifest).toContain("10.0.1.0/24");
@@ -427,4 +427,4 @@ describe("IpamPoolStaticCidr", () => {
427
427
  });
428
428
  });
429
429
  });
430
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS1wb29sLXN0YXRpYy1jaWRyLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtdmlydHVhbG5ldHdvcmttYW5hZ2VyL3Rlc3QvaXBhbS1wb29sLXN0YXRpYy1jaWRyLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7O0FBRUgsaUNBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQixnREFBNEM7QUFDNUMsd0VBQWtFO0FBQ2xFLDRFQUF1RTtBQUV2RSxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLElBQUksR0FBYyxDQUFDO0lBQ25CLElBQUksS0FBMkIsQ0FBQztJQUNoQyxJQUFJLE9BQThCLENBQUM7SUFDbkMsSUFBSSxJQUFjLENBQUM7SUFFbkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEIsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDcEQsT0FBTyxHQUFHLElBQUksK0NBQXFCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtZQUN4RCxJQUFJLEVBQUUsY0FBYztZQUNwQixRQUFRLEVBQUUsUUFBUTtZQUNsQixlQUFlLEVBQUUsdUNBQXVDO1lBQ3hELG9CQUFvQixFQUFFO2dCQUNwQixhQUFhLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQzthQUN2QztZQUNELDJCQUEyQixFQUFFLENBQUMsY0FBYyxDQUFDO1NBQzlDLENBQUMsQ0FBQztRQUNILElBQUksR0FBRyxJQUFJLG9CQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRTtZQUNyQyxJQUFJLEVBQUUsV0FBVztZQUNqQixRQUFRLEVBQUUsUUFBUTtZQUNsQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUM1QixlQUFlLEVBQUUsQ0FBQyxZQUFZLENBQUM7U0FD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dCI6WyIvKipcbiAqIElQQU0gUG9vbCBTdGF0aWMgQ0lEUiBUZXN0c1xuICpcbiAqIFVuaXQgdGVzdHMgZm9yIHRoZSBJUEFNIFBvb2wgU3RhdGljIENJRFIgY29uc3RydWN0XG4gKi9cblxuaW1wb3J0IHsgVGVzdGluZyB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBJcGFtUG9vbCB9IGZyb20gXCIuLi9saWIvaXBhbS1wb29sXCI7XG5pbXBvcnQgeyBJcGFtUG9vbFN0YXRpY0NpZHIgfSBmcm9tIFwiLi4vbGliL2lwYW0tcG9vbC1zdGF0aWMtY2lkclwiO1xuaW1wb3J0IHsgVmlydHVhbE5ldHdvcmtNYW5hZ2VyIH0gZnJvbSBcIi4uL2xpYi92aXJ0dWFsLW5ldHdvcmstbWFuYWdlclwiO1xuXG5kZXNjcmliZShcIklwYW1Qb29sU3RhdGljQ2lkclwiLCAoKSA9PiB7XG4gIGxldCBhcHA6IGNka3RmLkFwcDtcbiAgbGV0IHN0YWNrOiBjZGt0Zi5UZXJyYWZvcm1TdGFjaztcbiAgbGV0IG1hbmFnZXI6IFZpcnR1YWxOZXR3b3JrTWFuYWdlcjtcbiAgbGV0IHBvb2w6IElwYW1Qb29sO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGFwcCA9IFRlc3RpbmcuYXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgY2RrdGYuVGVycmFmb3JtU3RhY2soYXBwLCBcInRlc3Qtc3RhY2tcIik7XG4gICAgbWFuYWdlciA9IG5ldyBWaXJ0dWFsTmV0d29ya01hbmFnZXIoc3RhY2ssIFwiVGVzdE1hbmFnZXJcIiwge1xuICAgICAgbmFtZTogXCJ0ZXN0LW1hbmFnZXJcIixcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgcmVzb3VyY2VHcm91cElkOiBcIi9zdWJzY3JpcHRpb25zL3Rlc3QvcmVzb3VyY2VHcm91cHMvcmdcIixcbiAgICAgIG5ldHdvcmtNYW5hZ2VyU2NvcGVzOiB7XG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IFtcIi9zdWJzY3JpcHRpb25zL3Rlc3RcIl0sXG4gICAgICB9LFxuICAgICAgbmV0d29ya01hbmFnZXJTY29wZUFjY2Vzc2VzOiBbXCJDb25uZWN0aXZpdHlcIl0sXG4gICAgfSk7XG4gICAgcG9vbCA9IG5ldyBJcGFtUG9vbChzdGFjaywgXCJUZXN0UG9vbFwiLCB7XG4gICAgICBuYW1lOiBcInRlc3QtcG9vbFwiLFxuICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICBuZXR3b3JrTWFuYWdlcklkOiBtYW5hZ2VyLmlkLFxuICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjAuMC84XCJdLFxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkJhc2ljIEluc3RhbnRpYXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBzdGF0aWMgQ0lEUiB3aXRoIHJlcXVpcmVkIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyKS50b0JlSW5zdGFuY2VPZihJcGFtUG9vbFN0YXRpY0NpZHIpO1xuICAgICAgZXhwZWN0KHN0YXRpY0NpZHIucHJvcHMuYWRkcmVzc1ByZWZpeGVzKS50b0VxdWFsKFtcIjEwLjAuMS4wLzI0XCJdKTtcbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLnByb3BzLm5hbWUpLnRvQmUoXCJ0ZXN0LWNpZHJcIik7XG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5hZGRyZXNzUHJlZml4ZXMpLnRvRXF1YWwoW1wiMTAuMC4xLjAvMjRcIl0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIHN0YXRpYyBDSURSIHdpdGggZGVzY3JpcHRpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJSZXNlcnZlZCBmb3Igd2ViIHNlcnZlcnNcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5wcm9wcy5kZXNjcmlwdGlvbikudG9CZShcIlJlc2VydmVkIGZvciB3ZWIgc2VydmVyc1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGF1dG8tY2FsY3VsYXRlIElQIGNvdW50IHdoZW4gbm90IHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5jYWxjdWxhdGVkQWRkcmVzc0NvdW50KS50b0JlKDI1Nik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgbXVsdGlwbGUgc3RhdGljIENJRFJzIGluIHNhbWUgcG9vbFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaWRyMSA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiU3RhdGljQ2lkcjFcIiwge1xuICAgICAgICBuYW1lOiBcImNpZHItMVwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjEuMC4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNpZHIyID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJTdGF0aWNDaWRyMlwiLCB7XG4gICAgICAgIG5hbWU6IFwiY2lkci0yXCIsXG4gICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMi4wLjAvMjRcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGNpZHIxLnByb3BzLm5hbWUpLnRvQmUoXCJjaWRyLTFcIik7XG4gICAgICBleHBlY3QoY2lkcjIucHJvcHMubmFtZSkudG9CZShcImNpZHItMlwiKTtcbiAgICAgIGV4cGVjdChjaWRyMS5hZGRyZXNzUHJlZml4ZXMpLnRvRXF1YWwoW1wiMTAuMS4wLjAvMjRcIl0pO1xuICAgICAgZXhwZWN0KGNpZHIyLmFkZHJlc3NQcmVmaXhlcykudG9FcXVhbChbXCIxMC4yLjAuMC8yNFwiXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiQ0lEUiBWYWxpZGF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBDSURSIGZvcm1hdFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjAuMC8zM1wiXSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KC9JbnZhbGlkIGFkZHJlc3MgcHJlZml4L2kpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgdGhyb3cgZXJyb3IgZm9yIG1pc3NpbmcgQ0lEUiBwcmVmaXhcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJUZXN0U3RhdGljQ2lkclwiLCB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4wLjBcIl0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygvSW52YWxpZCBhZGRyZXNzIHByZWZpeC9pKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIG9jdGV0c1wiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIyNTYuMC4wLjAvMjRcIl0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygvSW52YWxpZCBhZGRyZXNzIHByZWZpeC9pKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHRocm93IGVycm9yIGZvciBlbXB0eSBhZGRyZXNzIHByZWZpeFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCJcIl0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygvQWRkcmVzcyBwcmVmaXggaXMgcmVxdWlyZWQvaSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBhY2NlcHQgdmFsaWQgQ0lEUiB3aXRoIGRpZmZlcmVudCBwcmVmaXggbGVuZ3Roc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaWRyMTYgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIkNpZHIxNlwiLCB7XG4gICAgICAgIG5hbWU6IFwiY2lkci0xNlwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjEuMC4wLzE2XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNpZHIyNCA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiQ2lkcjI0XCIsIHtcbiAgICAgICAgbmFtZTogXCJjaWRyLTI0XCIsXG4gICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMi4wLjAvMjRcIl0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2lkcjMyID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJDaWRyMzJcIiwge1xuICAgICAgICBuYW1lOiBcImNpZHItMzJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4zLjAuMS8zMlwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoY2lkcjE2LmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoNjU1MzYpO1xuICAgICAgZXhwZWN0KGNpZHIyNC5jYWxjdWxhdGVkQWRkcmVzc0NvdW50KS50b0JlKDI1Nik7XG4gICAgICBleHBlY3QoY2lkcjMyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiSVAgQWRkcmVzcyBDb3VudCBDYWxjdWxhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY2FsY3VsYXRlIGNvcnJlY3QgY291bnQgZm9yIC8yNCBDSURSXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5jYWxjdWxhdGVkQWRkcmVzc0NvdW50KS50b0JlKDI1Nik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjYWxjdWxhdGUgY29ycmVjdCBjb3VudCBmb3IgLzE2IENJRFJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjEuMC4wLzE2XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoNjU1MzYpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY2FsY3VsYXRlIGNvcnJlY3QgY291bnQgZm9yIC84IENJRFJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMC4wLzhcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHN0YXRpY0NpZHIuY2FsY3VsYXRlZEFkZHJlc3NDb3VudCkudG9CZSgxNjc3NzIxNik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjYWxjdWxhdGUgY29ycmVjdCBjb3VudCBmb3IgLzMyIENJRFJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMC4xLzMyXCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjYWxjdWxhdGUgY29ycmVjdCBjb3VudCBmb3IgLzI5IENJRFJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMC4wLzI5XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoOCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUGFyZW50LUNoaWxkIFJlbGF0aW9uc2hpcFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IHJlc29sdmUgcGFyZW50IHBvb2wgSURcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLnByb3BzLmlwYW1Qb29sSWQpLnRvQmUocG9vbC5pZCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgc3RhdGljIENJRFIgd2l0aCBkaXJlY3QgcG9vbCBJRCByZWZlcmVuY2VcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9vbElkID1cbiAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy90ZXN0L3Jlc291cmNlR3JvdXBzL3JnL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrTWFuYWdlcnMvdm5tL2lwYW1Qb29scy90ZXN0LXBvb2xcIjtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbElkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLnByb3BzLmlwYW1Qb29sSWQpLnRvQmUocG9vbElkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJUZXJyYWZvcm0gT3V0cHV0c1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIHByb3BlciBUZXJyYWZvcm0gb3V0cHV0c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0aWNDaWRyID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJUZXN0U3RhdGljQ2lkclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1jaWRyXCIsXG4gICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4xLjAvMjRcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHN0YXRpY0NpZHIuaWRPdXRwdXQpLnRvQmVJbnN0YW5jZU9mKGNka3RmLlRlcnJhZm9ybU91dHB1dCk7XG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5uYW1lT3V0cHV0KS50b0JlSW5zdGFuY2VPZihjZGt0Zi5UZXJyYWZvcm1PdXRwdXQpO1xuICAgICAgZXhwZWN0KHN0YXRpY0NpZHIuYWRkcmVzc1ByZWZpeE91dHB1dCkudG9CZUluc3RhbmNlT2YoXG4gICAgICAgIGNka3RmLlRlcnJhZm9ybU91dHB1dCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYXZlIGNvcnJlY3Qgb3V0cHV0IGxvZ2ljYWwgSURzXCIsICgpID0+IHtcbiAgICAgIG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBjb25zdCBzdGFja0NvbmZpZyA9IEpTT04ucGFyc2Uoc3ludGhlc2l6ZWQpO1xuICAgICAgZXhwZWN0KHN0YWNrQ29uZmlnLm91dHB1dCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChzdGFja0NvbmZpZy5vdXRwdXQuaWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3Qoc3RhY2tDb25maWcub3V0cHV0Lm5hbWUpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3Qoc3RhY2tDb25maWcub3V0cHV0LmFkZHJlc3NQcmVmaXhlcykudG9CZURlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJBUEkgVmVyc2lvbiBIYW5kbGluZ1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgdXNlIGRlZmF1bHQgQVBJIHZlcnNpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjQtMDUtMDFcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB1c2Ugc3BlY2lmaWVkIEFQSSB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIzLTExLTAxXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHN0YXRpY0NpZHIucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyMy0xMS0wMVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgY29ycmVjdCByZXNvdXJjZSB0eXBlXCIsICgpID0+IHtcbiAgICAgIG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5zdHJpbmdpZnkoVGVzdGluZy5zeW50aChzdGFjaykpO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0KS50b0NvbnRhaW4oXG4gICAgICAgIFwiTWljcm9zb2Z0Lk5ldHdvcmsvbmV0d29ya01hbmFnZXJzL2lwYW1Qb29scy9zdGF0aWNDaWRyc0AyMDI0LTA1LTAxXCIsXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkhlbHBlciBQcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBleHBvc2UgYWRkcmVzc1ByZWZpeGVzIHByb3BlcnR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5hZGRyZXNzUHJlZml4ZXMpLnRvRXF1YWwoW1wiMTAuMC4xLjAvMjRcIl0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGF2ZSBwcm92aXNpb25pbmdTdGF0ZSBnZXR0ZXJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLnByb3Zpc2lvbmluZ1N0YXRlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBzdGF0aWNDaWRyLnByb3Zpc2lvbmluZ1N0YXRlKS50b0JlKFwic3RyaW5nXCIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkxpZmVjeWNsZSBNYW5hZ2VtZW50XCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBhcHBseSBpZ25vcmUgY2hhbmdlcyBmb3Igc3BlY2lmaWVkIGZpZWxkc1wiLCAoKSA9PiB7XG4gICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgICAgaWdub3JlQ2hhbmdlczogW1wiZGVzY3JpcHRpb25cIl0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnN0cmluZ2lmeShUZXN0aW5nLnN5bnRoKHN0YWNrKSk7XG4gICAgICBleHBlY3QobWFuaWZlc3QpLnRvQ29udGFpbihcImlnbm9yZV9jaGFuZ2VzXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgYXBwbHkgbXVsdGlwbGUgaWdub3JlIGNoYW5nZXNcIiwgKCkgPT4ge1xuICAgICAgbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJUZXN0U3RhdGljQ2lkclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1jaWRyXCIsXG4gICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4xLjAvMjRcIl0sXG4gICAgICAgIGlnbm9yZUNoYW5nZXM6IFtcImRlc2NyaXB0aW9uXCIsIFwibnVtYmVyT2ZJUEFkZHJlc3Nlc1wiXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04uc3RyaW5naWZ5KFRlc3Rpbmcuc3ludGgoc3RhY2spKTtcbiAgICAgIGV4cGVjdChtYW5pZmVzdCkudG9Db250YWluKFwiaWdub3JlX2NoYW5nZXNcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiVGVycmFmb3JtIFN5bnRoZXNpc1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgc3ludGhlc2l6ZSB2YWxpZCBUZXJyYWZvcm0gY29uZmlndXJhdGlvblwiLCAoKSA9PiB7XG4gICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGVzdCBDSURSXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3V0cHV0ID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaW5jbHVkZSBhZGRyZXNzIHByZWZpeCBpbiByZXNvdXJjZSBib2R5XCIsICgpID0+IHtcbiAgICAgIG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5zdHJpbmdpZnkoVGVzdGluZy5zeW50aChzdGFjaykpO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0KS50b0NvbnRhaW4oXCIxMC4wLjEuMC8yNFwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGluY2x1ZGUgb3B0aW9uYWwgcHJvcGVydGllcyB3aGVuIHNwZWNpZmllZFwiLCAoKSA9PiB7XG4gICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGVzdCBkZXNjcmlwdGlvblwiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5zdHJpbmdpZnkoVGVzdGluZy5zeW50aChzdGFjaykpO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0KS50b0NvbnRhaW4oXCJUZXN0IGRlc2NyaXB0aW9uXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbm90IGluY2x1ZGUgbG9jYXRpb24gaW4gcmVzb3VyY2UgYm9keVwiLCAoKSA9PiB7XG4gICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04uc3RyaW5naWZ5KFRlc3Rpbmcuc3ludGgoc3RhY2spKTtcbiAgICAgIC8vIENoaWxkIHJlc291cmNlcyBkb24ndCBoYXZlIGxvY2F0aW9uIGluIGJvZHlcbiAgICAgIGV4cGVjdChtYW5pZmVzdCkudG9Db250YWluKFwiYWRkcmVzc1ByZWZpeGVzXCIpO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0KS50b0NvbnRhaW4oXCIxMC4wLjEuMC8yNFwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCBpbmNsdWRlIHRhZ3MgaW4gcmVzb3VyY2UgYm9keVwiLCAoKSA9PiB7XG4gICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04uc3RyaW5naWZ5KFRlc3Rpbmcuc3ludGgoc3RhY2spKTtcbiAgICAgIC8vIENoaWxkIHJlc291cmNlcyBpbmhlcml0IHRhZ3MgZnJvbSBwYXJlbnQsIG5vdCBzcGVjaWZpZWQgaW4gYm9keVxuICAgICAgZXhwZWN0KG1hbmlmZXN0KS50b0NvbnRhaW4oXCJhZGRyZXNzUHJlZml4ZXNcIik7XG4gICAgICBleHBlY3QobWFuaWZlc3QpLnRvQ29udGFpbihcIjEwLjAuMS4wLzI0XCIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkVkZ2UgQ2FzZXNcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGhhbmRsZSAvMzIgcHJlZml4IChzaW5nbGUgSVApXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjAuMS8zMlwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5jYWxjdWxhdGVkQWRkcmVzc0NvdW50KS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIC84IHByZWZpeCAobGFyZ2UgYmxvY2spXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjAuMC84XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMTY3NzcyMTYpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIG1heGltdW0gdmFsaWQgbmFtZSBsZW5ndGhcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgbG9uZ05hbWUgPSBcImFcIi5yZXBlYXQoNjQpO1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBsb25nTmFtZSxcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5wcm9wcy5uYW1lKS50b0JlKGxvbmdOYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBwcml2YXRlIElQIHJhbmdlc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaWRyMSA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiQ2lkcjFcIiwge1xuICAgICAgICBuYW1lOiBcImNpZHItMVwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMC4wLzhcIl0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2lkcjIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIkNpZHIyXCIsIHtcbiAgICAgICAgbmFtZTogXCJjaWRyLTJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxNzIuMTYuMC4wLzEyXCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNpZHIzID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJDaWRyM1wiLCB7XG4gICAgICAgIG5hbWU6IFwiY2lkci0zXCIsXG4gICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTkyLjE2OC4wLjAvMTZcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGNpZHIxLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMTY3NzcyMTYpO1xuICAgICAgZXhwZWN0KGNpZHIyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMTA0ODU3Nik7XG4gICAgICBleHBlY3QoY2lkcjMuY2FsY3VsYXRlZEFkZHJlc3NDb3VudCkudG9CZSg2NTUzNik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiQ29tcGxleCBTY2VuYXJpb3NcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBtdWx0aXBsZSBzdGF0aWMgQ0lEUnMgd2l0aCBkaWZmZXJlbnQgc2l6ZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc21hbGwgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlNtYWxsQ2lkclwiLCB7XG4gICAgICAgIG5hbWU6IFwic21hbGwtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjEuMC4wLzI4XCJdLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJTbWFsbCBhbGxvY2F0aW9uXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbWVkaXVtID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJNZWRpdW1DaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJtZWRpdW0tY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjIuMC4wLzI0XCJdLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJNZWRpdW0gYWxsb2NhdGlvblwiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGxhcmdlID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJMYXJnZUNpZHJcIiwge1xuICAgICAgICBuYW1lOiBcImxhcmdlLWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4zLjAuMC8xNlwiXSxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiTGFyZ2UgYWxsb2NhdGlvblwiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzbWFsbC5jYWxjdWxhdGVkQWRkcmVzc0NvdW50KS50b0JlKDE2KTtcbiAgICAgIGV4cGVjdChtZWRpdW0uY2FsY3VsYXRlZEFkZHJlc3NDb3VudCkudG9CZSgyNTYpO1xuICAgICAgZXhwZWN0KGxhcmdlLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoNjU1MzYpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY2FsY3VsYXRlIElQIGNvdW50IGNvcnJlY3RseSBmb3Igc2luZ2xlIENJRFJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgd2l0aG91dENvdW50ID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJXaXRob3V0Q291bnRcIiwge1xuICAgICAgICBuYW1lOiBcIndpdGhvdXQtY291bnRcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4yLjAuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qod2l0aG91dENvdW50LmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMjU2KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS1wb29sLXN0YXRpYy1jaWRyLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtdmlydHVhbG5ldHdvcmttYW5hZ2VyL3Rlc3QvaXBhbS1wb29sLXN0YXRpYy1jaWRyLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7O0FBRUgsaUNBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQixnREFBNEM7QUFDNUMsd0VBQWtFO0FBQ2xFLDRFQUF1RTtBQUV2RSxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLElBQUksR0FBYyxDQUFDO0lBQ25CLElBQUksS0FBMkIsQ0FBQztJQUNoQyxJQUFJLE9BQThCLENBQUM7SUFDbkMsSUFBSSxJQUFjLENBQUM7SUFFbkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEIsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDcEQsT0FBTyxHQUFHLElBQUksK0NBQXFCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtZQUN4RCxJQUFJLEVBQUUsY0FBYztZQUNwQixRQUFRLEVBQUUsUUFBUTtZQUNsQixlQUFlLEVBQUUsdUNBQXVDO1lBQ3hELG9CQUFvQixFQUFFO2dCQUNwQixhQUFhLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQzthQUN2QztZQUNELDJCQUEyQixFQUFFLENBQUMsY0FBYyxDQUFDO1NBQzlDLENBQUMsQ0FBQztRQUNILElBQUksR0FBRyxJQUFJLG9CQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRTtZQUNyQyxJQUFJLEVBQUUsV0FBVztZQUNqQixRQUFRLEVBQUUsUUFBUTtZQUNsQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUM1QixlQUFlLEVBQUUsQ0FBQyxZQUFZLENBQUM7U0FD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dCI6WyIvKipcbiAqIElQQU0gUG9vbCBTdGF0aWMgQ0lEUiBUZXN0c1xuICpcbiAqIFVuaXQgdGVzdHMgZm9yIHRoZSBJUEFNIFBvb2wgU3RhdGljIENJRFIgY29uc3RydWN0XG4gKi9cblxuaW1wb3J0IHsgVGVzdGluZyB9IGZyb20gXCJjZGt0blwiO1xuaW1wb3J0ICogYXMgY2RrdG4gZnJvbSBcImNka3RuXCI7XG5pbXBvcnQgeyBJcGFtUG9vbCB9IGZyb20gXCIuLi9saWIvaXBhbS1wb29sXCI7XG5pbXBvcnQgeyBJcGFtUG9vbFN0YXRpY0NpZHIgfSBmcm9tIFwiLi4vbGliL2lwYW0tcG9vbC1zdGF0aWMtY2lkclwiO1xuaW1wb3J0IHsgVmlydHVhbE5ldHdvcmtNYW5hZ2VyIH0gZnJvbSBcIi4uL2xpYi92aXJ0dWFsLW5ldHdvcmstbWFuYWdlclwiO1xuXG5kZXNjcmliZShcIklwYW1Qb29sU3RhdGljQ2lkclwiLCAoKSA9PiB7XG4gIGxldCBhcHA6IGNka3RuLkFwcDtcbiAgbGV0IHN0YWNrOiBjZGt0bi5UZXJyYWZvcm1TdGFjaztcbiAgbGV0IG1hbmFnZXI6IFZpcnR1YWxOZXR3b3JrTWFuYWdlcjtcbiAgbGV0IHBvb2w6IElwYW1Qb29sO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGFwcCA9IFRlc3RpbmcuYXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgY2RrdG4uVGVycmFmb3JtU3RhY2soYXBwLCBcInRlc3Qtc3RhY2tcIik7XG4gICAgbWFuYWdlciA9IG5ldyBWaXJ0dWFsTmV0d29ya01hbmFnZXIoc3RhY2ssIFwiVGVzdE1hbmFnZXJcIiwge1xuICAgICAgbmFtZTogXCJ0ZXN0LW1hbmFnZXJcIixcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgcmVzb3VyY2VHcm91cElkOiBcIi9zdWJzY3JpcHRpb25zL3Rlc3QvcmVzb3VyY2VHcm91cHMvcmdcIixcbiAgICAgIG5ldHdvcmtNYW5hZ2VyU2NvcGVzOiB7XG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IFtcIi9zdWJzY3JpcHRpb25zL3Rlc3RcIl0sXG4gICAgICB9LFxuICAgICAgbmV0d29ya01hbmFnZXJTY29wZUFjY2Vzc2VzOiBbXCJDb25uZWN0aXZpdHlcIl0sXG4gICAgfSk7XG4gICAgcG9vbCA9IG5ldyBJcGFtUG9vbChzdGFjaywgXCJUZXN0UG9vbFwiLCB7XG4gICAgICBuYW1lOiBcInRlc3QtcG9vbFwiLFxuICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICBuZXR3b3JrTWFuYWdlcklkOiBtYW5hZ2VyLmlkLFxuICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjAuMC84XCJdLFxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkJhc2ljIEluc3RhbnRpYXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBzdGF0aWMgQ0lEUiB3aXRoIHJlcXVpcmVkIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyKS50b0JlSW5zdGFuY2VPZihJcGFtUG9vbFN0YXRpY0NpZHIpO1xuICAgICAgZXhwZWN0KHN0YXRpY0NpZHIucHJvcHMuYWRkcmVzc1ByZWZpeGVzKS50b0VxdWFsKFtcIjEwLjAuMS4wLzI0XCJdKTtcbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLnByb3BzLm5hbWUpLnRvQmUoXCJ0ZXN0LWNpZHJcIik7XG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5hZGRyZXNzUHJlZml4ZXMpLnRvRXF1YWwoW1wiMTAuMC4xLjAvMjRcIl0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIHN0YXRpYyBDSURSIHdpdGggZGVzY3JpcHRpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJSZXNlcnZlZCBmb3Igd2ViIHNlcnZlcnNcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5wcm9wcy5kZXNjcmlwdGlvbikudG9CZShcIlJlc2VydmVkIGZvciB3ZWIgc2VydmVyc1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGF1dG8tY2FsY3VsYXRlIElQIGNvdW50IHdoZW4gbm90IHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5jYWxjdWxhdGVkQWRkcmVzc0NvdW50KS50b0JlKDI1Nik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgbXVsdGlwbGUgc3RhdGljIENJRFJzIGluIHNhbWUgcG9vbFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaWRyMSA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiU3RhdGljQ2lkcjFcIiwge1xuICAgICAgICBuYW1lOiBcImNpZHItMVwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjEuMC4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNpZHIyID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJTdGF0aWNDaWRyMlwiLCB7XG4gICAgICAgIG5hbWU6IFwiY2lkci0yXCIsXG4gICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMi4wLjAvMjRcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGNpZHIxLnByb3BzLm5hbWUpLnRvQmUoXCJjaWRyLTFcIik7XG4gICAgICBleHBlY3QoY2lkcjIucHJvcHMubmFtZSkudG9CZShcImNpZHItMlwiKTtcbiAgICAgIGV4cGVjdChjaWRyMS5hZGRyZXNzUHJlZml4ZXMpLnRvRXF1YWwoW1wiMTAuMS4wLjAvMjRcIl0pO1xuICAgICAgZXhwZWN0KGNpZHIyLmFkZHJlc3NQcmVmaXhlcykudG9FcXVhbChbXCIxMC4yLjAuMC8yNFwiXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiQ0lEUiBWYWxpZGF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBDSURSIGZvcm1hdFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjAuMC8zM1wiXSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KC9JbnZhbGlkIGFkZHJlc3MgcHJlZml4L2kpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgdGhyb3cgZXJyb3IgZm9yIG1pc3NpbmcgQ0lEUiBwcmVmaXhcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJUZXN0U3RhdGljQ2lkclwiLCB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4wLjBcIl0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygvSW52YWxpZCBhZGRyZXNzIHByZWZpeC9pKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIG9jdGV0c1wiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIyNTYuMC4wLjAvMjRcIl0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygvSW52YWxpZCBhZGRyZXNzIHByZWZpeC9pKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHRocm93IGVycm9yIGZvciBlbXB0eSBhZGRyZXNzIHByZWZpeFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCJcIl0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygvQWRkcmVzcyBwcmVmaXggaXMgcmVxdWlyZWQvaSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBhY2NlcHQgdmFsaWQgQ0lEUiB3aXRoIGRpZmZlcmVudCBwcmVmaXggbGVuZ3Roc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaWRyMTYgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIkNpZHIxNlwiLCB7XG4gICAgICAgIG5hbWU6IFwiY2lkci0xNlwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjEuMC4wLzE2XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNpZHIyNCA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiQ2lkcjI0XCIsIHtcbiAgICAgICAgbmFtZTogXCJjaWRyLTI0XCIsXG4gICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMi4wLjAvMjRcIl0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2lkcjMyID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJDaWRyMzJcIiwge1xuICAgICAgICBuYW1lOiBcImNpZHItMzJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4zLjAuMS8zMlwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoY2lkcjE2LmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoNjU1MzYpO1xuICAgICAgZXhwZWN0KGNpZHIyNC5jYWxjdWxhdGVkQWRkcmVzc0NvdW50KS50b0JlKDI1Nik7XG4gICAgICBleHBlY3QoY2lkcjMyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiSVAgQWRkcmVzcyBDb3VudCBDYWxjdWxhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY2FsY3VsYXRlIGNvcnJlY3QgY291bnQgZm9yIC8yNCBDSURSXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5jYWxjdWxhdGVkQWRkcmVzc0NvdW50KS50b0JlKDI1Nik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjYWxjdWxhdGUgY29ycmVjdCBjb3VudCBmb3IgLzE2IENJRFJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjEuMC4wLzE2XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoNjU1MzYpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY2FsY3VsYXRlIGNvcnJlY3QgY291bnQgZm9yIC84IENJRFJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMC4wLzhcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHN0YXRpY0NpZHIuY2FsY3VsYXRlZEFkZHJlc3NDb3VudCkudG9CZSgxNjc3NzIxNik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjYWxjdWxhdGUgY29ycmVjdCBjb3VudCBmb3IgLzMyIENJRFJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMC4xLzMyXCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjYWxjdWxhdGUgY29ycmVjdCBjb3VudCBmb3IgLzI5IENJRFJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMC4wLzI5XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoOCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUGFyZW50LUNoaWxkIFJlbGF0aW9uc2hpcFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IHJlc29sdmUgcGFyZW50IHBvb2wgSURcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLnByb3BzLmlwYW1Qb29sSWQpLnRvQmUocG9vbC5pZCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgc3RhdGljIENJRFIgd2l0aCBkaXJlY3QgcG9vbCBJRCByZWZlcmVuY2VcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcG9vbElkID1cbiAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy90ZXN0L3Jlc291cmNlR3JvdXBzL3JnL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrTWFuYWdlcnMvdm5tL2lwYW1Qb29scy90ZXN0LXBvb2xcIjtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbElkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLnByb3BzLmlwYW1Qb29sSWQpLnRvQmUocG9vbElkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJUZXJyYWZvcm0gT3V0cHV0c1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIHByb3BlciBUZXJyYWZvcm0gb3V0cHV0c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0aWNDaWRyID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJUZXN0U3RhdGljQ2lkclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1jaWRyXCIsXG4gICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4xLjAvMjRcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHN0YXRpY0NpZHIuaWRPdXRwdXQpLnRvQmVJbnN0YW5jZU9mKGNka3RuLlRlcnJhZm9ybU91dHB1dCk7XG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5uYW1lT3V0cHV0KS50b0JlSW5zdGFuY2VPZihjZGt0bi5UZXJyYWZvcm1PdXRwdXQpO1xuICAgICAgZXhwZWN0KHN0YXRpY0NpZHIuYWRkcmVzc1ByZWZpeE91dHB1dCkudG9CZUluc3RhbmNlT2YoXG4gICAgICAgIGNka3RuLlRlcnJhZm9ybU91dHB1dCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYXZlIGNvcnJlY3Qgb3V0cHV0IGxvZ2ljYWwgSURzXCIsICgpID0+IHtcbiAgICAgIG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBjb25zdCBzdGFja0NvbmZpZyA9IEpTT04ucGFyc2Uoc3ludGhlc2l6ZWQpO1xuICAgICAgZXhwZWN0KHN0YWNrQ29uZmlnLm91dHB1dCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChzdGFja0NvbmZpZy5vdXRwdXQuaWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3Qoc3RhY2tDb25maWcub3V0cHV0Lm5hbWUpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3Qoc3RhY2tDb25maWcub3V0cHV0LmFkZHJlc3NQcmVmaXhlcykudG9CZURlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJBUEkgVmVyc2lvbiBIYW5kbGluZ1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgdXNlIGRlZmF1bHQgQVBJIHZlcnNpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjQtMDUtMDFcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB1c2Ugc3BlY2lmaWVkIEFQSSB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIzLTExLTAxXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHN0YXRpY0NpZHIucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyMy0xMS0wMVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgY29ycmVjdCByZXNvdXJjZSB0eXBlXCIsICgpID0+IHtcbiAgICAgIG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5zdHJpbmdpZnkoVGVzdGluZy5zeW50aChzdGFjaykpO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0KS50b0NvbnRhaW4oXG4gICAgICAgIFwiTWljcm9zb2Z0Lk5ldHdvcmsvbmV0d29ya01hbmFnZXJzL2lwYW1Qb29scy9zdGF0aWNDaWRyc0AyMDI0LTA1LTAxXCIsXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkhlbHBlciBQcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBleHBvc2UgYWRkcmVzc1ByZWZpeGVzIHByb3BlcnR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5hZGRyZXNzUHJlZml4ZXMpLnRvRXF1YWwoW1wiMTAuMC4xLjAvMjRcIl0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGF2ZSBwcm92aXNpb25pbmdTdGF0ZSBnZXR0ZXJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLnByb3Zpc2lvbmluZ1N0YXRlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBzdGF0aWNDaWRyLnByb3Zpc2lvbmluZ1N0YXRlKS50b0JlKFwic3RyaW5nXCIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkxpZmVjeWNsZSBNYW5hZ2VtZW50XCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBhcHBseSBpZ25vcmUgY2hhbmdlcyBmb3Igc3BlY2lmaWVkIGZpZWxkc1wiLCAoKSA9PiB7XG4gICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgICAgaWdub3JlQ2hhbmdlczogW1wiZGVzY3JpcHRpb25cIl0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnN0cmluZ2lmeShUZXN0aW5nLnN5bnRoKHN0YWNrKSk7XG4gICAgICBleHBlY3QobWFuaWZlc3QpLnRvQ29udGFpbihcImlnbm9yZV9jaGFuZ2VzXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgYXBwbHkgbXVsdGlwbGUgaWdub3JlIGNoYW5nZXNcIiwgKCkgPT4ge1xuICAgICAgbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJUZXN0U3RhdGljQ2lkclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1jaWRyXCIsXG4gICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTAuMC4xLjAvMjRcIl0sXG4gICAgICAgIGlnbm9yZUNoYW5nZXM6IFtcImRlc2NyaXB0aW9uXCIsIFwibnVtYmVyT2ZJUEFkZHJlc3Nlc1wiXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04uc3RyaW5naWZ5KFRlc3Rpbmcuc3ludGgoc3RhY2spKTtcbiAgICAgIGV4cGVjdChtYW5pZmVzdCkudG9Db250YWluKFwiaWdub3JlX2NoYW5nZXNcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiVGVycmFmb3JtIFN5bnRoZXNpc1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgc3ludGhlc2l6ZSB2YWxpZCBUZXJyYWZvcm0gY29uZmlndXJhdGlvblwiLCAoKSA9PiB7XG4gICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGVzdCBDSURSXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3V0cHV0ID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaW5jbHVkZSBhZGRyZXNzIHByZWZpeCBpbiByZXNvdXJjZSBib2R5XCIsICgpID0+IHtcbiAgICAgIG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMS4wLzI0XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5zdHJpbmdpZnkoVGVzdGluZy5zeW50aChzdGFjaykpO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0KS50b0NvbnRhaW4oXCIxMC4wLjEuMC8yNFwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGluY2x1ZGUgb3B0aW9uYWwgcHJvcGVydGllcyB3aGVuIHNwZWNpZmllZFwiLCAoKSA9PiB7XG4gICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGVzdCBkZXNjcmlwdGlvblwiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5zdHJpbmdpZnkoVGVzdGluZy5zeW50aChzdGFjaykpO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0KS50b0NvbnRhaW4oXCJUZXN0IGRlc2NyaXB0aW9uXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbm90IGluY2x1ZGUgbG9jYXRpb24gaW4gcmVzb3VyY2UgYm9keVwiLCAoKSA9PiB7XG4gICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04uc3RyaW5naWZ5KFRlc3Rpbmcuc3ludGgoc3RhY2spKTtcbiAgICAgIC8vIENoaWxkIHJlc291cmNlcyBkb24ndCBoYXZlIGxvY2F0aW9uIGluIGJvZHlcbiAgICAgIGV4cGVjdChtYW5pZmVzdCkudG9Db250YWluKFwiYWRkcmVzc1ByZWZpeGVzXCIpO1xuICAgICAgZXhwZWN0KG1hbmlmZXN0KS50b0NvbnRhaW4oXCIxMC4wLjEuMC8yNFwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCBpbmNsdWRlIHRhZ3MgaW4gcmVzb3VyY2UgYm9keVwiLCAoKSA9PiB7XG4gICAgICBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04uc3RyaW5naWZ5KFRlc3Rpbmcuc3ludGgoc3RhY2spKTtcbiAgICAgIC8vIENoaWxkIHJlc291cmNlcyBpbmhlcml0IHRhZ3MgZnJvbSBwYXJlbnQsIG5vdCBzcGVjaWZpZWQgaW4gYm9keVxuICAgICAgZXhwZWN0KG1hbmlmZXN0KS50b0NvbnRhaW4oXCJhZGRyZXNzUHJlZml4ZXNcIik7XG4gICAgICBleHBlY3QobWFuaWZlc3QpLnRvQ29udGFpbihcIjEwLjAuMS4wLzI0XCIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkVkZ2UgQ2FzZXNcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGhhbmRsZSAvMzIgcHJlZml4IChzaW5nbGUgSVApXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjAuMS8zMlwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5jYWxjdWxhdGVkQWRkcmVzc0NvdW50KS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIC84IHByZWZpeCAobGFyZ2UgYmxvY2spXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRpY0NpZHIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlRlc3RTdGF0aWNDaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjAuMC84XCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0aWNDaWRyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMTY3NzcyMTYpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIG1heGltdW0gdmFsaWQgbmFtZSBsZW5ndGhcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgbG9uZ05hbWUgPSBcImFcIi5yZXBlYXQoNjQpO1xuICAgICAgY29uc3Qgc3RhdGljQ2lkciA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiVGVzdFN0YXRpY0NpZHJcIiwge1xuICAgICAgICBuYW1lOiBsb25nTmFtZSxcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4wLjEuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGljQ2lkci5wcm9wcy5uYW1lKS50b0JlKGxvbmdOYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBwcml2YXRlIElQIHJhbmdlc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaWRyMSA9IG5ldyBJcGFtUG9vbFN0YXRpY0NpZHIoc3RhY2ssIFwiQ2lkcjFcIiwge1xuICAgICAgICBuYW1lOiBcImNpZHItMVwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjAuMC4wLzhcIl0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2lkcjIgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIkNpZHIyXCIsIHtcbiAgICAgICAgbmFtZTogXCJjaWRyLTJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxNzIuMTYuMC4wLzEyXCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNpZHIzID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJDaWRyM1wiLCB7XG4gICAgICAgIG5hbWU6IFwiY2lkci0zXCIsXG4gICAgICAgIGlwYW1Qb29sSWQ6IHBvb2wuaWQsXG4gICAgICAgIGFkZHJlc3NQcmVmaXhlczogW1wiMTkyLjE2OC4wLjAvMTZcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGNpZHIxLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMTY3NzcyMTYpO1xuICAgICAgZXhwZWN0KGNpZHIyLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMTA0ODU3Nik7XG4gICAgICBleHBlY3QoY2lkcjMuY2FsY3VsYXRlZEFkZHJlc3NDb3VudCkudG9CZSg2NTUzNik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiQ29tcGxleCBTY2VuYXJpb3NcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBtdWx0aXBsZSBzdGF0aWMgQ0lEUnMgd2l0aCBkaWZmZXJlbnQgc2l6ZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc21hbGwgPSBuZXcgSXBhbVBvb2xTdGF0aWNDaWRyKHN0YWNrLCBcIlNtYWxsQ2lkclwiLCB7XG4gICAgICAgIG5hbWU6IFwic21hbGwtY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjEuMC4wLzI4XCJdLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJTbWFsbCBhbGxvY2F0aW9uXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbWVkaXVtID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJNZWRpdW1DaWRyXCIsIHtcbiAgICAgICAgbmFtZTogXCJtZWRpdW0tY2lkclwiLFxuICAgICAgICBpcGFtUG9vbElkOiBwb29sLmlkLFxuICAgICAgICBhZGRyZXNzUHJlZml4ZXM6IFtcIjEwLjIuMC4wLzI0XCJdLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJNZWRpdW0gYWxsb2NhdGlvblwiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGxhcmdlID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJMYXJnZUNpZHJcIiwge1xuICAgICAgICBuYW1lOiBcImxhcmdlLWNpZHJcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4zLjAuMC8xNlwiXSxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiTGFyZ2UgYWxsb2NhdGlvblwiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzbWFsbC5jYWxjdWxhdGVkQWRkcmVzc0NvdW50KS50b0JlKDE2KTtcbiAgICAgIGV4cGVjdChtZWRpdW0uY2FsY3VsYXRlZEFkZHJlc3NDb3VudCkudG9CZSgyNTYpO1xuICAgICAgZXhwZWN0KGxhcmdlLmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoNjU1MzYpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY2FsY3VsYXRlIElQIGNvdW50IGNvcnJlY3RseSBmb3Igc2luZ2xlIENJRFJcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgd2l0aG91dENvdW50ID0gbmV3IElwYW1Qb29sU3RhdGljQ2lkcihzdGFjaywgXCJXaXRob3V0Q291bnRcIiwge1xuICAgICAgICBuYW1lOiBcIndpdGhvdXQtY291bnRcIixcbiAgICAgICAgaXBhbVBvb2xJZDogcG9vbC5pZCxcbiAgICAgICAgYWRkcmVzc1ByZWZpeGVzOiBbXCIxMC4yLjAuMC8yNFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qod2l0aG91dENvdW50LmNhbGN1bGF0ZWRBZGRyZXNzQ291bnQpLnRvQmUoMjU2KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==