cdktn 0.23.1 → 0.23.2

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 (125) hide show
  1. package/.jsii +1560 -1559
  2. package/.spec.swcrc +22 -0
  3. package/jest.config.js +18 -15
  4. package/lib/_tokens.js +1 -1
  5. package/lib/annotations.js +2 -2
  6. package/lib/app.js +2 -2
  7. package/lib/aspect.js +2 -2
  8. package/lib/backends/azurerm-backend.js +3 -3
  9. package/lib/backends/cloud-backend.js +5 -5
  10. package/lib/backends/consul-backend.js +3 -3
  11. package/lib/backends/cos-backend.js +3 -3
  12. package/lib/backends/gcs-backend.js +3 -3
  13. package/lib/backends/http-backend.js +3 -3
  14. package/lib/backends/index.js +1 -1
  15. package/lib/backends/local-backend.js +3 -3
  16. package/lib/backends/oss-backend.js +3 -3
  17. package/lib/backends/pg-backend.js +3 -3
  18. package/lib/backends/remote-backend.js +5 -5
  19. package/lib/backends/s3-backend.js +3 -3
  20. package/lib/backends/swift-backend.js +3 -3
  21. package/lib/complex-computed-list.js +24 -24
  22. package/lib/errors.js +1 -1
  23. package/lib/features.js +1 -1
  24. package/lib/functions/helpers.js +1 -1
  25. package/lib/functions/terraform-functions.generated.js +2 -2
  26. package/lib/hcl/render.js +1 -1
  27. package/lib/importable-resource.js +2 -2
  28. package/lib/index.js +1 -1
  29. package/lib/manifest.js +2 -2
  30. package/lib/private/fs.d.ts +20 -5
  31. package/lib/private/fs.js +43 -69
  32. package/lib/private/unique.js +1 -1
  33. package/lib/resource.js +2 -2
  34. package/lib/runtime.js +1 -1
  35. package/lib/synthesize/index.js +1 -1
  36. package/lib/synthesize/synthesizer.js +1 -1
  37. package/lib/synthesize/types.js +1 -1
  38. package/lib/terraform-addressable.js +1 -1
  39. package/lib/terraform-asset.js +2 -2
  40. package/lib/terraform-backend.js +2 -2
  41. package/lib/terraform-conditions.js +1 -1
  42. package/lib/terraform-count.js +2 -2
  43. package/lib/terraform-data-resource.js +2 -2
  44. package/lib/terraform-data-source.js +2 -2
  45. package/lib/terraform-dependable.js +1 -1
  46. package/lib/terraform-dynamic-block.js +1 -1
  47. package/lib/terraform-dynamic-expression.js +1 -1
  48. package/lib/terraform-element.js +2 -2
  49. package/lib/terraform-functions.js +2 -2
  50. package/lib/terraform-hcl-module.js +2 -2
  51. package/lib/terraform-iterator.js +6 -6
  52. package/lib/terraform-local.js +2 -2
  53. package/lib/terraform-module-asset.js +1 -1
  54. package/lib/terraform-module.js +2 -2
  55. package/lib/terraform-operators.js +2 -2
  56. package/lib/terraform-output.js +2 -2
  57. package/lib/terraform-provider.js +2 -2
  58. package/lib/terraform-provisioner.js +2 -2
  59. package/lib/terraform-remote-state.js +2 -2
  60. package/lib/terraform-resource-targets.js +2 -2
  61. package/lib/terraform-resource.js +2 -2
  62. package/lib/terraform-stack.js +2 -2
  63. package/lib/terraform-variable.js +3 -3
  64. package/lib/testing/adapters/jest.js +1 -1
  65. package/lib/testing/index.js +2 -2
  66. package/lib/testing/matchers.js +2 -2
  67. package/lib/tfExpression.js +1 -1
  68. package/lib/tokens/index.js +1 -1
  69. package/lib/tokens/lazy.js +3 -3
  70. package/lib/tokens/private/dependency.js +1 -1
  71. package/lib/tokens/private/encoding.js +1 -1
  72. package/lib/tokens/private/intrinsic.js +1 -1
  73. package/lib/tokens/private/resolve.js +1 -1
  74. package/lib/tokens/private/stack-trace.js +1 -1
  75. package/lib/tokens/private/token-map.js +1 -1
  76. package/lib/tokens/private/uniqueid.js +1 -1
  77. package/lib/tokens/resolvable.js +3 -3
  78. package/lib/tokens/string-fragments.js +2 -2
  79. package/lib/tokens/token.js +3 -3
  80. package/lib/tsconfig.tsbuildinfo +1 -0
  81. package/lib/upgrade-id-aspect.js +2 -2
  82. package/lib/util.js +1 -1
  83. package/lib/validateEnvironment.js +1 -1
  84. package/lib/validations/index.js +1 -1
  85. package/lib/validations/validate-binary-version.js +1 -1
  86. package/lib/validations/validate-provider-presence.js +1 -1
  87. package/lib/validations/validate-terraform-version.js +1 -1
  88. package/node_modules/fflate/CHANGELOG.md +115 -0
  89. package/node_modules/{yazl → fflate}/LICENSE +3 -3
  90. package/node_modules/fflate/README.md +558 -0
  91. package/node_modules/fflate/esm/browser.d.ts +1501 -0
  92. package/node_modules/fflate/esm/browser.js +2665 -0
  93. package/node_modules/fflate/esm/index.d.mts +1501 -0
  94. package/node_modules/fflate/esm/index.mjs +2679 -0
  95. package/node_modules/fflate/lib/browser.cjs +2688 -0
  96. package/node_modules/fflate/lib/browser.d.cts +1501 -0
  97. package/node_modules/fflate/lib/index.cjs +2668 -0
  98. package/node_modules/fflate/lib/index.d.ts +1501 -0
  99. package/node_modules/fflate/lib/node-worker.cjs +32 -0
  100. package/node_modules/fflate/lib/node.cjs +2700 -0
  101. package/node_modules/fflate/lib/node.d.cts +1501 -0
  102. package/node_modules/fflate/lib/worker.cjs +20 -0
  103. package/node_modules/fflate/package.json +127 -0
  104. package/node_modules/fflate/umd/index.js +1 -0
  105. package/package.json +17 -10
  106. package/tsconfig.json +6 -3
  107. package/tsconfig.test.json +12 -0
  108. package/lib/testing/__tests__/matchers.test.d.ts +0 -1
  109. package/lib/testing/__tests__/matchers.test.js +0 -205
  110. package/lib/testing/adapters/__tests__/index.test.d.ts +0 -1
  111. package/lib/testing/adapters/__tests__/index.test.js +0 -67
  112. package/lib/testing/adapters/__tests__/jest.test.d.ts +0 -1
  113. package/lib/testing/adapters/__tests__/jest.test.js +0 -41
  114. package/node_modules/buffer-crc32/LICENSE +0 -19
  115. package/node_modules/buffer-crc32/README.md +0 -55
  116. package/node_modules/buffer-crc32/dist/index.cjs +0 -306
  117. package/node_modules/buffer-crc32/dist/index.d.cts +0 -35
  118. package/node_modules/buffer-crc32/dist/index.d.mts +0 -35
  119. package/node_modules/buffer-crc32/dist/index.mjs +0 -304
  120. package/node_modules/buffer-crc32/index.d.ts +0 -35
  121. package/node_modules/buffer-crc32/package.json +0 -54
  122. package/node_modules/yazl/README.md +0 -457
  123. package/node_modules/yazl/index.js +0 -826
  124. package/node_modules/yazl/package.json +0 -34
  125. package/tsconfig.tsbuildinfo +0 -1
package/lib/features.js CHANGED
@@ -32,4 +32,4 @@ exports.FAIL_ON_CONSTRUCTS_OUTSIDE_OF_STACKS = "failOnConstructsOutsideOfStacks"
32
32
  exports.FUTURE_FLAGS = {
33
33
  [exports.FAIL_ON_CONSTRUCTS_OUTSIDE_OF_STACKS]: "true",
34
34
  };
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmZWF0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxtRkFBbUY7QUFDbkYsdUVBQXVFO0FBQ3ZFLDZFQUE2RTtBQUM3RSxnRkFBZ0Y7QUFDaEYsMEVBQTBFO0FBQzFFLHVGQUF1RjtBQUN2Rix3REFBd0Q7QUFDeEQsbUZBQW1GOzs7QUFFbkY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0g7OztHQUdHO0FBQ1UsUUFBQSxvQ0FBb0MsR0FDL0MsaUNBQWlDLENBQUM7QUFFdkIsUUFBQSxZQUFZLEdBQUc7SUFDMUIsQ0FBQyw0Q0FBb0MsQ0FBQyxFQUFFLE1BQU07Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhpcyBmaWxlIGRlZmluZXMgY29udGV4dCBrZXlzIHRoYXQgZW5hYmxlIGNlcnRhaW4gZmVhdHVyZXMgdGhhdCBhcmVcbi8vIGltcGxlbWVudGVkIGJlaGluZCBhIGZsYWcgaW4gb3JkZXIgdG8gcHJlc2VydmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yXG4vLyBleGlzdGluZyBhcHBzLiBXaGVuIGEgbmV3IGFwcCBpcyBpbml0aWFsaXplZCB0aHJvdWdoIGBjZGsgaW5pdGAsIHRoZSBDTEkgd2lsbFxuLy8gYXV0b21hdGljYWxseSBhZGQgZW5hYmxlIHRoZXNlIGZlYXR1cmVzIGJ5IGFkZGluZyB0aGVtIHRvIHRoZSBnZW5lcmF0ZWRcbi8vIGBjZGt0Zi5qc29uYCBmaWxlLiBJbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlIG9mIHRoZSBDREsgVGVycmFpbiwgdGhlc2UgZmVhdHVyZSBmbGFnc1xuLy8gd2lsbCBiZSByZW1vdmVkIGFuZCB3aWxsIGJlY29tZSB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogVGhpcyBtYXAgaW5jbHVkZXMgY29udGV4dCBrZXlzIGFuZCB2YWx1ZXMgZm9yIGZlYXR1cmUgZmxhZ3MgdGhhdCBlbmFibGVcbiAqIGNhcGFiaWxpdGllcyBcImZyb20gdGhlIGZ1dHVyZVwiLCB3aGljaCB3ZSBjb3VsZCBub3QgaW50cm9kdWNlIGFzIHRoZSBkZWZhdWx0XG4gKiBiZWhhdmlvciBkdWUgdG8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIGV4aXN0aW5nIHByb2plY3RzLlxuICpcbiAqIE5ldyBwcm9qZWN0cyBnZW5lcmF0ZWQgdGhyb3VnaCBgY2RrdG4gaW5pdGAgd2lsbCBpbmNsdWRlIHRoZXNlIGZsYWdzIGluIHRoZWlyXG4gKiBnZW5lcmF0ZWQgYGNka3RmLmpzb25gIGZpbGUuXG4gKlxuICogV2hlbiB3ZSByZWxlYXNlIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgdGhlIENESyBUZXJyYWluLCB3ZSB3aWxsIGZsaXAgdGhlIGxvZ2ljIG9mXG4gKiB0aGVzZSBmZWF0dXJlcyBhbmQgY2xlYW4gdXAgdGhlIGBjZGt0Zi5qc29uYCBnZW5lcmF0ZWQgYnkgYGNka3RuIGluaXRgLlxuICpcbiAqIFRlc3RzIG11c3QgY292ZXIgdGhlIGRlZmF1bHQgKGRpc2FibGVkKSBjYXNlIGFuZCB0aGUgZnV0dXJlIChlbmFibGVkKSBjYXNlLlxuICovXG4vKipcbiAqIFdoZW4gZW5hYmxlZCwgc3ludGhlc2lzIHdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgYW55IGNvbnN0cnVjdHMgYXJlIHNjb3BlZFxuICogZGlyZWN0bHkgdG8gdGhlIEFwcCBpbnN0ZWFkIG9mIHRvIGEgVGVycmFmb3JtU3RhY2suXG4gKi9cbmV4cG9ydCBjb25zdCBGQUlMX09OX0NPTlNUUlVDVFNfT1VUU0lERV9PRl9TVEFDS1MgPVxuICBcImZhaWxPbkNvbnN0cnVjdHNPdXRzaWRlT2ZTdGFja3NcIjtcblxuZXhwb3J0IGNvbnN0IEZVVFVSRV9GTEFHUyA9IHtcbiAgW0ZBSUxfT05fQ09OU1RSVUNUU19PVVRTSURFX09GX1NUQUNLU106IFwidHJ1ZVwiLFxufTtcbiJdfQ==
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZmVhdHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsbUZBQW1GO0FBQ25GLHVFQUF1RTtBQUN2RSw2RUFBNkU7QUFDN0UsZ0ZBQWdGO0FBQ2hGLDBFQUEwRTtBQUMxRSx1RkFBdUY7QUFDdkYsd0RBQXdEO0FBQ3hELG1GQUFtRjs7O0FBRW5GOzs7Ozs7Ozs7Ozs7R0FZRztBQUNIOzs7R0FHRztBQUNVLFFBQUEsb0NBQW9DLEdBQy9DLGlDQUFpQyxDQUFDO0FBRXZCLFFBQUEsWUFBWSxHQUFHO0lBQzFCLENBQUMsNENBQW9DLENBQUMsRUFBRSxNQUFNO0NBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoaXMgZmlsZSBkZWZpbmVzIGNvbnRleHQga2V5cyB0aGF0IGVuYWJsZSBjZXJ0YWluIGZlYXR1cmVzIHRoYXQgYXJlXG4vLyBpbXBsZW1lbnRlZCBiZWhpbmQgYSBmbGFnIGluIG9yZGVyIHRvIHByZXNlcnZlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvclxuLy8gZXhpc3RpbmcgYXBwcy4gV2hlbiBhIG5ldyBhcHAgaXMgaW5pdGlhbGl6ZWQgdGhyb3VnaCBgY2RrIGluaXRgLCB0aGUgQ0xJIHdpbGxcbi8vIGF1dG9tYXRpY2FsbHkgYWRkIGVuYWJsZSB0aGVzZSBmZWF0dXJlcyBieSBhZGRpbmcgdGhlbSB0byB0aGUgZ2VuZXJhdGVkXG4vLyBgY2RrdGYuanNvbmAgZmlsZS4gSW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiB0aGUgQ0RLIFRlcnJhaW4sIHRoZXNlIGZlYXR1cmUgZmxhZ3Ncbi8vIHdpbGwgYmUgcmVtb3ZlZCBhbmQgd2lsbCBiZWNvbWUgdGhlIGRlZmF1bHQgYmVoYXZpb3IuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFRoaXMgbWFwIGluY2x1ZGVzIGNvbnRleHQga2V5cyBhbmQgdmFsdWVzIGZvciBmZWF0dXJlIGZsYWdzIHRoYXQgZW5hYmxlXG4gKiBjYXBhYmlsaXRpZXMgXCJmcm9tIHRoZSBmdXR1cmVcIiwgd2hpY2ggd2UgY291bGQgbm90IGludHJvZHVjZSBhcyB0aGUgZGVmYXVsdFxuICogYmVoYXZpb3IgZHVlIHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBleGlzdGluZyBwcm9qZWN0cy5cbiAqXG4gKiBOZXcgcHJvamVjdHMgZ2VuZXJhdGVkIHRocm91Z2ggYGNka3RuIGluaXRgIHdpbGwgaW5jbHVkZSB0aGVzZSBmbGFncyBpbiB0aGVpclxuICogZ2VuZXJhdGVkIGBjZGt0Zi5qc29uYCBmaWxlLlxuICpcbiAqIFdoZW4gd2UgcmVsZWFzZSB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIHRoZSBDREsgVGVycmFpbiwgd2Ugd2lsbCBmbGlwIHRoZSBsb2dpYyBvZlxuICogdGhlc2UgZmVhdHVyZXMgYW5kIGNsZWFuIHVwIHRoZSBgY2RrdGYuanNvbmAgZ2VuZXJhdGVkIGJ5IGBjZGt0biBpbml0YC5cbiAqXG4gKiBUZXN0cyBtdXN0IGNvdmVyIHRoZSBkZWZhdWx0IChkaXNhYmxlZCkgY2FzZSBhbmQgdGhlIGZ1dHVyZSAoZW5hYmxlZCkgY2FzZS5cbiAqL1xuLyoqXG4gKiBXaGVuIGVuYWJsZWQsIHN5bnRoZXNpcyB3aWxsIHRocm93IGFuIGVycm9yIGlmIGFueSBjb25zdHJ1Y3RzIGFyZSBzY29wZWRcbiAqIGRpcmVjdGx5IHRvIHRoZSBBcHAgaW5zdGVhZCBvZiB0byBhIFRlcnJhZm9ybVN0YWNrLlxuICovXG5leHBvcnQgY29uc3QgRkFJTF9PTl9DT05TVFJVQ1RTX09VVFNJREVfT0ZfU1RBQ0tTID1cbiAgXCJmYWlsT25Db25zdHJ1Y3RzT3V0c2lkZU9mU3RhY2tzXCI7XG5cbmV4cG9ydCBjb25zdCBGVVRVUkVfRkxBR1MgPSB7XG4gIFtGQUlMX09OX0NPTlNUUlVDVFNfT1VUU0lERV9PRl9TVEFDS1NdOiBcInRydWVcIixcbn07XG4iXX0=
@@ -157,4 +157,4 @@ function terraformFunction(name, argValidators) {
157
157
  }, []));
158
158
  };
159
159
  }
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErQkEsNEJBRUM7QUFHRCw0QkFFQztBQUdELGtDQVVDO0FBR0Qsb0NBS0M7QUFHRCx3QkFpREM7QUFHRCw0QkFLQztBQUlELDRCQUVDO0FBR0QsNEJBRUM7QUFHRCx3QkFFQztBQUdELGtDQUVDO0FBR0QsOEJBRUM7QUFHRCxzQkFPQztBQUdELDhDQTJCQztBQXpMRCwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDJDQUFzRDtBQUN0RCxrREFBdUM7QUFFdkMseURBQTZFO0FBQzdFLHNDQU9tQjtBQU9uQjs7OztHQUlHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxHQUFXO0lBQzNDLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxhQUFhO0FBQ2IsK0NBQStDO0FBQy9DLFNBQWdCLFFBQVEsQ0FBSSxLQUFRO0lBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNuQixDQUFDO0FBRUQsK0NBQStDO0FBQy9DLFNBQWdCLFFBQVEsQ0FBSSxLQUFRO0lBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNuQixDQUFDO0FBRUQsK0NBQStDO0FBQy9DLFNBQWdCLFdBQVcsQ0FBbUIsS0FBUTtJQUNwRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLG9CQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkUsTUFBTSxJQUFBLG9DQUEyQixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pFLE1BQU0sSUFBQSxxQ0FBNEIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FB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LEVBQ3BCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUEsbUJBQUksRUFDVCxJQUFJO1FBQ0osZ0dBQWdHO1FBQ2hHLDBGQUEwRjtRQUMxRixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLEdBQUcsQ0FBQyxRQUFRO29CQUFFLE9BQU8sQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7b0JBQzdDLE9BQU8sQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFBLDBDQUFpQyxFQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDUCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBUb2tlbml6YXRpb24sIFRva2VuIH0gZnJvbSBcIi4uL3Rva2Vucy90b2tlblwiO1xuaW1wb3J0IHsgY2FsbCB9IGZyb20gXCIuLi90ZkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IElSZXNvbHZhYmxlIH0gZnJvbSBcIi4uL3Rva2Vucy9yZXNvbHZhYmxlXCI7XG5pbXBvcnQgeyBUb2tlblN0cmluZywgZXh0cmFjdFRva2VuRG91YmxlIH0gZnJvbSBcIi4uL3Rva2Vucy9wcml2YXRlL2VuY29kaW5nXCI7XG5pbXBvcnQge1xuICBmdW5jdGlvbkFyZ3VtZW50VmFsaWRhdGlvbkZhaWx1cmUsXG4gIGZ1bmN0aW9uUmVjZWl2ZWRXcm9uZ051bWJlck9mQXJncyxcbiAgbGlzdEVsZW1lbnRJc09mV3JvbmdUeXBlLFxuICB2YWx1ZUNvbnRhaW5zVW5lc2NhcGVkUXVvdGVzLFxuICB2YWx1ZUlzSW52YWxpZE51bWJlck9yVG9rZW4sXG4gIHZhbHVlSXNJbnZhbGlkU3RyaW5nT3JUb2tlbixcbn0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuXG50eXBlIFRGVmFsdWU8VD4gPSB7IHZhcmlhZGljPzogYm9vbGVhbjsgdmFsdWU6IFQgfTtcbnR5cGUgVEZWYWx1ZVZhbGlkYXRvcjxUPiA9ICh2YWx1ZTogVCkgPT4gVEZWYWx1ZTxUPjtcblxudHlwZSBFeGVjdXRhYmxlVGZGdW5jdGlvbiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gSVJlc29sdmFibGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBnaXZlbiBzdHIgaGFzIHVuZXNjYXBlZCBkb3VibGUgcXVvdGVzXG4gKiBAcGFyYW0gc3RyIFN0cmluZyB0byB0ZXN0XG4gKiBAcmV0dXJucyBCb29sZWFuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuZXNjYXBlZERvdWJsZVF1b3RlcyhzdHI6IHN0cmluZykge1xuICByZXR1cm4gLyhefFteXFxcXF0pKFtcXFxcXXsyfSkqXCIvLnRlc3Qoc3RyKTtcbn1cblxuLy8gVmFsaWRhdG9yc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBmdW5jdGlvbiBhbnlWYWx1ZTxUPih2YWx1ZTogVCk6IFRGVmFsdWU8VD4ge1xuICByZXR1cm4geyB2YWx1ZSB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFZhbHVlPFQ+KHZhbHVlOiBUKTogVEZWYWx1ZTxUPiB7XG4gIHJldHVybiB7IHZhbHVlIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVmFsdWU8VCBleHRlbmRzIHN0cmluZz4odmFsdWU6IFQpOiBURlZhbHVlPFQ+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiAmJiAhVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZSh2YWx1ZSkpIHtcbiAgICB0aHJvdyB2YWx1ZUlzSW52YWxpZFN0cmluZ09yVG9rZW4odmFsdWUpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBoYXNVbmVzY2FwZWREb3VibGVRdW90ZXModmFsdWUpKSB7XG4gICAgdGhyb3cgdmFsdWVDb250YWluc1VuZXNjYXBlZFF1b3Rlcyh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4geyB2YWx1ZSB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGZ1bmN0aW9uIG51bWVyaWNWYWx1ZTxUPih2YWx1ZTogVCk6IFRGVmFsdWU8VD4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiICYmICFUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgIHRocm93IHZhbHVlSXNJbnZhbGlkTnVtYmVyT3JUb2tlbih2YWx1ZSBhcyBzdHJpbmcpO1xuICB9XG4gIHJldHVybiB7IHZhbHVlIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gbGlzdE9mPFQ+KHR5cGU6IFRGVmFsdWVWYWxpZGF0b3I8VD4pOiBURlZhbHVlVmFsaWRhdG9yPFRbXT4ge1xuICByZXR1cm4gKHZhbHVlOiBhbnkpID0+IHtcbiAgICBpZiAoVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7IHZhbHVlIH07XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWV9IGlzIG5vdCBhIHZhbGlkIGxpc3RgKTtcbiAgICAgIHJldHVybiB7IHZhbHVlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSB1bmRlZmluZWQgJiYgaXRlbSAhPT0gbnVsbClcbiAgICAgICAgLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgIGlmIChUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoVG9rZW5TdHJpbmcuZm9yTGlzdFRva2VuKGl0ZW0pLnRlc3QoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV4dHJhY3RUb2tlbkRvdWJsZShpdGVtLCB0cnVlKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoVG9rZW5TdHJpbmcuZm9yTWFwVG9rZW4oaXRlbSkudGVzdCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuTGlzdCA9IFRva2VuaXphdGlvbi5yZXZlcnNlU3RyaW5nKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyT2ZUb2tlbnMgPVxuICAgICAgICAgICAgICB0b2tlbkxpc3QudG9rZW5zLmxlbmd0aCArIHRva2VuTGlzdC5pbnRyaW5zaWMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG51bWJlck9mVG9rZW5zID09PSAxICYmIHRva2VuTGlzdC5saXRlcmFscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHR5cGUoaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgPyBgXCIke2l0ZW19XCJgIDogaXRlbTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbGlzdEVsZW1lbnRJc09mV3JvbmdUeXBlKHZhbHVlLCBpLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICB9O1xuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhZGljPFQ+KHR5cGU6IFRGVmFsdWVWYWxpZGF0b3I8VD4pOiBURlZhbHVlVmFsaWRhdG9yPFRbXT4ge1xuICByZXR1cm4gKHZhbHVlOiBhbnkpID0+IHtcbiAgICAvLyB3ZSB1c2UgdGhlIGxpc3QgdmFsaWRhdG9yIGFuZCBzZXQgdmFyaWFkaWMgdG8gdHJ1ZSBpbiBvcmRlciB0byBoYXZlIGl0IGV4cGFuZGVkIGluIHRoZSBhcmdzIHBhc3NlZCB0byB0aGUgVEYgZnVuY3Rpb25cbiAgICByZXR1cm4geyB2YWx1ZTogbGlzdE9mKHR5cGUpKHZhbHVlKS52YWx1ZSwgdmFyaWFkaWM6IHRydWUgfTtcbiAgfTtcbn1cblxuLy8gVG9rZW5pemF0aW9uXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGZ1bmN0aW9uIGFzU3RyaW5nKHZhbHVlOiBJUmVzb2x2YWJsZSkge1xuICByZXR1cm4gVG9rZW4uYXNTdHJpbmcodmFsdWUpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGZ1bmN0aW9uIGFzTnVtYmVyKHZhbHVlOiBJUmVzb2x2YWJsZSkge1xuICByZXR1cm4gVG9rZW4uYXNOdW1iZXIodmFsdWUpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGZ1bmN0aW9uIGFzTGlzdCh2YWx1ZTogSVJlc29sdmFibGUpIHtcbiAgcmV0dXJuIFRva2VuLmFzTGlzdCh2YWx1ZSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gYXNTdHJpbmdNYXAodmFsdWU6IElSZXNvbHZhYmxlKSB7XG4gIHJldHVybiBUb2tlbi5hc1N0cmluZ01hcCh2YWx1ZSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gYXNCb29sZWFuKHZhbHVlOiBJUmVzb2x2YWJsZSkge1xuICByZXR1cm4gdmFsdWU7IC8vIEJvb2xlYW5zIGNhbiBub3QgYmUgcmVwcmVzZW50ZWQgYXMgYSB0b2tlblxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGZ1bmN0aW9uIGFzQW55KHZhbHVlOiBJUmVzb2x2YWJsZSkge1xuICAvLyBPcmRpbmFyaWx5IGNhc3RpbmcgdG8gYW55IGNhbiBjYXVzZSBpc3N1ZXMsIGJ1dFxuICAvLyBpbiB0aGlzIGNhc2UgaXQgbWFrZXMgdXNpbmcgZnVuY3Rpb25zIGEgYml0IGVhc2llciBpbiBUU1xuICAvLyBhbmQgZG9lc24ndCByZWFsbHkgaGFybSBvdGhlciBsYW5ndWFnZXMuXG4gIC8vIEpzaWkgaGFzIGlzc3VlcyB3aGVuIHJldHVybmluZyB0aGUgdmFsdWUgZGlyZWN0bHksXG4gIC8vIHNvIHdyYXAgYXMgYSBzdHJpbmcuXG4gIHJldHVybiBhc1N0cmluZyh2YWx1ZSkgYXMgYW55O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGZ1bmN0aW9uIHRlcnJhZm9ybUZ1bmN0aW9uKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFyZ1ZhbGlkYXRvcnM6IFRGVmFsdWVWYWxpZGF0b3I8YW55PltdLFxuKTogRXhlY3V0YWJsZVRmRnVuY3Rpb24ge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSBhcmdWYWxpZGF0b3JzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgZnVuY3Rpb25SZWNlaXZlZFdyb25nTnVtYmVyT2ZBcmdzKFxuICAgICAgICBuYW1lLFxuICAgICAgICBhcmdWYWxpZGF0b3JzLmxlbmd0aCxcbiAgICAgICAgYXJncy5sZW5ndGgsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY2FsbChcbiAgICAgIG5hbWUsXG4gICAgICAvLyBXZSB1c2UgZmxhdE1hcCBub3csIHNpbmNlIGxpc3RPZigpIHdyYXBzIGV2ZXJ5dGhpbmcgaW4gYW4gZXh0cmEgYXJyYXkgYnV0IHZhcmlhZGljKCkgZG9lcyBub3RcbiAgICAgIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBoYXZlIHZhcmlhZGljIHBhc3MgbXVsdGlwbGUgYXJncyBpbnRvIHRoZSBjYWxsKCkgZnJvbSBhIHNpbmdsZSBhcnJheVxuICAgICAgYXJncy5yZWR1Y2UoKGNhcnJ5LCBhcmcsIGkpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSBhcmdWYWxpZGF0b3JzW2ldKGFyZyk7XG4gICAgICAgICAgaWYgKHZhbC52YXJpYWRpYykgcmV0dXJuIFsuLi5jYXJyeSwgLi4udmFsLnZhbHVlXTtcbiAgICAgICAgICBlbHNlIHJldHVybiBbLi4uY2FycnksIHZhbC52YWx1ZV07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZnVuY3Rpb25Bcmd1bWVudFZhbGlkYXRpb25GYWlsdXJlKGksIG5hbWUsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSwgW10pLFxuICAgICk7XG4gIH07XG59XG4iXX0=
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jdGlvbnMvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStCQSw0QkFFQztBQUdELDRCQUVDO0FBR0Qsa0NBVUM7QUFHRCxvQ0FLQztBQUdELHdCQWlEQztBQUdELDRCQUtDO0FBSUQsNEJBRUM7QUFHRCw0QkFFQztBQUdELHdCQUVDO0FBR0Qsa0NBRUM7QUFHRCw4QkFFQztBQUdELHNCQU9DO0FBR0QsOENBMkJDO0FBekxELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsMkNBQXNEO0FBQ3RELGtEQUF1QztBQUV2Qyx5REFBNkU7QUFDN0Usc0NBT21CO0FBT25COzs7O0dBSUc7QUFDSCxTQUFTLHdCQUF3QixDQUFDLEdBQVc7SUFDM0MsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELGFBQWE7QUFDYiwrQ0FBK0M7QUFDL0MsU0FBZ0IsUUFBUSxDQUFJLEtBQVE7SUFDbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25CLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBZ0IsUUFBUSxDQUFJLEtBQVE7SUFDbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ25CLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBZ0IsV0FBVyxDQUFtQixLQUFRO0lBQ3BELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsb0JBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuRSxNQUFNLElBQUEsb0NBQTJCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakUsTUFBTSxJQUFBLHFDQUE0QixFQUFDLEtBQUssQ0FBQyxDQUFD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LEVBQ0osYUFBYSxDQUFDLE1BQU0sRUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBQSxtQkFBSSxFQUNULElBQUk7UUFDSixnR0FBZ0c7UUFDaEcsMEZBQTBGO1FBQzFGLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksR0FBRyxDQUFDLFFBQVE7b0JBQUUsT0FBTyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOztvQkFDN0MsT0FBTyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUEsMENBQWlDLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNQLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IFRva2VuaXphdGlvbiwgVG9rZW4gfSBmcm9tIFwiLi4vdG9rZW5zL3Rva2VuXCI7XG5pbXBvcnQgeyBjYWxsIH0gZnJvbSBcIi4uL3RmRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSVJlc29sdmFibGUgfSBmcm9tIFwiLi4vdG9rZW5zL3Jlc29sdmFibGVcIjtcbmltcG9ydCB7IFRva2VuU3RyaW5nLCBleHRyYWN0VG9rZW5Eb3VibGUgfSBmcm9tIFwiLi4vdG9rZW5zL3ByaXZhdGUvZW5jb2RpbmdcIjtcbmltcG9ydCB7XG4gIGZ1bmN0aW9uQXJndW1lbnRWYWxpZGF0aW9uRmFpbHVyZSxcbiAgZnVuY3Rpb25SZWNlaXZlZFdyb25nTnVtYmVyT2ZBcmdzLFxuICBsaXN0RWxlbWVudElzT2ZXcm9uZ1R5cGUsXG4gIHZhbHVlQ29udGFpbnNVbmVzY2FwZWRRdW90ZXMsXG4gIHZhbHVlSXNJbnZhbGlkTnVtYmVyT3JUb2tlbixcbiAgdmFsdWVJc0ludmFsaWRTdHJpbmdPclRva2VuLFxufSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5cbnR5cGUgVEZWYWx1ZTxUPiA9IHsgdmFyaWFkaWM/OiBib29sZWFuOyB2YWx1ZTogVCB9O1xudHlwZSBURlZhbHVlVmFsaWRhdG9yPFQ+ID0gKHZhbHVlOiBUKSA9PiBURlZhbHVlPFQ+O1xuXG50eXBlIEV4ZWN1dGFibGVUZkZ1bmN0aW9uID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBJUmVzb2x2YWJsZTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGdpdmVuIHN0ciBoYXMgdW5lc2NhcGVkIGRvdWJsZSBxdW90ZXNcbiAqIEBwYXJhbSBzdHIgU3RyaW5nIHRvIHRlc3RcbiAqIEByZXR1cm5zIEJvb2xlYW5cbiAqL1xuZnVuY3Rpb24gaGFzVW5lc2NhcGVkRG91YmxlUXVvdGVzKHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiAvKF58W15cXFxcXSkoW1xcXFxdezJ9KSpcIi8udGVzdChzdHIpO1xufVxuXG4vLyBWYWxpZGF0b3JzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGZ1bmN0aW9uIGFueVZhbHVlPFQ+KHZhbHVlOiBUKTogVEZWYWx1ZTxUPiB7XG4gIHJldHVybiB7IHZhbHVlIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gbWFwVmFsdWU8VD4odmFsdWU6IFQpOiBURlZhbHVlPFQ+IHtcbiAgcmV0dXJuIHsgdmFsdWUgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdWYWx1ZTxUIGV4dGVuZHMgc3RyaW5nPih2YWx1ZTogVCk6IFRGVmFsdWU8VD4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiICYmICFUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgIHRocm93IHZhbHVlSXNJbnZhbGlkU3RyaW5nT3JUb2tlbih2YWx1ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIGhhc1VuZXNjYXBlZERvdWJsZVF1b3Rlcyh2YWx1ZSkpIHtcbiAgICB0aHJvdyB2YWx1ZUNvbnRhaW5zVW5lc2NhcGVkUXVvdGVzKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB7IHZhbHVlIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gbnVtZXJpY1ZhbHVlPFQ+KHZhbHVlOiBUKTogVEZWYWx1ZTxUPiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgJiYgIVRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUodmFsdWUpKSB7XG4gICAgdGhyb3cgdmFsdWVJc0ludmFsaWROdW1iZXJPclRva2VuKHZhbHVlIGFzIHN0cmluZyk7XG4gIH1cbiAgcmV0dXJuIHsgdmFsdWUgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBmdW5jdGlvbiBsaXN0T2Y8VD4odHlwZTogVEZWYWx1ZVZhbGlkYXRvcjxUPik6IFRGVmFsdWVWYWxpZGF0b3I8VFtdPiB7XG4gIHJldHVybiAodmFsdWU6IGFueSkgPT4ge1xuICAgIGlmIChUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHsgdmFsdWUgfTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZX0gaXMgbm90IGEgdmFsaWQgbGlzdGApO1xuICAgICAgcmV0dXJuIHsgdmFsdWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCAmJiBpdGVtICE9PSBudWxsKVxuICAgICAgICAubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChUb2tlblN0cmluZy5mb3JMaXN0VG9rZW4oaXRlbSkudGVzdCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXh0cmFjdFRva2VuRG91YmxlKGl0ZW0sIHRydWUpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChUb2tlblN0cmluZy5mb3JNYXBUb2tlbihpdGVtKS50ZXN0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgdG9rZW5MaXN0ID0gVG9rZW5pemF0aW9uLnJldmVyc2VTdHJpbmcoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJPZlRva2VucyA9XG4gICAgICAgICAgICAgIHRva2VuTGlzdC50b2tlbnMubGVuZ3RoICsgdG9rZW5MaXN0LmludHJpbnNpYy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAobnVtYmVyT2ZUb2tlbnMgPT09IDEgJiYgdG9rZW5MaXN0LmxpdGVyYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdHlwZShpdGVtKTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIiA/IGBcIiR7aXRlbX1cImAgOiBpdGVtO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBsaXN0RWxlbWVudElzT2ZXcm9uZ1R5cGUodmFsdWUsIGksIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFkaWM8VD4odHlwZTogVEZWYWx1ZVZhbGlkYXRvcjxUPik6IFRGVmFsdWVWYWxpZGF0b3I8VFtdPiB7XG4gIHJldHVybiAodmFsdWU6IGFueSkgPT4ge1xuICAgIC8vIHdlIHVzZSB0aGUgbGlzdCB2YWxpZGF0b3IgYW5kIHNldCB2YXJpYWRpYyB0byB0cnVlIGluIG9yZGVyIHRvIGhhdmUgaXQgZXhwYW5kZWQgaW4gdGhlIGFyZ3MgcGFzc2VkIHRvIHRoZSBURiBmdW5jdGlvblxuICAgIHJldHVybiB7IHZhbHVlOiBsaXN0T2YodHlwZSkodmFsdWUpLnZhbHVlLCB2YXJpYWRpYzogdHJ1ZSB9O1xuICB9O1xufVxuXG4vLyBUb2tlbml6YXRpb25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gYXNTdHJpbmcodmFsdWU6IElSZXNvbHZhYmxlKSB7XG4gIHJldHVybiBUb2tlbi5hc1N0cmluZyh2YWx1ZSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gYXNOdW1iZXIodmFsdWU6IElSZXNvbHZhYmxlKSB7XG4gIHJldHVybiBUb2tlbi5hc051bWJlcih2YWx1ZSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gYXNMaXN0KHZhbHVlOiBJUmVzb2x2YWJsZSkge1xuICByZXR1cm4gVG9rZW4uYXNMaXN0KHZhbHVlKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBmdW5jdGlvbiBhc1N0cmluZ01hcCh2YWx1ZTogSVJlc29sdmFibGUpIHtcbiAgcmV0dXJuIFRva2VuLmFzU3RyaW5nTWFwKHZhbHVlKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBmdW5jdGlvbiBhc0Jvb2xlYW4odmFsdWU6IElSZXNvbHZhYmxlKSB7XG4gIHJldHVybiB2YWx1ZTsgLy8gQm9vbGVhbnMgY2FuIG5vdCBiZSByZXByZXNlbnRlZCBhcyBhIHRva2VuXG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gYXNBbnkodmFsdWU6IElSZXNvbHZhYmxlKSB7XG4gIC8vIE9yZGluYXJpbHkgY2FzdGluZyB0byBhbnkgY2FuIGNhdXNlIGlzc3VlcywgYnV0XG4gIC8vIGluIHRoaXMgY2FzZSBpdCBtYWtlcyB1c2luZyBmdW5jdGlvbnMgYSBiaXQgZWFzaWVyIGluIFRTXG4gIC8vIGFuZCBkb2Vzbid0IHJlYWxseSBoYXJtIG90aGVyIGxhbmd1YWdlcy5cbiAgLy8gSnNpaSBoYXMgaXNzdWVzIHdoZW4gcmV0dXJuaW5nIHRoZSB2YWx1ZSBkaXJlY3RseSxcbiAgLy8gc28gd3JhcCBhcyBhIHN0cmluZy5cbiAgcmV0dXJuIGFzU3RyaW5nKHZhbHVlKSBhcyBhbnk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gdGVycmFmb3JtRnVuY3Rpb24oXG4gIG5hbWU6IHN0cmluZyxcbiAgYXJnVmFsaWRhdG9yczogVEZWYWx1ZVZhbGlkYXRvcjxhbnk+W10sXG4pOiBFeGVjdXRhYmxlVGZGdW5jdGlvbiB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoYXJncy5sZW5ndGggIT09IGFyZ1ZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBmdW5jdGlvblJlY2VpdmVkV3JvbmdOdW1iZXJPZkFyZ3MoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGFyZ1ZhbGlkYXRvcnMubGVuZ3RoLFxuICAgICAgICBhcmdzLmxlbmd0aCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjYWxsKFxuICAgICAgbmFtZSxcbiAgICAgIC8vIFdlIHVzZSBmbGF0TWFwIG5vdywgc2luY2UgbGlzdE9mKCkgd3JhcHMgZXZlcnl0aGluZyBpbiBhbiBleHRyYSBhcnJheSBidXQgdmFyaWFkaWMoKSBkb2VzIG5vdFxuICAgICAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIGhhdmUgdmFyaWFkaWMgcGFzcyBtdWx0aXBsZSBhcmdzIGludG8gdGhlIGNhbGwoKSBmcm9tIGEgc2luZ2xlIGFycmF5XG4gICAgICBhcmdzLnJlZHVjZSgoY2FycnksIGFyZywgaSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IGFyZ1ZhbGlkYXRvcnNbaV0oYXJnKTtcbiAgICAgICAgICBpZiAodmFsLnZhcmlhZGljKSByZXR1cm4gWy4uLmNhcnJ5LCAuLi52YWwudmFsdWVdO1xuICAgICAgICAgIGVsc2UgcmV0dXJuIFsuLi5jYXJyeSwgdmFsLnZhbHVlXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBmdW5jdGlvbkFyZ3VtZW50VmFsaWRhdGlvbkZhaWx1cmUoaSwgbmFtZSwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9LCBbXSksXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
@@ -883,5 +883,5 @@ class FnGenerated {
883
883
  }
884
884
  exports.FnGenerated = FnGenerated;
885
885
  _a = JSII_RTTI_SYMBOL_1;
886
- FnGenerated[_a] = { fqn: "cdktn.FnGenerated", version: "0.23.1" };
887
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWZ1bmN0aW9ucy5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXJyYWZvcm0tZnVuY3Rpb25zLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkM7OztHQUdHO0FBQ0gsdUNBYW1CO0FBQ25CLCtDQUErQztBQUMvQyxNQUFhLFdBQVc7SUFDdEI7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sSUFBQSxrQkFBUSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsS0FBSyxFQUFFLENBQUMsc0JBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sSUFBQSxrQkFBUSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsU0FBUyxFQUFFLENBQUMscUJBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFXO1FBQ3hCLE9BQU8sSUFBQSxtQkFBUyxFQUFDLElBQUEsMkJBQWlCLEVBQUMsU0FBUyxFQUFFLENBQUMsSUFBQSxnQkFBTSxFQUFDLGtCQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFXO1FBQ3hCLE9BQU8sSUFBQSxtQkFBUyxFQUFDLElBQUEsMkJBQWlCLEVBQUMsU0FBUyxFQUFFLENBQUMsSUFBQSxnQkFBTSxFQUFDLGtCQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFB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Ozs7O09BSUc7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQWMsRUFBRSxNQUFXO1FBQ3ZDLE9BQU8sSUFBQSxlQUFLLEVBQ1YsSUFBQSwyQkFBaUIsRUFBQyxRQUFRLEVBQUUsQ0FBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxFQUFFLGtCQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FDeEUsQ0FBQztJQUNKLENBQUM7O0FBai9CSCxrQ0FrL0JDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbi8qXG4gKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IHRvb2xzL2dlbmVyYXRlLWZ1bmN0aW9uLWJpbmRpbmdzLlxuICogVG8gdXBkYXRlIHRoaXMgZmlsZSBleGVjdXRlICd5YXJuIHJ1biBnZW5lcmF0ZS1mdW5jdGlvbi1iaW5kaW5ncycgaW4gdGhlIHJvb3Qgb2YgdGhlIHJlcG9zaXRvcnlcbiAqL1xuaW1wb3J0IHtcbiAgYW55VmFsdWUsXG4gIGFzQW55LFxuICBhc0Jvb2xlYW4sXG4gIGFzTGlzdCxcbiAgYXNOdW1iZXIsXG4gIGFzU3RyaW5nLFxuICBsaXN0T2YsXG4gIG1hcFZhbHVlLFxuICBudW1lcmljVmFsdWUsXG4gIHN0cmluZ1ZhbHVlLFxuICB0ZXJyYWZvcm1GdW5jdGlvbixcbiAgdmFyaWFkaWMsXG59IGZyb20gXCIuL2hlbHBlcnNcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgRm5HZW5lcmF0ZWQge1xuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9hYnMgYWJzfSByZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gbnVtYmVyLiBJbiBvdGhlciB3b3JkcywgaWYgdGhlIG51bWJlciBpcyB6ZXJvIG9yIHBvc2l0aXZlIHRoZW4gaXQgaXMgcmV0dXJuZWQgYXMtaXMsIGJ1dCBpZiBpdCBpcyBuZWdhdGl2ZSB0aGVuIGl0IGlzIG11bHRpcGxpZWQgYnkgLTEgdG8gbWFrZSBpdCBwb3NpdGl2ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqL1xuICBzdGF0aWMgYWJzKG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYWJzXCIsIFtudW1lcmljVmFsdWVdKShudW0pKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9hYnNwYXRoIGFic3BhdGh9IHRha2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBmaWxlc3lzdGVtIHBhdGggYW5kIGNvbnZlcnRzIGl0IHRvIGFuIGFic29sdXRlIHBhdGguIFRoYXQgaXMsIGlmIHRoZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSwgaXQgd2lsbCBiZSBqb2luZWQgd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBhYnNwYXRoKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImFic3BhdGhcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2FsbHRydWUgYWxsdHJ1ZX0gcmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIGluIGEgZ2l2ZW4gY29sbGVjdGlvbiBhcmUgYHRydWVgIG9yIGBcInRydWVcImAuIEl0IGFsc28gcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNvbGxlY3Rpb24gaXMgZW1wdHkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gbGlzdFxuICAgKi9cbiAgc3RhdGljIGFsbHRydWUobGlzdDogYW55W10pIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYWxsdHJ1ZVwiLCBbbGlzdE9mKGFueVZhbHVlKV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9hbnl0cnVlIGFueXRydWV9IHJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IGluIGEgZ2l2ZW4gY29sbGVjdGlvbiBpcyBgdHJ1ZWAgb3IgYFwidHJ1ZVwiYC4gSXQgYWxzbyByZXR1cm5zIGBmYWxzZWAgaWYgdGhlIGNvbGxlY3Rpb24gaXMgZW1wdHkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gbGlzdFxuICAgKi9cbiAgc3RhdGljIGFueXRydWUobGlzdDogYW55W10pIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYW55dHJ1ZVwiLCBbbGlzdE9mKGFueVZhbHVlKV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9iYXNlNjRkZWNvZGUgYmFzZTY0ZGVjb2RlfSB0YWtlcyBhIHN0cmluZyBjb250YWluaW5nIGEgQmFzZTY0IGNoYXJhY3RlciBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgb3JpZ2luYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0ZGVjb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmFzZTY0ZGVjb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2U2NGVuY29kZSBiYXNlNjRlbmNvZGV9IGFwcGxpZXMgQmFzZTY0IGVuY29kaW5nIHRvIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0ZW5jb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmFzZTY0ZW5jb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2U2NGd6aXAgYmFzZTY0Z3ppcH0gY29tcHJlc3NlcyBhIHN0cmluZyB3aXRoIGd6aXAgYW5kIHRoZW4gZW5jb2RlcyB0aGUgcmVzdWx0IGluIEJhc2U2NCBlbmNvZGluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGJhc2U2NGd6aXAoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlNjRnemlwXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2U2NHNoYTI1NiBiYXNlNjRzaGEyNTZ9IGNvbXB1dGVzIHRoZSBTSEEyNTYgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIEJhc2U2NC4gVGhpcyBpcyBub3QgZXF1aXZhbGVudCB0byBgYmFzZTY0ZW5jb2RlKHNoYTI1NihcInRlc3RcIikpYCBzaW5jZSBgc2hhMjU2KClgIHJldHVybnMgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBiYXNlNjRzaGEyNTYoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlNjRzaGEyNTZcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYmFzZTY0c2hhNTEyIGJhc2U2NHNoYTUxMn0gY29tcHV0ZXMgdGhlIFNIQTUxMiBoYXNoIG9mIGEgZ2l2ZW4gc3RyaW5nIGFuZCBlbmNvZGVzIGl0IHdpdGggQmFzZTY0LiBUaGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIGBiYXNlNjRlbmNvZGUoc2hhNTEyKFwidGVzdFwiKSlgIHNpbmNlIGBzaGE1MTIoKWAgcmV0dXJucyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGJhc2U2NHNoYTUxMihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImJhc2U2NHNoYTUxMlwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9iYXNlbmFtZSBiYXNlbmFtZX0gdGFrZXMgYSBzdHJpbmcgY29udGFpbmluZyBhIGZpbGVzeXN0ZW0gcGF0aCBhbmQgcmVtb3ZlcyBhbGwgZXhjZXB0IHRoZSBsYXN0IHBvcnRpb24gZnJvbSBpdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBiYXNlbmFtZShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlbmFtZVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2JjcnlwdCBiY3J5cHR9IGNvbXB1dGVzIGEgaGFzaCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIHVzaW5nIHRoZSBCbG93ZmlzaCBjaXBoZXIsIHJldHVybmluZyBhIHN0cmluZyBpbiBbdGhlIF9Nb2R1bGFyIENyeXB0IEZvcm1hdF9dKGh0dHBzOi8vcGFzc2xpYi5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbW9kdWxhcl9jcnlwdF9mb3JtYXQuaHRtbCkgdXN1YWxseSBleHBlY3RlZCBpbiB0aGUgc2hhZG93IHBhc3N3b3JkIGZpbGUgb24gbWFueSBVbml4IHN5c3RlbXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjb3N0XG4gICAqL1xuICBzdGF0aWMgX2JjcnlwdChzdHI6IHN0cmluZywgY29zdDogbnVtYmVyW10pIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImJjcnlwdFwiLCBbc3RyaW5nVmFsdWUsIHZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShcbiAgICAgICAgc3RyLFxuICAgICAgICBjb3N0LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NhbiBjYW59IGV2YWx1YXRlcyB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBhbmQgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIHByb2R1Y2VkIGEgcmVzdWx0IHdpdGhvdXQgYW55IGVycm9ycy5cbiAgICogQHBhcmFtIHthbnl9IGV4cHJlc3Npb25cbiAgICovXG4gIHN0YXRpYyBjYW4oZXhwcmVzc2lvbjogYW55KSB7XG4gICAgcmV0dXJuIGFzQm9vbGVhbih0ZXJyYWZvcm1GdW5jdGlvbihcImNhblwiLCBbYW55VmFsdWVdKShleHByZXNzaW9uKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2VpbCBjZWlsfSByZXR1cm5zIHRoZSBjbG9zZXN0IHdob2xlIG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdmFsdWUsIHdoaWNoIG1heSBiZSBhIGZyYWN0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqL1xuICBzdGF0aWMgY2VpbChudW06IG51bWJlcikge1xuICAgIHJldHVybiBhc051bWJlcih0ZXJyYWZvcm1GdW5jdGlvbihcImNlaWxcIiwgW251bWVyaWNWYWx1ZV0pKG51bSkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Nob21wIGNob21wfSByZW1vdmVzIG5ld2xpbmUgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgY2hvbXAoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJjaG9tcFwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaHVua2xpc3QgY2h1bmtsaXN0fSBzcGxpdHMgYSBzaW5nbGUgbGlzdCBpbnRvIGZpeGVkLXNpemUgY2h1bmtzLCByZXR1cm5pbmcgYSBsaXN0IG9mIGxpc3RzLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGxpc3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcbiAgICovXG4gIHN0YXRpYyBjaHVua2xpc3QobGlzdDogYW55W10sIHNpemU6IG51bWJlcikge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImNodW5rbGlzdFwiLCBbbGlzdE9mKGFueVZhbHVlKSwgbnVtZXJpY1ZhbHVlXSkoXG4gICAgICAgIGxpc3QsXG4gICAgICAgIHNpemUsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2lkcmhvc3QgY2lkcmhvc3R9IGNhbGN1bGF0ZXMgYSBmdWxsIGhvc3QgSVAgYWRkcmVzcyBmb3IgYSBnaXZlbiBob3N0IG51bWJlciB3aXRoaW4gYSBnaXZlbiBJUCBuZXR3b3JrIGFkZHJlc3MgcHJlZml4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBob3N0bnVtXG4gICAqL1xuICBzdGF0aWMgY2lkcmhvc3QocHJlZml4OiBzdHJpbmcsIGhvc3RudW06IG51bWJlcikge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2lkcmhvc3RcIiwgW3N0cmluZ1ZhbHVlLCBudW1lcmljVmFsdWVdKShcbiAgICAgICAgcHJlZml4LFxuICAgICAgICBob3N0bnVtLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NpZHJuZXRtYXNrIGNpZHJuZXRtYXNrfSBjb252ZXJ0cyBhbiBJUHY0IGFkZHJlc3MgcHJlZml4IGdpdmVuIGluIENJRFIgbm90YXRpb24gaW50byBhIHN1Ym5ldCBtYXNrIGFkZHJlc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICovXG4gIHN0YXRpYyBjaWRybmV0bWFzayhwcmVmaXg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImNpZHJuZXRtYXNrXCIsIFtzdHJpbmdWYWx1ZV0pKHByZWZpeCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NpZHJzdWJuZXQgY2lkcnN1Ym5ldH0gY2FsY3VsYXRlcyBhIHN1Ym5ldCBhZGRyZXNzIHdpdGhpbiBnaXZlbiBJUCBuZXR3b3JrIGFkZHJlc3MgcHJlZml4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXdiaXRzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXRudW1cbiAgICovXG4gIHN0YXRpYyBjaWRyc3VibmV0KHByZWZpeDogc3RyaW5nLCBuZXdiaXRzOiBudW1iZXIsIG5ldG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJjaWRyc3VibmV0XCIsIFtcbiAgICAgICAgc3RyaW5nVmFsdWUsXG4gICAgICAgIG51bWVyaWNWYWx1ZSxcbiAgICAgICAgbnVtZXJpY1ZhbHVlLFxuICAgICAgXSkocHJlZml4LCBuZXdiaXRzLCBuZXRudW0pLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2lkcnN1Ym5ldHMgY2lkcnN1Ym5ldHN9IGNhbGN1bGF0ZXMgYSBzZXF1ZW5jZSBvZiBjb25zZWN1dGl2ZSBJUCBhZGRyZXNzIHJhbmdlcyB3aXRoaW4gYSBwYXJ0aWN1bGFyIENJRFIgcHJlZml4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gbmV3Yml0c1xuICAgKi9cbiAgc3RhdGljIGNpZHJzdWJuZXRzKHByZWZpeDogc3RyaW5nLCBuZXdiaXRzOiBudW1iZXJbXSkge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImNpZHJzdWJuZXRzXCIsIFtzdHJpbmdWYWx1ZSwgdmFyaWFkaWMobnVtZXJpY1ZhbHVlKV0pKFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIG5ld2JpdHMsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY29hbGVzY2UgY29hbGVzY2V9IHRha2VzIGFueSBudW1iZXIgb2YgYXJndW1lbnRzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCBudWxsIG9yIGFuIGVtcHR5IHN0cmluZy5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSB2YWxzXG4gICAqL1xuICBzdGF0aWMgY29hbGVzY2UodmFsczogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJjb2FsZXNjZVwiLCBbdmFyaWFkaWMoYW55VmFsdWUpXSkodmFscykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvYWxlc2NlbGlzdCBjb2FsZXNjZWxpc3R9IHRha2VzIGFueSBudW1iZXIgb2YgbGlzdCBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IGVtcHR5LlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IHZhbHNcbiAgICovXG4gIHN0YXRpYyBjb2FsZXNjZWxpc3QodmFsczogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJjb2FsZXNjZWxpc3RcIiwgW3ZhcmlhZGljKGFueVZhbHVlKV0pKHZhbHMpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jb21wYWN0IGNvbXBhY3R9IHRha2VzIGEgbGlzdCBvZiBzdHJpbmdzIGFuZCByZXR1cm5zIGEgbmV3IGxpc3Qgd2l0aCBhbnkgZW1wdHkgc3RyaW5nIGVsZW1lbnRzIHJlbW92ZWQuXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gbGlzdFxuICAgKi9cbiAgc3RhdGljIGNvbXBhY3QobGlzdDogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gYXNMaXN0KHRlcnJhZm9ybUZ1bmN0aW9uKFwiY29tcGFjdFwiLCBbbGlzdE9mKGFueVZhbHVlKV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jb25jYXQgY29uY2F0fSB0YWtlcyB0d28gb3IgbW9yZSBsaXN0cyBhbmQgY29tYmluZXMgdGhlbSBpbnRvIGEgc2luZ2xlIGxpc3QuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gc2Vxc1xuICAgKi9cbiAgc3RhdGljIGNvbmNhdChzZXFzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImNvbmNhdFwiLCBbdmFyaWFkaWMoYW55VmFsdWUpXSkoc2VxcykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvbnRhaW5zIGNvbnRhaW5zfSBkZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBsaXN0IG9yIHNldCBjb250YWlucyBhIGdpdmVuIHNpbmdsZSB2YWx1ZSBhcyBvbmUgb2YgaXRzIGVsZW1lbnRzLlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyBjb250YWlucyhsaXN0OiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImNvbnRhaW5zXCIsIFthbnlWYWx1ZSwgYW55VmFsdWVdKShsaXN0LCB2YWx1ZSksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jc3ZkZWNvZGUgY3N2ZGVjb2RlfSBkZWNvZGVzIGEgc3RyaW5nIGNvbnRhaW5pbmcgQ1NWLWZvcm1hdHRlZCBkYXRhIGFuZCBwcm9kdWNlcyBhIGxpc3Qgb2YgbWFwcyByZXByZXNlbnRpbmcgdGhhdCBkYXRhLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgY3N2ZGVjb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwiY3N2ZGVjb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Rpcm5hbWUgZGlybmFtZX0gdGFrZXMgYSBzdHJpbmcgY29udGFpbmluZyBhIGZpbGVzeXN0ZW0gcGF0aCBhbmQgcmVtb3ZlcyB0aGUgbGFzdCBwb3J0aW9uIGZyb20gaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZGlybmFtZShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJkaXJuYW1lXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9kaXN0aW5jdCBkaXN0aW5jdH0gdGFrZXMgYSBsaXN0IGFuZCByZXR1cm5zIGEgbmV3IGxpc3Qgd2l0aCBhbnkgZHVwbGljYXRlIGVsZW1lbnRzIHJlbW92ZWQuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gbGlzdFxuICAgKi9cbiAgc3RhdGljIGRpc3RpbmN0KGxpc3Q6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzTGlzdCh0ZXJyYWZvcm1GdW5jdGlvbihcImRpc3RpbmN0XCIsIFtsaXN0T2YoYW55VmFsdWUpXSkobGlzdCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2VsZW1lbnQgZWxlbWVudH0gcmV0cmlldmVzIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSBhIGxpc3QuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKi9cbiAgc3RhdGljIGVsZW1lbnQobGlzdDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzQW55KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJlbGVtZW50XCIsIFthbnlWYWx1ZSwgbnVtZXJpY1ZhbHVlXSkobGlzdCwgaW5kZXgpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZW5kc3dpdGggZW5kc3dpdGh9IHRha2VzIHR3byB2YWx1ZXM6IGEgc3RyaW5nIHRvIGNoZWNrIGFuZCBhIHN1ZmZpeCBzdHJpbmcuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGZpcnN0IHN0cmluZyBlbmRzIHdpdGggdGhhdCBleGFjdCBzdWZmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1ZmZpeFxuICAgKi9cbiAgc3RhdGljIGVuZHN3aXRoKHN0cjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZykge1xuICAgIHJldHVybiBhc0Jvb2xlYW4oXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImVuZHN3aXRoXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHN1ZmZpeCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlIGZpbGV9IHJlYWRzIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggYW5kIHJldHVybnMgdGhlbSBhcyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBmaWxlKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImZpbGVcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2ZpbGViYXNlNjQgZmlsZWJhc2U2NH0gcmVhZHMgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhbmQgcmV0dXJucyB0aGVtIGFzIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGViYXNlNjQocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWJhc2U2NFwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZWJhc2U2NHNoYTI1NiBmaWxlYmFzZTY0c2hhMjU2fSBpcyBhIHZhcmlhbnQgb2YgYGJhc2U2NHNoYTI1NmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGViYXNlNjRzaGEyNTYocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWJhc2U2NHNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZWJhc2U2NHNoYTUxMiBmaWxlYmFzZTY0c2hhNTEyfSBpcyBhIHZhcmlhbnQgb2YgYGJhc2U2NHNoYTUxMmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGViYXNlNjRzaGE1MTIocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWJhc2U2NHNoYTUxMlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZWV4aXN0cyBmaWxlZXhpc3RzfSBkZXRlcm1pbmVzIHdoZXRoZXIgYSBmaWxlIGV4aXN0cyBhdCBhIGdpdmVuIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZWV4aXN0cyhwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWV4aXN0c1wiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZW1kNSBmaWxlbWQ1fSBpcyBhIHZhcmlhbnQgb2YgYG1kNWAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGVtZDUocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZW1kNVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZXNldCBmaWxlc2V0fSBlbnVtZXJhdGVzIGEgc2V0IG9mIHJlZ3VsYXIgZmlsZSBuYW1lcyBnaXZlbiBhIHBhdGggYW5kIHBhdHRlcm4uIFRoZSBwYXRoIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZSByZXN1bHRpbmcgc2V0IG9mIGZpbGUgbmFtZXMgYW5kIGFueSByZXN1bHQgc3RpbGwgY29udGFpbmluZyBwYXRoIHNlcGFyYXRvcnMgYWx3YXlzIHJldHVybnMgZm9yd2FyZCBzbGFzaCAoYC9gKSBhcyB0aGUgcGF0aCBzZXBhcmF0b3IgZm9yIGNyb3NzLXN5c3RlbSBjb21wYXRpYmlsaXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuICAgKi9cbiAgc3RhdGljIGZpbGVzZXQocGF0aDogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlc2V0XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShwYXRoLCBwYXR0ZXJuKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2ZpbGVzaGExIGZpbGVzaGExfSBpcyBhIHZhcmlhbnQgb2YgYHNoYTFgIHRoYXQgaGFzaGVzIHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIGZpbGUgcmF0aGVyIHRoYW4gYSBsaXRlcmFsIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBmaWxlc2hhMShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlc2hhMVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZXNoYTI1NiBmaWxlc2hhMjU2fSBpcyBhIHZhcmlhbnQgb2YgYHNoYTI1NmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGVzaGEyNTYocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZXNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZXNoYTUxMiBmaWxlc2hhNTEyfSBpcyBhIHZhcmlhbnQgb2YgYHNoYTUxMmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGVzaGE1MTIocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZXNoYTUxMlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmxhdHRlbiBmbGF0dGVufSB0YWtlcyBhIGxpc3QgYW5kIHJlcGxhY2VzIGFueSBlbGVtZW50cyB0aGF0IGFyZSBsaXN0cyB3aXRoIGEgZmxhdHRlbmVkIHNlcXVlbmNlIG9mIHRoZSBsaXN0IGNvbnRlbnRzLlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKi9cbiAgc3RhdGljIGZsYXR0ZW4obGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmxhdHRlblwiLCBbYW55VmFsdWVdKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmxvb3IgZmxvb3J9IHJldHVybnMgdGhlIGNsb3Nlc3Qgd2hvbGUgbnVtYmVyIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZSwgd2hpY2ggbWF5IGJlIGEgZnJhY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAgICovXG4gIHN0YXRpYyBmbG9vcihudW06IG51bWJlcikge1xuICAgIHJldHVybiBhc051bWJlcih0ZXJyYWZvcm1GdW5jdGlvbihcImZsb29yXCIsIFtudW1lcmljVmFsdWVdKShudW0pKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZm9ybWF0IGZvcm1hdH0gZnVuY3Rpb24gcHJvZHVjZXMgYSBzdHJpbmcgYnkgZm9ybWF0dGluZyBhIG51bWJlciBvZiBvdGhlciB2YWx1ZXMgYWNjb3JkaW5nIHRvIGEgc3BlY2lmaWNhdGlvbiBzdHJpbmcuIEl0IGlzIHNpbWlsYXIgdG8gdGhlIGBwcmludGZgIGZ1bmN0aW9uIGluIEMsIGFuZCBvdGhlciBzaW1pbGFyIGZ1bmN0aW9ucyBpbiBvdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcmdzXG4gICAqL1xuICBzdGF0aWMgZm9ybWF0KGZvcm1hdDogc3RyaW5nLCBhcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiZm9ybWF0XCIsIFtzdHJpbmdWYWx1ZSwgdmFyaWFkaWMoYW55VmFsdWUpXSkoXG4gICAgICAgIGZvcm1hdCxcbiAgICAgICAgYXJncyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mb3JtYXRkYXRlIGZvcm1hdGRhdGV9IGNvbnZlcnRzIGEgdGltZXN0YW1wIGludG8gYSBkaWZmZXJlbnQgdGltZSBmb3JtYXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWVcbiAgICovXG4gIHN0YXRpYyBmb3JtYXRkYXRlKGZvcm1hdDogc3RyaW5nLCB0aW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImZvcm1hdGRhdGVcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKGZvcm1hdCwgdGltZSksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mb3JtYXRsaXN0IGZvcm1hdGxpc3R9IHByb2R1Y2VzIGEgbGlzdCBvZiBzdHJpbmdzIGJ5IGZvcm1hdHRpbmcgYSBudW1iZXIgb2Ygb3RoZXIgdmFsdWVzIGFjY29yZGluZyB0byBhIHNwZWNpZmljYXRpb24gc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0XG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJnc1xuICAgKi9cbiAgc3RhdGljIGZvcm1hdGxpc3QoZm9ybWF0OiBzdHJpbmcsIGFyZ3M6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzQW55KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJmb3JtYXRsaXN0XCIsIFtzdHJpbmdWYWx1ZSwgdmFyaWFkaWMoYW55VmFsdWUpXSkoXG4gICAgICAgIGZvcm1hdCxcbiAgICAgICAgYXJncyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9pbmRlbnQgaW5kZW50fSBhZGRzIGEgZ2l2ZW4gbnVtYmVyIG9mIHNwYWNlcyB0byB0aGUgYmVnaW5uaW5ncyBvZiBhbGwgYnV0IHRoZSBmaXJzdCBsaW5lIGluIGEgZ2l2ZW4gbXVsdGktbGluZSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzcGFjZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGluZGVudChzcGFjZXM6IG51bWJlciwgc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImluZGVudFwiLCBbbnVtZXJpY1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHNwYWNlcywgc3RyKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2luZGV4IGluZGV4fSBmaW5kcyB0aGUgZWxlbWVudCBpbmRleCBmb3IgYSBnaXZlbiB2YWx1ZSBpbiBhIGxpc3QuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIGluZGV4KGxpc3Q6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImluZGV4XCIsIFthbnlWYWx1ZSwgYW55VmFsdWVdKShsaXN0LCB2YWx1ZSkpO1xuICB9XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9qb2luIGpvaW59IHByb2R1Y2VzIGEgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgdG9nZXRoZXIgYWxsIGVsZW1lbnRzIG9mIGEgZ2l2ZW4gbGlzdCBvZiBzdHJpbmdzIHdpdGggdGhlIGdpdmVuIGRlbGltaXRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlcGFyYXRvclxuICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PHN0cmluZz4+fSBsaXN0c1xuICAgKi9cbiAgc3RhdGljIF9qb2luKHNlcGFyYXRvcjogc3RyaW5nLCBsaXN0czogc3RyaW5nW11bXSkge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiam9pblwiLCBbc3RyaW5nVmFsdWUsIHZhcmlhZGljKGxpc3RPZihhbnlWYWx1ZSkpXSkoXG4gICAgICAgIHNlcGFyYXRvcixcbiAgICAgICAgbGlzdHMsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvanNvbmRlY29kZSBqc29uZGVjb2RlfSBpbnRlcnByZXRzIGEgZ2l2ZW4gc3RyaW5nIGFzIEpTT04sIHJldHVybmluZyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXN1bHQgb2YgZGVjb2RpbmcgdGhhdCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBqc29uZGVjb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwianNvbmRlY29kZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9qc29uZW5jb2RlIGpzb25lbmNvZGV9IGVuY29kZXMgYSBnaXZlbiB2YWx1ZSB0byBhIHN0cmluZyB1c2luZyBKU09OIHN5bnRheC5cbiAgICogQHBhcmFtIHthbnl9IHZhbFxuICAgKi9cbiAgc3RhdGljIGpzb25lbmNvZGUodmFsOiBhbnkpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJqc29uZW5jb2RlXCIsIFthbnlWYWx1ZV0pKHZhbCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2tleXMga2V5c30gdGFrZXMgYSBtYXAgYW5kIHJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIGtleXMgZnJvbSB0aGF0IG1hcC5cbiAgICogQHBhcmFtIHthbnl9IGlucHV0TWFwXG4gICAqL1xuICBzdGF0aWMga2V5cyhpbnB1dE1hcDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwia2V5c1wiLCBbYW55VmFsdWVdKShpbnB1dE1hcCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2xlbmd0aCBsZW5ndGh9IGRldGVybWluZXMgdGhlIGxlbmd0aCBvZiBhIGdpdmVuIGxpc3QsIG1hcCwgb3Igc3RyaW5nLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyBsZW5ndGhPZih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwibGVuZ3RoXCIsIFthbnlWYWx1ZV0pKHZhbHVlKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbG9nIGxvZ30gcmV0dXJucyB0aGUgbG9nYXJpdGhtIG9mIGEgZ2l2ZW4gbnVtYmVyIGluIGEgZ2l2ZW4gYmFzZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICAgKiBAcGFyYW0ge251bWJlcn0gYmFzZVxuICAgKi9cbiAgc3RhdGljIGxvZyhudW06IG51bWJlciwgYmFzZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJsb2dcIiwgW251bWVyaWNWYWx1ZSwgbnVtZXJpY1ZhbHVlXSkobnVtLCBiYXNlKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9sb29rdXAgbG9va3VwfSByZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSBhIG1hcCwgZ2l2ZW4gaXRzIGtleS4gSWYgdGhlIGdpdmVuIGtleSBkb2VzIG5vdCBleGlzdCwgdGhlIGdpdmVuIGRlZmF1bHQgdmFsdWUgaXMgcmV0dXJuZWQgaW5zdGVhZC5cbiAgICogQHBhcmFtIHthbnl9IGlucHV0TWFwXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBkZWZhdWx0VmFsdWVcbiAgICovXG4gIHN0YXRpYyBfbG9va3VwKGlucHV0TWFwOiBhbnksIGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzQW55KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJsb29rdXBcIiwgW2FueVZhbHVlLCBzdHJpbmdWYWx1ZSwgdmFyaWFkaWMoYW55VmFsdWUpXSkoXG4gICAgICAgIGlucHV0TWFwLFxuICAgICAgICBrZXksXG4gICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9sb3dlciBsb3dlcn0gY29udmVydHMgYWxsIGNhc2VkIGxldHRlcnMgaW4gdGhlIGdpdmVuIHN0cmluZyB0byBsb3dlcmNhc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBsb3dlcihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImxvd2VyXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL21hdGNoa2V5cyBtYXRjaGtleXN9IGNvbnN0cnVjdHMgYSBuZXcgbGlzdCBieSB0YWtpbmcgYSBzdWJzZXQgb2YgZWxlbWVudHMgZnJvbSBvbmUgbGlzdCB3aG9zZSBpbmRleGVzIG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4ZXMgb2YgdmFsdWVzIGluIGFub3RoZXIgbGlzdC5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSB2YWx1ZXNcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBrZXlzXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gc2VhcmNoc2V0XG4gICAqL1xuICBzdGF0aWMgbWF0Y2hrZXlzKHZhbHVlczogYW55W10sIGtleXM6IGFueVtdLCBzZWFyY2hzZXQ6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzTGlzdChcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwibWF0Y2hrZXlzXCIsIFtcbiAgICAgICAgbGlzdE9mKGFueVZhbHVlKSxcbiAgICAgICAgbGlzdE9mKGFueVZhbHVlKSxcbiAgICAgICAgbGlzdE9mKGFueVZhbHVlKSxcbiAgICAgIF0pKHZhbHVlcywga2V5cywgc2VhcmNoc2V0KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL21heCBtYXh9IHRha2VzIG9uZSBvciBtb3JlIG51bWJlcnMgYW5kIHJldHVybnMgdGhlIGdyZWF0ZXN0IG51bWJlciBmcm9tIHRoZSBzZXQuXG4gICAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gbnVtYmVyc1xuICAgKi9cbiAgc3RhdGljIG1heChudW1iZXJzOiBudW1iZXJbXSkge1xuICAgIHJldHVybiBhc051bWJlcihcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwibWF4XCIsIFt2YXJpYWRpYyhudW1lcmljVmFsdWUpXSkobnVtYmVycyksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9tZDUgbWQ1fSBjb21wdXRlcyB0aGUgTUQ1IGhhc2ggb2YgYSBnaXZlbiBzdHJpbmcgYW5kIGVuY29kZXMgaXQgd2l0aCBoZXhhZGVjaW1hbCBkaWdpdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBtZDUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJtZDVcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWVyZ2UgbWVyZ2V9IHRha2VzIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgbWFwcyBvciBvYmplY3RzLCBhbmQgcmV0dXJucyBhIHNpbmdsZSBtYXAgb3Igb2JqZWN0IHRoYXQgY29udGFpbnMgYSBtZXJnZWQgc2V0IG9mIGVsZW1lbnRzIGZyb20gYWxsIGFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBtYXBzXG4gICAqL1xuICBzdGF0aWMgbWVyZ2UobWFwczogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJtZXJnZVwiLCBbdmFyaWFkaWMoYW55VmFsdWUpXSkobWFwcykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL21pbiBtaW59IHRha2VzIG9uZSBvciBtb3JlIG51bWJlcnMgYW5kIHJldHVybnMgdGhlIHNtYWxsZXN0IG51bWJlciBmcm9tIHRoZSBzZXQuXG4gICAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gbnVtYmVyc1xuICAgKi9cbiAgc3RhdGljIG1pbihudW1iZXJzOiBudW1iZXJbXSkge1xuICAgIHJldHVybiBhc051bWJlcihcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwibWluXCIsIFt2YXJpYWRpYyhudW1lcmljVmFsdWUpXSkobnVtYmVycyksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9ub25zZW5zaXRpdmUgbm9uc2Vuc2l0aXZlfSB0YWtlcyBhIHNlbnNpdGl2ZSB2YWx1ZSBhbmQgcmV0dXJucyBhIGNvcHkgb2YgdGhhdCB2YWx1ZSB3aXRoIHRoZSBzZW5zaXRpdmUgbWFya2luZyByZW1vdmVkLCB0aGVyZWJ5IGV4cG9zaW5nIHRoZSBzZW5zaXRpdmUgdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIG5vbnNlbnNpdGl2ZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwibm9uc2Vuc2l0aXZlXCIsIFthbnlWYWx1ZV0pKHZhbHVlKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvb25lIG9uZX0gdGFrZXMgYSBsaXN0LCBzZXQsIG9yIHR1cGxlIHZhbHVlIHdpdGggZWl0aGVyIHplcm8gb3Igb25lIGVsZW1lbnRzLiBJZiB0aGUgY29sbGVjdGlvbiBpcyBlbXB0eSwgYG9uZWAgcmV0dXJucyBgbnVsbGAuIE90aGVyd2lzZSwgYG9uZWAgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudC4gSWYgdGhlcmUgYXJlIHR3byBvciBtb3JlIGVsZW1lbnRzIHRoZW4gYG9uZWAgd2lsbCByZXR1cm4gYW4gZXJyb3IuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgb25lKGxpc3Q6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcIm9uZVwiLCBbYW55VmFsdWVdKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcGFyc2VpbnQgcGFyc2VpbnR9IHBhcnNlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciBpbiB0aGUgc3BlY2lmaWVkIGJhc2UgYW5kIHJldHVybnMgdGhlIHJlc3VsdGluZyBudW1iZXIuIFRoZSBiYXNlIG11c3QgYmUgYmV0d2VlbiAyIGFuZCA2MiBpbmNsdXNpdmUuXG4gICAqIEBwYXJhbSB7YW55fSBudW1iZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGJhc2VcbiAgICovXG4gIHN0YXRpYyBwYXJzZWludChudW1iZXI6IGFueSwgYmFzZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzQW55KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJwYXJzZWludFwiLCBbYW55VmFsdWUsIG51bWVyaWNWYWx1ZV0pKG51bWJlciwgYmFzZSksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9wYXRoZXhwYW5kIHBhdGhleHBhbmR9IHRha2VzIGEgZmlsZXN5c3RlbSBwYXRoIHRoYXQgbWlnaHQgYmVnaW4gd2l0aCBhIGB+YCBzZWdtZW50LCBhbmQgaWYgc28gaXQgcmVwbGFjZXMgdGhhdCBzZWdtZW50IHdpdGggdGhlIGN1cnJlbnQgdXNlcidzIGhvbWUgZGlyZWN0b3J5IHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgcGF0aGV4cGFuZChwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJwYXRoZXhwYW5kXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9wbGFudGltZXN0YW1wIHBsYW50aW1lc3RhbXB9IHJldHVybnMgYSBVVEMgdGltZXN0YW1wIHN0cmluZyBpbiBbUkZDIDMzMzldKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5KSBmb3JtYXQsIGZpeGVkIHRvIGEgY29uc3RhbnQgdGltZSByZXByZXNlbnRpbmcgdGhlIHRpbWUgb2YgdGhlIHBsYW4uXG4gICAqL1xuICBzdGF0aWMgcGxhbnRpbWVzdGFtcCgpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJwbGFudGltZXN0YW1wXCIsIFtdKSgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9wb3cgcG93fSBjYWxjdWxhdGVzIGFuIGV4cG9uZW50LCBieSByYWlzaW5nIGl0cyBmaXJzdCBhcmd1bWVudCB0byB0aGUgcG93ZXIgb2YgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICAgKiBAcGFyYW0ge251bWJlcn0gcG93ZXJcbiAgICovXG4gIHN0YXRpYyBwb3cobnVtOiBudW1iZXIsIHBvd2VyOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInBvd1wiLCBbbnVtZXJpY1ZhbHVlLCBudW1lcmljVmFsdWVdKShudW0sIHBvd2VyKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9yYW5nZSByYW5nZX0gZ2VuZXJhdGVzIGEgbGlzdCBvZiBudW1iZXJzIHVzaW5nIGEgc3RhcnQgdmFsdWUsIGEgbGltaXQgdmFsdWUsIGFuZCBhIHN0ZXAgdmFsdWUuXG4gICAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gcGFyYW1zXG4gICAqL1xuICBzdGF0aWMgX3JhbmdlKHBhcmFtczogbnVtYmVyW10pIHtcbiAgICByZXR1cm4gYXNMaXN0KHRlcnJhZm9ybUZ1bmN0aW9uKFwicmFuZ2VcIiwgW3ZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShwYXJhbXMpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9yZWdleCByZWdleH0gYXBwbGllcyBhIFtyZWd1bGFyIGV4cHJlc3Npb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlZ3VsYXJfZXhwcmVzc2lvbikgdG8gYSBzdHJpbmcgYW5kIHJldHVybnMgdGhlIG1hdGNoaW5nIHN1YnN0cmluZ3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyByZWdleChwYXR0ZXJuOiBzdHJpbmcsIHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzQW55KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJyZWdleFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkocGF0dGVybiwgc3RyKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JlZ2V4YWxsIHJlZ2V4YWxsfSBhcHBsaWVzIGEgW3JlZ3VsYXIgZXhwcmVzc2lvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVndWxhcl9leHByZXNzaW9uKSB0byBhIHN0cmluZyBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIG1hdGNoZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyByZWdleGFsbChwYXR0ZXJuOiBzdHJpbmcsIHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzTGlzdChcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwicmVnZXhhbGxcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHBhdHRlcm4sIHN0ciksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9yZXBsYWNlIHJlcGxhY2V9IHNlYXJjaGVzIGEgZ2l2ZW4gc3RyaW5nIGZvciBhbm90aGVyIGdpdmVuIHN1YnN0cmluZywgYW5kIHJlcGxhY2VzIGVhY2ggb2NjdXJyZW5jZSB3aXRoIGEgZ2l2ZW4gcmVwbGFjZW1lbnQgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlcGxhY2VcbiAgICovXG4gIHN0YXRpYyByZXBsYWNlKHN0cjogc3RyaW5nLCBzdWJzdHI6IHN0cmluZywgcmVwbGFjZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJyZXBsYWNlXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIHN0cixcbiAgICAgICAgc3Vic3RyLFxuICAgICAgICByZXBsYWNlLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JldmVyc2UgcmV2ZXJzZX0gdGFrZXMgYSBzZXF1ZW5jZSBhbmQgcHJvZHVjZXMgYSBuZXcgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgbGVuZ3RoIHdpdGggYWxsIG9mIHRoZSBzYW1lIGVsZW1lbnRzIGFzIHRoZSBnaXZlbiBzZXF1ZW5jZSBidXQgaW4gcmV2ZXJzZSBvcmRlci5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICovXG4gIHN0YXRpYyByZXZlcnNlKGxpc3Q6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInJldmVyc2VcIiwgW2FueVZhbHVlXSkobGlzdCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JzYWRlY3J5cHQgcnNhZGVjcnlwdH0gZGVjcnlwdHMgYW4gUlNBLWVuY3J5cHRlZCBjaXBoZXJ0ZXh0LCByZXR1cm5pbmcgdGhlIGNvcnJlc3BvbmRpbmcgY2xlYXJ0ZXh0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2lwaGVydGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJpdmF0ZWtleVxuICAgKi9cbiAgc3RhdGljIHJzYWRlY3J5cHQoY2lwaGVydGV4dDogc3RyaW5nLCBwcml2YXRla2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInJzYWRlY3J5cHRcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKFxuICAgICAgICBjaXBoZXJ0ZXh0LFxuICAgICAgICBwcml2YXRla2V5LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NlbnNpdGl2ZSBzZW5zaXRpdmV9IHRha2VzIGFueSB2YWx1ZSBhbmQgcmV0dXJucyBhIGNvcHkgb2YgaXQgbWFya2VkIHNvIHRoYXQgVGVycmFmb3JtIHdpbGwgdHJlYXQgaXQgYXMgc2Vuc2l0aXZlLCB3aXRoIHRoZSBzYW1lIG1lYW5pbmcgYW5kIGJlaGF2aW9yIGFzIGZvciBbc2Vuc2l0aXZlIGlucHV0IHZhcmlhYmxlc10oL3RlcnJhZm9ybS9sYW5ndWFnZS92YWx1ZXMvdmFyaWFibGVzI3N1cHByZXNzaW5nLXZhbHVlcy1pbi1jbGktb3V0cHV0KS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBzdGF0aWMgc2Vuc2l0aXZlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJzZW5zaXRpdmVcIiwgW2FueVZhbHVlXSkodmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2V0aW50ZXJzZWN0aW9uIHNldGludGVyc2VjdGlvbn0gZnVuY3Rpb24gdGFrZXMgbXVsdGlwbGUgc2V0cyBhbmQgcHJvZHVjZXMgYSBzaW5nbGUgc2V0IGNvbnRhaW5pbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBhbGwgb2YgdGhlIGdpdmVuIHNldHMgaGF2ZSBpbiBjb21tb24uIEluIG90aGVyIHdvcmRzLCBpdCBjb21wdXRlcyB0aGUgW2ludGVyc2VjdGlvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZXJzZWN0aW9uX1xcKHNldF90aGVvcnlcXCkpIG9mIHRoZSBzZXRzLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGZpcnN0X3NldFxuICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PGFueT4+fSBvdGhlcl9zZXRzXG4gICAqL1xuICBzdGF0aWMgc2V0aW50ZXJzZWN0aW9uKGZpcnN0X3NldDogYW55W10sIG90aGVyX3NldHM6IGFueVtdW10pIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzZXRpbnRlcnNlY3Rpb25cIiwgW1xuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgICB2YXJpYWRpYyhsaXN0T2YoYW55VmFsdWUpKSxcbiAgICAgIF0pKGZpcnN0X3NldCwgb3RoZXJfc2V0cyksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2V0cHJvZHVjdCBzZXRwcm9kdWN0fSBmdW5jdGlvbiBmaW5kcyBhbGwgb2YgdGhlIHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiBlbGVtZW50cyBmcm9tIGFsbCBvZiB0aGUgZ2l2ZW4gc2V0cyBieSBjb21wdXRpbmcgdGhlIFtDYXJ0ZXNpYW4gcHJvZHVjdF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FydGVzaWFuX3Byb2R1Y3QpLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IHNldHNcbiAgICovXG4gIHN0YXRpYyBzZXRwcm9kdWN0KHNldHM6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwic2V0cHJvZHVjdFwiLCBbdmFyaWFkaWMoYW55VmFsdWUpXSkoc2V0cykpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zZXRzdWJ0cmFjdCBzZXRzdWJ0cmFjdH0gZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBzZXQgY29udGFpbmluZyB0aGUgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3Qgc2V0IHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzZWNvbmQgc2V0LiBJbiBvdGhlciB3b3JkcywgaXQgY29tcHV0ZXMgdGhlIFtyZWxhdGl2ZSBjb21wbGVtZW50XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21wbGVtZW50X1xcKHNldF90aGVvcnlcXCkjUmVsYXRpdmVfY29tcGxlbWVudCkgb2YgdGhlIHNlY29uZCBzZXQuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYVxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGJcbiAgICovXG4gIHN0YXRpYyBzZXRzdWJ0cmFjdChhOiBhbnlbXSwgYjogYW55W10pIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzZXRzdWJ0cmFjdFwiLCBbbGlzdE9mKGFueVZhbHVlKSwgbGlzdE9mKGFueVZhbHVlKV0pKFxuICAgICAgICBhLFxuICAgICAgICBiLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zZXR1bmlvbiBzZXR1bmlvbn0gZnVuY3Rpb24gdGFrZXMgbXVsdGlwbGUgc2V0cyBhbmQgcHJvZHVjZXMgYSBzaW5nbGUgc2V0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGZyb20gYWxsIG9mIHRoZSBnaXZlbiBzZXRzLiBJbiBvdGhlciB3b3JkcywgaXQgY29tcHV0ZXMgdGhlIFt1bmlvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5pb25fXFwoc2V0X3RoZW9yeVxcKSkgb2YgdGhlIHNldHMuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gZmlyc3Rfc2V0XG4gICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8YW55Pj59IG90aGVyX3NldHNcbiAgICovXG4gIHN0YXRpYyBzZXR1bmlvbihmaXJzdF9zZXQ6IGFueVtdLCBvdGhlcl9zZXRzOiBhbnlbXVtdKSB7XG4gICAgcmV0dXJuIGFzTGlzdChcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwic2V0dW5pb25cIiwgW1xuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgICB2YXJpYWRpYyhsaXN0T2YoYW55VmFsdWUpKSxcbiAgICAgIF0pKGZpcnN0X3NldCwgb3RoZXJfc2V0cyksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zaGExIHNoYTF9IGNvbXB1dGVzIHRoZSBTSEExIGhhc2ggb2YgYSBnaXZlbiBzdHJpbmcgYW5kIGVuY29kZXMgaXQgd2l0aCBoZXhhZGVjaW1hbCBkaWdpdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBzaGExKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwic2hhMVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zaGEyNTYgc2hhMjU2fSBjb21wdXRlcyB0aGUgU0hBMjU2IGhhc2ggb2YgYSBnaXZlbiBzdHJpbmcgYW5kIGVuY29kZXMgaXQgd2l0aCBoZXhhZGVjaW1hbCBkaWdpdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBzaGEyNTYoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzaGEyNTZcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2hhNTEyIHNoYTUxMn0gY29tcHV0ZXMgdGhlIFNIQTUxMiBoYXNoIG9mIGEgZ2l2ZW4gc3RyaW5nIGFuZCBlbmNvZGVzIGl0IHdpdGggaGV4YWRlY2ltYWwgZGlnaXRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgc2hhNTEyKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwic2hhNTEyXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NpZ251bSBzaWdudW19IGRldGVybWluZXMgdGhlIHNpZ24gb2YgYSBudW1iZXIsIHJldHVybmluZyBhIG51bWJlciBiZXR3ZWVuIC0xIGFuZCAxIHRvIHJlcHJlc2VudCB0aGUgc2lnbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICAgKi9cbiAgc3RhdGljIHNpZ251bShudW06IG51bWJlcikge1xuICAgIHJldHVybiBhc051bWJlcih0ZXJyYWZvcm1GdW5jdGlvbihcInNpZ251bVwiLCBbbnVtZXJpY1ZhbHVlXSkobnVtKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2xpY2Ugc2xpY2V9IGV4dHJhY3RzIHNvbWUgY29uc2VjdXRpdmUgZWxlbWVudHMgZnJvbSB3aXRoaW4gYSBsaXN0LlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRfaW5kZXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZF9pbmRleFxuICAgKi9cbiAgc3RhdGljIHNsaWNlKGxpc3Q6IGFueSwgc3RhcnRfaW5kZXg6IG51bWJlciwgZW5kX2luZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNsaWNlXCIsIFthbnlWYWx1ZSwgbnVtZXJpY1ZhbHVlLCBudW1lcmljVmFsdWVdKShcbiAgICAgICAgbGlzdCxcbiAgICAgICAgc3RhcnRfaW5kZXgsXG4gICAgICAgIGVuZF9pbmRleCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zb3J0IHNvcnR9IHRha2VzIGEgbGlzdCBvZiBzdHJpbmdzIGFuZCByZXR1cm5zIGEgbmV3IGxpc3Qgd2l0aCB0aG9zZSBzdHJpbmdzIHNvcnRlZCBsZXhpY29ncmFwaGljYWxseS5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgc29ydChsaXN0OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJzb3J0XCIsIFtsaXN0T2YoYW55VmFsdWUpXSkobGlzdCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NwbGl0IHNwbGl0fSBwcm9kdWNlcyBhIGxpc3QgYnkgZGl2aWRpbmcgYSBnaXZlbiBzdHJpbmcgYXQgYWxsIG9jY3VycmVuY2VzIG9mIGEgZ2l2ZW4gc2VwYXJhdG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBzcGxpdChzZXBhcmF0b3I6IHN0cmluZywgc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzcGxpdFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoc2VwYXJhdG9yLCBzdHIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3RhcnRzd2l0aCBzdGFydHN3aXRofSB0YWtlcyB0d28gdmFsdWVzOiBhIHN0cmluZyB0byBjaGVjayBhbmQgYSBwcmVmaXggc3RyaW5nLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoZSBzdHJpbmcgYmVnaW5zIHdpdGggdGhhdCBleGFjdCBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKi9cbiAgc3RhdGljIHN0YXJ0c3dpdGgoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzQm9vbGVhbihcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwic3RhcnRzd2l0aFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoc3RyLCBwcmVmaXgpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3RyY29udGFpbnMgc3RyY29udGFpbnN9IHRha2VzIHR3byB2YWx1ZXM6IGEgc3RyaW5nIHRvIGNoZWNrIGFuZCBhbiBleHBlY3RlZCBzdWJzdHJpbmcuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmluZyBoYXMgdGhlIHN1YnN0cmluZyBjb250YWluZWQgd2l0aGluIGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJzdHJcbiAgICovXG4gIHN0YXRpYyBzdHJjb250YWlucyhzdHI6IHN0cmluZywgc3Vic3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzdHJjb250YWluc1wiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoc3RyLCBzdWJzdHIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3RycmV2IHN0cnJldn0gcmV2ZXJzZXMgdGhlIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuIE5vdGUgdGhhdCB0aGUgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBhcyBfVW5pY29kZSBjaGFyYWN0ZXJzXyAoaW4gdGVjaG5pY2FsIHRlcm1zLCBVbmljb2RlIFtncmFwaGVtZSBjbHVzdGVyIGJvdW5kYXJpZXNdKGh0dHBzOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjI5LyNHcmFwaGVtZV9DbHVzdGVyX0JvdW5kYXJpZXMpIGFyZSByZXNwZWN0ZWQpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgc3RycmV2KHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwic3RycmV2XCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3N1YnN0ciBzdWJzdHJ9IGV4dHJhY3RzIGEgc3Vic3RyaW5nIGZyb20gYSBnaXZlbiBzdHJpbmcgYnkgb2Zmc2V0IGFuZCAobWF4aW11bSkgbGVuZ3RoLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICAgKi9cbiAgc3RhdGljIHN1YnN0cihzdHI6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzdWJzdHJcIiwgW3N0cmluZ1ZhbHVlLCBudW1lcmljVmFsdWUsIG51bWVyaWNWYWx1ZV0pKFxuICAgICAgICBzdHIsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgbGVuZ3RoLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3N1bSBzdW19IHRha2VzIGEgbGlzdCBvciBzZXQgb2YgbnVtYmVycyBhbmQgcmV0dXJucyB0aGUgc3VtIG9mIHRob3NlIG51bWJlcnMuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgc3VtKGxpc3Q6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInN1bVwiLCBbYW55VmFsdWVdKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdGVtcGxhdGVmaWxlIHRlbXBsYXRlZmlsZX0gcmVhZHMgdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggYW5kIHJlbmRlcnMgaXRzIGNvbnRlbnQgYXMgYSB0ZW1wbGF0ZSB1c2luZyBhIHN1cHBsaWVkIHNldCBvZiB0ZW1wbGF0ZSB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqIEBwYXJhbSB7YW55fSB2YXJzXG4gICAqL1xuICBzdGF0aWMgdGVtcGxhdGVmaWxlKHBhdGg6IHN0cmluZywgdmFyczogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0ZW1wbGF0ZWZpbGVcIiwgW3N0cmluZ1ZhbHVlLCBhbnlWYWx1ZV0pKHBhdGgsIHZhcnMpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdGV4dGRlY29kZWJhc2U2NCB0ZXh0ZGVjb2RlYmFzZTY0fSBmdW5jdGlvbiBkZWNvZGVzIGEgc3RyaW5nIHRoYXQgd2FzIHByZXZpb3VzbHkgQmFzZTY0LWVuY29kZWQsIGFuZCB0aGVuIGludGVycHJldHMgdGhlIHJlc3VsdCBhcyBjaGFyYWN0ZXJzIGluIGEgc3BlY2lmaWVkIGNoYXJhY3RlciBlbmNvZGluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RpbmdcbiAgICovXG4gIHN0YXRpYyB0ZXh0ZGVjb2RlYmFzZTY0KHNvdXJjZTogc3RyaW5nLCBlbmNvZGluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0ZXh0ZGVjb2RlYmFzZTY0XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShcbiAgICAgICAgc291cmNlLFxuICAgICAgICBlbmNvZGluZyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90ZXh0ZW5jb2RlYmFzZTY0IHRleHRlbmNvZGViYXNlNjR9IGVuY29kZXMgdGhlIHVuaWNvZGUgY2hhcmFjdGVycyBpbiBhIGdpdmVuIHN0cmluZyB1c2luZyBhIHNwZWNpZmllZCBjaGFyYWN0ZXIgZW5jb2RpbmcsIHJldHVybmluZyB0aGUgcmVzdWx0IGJhc2U2NCBlbmNvZGVkIGJlY2F1c2UgVGVycmFmb3JtIGxhbmd1YWdlIHN0cmluZ3MgYXJlIGFsd2F5cyBzZXF1ZW5jZXMgb2YgdW5pY29kZSBjaGFyYWN0ZXJzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICAgKi9cbiAgc3RhdGljIHRleHRlbmNvZGViYXNlNjQoc3RyOiBzdHJpbmcsIGVuY29kaW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRleHRlbmNvZGViYXNlNjRcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKFxuICAgICAgICBzdHIsXG4gICAgICAgIGVuY29kaW5nLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RpbWVhZGQgdGltZWFkZH0gYWRkcyBhIGR1cmF0aW9uIHRvIGEgdGltZXN0YW1wLCByZXR1cm5pbmcgYSBuZXcgdGltZXN0YW1wLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGltZXN0YW1wXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkdXJhdGlvblxuICAgKi9cbiAgc3RhdGljIHRpbWVhZGQodGltZXN0YW1wOiBzdHJpbmcsIGR1cmF0aW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRpbWVhZGRcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RpbWVjbXAgdGltZWNtcH0gY29tcGFyZXMgdHdvIHRpbWVzdGFtcHMgYW5kIHJldHVybnMgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSBvcmRlcmluZyBvZiB0aGUgaW5zdGFudHMgdGhvc2UgdGltZXN0YW1wcyByZXByZXNlbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lc3RhbXBfYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGltZXN0YW1wX2JcbiAgICovXG4gIHN0YXRpYyB0aW1lY21wKHRpbWVzdGFtcF9hOiBzdHJpbmcsIHRpbWVzdGFtcF9iOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRpbWVjbXBcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKFxuICAgICAgICB0aW1lc3RhbXBfYSxcbiAgICAgICAgdGltZXN0YW1wX2IsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdGltZXN0YW1wIHRpbWVzdGFtcH0gcmV0dXJucyBhIFVUQyB0aW1lc3RhbXAgc3RyaW5nIGluIFtSRkMgMzMzOV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkpIGZvcm1hdC5cbiAgICovXG4gIHN0YXRpYyB0aW1lc3RhbXAoKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwidGltZXN0YW1wXCIsIFtdKSgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90aXRsZSB0aXRsZX0gY29udmVydHMgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgaW4gdGhlIGdpdmVuIHN0cmluZyB0byB1cHBlcmNhc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyB0aXRsZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInRpdGxlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RvYm9vbCB0b2Jvb2x9IGNvbnZlcnRzIGl0cyBhcmd1bWVudCB0byBhIGJvb2xlYW4gdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2XG4gICAqL1xuICBzdGF0aWMgdG9ib29sKHY6IGFueSkge1xuICAgIHJldHVybiBhc0Jvb2xlYW4odGVycmFmb3JtRnVuY3Rpb24oXCJ0b2Jvb2xcIiwgW2FueVZhbHVlXSkodikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RvbGlzdCB0b2xpc3R9IGNvbnZlcnRzIGl0cyBhcmd1bWVudCB0byBhIGxpc3QgdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2XG4gICAqL1xuICBzdGF0aWMgdG9saXN0KHY6IGFueSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJ0b2xpc3RcIiwgW2FueVZhbHVlXSkodikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RvbWFwIHRvbWFwfSBjb252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBtYXAgdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2XG4gICAqL1xuICBzdGF0aWMgdG9tYXAodjogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwidG9tYXBcIiwgW2FueVZhbHVlXSkodikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RvbnVtYmVyIHRvbnVtYmVyfSBjb252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBudW1iZXIgdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2XG4gICAqL1xuICBzdGF0aWMgdG9udW1iZXIodjogYW55KSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwidG9udW1iZXJcIiwgW2FueVZhbHVlXSkodikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3Rvc2V0IHRvc2V0fSBjb252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBzZXQgdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2XG4gICAqL1xuICBzdGF0aWMgdG9zZXQodjogYW55KSB7XG4gICAgcmV0dXJuIGFzTGlzdCh0ZXJyYWZvcm1GdW5jdGlvbihcInRvc2V0XCIsIFthbnlWYWx1ZV0pKHYpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90b3N0cmluZyB0b3N0cmluZ30gY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgc3RyaW5nIHZhbHVlLlxuICAgKiBAcGFyYW0ge2FueX0gdlxuICAgKi9cbiAgc3RhdGljIHRvc3RyaW5nKHY6IGFueSkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInRvc3RyaW5nXCIsIFthbnlWYWx1ZV0pKHYpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90cmFuc3Bvc2UgdHJhbnNwb3NlfSB0YWtlcyBhIG1hcCBvZiBsaXN0cyBvZiBzdHJpbmdzIGFuZCBzd2FwcyB0aGUga2V5cyBhbmQgdmFsdWVzIHRvIHByb2R1Y2UgYSBuZXcgbWFwIG9mIGxpc3RzIG9mIHN0cmluZ3MuXG4gICAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgQXJyYXk8c3RyaW5nPj59IHZhbHVlc1xuICAgKi9cbiAgc3RhdGljIHRyYW5zcG9zZSh2YWx1ZXM6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInRyYW5zcG9zZVwiLCBbbWFwVmFsdWVdKSh2YWx1ZXMpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90cmltIHRyaW19IHJlbW92ZXMgdGhlIHNwZWNpZmllZCBzZXQgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBnaXZlbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1dHNldFxuICAgKi9cbiAgc3RhdGljIHRyaW0oc3RyOiBzdHJpbmcsIGN1dHNldDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0cmltXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIGN1dHNldCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90cmltcHJlZml4IHRyaW1wcmVmaXh9IHJlbW92ZXMgdGhlIHNwZWNpZmllZCBwcmVmaXggZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGdpdmVuIHN0cmluZy4gSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXgsIHRoZSBzdHJpbmcgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICovXG4gIHN0YXRpYyB0cmltcHJlZml4KHN0cjogc3RyaW5nLCBwcmVmaXg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidHJpbXByZWZpeFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoc3RyLCBwcmVmaXgpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdHJpbXNwYWNlIHRyaW1zcGFjZX0gcmVtb3ZlcyBhbnkgc3BhY2UgY2hhcmFjdGVycyBmcm9tIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBnaXZlbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyB0cmltc3BhY2Uoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ0cmltc3BhY2VcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdHJpbXN1ZmZpeCB0cmltc3VmZml4fSByZW1vdmVzIHRoZSBzcGVjaWZpZWQgc3VmZml4IGZyb20gdGhlIGVuZCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWZmaXhcbiAgICovXG4gIHN0YXRpYyB0cmltc3VmZml4KHN0cjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidHJpbXN1ZmZpeFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoc3RyLCBzdWZmaXgpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdHJ5IHRyeX0gZXZhbHVhdGVzIGFsbCBvZiBpdHMgYXJndW1lbnQgZXhwcmVzc2lvbnMgaW4gdHVybiBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBmaXJzdCBvbmUgdGhhdCBkb2VzIG5vdCBwcm9kdWNlIGFueSBlcnJvcnMuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gZXhwcmVzc2lvbnNcbiAgICovXG4gIHN0YXRpYyB0cnkoZXhwcmVzc2lvbnM6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwidHJ5XCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShleHByZXNzaW9ucykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3VwcGVyIHVwcGVyfSBjb252ZXJ0cyBhbGwgY2FzZWQgbGV0dGVycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHVwcGVyY2FzZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHVwcGVyKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwidXBwZXJcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdXJsZW5jb2RlIHVybGVuY29kZX0gYXBwbGllcyBVUkwgZW5jb2RpbmcgdG8gYSBnaXZlbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyB1cmxlbmNvZGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ1cmxlbmNvZGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdXVpZCB1dWlkfSBnZW5lcmF0ZXMgYSB1bmlxdWUgaWRlbnRpZmllciBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgdXVpZCgpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ1dWlkXCIsIFtdKSgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy91dWlkdjUgdXVpZHY1fSBnZW5lcmF0ZXMgYSBfbmFtZS1iYXNlZF8gVVVJRCwgYXMgZGVzY3JpYmVkIGluIFtSRkMgNDEyMiBzZWN0aW9uIDQuM10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi00LjMpLCBhbHNvIGtub3duIGFzIGEgXCJ2ZXJzaW9uIDVcIiBVVUlELlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNwYWNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBzdGF0aWMgdXVpZHY1KG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInV1aWR2NVwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkobmFtZXNwYWNlLCBuYW1lKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3ZhbHVlcyB2YWx1ZXN9IHRha2VzIGEgbWFwIGFuZCByZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIHRoZSB2YWx1ZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoYXQgbWFwLlxuICAgKiBAcGFyYW0ge2FueX0gbWFwcGluZ1xuICAgKi9cbiAgc3RhdGljIHZhbHVlcyhtYXBwaW5nOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJ2YWx1ZXNcIiwgW2FueVZhbHVlXSkobWFwcGluZykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3lhbWxkZWNvZGUgeWFtbGRlY29kZX0gcGFyc2VzIGEgc3RyaW5nIGFzIGEgc3Vic2V0IG9mIFlBTUwsIGFuZCBwcm9kdWNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIGl0cyB2YWx1ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNyY1xuICAgKi9cbiAgc3RhdGljIHlhbWxkZWNvZGUoc3JjOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJ5YW1sZGVjb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHNyYykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3lhbWxlbmNvZGUgeWFtbGVuY29kZX0gZW5jb2RlcyBhIGdpdmVuIHZhbHVlIHRvIGEgc3RyaW5nIHVzaW5nIFtZQU1MIDEuMl0oaHR0cHM6Ly95YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwpIGJsb2NrIHN5bnRheC5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBzdGF0aWMgeWFtbGVuY29kZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwieWFtbGVuY29kZVwiLCBbYW55VmFsdWVdKSh2YWx1ZSkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3ppcG1hcCB6aXBtYXB9IGNvbnN0cnVjdHMgYSBtYXAgZnJvbSBhIGxpc3Qgb2Yga2V5cyBhbmQgYSBjb3JyZXNwb25kaW5nIGxpc3Qgb2YgdmFsdWVzLlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGtleXNcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlc1xuICAgKi9cbiAgc3RhdGljIHppcG1hcChrZXlzOiBzdHJpbmdbXSwgdmFsdWVzOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInppcG1hcFwiLCBbbGlzdE9mKGFueVZhbHVlKSwgYW55VmFsdWVdKShrZXlzLCB2YWx1ZXMpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
886
+ FnGenerated[_a] = { fqn: "cdktn.FnGenerated", version: "0.23.2" };
887
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWZ1bmN0aW9ucy5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3Rpb25zL3RlcnJhZm9ybS1mdW5jdGlvbnMuZ2VuZXJhdGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQzs7O0dBR0c7QUFDSCx1Q0FhbUI7QUFDbkIsK0NBQStDO0FBQy9DLE1BQWEsV0FBVztJQUN0Qjs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxzQkFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVc7UUFDeEIsT0FBTyxJQUFBLG1CQUFTLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVc7UUFDeEIsT0FBTyxJQUFBLG1CQUFTLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQVc7UUFDM0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQVk7UUFDMUIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxVQUFVLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FB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Q0FBQztJQUN0RSxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBYyxFQUFFLE1BQVc7UUFDdkMsT0FBTyxJQUFBLGVBQUssRUFDVixJQUFBLDJCQUFpQixFQUFDLFFBQVEsRUFBRSxDQUFDLElBQUEsZ0JBQU0sRUFBQyxrQkFBUSxDQUFDLEVBQUUsa0JBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUN4RSxDQUFDO0lBQ0osQ0FBQzs7QUFqL0JILGtDQWsvQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuLypcbiAqIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgdG9vbHMvZ2VuZXJhdGUtZnVuY3Rpb24tYmluZGluZ3MuXG4gKiBUbyB1cGRhdGUgdGhpcyBmaWxlIGV4ZWN1dGUgJ3lhcm4gcnVuIGdlbmVyYXRlLWZ1bmN0aW9uLWJpbmRpbmdzJyBpbiB0aGUgcm9vdCBvZiB0aGUgcmVwb3NpdG9yeVxuICovXG5pbXBvcnQge1xuICBhbnlWYWx1ZSxcbiAgYXNBbnksXG4gIGFzQm9vbGVhbixcbiAgYXNMaXN0LFxuICBhc051bWJlcixcbiAgYXNTdHJpbmcsXG4gIGxpc3RPZixcbiAgbWFwVmFsdWUsXG4gIG51bWVyaWNWYWx1ZSxcbiAgc3RyaW5nVmFsdWUsXG4gIHRlcnJhZm9ybUZ1bmN0aW9uLFxuICB2YXJpYWRpYyxcbn0gZnJvbSBcIi4vaGVscGVyc1wiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBGbkdlbmVyYXRlZCB7XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2FicyBhYnN9IHJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBnaXZlbiBudW1iZXIuIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgbnVtYmVyIGlzIHplcm8gb3IgcG9zaXRpdmUgdGhlbiBpdCBpcyByZXR1cm5lZCBhcy1pcywgYnV0IGlmIGl0IGlzIG5lZ2F0aXZlIHRoZW4gaXQgaXMgbXVsdGlwbGllZCBieSAtMSB0byBtYWtlIGl0IHBvc2l0aXZlIGJlZm9yZSByZXR1cm5pbmcgaXQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAgICovXG4gIHN0YXRpYyBhYnMobnVtOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIodGVycmFmb3JtRnVuY3Rpb24oXCJhYnNcIiwgW251bWVyaWNWYWx1ZV0pKG51bSkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Fic3BhdGggYWJzcGF0aH0gdGFrZXMgYSBzdHJpbmcgY29udGFpbmluZyBhIGZpbGVzeXN0ZW0gcGF0aCBhbmQgY29udmVydHMgaXQgdG8gYW4gYWJzb2x1dGUgcGF0aC4gVGhhdCBpcywgaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlLCBpdCB3aWxsIGJlIGpvaW5lZCB3aXRoIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGFic3BhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYWJzcGF0aFwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYWxsdHJ1ZSBhbGx0cnVlfSByZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgaW4gYSBnaXZlbiBjb2xsZWN0aW9uIGFyZSBgdHJ1ZWAgb3IgYFwidHJ1ZVwiYC4gSXQgYWxzbyByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY29sbGVjdGlvbiBpcyBlbXB0eS5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgYWxsdHJ1ZShsaXN0OiBhbnlbXSkge1xuICAgIHJldHVybiBhc0Jvb2xlYW4odGVycmFmb3JtRnVuY3Rpb24oXCJhbGx0cnVlXCIsIFtsaXN0T2YoYW55VmFsdWUpXSkobGlzdCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2FueXRydWUgYW55dHJ1ZX0gcmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgaW4gYSBnaXZlbiBjb2xsZWN0aW9uIGlzIGB0cnVlYCBvciBgXCJ0cnVlXCJgLiBJdCBhbHNvIHJldHVybnMgYGZhbHNlYCBpZiB0aGUgY29sbGVjdGlvbiBpcyBlbXB0eS5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgYW55dHJ1ZShsaXN0OiBhbnlbXSkge1xuICAgIHJldHVybiBhc0Jvb2xlYW4odGVycmFmb3JtRnVuY3Rpb24oXCJhbnl0cnVlXCIsIFtsaXN0T2YoYW55VmFsdWUpXSkobGlzdCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2U2NGRlY29kZSBiYXNlNjRkZWNvZGV9IHRha2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBCYXNlNjQgY2hhcmFjdGVyIHNlcXVlbmNlIGFuZCByZXR1cm5zIHRoZSBvcmlnaW5hbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBiYXNlNjRkZWNvZGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlNjRkZWNvZGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYmFzZTY0ZW5jb2RlIGJhc2U2NGVuY29kZX0gYXBwbGllcyBCYXNlNjQgZW5jb2RpbmcgdG8gYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBiYXNlNjRlbmNvZGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlNjRlbmNvZGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYmFzZTY0Z3ppcCBiYXNlNjRnemlwfSBjb21wcmVzc2VzIGEgc3RyaW5nIHdpdGggZ3ppcCBhbmQgdGhlbiBlbmNvZGVzIHRoZSByZXN1bHQgaW4gQmFzZTY0IGVuY29kaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0Z3ppcChzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImJhc2U2NGd6aXBcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYmFzZTY0c2hhMjU2IGJhc2U2NHNoYTI1Nn0gY29tcHV0ZXMgdGhlIFNIQTI1NiBoYXNoIG9mIGEgZ2l2ZW4gc3RyaW5nIGFuZCBlbmNvZGVzIGl0IHdpdGggQmFzZTY0LiBUaGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIGBiYXNlNjRlbmNvZGUoc2hhMjU2KFwidGVzdFwiKSlgIHNpbmNlIGBzaGEyNTYoKWAgcmV0dXJucyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGJhc2U2NHNoYTI1NihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImJhc2U2NHNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9iYXNlNjRzaGE1MTIgYmFzZTY0c2hhNTEyfSBjb21wdXRlcyB0aGUgU0hBNTEyIGhhc2ggb2YgYSBnaXZlbiBzdHJpbmcgYW5kIGVuY29kZXMgaXQgd2l0aCBCYXNlNjQuIFRoaXMgaXMgbm90IGVxdWl2YWxlbnQgdG8gYGJhc2U2NGVuY29kZShzaGE1MTIoXCJ0ZXN0XCIpKWAgc2luY2UgYHNoYTUxMigpYCByZXR1cm5zIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0c2hhNTEyKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmFzZTY0c2hhNTEyXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2VuYW1lIGJhc2VuYW1lfSB0YWtlcyBhIHN0cmluZyBjb250YWluaW5nIGEgZmlsZXN5c3RlbSBwYXRoIGFuZCByZW1vdmVzIGFsbCBleGNlcHQgdGhlIGxhc3QgcG9ydGlvbiBmcm9tIGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGJhc2VuYW1lKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImJhc2VuYW1lXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYmNyeXB0IGJjcnlwdH0gY29tcHV0ZXMgYSBoYXNoIG9mIHRoZSBnaXZlbiBzdHJpbmcgdXNpbmcgdGhlIEJsb3dmaXNoIGNpcGhlciwgcmV0dXJuaW5nIGEgc3RyaW5nIGluIFt0aGUgX01vZHVsYXIgQ3J5cHQgRm9ybWF0X10oaHR0cHM6Ly9wYXNzbGliLnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9tb2R1bGFyX2NyeXB0X2Zvcm1hdC5odG1sKSB1c3VhbGx5IGV4cGVjdGVkIGluIHRoZSBzaGFkb3cgcGFzc3dvcmQgZmlsZSBvbiBtYW55IFVuaXggc3lzdGVtcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGNvc3RcbiAgICovXG4gIHN0YXRpYyBfYmNyeXB0KHN0cjogc3RyaW5nLCBjb3N0OiBudW1iZXJbXSkge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmNyeXB0XCIsIFtzdHJpbmdWYWx1ZSwgdmFyaWFkaWMobnVtZXJpY1ZhbHVlKV0pKFxuICAgICAgICBzdHIsXG4gICAgICAgIGNvc3QsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2FuIGNhbn0gZXZhbHVhdGVzIHRoZSBnaXZlbiBleHByZXNzaW9uIGFuZCByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGV4cHJlc3Npb24gcHJvZHVjZWQgYSByZXN1bHQgd2l0aG91dCBhbnkgZXJyb3JzLlxuICAgKiBAcGFyYW0ge2FueX0gZXhwcmVzc2lvblxuICAgKi9cbiAgc3RhdGljIGNhbihleHByZXNzaW9uOiBhbnkpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2FuXCIsIFthbnlWYWx1ZV0pKGV4cHJlc3Npb24pKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jZWlsIGNlaWx9IHJldHVybnMgdGhlIGNsb3Nlc3Qgd2hvbGUgbnVtYmVyIHRoYXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZSwgd2hpY2ggbWF5IGJlIGEgZnJhY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAgICovXG4gIHN0YXRpYyBjZWlsKG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2VpbFwiLCBbbnVtZXJpY1ZhbHVlXSkobnVtKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2hvbXAgY2hvbXB9IHJlbW92ZXMgbmV3bGluZSBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2YgYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBjaG9tcChzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImNob21wXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NodW5rbGlzdCBjaHVua2xpc3R9IHNwbGl0cyBhIHNpbmdsZSBsaXN0IGludG8gZml4ZWQtc2l6ZSBjaHVua3MsIHJldHVybmluZyBhIGxpc3Qgb2YgbGlzdHMuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gbGlzdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxuICAgKi9cbiAgc3RhdGljIGNodW5rbGlzdChsaXN0OiBhbnlbXSwgc2l6ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTGlzdChcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2h1bmtsaXN0XCIsIFtsaXN0T2YoYW55VmFsdWUpLCBudW1lcmljVmFsdWVdKShcbiAgICAgICAgbGlzdCxcbiAgICAgICAgc2l6ZSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaWRyaG9zdCBjaWRyaG9zdH0gY2FsY3VsYXRlcyBhIGZ1bGwgaG9zdCBJUCBhZGRyZXNzIGZvciBhIGdpdmVuIGhvc3QgbnVtYmVyIHdpdGhpbiBhIGdpdmVuIElQIG5ldHdvcmsgYWRkcmVzcyBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhvc3RudW1cbiAgICovXG4gIHN0YXRpYyBjaWRyaG9zdChwcmVmaXg6IHN0cmluZywgaG9zdG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJjaWRyaG9zdFwiLCBbc3RyaW5nVmFsdWUsIG51bWVyaWNWYWx1ZV0pKFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGhvc3RudW0sXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2lkcm5ldG1hc2sgY2lkcm5ldG1hc2t9IGNvbnZlcnRzIGFuIElQdjQgYWRkcmVzcyBwcmVmaXggZ2l2ZW4gaW4gQ0lEUiBub3RhdGlvbiBpbnRvIGEgc3VibmV0IG1hc2sgYWRkcmVzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKi9cbiAgc3RhdGljIGNpZHJuZXRtYXNrKHByZWZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2lkcm5ldG1hc2tcIiwgW3N0cmluZ1ZhbHVlXSkocHJlZml4KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2lkcnN1Ym5ldCBjaWRyc3VibmV0fSBjYWxjdWxhdGVzIGEgc3VibmV0IGFkZHJlc3Mgd2l0aGluIGdpdmVuIElQIG5ldHdvcmsgYWRkcmVzcyBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ld2JpdHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ldG51bVxuICAgKi9cbiAgc3RhdGljIGNpZHJzdWJuZXQocHJlZml4OiBzdHJpbmcsIG5ld2JpdHM6IG51bWJlciwgbmV0bnVtOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImNpZHJzdWJuZXRcIiwgW1xuICAgICAgICBzdHJpbmdWYWx1ZSxcbiAgICAgICAgbnVtZXJpY1ZhbHVlLFxuICAgICAgICBudW1lcmljVmFsdWUsXG4gICAgICBdKShwcmVmaXgsIG5ld2JpdHMsIG5ldG51bSksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaWRyc3VibmV0cyBjaWRyc3VibmV0c30gY2FsY3VsYXRlcyBhIHNlcXVlbmNlIG9mIGNvbnNlY3V0aXZlIElQIGFkZHJlc3MgcmFuZ2VzIHdpdGhpbiBhIHBhcnRpY3VsYXIgQ0lEUiBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBuZXdiaXRzXG4gICAqL1xuICBzdGF0aWMgY2lkcnN1Ym5ldHMocHJlZml4OiBzdHJpbmcsIG5ld2JpdHM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTGlzdChcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2lkcnN1Ym5ldHNcIiwgW3N0cmluZ1ZhbHVlLCB2YXJpYWRpYyhudW1lcmljVmFsdWUpXSkoXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgbmV3Yml0cyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jb2FsZXNjZSBjb2FsZXNjZX0gdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IHZhbHNcbiAgICovXG4gIHN0YXRpYyBjb2FsZXNjZSh2YWxzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImNvYWxlc2NlXCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKSh2YWxzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY29hbGVzY2VsaXN0IGNvYWxlc2NlbGlzdH0gdGFrZXMgYW55IG51bWJlciBvZiBsaXN0IGFyZ3VtZW50cyBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgZW1wdHkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gdmFsc1xuICAgKi9cbiAgc3RhdGljIGNvYWxlc2NlbGlzdCh2YWxzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImNvYWxlc2NlbGlzdFwiLCBbdmFyaWFkaWMoYW55VmFsdWUpXSkodmFscykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvbXBhY3QgY29tcGFjdH0gdGFrZXMgYSBsaXN0IG9mIHN0cmluZ3MgYW5kIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIGFueSBlbXB0eSBzdHJpbmcgZWxlbWVudHMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgY29tcGFjdChsaXN0OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJjb21wYWN0XCIsIFtsaXN0T2YoYW55VmFsdWUpXSkobGlzdCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvbmNhdCBjb25jYXR9IHRha2VzIHR3byBvciBtb3JlIGxpc3RzIGFuZCBjb21iaW5lcyB0aGVtIGludG8gYSBzaW5nbGUgbGlzdC5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBzZXFzXG4gICAqL1xuICBzdGF0aWMgY29uY2F0KHNlcXM6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwiY29uY2F0XCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShzZXFzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY29udGFpbnMgY29udGFpbnN9IGRldGVybWluZXMgd2hldGhlciBhIGdpdmVuIGxpc3Qgb3Igc2V0IGNvbnRhaW5zIGEgZ2l2ZW4gc2luZ2xlIHZhbHVlIGFzIG9uZSBvZiBpdHMgZWxlbWVudHMuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIGNvbnRhaW5zKGxpc3Q6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY29udGFpbnNcIiwgW2FueVZhbHVlLCBhbnlWYWx1ZV0pKGxpc3QsIHZhbHVlKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NzdmRlY29kZSBjc3ZkZWNvZGV9IGRlY29kZXMgYSBzdHJpbmcgY29udGFpbmluZyBDU1YtZm9ybWF0dGVkIGRhdGEgYW5kIHByb2R1Y2VzIGEgbGlzdCBvZiBtYXBzIHJlcHJlc2VudGluZyB0aGF0IGRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBjc3ZkZWNvZGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJjc3ZkZWNvZGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZGlybmFtZSBkaXJuYW1lfSB0YWtlcyBhIHN0cmluZyBjb250YWluaW5nIGEgZmlsZXN5c3RlbSBwYXRoIGFuZCByZW1vdmVzIHRoZSBsYXN0IHBvcnRpb24gZnJvbSBpdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBkaXJuYW1lKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImRpcm5hbWVcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Rpc3RpbmN0IGRpc3RpbmN0fSB0YWtlcyBhIGxpc3QgYW5kIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIGFueSBkdXBsaWNhdGUgZWxlbWVudHMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgZGlzdGluY3QobGlzdDogYW55W10pIHtcbiAgICByZXR1cm4gYXNMaXN0KHRlcnJhZm9ybUZ1bmN0aW9uKFwiZGlzdGluY3RcIiwgW2xpc3RPZihhbnlWYWx1ZSldKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZWxlbWVudCBlbGVtZW50fSByZXRyaWV2ZXMgYSBzaW5nbGUgZWxlbWVudCBmcm9tIGEgbGlzdC5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gICAqL1xuICBzdGF0aWMgZWxlbWVudChsaXN0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImVsZW1lbnRcIiwgW2FueVZhbHVlLCBudW1lcmljVmFsdWVdKShsaXN0LCBpbmRleCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9lbmRzd2l0aCBlbmRzd2l0aH0gdGFrZXMgdHdvIHZhbHVlczogYSBzdHJpbmcgdG8gY2hlY2sgYW5kIGEgc3VmZml4IHN0cmluZy4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlyc3Qgc3RyaW5nIGVuZHMgd2l0aCB0aGF0IGV4YWN0IHN1ZmZpeC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VmZml4XG4gICAqL1xuICBzdGF0aWMgZW5kc3dpdGgoc3RyOiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzQm9vbGVhbihcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiZW5kc3dpdGhcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHN0ciwgc3VmZml4KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2ZpbGUgZmlsZX0gcmVhZHMgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhbmQgcmV0dXJucyB0aGVtIGFzIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGUocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZWJhc2U2NCBmaWxlYmFzZTY0fSByZWFkcyB0aGUgY29udGVudHMgb2YgYSBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoIGFuZCByZXR1cm5zIHRoZW0gYXMgYSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZWJhc2U2NChwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlYmFzZTY0XCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlYmFzZTY0c2hhMjU2IGZpbGViYXNlNjRzaGEyNTZ9IGlzIGEgdmFyaWFudCBvZiBgYmFzZTY0c2hhMjU2YCB0aGF0IGhhc2hlcyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZWJhc2U2NHNoYTI1NihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlYmFzZTY0c2hhMjU2XCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlYmFzZTY0c2hhNTEyIGZpbGViYXNlNjRzaGE1MTJ9IGlzIGEgdmFyaWFudCBvZiBgYmFzZTY0c2hhNTEyYCB0aGF0IGhhc2hlcyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZWJhc2U2NHNoYTUxMihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlYmFzZTY0c2hhNTEyXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlZXhpc3RzIGZpbGVleGlzdHN9IGRldGVybWluZXMgd2hldGhlciBhIGZpbGUgZXhpc3RzIGF0IGEgZ2l2ZW4gcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBmaWxlZXhpc3RzKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc0Jvb2xlYW4odGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlZXhpc3RzXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlbWQ1IGZpbGVtZDV9IGlzIGEgdmFyaWFudCBvZiBgbWQ1YCB0aGF0IGhhc2hlcyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZW1kNShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlbWQ1XCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlc2V0IGZpbGVzZXR9IGVudW1lcmF0ZXMgYSBzZXQgb2YgcmVndWxhciBmaWxlIG5hbWVzIGdpdmVuIGEgcGF0aCBhbmQgcGF0dGVybi4gVGhlIHBhdGggaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGZyb20gdGhlIHJlc3VsdGluZyBzZXQgb2YgZmlsZSBuYW1lcyBhbmQgYW55IHJlc3VsdCBzdGlsbCBjb250YWluaW5nIHBhdGggc2VwYXJhdG9ycyBhbHdheXMgcmV0dXJucyBmb3J3YXJkIHNsYXNoIChgL2ApIGFzIHRoZSBwYXRoIHNlcGFyYXRvciBmb3IgY3Jvc3Mtc3lzdGVtIGNvbXBhdGliaWxpdHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG4gICAqL1xuICBzdGF0aWMgZmlsZXNldChwYXRoOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImZpbGVzZXRcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHBhdGgsIHBhdHRlcm4pLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZXNoYTEgZmlsZXNoYTF9IGlzIGEgdmFyaWFudCBvZiBgc2hhMWAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGVzaGExKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImZpbGVzaGExXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlc2hhMjU2IGZpbGVzaGEyNTZ9IGlzIGEgdmFyaWFudCBvZiBgc2hhMjU2YCB0aGF0IGhhc2hlcyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZXNoYTI1NihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlc2hhMjU2XCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlc2hhNTEyIGZpbGVzaGE1MTJ9IGlzIGEgdmFyaWFudCBvZiBgc2hhNTEyYCB0aGF0IGhhc2hlcyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZXNoYTUxMihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlc2hhNTEyXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mbGF0dGVuIGZsYXR0ZW59IHRha2VzIGEgbGlzdCBhbmQgcmVwbGFjZXMgYW55IGVsZW1lbnRzIHRoYXQgYXJlIGxpc3RzIHdpdGggYSBmbGF0dGVuZWQgc2VxdWVuY2Ugb2YgdGhlIGxpc3QgY29udGVudHMuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgZmxhdHRlbihsaXN0OiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJmbGF0dGVuXCIsIFthbnlWYWx1ZV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mbG9vciBmbG9vcn0gcmV0dXJucyB0aGUgY2xvc2VzdCB3aG9sZSBudW1iZXIgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHZhbHVlLCB3aGljaCBtYXkgYmUgYSBmcmFjdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICAgKi9cbiAgc3RhdGljIGZsb29yKG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmxvb3JcIiwgW251bWVyaWNWYWx1ZV0pKG51bSkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mb3JtYXQgZm9ybWF0fSBmdW5jdGlvbiBwcm9kdWNlcyBhIHN0cmluZyBieSBmb3JtYXR0aW5nIGEgbnVtYmVyIG9mIG90aGVyIHZhbHVlcyBhY2NvcmRpbmcgdG8gYSBzcGVjaWZpY2F0aW9uIHN0cmluZy4gSXQgaXMgc2ltaWxhciB0byB0aGUgYHByaW50ZmAgZnVuY3Rpb24gaW4gQywgYW5kIG90aGVyIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHByb2dyYW1taW5nIGxhbmd1YWdlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGFyZ3NcbiAgICovXG4gIHN0YXRpYyBmb3JtYXQoZm9ybWF0OiBzdHJpbmcsIGFyZ3M6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzQW55KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJmb3JtYXRcIiwgW3N0cmluZ1ZhbHVlLCB2YXJpYWRpYyhhbnlWYWx1ZSldKShcbiAgICAgICAgZm9ybWF0LFxuICAgICAgICBhcmdzLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Zvcm1hdGRhdGUgZm9ybWF0ZGF0ZX0gY29udmVydHMgYSB0aW1lc3RhbXAgaW50byBhIGRpZmZlcmVudCB0aW1lIGZvcm1hdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGltZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdGRhdGUoZm9ybWF0OiBzdHJpbmcsIHRpbWU6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiZm9ybWF0ZGF0ZVwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoZm9ybWF0LCB0aW1lKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Zvcm1hdGxpc3QgZm9ybWF0bGlzdH0gcHJvZHVjZXMgYSBsaXN0IG9mIHN0cmluZ3MgYnkgZm9ybWF0dGluZyBhIG51bWJlciBvZiBvdGhlciB2YWx1ZXMgYWNjb3JkaW5nIHRvIGEgc3BlY2lmaWNhdGlvbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcmdzXG4gICAqL1xuICBzdGF0aWMgZm9ybWF0bGlzdChmb3JtYXQ6IHN0cmluZywgYXJnczogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImZvcm1hdGxpc3RcIiwgW3N0cmluZ1ZhbHVlLCB2YXJpYWRpYyhhbnlWYWx1ZSldKShcbiAgICAgICAgZm9ybWF0LFxuICAgICAgICBhcmdzLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2luZGVudCBpbmRlbnR9IGFkZHMgYSBnaXZlbiBudW1iZXIgb2Ygc3BhY2VzIHRvIHRoZSBiZWdpbm5pbmdzIG9mIGFsbCBidXQgdGhlIGZpcnN0IGxpbmUgaW4gYSBnaXZlbiBtdWx0aS1saW5lIHN0cmluZy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHNwYWNlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgaW5kZW50KHNwYWNlczogbnVtYmVyLCBzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiaW5kZW50XCIsIFtudW1lcmljVmFsdWUsIHN0cmluZ1ZhbHVlXSkoc3BhY2VzLCBzdHIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvaW5kZXggaW5kZXh9IGZpbmRzIHRoZSBlbGVtZW50IGluZGV4IGZvciBhIGdpdmVuIHZhbHVlIGluIGEgbGlzdC5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBzdGF0aWMgaW5kZXgobGlzdDogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwiaW5kZXhcIiwgW2FueVZhbHVlLCBhbnlWYWx1ZV0pKGxpc3QsIHZhbHVlKSk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2pvaW4gam9pbn0gcHJvZHVjZXMgYSBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyB0b2dldGhlciBhbGwgZWxlbWVudHMgb2YgYSBnaXZlbiBsaXN0IG9mIHN0cmluZ3Mgd2l0aCB0aGUgZ2l2ZW4gZGVsaW1pdGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59IGxpc3RzXG4gICAqL1xuICBzdGF0aWMgX2pvaW4oc2VwYXJhdG9yOiBzdHJpbmcsIGxpc3RzOiBzdHJpbmdbXVtdKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJqb2luXCIsIFtzdHJpbmdWYWx1ZSwgdmFyaWFkaWMobGlzdE9mKGFueVZhbHVlKSldKShcbiAgICAgICAgc2VwYXJhdG9yLFxuICAgICAgICBsaXN0cyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9qc29uZGVjb2RlIGpzb25kZWNvZGV9IGludGVycHJldHMgYSBnaXZlbiBzdHJpbmcgYXMgSlNPTiwgcmV0dXJuaW5nIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlc3VsdCBvZiBkZWNvZGluZyB0aGF0IHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGpzb25kZWNvZGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJqc29uZGVjb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2pzb25lbmNvZGUganNvbmVuY29kZX0gZW5jb2RlcyBhIGdpdmVuIHZhbHVlIHRvIGEgc3RyaW5nIHVzaW5nIEpTT04gc3ludGF4LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsXG4gICAqL1xuICBzdGF0aWMganNvbmVuY29kZSh2YWw6IGFueSkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImpzb25lbmNvZGVcIiwgW2FueVZhbHVlXSkodmFsKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMva2V5cyBrZXlzfSB0YWtlcyBhIG1hcCBhbmQgcmV0dXJucyBhIGxpc3QgY29udGFpbmluZyB0aGUga2V5cyBmcm9tIHRoYXQgbWFwLlxuICAgKiBAcGFyYW0ge2FueX0gaW5wdXRNYXBcbiAgICovXG4gIHN0YXRpYyBrZXlzKGlucHV0TWFwOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJrZXlzXCIsIFthbnlWYWx1ZV0pKGlucHV0TWFwKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbGVuZ3RoIGxlbmd0aH0gZGV0ZXJtaW5lcyB0aGUgbGVuZ3RoIG9mIGEgZ2l2ZW4gbGlzdCwgbWFwLCBvciBzdHJpbmcuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIGxlbmd0aE9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIodGVycmFmb3JtRnVuY3Rpb24oXCJsZW5ndGhcIiwgW2FueVZhbHVlXSkodmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9sb2cgbG9nfSByZXR1cm5zIHRoZSBsb2dhcml0aG0gb2YgYSBnaXZlbiBudW1iZXIgaW4gYSBnaXZlbiBiYXNlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBiYXNlXG4gICAqL1xuICBzdGF0aWMgbG9nKG51bTogbnVtYmVyLCBiYXNlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImxvZ1wiLCBbbnVtZXJpY1ZhbHVlLCBudW1lcmljVmFsdWVdKShudW0sIGJhc2UpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2xvb2t1cCBsb29rdXB9IHJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgZWxlbWVudCBmcm9tIGEgbWFwLCBnaXZlbiBpdHMga2V5LiBJZiB0aGUgZ2l2ZW4ga2V5IGRvZXMgbm90IGV4aXN0LCB0aGUgZ2l2ZW4gZGVmYXVsdCB2YWx1ZSBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuICAgKiBAcGFyYW0ge2FueX0gaW5wdXRNYXBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGRlZmF1bHRWYWx1ZVxuICAgKi9cbiAgc3RhdGljIF9sb29rdXAoaW5wdXRNYXA6IGFueSwga2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImxvb2t1cFwiLCBbYW55VmFsdWUsIHN0cmluZ1ZhbHVlLCB2YXJpYWRpYyhhbnlWYWx1ZSldKShcbiAgICAgICAgaW5wdXRNYXAsXG4gICAgICAgIGtleSxcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2xvd2VyIGxvd2VyfSBjb252ZXJ0cyBhbGwgY2FzZWQgbGV0dGVycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHRvIGxvd2VyY2FzZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGxvd2VyKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwibG93ZXJcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWF0Y2hrZXlzIG1hdGNoa2V5c30gY29uc3RydWN0cyBhIG5ldyBsaXN0IGJ5IHRha2luZyBhIHN1YnNldCBvZiBlbGVtZW50cyBmcm9tIG9uZSBsaXN0IHdob3NlIGluZGV4ZXMgbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXhlcyBvZiB2YWx1ZXMgaW4gYW5vdGhlciBsaXN0LlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IHZhbHVlc1xuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGtleXNcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBzZWFyY2hzZXRcbiAgICovXG4gIHN0YXRpYyBtYXRjaGtleXModmFsdWVzOiBhbnlbXSwga2V5czogYW55W10sIHNlYXJjaHNldDogYW55W10pIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtYXRjaGtleXNcIiwgW1xuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgXSkodmFsdWVzLCBrZXlzLCBzZWFyY2hzZXQpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWF4IG1heH0gdGFrZXMgb25lIG9yIG1vcmUgbnVtYmVycyBhbmQgcmV0dXJucyB0aGUgZ3JlYXRlc3QgbnVtYmVyIGZyb20gdGhlIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBudW1iZXJzXG4gICAqL1xuICBzdGF0aWMgbWF4KG51bWJlcnM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtYXhcIiwgW3ZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShudW1iZXJzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL21kNSBtZDV9IGNvbXB1dGVzIHRoZSBNRDUgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIG1kNShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcIm1kNVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9tZXJnZSBtZXJnZX0gdGFrZXMgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBtYXBzIG9yIG9iamVjdHMsIGFuZCByZXR1cm5zIGEgc2luZ2xlIG1hcCBvciBvYmplY3QgdGhhdCBjb250YWlucyBhIG1lcmdlZCBzZXQgb2YgZWxlbWVudHMgZnJvbSBhbGwgYXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IG1hcHNcbiAgICovXG4gIHN0YXRpYyBtZXJnZShtYXBzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcIm1lcmdlXCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShtYXBzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWluIG1pbn0gdGFrZXMgb25lIG9yIG1vcmUgbnVtYmVycyBhbmQgcmV0dXJucyB0aGUgc21hbGxlc3QgbnVtYmVyIGZyb20gdGhlIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBudW1iZXJzXG4gICAqL1xuICBzdGF0aWMgbWluKG51bWJlcnM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtaW5cIiwgW3ZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShudW1iZXJzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL25vbnNlbnNpdGl2ZSBub25zZW5zaXRpdmV9IHRha2VzIGEgc2Vuc2l0aXZlIHZhbHVlIGFuZCByZXR1cm5zIGEgY29weSBvZiB0aGF0IHZhbHVlIHdpdGggdGhlIHNlbnNpdGl2ZSBtYXJraW5nIHJlbW92ZWQsIHRoZXJlYnkgZXhwb3NpbmcgdGhlIHNlbnNpdGl2ZSB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBzdGF0aWMgbm9uc2Vuc2l0aXZlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJub25zZW5zaXRpdmVcIiwgW2FueVZhbHVlXSkodmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9vbmUgb25lfSB0YWtlcyBhIGxpc3QsIHNldCwgb3IgdHVwbGUgdmFsdWUgd2l0aCBlaXRoZXIgemVybyBvciBvbmUgZWxlbWVudHMuIElmIHRoZSBjb2xsZWN0aW9uIGlzIGVtcHR5LCBgb25lYCByZXR1cm5zIGBudWxsYC4gT3RoZXJ3aXNlLCBgb25lYCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50LiBJZiB0aGVyZSBhcmUgdHdvIG9yIG1vcmUgZWxlbWVudHMgdGhlbiBgb25lYCB3aWxsIHJldHVybiBhbiBlcnJvci5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICovXG4gIHN0YXRpYyBvbmUobGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwib25lXCIsIFthbnlWYWx1ZV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9wYXJzZWludCBwYXJzZWludH0gcGFyc2VzIHRoZSBnaXZlbiBzdHJpbmcgYXMgYSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIGluIHRoZSBzcGVjaWZpZWQgYmFzZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG51bWJlci4gVGhlIGJhc2UgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDYyIGluY2x1c2l2ZS5cbiAgICogQHBhcmFtIHthbnl9IG51bWJlclxuICAgKiBAcGFyYW0ge251bWJlcn0gYmFzZVxuICAgKi9cbiAgc3RhdGljIHBhcnNlaW50KG51bWJlcjogYW55LCBiYXNlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInBhcnNlaW50XCIsIFthbnlWYWx1ZSwgbnVtZXJpY1ZhbHVlXSkobnVtYmVyLCBiYXNlKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BhdGhleHBhbmQgcGF0aGV4cGFuZH0gdGFrZXMgYSBmaWxlc3lzdGVtIHBhdGggdGhhdCBtaWdodCBiZWdpbiB3aXRoIGEgYH5gIHNlZ21lbnQsIGFuZCBpZiBzbyBpdCByZXBsYWNlcyB0aGF0IHNlZ21lbnQgd2l0aCB0aGUgY3VycmVudCB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBwYXRoZXhwYW5kKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInBhdGhleHBhbmRcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BsYW50aW1lc3RhbXAgcGxhbnRpbWVzdGFtcH0gcmV0dXJucyBhIFVUQyB0aW1lc3RhbXAgc3RyaW5nIGluIFtSRkMgMzMzOV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkpIGZvcm1hdCwgZml4ZWQgdG8gYSBjb25zdGFudCB0aW1lIHJlcHJlc2VudGluZyB0aGUgdGltZSBvZiB0aGUgcGxhbi5cbiAgICovXG4gIHN0YXRpYyBwbGFudGltZXN0YW1wKCkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInBsYW50aW1lc3RhbXBcIiwgW10pKCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BvdyBwb3d9IGNhbGN1bGF0ZXMgYW4gZXhwb25lbnQsIGJ5IHJhaXNpbmcgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwb3dlciBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3dlclxuICAgKi9cbiAgc3RhdGljIHBvdyhudW06IG51bWJlciwgcG93ZXI6IG51bWJlcikge1xuICAgIHJldHVybiBhc051bWJlcihcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwicG93XCIsIFtudW1lcmljVmFsdWUsIG51bWVyaWNWYWx1ZV0pKG51bSwgcG93ZXIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JhbmdlIHJhbmdlfSBnZW5lcmF0ZXMgYSBsaXN0IG9mIG51bWJlcnMgdXNpbmcgYSBzdGFydCB2YWx1ZSwgYSBsaW1pdCB2YWx1ZSwgYW5kIGEgc3RlcCB2YWx1ZS5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXNcbiAgICovXG4gIHN0YXRpYyBfcmFuZ2UocGFyYW1zOiBudW1iZXJbXSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJyYW5nZVwiLCBbdmFyaWFkaWMobnVtZXJpY1ZhbHVlKV0pKHBhcmFtcykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JlZ2V4IHJlZ2V4fSBhcHBsaWVzIGEgW3JlZ3VsYXIgZXhwcmVzc2lvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVndWxhcl9leHByZXNzaW9uKSB0byBhIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5ncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHJlZ2V4KHBhdHRlcm46IHN0cmluZywgc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInJlZ2V4XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShwYXR0ZXJuLCBzdHIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcmVnZXhhbGwgcmVnZXhhbGx9IGFwcGxpZXMgYSBbcmVndWxhciBleHByZXNzaW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZWd1bGFyX2V4cHJlc3Npb24pIHRvIGEgc3RyaW5nIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgbWF0Y2hlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHJlZ2V4YWxsKHBhdHRlcm46IHN0cmluZywgc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJyZWdleGFsbFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkocGF0dGVybiwgc3RyKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JlcGxhY2UgcmVwbGFjZX0gc2VhcmNoZXMgYSBnaXZlbiBzdHJpbmcgZm9yIGFub3RoZXIgZ2l2ZW4gc3Vic3RyaW5nLCBhbmQgcmVwbGFjZXMgZWFjaCBvY2N1cnJlbmNlIHdpdGggYSBnaXZlbiByZXBsYWNlbWVudCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZVxuICAgKi9cbiAgc3RhdGljIHJlcGxhY2Uoc3RyOiBzdHJpbmcsIHN1YnN0cjogc3RyaW5nLCByZXBsYWNlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInJlcGxhY2VcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShcbiAgICAgICAgc3RyLFxuICAgICAgICBzdWJzdHIsXG4gICAgICAgIHJlcGxhY2UsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcmV2ZXJzZSByZXZlcnNlfSB0YWtlcyBhIHNlcXVlbmNlIGFuZCBwcm9kdWNlcyBhIG5ldyBzZXF1ZW5jZSBvZiB0aGUgc2FtZSBsZW5ndGggd2l0aCBhbGwgb2YgdGhlIHNhbWUgZWxlbWVudHMgYXMgdGhlIGdpdmVuIHNlcXVlbmNlIGJ1dCBpbiByZXZlcnNlIG9yZGVyLlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKi9cbiAgc3RhdGljIHJldmVyc2UobGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwicmV2ZXJzZVwiLCBbYW55VmFsdWVdKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcnNhZGVjcnlwdCByc2FkZWNyeXB0fSBkZWNyeXB0cyBhbiBSU0EtZW5jcnlwdGVkIGNpcGhlcnRleHQsIHJldHVybmluZyB0aGUgY29ycmVzcG9uZGluZyBjbGVhcnRleHQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaXBoZXJ0ZXh0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcml2YXRla2V5XG4gICAqL1xuICBzdGF0aWMgcnNhZGVjcnlwdChjaXBoZXJ0ZXh0OiBzdHJpbmcsIHByaXZhdGVrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwicnNhZGVjcnlwdFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIGNpcGhlcnRleHQsXG4gICAgICAgIHByaXZhdGVrZXksXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2Vuc2l0aXZlIHNlbnNpdGl2ZX0gdGFrZXMgYW55IHZhbHVlIGFuZCByZXR1cm5zIGEgY29weSBvZiBpdCBtYXJrZWQgc28gdGhhdCBUZXJyYWZvcm0gd2lsbCB0cmVhdCBpdCBhcyBzZW5zaXRpdmUsIHdpdGggdGhlIHNhbWUgbWVhbmluZyBhbmQgYmVoYXZpb3IgYXMgZm9yIFtzZW5zaXRpdmUgaW5wdXQgdmFyaWFibGVzXSgvdGVycmFmb3JtL2xhbmd1YWdlL3ZhbHVlcy92YXJpYWJsZXMjc3VwcHJlc3NpbmctdmFsdWVzLWluLWNsaS1vdXRwdXQpLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyBzZW5zaXRpdmUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInNlbnNpdGl2ZVwiLCBbYW55VmFsdWVdKSh2YWx1ZSkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zZXRpbnRlcnNlY3Rpb24gc2V0aW50ZXJzZWN0aW9ufSBmdW5jdGlvbiB0YWtlcyBtdWx0aXBsZSBzZXRzIGFuZCBwcm9kdWNlcyBhIHNpbmdsZSBzZXQgY29udGFpbmluZyBvbmx5IHRoZSBlbGVtZW50cyB0aGF0IGFsbCBvZiB0aGUgZ2l2ZW4gc2V0cyBoYXZlIGluIGNvbW1vbi4gSW4gb3RoZXIgd29yZHMsIGl0IGNvbXB1dGVzIHRoZSBbaW50ZXJzZWN0aW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JbnRlcnNlY3Rpb25fXFwoc2V0X3RoZW9yeVxcKSkgb2YgdGhlIHNldHMuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gZmlyc3Rfc2V0XG4gICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8YW55Pj59IG90aGVyX3NldHNcbiAgICovXG4gIHN0YXRpYyBzZXRpbnRlcnNlY3Rpb24oZmlyc3Rfc2V0OiBhbnlbXSwgb3RoZXJfc2V0czogYW55W11bXSkge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNldGludGVyc2VjdGlvblwiLCBbXG4gICAgICAgIGxpc3RPZihhbnlWYWx1ZSksXG4gICAgICAgIHZhcmlhZGljKGxpc3RPZihhbnlWYWx1ZSkpLFxuICAgICAgXSkoZmlyc3Rfc2V0LCBvdGhlcl9zZXRzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zZXRwcm9kdWN0IHNldHByb2R1Y3R9IGZ1bmN0aW9uIGZpbmRzIGFsbCBvZiB0aGUgcG9zc2libGUgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIGZyb20gYWxsIG9mIHRoZSBnaXZlbiBzZXRzIGJ5IGNvbXB1dGluZyB0aGUgW0NhcnRlc2lhbiBwcm9kdWN0XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYXJ0ZXNpYW5fcHJvZHVjdCkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gc2V0c1xuICAgKi9cbiAgc3RhdGljIHNldHByb2R1Y3Qoc2V0czogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJzZXRwcm9kdWN0XCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShzZXRzKSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NldHN1YnRyYWN0IHNldHN1YnRyYWN0fSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IHNldCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBmaXJzdCBzZXQgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHNlY29uZCBzZXQuIEluIG90aGVyIHdvcmRzLCBpdCBjb21wdXRlcyB0aGUgW3JlbGF0aXZlIGNvbXBsZW1lbnRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbXBsZW1lbnRfXFwoc2V0X3RoZW9yeVxcKSNSZWxhdGl2ZV9jb21wbGVtZW50KSBvZiB0aGUgc2Vjb25kIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBhXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYlxuICAgKi9cbiAgc3RhdGljIHNldHN1YnRyYWN0KGE6IGFueVtdLCBiOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNldHN1YnRyYWN0XCIsIFtsaXN0T2YoYW55VmFsdWUpLCBsaXN0T2YoYW55VmFsdWUpXSkoXG4gICAgICAgIGEsXG4gICAgICAgIGIsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NldHVuaW9uIHNldHVuaW9ufSBmdW5jdGlvbiB0YWtlcyBtdWx0aXBsZSBzZXRzIGFuZCBwcm9kdWNlcyBhIHNpbmdsZSBzZXQgY29udGFpbmluZyB0aGUgZWxlbWVudHMgZnJvbSBhbGwgb2YgdGhlIGdpdmVuIHNldHMuIEluIG90aGVyIHdvcmRzLCBpdCBjb21wdXRlcyB0aGUgW3VuaW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vbmlvbl9cXChzZXRfdGhlb3J5XFwpKSBvZiB0aGUgc2V0cy5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBmaXJzdF9zZXRcbiAgICogQHBhcmFtIHtBcnJheTxBcnJheTxhbnk+Pn0gb3RoZXJfc2V0c1xuICAgKi9cbiAgc3RhdGljIHNldHVuaW9uKGZpcnN0X3NldDogYW55W10sIG90aGVyX3NldHM6IGFueVtdW10pIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzZXR1bmlvblwiLCBbXG4gICAgICAgIGxpc3RPZihhbnlWYWx1ZSksXG4gICAgICAgIHZhcmlhZGljKGxpc3RPZihhbnlWYWx1ZSkpLFxuICAgICAgXSkoZmlyc3Rfc2V0LCBvdGhlcl9zZXRzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NoYTEgc2hhMX0gY29tcHV0ZXMgdGhlIFNIQTEgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNoYTEoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzaGExXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NoYTI1NiBzaGEyNTZ9IGNvbXB1dGVzIHRoZSBTSEEyNTYgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNoYTI1NihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zaGE1MTIgc2hhNTEyfSBjb21wdXRlcyB0aGUgU0hBNTEyIGhhc2ggb2YgYSBnaXZlbiBzdHJpbmcgYW5kIGVuY29kZXMgaXQgd2l0aCBoZXhhZGVjaW1hbCBkaWdpdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBzaGE1MTIoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzaGE1MTJcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2lnbnVtIHNpZ251bX0gZGV0ZXJtaW5lcyB0aGUgc2lnbiBvZiBhIG51bWJlciwgcmV0dXJuaW5nIGEgbnVtYmVyIGJldHdlZW4gLTEgYW5kIDEgdG8gcmVwcmVzZW50IHRoZSBzaWduLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqL1xuICBzdGF0aWMgc2lnbnVtKG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwic2lnbnVtXCIsIFtudW1lcmljVmFsdWVdKShudW0pKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zbGljZSBzbGljZX0gZXh0cmFjdHMgc29tZSBjb25zZWN1dGl2ZSBlbGVtZW50cyBmcm9tIHdpdGhpbiBhIGxpc3QuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydF9pbmRleFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kX2luZGV4XG4gICAqL1xuICBzdGF0aWMgc2xpY2UobGlzdDogYW55LCBzdGFydF9pbmRleDogbnVtYmVyLCBlbmRfaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwic2xpY2VcIiwgW2FueVZhbHVlLCBudW1lcmljVmFsdWUsIG51bWVyaWNWYWx1ZV0pKFxuICAgICAgICBsaXN0LFxuICAgICAgICBzdGFydF9pbmRleCxcbiAgICAgICAgZW5kX2luZGV4LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NvcnQgc29ydH0gdGFrZXMgYSBsaXN0IG9mIHN0cmluZ3MgYW5kIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIHRob3NlIHN0cmluZ3Mgc29ydGVkIGxleGljb2dyYXBoaWNhbGx5LlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGxpc3RcbiAgICovXG4gIHN0YXRpYyBzb3J0KGxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIGFzTGlzdCh0ZXJyYWZvcm1GdW5jdGlvbihcInNvcnRcIiwgW2xpc3RPZihhbnlWYWx1ZSldKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3BsaXQgc3BsaXR9IHByb2R1Y2VzIGEgbGlzdCBieSBkaXZpZGluZyBhIGdpdmVuIHN0cmluZyBhdCBhbGwgb2NjdXJyZW5jZXMgb2YgYSBnaXZlbiBzZXBhcmF0b3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXBhcmF0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNwbGl0KHNlcGFyYXRvcjogc3RyaW5nLCBzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNwbGl0XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzZXBhcmF0b3IsIHN0ciksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdGFydHN3aXRoIHN0YXJ0c3dpdGh9IHRha2VzIHR3byB2YWx1ZXM6IGEgc3RyaW5nIHRvIGNoZWNrIGFuZCBhIHByZWZpeCBzdHJpbmcuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmluZyBiZWdpbnMgd2l0aCB0aGF0IGV4YWN0IHByZWZpeC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqL1xuICBzdGF0aWMgc3RhcnRzd2l0aChzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzdGFydHN3aXRoXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHByZWZpeCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdHJjb250YWlucyBzdHJjb250YWluc30gdGFrZXMgdHdvIHZhbHVlczogYSBzdHJpbmcgdG8gY2hlY2sgYW5kIGFuIGV4cGVjdGVkIHN1YnN0cmluZy4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGhhcyB0aGUgc3Vic3RyaW5nIGNvbnRhaW5lZCB3aXRoaW4gaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnN0clxuICAgKi9cbiAgc3RhdGljIHN0cmNvbnRhaW5zKHN0cjogc3RyaW5nLCBzdWJzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc0Jvb2xlYW4oXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInN0cmNvbnRhaW5zXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHN1YnN0ciksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdHJyZXYgc3RycmV2fSByZXZlcnNlcyB0aGUgY2hhcmFjdGVycyBpbiBhIHN0cmluZy4gTm90ZSB0aGF0IHRoZSBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIF9Vbmljb2RlIGNoYXJhY3RlcnNfIChpbiB0ZWNobmljYWwgdGVybXMsIFVuaWNvZGUgW2dyYXBoZW1lIGNsdXN0ZXIgYm91bmRhcmllc10oaHR0cHM6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyMjkvI0dyYXBoZW1lX0NsdXN0ZXJfQm91bmRhcmllcykgYXJlIHJlc3BlY3RlZCkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBzdHJyZXYoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzdHJyZXZcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3Vic3RyIHN1YnN0cn0gZXh0cmFjdHMgYSBzdWJzdHJpbmcgZnJvbSBhIGdpdmVuIHN0cmluZyBieSBvZmZzZXQgYW5kIChtYXhpbXVtKSBsZW5ndGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gICAqL1xuICBzdGF0aWMgc3Vic3RyKHN0cjogc3RyaW5nLCBvZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInN1YnN0clwiLCBbc3RyaW5nVmFsdWUsIG51bWVyaWNWYWx1ZSwgbnVtZXJpY1ZhbHVlXSkoXG4gICAgICAgIHN0cixcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBsZW5ndGgsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3VtIHN1bX0gdGFrZXMgYSBsaXN0IG9yIHNldCBvZiBudW1iZXJzIGFuZCByZXR1cm5zIHRoZSBzdW0gb2YgdGhvc2UgbnVtYmVycy5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICovXG4gIHN0YXRpYyBzdW0obGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwic3VtXCIsIFthbnlWYWx1ZV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90ZW1wbGF0ZWZpbGUgdGVtcGxhdGVmaWxlfSByZWFkcyB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhbmQgcmVuZGVycyBpdHMgY29udGVudCBhcyBhIHRlbXBsYXRlIHVzaW5nIGEgc3VwcGxpZWQgc2V0IG9mIHRlbXBsYXRlIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICogQHBhcmFtIHthbnl9IHZhcnNcbiAgICovXG4gIHN0YXRpYyB0ZW1wbGF0ZWZpbGUocGF0aDogc3RyaW5nLCB2YXJzOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRlbXBsYXRlZmlsZVwiLCBbc3RyaW5nVmFsdWUsIGFueVZhbHVlXSkocGF0aCwgdmFycyksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90ZXh0ZGVjb2RlYmFzZTY0IHRleHRkZWNvZGViYXNlNjR9IGZ1bmN0aW9uIGRlY29kZXMgYSBzdHJpbmcgdGhhdCB3YXMgcHJldmlvdXNseSBCYXNlNjQtZW5jb2RlZCwgYW5kIHRoZW4gaW50ZXJwcmV0cyB0aGUgcmVzdWx0IGFzIGNoYXJhY3RlcnMgaW4gYSBzcGVjaWZpZWQgY2hhcmFjdGVyIGVuY29kaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICAgKi9cbiAgc3RhdGljIHRleHRkZWNvZGViYXNlNjQoc291cmNlOiBzdHJpbmcsIGVuY29kaW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRleHRkZWNvZGViYXNlNjRcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGVuY29kaW5nLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RleHRlbmNvZGViYXNlNjQgdGV4dGVuY29kZWJhc2U2NH0gZW5jb2RlcyB0aGUgdW5pY29kZSBjaGFyYWN0ZXJzIGluIGEgZ2l2ZW4gc3RyaW5nIHVzaW5nIGEgc3BlY2lmaWVkIGNoYXJhY3RlciBlbmNvZGluZywgcmV0dXJuaW5nIHRoZSByZXN1bHQgYmFzZTY0IGVuY29kZWQgYmVjYXVzZSBUZXJyYWZvcm0gbGFuZ3VhZ2Ugc3RyaW5ncyBhcmUgYWx3YXlzIHNlcXVlbmNlcyBvZiB1bmljb2RlIGNoYXJhY3RlcnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gICAqL1xuICBzdGF0aWMgdGV4dGVuY29kZWJhc2U2NChzdHI6IHN0cmluZywgZW5jb2Rpbmc6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidGV4dGVuY29kZWJhc2U2NFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIHN0cixcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdGltZWFkZCB0aW1lYWRkfSBhZGRzIGEgZHVyYXRpb24gdG8gYSB0aW1lc3RhbXAsIHJldHVybmluZyBhIG5ldyB0aW1lc3RhbXAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lc3RhbXBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGR1cmF0aW9uXG4gICAqL1xuICBzdGF0aWMgdGltZWFkZCh0aW1lc3RhbXA6IHN0cmluZywgZHVyYXRpb246IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidGltZWFkZFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdGltZWNtcCB0aW1lY21wfSBjb21wYXJlcyB0d28gdGltZXN0YW1wcyBhbmQgcmV0dXJucyBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIG9yZGVyaW5nIG9mIHRoZSBpbnN0YW50cyB0aG9zZSB0aW1lc3RhbXBzIHJlcHJlc2VudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWVzdGFtcF9hXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lc3RhbXBfYlxuICAgKi9cbiAgc3RhdGljIHRpbWVjbXAodGltZXN0YW1wX2E6IHN0cmluZywgdGltZXN0YW1wX2I6IHN0cmluZykge1xuICAgIHJldHVybiBhc051bWJlcihcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidGltZWNtcFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIHRpbWVzdGFtcF9hLFxuICAgICAgICB0aW1lc3RhbXBfYixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90aW1lc3RhbXAgdGltZXN0YW1wfSByZXR1cm5zIGEgVVRDIHRpbWVzdGFtcCBzdHJpbmcgaW4gW1JGQyAzMzM5XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSkgZm9ybWF0LlxuICAgKi9cbiAgc3RhdGljIHRpbWVzdGFtcCgpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ0aW1lc3RhbXBcIiwgW10pKCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RpdGxlIHRpdGxlfSBjb252ZXJ0cyB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHVwcGVyY2FzZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHRpdGxlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwidGl0bGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9ib29sIHRvYm9vbH0gY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgYm9vbGVhbiB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b2Jvb2wodjogYW55KSB7XG4gICAgcmV0dXJuIGFzQm9vbGVhbih0ZXJyYWZvcm1GdW5jdGlvbihcInRvYm9vbFwiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9saXN0IHRvbGlzdH0gY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgbGlzdCB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b2xpc3QodjogYW55KSB7XG4gICAgcmV0dXJuIGFzTGlzdCh0ZXJyYWZvcm1GdW5jdGlvbihcInRvbGlzdFwiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9tYXAgdG9tYXB9IGNvbnZlcnRzIGl0cyBhcmd1bWVudCB0byBhIG1hcCB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b21hcCh2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJ0b21hcFwiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9udW1iZXIgdG9udW1iZXJ9IGNvbnZlcnRzIGl0cyBhcmd1bWVudCB0byBhIG51bWJlciB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b251bWJlcih2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIodGVycmFmb3JtRnVuY3Rpb24oXCJ0b251bWJlclwiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9zZXQgdG9zZXR9IGNvbnZlcnRzIGl0cyBhcmd1bWVudCB0byBhIHNldCB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b3NldCh2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNMaXN0KHRlcnJhZm9ybUZ1bmN0aW9uKFwidG9zZXRcIiwgW2FueVZhbHVlXSkodikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3Rvc3RyaW5nIHRvc3RyaW5nfSBjb252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBzdHJpbmcgdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2XG4gICAqL1xuICBzdGF0aWMgdG9zdHJpbmcodjogYW55KSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwidG9zdHJpbmdcIiwgW2FueVZhbHVlXSkodikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyYW5zcG9zZSB0cmFuc3Bvc2V9IHRha2VzIGEgbWFwIG9mIGxpc3RzIG9mIHN0cmluZ3MgYW5kIHN3YXBzIHRoZSBrZXlzIGFuZCB2YWx1ZXMgdG8gcHJvZHVjZSBhIG5ldyBtYXAgb2YgbGlzdHMgb2Ygc3RyaW5ncy5cbiAgICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBBcnJheTxzdHJpbmc+Pn0gdmFsdWVzXG4gICAqL1xuICBzdGF0aWMgdHJhbnNwb3NlKHZhbHVlczogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwidHJhbnNwb3NlXCIsIFttYXBWYWx1ZV0pKHZhbHVlcykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyaW0gdHJpbX0gcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHNldCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGdpdmVuIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3V0c2V0XG4gICAqL1xuICBzdGF0aWMgdHJpbShzdHI6IHN0cmluZywgY3V0c2V0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRyaW1cIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHN0ciwgY3V0c2V0KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyaW1wcmVmaXggdHJpbXByZWZpeH0gcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHByZWZpeCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLiBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIHByZWZpeCwgdGhlIHN0cmluZyBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKi9cbiAgc3RhdGljIHRyaW1wcmVmaXgoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0cmltcHJlZml4XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHByZWZpeCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90cmltc3BhY2UgdHJpbXNwYWNlfSByZW1vdmVzIGFueSBzcGFjZSBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGdpdmVuIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHRyaW1zcGFjZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInRyaW1zcGFjZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90cmltc3VmZml4IHRyaW1zdWZmaXh9IHJlbW92ZXMgdGhlIHNwZWNpZmllZCBzdWZmaXggZnJvbSB0aGUgZW5kIG9mIHRoZSBnaXZlbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1ZmZpeFxuICAgKi9cbiAgc3RhdGljIHRyaW1zdWZmaXgoc3RyOiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0cmltc3VmZml4XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHN1ZmZpeCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90cnkgdHJ5fSBldmFsdWF0ZXMgYWxsIG9mIGl0cyBhcmd1bWVudCBleHByZXNzaW9ucyBpbiB0dXJuIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGZpcnN0IG9uZSB0aGF0IGRvZXMgbm90IHByb2R1Y2UgYW55IGVycm9ycy5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBleHByZXNzaW9uc1xuICAgKi9cbiAgc3RhdGljIHRyeShleHByZXNzaW9uczogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJ0cnlcIiwgW3ZhcmlhZGljKGFueVZhbHVlKV0pKGV4cHJlc3Npb25zKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdXBwZXIgdXBwZXJ9IGNvbnZlcnRzIGFsbCBjYXNlZCBsZXR0ZXJzIGluIHRoZSBnaXZlbiBzdHJpbmcgdG8gdXBwZXJjYXNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgdXBwZXIoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ1cHBlclwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy91cmxlbmNvZGUgdXJsZW5jb2RlfSBhcHBsaWVzIFVSTCBlbmNvZGluZyB0byBhIGdpdmVuIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHVybGVuY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInVybGVuY29kZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy91dWlkIHV1aWR9IGdlbmVyYXRlcyBhIHVuaXF1ZSBpZGVudGlmaWVyIHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyB1dWlkKCkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInV1aWRcIiwgW10pKCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3V1aWR2NSB1dWlkdjV9IGdlbmVyYXRlcyBhIF9uYW1lLWJhc2VkXyBVVUlELCBhcyBkZXNjcmliZWQgaW4gW1JGQyA0MTIyIHNlY3Rpb24gNC4zXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMyksIGFsc28ga25vd24gYXMgYSBcInZlcnNpb24gNVwiIFVVSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIHN0YXRpYyB1dWlkdjUobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidXVpZHY1XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShuYW1lc3BhY2UsIG5hbWUpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdmFsdWVzIHZhbHVlc30gdGFrZXMgYSBtYXAgYW5kIHJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhhdCBtYXAuXG4gICAqIEBwYXJhbSB7YW55fSBtYXBwaW5nXG4gICAqL1xuICBzdGF0aWMgdmFsdWVzKG1hcHBpbmc6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInZhbHVlc1wiLCBbYW55VmFsdWVdKShtYXBwaW5nKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMveWFtbGRlY29kZSB5YW1sZGVjb2RlfSBwYXJzZXMgYSBzdHJpbmcgYXMgYSBzdWJzZXQgb2YgWUFNTCwgYW5kIHByb2R1Y2VzIGEgcmVwcmVzZW50YXRpb24gb2YgaXRzIHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjXG4gICAqL1xuICBzdGF0aWMgeWFtbGRlY29kZShzcmM6IHN0cmluZykge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInlhbWxkZWNvZGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3JjKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMveWFtbGVuY29kZSB5YW1sZW5jb2RlfSBlbmNvZGVzIGEgZ2l2ZW4gdmFsdWUgdG8gYSBzdHJpbmcgdXNpbmcgW1lBTUwgMS4yXShodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCkgYmxvY2sgc3ludGF4LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyB5YW1sZW5jb2RlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ5YW1sZW5jb2RlXCIsIFthbnlWYWx1ZV0pKHZhbHVlKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvemlwbWFwIHppcG1hcH0gY29uc3RydWN0cyBhIG1hcCBmcm9tIGEgbGlzdCBvZiBrZXlzIGFuZCBhIGNvcnJlc3BvbmRpbmcgbGlzdCBvZiB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0ga2V5c1xuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVzXG4gICAqL1xuICBzdGF0aWMgemlwbWFwKGtleXM6IHN0cmluZ1tdLCB2YWx1ZXM6IGFueSkge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiemlwbWFwXCIsIFtsaXN0T2YoYW55VmFsdWUpLCBhbnlWYWx1ZV0pKGtleXMsIHZhbHVlcyksXG4gICAgKTtcbiAgfVxufVxuIl19