@pipeline-builder/api-core 4.1.12 → 4.1.14

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 (187) hide show
  1. package/README.md +3 -2
  2. package/lib/constants/index.d.ts +0 -1
  3. package/lib/constants/index.js +1 -2
  4. package/lib/errors/app-errors.d.ts +8 -3
  5. package/lib/errors/app-errors.js +10 -5
  6. package/lib/helpers/access-helpers.d.ts +4 -6
  7. package/lib/helpers/access-helpers.js +6 -8
  8. package/lib/helpers/index.d.ts +3 -3
  9. package/lib/helpers/index.js +4 -4
  10. package/lib/helpers/org-hierarchy-http.d.ts +11 -10
  11. package/lib/helpers/org-hierarchy-http.js +24 -35
  12. package/lib/helpers/org-hierarchy.d.ts +37 -3
  13. package/lib/helpers/org-hierarchy.js +45 -4
  14. package/lib/helpers/restore-helpers.d.ts +44 -24
  15. package/lib/helpers/restore-helpers.js +41 -52
  16. package/lib/helpers/sse-helpers.d.ts +29 -7
  17. package/lib/helpers/sse-helpers.js +36 -9
  18. package/lib/index.d.ts +16 -14
  19. package/lib/index.js +17 -15
  20. package/lib/middleware/assurance.d.ts +116 -0
  21. package/lib/middleware/assurance.js +176 -0
  22. package/lib/middleware/auth.d.ts +5 -427
  23. package/lib/middleware/auth.js +36 -789
  24. package/lib/middleware/ecosystem-guard.d.ts +47 -0
  25. package/lib/middleware/ecosystem-guard.js +60 -0
  26. package/lib/middleware/index.d.ts +11 -4
  27. package/lib/middleware/index.js +12 -5
  28. package/lib/middleware/jwt-verify.d.ts +52 -0
  29. package/lib/middleware/jwt-verify.js +105 -0
  30. package/lib/middleware/permission-gates.d.ts +133 -0
  31. package/lib/middleware/permission-gates.js +260 -0
  32. package/lib/middleware/revocation.d.ts +96 -0
  33. package/lib/middleware/revocation.js +162 -0
  34. package/lib/middleware/route-table.d.ts +11 -0
  35. package/lib/middleware/route-table.js +4 -1
  36. package/lib/middleware/service-tokens.d.ts +83 -0
  37. package/lib/middleware/service-tokens.js +158 -0
  38. package/lib/middleware/step-up.d.ts +2 -2
  39. package/lib/middleware/step-up.js +8 -7
  40. package/lib/middleware/system-org.d.ts +20 -0
  41. package/lib/middleware/system-org.js +25 -0
  42. package/lib/openapi/routes/plugin-routes.js +133 -10
  43. package/lib/openapi/schema-registry.js +2 -5
  44. package/lib/routes/index.d.ts +1 -1
  45. package/lib/routes/index.js +2 -2
  46. package/lib/services/api-key-exchange.js +7 -5
  47. package/lib/services/audit-spool.d.ts +34 -10
  48. package/lib/services/audit-spool.js +75 -34
  49. package/lib/services/cache-service.d.ts +7 -0
  50. package/lib/services/cache-service.js +1 -1
  51. package/lib/services/circuit-breaker.d.ts +14 -1
  52. package/lib/services/circuit-breaker.js +36 -10
  53. package/lib/services/compliance-client.d.ts +10 -2
  54. package/lib/services/compliance-client.js +17 -10
  55. package/lib/services/compliance-event-subscriber.js +6 -6
  56. package/lib/services/durable-event-bus.js +8 -11
  57. package/lib/services/ecosystem-notify-client.d.ts +32 -0
  58. package/lib/services/ecosystem-notify-client.js +71 -0
  59. package/lib/services/env-redis.d.ts +4 -1
  60. package/lib/services/env-redis.js +32 -3
  61. package/lib/services/http-client.d.ts +19 -0
  62. package/lib/services/http-client.js +98 -19
  63. package/lib/services/index.d.ts +25 -24
  64. package/lib/services/index.js +25 -22
  65. package/lib/services/jwks-cache.js +5 -4
  66. package/lib/services/leader-lock.d.ts +22 -5
  67. package/lib/services/leader-lock.js +61 -6
  68. package/lib/services/quota.d.ts +9 -4
  69. package/lib/services/quota.js +34 -40
  70. package/lib/services/remote-audit-client.d.ts +28 -32
  71. package/lib/services/remote-audit-client.js +166 -49
  72. package/lib/services/retry-forever.js +5 -11
  73. package/lib/services/retry-strategy.d.ts +1 -1
  74. package/lib/services/retry-strategy.js +5 -4
  75. package/lib/services/scheduler.d.ts +8 -3
  76. package/lib/services/scheduler.js +17 -5
  77. package/lib/services/service-boot.d.ts +14 -13
  78. package/lib/services/service-boot.js +18 -15
  79. package/lib/services/service-keys.d.ts +1 -1
  80. package/lib/services/service-keys.js +12 -18
  81. package/lib/services/sse-ticket-store.d.ts +9 -1
  82. package/lib/services/sse-ticket-store.js +24 -9
  83. package/lib/services/system-notification.d.ts +27 -0
  84. package/lib/services/system-notification.js +50 -0
  85. package/lib/services/token-revocation.d.ts +50 -1
  86. package/lib/services/token-revocation.js +103 -3
  87. package/lib/types/audit-events.d.ts +6 -6
  88. package/lib/types/audit-events.js +1 -1
  89. package/lib/types/common.d.ts +32 -13
  90. package/lib/types/common.js +2 -1
  91. package/lib/types/ecosystem-notifications.d.ts +142 -0
  92. package/lib/types/ecosystem-notifications.js +210 -0
  93. package/lib/types/ecosystem.d.ts +77 -0
  94. package/lib/types/ecosystem.js +119 -0
  95. package/lib/types/error-codes.d.ts +81 -0
  96. package/lib/types/error-codes.js +108 -1
  97. package/lib/types/feature-flags.d.ts +21 -1
  98. package/lib/types/feature-flags.js +36 -2
  99. package/lib/types/index.d.ts +14 -9
  100. package/lib/types/index.js +15 -10
  101. package/lib/types/permissions.d.ts +46 -8
  102. package/lib/types/permissions.js +75 -12
  103. package/lib/types/plugin-catalog.d.ts +35 -0
  104. package/lib/types/plugin-catalog.js +39 -0
  105. package/lib/types/plugin-health.d.ts +102 -0
  106. package/lib/types/plugin-health.js +184 -0
  107. package/lib/types/quota-tiers.d.ts +15 -0
  108. package/lib/types/quota-tiers.js +23 -3
  109. package/lib/types/wire-vocabulary.d.ts +102 -0
  110. package/lib/types/wire-vocabulary.js +94 -0
  111. package/lib/utils/alias-resolver.js +2 -2
  112. package/lib/utils/audit.d.ts +5 -2
  113. package/lib/utils/audit.js +6 -3
  114. package/lib/utils/compliance-attributes.js +3 -4
  115. package/lib/utils/concurrency.d.ts +7 -0
  116. package/lib/utils/concurrency.js +13 -1
  117. package/lib/utils/env.d.ts +3 -4
  118. package/lib/utils/env.js +4 -5
  119. package/lib/utils/identity.d.ts +13 -4
  120. package/lib/utils/identity.js +18 -10
  121. package/lib/utils/index.d.ts +13 -10
  122. package/lib/utils/index.js +13 -10
  123. package/lib/utils/jwk.d.ts +4 -0
  124. package/lib/utils/jwk.js +13 -1
  125. package/lib/utils/logger.d.ts +1 -1
  126. package/lib/utils/logger.js +1 -1
  127. package/lib/utils/object.d.ts +11 -0
  128. package/lib/utils/object.js +24 -1
  129. package/lib/utils/params.d.ts +8 -22
  130. package/lib/utils/params.js +15 -43
  131. package/lib/utils/plugin-compliance.d.ts +98 -0
  132. package/lib/utils/plugin-compliance.js +78 -0
  133. package/lib/utils/proof-of-work.d.ts +69 -0
  134. package/lib/utils/proof-of-work.js +139 -0
  135. package/lib/utils/response.d.ts +16 -6
  136. package/lib/utils/response.js +18 -15
  137. package/lib/utils/retention.d.ts +17 -0
  138. package/lib/utils/retention.js +30 -0
  139. package/lib/utils/secret-encryption.d.ts +7 -7
  140. package/lib/utils/secret-encryption.js +9 -10
  141. package/lib/utils/secret-rotation.js +2 -2
  142. package/lib/utils/sensitive-patterns.js +4 -5
  143. package/lib/utils/service-registry.d.ts +15 -0
  144. package/lib/utils/service-registry.js +24 -0
  145. package/lib/utils/ssrf.d.ts +11 -2
  146. package/lib/utils/ssrf.js +112 -33
  147. package/lib/validation/ai-schemas.js +3 -2
  148. package/lib/validation/common-schemas.d.ts +0 -9
  149. package/lib/validation/common-schemas.js +1 -7
  150. package/lib/validation/dockerfile-static.d.ts +26 -0
  151. package/lib/validation/dockerfile-static.js +210 -0
  152. package/lib/validation/index.d.ts +13 -4
  153. package/lib/validation/index.js +14 -5
  154. package/lib/validation/message-schemas.js +6 -4
  155. package/lib/validation/pipeline-schemas.d.ts +8 -2
  156. package/lib/validation/pipeline-schemas.js +30 -4
  157. package/lib/validation/plugin-base-images.d.ts +20 -0
  158. package/lib/validation/plugin-base-images.js +17 -0
  159. package/lib/validation/plugin-catalog-detect.d.ts +86 -0
  160. package/lib/validation/plugin-catalog-detect.js +237 -0
  161. package/lib/validation/plugin-catalog-metadata.d.ts +141 -0
  162. package/lib/validation/plugin-catalog-metadata.js +162 -0
  163. package/lib/validation/plugin-heuristics.d.ts +41 -0
  164. package/lib/validation/plugin-heuristics.js +211 -0
  165. package/lib/validation/plugin-lint.d.ts +18 -0
  166. package/lib/validation/plugin-lint.js +136 -0
  167. package/lib/validation/plugin-name-confusable.d.ts +15 -0
  168. package/lib/validation/plugin-name-confusable.js +81 -0
  169. package/lib/validation/plugin-schemas.d.ts +40 -26
  170. package/lib/validation/plugin-schemas.js +26 -23
  171. package/lib/validation/plugin-spec-schema.d.ts +112 -0
  172. package/lib/validation/plugin-spec-schema.js +163 -0
  173. package/lib/validation/plugin-template-contract.d.ts +64 -0
  174. package/lib/validation/plugin-template-contract.js +113 -0
  175. package/package.json +69 -4
  176. package/lib/testing/mock-api-core.d.ts +0 -150
  177. package/lib/testing/mock-api-core.js +0 -246
  178. package/lib/testing/mock-drizzle.d.ts +0 -6
  179. package/lib/testing/mock-drizzle.js +0 -57
  180. package/lib/testing/route-coverage.d.ts +0 -64
  181. package/lib/testing/route-coverage.js +0 -183
  182. package/lib/testing/service-tokens.d.ts +0 -66
  183. package/lib/testing/service-tokens.js +0 -137
  184. package/lib/testing/tier-mock.d.ts +0 -44
  185. package/lib/testing/tier-mock.js +0 -65
  186. package/lib/testing/user-tokens.d.ts +0 -75
  187. package/lib/testing/user-tokens.js +0 -115
package/lib/utils/ssrf.js CHANGED
@@ -28,44 +28,123 @@ import { lookup } from 'dns/promises';
28
28
  import { request as httpRequest } from 'http';
29
29
  import { request as httpsRequest } from 'https';
30
30
  import { isIP } from 'net';
31
+ /** IPv4 ranges that are NOT publicly routable unicast: [first octets as a 32-bit int, prefix length]. */
32
+ const IPV4_NON_GLOBAL = [
33
+ ['0.0.0.0', 8], // "this network"
34
+ ['10.0.0.0', 8], // private
35
+ ['100.64.0.0', 10], // carrier-grade NAT
36
+ ['127.0.0.0', 8], // loopback
37
+ ['169.254.0.0', 16], // link-local, incl. 169.254.169.254 cloud metadata
38
+ ['172.16.0.0', 12], // private
39
+ ['192.0.0.0', 24], // IETF protocol assignments (incl. 192.0.0.192 metadata on some clouds)
40
+ ['192.0.2.0', 24], // TEST-NET-1
41
+ ['192.88.99.0', 24], // 6to4 relay anycast (deprecated)
42
+ ['192.168.0.0', 16], // private
43
+ ['198.18.0.0', 15], // benchmarking
44
+ ['198.51.100.0', 24], // TEST-NET-2
45
+ ['203.0.113.0', 24], // TEST-NET-3
46
+ ['224.0.0.0', 4], // multicast
47
+ ['240.0.0.0', 4], // reserved, incl. 255.255.255.255 broadcast
48
+ ];
49
+ function ipv4ToInt(ip) {
50
+ const m = ip.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
51
+ if (!m)
52
+ return null;
53
+ const octets = m.slice(1).map(Number);
54
+ if (octets.some((o) => o > 255))
55
+ return null;
56
+ return ((octets[0] * 256 + octets[1]) * 256 + octets[2]) * 256 + octets[3];
57
+ }
58
+ const IPV4_NON_GLOBAL_INT = IPV4_NON_GLOBAL.map(([base, bits]) => [ipv4ToInt(base), bits]);
59
+ function isNonGlobalV4(n) {
60
+ return IPV4_NON_GLOBAL_INT.some(([base, bits]) => {
61
+ const size = 2 ** (32 - bits);
62
+ return n >= base && n < base + size;
63
+ });
64
+ }
65
+ /** Parse an IPv6 literal into its eight 16-bit groups (null when malformed). */
66
+ function parseIpv6(ip) {
67
+ let addr = ip.split('%')[0]; // drop a zone id (fe80::1%eth0)
68
+ // An embedded dotted IPv4 tail (::ffff:1.2.3.4, 64:ff9b::1.2.3.4) → two groups.
69
+ const tail = addr.match(/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/);
70
+ if (tail) {
71
+ const n = ipv4ToInt(tail[1]);
72
+ if (n === null)
73
+ return null;
74
+ addr = `${addr.slice(0, -tail[1].length)}${Math.floor(n / 65536).toString(16)}:${(n % 65536).toString(16)}`;
75
+ }
76
+ const halves = addr.split('::');
77
+ if (halves.length > 2)
78
+ return null;
79
+ const parse = (part) => {
80
+ if (part === '')
81
+ return [];
82
+ const groups = part.split(':');
83
+ const out = [];
84
+ for (const g of groups) {
85
+ if (!/^[0-9a-f]{1,4}$/i.test(g))
86
+ return null;
87
+ out.push(parseInt(g, 16));
88
+ }
89
+ return out;
90
+ };
91
+ const head = parse(halves[0]);
92
+ const rest = halves.length === 2 ? parse(halves[1]) : [];
93
+ if (!head || !rest)
94
+ return null;
95
+ if (halves.length === 1)
96
+ return head.length === 8 ? head : null;
97
+ const zeros = 8 - head.length - rest.length;
98
+ if (zeros < 1)
99
+ return null;
100
+ return [...head, ...new Array(zeros).fill(0), ...rest];
101
+ }
102
+ const v4FromGroups = (hi, lo) => hi * 65536 + lo;
31
103
  /**
32
- * True for loopback / private / link-local / CGNAT / cloud-metadata / ULA
33
- * addresses — the ranges an outbound tenant webhook must never reach.
104
+ * True for any address that is NOT publicly routable unicast — the ranges an
105
+ * outbound tenant webhook must never reach.
106
+ *
107
+ * An ALLOWLIST, not a denylist: an IPv6 address is acceptable only inside the
108
+ * global-unicast block `2000::/3` (so link-local `fe80::/10`, site-local
109
+ * `fec0::/10`, unique-local `fc00::/7`, multicast, loopback, unspecified and
110
+ * every future special range are refused by default). Formats that EMBED an
111
+ * IPv4 address are unwrapped and judged by that address — IPv4-mapped
112
+ * `::ffff:0:0/96` (dotted or hex), NAT64 `64:ff9b::/96` and 6to4 `2002::/16` —
113
+ * so `::ffff:7f00:1` or `2002:a9fe:a9fe::` can't smuggle loopback or the
114
+ * metadata endpoint past the check. Anything unparseable is refused.
34
115
  */
35
116
  export function isPrivateAddress(ip) {
36
117
  const addr = ip.replace(/^\[|\]$/g, '').toLowerCase();
37
- const v4 = addr.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
38
- if (v4) {
39
- const a = Number(v4[1]), b = Number(v4[2]);
40
- return a === 0 || a === 10 || a === 127
41
- || (a === 169 && b === 254) // link-local incl. 169.254.169.254 metadata
42
- || (a === 172 && b >= 16 && b <= 31)
43
- || (a === 192 && b === 168)
44
- || (a === 100 && b >= 64 && b <= 127); // CGNAT
118
+ const v4 = ipv4ToInt(addr);
119
+ if (v4 !== null)
120
+ return isNonGlobalV4(v4);
121
+ if (/^\d{1,3}(\.\d{1,3}){3}$/.test(addr))
122
+ return true; // out-of-range octet
123
+ const g = parseIpv6(addr);
124
+ if (!g)
125
+ return true; // not an address we can reason about → refuse
126
+ // IPv4-mapped ::ffff:a.b.c.d
127
+ if (g[0] === 0 && g[1] === 0 && g[2] === 0 && g[3] === 0 && g[4] === 0 && g[5] === 0xffff) {
128
+ return isNonGlobalV4(v4FromGroups(g[6], g[7]));
45
129
  }
46
- if (addr === '::1' || addr === '::')
47
- return true;
48
- if (addr.startsWith('::ffff:')) {
49
- const suffix = addr.slice(7);
50
- // Dotted form (`::ffff:127.0.0.1`) — recurse straight into the v4 checks.
51
- if (suffix.includes('.'))
52
- return isPrivateAddress(suffix);
53
- // Hex form (`::ffff:7f00:1` = 127.0.0.1, `::ffff:c0a8:1` = 192.168.0.1):
54
- // the low 32 bits are written as the last one/two hex groups. Fold them into
55
- // a dotted quad and recurse so the v4 ranges below still catch it — without
56
- // this the hex form slips past every check and reaches loopback/private space.
57
- const groups = suffix.split(':');
58
- const high = parseInt(groups[groups.length - 2] ?? '0', 16);
59
- const low = parseInt(groups[groups.length - 1] ?? '0', 16);
60
- if (Number.isNaN(high) || Number.isNaN(low))
61
- return false;
62
- // Fold each 16-bit half into two octets (arithmetic, not bitwise, to satisfy
63
- // the no-bitwise lint): high → a.b, low → c.d.
64
- const dotted = `${Math.floor(high / 256) % 256}.${high % 256}.${Math.floor(low / 256) % 256}.${low % 256}`;
65
- return isPrivateAddress(dotted);
130
+ // NAT64 well-known prefix 64:ff9b::/96 — the target is the embedded IPv4.
131
+ if (g[0] === 0x64 && g[1] === 0xff9b && g[2] === 0 && g[3] === 0 && g[4] === 0 && g[5] === 0) {
132
+ return isNonGlobalV4(v4FromGroups(g[6], g[7]));
66
133
  }
67
- return addr.startsWith('fc') || addr.startsWith('fd') // unique-local
68
- || addr.startsWith('fe80'); // link-local
134
+ // 6to4 2002:V4HI:V4LO::/48 — the tunnel endpoint is the embedded IPv4.
135
+ if (g[0] === 0x2002)
136
+ return isNonGlobalV4(v4FromGroups(g[1], g[2]));
137
+ // Only global unicast 2000::/3 from here on.
138
+ if (g[0] < 0x2000 || g[0] > 0x3fff)
139
+ return true;
140
+ // …minus its special-purpose carve-outs:
141
+ if (g[0] === 0x2001 && g[1] < 0x0200)
142
+ return true; // 2001::/23 IETF protocol assignments (Teredo, benchmarking, ORCHID…)
143
+ if (g[0] === 0x2001 && g[1] === 0x0db8)
144
+ return true; // 2001:db8::/32 documentation
145
+ if (g[0] === 0x3fff && g[1] < 0x1000)
146
+ return true; // 3fff::/20 documentation
147
+ return false;
69
148
  }
70
149
  /**
71
150
  * Resolve and vet an outbound URL, returning the pinned target to connect to.
@@ -220,4 +299,4 @@ function makeResponse(status, statusText, headers, body, redirected) {
220
299
  json: () => JSON.parse(body.toString('utf8')),
221
300
  };
222
301
  }
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zc3JmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsT0FBTyxJQUFJLFlBQVksRUFBdUIsTUFBTSxPQUFPLENBQUM7QUFDckUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEtBQUssQ0FBQztBQUUzQjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFBVTtJQUN6QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0RCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7SUFDdEUsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNQLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHO2VBQ2xDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsNENBQTRDO2VBQ3JFLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7ZUFDakMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJ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OUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FDbkIsTUFBYyxFQUNkLFVBQThCLEVBQzlCLE9BQStCLEVBQy9CLElBQVksRUFDWixVQUFtQjtJQUVuQixPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxHQUFHLEdBQUc7UUFDakMsTUFBTTtRQUNOLFVBQVUsRUFBRSxVQUFVLElBQUksRUFBRTtRQUM1QixVQUFVO1FBQ1YsT0FBTztRQUNQLElBQUk7UUFDSixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDakMsSUFBSSxFQUFFLEdBQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBTTtLQUN0RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNoYXJlZCBTU1JGIGd1YXJkIGZvciB1c2VyL3RlbmFudC1zdXBwbGllZCBvdXRib3VuZCBVUkxzICh3ZWJob29rIHRhcmdldHMsXG4gKiBjYWxsYmFja3MsIOKApikuIFByb21vdGVkIHRvIGFwaS1jb3JlIHNvIGV2ZXJ5IHNlcnZpY2UgdGhhdCBsZXRzIGFuIG9yZyBwb2ludFxuICogdGhlIHBsYXRmb3JtIGF0IGFuIGFyYml0cmFyeSBVUkwgZW5mb3JjZXMgdGhlIFNBTUUgZGVueWxpc3QgaW5zdGVhZCBvZiBlYWNoXG4gKiByZS1kZXJpdmluZyBpdCAodGhlIGNvbXBsaWFuY2Ugbm90aWZpZXIgYW5kIHRoZSBwbGF0Zm9ybSBhbGVydCByZWxheSBib3RoXG4gKiBjb25zdW1lIHRoaXMpLlxuICpcbiAqIFRoZSBndWFyZCByZXNvbHZlcyB0aGUgaG9zdCB1cCBmcm9udCBhbmQgcmVqZWN0cyBhbnkgYWRkcmVzcyB0aGF0IGlzIOKAlCBvclxuICogcmVzb2x2ZXMgdG8g4oCUIGEgbG9vcGJhY2sgLyBwcml2YXRlIC8gbGluay1sb2NhbCAvIHVuaXF1ZS1sb2NhbCAvIGNhcnJpZXItZ3JhZGVcbiAqIE5BVCAvIGNsb3VkLW1ldGFkYXRhIHJhbmdlLCBzbyBhIHRlbmFudCBjYW4ndCBhaW0gYSB3ZWJob29rIGF0XG4gKiBgMTY5LjI1NC4xNjkuMjU0YCBvciBhbiBpbi1jbHVzdGVyIHNlcnZpY2UuXG4gKlxuICogVFdPIFBPU1RVUkVTLCBPTkUgU1VSVklWT1IuIGBhc3NlcnRTYWZlVXJsYCBvbmx5ICp2YWxpZGF0ZXMqIGEgVVJMOiBpdFxuICogcmVzb2x2ZXMgdGhlIGhvc3QsIGNoZWNrcyB0aGUgYWRkcmVzc2VzIGFuZCB0aGVuIHRocm93cyB0aGUgaG9zdG5hbWUgYXdheS5cbiAqIEFueXRoaW5nIHRoYXQgZ29lcyBvbiB0byBgZmV0Y2godXJsKWAgcmUtcmVzb2x2ZXMgRE5TIGFuZCBjYW4gdGhlcmVmb3JlIGJlXG4gKiBwb2ludGVkIGF0IGEgcHJpdmF0ZSBhZGRyZXNzIGJldHdlZW4gdGhlIGNoZWNrIGFuZCB0aGUgY29ubmVjdCAoY2xhc3NpY1xuICogRE5TIHJlYmluZGluZykuIHtAbGluayBzYWZlRmV0Y2h9IGlzIHRoZSBwb3N0dXJlIHRoYXQgYWN0dWFsbHkgaG9sZHM6IGl0XG4gKiByZXNvbHZlcywgUElOUyB0aGUgdmV0dGVkIElQIGludG8gdGhlIHNvY2tldCdzIGBsb29rdXBgLCByZWZ1c2VzIHJlZGlyZWN0cyxcbiAqIGFuZCBjYXBzIGJvdGggdGhlIHJlc3BvbnNlIHNpemUgYW5kIHRoZSB3YWxsLWNsb2NrIHRpbWUuXG4gKlxuICogU286IHVzZSB7QGxpbmsgc2FmZUZldGNofSBmb3IgZXZlcnkgb3V0Ym91bmQgcmVxdWVzdCB0byBhIHVzZXIvdGVuYW50LXN1cHBsaWVkXG4gKiBVUkwuIGBhc3NlcnRTYWZlVXJsYCBpcyBmb3IgTk9OLUZFVENIIHZhbGlkYXRpb24gb25seSDigJQgcmVqZWN0aW5nIGEgYmFkIFVSTCBhdFxuICogY3JlYXRlL3VwZGF0ZSB0aW1lIGJlZm9yZSBpdCBpcyBldmVyIHN0b3JlZC4gTmV2ZXIgcGFpciBpdCB3aXRoIGBmZXRjaGAuXG4gKi9cblxuaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnZG5zL3Byb21pc2VzJztcbmltcG9ydCB7IHJlcXVlc3QgYXMgaHR0cFJlcXVlc3QgfSBmcm9tICdodHRwJztcbmltcG9ydCB7IHJlcXVlc3QgYXMgaHR0cHNSZXF1ZXN0LCB0eXBlIFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHsgaXNJUCB9IGZyb20gJ25ldCc7XG5cbi8qKlxuICogVHJ1ZSBmb3IgbG9vcGJhY2sgLyBwcml2YXRlIC8gbGluay1sb2NhbCAvIENHTkFUIC8gY2xvdWQtbWV0YWRhdGEgLyBVTEFcbiAqIGFkZHJlc3NlcyDigJQgdGhlIHJhbmdlcyBhbiBvdXRib3VuZCB0ZW5hbnQgd2ViaG9vayBtdXN0IG5ldmVyIHJlYWNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcml2YXRlQWRkcmVzcyhpcDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGFkZHIgPSBpcC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHY0ID0gYWRkci5tYXRjaCgvXihcXGR7MSwzfSlcXC4oXFxkezEsM30pXFwuKFxcZHsxLDN9KVxcLihcXGR7MSwzfSkkLyk7XG4gIGlmICh2NCkge1xuICAgIGNvbnN0IGEgPSBOdW1iZXIodjRbMV0pLCBiID0gTnVtYmVyKHY0WzJdKTtcbiAgICByZXR1cm4gYSA9PT0gMCB8fCBhID09PSAxMCB8fCBhID09PSAxMjdcbiAgICAgIHx8IChhID09PSAxNjkgJiYgYiA9PT0gMjU0KSAvLyBsaW5rLWxvY2FsIGluY2wuIDE2OS4yNTQuMTY5LjI1NCBtZXRhZGF0YVxuICAgICAgfHwgKGEgPT09IDE3MiAmJiBiID49IDE2ICYmIGIgPD0gMzEpXG4gICAgICB8fCAoYSA9PT0gMTkyICYmIGIgPT09IDE2OClcbiAgICAgIHx8IChhID09PSAxMDAgJiYgYiA+PSA2NCAmJiBiIDw9IDEyNyk7IC8vIENHTkFUXG4gIH1cbiAgaWYgKGFkZHIgPT09ICc6OjEnIHx8IGFkZHIgPT09ICc6OicpIHJldHVybiB0cnVlO1xuICBpZiAoYWRkci5zdGFydHNXaXRoKCc6OmZmZmY6JykpIHtcbiAgICBjb25zdCBzdWZmaXggPSBhZGRyLnNsaWNlKDcpO1xuICAgIC8vIERvdHRlZCBmb3JtIChgOjpmZmZmOjEyNy4wLjAuMWApIOKAlCByZWN1cnNlIHN0cmFpZ2h0IGludG8gdGhlIHY0IGNoZWNrcy5cbiAgICBpZiAoc3VmZml4LmluY2x1ZGVzKCcuJykpIHJldHVybiBpc1ByaXZhdGVBZGRyZXNzKHN1ZmZpeCk7XG4gICAgLy8gSGV4IGZvcm0gKGA6OmZmZmY6N2YwMDoxYCA9IDEyNy4wLjAuMSwgYDo6ZmZmZjpjMGE4OjFgID0gMTkyLjE2OC4wLjEpOlxuICAgIC8vIHRoZSBsb3cgMzIgYml0cyBhcmUgd3JpdHRlbiBhcyB0aGUgbGFzdCBvbmUvdHdvIGhleCBncm91cHMuIEZvbGQgdGhlbSBpbnRvXG4gICAgLy8gYSBkb3R0ZWQgcXVhZCBhbmQgcmVjdXJzZSBzbyB0aGUgdjQgcmFuZ2VzIGJlbG93IHN0aWxsIGNhdGNoIGl0IOKAlCB3aXRob3V0XG4gICAgLy8gdGhpcyB0aGUgaGV4IGZvcm0gc2xpcHMgcGFzdCBldmVyeSBjaGVjayBhbmQgcmVhY2hlcyBsb29wYmFjay9wcml2YXRlIHNwYWNlLlxuICAgIGNvbnN0IGdyb3VwcyA9IHN1ZmZpeC5zcGxpdCgnOicpO1xuICAgIGNvbnN0IGhpZ2ggPSBwYXJzZUludChncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDJdID8/ICcwJywgMTYpO1xuICAgIGNvbnN0IGxvdyA9IHBhcnNlSW50KGdyb3Vwc1tncm91cHMubGVuZ3RoIC0gMV0gPz8gJzAnLCAxNik7XG4gICAgaWYgKE51bWJlci5pc05hTihoaWdoKSB8fCBOdW1iZXIuaXNOYU4obG93KSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIEZvbGQgZWFjaCAxNi1iaXQgaGFsZiBpbnRvIHR3byBvY3RldHMgKGFyaXRobWV0aWMsIG5vdCBiaXR3aXNlLCB0byBzYXRpc2Z5XG4gICAgLy8gdGhlIG5vLWJpdHdpc2UgbGludCk6IGhpZ2gg4oaSIGEuYiwgbG93IOKGkiBjLmQuXG4gICAgY29uc3QgZG90dGVkID0gYCR7TWF0aC5mbG9vcihoaWdoIC8gMjU2KSAlIDI1Nn0uJHtoaWdoICUgMjU2fS4ke01hdGguZmxvb3IobG93IC8gMjU2KSAlIDI1Nn0uJHtsb3cgJSAyNTZ9YDtcbiAgICByZXR1cm4gaXNQcml2YXRlQWRkcmVzcyhkb3R0ZWQpO1xuICB9XG4gIHJldHVybiBhZGRyLnN0YXJ0c1dpdGgoJ2ZjJykgfHwgYWRkci5zdGFydHNXaXRoKCdmZCcpIC8vIHVuaXF1ZS1sb2NhbFxuICAgIHx8IGFkZHIuc3RhcnRzV2l0aCgnZmU4MCcpOyAvLyBsaW5rLWxvY2FsXG59XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgYXNzZXJ0U2FmZVVybH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFNhZmVVcmxPcHRpb25zIHtcbiAgLyoqIEFsbG93ZWQgVVJMIHByb3RvY29scyAoZGVmYXVsdDogYFsnaHR0cHM6J11gKS4gKi9cbiAgcHJvdG9jb2xzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQSBETlMtcmVzb2x2ZWQsIFNTUkYtdmV0dGVkIHRhcmdldCB0byBjb25uZWN0IHRvIGJ5IFBJTk5FRCBJUC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaW5uZWRUYXJnZXQge1xuICAvKiogT3JpZ2luYWwgaG9zdG5hbWUg4oCUIHByZXNlcnZlZCBmb3IgdGhlIEhvc3QgaGVhZGVyIGFuZCBUTFMgU05JLiAqL1xuICBob3N0OiBzdHJpbmc7XG4gIC8qKiBUaGUgZXhhY3QgdmFsaWRhdGVkIElQIHRoZSBzb2NrZXQgbXVzdCBjb25uZWN0IHRvIChubyByZS1yZXNvbHV0aW9uKS4gKi9cbiAgYWRkcmVzczogc3RyaW5nO1xuICBmYW1pbHk6IG51bWJlcjtcbiAgcG9ydDogbnVtYmVyO1xuICAvKiogYCdodHRwczonYCBvciBgJ2h0dHA6J2AuICovXG4gIHByb3RvY29sOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbmQgdmV0IGFuIG91dGJvdW5kIFVSTCwgcmV0dXJuaW5nIHRoZSBwaW5uZWQgdGFyZ2V0IHRvIGNvbm5lY3QgdG8uXG4gKlxuICogUmVqZWN0cyBhIFVSTCB0aGF0IGlzIG1hbGZvcm1lZCwgdXNlcyBhIGRpc2FsbG93ZWQgcHJvdG9jb2wsIG9yIHBvaW50cyBhdCBhXG4gKiBwcml2YXRlL2xvb3BiYWNrL2xpbmstbG9jYWwvbWV0YWRhdGEgYWRkcmVzcyAoYnkgSVAgbGl0ZXJhbCBvciBieSBETlNcbiAqIHJlc29sdXRpb24pLiBSZWplY3RzIGlmIEFOWSByZXNvbHV0aW9uIGlzIHByaXZhdGUgKGRlZmVuY2UgaW4gZGVwdGgpLCB0aGVuXG4gKiBwaW5zIHRoZSBmaXJzdCB2ZXR0ZWQgYWRkcmVzcyBzbyB0aGUgY29ubmVjdGlvbiBjYW4gbmV2ZXIgcmVhY2ggYW4gYWRkcmVzc1xuICogdGhpcyBmdW5jdGlvbiBkaWQgbm90IGFwcHJvdmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2FmZVRhcmdldChyYXdVcmw6IHN0cmluZywgb3B0czogU2FmZVVybE9wdGlvbnMgPSB7fSk6IFByb21pc2U8UGlubmVkVGFyZ2V0PiB7XG4gIGNvbnN0IHByb3RvY29scyA9IG9wdHMucHJvdG9jb2xzID8/IFsnaHR0cHM6J107XG4gIGxldCB1OiBVUkw7XG4gIHRyeSB7IHUgPSBuZXcgVVJMKHJhd1VybCk7IH0gY2F0Y2ggeyB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdXJsJyk7IH1cbiAgaWYgKCFwcm90b2NvbHMuaW5jbHVkZXModS5wcm90b2NvbCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVybCBtdXN0IHVzZSAke3Byb3RvY29scy5tYXAoKHApID0+IHAucmVwbGFjZSgvOiQvLCAnJykpLmpvaW4oJy8nKX1gKTtcbiAgfVxuICBjb25zdCBob3N0ID0gdS5ob3N0bmFtZS5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICBjb25zdCBwb3J0ID0gdS5wb3J0ID8gTnVtYmVyKHUucG9ydCkgOiAodS5wcm90b2NvbCA9PT0gJ2h0dHA6JyA/IDgwIDogNDQzKTtcbiAgY29uc3QgbGl0ZXJhbEZhbWlseSA9IGlzSVAoaG9zdCk7XG4gIGlmIChsaXRlcmFsRmFtaWx5KSB7XG4gICAgaWYgKGlzUHJpdmF0ZUFkZHJlc3MoaG9zdCkpIHRocm93IG5ldyBFcnJvcigndXJsIHRhcmdldHMgYSBwcml2YXRlIGFkZHJlc3MnKTtcbiAgICByZXR1cm4geyBob3N0LCBhZGRyZXNzOiBob3N0LCBmYW1pbHk6IGxpdGVyYWxGYW1pbHksIHBvcnQsIHByb3RvY29sOiB1LnByb3RvY29sIH07XG4gIH1cbiAgbGV0IGFkZHJzOiB7IGFkZHJlc3M6IHN0cmluZzsgZmFtaWx5OiBudW1iZXIgfVtdO1xuICB0cnkgeyBhZGRycyA9IGF3YWl0IGxvb2t1cChob3N0LCB7IGFsbDogdHJ1ZSB9KTsgfSBjYXRjaCB7IHRocm93IG5ldyBFcnJvcigndXJsIGhvc3QgZGlkIG5vdCByZXNvbHZlJyk7IH1cbiAgaWYgKGFkZHJzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCd1cmwgaG9zdCBkaWQgbm90IHJlc29sdmUnKTtcbiAgaWYgKGFkZHJzLnNvbWUoKGEpID0+IGlzUHJpdmF0ZUFkZHJlc3MoYS5hZGRyZXNzKSkpIHRocm93IG5ldyBFcnJvcigndXJsIHJlc29sdmVzIHRvIGEgcHJpdmF0ZSBhZGRyZXNzJyk7XG4gIHJldHVybiB7IGhvc3QsIGFkZHJlc3M6IGFkZHJzWzBdLmFkZHJlc3MsIGZhbWlseTogYWRkcnNbMF0uZmFtaWx5LCBwb3J0LCBwcm90b2NvbDogdS5wcm90b2NvbCB9O1xufVxuXG4vKipcbiAqIFZBTElEQVRJT04gT05MWSDigJQgbmV2ZXIgcGFpciB0aGlzIHdpdGggYSBgZmV0Y2hgLlxuICpcbiAqIFJlc29sdmVzIHRoZSBob3N0IGFuZCB0aHJvd3Mgd2hlbiB0aGUgVVJMIGlzIG1hbGZvcm1lZCwgdXNlcyBhIGRpc2FsbG93ZWRcbiAqIHByb3RvY29sLCBvciByZXNvbHZlcyB0byBhIHByaXZhdGUvbG9vcGJhY2svbGluay1sb2NhbC9tZXRhZGF0YSBhZGRyZXNzLiBVc2VcbiAqIGl0IHRvIHJlamVjdCBhIGJhZCBVUkwgYXQgY3JlYXRlL3VwZGF0ZSB0aW1lIChiZWZvcmUgaXQgaXMgc3RvcmVkKSwgb3IgaW4gYW55XG4gKiBvdGhlciBwbGFjZSB3aGVyZSBub3RoaW5nIGlzIGFib3V0IHRvIGNvbm5lY3QuIEZvciBhbiBhY3R1YWwgb3V0Ym91bmQgcmVxdWVzdFxuICogdXNlIHtAbGluayBzYWZlRmV0Y2h9LCB3aGljaCBwaW5zIHRoZSBhZGRyZXNzIGl0IHZldHRlZCDigJQgdmFsaWRhdGluZyBoZXJlIGFuZFxuICogdGhlbiBsZXR0aW5nIGBmZXRjaGAgcmUtcmVzb2x2ZSBpcyBhIEROUy1yZWJpbmRpbmcgVE9DVE9VIGhvbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3NlcnRTYWZlVXJsKHJhd1VybDogc3RyaW5nLCBvcHRzOiBTYWZlVXJsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJlc29sdmVTYWZlVGFyZ2V0KHJhd1VybCwgb3B0cyk7XG59XG5cbi8qKiBEZWZhdWx0IHdhbGwtY2xvY2sgY2FwIGZvciBvbmUge0BsaW5rIHNhZmVGZXRjaH0gcmVxdWVzdC4gKi9cbmV4cG9ydCBjb25zdCBTQUZFX0ZFVENIX1RJTUVPVVRfTVMgPSAxMF8wMDA7XG4vKiogRGVmYXVsdCByZXNwb25zZS1ib2R5IGNhcCBmb3Ige0BsaW5rIHNhZmVGZXRjaH0gKDUgTWlCKS4gKi9cbmV4cG9ydCBjb25zdCBTQUZFX0ZFVENIX01BWF9CWVRFUyA9IDUgKiAxMDI0ICogMTAyNDtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBzYWZlRmV0Y2h9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYWZlRmV0Y2hPcHRpb25zIGV4dGVuZHMgU2FmZVVybE9wdGlvbnMge1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBib2R5Pzogc3RyaW5nIHwgQnVmZmVyO1xuICAvKiogQ2FsbGVyIGFib3J0IChjb21wb3NlZCB3aXRoIGB0aW1lb3V0TXNgKS4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBXYWxsLWNsb2NrIGNhcCBmb3IgdGhlIHdob2xlIHJlcXVlc3QgKGRlZmF1bHQge0BsaW5rIFNBRkVfRkVUQ0hfVElNRU9VVF9NU30pLiAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBCb2R5LXNpemUgY2FwOyBleGNlZWRpbmcgaXQgYWJvcnRzIGFuZCB0aHJvd3MgKGRlZmF1bHQge0BsaW5rIFNBRkVfRkVUQ0hfTUFYX0JZVEVTfSkuICovXG4gIG1heFJlc3BvbnNlQnl0ZXM/OiBudW1iZXI7XG59XG5cbi8qKiBOb3JtYWxpemVkIHJlc3BvbnNlIGZyb20ge0BsaW5rIHNhZmVGZXRjaH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFNhZmVGZXRjaFJlc3BvbnNlIHtcbiAgLyoqIFRydWUgb25seSBmb3IgYSAyeHguIEEgcmVmdXNlZCByZWRpcmVjdCBpcyBuZXZlciBgb2tgLiAqL1xuICBvazogYm9vbGVhbjtcbiAgc3RhdHVzOiBudW1iZXI7XG4gIHN0YXR1c1RleHQ6IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgb3JpZ2luIGFuc3dlcmVkIHdpdGggYSAzeHgg4oCUIFJFRlVTRUQsIG5ldmVyIGZvbGxvd2VkLiAqL1xuICByZWRpcmVjdGVkOiBib29sZWFuO1xuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogUmF3IGJvZHkgYnl0ZXMgKGVtcHR5IGZvciBhIHJlZnVzZWQgcmVkaXJlY3QsIHdob3NlIGJvZHkgaXMgZGlzY2FyZGVkKS4gKi9cbiAgYm9keTogQnVmZmVyO1xuICB0ZXh0KCk6IHN0cmluZztcbiAganNvbjxUID0gdW5rbm93bj4oKTogVDtcbn1cblxuLyoqXG4gKiBTU1JGLXNhZmUgb3V0Ym91bmQgcmVxdWVzdCB0byBhIHVzZXIvdGVuYW50LXN1cHBsaWVkIFVSTC5cbiAqXG4gKiAtIHJlc29sdmVzICsgdmV0cyB0aGUgaG9zdCwgdGhlbiBQSU5TIHRoZSBleGFjdCB2YWxpZGF0ZWQgSVAgaW50byB0aGUgc29ja2V0XG4gKiAgIGBsb29rdXBgIHNvIGBuZXQuY29ubmVjdGAgbmV2ZXIgcmUtcmVzb2x2ZXMg4oCUIHRoaXMgaXMgd2hhdCBkZWZlYXRzIEROU1xuICogICByZWJpbmRpbmcuIFNOSSArIEhvc3Qgc3RheSB0aGUgb3JpZ2luYWwgaG9zdG5hbWUgc28gVExTIHZlcmlmaWNhdGlvbiBpc1xuICogICB1bmNoYW5nZWQuXG4gKiAtIFJFRlVTRVMgcmVkaXJlY3RzOiBgaHR0cChzKS5yZXF1ZXN0YCBuZXZlciBmb2xsb3dzIG9uZSwgYW5kIGEgM3h4IGNvbWVzIGJhY2tcbiAqICAgYXMgYHsgcmVkaXJlY3RlZDogdHJ1ZSwgb2s6IGZhbHNlIH1gIGZvciB0aGUgY2FsbGVyIHRvIHJlY29yZCBhcyBhIGZhaWx1cmUuXG4gKiAtIGNhcHMgdGhlIHJlc3BvbnNlIGJvZHkgKHtAbGluayBTYWZlRmV0Y2hPcHRpb25zLm1heFJlc3BvbnNlQnl0ZXN9KSBhbmQgdGhlXG4gKiAgIHdhbGwgY2xvY2sgKHtAbGluayBTYWZlRmV0Y2hPcHRpb25zLnRpbWVvdXRNc30pLlxuICpcbiAqIFRocm93cyBvbiBhIHJlamVjdGVkIFVSTCwgYSB0cmFuc3BvcnQgZXJyb3IsIGEgdGltZW91dCwgb3IgYW4gb3ZlcnNpemVkIGJvZHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlRmV0Y2gocmF3VXJsOiBzdHJpbmcsIG9wdHM6IFNhZmVGZXRjaE9wdGlvbnMgPSB7fSk6IFByb21pc2U8U2FmZUZldGNoUmVzcG9uc2U+IHtcbiAgY29uc3QgbWF4Qnl0ZXMgPSBvcHRzLm1heFJlc3BvbnNlQnl0ZXMgPz8gU0FGRV9GRVRDSF9NQVhfQllURVM7XG4gIGNvbnN0IHBpbiA9IGF3YWl0IHJlc29sdmVTYWZlVGFyZ2V0KHJhd1VybCwgb3B0cyk7XG4gIGNvbnN0IHUgPSBuZXcgVVJMKHJhd1VybCk7XG4gIGNvbnN0IGJvZHkgPSBvcHRzLmJvZHkgPT09IHVuZGVmaW5lZFxuICAgID8gdW5kZWZpbmVkXG4gICAgOiAoQnVmZmVyLmlzQnVmZmVyKG9wdHMuYm9keSkgPyBvcHRzLmJvZHkgOiBCdWZmZXIuZnJvbShvcHRzLmJvZHksICd1dGY4JykpO1xuXG4gIC8vIENvbXBvc2UgdGhlIGNhbGxlcidzIGFib3J0IHdpdGggb3VyIG93biBkZWFkbGluZSBzbyB3aGljaGV2ZXIgZmlyZXMgZmlyc3Qgd2lucy5cbiAgY29uc3QgdGltZW91dCA9IEFib3J0U2lnbmFsLnRpbWVvdXQob3B0cy50aW1lb3V0TXMgPz8gU0FGRV9GRVRDSF9USU1FT1VUX01TKTtcbiAgY29uc3Qgc2lnbmFsID0gb3B0cy5zaWduYWwgPyBBYm9ydFNpZ25hbC5hbnkoW29wdHMuc2lnbmFsLCB0aW1lb3V0XSkgOiB0aW1lb3V0O1xuXG4gIGNvbnN0IG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0ge1xuICAgIG1ldGhvZDogb3B0cy5tZXRob2QgPz8gJ0dFVCcsXG4gICAgaG9zdG5hbWU6IHBpbi5ob3N0LFxuICAgIHBvcnQ6IHBpbi5wb3J0LFxuICAgIHBhdGg6IGAke3UucGF0aG5hbWV9JHt1LnNlYXJjaH1gLFxuICAgIHNlcnZlcm5hbWU6IHBpbi5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyBwaW4uaG9zdCA6IHVuZGVmaW5lZCxcbiAgICBzaWduYWwsXG4gICAgaGVhZGVyczoge1xuICAgICAgLi4ub3B0cy5oZWFkZXJzLFxuICAgICAgLi4uKGJvZHkgPyB7ICdDb250ZW50LUxlbmd0aCc6IFN0cmluZyhib2R5LmJ5dGVMZW5ndGgpIH0gOiB7fSksXG4gICAgfSxcbiAgICAvLyBQaW4gdGhlIHZldHRlZCBJUDogbmV0LmNvbm5lY3QgdXNlcyB0aGlzIGluc3RlYWQgb2YgcmUtcmVzb2x2aW5nIHRoZSBob3N0LlxuICAgIGxvb2t1cDogKChfaG9zdG5hbWU6IHN0cmluZywgX2xvb2t1cE9wdHM6IHVua25vd24sIGNiOiAoZXJyOiBFcnJvciB8IG51bGwsIGFkZHJlc3M6IHN0cmluZywgZmFtaWx5OiBudW1iZXIpID0+IHZvaWQpID0+IHtcbiAgICAgIGNiKG51bGwsIHBpbi5hZGRyZXNzLCBwaW4uZmFtaWx5KTtcbiAgICB9KSBhcyB1bmtub3duIGFzIFJlcXVlc3RPcHRpb25zWydsb29rdXAnXSxcbiAgfTtcblxuICBjb25zdCBzZW5kID0gcGluLnByb3RvY29sID09PSAnaHR0cHM6JyA/IGh0dHBzUmVxdWVzdCA6IGh0dHBSZXF1ZXN0O1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxTYWZlRmV0Y2hSZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNsaWVudFJlcSA9IHNlbmQob3B0aW9ucywgKHJlcykgPT4ge1xuICAgICAgY29uc3Qgc3RhdHVzID0gcmVzLnN0YXR1c0NvZGUgPz8gMDtcbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHJlcy5oZWFkZXJzKSkge1xuICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSBoZWFkZXJzW2tdID0gQXJyYXkuaXNBcnJheSh2KSA/IHYuam9pbignLCAnKSA6IFN0cmluZyh2KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZGlyZWN0ZWQgPSBzdGF0dXMgPj0gMzAwICYmIHN0YXR1cyA8IDQwMDtcbiAgICAgIGlmIChyZWRpcmVjdGVkKSB7XG4gICAgICAgIC8vIE5ldmVyIGZvbGxvdywgbmV2ZXIgYnVmZmVyIOKAlCBkcmFpbiBzbyB0aGUgc29ja2V0IGNhbiBiZSByZWxlYXNlZC5cbiAgICAgICAgcmVzLnJlc3VtZSgpO1xuICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHJlc29sdmUobWFrZVJlc3BvbnNlKHN0YXR1cywgcmVzLnN0YXR1c01lc3NhZ2UsIGhlYWRlcnMsIEJ1ZmZlci5hbGxvYygwKSwgdHJ1ZSkpKTtcbiAgICAgICAgcmVzLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIEVhcmx5IHJlamVjdCBvbiBhIGRlY2xhcmVkIG92ZXJzaXplIGJlZm9yZSBidWZmZXJpbmcgYW55dGhpbmcuXG4gICAgICBjb25zdCBkZWNsYXJlZCA9IE51bWJlcihoZWFkZXJzWydjb250ZW50LWxlbmd0aCddKTtcbiAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZGVjbGFyZWQpICYmIGRlY2xhcmVkID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgcmVzLmRlc3Ryb3koKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUmVzcG9uc2UgYm9keSBleGNlZWRzICR7bWF4Qnl0ZXN9IGJ5dGVzYCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gICAgICBsZXQgcmVjZWl2ZWQgPSAwO1xuICAgICAgcmVzLm9uKCdkYXRhJywgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgcmVjZWl2ZWQgKz0gY2h1bmsuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKHJlY2VpdmVkID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgICByZXMuZGVzdHJveSgpO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFJlc3BvbnNlIGJvZHkgZXhjZWVkcyAke21heEJ5dGVzfSBieXRlc2ApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgfSk7XG4gICAgICByZXMub24oJ2VuZCcsICgpID0+IHJlc29sdmUobWFrZVJlc3BvbnNlKHN0YXR1cywgcmVzLnN0YXR1c01lc3NhZ2UsIGhlYWRlcnMsIEJ1ZmZlci5jb25jYXQoY2h1bmtzKSwgZmFsc2UpKSk7XG4gICAgICByZXMub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICB9KTtcbiAgICBjbGllbnRSZXEub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICBjbGllbnRSZXEuZW5kKGJvZHkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFrZVJlc3BvbnNlKFxuICBzdGF0dXM6IG51bWJlcixcbiAgc3RhdHVzVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBib2R5OiBCdWZmZXIsXG4gIHJlZGlyZWN0ZWQ6IGJvb2xlYW4sXG4pOiBTYWZlRmV0Y2hSZXNwb25zZSB7XG4gIHJldHVybiB7XG4gICAgb2s6IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwLFxuICAgIHN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiBzdGF0dXNUZXh0ID8/ICcnLFxuICAgIHJlZGlyZWN0ZWQsXG4gICAgaGVhZGVycyxcbiAgICBib2R5LFxuICAgIHRleHQ6ICgpID0+IGJvZHkudG9TdHJpbmcoJ3V0ZjgnKSxcbiAgICBqc29uOiA8VD4oKSA9PiBKU09OLnBhcnNlKGJvZHkudG9TdHJpbmcoJ3V0ZjgnKSkgYXMgVCxcbiAgfTtcbn1cbiJdfQ==
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zc3JmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsT0FBTyxJQUFJLFlBQVksRUFBdUIsTUFBTSxPQUFPLENBQUM7QUFDckUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEtBQUssQ0FBQztBQUUzQix5R0FBeUc7QUFDekcsTUFBTSxlQUFlLEdBQTZDO0lBQ2hFLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLGlCQUFpQjtJQUNqQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVO0lBQzNCLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQjtJQUN4QyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXO0lBQzdCLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLG1EQUFtRDtJQUN4RSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVO0lBQzlCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLHdFQUF3RTtJQUMzRixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxhQUFhO0lBQ2hDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGtDQUFrQztJQUN2RCxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVO0lBQy9CLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGVBQWU7SUFDbkMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQUUsYUFBYTtJQUNuQyxDQUFDLGFB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SSxFQUFFLEdBQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBTTtLQUN0RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNoYXJlZCBTU1JGIGd1YXJkIGZvciB1c2VyL3RlbmFudC1zdXBwbGllZCBvdXRib3VuZCBVUkxzICh3ZWJob29rIHRhcmdldHMsXG4gKiBjYWxsYmFja3MsIOKApikuIFByb21vdGVkIHRvIGFwaS1jb3JlIHNvIGV2ZXJ5IHNlcnZpY2UgdGhhdCBsZXRzIGFuIG9yZyBwb2ludFxuICogdGhlIHBsYXRmb3JtIGF0IGFuIGFyYml0cmFyeSBVUkwgZW5mb3JjZXMgdGhlIFNBTUUgZGVueWxpc3QgaW5zdGVhZCBvZiBlYWNoXG4gKiByZS1kZXJpdmluZyBpdCAodGhlIGNvbXBsaWFuY2Ugbm90aWZpZXIgYW5kIHRoZSBwbGF0Zm9ybSBhbGVydCByZWxheSBib3RoXG4gKiBjb25zdW1lIHRoaXMpLlxuICpcbiAqIFRoZSBndWFyZCByZXNvbHZlcyB0aGUgaG9zdCB1cCBmcm9udCBhbmQgcmVqZWN0cyBhbnkgYWRkcmVzcyB0aGF0IGlzIOKAlCBvclxuICogcmVzb2x2ZXMgdG8g4oCUIGEgbG9vcGJhY2sgLyBwcml2YXRlIC8gbGluay1sb2NhbCAvIHVuaXF1ZS1sb2NhbCAvIGNhcnJpZXItZ3JhZGVcbiAqIE5BVCAvIGNsb3VkLW1ldGFkYXRhIHJhbmdlLCBzbyBhIHRlbmFudCBjYW4ndCBhaW0gYSB3ZWJob29rIGF0XG4gKiBgMTY5LjI1NC4xNjkuMjU0YCBvciBhbiBpbi1jbHVzdGVyIHNlcnZpY2UuXG4gKlxuICogVFdPIFBPU1RVUkVTLCBPTkUgU1VSVklWT1IuIGBhc3NlcnRTYWZlVXJsYCBvbmx5ICp2YWxpZGF0ZXMqIGEgVVJMOiBpdFxuICogcmVzb2x2ZXMgdGhlIGhvc3QsIGNoZWNrcyB0aGUgYWRkcmVzc2VzIGFuZCB0aGVuIHRocm93cyB0aGUgaG9zdG5hbWUgYXdheS5cbiAqIEFueXRoaW5nIHRoYXQgZ29lcyBvbiB0byBgZmV0Y2godXJsKWAgcmUtcmVzb2x2ZXMgRE5TIGFuZCBjYW4gdGhlcmVmb3JlIGJlXG4gKiBwb2ludGVkIGF0IGEgcHJpdmF0ZSBhZGRyZXNzIGJldHdlZW4gdGhlIGNoZWNrIGFuZCB0aGUgY29ubmVjdCAoY2xhc3NpY1xuICogRE5TIHJlYmluZGluZykuIHtAbGluayBzYWZlRmV0Y2h9IGlzIHRoZSBwb3N0dXJlIHRoYXQgYWN0dWFsbHkgaG9sZHM6IGl0XG4gKiByZXNvbHZlcywgUElOUyB0aGUgdmV0dGVkIElQIGludG8gdGhlIHNvY2tldCdzIGBsb29rdXBgLCByZWZ1c2VzIHJlZGlyZWN0cyxcbiAqIGFuZCBjYXBzIGJvdGggdGhlIHJlc3BvbnNlIHNpemUgYW5kIHRoZSB3YWxsLWNsb2NrIHRpbWUuXG4gKlxuICogU286IHVzZSB7QGxpbmsgc2FmZUZldGNofSBmb3IgZXZlcnkgb3V0Ym91bmQgcmVxdWVzdCB0byBhIHVzZXIvdGVuYW50LXN1cHBsaWVkXG4gKiBVUkwuIGBhc3NlcnRTYWZlVXJsYCBpcyBmb3IgTk9OLUZFVENIIHZhbGlkYXRpb24gb25seSDigJQgcmVqZWN0aW5nIGEgYmFkIFVSTCBhdFxuICogY3JlYXRlL3VwZGF0ZSB0aW1lIGJlZm9yZSBpdCBpcyBldmVyIHN0b3JlZC4gTmV2ZXIgcGFpciBpdCB3aXRoIGBmZXRjaGAuXG4gKi9cblxuaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnZG5zL3Byb21pc2VzJztcbmltcG9ydCB7IHJlcXVlc3QgYXMgaHR0cFJlcXVlc3QgfSBmcm9tICdodHRwJztcbmltcG9ydCB7IHJlcXVlc3QgYXMgaHR0cHNSZXF1ZXN0LCB0eXBlIFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHsgaXNJUCB9IGZyb20gJ25ldCc7XG5cbi8qKiBJUHY0IHJhbmdlcyB0aGF0IGFyZSBOT1QgcHVibGljbHkgcm91dGFibGUgdW5pY2FzdDogW2ZpcnN0IG9jdGV0cyBhcyBhIDMyLWJpdCBpbnQsIHByZWZpeCBsZW5ndGhdLiAqL1xuY29uc3QgSVBWNF9OT05fR0xPQkFMOiBSZWFkb25seUFycmF5PHJlYWRvbmx5IFtzdHJpbmcsIG51bWJlcl0+ID0gW1xuICBbJzAuMC4wLjAnLCA4XSwgLy8gXCJ0aGlzIG5ldHdvcmtcIlxuICBbJzEwLjAuMC4wJywgOF0sIC8vIHByaXZhdGVcbiAgWycxMDAuNjQuMC4wJywgMTBdLCAvLyBjYXJyaWVyLWdyYWRlIE5BVFxuICBbJzEyNy4wLjAuMCcsIDhdLCAvLyBsb29wYmFja1xuICBbJzE2OS4yNTQuMC4wJywgMTZdLCAvLyBsaW5rLWxvY2FsLCBpbmNsLiAxNjkuMjU0LjE2OS4yNTQgY2xvdWQgbWV0YWRhdGFcbiAgWycxNzIuMTYuMC4wJywgMTJdLCAvLyBwcml2YXRlXG4gIFsnMTkyLjAuMC4wJywgMjRdLCAvLyBJRVRGIHByb3RvY29sIGFzc2lnbm1lbnRzIChpbmNsLiAxOTIuMC4wLjE5MiBtZXRhZGF0YSBvbiBzb21lIGNsb3VkcylcbiAgWycxOTIuMC4yLjAnLCAyNF0sIC8vIFRFU1QtTkVULTFcbiAgWycxOTIuODguOTkuMCcsIDI0XSwgLy8gNnRvNCByZWxheSBhbnljYXN0IChkZXByZWNhdGVkKVxuICBbJzE5Mi4xNjguMC4wJywgMTZdLCAvLyBwcml2YXRlXG4gIFsnMTk4LjE4LjAuMCcsIDE1XSwgLy8gYmVuY2htYXJraW5nXG4gIFsnMTk4LjUxLjEwMC4wJywgMjRdLCAvLyBURVNULU5FVC0yXG4gIFsnMjAzLjAuMTEzLjAnLCAyNF0sIC8vIFRFU1QtTkVULTNcbiAgWycyMjQuMC4wLjAnLCA0XSwgLy8gbXVsdGljYXN0XG4gIFsnMjQwLjAuMC4wJywgNF0sIC8vIHJlc2VydmVkLCBpbmNsLiAyNTUuMjU1LjI1NS4yNTUgYnJvYWRjYXN0XG5dO1xuXG5mdW5jdGlvbiBpcHY0VG9JbnQoaXA6IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICBjb25zdCBtID0gaXAubWF0Y2goL14oXFxkezEsM30pXFwuKFxcZHsxLDN9KVxcLihcXGR7MSwzfSlcXC4oXFxkezEsM30pJC8pO1xuICBpZiAoIW0pIHJldHVybiBudWxsO1xuICBjb25zdCBvY3RldHMgPSBtLnNsaWNlKDEpLm1hcChOdW1iZXIpO1xuICBpZiAob2N0ZXRzLnNvbWUoKG8pID0+IG8gPiAyNTUpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuICgob2N0ZXRzWzBdICogMjU2ICsgb2N0ZXRzWzFdKSAqIDI1NiArIG9jdGV0c1syXSkgKiAyNTYgKyBvY3RldHNbM107XG59XG5cbmNvbnN0IElQVjRfTk9OX0dMT0JBTF9JTlQgPSBJUFY0X05PTl9HTE9CQUwubWFwKChbYmFzZSwgYml0c10pID0+IFtpcHY0VG9JbnQoYmFzZSkhLCBiaXRzXSBhcyBjb25zdCk7XG5cbmZ1bmN0aW9uIGlzTm9uR2xvYmFsVjQobjogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBJUFY0X05PTl9HTE9CQUxfSU5ULnNvbWUoKFtiYXNlLCBiaXRzXSkgPT4ge1xuICAgIGNvbnN0IHNpemUgPSAyICoqICgzMiAtIGJpdHMpO1xuICAgIHJldHVybiBuID49IGJhc2UgJiYgbiA8IGJhc2UgKyBzaXplO1xuICB9KTtcbn1cblxuLyoqIFBhcnNlIGFuIElQdjYgbGl0ZXJhbCBpbnRvIGl0cyBlaWdodCAxNi1iaXQgZ3JvdXBzIChudWxsIHdoZW4gbWFsZm9ybWVkKS4gKi9cbmZ1bmN0aW9uIHBhcnNlSXB2NihpcDogc3RyaW5nKTogbnVtYmVyW10gfCBudWxsIHtcbiAgbGV0IGFkZHIgPSBpcC5zcGxpdCgnJScpWzBdOyAvLyBkcm9wIGEgem9uZSBpZCAoZmU4MDo6MSVldGgwKVxuICAvLyBBbiBlbWJlZGRlZCBkb3R0ZWQgSVB2NCB0YWlsICg6OmZmZmY6MS4yLjMuNCwgNjQ6ZmY5Yjo6MS4yLjMuNCkg4oaSIHR3byBncm91cHMuXG4gIGNvbnN0IHRhaWwgPSBhZGRyLm1hdGNoKC8oXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30pJC8pO1xuICBpZiAodGFpbCkge1xuICAgIGNvbnN0IG4gPSBpcHY0VG9JbnQodGFpbFsxXSk7XG4gICAgaWYgKG4gPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIGFkZHIgPSBgJHthZGRyLnNsaWNlKDAsIC10YWlsWzFdLmxlbmd0aCl9JHtNYXRoLmZsb29yKG4gLyA2NTUzNikudG9TdHJpbmcoMTYpfTokeyhuICUgNjU1MzYpLnRvU3RyaW5nKDE2KX1gO1xuICB9XG4gIGNvbnN0IGhhbHZlcyA9IGFkZHIuc3BsaXQoJzo6Jyk7XG4gIGlmIChoYWx2ZXMubGVuZ3RoID4gMikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHBhcnNlID0gKHBhcnQ6IHN0cmluZyk6IG51bWJlcltdIHwgbnVsbCA9PiB7XG4gICAgaWYgKHBhcnQgPT09ICcnKSByZXR1cm4gW107XG4gICAgY29uc3QgZ3JvdXBzID0gcGFydC5zcGxpdCgnOicpO1xuICAgIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGcgb2YgZ3JvdXBzKSB7XG4gICAgICBpZiAoIS9eWzAtOWEtZl17MSw0fSQvaS50ZXN0KGcpKSByZXR1cm4gbnVsbDtcbiAgICAgIG91dC5wdXNoKHBhcnNlSW50KGcsIDE2KSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH07XG4gIGNvbnN0IGhlYWQgPSBwYXJzZShoYWx2ZXNbMF0pO1xuICBjb25zdCByZXN0ID0gaGFsdmVzLmxlbmd0aCA9PT0gMiA/IHBhcnNlKGhhbHZlc1sxXSkgOiBbXTtcbiAgaWYgKCFoZWFkIHx8ICFyZXN0KSByZXR1cm4gbnVsbDtcbiAgaWYgKGhhbHZlcy5sZW5ndGggPT09IDEpIHJldHVybiBoZWFkLmxlbmd0aCA9PT0gOCA/IGhlYWQgOiBudWxsO1xuICBjb25zdCB6ZXJvcyA9IDggLSBoZWFkLmxlbmd0aCAtIHJlc3QubGVuZ3RoO1xuICBpZiAoemVyb3MgPCAxKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIFsuLi5oZWFkLCAuLi5uZXcgQXJyYXk8bnVtYmVyPih6ZXJvcykuZmlsbCgwKSwgLi4ucmVzdF07XG59XG5cbmNvbnN0IHY0RnJvbUdyb3VwcyA9IChoaTogbnVtYmVyLCBsbzogbnVtYmVyKTogbnVtYmVyID0+IGhpICogNjU1MzYgKyBsbztcblxuLyoqXG4gKiBUcnVlIGZvciBhbnkgYWRkcmVzcyB0aGF0IGlzIE5PVCBwdWJsaWNseSByb3V0YWJsZSB1bmljYXN0IOKAlCB0aGUgcmFuZ2VzIGFuXG4gKiBvdXRib3VuZCB0ZW5hbnQgd2ViaG9vayBtdXN0IG5ldmVyIHJlYWNoLlxuICpcbiAqIEFuIEFMTE9XTElTVCwgbm90IGEgZGVueWxpc3Q6IGFuIElQdjYgYWRkcmVzcyBpcyBhY2NlcHRhYmxlIG9ubHkgaW5zaWRlIHRoZVxuICogZ2xvYmFsLXVuaWNhc3QgYmxvY2sgYDIwMDA6Oi8zYCAoc28gbGluay1sb2NhbCBgZmU4MDo6LzEwYCwgc2l0ZS1sb2NhbFxuICogYGZlYzA6Oi8xMGAsIHVuaXF1ZS1sb2NhbCBgZmMwMDo6LzdgLCBtdWx0aWNhc3QsIGxvb3BiYWNrLCB1bnNwZWNpZmllZCBhbmRcbiAqIGV2ZXJ5IGZ1dHVyZSBzcGVjaWFsIHJhbmdlIGFyZSByZWZ1c2VkIGJ5IGRlZmF1bHQpLiBGb3JtYXRzIHRoYXQgRU1CRUQgYW5cbiAqIElQdjQgYWRkcmVzcyBhcmUgdW53cmFwcGVkIGFuZCBqdWRnZWQgYnkgdGhhdCBhZGRyZXNzIOKAlCBJUHY0LW1hcHBlZFxuICogYDo6ZmZmZjowOjAvOTZgIChkb3R0ZWQgb3IgaGV4KSwgTkFUNjQgYDY0OmZmOWI6Oi85NmAgYW5kIDZ0bzQgYDIwMDI6Oi8xNmAg4oCUXG4gKiBzbyBgOjpmZmZmOjdmMDA6MWAgb3IgYDIwMDI6YTlmZTphOWZlOjpgIGNhbid0IHNtdWdnbGUgbG9vcGJhY2sgb3IgdGhlXG4gKiBtZXRhZGF0YSBlbmRwb2ludCBwYXN0IHRoZSBjaGVjay4gQW55dGhpbmcgdW5wYXJzZWFibGUgaXMgcmVmdXNlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpdmF0ZUFkZHJlc3MoaXA6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBhZGRyID0gaXAucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCB2NCA9IGlwdjRUb0ludChhZGRyKTtcbiAgaWYgKHY0ICE9PSBudWxsKSByZXR1cm4gaXNOb25HbG9iYWxWNCh2NCk7XG4gIGlmICgvXlxcZHsxLDN9KFxcLlxcZHsxLDN9KXszfSQvLnRlc3QoYWRkcikpIHJldHVybiB0cnVlOyAvLyBvdXQtb2YtcmFuZ2Ugb2N0ZXRcblxuICBjb25zdCBnID0gcGFyc2VJcHY2KGFkZHIpO1xuICBpZiAoIWcpIHJldHVybiB0cnVlOyAvLyBub3QgYW4gYWRkcmVzcyB3ZSBjYW4gcmVhc29uIGFib3V0IOKGkiByZWZ1c2VcblxuICAvLyBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZFxuICBpZiAoZ1swXSA9PT0gMCAmJiBnWzFdID09PSAwICYmIGdbMl0gPT09IDAgJiYgZ1szXSA9PT0gMCAmJiBnWzRdID09PSAwICYmIGdbNV0gPT09IDB4ZmZmZikge1xuICAgIHJldHVybiBpc05vbkdsb2JhbFY0KHY0RnJvbUdyb3VwcyhnWzZdLCBnWzddKSk7XG4gIH1cbiAgLy8gTkFUNjQgd2VsbC1rbm93biBwcmVmaXggNjQ6ZmY5Yjo6Lzk2IOKAlCB0aGUgdGFyZ2V0IGlzIHRoZSBlbWJlZGRlZCBJUHY0LlxuICBpZiAoZ1swXSA9PT0gMHg2NCAmJiBnWzFdID09PSAweGZmOWIgJiYgZ1syXSA9PT0gMCAmJiBnWzNdID09PSAwICYmIGdbNF0gPT09IDAgJiYgZ1s1XSA9PT0gMCkge1xuICAgIHJldHVybiBpc05vbkdsb2JhbFY0KHY0RnJvbUdyb3VwcyhnWzZdLCBnWzddKSk7XG4gIH1cbiAgLy8gNnRvNCAyMDAyOlY0SEk6VjRMTzo6LzQ4IOKAlCB0aGUgdHVubmVsIGVuZHBvaW50IGlzIHRoZSBlbWJlZGRlZCBJUHY0LlxuICBpZiAoZ1swXSA9PT0gMHgyMDAyKSByZXR1cm4gaXNOb25HbG9iYWxWNCh2NEZyb21Hcm91cHMoZ1sxXSwgZ1syXSkpO1xuXG4gIC8vIE9ubHkgZ2xvYmFsIHVuaWNhc3QgMjAwMDo6LzMgZnJvbSBoZXJlIG9uLlxuICBpZiAoZ1swXSA8IDB4MjAwMCB8fCBnWzBdID4gMHgzZmZmKSByZXR1cm4gdHJ1ZTtcbiAgLy8g4oCmbWludXMgaXRzIHNwZWNpYWwtcHVycG9zZSBjYXJ2ZS1vdXRzOlxuICBpZiAoZ1swXSA9PT0gMHgyMDAxICYmIGdbMV0gPCAweDAyMDApIHJldHVybiB0cnVlOyAvLyAyMDAxOjovMjMgSUVURiBwcm90b2NvbCBhc3NpZ25tZW50cyAoVGVyZWRvLCBiZW5jaG1hcmtpbmcsIE9SQ0hJROKApilcbiAgaWYgKGdbMF0gPT09IDB4MjAwMSAmJiBnWzFdID09PSAweDBkYjgpIHJldHVybiB0cnVlOyAvLyAyMDAxOmRiODo6LzMyIGRvY3VtZW50YXRpb25cbiAgaWYgKGdbMF0gPT09IDB4M2ZmZiAmJiBnWzFdIDwgMHgxMDAwKSByZXR1cm4gdHJ1ZTsgLy8gM2ZmZjo6LzIwIGRvY3VtZW50YXRpb25cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIGFzc2VydFNhZmVVcmx9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYWZlVXJsT3B0aW9ucyB7XG4gIC8qKiBBbGxvd2VkIFVSTCBwcm90b2NvbHMgKGRlZmF1bHQ6IGBbJ2h0dHBzOiddYCkuICovXG4gIHByb3RvY29scz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgRE5TLXJlc29sdmVkLCBTU1JGLXZldHRlZCB0YXJnZXQgdG8gY29ubmVjdCB0byBieSBQSU5ORUQgSVAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlubmVkVGFyZ2V0IHtcbiAgLyoqIE9yaWdpbmFsIGhvc3RuYW1lIOKAlCBwcmVzZXJ2ZWQgZm9yIHRoZSBIb3N0IGhlYWRlciBhbmQgVExTIFNOSS4gKi9cbiAgaG9zdDogc3RyaW5nO1xuICAvKiogVGhlIGV4YWN0IHZhbGlkYXRlZCBJUCB0aGUgc29ja2V0IG11c3QgY29ubmVjdCB0byAobm8gcmUtcmVzb2x1dGlvbikuICovXG4gIGFkZHJlc3M6IHN0cmluZztcbiAgZmFtaWx5OiBudW1iZXI7XG4gIHBvcnQ6IG51bWJlcjtcbiAgLyoqIGAnaHR0cHM6J2Agb3IgYCdodHRwOidgLiAqL1xuICBwcm90b2NvbDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW5kIHZldCBhbiBvdXRib3VuZCBVUkwsIHJldHVybmluZyB0aGUgcGlubmVkIHRhcmdldCB0byBjb25uZWN0IHRvLlxuICpcbiAqIFJlamVjdHMgYSBVUkwgdGhhdCBpcyBtYWxmb3JtZWQsIHVzZXMgYSBkaXNhbGxvd2VkIHByb3RvY29sLCBvciBwb2ludHMgYXQgYVxuICogcHJpdmF0ZS9sb29wYmFjay9saW5rLWxvY2FsL21ldGFkYXRhIGFkZHJlc3MgKGJ5IElQIGxpdGVyYWwgb3IgYnkgRE5TXG4gKiByZXNvbHV0aW9uKS4gUmVqZWN0cyBpZiBBTlkgcmVzb2x1dGlvbiBpcyBwcml2YXRlIChkZWZlbmNlIGluIGRlcHRoKSwgdGhlblxuICogcGlucyB0aGUgZmlyc3QgdmV0dGVkIGFkZHJlc3Mgc28gdGhlIGNvbm5lY3Rpb24gY2FuIG5ldmVyIHJlYWNoIGFuIGFkZHJlc3NcbiAqIHRoaXMgZnVuY3Rpb24gZGlkIG5vdCBhcHByb3ZlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNhZmVUYXJnZXQocmF3VXJsOiBzdHJpbmcsIG9wdHM6IFNhZmVVcmxPcHRpb25zID0ge30pOiBQcm9taXNlPFBpbm5lZFRhcmdldD4ge1xuICBjb25zdCBwcm90b2NvbHMgPSBvcHRzLnByb3RvY29scyA/PyBbJ2h0dHBzOiddO1xuICBsZXQgdTogVVJMO1xuICB0cnkgeyB1ID0gbmV3IFVSTChyYXdVcmwpOyB9IGNhdGNoIHsgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHVybCcpOyB9XG4gIGlmICghcHJvdG9jb2xzLmluY2x1ZGVzKHUucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1cmwgbXVzdCB1c2UgJHtwcm90b2NvbHMubWFwKChwKSA9PiBwLnJlcGxhY2UoLzokLywgJycpKS5qb2luKCcvJyl9YCk7XG4gIH1cbiAgY29uc3QgaG9zdCA9IHUuaG9zdG5hbWUucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgY29uc3QgcG9ydCA9IHUucG9ydCA/IE51bWJlcih1LnBvcnQpIDogKHUucHJvdG9jb2wgPT09ICdodHRwOicgPyA4MCA6IDQ0Myk7XG4gIGNvbnN0IGxpdGVyYWxGYW1pbHkgPSBpc0lQKGhvc3QpO1xuICBpZiAobGl0ZXJhbEZhbWlseSkge1xuICAgIGlmIChpc1ByaXZhdGVBZGRyZXNzKGhvc3QpKSB0aHJvdyBuZXcgRXJyb3IoJ3VybCB0YXJnZXRzIGEgcHJpdmF0ZSBhZGRyZXNzJyk7XG4gICAgcmV0dXJuIHsgaG9zdCwgYWRkcmVzczogaG9zdCwgZmFtaWx5OiBsaXRlcmFsRmFtaWx5LCBwb3J0LCBwcm90b2NvbDogdS5wcm90b2NvbCB9O1xuICB9XG4gIGxldCBhZGRyczogeyBhZGRyZXNzOiBzdHJpbmc7IGZhbWlseTogbnVtYmVyIH1bXTtcbiAgdHJ5IHsgYWRkcnMgPSBhd2FpdCBsb29rdXAoaG9zdCwgeyBhbGw6IHRydWUgfSk7IH0gY2F0Y2ggeyB0aHJvdyBuZXcgRXJyb3IoJ3VybCBob3N0IGRpZCBub3QgcmVzb2x2ZScpOyB9XG4gIGlmIChhZGRycy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcigndXJsIGhvc3QgZGlkIG5vdCByZXNvbHZlJyk7XG4gIGlmIChhZGRycy5zb21lKChhKSA9PiBpc1ByaXZhdGVBZGRyZXNzKGEuYWRkcmVzcykpKSB0aHJvdyBuZXcgRXJyb3IoJ3VybCByZXNvbHZlcyB0byBhIHByaXZhdGUgYWRkcmVzcycpO1xuICByZXR1cm4geyBob3N0LCBhZGRyZXNzOiBhZGRyc1swXS5hZGRyZXNzLCBmYW1pbHk6IGFkZHJzWzBdLmZhbWlseSwgcG9ydCwgcHJvdG9jb2w6IHUucHJvdG9jb2wgfTtcbn1cblxuLyoqXG4gKiBWQUxJREFUSU9OIE9OTFkg4oCUIG5ldmVyIHBhaXIgdGhpcyB3aXRoIGEgYGZldGNoYC5cbiAqXG4gKiBSZXNvbHZlcyB0aGUgaG9zdCBhbmQgdGhyb3dzIHdoZW4gdGhlIFVSTCBpcyBtYWxmb3JtZWQsIHVzZXMgYSBkaXNhbGxvd2VkXG4gKiBwcm90b2NvbCwgb3IgcmVzb2x2ZXMgdG8gYSBwcml2YXRlL2xvb3BiYWNrL2xpbmstbG9jYWwvbWV0YWRhdGEgYWRkcmVzcy4gVXNlXG4gKiBpdCB0byByZWplY3QgYSBiYWQgVVJMIGF0IGNyZWF0ZS91cGRhdGUgdGltZSAoYmVmb3JlIGl0IGlzIHN0b3JlZCksIG9yIGluIGFueVxuICogb3RoZXIgcGxhY2Ugd2hlcmUgbm90aGluZyBpcyBhYm91dCB0byBjb25uZWN0LiBGb3IgYW4gYWN0dWFsIG91dGJvdW5kIHJlcXVlc3RcbiAqIHVzZSB7QGxpbmsgc2FmZUZldGNofSwgd2hpY2ggcGlucyB0aGUgYWRkcmVzcyBpdCB2ZXR0ZWQg4oCUIHZhbGlkYXRpbmcgaGVyZSBhbmRcbiAqIHRoZW4gbGV0dGluZyBgZmV0Y2hgIHJlLXJlc29sdmUgaXMgYSBETlMtcmViaW5kaW5nIFRPQ1RPVSBob2xlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0U2FmZVVybChyYXdVcmw6IHN0cmluZywgb3B0czogU2FmZVVybE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCByZXNvbHZlU2FmZVRhcmdldChyYXdVcmwsIG9wdHMpO1xufVxuXG4vKiogRGVmYXVsdCB3YWxsLWNsb2NrIGNhcCBmb3Igb25lIHtAbGluayBzYWZlRmV0Y2h9IHJlcXVlc3QuICovXG5leHBvcnQgY29uc3QgU0FGRV9GRVRDSF9USU1FT1VUX01TID0gMTBfMDAwO1xuLyoqIERlZmF1bHQgcmVzcG9uc2UtYm9keSBjYXAgZm9yIHtAbGluayBzYWZlRmV0Y2h9ICg1IE1pQikuICovXG5leHBvcnQgY29uc3QgU0FGRV9GRVRDSF9NQVhfQllURVMgPSA1ICogMTAyNCAqIDEwMjQ7XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgc2FmZUZldGNofS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FmZUZldGNoT3B0aW9ucyBleHRlbmRzIFNhZmVVcmxPcHRpb25zIHtcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYm9keT86IHN0cmluZyB8IEJ1ZmZlcjtcbiAgLyoqIENhbGxlciBhYm9ydCAoY29tcG9zZWQgd2l0aCBgdGltZW91dE1zYCkuICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogV2FsbC1jbG9jayBjYXAgZm9yIHRoZSB3aG9sZSByZXF1ZXN0IChkZWZhdWx0IHtAbGluayBTQUZFX0ZFVENIX1RJTUVPVVRfTVN9KS4gKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogQm9keS1zaXplIGNhcDsgZXhjZWVkaW5nIGl0IGFib3J0cyBhbmQgdGhyb3dzIChkZWZhdWx0IHtAbGluayBTQUZFX0ZFVENIX01BWF9CWVRFU30pLiAqL1xuICBtYXhSZXNwb25zZUJ5dGVzPzogbnVtYmVyO1xufVxuXG4vKiogTm9ybWFsaXplZCByZXNwb25zZSBmcm9tIHtAbGluayBzYWZlRmV0Y2h9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYWZlRmV0Y2hSZXNwb25zZSB7XG4gIC8qKiBUcnVlIG9ubHkgZm9yIGEgMnh4LiBBIHJlZnVzZWQgcmVkaXJlY3QgaXMgbmV2ZXIgYG9rYC4gKi9cbiAgb2s6IGJvb2xlYW47XG4gIHN0YXR1czogbnVtYmVyO1xuICBzdGF0dXNUZXh0OiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIG9yaWdpbiBhbnN3ZXJlZCB3aXRoIGEgM3h4IOKAlCBSRUZVU0VELCBuZXZlciBmb2xsb3dlZC4gKi9cbiAgcmVkaXJlY3RlZDogYm9vbGVhbjtcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFJhdyBib2R5IGJ5dGVzIChlbXB0eSBmb3IgYSByZWZ1c2VkIHJlZGlyZWN0LCB3aG9zZSBib2R5IGlzIGRpc2NhcmRlZCkuICovXG4gIGJvZHk6IEJ1ZmZlcjtcbiAgdGV4dCgpOiBzdHJpbmc7XG4gIGpzb248VCA9IHVua25vd24+KCk6IFQ7XG59XG5cbi8qKlxuICogU1NSRi1zYWZlIG91dGJvdW5kIHJlcXVlc3QgdG8gYSB1c2VyL3RlbmFudC1zdXBwbGllZCBVUkwuXG4gKlxuICogLSByZXNvbHZlcyArIHZldHMgdGhlIGhvc3QsIHRoZW4gUElOUyB0aGUgZXhhY3QgdmFsaWRhdGVkIElQIGludG8gdGhlIHNvY2tldFxuICogICBgbG9va3VwYCBzbyBgbmV0LmNvbm5lY3RgIG5ldmVyIHJlLXJlc29sdmVzIOKAlCB0aGlzIGlzIHdoYXQgZGVmZWF0cyBETlNcbiAqICAgcmViaW5kaW5nLiBTTkkgKyBIb3N0IHN0YXkgdGhlIG9yaWdpbmFsIGhvc3RuYW1lIHNvIFRMUyB2ZXJpZmljYXRpb24gaXNcbiAqICAgdW5jaGFuZ2VkLlxuICogLSBSRUZVU0VTIHJlZGlyZWN0czogYGh0dHAocykucmVxdWVzdGAgbmV2ZXIgZm9sbG93cyBvbmUsIGFuZCBhIDN4eCBjb21lcyBiYWNrXG4gKiAgIGFzIGB7IHJlZGlyZWN0ZWQ6IHRydWUsIG9rOiBmYWxzZSB9YCBmb3IgdGhlIGNhbGxlciB0byByZWNvcmQgYXMgYSBmYWlsdXJlLlxuICogLSBjYXBzIHRoZSByZXNwb25zZSBib2R5ICh7QGxpbmsgU2FmZUZldGNoT3B0aW9ucy5tYXhSZXNwb25zZUJ5dGVzfSkgYW5kIHRoZVxuICogICB3YWxsIGNsb2NrICh7QGxpbmsgU2FmZUZldGNoT3B0aW9ucy50aW1lb3V0TXN9KS5cbiAqXG4gKiBUaHJvd3Mgb24gYSByZWplY3RlZCBVUkwsIGEgdHJhbnNwb3J0IGVycm9yLCBhIHRpbWVvdXQsIG9yIGFuIG92ZXJzaXplZCBib2R5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FmZUZldGNoKHJhd1VybDogc3RyaW5nLCBvcHRzOiBTYWZlRmV0Y2hPcHRpb25zID0ge30pOiBQcm9taXNlPFNhZmVGZXRjaFJlc3BvbnNlPiB7XG4gIGNvbnN0IG1heEJ5dGVzID0gb3B0cy5tYXhSZXNwb25zZUJ5dGVzID8/IFNBRkVfRkVUQ0hfTUFYX0JZVEVTO1xuICBjb25zdCBwaW4gPSBhd2FpdCByZXNvbHZlU2FmZVRhcmdldChyYXdVcmwsIG9wdHMpO1xuICBjb25zdCB1ID0gbmV3IFVSTChyYXdVcmwpO1xuICBjb25zdCBib2R5ID0gb3B0cy5ib2R5ID09PSB1bmRlZmluZWRcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogKEJ1ZmZlci5pc0J1ZmZlcihvcHRzLmJvZHkpID8gb3B0cy5ib2R5IDogQnVmZmVyLmZyb20ob3B0cy5ib2R5LCAndXRmOCcpKTtcblxuICAvLyBDb21wb3NlIHRoZSBjYWxsZXIncyBhYm9ydCB3aXRoIG91ciBvd24gZGVhZGxpbmUgc28gd2hpY2hldmVyIGZpcmVzIGZpcnN0IHdpbnMuXG4gIGNvbnN0IHRpbWVvdXQgPSBBYm9ydFNpZ25hbC50aW1lb3V0KG9wdHMudGltZW91dE1zID8/IFNBRkVfRkVUQ0hfVElNRU9VVF9NUyk7XG4gIGNvbnN0IHNpZ25hbCA9IG9wdHMuc2lnbmFsID8gQWJvcnRTaWduYWwuYW55KFtvcHRzLnNpZ25hbCwgdGltZW91dF0pIDogdGltZW91dDtcblxuICBjb25zdCBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6IG9wdHMubWV0aG9kID8/ICdHRVQnLFxuICAgIGhvc3RuYW1lOiBwaW4uaG9zdCxcbiAgICBwb3J0OiBwaW4ucG9ydCxcbiAgICBwYXRoOiBgJHt1LnBhdGhuYW1lfSR7dS5zZWFyY2h9YCxcbiAgICBzZXJ2ZXJuYW1lOiBwaW4ucHJvdG9jb2wgPT09ICdodHRwczonID8gcGluLmhvc3QgOiB1bmRlZmluZWQsXG4gICAgc2lnbmFsLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLm9wdHMuaGVhZGVycyxcbiAgICAgIC4uLihib2R5ID8geyAnQ29udGVudC1MZW5ndGgnOiBTdHJpbmcoYm9keS5ieXRlTGVuZ3RoKSB9IDoge30pLFxuICAgIH0sXG4gICAgLy8gUGluIHRoZSB2ZXR0ZWQgSVA6IG5ldC5jb25uZWN0IHVzZXMgdGhpcyBpbnN0ZWFkIG9mIHJlLXJlc29sdmluZyB0aGUgaG9zdC5cbiAgICBsb29rdXA6ICgoX2hvc3RuYW1lOiBzdHJpbmcsIF9sb29rdXBPcHRzOiB1bmtub3duLCBjYjogKGVycjogRXJyb3IgfCBudWxsLCBhZGRyZXNzOiBzdHJpbmcsIGZhbWlseTogbnVtYmVyKSA9PiB2b2lkKSA9PiB7XG4gICAgICBjYihudWxsLCBwaW4uYWRkcmVzcywgcGluLmZhbWlseSk7XG4gICAgfSkgYXMgdW5rbm93biBhcyBSZXF1ZXN0T3B0aW9uc1snbG9va3VwJ10sXG4gIH07XG5cbiAgY29uc3Qgc2VuZCA9IHBpbi5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyBodHRwc1JlcXVlc3QgOiBodHRwUmVxdWVzdDtcblxuICByZXR1cm4gbmV3IFByb21pc2U8U2FmZUZldGNoUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjbGllbnRSZXEgPSBzZW5kKG9wdGlvbnMsIChyZXMpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHJlcy5zdGF0dXNDb2RlID8/IDA7XG4gICAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhyZXMuaGVhZGVycykpIHtcbiAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkgaGVhZGVyc1trXSA9IEFycmF5LmlzQXJyYXkodikgPyB2LmpvaW4oJywgJykgOiBTdHJpbmcodik7XG4gICAgICB9XG4gICAgICBjb25zdCByZWRpcmVjdGVkID0gc3RhdHVzID49IDMwMCAmJiBzdGF0dXMgPCA0MDA7XG4gICAgICBpZiAocmVkaXJlY3RlZCkge1xuICAgICAgICAvLyBOZXZlciBmb2xsb3csIG5ldmVyIGJ1ZmZlciDigJQgZHJhaW4gc28gdGhlIHNvY2tldCBjYW4gYmUgcmVsZWFzZWQuXG4gICAgICAgIHJlcy5yZXN1bWUoKTtcbiAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKG1ha2VSZXNwb25zZShzdGF0dXMsIHJlcy5zdGF0dXNNZXNzYWdlLCBoZWFkZXJzLCBCdWZmZXIuYWxsb2MoMCksIHRydWUpKSk7XG4gICAgICAgIHJlcy5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBFYXJseSByZWplY3Qgb24gYSBkZWNsYXJlZCBvdmVyc2l6ZSBiZWZvcmUgYnVmZmVyaW5nIGFueXRoaW5nLlxuICAgICAgY29uc3QgZGVjbGFyZWQgPSBOdW1iZXIoaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGRlY2xhcmVkKSAmJiBkZWNsYXJlZCA+IG1heEJ5dGVzKSB7XG4gICAgICAgIHJlcy5kZXN0cm95KCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFJlc3BvbnNlIGJvZHkgZXhjZWVkcyAke21heEJ5dGVzfSBieXRlc2ApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgbGV0IHJlY2VpdmVkID0gMDtcbiAgICAgIHJlcy5vbignZGF0YScsIChjaHVuazogQnVmZmVyKSA9PiB7XG4gICAgICAgIHJlY2VpdmVkICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChyZWNlaXZlZCA+IG1heEJ5dGVzKSB7XG4gICAgICAgICAgcmVzLmRlc3Ryb3koKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBSZXNwb25zZSBib2R5IGV4Y2VlZHMgJHttYXhCeXRlc30gYnl0ZXNgKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgIH0pO1xuICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKG1ha2VSZXNwb25zZShzdGF0dXMsIHJlcy5zdGF0dXNNZXNzYWdlLCBoZWFkZXJzLCBCdWZmZXIuY29uY2F0KGNodW5rcyksIGZhbHNlKSkpO1xuICAgICAgcmVzLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgfSk7XG4gICAgY2xpZW50UmVxLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgY2xpZW50UmVxLmVuZChib2R5KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZShcbiAgc3RhdHVzOiBudW1iZXIsXG4gIHN0YXR1c1RleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgYm9keTogQnVmZmVyLFxuICByZWRpcmVjdGVkOiBib29sZWFuLFxuKTogU2FmZUZldGNoUmVzcG9uc2Uge1xuICByZXR1cm4ge1xuICAgIG9rOiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCxcbiAgICBzdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogc3RhdHVzVGV4dCA/PyAnJyxcbiAgICByZWRpcmVjdGVkLFxuICAgIGhlYWRlcnMsXG4gICAgYm9keSxcbiAgICB0ZXh0OiAoKSA9PiBib2R5LnRvU3RyaW5nKCd1dGY4JyksXG4gICAganNvbjogPFQ+KCkgPT4gSlNPTi5wYXJzZShib2R5LnRvU3RyaW5nKCd1dGY4JykpIGFzIFQsXG4gIH07XG59XG4iXX0=
@@ -2,7 +2,8 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { z } from 'zod';
4
4
  import { VisibilitySchema } from './common-schemas.js';
5
- const MAX_PROMPT_LENGTH = parseInt(process.env.MAX_PROMPT_LENGTH || '5000', 10);
5
+ import { envInt } from '../utils/env.js';
6
+ const MAX_PROMPT_LENGTH = envInt('MAX_PROMPT_LENGTH', 5000, { min: 1 });
6
7
  // AI Generation Request
7
8
  /**
8
9
  * Schema for AI generation request body.
@@ -75,4 +76,4 @@ export const AIGenerateFromUrlBodySchema = z.object({
75
76
  /** Optional authentication token for accessing private repositories. */
76
77
  repoToken: z.string().min(1).optional(),
77
78
  });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktc2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL2FpLXNjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRWhGLHdCQUF3QjtBQUV4Qjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNDLHdEQUF3RDtJQUN4RCxNQUFNLEVBQUUsQ0FBQztTQUNOLE1BQU0sRUFBRTtTQUNSLEdBQUcsQ0FBQyxDQUFDLEVBQUUsMERBQTBELENBQUM7U0FDbEUsR0FBRyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixpQkFBaUIsc0JBQXNCLENBQUM7SUFFcEYscUVBQXFFO0lBQ3JFLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxnRUFBZ0UsQ0FBQztJQUU3Riw4REFBOEQ7SUFDOUQsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHlEQUF5RCxDQUFDO0lBRW5GLCtFQUErRTtJQUMvRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFFcEMseURBQXlEO0lBQ3pELGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENB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QUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUFDO0lBRS9DLDZEQUE2RDtJQUM3RCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFFcEMsd0VBQXdFO0lBQ3hFLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUN4QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBWaXNpYmlsaXR5U2NoZW1hIH0gZnJvbSAnLi9jb21tb24tc2NoZW1hcy5qcyc7XG5cbmNvbnN0IE1BWF9QUk9NUFRfTEVOR1RIID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuTUFYX1BST01QVF9MRU5HVEggfHwgJzUwMDAnLCAxMCk7XG5cbi8vIEFJIEdlbmVyYXRpb24gUmVxdWVzdFxuXG4vKipcbiAqIFNjaGVtYSBmb3IgQUkgZ2VuZXJhdGlvbiByZXF1ZXN0IGJvZHkuXG4gKiBVc2VkIGJ5IGJvdGggUE9TVCAvcGlwZWxpbmVzL2dlbmVyYXRlIGFuZCBQT1NUIC9wbHVnaW5zL2dlbmVyYXRlLlxuICovXG5leHBvcnQgY29uc3QgQUlHZW5lcmF0ZUJvZHlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC8qKiBOYXR1cmFsIGxhbmd1YWdlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdG8gZ2VuZXJhdGUuICovXG4gIHByb21wdDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5taW4oMSwgJ0EgcHJvbXB0IHdpdGggYSBuYXR1cmFsIGxhbmd1YWdlIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkJylcbiAgICAubWF4KE1BWF9QUk9NUFRfTEVOR1RILCBgUHJvbXB0IG11c3QgYmUgJHtNQVhfUFJPTVBUX0xFTkdUSH0gY2hhcmFjdGVycyBvciBmZXdlcmApLFxuXG4gIC8qKiBBSSBwcm92aWRlciBpZGVudGlmaWVyIChlLmcuIFwiYW50aHJvcGljXCIsIFwib3BlbmFpXCIsIFwiZ29vZ2xlXCIpLiAqL1xuICBwcm92aWRlcjogei5zdHJpbmcoKS5taW4oMSwgJ0EgcHJvdmlkZXIgaXMgcmVxdWlyZWQgKGUuZy4sIFwiYW50aHJvcGljXCIsIFwib3BlbmFpXCIsIFwiZ29vZ2xlXCIpJyksXG5cbiAgLyoqIEFJIG1vZGVsIGlkZW50aWZpZXIgKGUuZy4gXCJjbGF1ZGUtc29ubmV0LTVcIiwgXCJncHQtNG9cIikuICovXG4gIG1vZGVsOiB6LnN0cmluZygpLm1pbigxLCAnQSBtb2RlbCBpcyByZXF1aXJlZCAoZS5nLiwgXCJjbGF1ZGUtc29ubmV0LTVcIiwgXCJncHQtNG9cIiknKSxcblxuICAvKiogT3B0aW9uYWwgY3VzdG9tIEFQSSBrZXkgdG8gb3ZlcnJpZGUgdGhlIHNlcnZlci9vcmcga2V5IGZvciB0aGlzIHJlcXVlc3QuICovXG4gIGFwaUtleTogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcblxuICAvKiogUHJldmlvdXMgcGlwZWxpbmUgY29uZmlnIGZvciBpdGVyYXRpdmUgcmVmaW5lbWVudC4gKi9cbiAgcHJldmlvdXNDb25maWc6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuXG4gIC8qKiBGYWxsYmFjayBBSSBwcm92aWRlcnMgaWYgcHJpbWFyeSBmYWlscyAoZS5nLiwgW1wib3BlbmFpXCIsIFwiZ29vZ2xlXCJdKS4gKi9cbiAgZmFsbGJhY2tQcm92aWRlcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vLyBQbHVnaW4gRGVwbG95LUdlbmVyYXRlZCBSZXF1ZXN0XG5cbi8qKlxuICogU2NoZW1hIGZvciBQT1NUIC9wbHVnaW5zL2RlcGxveS1nZW5lcmF0ZWQgcmVxdWVzdCBib2R5LlxuICogVmFsaWRhdGVzIHRoZSBBSS1nZW5lcmF0ZWQgcGx1Z2luIGNvbmZpZ3VyYXRpb24gYmVmb3JlIERvY2tlciBidWlsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFBsdWdpbkRlcGxveUdlbmVyYXRlZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgLyoqIFBsdWdpbiBuYW1lIChsb3dlcmNhc2UsIGFscGhhbnVtZXJpYyB3aXRoIGh5cGhlbnMpLiAqL1xuICBuYW1lOiB6LnN0cmluZygpLm1pbigxLCAnUGx1Z2luIG5hbWUgaXMgcmVxdWlyZWQnKSxcblxuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLyoqIFNlbWFudGljIHZlcnNpb24gKGUuZy4gXCIxLjAuMFwiKS4gKi9cbiAgdmVyc2lvbjogei5zdHJpbmcoKS5taW4oMSwgJ1ZlcnNpb24gaXMgcmVxdWlyZWQnKSxcblxuICAvKiogUGx1Z2luIGV4ZWN1dGlvbiB0eXBlLiAqL1xuICBwbHVnaW5UeXBlOiB6LmVudW0oWydDb2RlQnVpbGRTdGVwJywgJ1NoZWxsU3RlcCcsICdNYW51YWxBcHByb3ZhbFN0ZXAnXSkuZGVmYXVsdCgnQ29kZUJ1aWxkU3RlcCcpLFxuXG4gIC8qKiBBV1MgQ29kZUJ1aWxkIGNvbXB1dGUgc2l6ZS4gKi9cbiAgY29tcHV0ZVR5cGU6IHouZW51bShbJ1NNQUxMJywgJ01FRElVTScsICdMQVJHRScsICdYMl9MQVJHRSddKS5kZWZhdWx0KCdNRURJVU0nKSxcblxuICAvKiogS2V5d29yZHMgZm9yIGNhdGVnb3JpemF0aW9uLiAqL1xuICBrZXl3b3Jkczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLmRlZmF1bHQoW10pLFxuXG4gIC8qKiBQcmltYXJ5IG91dHB1dCBkaXJlY3RvcnkgcGF0aC4gKi9cbiAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG5cbiAgLyoqIENvbW1hbmRzIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzLiAqL1xuICBpbnN0YWxsQ29tbWFuZHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKS5kZWZhdWx0KFtdKSxcblxuICAvKiogQnVpbGQvZXhlY3V0aW9uIGNvbW1hbmRzLiAqL1xuICBjb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5taW4oMSwgJ0F0IGxlYXN0IG9uZSBidWlsZCBjb21tYW5kIGlzIHJlcXVpcmVkJyksXG5cbiAgLyoqIEVudmlyb25tZW50IHZhcmlhYmxlcy4gKi9cbiAgZW52OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuXG4gIC8qKiBEb2NrZXIgYnVpbGQgYXJndW1lbnRzIHBhc3NlZCB2aWEgLS1idWlsZC1hcmcgYXQgaW1hZ2UgYnVpbGQgdGltZS4gKi9cbiAgYnVpbGRBcmdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuXG4gIC8qKiBDb21wbGV0ZSBEb2NrZXJmaWxlIGNvbnRlbnQgZm9yIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gKi9cbiAgZG9ja2VyZmlsZTogei5zdHJpbmcoKS5taW4oMSwgJ0RvY2tlcmZpbGUgY29udGVudCBpcyByZXF1aXJlZCcpLFxuXG4gIC8qKiBBY2Nlc3MgdmlzaWJpbGl0eS4gKi9cbiAgdmlzaWJpbGl0eTogVmlzaWJpbGl0eVNjaGVtYS5kZWZhdWx0KCdwcml2YXRlJyksXG59KTtcblxuLy8gQUkgR2VuZXJhdGUgRnJvbSBVUkwgUmVxdWVzdFxuXG4vKipcbiAqIFNjaGVtYSBmb3IgUE9TVCAvcGlwZWxpbmVzL2dlbmVyYXRlL2Zyb20tdXJsL3N0cmVhbSByZXF1ZXN0IGJvZHkuXG4gKiBWYWxpZGF0ZXMgR2l0IFVSTCArIEFJIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gZm9yIHJlcG8tYmFzZWQgcGlwZWxpbmUgZ2VuZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFJR2VuZXJhdGVGcm9tVXJsQm9keVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgLyoqIEdpdCByZXBvc2l0b3J5IFVSTCAoSFRUUFMsIFNTSCwgb3IgZ2l0QCBmb3JtYXQpLiAqL1xuICBnaXRVcmw6IHouc3RyaW5nKCkubWluKDEsICdBIEdpdCByZXBvc2l0b3J5IFVSTCBpcyByZXF1aXJlZCcpLm1heCg1MDAsICdVUkwgbXVzdCBiZSA1MDAgY2hhcmFjdGVycyBvciBmZXdlcicpLFxuXG4gIC8qKiBBSSBwcm92aWRlciBpZGVudGlmaWVyIChlLmcuIFwiYW50aHJvcGljXCIsIFwib3BlbmFpXCIsIFwiZ29vZ2xlXCIpLiAqL1xuICBwcm92aWRlcjogei5zdHJpbmcoKS5taW4oMSwgJ0EgcHJvdmlkZXIgaXMgcmVxdWlyZWQnKSxcblxuICAvKiogQUkgbW9kZWwgaWRlbnRpZmllciAoZS5nLiBcImNsYXVkZS1zb25uZXQtNVwiLCBcImdwdC00b1wiKS4gKi9cbiAgbW9kZWw6IHouc3RyaW5nKCkubWluKDEsICdBIG1vZGVsIGlzIHJlcXVpcmVkJyksXG5cbiAgLyoqIE9wdGlvbmFsIGN1c3RvbSBBUEkga2V5IHRvIG92ZXJyaWRlIHRoZSBzZXJ2ZXIgY29uZmlnLiAqL1xuICBhcGlLZXk6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG5cbiAgLyoqIE9wdGlvbmFsIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZvciBhY2Nlc3NpbmcgcHJpdmF0ZSByZXBvc2l0b3JpZXMuICovXG4gIHJlcG9Ub2tlbjogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbn0pO1xuIl19
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktc2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL2FpLXNjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV4RSx3QkFBd0I7QUFFeEI7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzQyx3REFBd0Q7SUFDeEQsTUFBTSxFQUFFLENBQUM7U0FDTixNQUFNLEVBQUU7U0FDUixHQUFHLENBQUMsQ0FBQyxFQUFFLDBEQUEwRCxDQUFDO1NBQ2xFLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsaUJBQWlCLHNCQUFzQixDQUFDO0lBRXBGLHFFQUFxRTtJQUNyRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsZ0VBQWdFLENBQUM7SUFFN0YsOERBQThEO0lBQzlELEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSx5REFBeUQsQ0FBQztJQUVuRiwrRUFBK0U7SUFDL0UsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBRXBDLHlEQUF5RDtJQUN6RCxjQUFjLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFD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LEVBQUUsd0JBQXdCLENBQUM7SUFFckQsOERBQThEO0lBQzlELEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsQ0FBQztJQUUvQyw2REFBNkQ7SUFDN0QsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBRXBDLHdFQUF3RTtJQUN4RSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDeEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgVmlzaWJpbGl0eVNjaGVtYSB9IGZyb20gJy4vY29tbW9uLXNjaGVtYXMuanMnO1xuaW1wb3J0IHsgZW52SW50IH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJztcblxuY29uc3QgTUFYX1BST01QVF9MRU5HVEggPSBlbnZJbnQoJ01BWF9QUk9NUFRfTEVOR1RIJywgNTAwMCwgeyBtaW46IDEgfSk7XG5cbi8vIEFJIEdlbmVyYXRpb24gUmVxdWVzdFxuXG4vKipcbiAqIFNjaGVtYSBmb3IgQUkgZ2VuZXJhdGlvbiByZXF1ZXN0IGJvZHkuXG4gKiBVc2VkIGJ5IGJvdGggUE9TVCAvcGlwZWxpbmVzL2dlbmVyYXRlIGFuZCBQT1NUIC9wbHVnaW5zL2dlbmVyYXRlLlxuICovXG5leHBvcnQgY29uc3QgQUlHZW5lcmF0ZUJvZHlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC8qKiBOYXR1cmFsIGxhbmd1YWdlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdG8gZ2VuZXJhdGUuICovXG4gIHByb21wdDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5taW4oMSwgJ0EgcHJvbXB0IHdpdGggYSBuYXR1cmFsIGxhbmd1YWdlIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkJylcbiAgICAubWF4KE1BWF9QUk9NUFRfTEVOR1RILCBgUHJvbXB0IG11c3QgYmUgJHtNQVhfUFJPTVBUX0xFTkdUSH0gY2hhcmFjdGVycyBvciBmZXdlcmApLFxuXG4gIC8qKiBBSSBwcm92aWRlciBpZGVudGlmaWVyIChlLmcuIFwiYW50aHJvcGljXCIsIFwib3BlbmFpXCIsIFwiZ29vZ2xlXCIpLiAqL1xuICBwcm92aWRlcjogei5zdHJpbmcoKS5taW4oMSwgJ0EgcHJvdmlkZXIgaXMgcmVxdWlyZWQgKGUuZy4sIFwiYW50aHJvcGljXCIsIFwib3BlbmFpXCIsIFwiZ29vZ2xlXCIpJyksXG5cbiAgLyoqIEFJIG1vZGVsIGlkZW50aWZpZXIgKGUuZy4gXCJjbGF1ZGUtc29ubmV0LTVcIiwgXCJncHQtNG9cIikuICovXG4gIG1vZGVsOiB6LnN0cmluZygpLm1pbigxLCAnQSBtb2RlbCBpcyByZXF1aXJlZCAoZS5nLiwgXCJjbGF1ZGUtc29ubmV0LTVcIiwgXCJncHQtNG9cIiknKSxcblxuICAvKiogT3B0aW9uYWwgY3VzdG9tIEFQSSBrZXkgdG8gb3ZlcnJpZGUgdGhlIHNlcnZlci9vcmcga2V5IGZvciB0aGlzIHJlcXVlc3QuICovXG4gIGFwaUtleTogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcblxuICAvKiogUHJldmlvdXMgcGlwZWxpbmUgY29uZmlnIGZvciBpdGVyYXRpdmUgcmVmaW5lbWVudC4gKi9cbiAgcHJldmlvdXNDb25maWc6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuXG4gIC8qKiBGYWxsYmFjayBBSSBwcm92aWRlcnMgaWYgcHJpbWFyeSBmYWlscyAoZS5nLiwgW1wib3BlbmFpXCIsIFwiZ29vZ2xlXCJdKS4gKi9cbiAgZmFsbGJhY2tQcm92aWRlcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vLyBQbHVnaW4gRGVwbG95LUdlbmVyYXRlZCBSZXF1ZXN0XG5cbi8qKlxuICogU2NoZW1hIGZvciBQT1NUIC9wbHVnaW5zL2RlcGxveS1nZW5lcmF0ZWQgcmVxdWVzdCBib2R5LlxuICogVmFsaWRhdGVzIHRoZSBBSS1nZW5lcmF0ZWQgcGx1Z2luIGNvbmZpZ3VyYXRpb24gYmVmb3JlIERvY2tlciBidWlsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFBsdWdpbkRlcGxveUdlbmVyYXRlZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgLyoqIFBsdWdpbiBuYW1lIChsb3dlcmNhc2UsIGFscGhhbnVtZXJpYyB3aXRoIGh5cGhlbnMpLiAqL1xuICBuYW1lOiB6LnN0cmluZygpLm1pbigxLCAnUGx1Z2luIG5hbWUgaXMgcmVxdWlyZWQnKSxcblxuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLyoqIFNlbWFudGljIHZlcnNpb24gKGUuZy4gXCIxLjAuMFwiKS4gKi9cbiAgdmVyc2lvbjogei5zdHJpbmcoKS5taW4oMSwgJ1ZlcnNpb24gaXMgcmVxdWlyZWQnKSxcblxuICAvKiogUGx1Z2luIGV4ZWN1dGlvbiB0eXBlLiAqL1xuICBwbHVnaW5UeXBlOiB6LmVudW0oWydDb2RlQnVpbGRTdGVwJywgJ1NoZWxsU3RlcCcsICdNYW51YWxBcHByb3ZhbFN0ZXAnXSkuZGVmYXVsdCgnQ29kZUJ1aWxkU3RlcCcpLFxuXG4gIC8qKiBBV1MgQ29kZUJ1aWxkIGNvbXB1dGUgc2l6ZS4gKi9cbiAgY29tcHV0ZVR5cGU6IHouZW51bShbJ1NNQUxMJywgJ01FRElVTScsICdMQVJHRScsICdYMl9MQVJHRSddKS5kZWZhdWx0KCdNRURJVU0nKSxcblxuICAvKiogS2V5d29yZHMgZm9yIGNhdGVnb3JpemF0aW9uLiAqL1xuICBrZXl3b3Jkczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLmRlZmF1bHQoW10pLFxuXG4gIC8qKiBQcmltYXJ5IG91dHB1dCBkaXJlY3RvcnkgcGF0aC4gKi9cbiAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG5cbiAgLyoqIENvbW1hbmRzIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzLiAqL1xuICBpbnN0YWxsQ29tbWFuZHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKS5kZWZhdWx0KFtdKSxcblxuICAvKiogQnVpbGQvZXhlY3V0aW9uIGNvbW1hbmRzLiAqL1xuICBjb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5taW4oMSwgJ0F0IGxlYXN0IG9uZSBidWlsZCBjb21tYW5kIGlzIHJlcXVpcmVkJyksXG5cbiAgLyoqIEVudmlyb25tZW50IHZhcmlhYmxlcy4gKi9cbiAgZW52OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuXG4gIC8qKiBEb2NrZXIgYnVpbGQgYXJndW1lbnRzIHBhc3NlZCB2aWEgLS1idWlsZC1hcmcgYXQgaW1hZ2UgYnVpbGQgdGltZS4gKi9cbiAgYnVpbGRBcmdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuXG4gIC8qKiBDb21wbGV0ZSBEb2NrZXJmaWxlIGNvbnRlbnQgZm9yIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gKi9cbiAgZG9ja2VyZmlsZTogei5zdHJpbmcoKS5taW4oMSwgJ0RvY2tlcmZpbGUgY29udGVudCBpcyByZXF1aXJlZCcpLFxuXG4gIC8qKiBBY2Nlc3MgdmlzaWJpbGl0eS4gKi9cbiAgdmlzaWJpbGl0eTogVmlzaWJpbGl0eVNjaGVtYS5kZWZhdWx0KCdwcml2YXRlJyksXG59KTtcblxuLy8gQUkgR2VuZXJhdGUgRnJvbSBVUkwgUmVxdWVzdFxuXG4vKipcbiAqIFNjaGVtYSBmb3IgUE9TVCAvcGlwZWxpbmVzL2dlbmVyYXRlL2Zyb20tdXJsL3N0cmVhbSByZXF1ZXN0IGJvZHkuXG4gKiBWYWxpZGF0ZXMgR2l0IFVSTCArIEFJIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gZm9yIHJlcG8tYmFzZWQgcGlwZWxpbmUgZ2VuZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFJR2VuZXJhdGVGcm9tVXJsQm9keVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgLyoqIEdpdCByZXBvc2l0b3J5IFVSTCAoSFRUUFMsIFNTSCwgb3IgZ2l0QCBmb3JtYXQpLiAqL1xuICBnaXRVcmw6IHouc3RyaW5nKCkubWluKDEsICdBIEdpdCByZXBvc2l0b3J5IFVSTCBpcyByZXF1aXJlZCcpLm1heCg1MDAsICdVUkwgbXVzdCBiZSA1MDAgY2hhcmFjdGVycyBvciBmZXdlcicpLFxuXG4gIC8qKiBBSSBwcm92aWRlciBpZGVudGlmaWVyIChlLmcuIFwiYW50aHJvcGljXCIsIFwib3BlbmFpXCIsIFwiZ29vZ2xlXCIpLiAqL1xuICBwcm92aWRlcjogei5zdHJpbmcoKS5taW4oMSwgJ0EgcHJvdmlkZXIgaXMgcmVxdWlyZWQnKSxcblxuICAvKiogQUkgbW9kZWwgaWRlbnRpZmllciAoZS5nLiBcImNsYXVkZS1zb25uZXQtNVwiLCBcImdwdC00b1wiKS4gKi9cbiAgbW9kZWw6IHouc3RyaW5nKCkubWluKDEsICdBIG1vZGVsIGlzIHJlcXVpcmVkJyksXG5cbiAgLyoqIE9wdGlvbmFsIGN1c3RvbSBBUEkga2V5IHRvIG92ZXJyaWRlIHRoZSBzZXJ2ZXIgY29uZmlnLiAqL1xuICBhcGlLZXk6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG5cbiAgLyoqIE9wdGlvbmFsIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZvciBhY2Nlc3NpbmcgcHJpdmF0ZSByZXBvc2l0b3JpZXMuICovXG4gIHJlcG9Ub2tlbjogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbn0pO1xuIl19
@@ -81,15 +81,6 @@ export declare const DEFAULT_PAGE_LIMIT: number;
81
81
  /** Ceiling on offset-based paging — beyond this, deep paging must use the cursor API
82
82
  * (an unbounded offset is a scan-and-discard DoS amplifier on hot list routes). */
83
83
  export declare const MAX_PAGE_OFFSET: number;
84
- export declare const PaginationSchema: z.ZodObject<{
85
- limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
86
- offset: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
87
- sortBy: z.ZodOptional<z.ZodString>;
88
- sortOrder: z.ZodOptional<z.ZodEnum<{
89
- asc: "asc";
90
- desc: "desc";
91
- }>>;
92
- }, z.core.$strip>;
93
84
  /**
94
85
  * Boolean query parameter schema
95
86
  * Handles string "true"/"false" and boolean values
@@ -52,12 +52,6 @@ export const DEFAULT_PAGE_LIMIT = envInt('DEFAULT_PAGE_LIMIT', 100, { min: 1 });
52
52
  /** Ceiling on offset-based paging — beyond this, deep paging must use the cursor API
53
53
  * (an unbounded offset is a scan-and-discard DoS amplifier on hot list routes). */
54
54
  export const MAX_PAGE_OFFSET = envInt('MAX_PAGE_OFFSET', 100000, { min: 0 });
55
- export const PaginationSchema = z.object({
56
- limit: z.coerce.number().int().min(1).max(MAX_PAGE_LIMIT).optional(),
57
- offset: z.coerce.number().int().min(0).optional(),
58
- sortBy: z.string().optional(),
59
- sortOrder: SortOrderSchema.optional(),
60
- });
61
55
  /**
62
56
  * Boolean query parameter schema
63
57
  * Handles string "true"/"false" and boolean values
@@ -92,4 +86,4 @@ export const BaseFilterSchema = z.object({
92
86
  ownerId: z.string().min(1).optional(),
93
87
  lifecycle: LifecycleSchema.optional(),
94
88
  });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLDJFQUEyRTtBQUMzRSxPQUFPLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsd0VBQXdFO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFckQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDeEQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNqQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7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TSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDeEMsT0FBTyxFQUFFLHFCQUFxQjtDQUMvQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFO0lBQ2hFLE9BQU8sRUFBRSw0QkFBNEI7Q0FDdEMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMzRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO0lBQ3ZDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUN4Qyx3RUFBd0U7SUFDeEUsb0RBQW9EO0lBQ3BELE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNyQyxTQUFTLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtDQUN0QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy8gTXVzdCBydW4gYmVmb3JlIGFueSB6Liogc2NoZW1hIGNyZWF0aW9uIOKAlCBab2QgNCByZXF1aXJlcyBlYWdlciBleHRlbnNpb25cbmltcG9ydCAnLi4vb3BlbmFwaS9leHRlbmQtem9kLmpzJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgQ1JJVElDQUxJVFlfTEVWRUxTLCBMSUZFQ1lDTEVfU1RBR0VTLCBPV05FUl9UWVBFUyB9IGZyb20gJy4uL3R5cGVzL2NhdGFsb2ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHsgVklTSUJJTElUSUVTIH0gZnJvbSAnLi4vdHlwZXMvdmlzaWJpbGl0eS5qcyc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuXG4vKiogVGhlIHNoYXJlZCB0aHJlZS1ydW5nIHNoYXJpbmcgbGFkZGVyIOKAlCBzZWUgdGhlIGBWaXNpYmlsaXR5YCB0eXBlLiAqL1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlTY2hlbWEgPSB6LmVudW0oVklTSUJJTElUSUVTKTtcblxuLyoqXG4gKiBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2ctbWV0YWRhdGEgc2NoZW1hcyDigJQgc2hhcmVkIGJ5IHBpcGVsaW5lIGFuZCBwbHVnaW5cbiAqIGNyZWF0ZS91cGRhdGUgYm9kaWVzIChhbmQgdGhlIGZpbHRlciBzY2hlbWEgYmVsb3cpLiBNaXJyb3IgdGhlIHNoYXJlZCB0eXBlc1xuICogaW4gYHR5cGVzL2NhdGFsb2ctbWV0YWRhdGEudHNgLlxuICovXG5leHBvcnQgY29uc3QgTGlmZWN5Y2xlU2NoZW1hID0gei5lbnVtKExJRkVDWUNMRV9TVEFHRVMpO1xuZXhwb3J0IGNvbnN0IENyaXRpY2FsaXR5U2NoZW1hID0gei5lbnVtKENSSVRJQ0FMSVRZX0xFVkVMUyk7XG5leHBvcnQgY29uc3QgT3duZXJUeXBlU2NoZW1hID0gei5lbnVtKE9XTkVSX1RZUEVTKTtcblxuZXhwb3J0IGNvbnN0IEVudGl0eUxpbmtTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRpdGxlOiB6LnN0cmluZygpLm1pbigxKS5tYXgoMTIwKSxcbiAgdXJsOiB6LnN0cmluZygpLnVybCgpLm1heCgyMDQ4KSxcbiAgaWNvbjogei5zdHJpbmcoKS5tYXgoNDApLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIFR5cGVkIGNsYXNzaWZpY2F0aW9uIGxhYmVsczogYHsgdGVhbTogJ3BheW1lbnRzJywgdGllcjogJ2dvbGQnIH1gLiAqL1xuZXhwb3J0IGNvbnN0IEVudGl0eUxhYmVsc1NjaGVtYSA9IHoucmVjb3JkKHouc3RyaW5nKCkubWluKDEpLm1heCg2MyksIHouc3RyaW5nKCkubWF4KDI1NSkpO1xuXG4vKipcbiAqIENhdGFsb2ctbWV0YWRhdGEgZmllbGRzIGNvbW1vbiB0byBjYXRhbG9nIGVudGl0aWVzLiBTcHJlYWQgaW50byBjcmVhdGUvdXBkYXRlXG4gKiBib2R5IHNjaGVtYXMgc28gcGlwZWxpbmVzIGFuZCBwbHVnaW5zIGFjY2VwdCBpZGVudGljYWwgb3duZXJzaGlwL2xpZmVjeWNsZS9cbiAqIGNsYXNzaWZpY2F0aW9uIGlucHV0LiBBbGwgb3B0aW9uYWwg4oCUIG93bmVyIGRlZmF1bHRzIHRvIHRoZSBjcmVhdG9yIHNlcnZlci1zaWRlLlxuICovXG5leHBvcnQgY29uc3QgQ2F0YWxvZ01ldGFkYXRhU2hhcGUgPSB7XG4gIG93bmVySWQ6IHouc3RyaW5nKCkubWluKDEpLm1heCgyNTUpLm9wdGlvbmFsKCksXG4gIG93bmVyVHlwZTogT3duZXJUeXBlU2NoZW1hLm9wdGlvbmFsKCksXG4gIGxpZmVjeWNsZTogTGlmZWN5Y2xlU2NoZW1hLm9wdGlvbmFsKCksXG4gIGNyaXRpY2FsaXR5OiBDcml0aWNhbGl0eVNjaGVtYS5vcHRpb25hbCgpLFxuICBsYWJlbHM6IEVudGl0eUxhYmVsc1NjaGVtYS5vcHRpb25hbCgpLFxuICBsaW5rczogei5hcnJheShFbnRpdHlMaW5rU2NoZW1hKS5tYXgoNTApLm9wdGlvbmFsKCksXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIFNvcnQgb3JkZXIgc2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBTb3J0T3JkZXJTY2hlbWEgPSB6LmVudW0oWydhc2MnLCAnZGVzYyddKTtcblxuLyoqXG4gKiBQYWdpbmF0aW9uIHBhcmFtZXRlcnMgc2NoZW1hLlxuICpcbiAqIGBNQVhfUEFHRV9MSU1JVGAgLyBgREVGQVVMVF9QQUdFX0xJTUlUYCBhcmUgdGhlIFNJTkdMRSBzb3VyY2UgZm9yIHRoZXNlIHZhbHVlc1xuICogYWNyb3NzIHRoZSBtb25vcmVwbyDigJQgcGlwZWxpbmUtY29yZSdzIGBDb3JlQ29uc3RhbnRzYCBhbmQgcGlwZWxpbmUtZGF0YSdzXG4gKiBgQ3J1ZFNlcnZpY2VgIGltcG9ydCB0aGVtIGZyb20gaGVyZSBpbnN0ZWFkIG9mIHJlLXJlYWRpbmcgdGhlIGVudiAod2hpY2ggZHJpZnRlZCkuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfUEFHRV9MSU1JVCA9IGVudkludCgnTUFYX1BBR0VfTElNSVQnLCAxMDAwLCB7IG1pbjogMSB9KTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBR0VfTElNSVQgPSBlbnZJbnQoJ0RFRkFVTFRfUEFHRV9MSU1JVCcsIDEwMCwgeyBtaW46IDEgfSk7XG4vKiogQ2VpbGluZyBvbiBvZmZzZXQtYmFzZWQgcGFnaW5nIOKAlCBiZXlvbmQgdGhpcywgZGVlcCBwYWdpbmcgbXVzdCB1c2UgdGhlIGN1cnNvciBBUElcbiAqICAoYW4gdW5ib3VuZGVkIG9mZnNldCBpcyBhIHNjYW4tYW5kLWRpc2NhcmQgRG9TIGFtcGxpZmllciBvbiBob3QgbGlzdCByb3V0ZXMpLiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9QQUdFX09GRlNFVCA9IGVudkludCgnTUFYX1BBR0VfT0ZGU0VUJywgMTAwMDAwLCB7IG1pbjogMCB9KTtcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGxpbWl0OiB6LmNvZXJjZS5udW1iZXIoKS5pbnQoKS5taW4oMSkubWF4KE1BWF9QQUdFX0xJTUlUKS5vcHRpb25hbCgpLFxuICBvZmZzZXQ6IHouY29lcmNlLm51bWJlcigpLmludCgpLm1pbigwKS5vcHRpb25hbCgpLFxuICBzb3J0Qnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc29ydE9yZGVyOiBTb3J0T3JkZXJTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIEJvb2xlYW4gcXVlcnkgcGFyYW1ldGVyIHNjaGVtYVxuICogSGFuZGxlcyBzdHJpbmcgXCJ0cnVlXCIvXCJmYWxzZVwiIGFuZCBib29sZWFuIHZhbHVlc1xuICovXG5leHBvcnQgY29uc3QgQm9vbGVhblF1ZXJ5U2NoZW1hID0gei51bmlvbihbXG4gIHouYm9vbGVhbigpLFxuICB6LmVudW0oWyd0cnVlJywgJ2ZhbHNlJ10pLnRyYW5zZm9ybSh2YWwgPT4gdmFsID09PSAndHJ1ZScpLFxuICB6LnN0cmluZygpLnRyYW5zZm9ybSh2YWwgPT4gdmFsID09PSAndHJ1ZScpLFxuXSk7XG5cbi8qKlxuICogVVVJRCBzY2hlbWEgd2l0aCB2YWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBVVUlEU2NoZW1hID0gei5zdHJpbmcoKS51dWlkKHtcbiAgbWVzc2FnZTogJ0ludmFsaWQgVVVJRCBmb3JtYXQnLFxufSk7XG5cbi8qKlxuICogT3B0aW9uYWwgVVVJRCBzY2hlbWEgKGZvciBwYXJ0aWFsIFVVSURzIG9yIHByZWZpeGVzKVxuICovXG5leHBvcnQgY29uc3QgVVVJRFByZWZpeFNjaGVtYSA9IHouc3RyaW5nKCkucmVnZXgoL15bMC05YS1mLV0rJC9pLCB7XG4gIG1lc3NhZ2U6ICdJbnZhbGlkIFVVSUQgcHJlZml4IGZvcm1hdCcsXG59KTtcblxuLyoqXG4gKiBCYXNlIGZpbHRlciBzY2hlbWEgZm9yIGVudGl0aWVzIHdpdGggY29tbW9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgQmFzZUZpbHRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHoudW5pb24oW1VVSURTY2hlbWEsIHouYXJyYXkoVVVJRFNjaGVtYSksIFVVSURQcmVmaXhTY2hlbWFdKS5vcHRpb25hbCgpLFxuICB2aXNpYmlsaXR5OiBWaXNpYmlsaXR5U2NoZW1hLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNEZWZhdWx0OiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIGZpbHRlcnMgKGFwcGxpZWQgb25seSBieSBlbnRpdGllcyB0aGF0IGNhcnJ5XG4gIC8vIG93bmVyL2xpZmVjeWNsZSBjb2x1bW5zIOKAlCBwaXBlbGluZXMgYW5kIHBsdWdpbnMpLlxuICBvd25lcklkOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBsaWZlY3ljbGU6IExpZmVjeWNsZVNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG4iXX0=
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLDJFQUEyRTtBQUMzRSxPQUFPLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsd0VBQXdFO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFckQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDeEQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNqQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ3BDLENBQUMsQ0FBQztBQUVILHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUUzRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUc7SUFDbEMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUM5QyxTQUFTLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxTQUFTLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxXQUFXLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxFQUFFO0lBQ3pDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDckMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQzNDLENBQUM7QUFFWDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFdkQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEY7b0ZBQ29GO0FBQ3BGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFN0U7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN4QyxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUM7SUFDMUQsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUM7Q0FDNUMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztJQUN4QyxPQUFPLEVBQUUscUJBQXFCO0NBQy9CLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUU7SUFDaEUsT0FBTyxFQUFFLDRCQUE0QjtDQUN0QyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzNFLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUN2QyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3hDLHdFQUF3RTtJQUN4RSxvREFBb0Q7SUFDcEQsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3JDLFNBQVMsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFO0NBQ3RDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vLyBNdXN0IHJ1biBiZWZvcmUgYW55IHouKiBzY2hlbWEgY3JlYXRpb24g4oCUIFpvZCA0IHJlcXVpcmVzIGVhZ2VyIGV4dGVuc2lvblxuaW1wb3J0ICcuLi9vcGVuYXBpL2V4dGVuZC16b2QuanMnO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBDUklUSUNBTElUWV9MRVZFTFMsIExJRkVDWUNMRV9TVEFHRVMsIE9XTkVSX1RZUEVTIH0gZnJvbSAnLi4vdHlwZXMvY2F0YWxvZy1tZXRhZGF0YS5qcyc7XG5pbXBvcnQgeyBWSVNJQklMSVRJRVMgfSBmcm9tICcuLi90eXBlcy92aXNpYmlsaXR5LmpzJztcbmltcG9ydCB7IGVudkludCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5cbi8qKiBUaGUgc2hhcmVkIHRocmVlLXJ1bmcgc2hhcmluZyBsYWRkZXIg4oCUIHNlZSB0aGUgYFZpc2liaWxpdHlgIHR5cGUuICovXG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eVNjaGVtYSA9IHouZW51bShWSVNJQklMSVRJRVMpO1xuXG4vKipcbiAqIERldmVsb3Blci1wb3J0YWwgY2F0YWxvZy1tZXRhZGF0YSBzY2hlbWFzIOKAlCBzaGFyZWQgYnkgcGlwZWxpbmUgYW5kIHBsdWdpblxuICogY3JlYXRlL3VwZGF0ZSBib2RpZXMgKGFuZCB0aGUgZmlsdGVyIHNjaGVtYSBiZWxvdykuIE1pcnJvciB0aGUgc2hhcmVkIHR5cGVzXG4gKiBpbiBgdHlwZXMvY2F0YWxvZy1tZXRhZGF0YS50c2AuXG4gKi9cbmV4cG9ydCBjb25zdCBMaWZlY3ljbGVTY2hlbWEgPSB6LmVudW0oTElGRUNZQ0xFX1NUQUdFUyk7XG5leHBvcnQgY29uc3QgQ3JpdGljYWxpdHlTY2hlbWEgPSB6LmVudW0oQ1JJVElDQUxJVFlfTEVWRUxTKTtcbmV4cG9ydCBjb25zdCBPd25lclR5cGVTY2hlbWEgPSB6LmVudW0oT1dORVJfVFlQRVMpO1xuXG5leHBvcnQgY29uc3QgRW50aXR5TGlua1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgdGl0bGU6IHouc3RyaW5nKCkubWluKDEpLm1heCgxMjApLFxuICB1cmw6IHouc3RyaW5nKCkudXJsKCkubWF4KDIwNDgpLFxuICBpY29uOiB6LnN0cmluZygpLm1heCg0MCkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKiogVHlwZWQgY2xhc3NpZmljYXRpb24gbGFiZWxzOiBgeyB0ZWFtOiAncGF5bWVudHMnLCB0aWVyOiAnZ29sZCcgfWAuICovXG5leHBvcnQgY29uc3QgRW50aXR5TGFiZWxzU2NoZW1hID0gei5yZWNvcmQoei5zdHJpbmcoKS5taW4oMSkubWF4KDYzKSwgei5zdHJpbmcoKS5tYXgoMjU1KSk7XG5cbi8qKlxuICogQ2F0YWxvZy1tZXRhZGF0YSBmaWVsZHMgY29tbW9uIHRvIGNhdGFsb2cgZW50aXRpZXMuIFNwcmVhZCBpbnRvIGNyZWF0ZS91cGRhdGVcbiAqIGJvZHkgc2NoZW1hcyBzbyBwaXBlbGluZXMgYW5kIHBsdWdpbnMgYWNjZXB0IGlkZW50aWNhbCBvd25lcnNoaXAvbGlmZWN5Y2xlL1xuICogY2xhc3NpZmljYXRpb24gaW5wdXQuIEFsbCBvcHRpb25hbCDigJQgb3duZXIgZGVmYXVsdHMgdG8gdGhlIGNyZWF0b3Igc2VydmVyLXNpZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBDYXRhbG9nTWV0YWRhdGFTaGFwZSA9IHtcbiAgb3duZXJJZDogei5zdHJpbmcoKS5taW4oMSkubWF4KDI1NSkub3B0aW9uYWwoKSxcbiAgb3duZXJUeXBlOiBPd25lclR5cGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgbGlmZWN5Y2xlOiBMaWZlY3ljbGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgY3JpdGljYWxpdHk6IENyaXRpY2FsaXR5U2NoZW1hLm9wdGlvbmFsKCksXG4gIGxhYmVsczogRW50aXR5TGFiZWxzU2NoZW1hLm9wdGlvbmFsKCksXG4gIGxpbmtzOiB6LmFycmF5KEVudGl0eUxpbmtTY2hlbWEpLm1heCg1MCkub3B0aW9uYWwoKSxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogU29ydCBvcmRlciBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IFNvcnRPcmRlclNjaGVtYSA9IHouZW51bShbJ2FzYycsICdkZXNjJ10pO1xuXG4vKipcbiAqIFBhZ2luYXRpb24gcGFyYW1ldGVycyBzY2hlbWEuXG4gKlxuICogYE1BWF9QQUdFX0xJTUlUYCAvIGBERUZBVUxUX1BBR0VfTElNSVRgIGFyZSB0aGUgU0lOR0xFIHNvdXJjZSBmb3IgdGhlc2UgdmFsdWVzXG4gKiBhY3Jvc3MgdGhlIG1vbm9yZXBvIOKAlCBwaXBlbGluZS1jb3JlJ3MgYENvcmVDb25zdGFudHNgIGFuZCBwaXBlbGluZS1kYXRhJ3NcbiAqIGBDcnVkU2VydmljZWAgaW1wb3J0IHRoZW0gZnJvbSBoZXJlIGluc3RlYWQgb2YgcmUtcmVhZGluZyB0aGUgZW52ICh3aGljaCBkcmlmdGVkKS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9QQUdFX0xJTUlUID0gZW52SW50KCdNQVhfUEFHRV9MSU1JVCcsIDEwMDAsIHsgbWluOiAxIH0pO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUEFHRV9MSU1JVCA9IGVudkludCgnREVGQVVMVF9QQUdFX0xJTUlUJywgMTAwLCB7IG1pbjogMSB9KTtcbi8qKiBDZWlsaW5nIG9uIG9mZnNldC1iYXNlZCBwYWdpbmcg4oCUIGJleW9uZCB0aGlzLCBkZWVwIHBhZ2luZyBtdXN0IHVzZSB0aGUgY3Vyc29yIEFQSVxuICogIChhbiB1bmJvdW5kZWQgb2Zmc2V0IGlzIGEgc2Nhbi1hbmQtZGlzY2FyZCBEb1MgYW1wbGlmaWVyIG9uIGhvdCBsaXN0IHJvdXRlcykuICovXG5leHBvcnQgY29uc3QgTUFYX1BBR0VfT0ZGU0VUID0gZW52SW50KCdNQVhfUEFHRV9PRkZTRVQnLCAxMDAwMDAsIHsgbWluOiAwIH0pO1xuXG4vKipcbiAqIEJvb2xlYW4gcXVlcnkgcGFyYW1ldGVyIHNjaGVtYVxuICogSGFuZGxlcyBzdHJpbmcgXCJ0cnVlXCIvXCJmYWxzZVwiIGFuZCBib29sZWFuIHZhbHVlc1xuICovXG5leHBvcnQgY29uc3QgQm9vbGVhblF1ZXJ5U2NoZW1hID0gei51bmlvbihbXG4gIHouYm9vbGVhbigpLFxuICB6LmVudW0oWyd0cnVlJywgJ2ZhbHNlJ10pLnRyYW5zZm9ybSh2YWwgPT4gdmFsID09PSAndHJ1ZScpLFxuICB6LnN0cmluZygpLnRyYW5zZm9ybSh2YWwgPT4gdmFsID09PSAndHJ1ZScpLFxuXSk7XG5cbi8qKlxuICogVVVJRCBzY2hlbWEgd2l0aCB2YWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBVVUlEU2NoZW1hID0gei5zdHJpbmcoKS51dWlkKHtcbiAgbWVzc2FnZTogJ0ludmFsaWQgVVVJRCBmb3JtYXQnLFxufSk7XG5cbi8qKlxuICogT3B0aW9uYWwgVVVJRCBzY2hlbWEgKGZvciBwYXJ0aWFsIFVVSURzIG9yIHByZWZpeGVzKVxuICovXG5leHBvcnQgY29uc3QgVVVJRFByZWZpeFNjaGVtYSA9IHouc3RyaW5nKCkucmVnZXgoL15bMC05YS1mLV0rJC9pLCB7XG4gIG1lc3NhZ2U6ICdJbnZhbGlkIFVVSUQgcHJlZml4IGZvcm1hdCcsXG59KTtcblxuLyoqXG4gKiBCYXNlIGZpbHRlciBzY2hlbWEgZm9yIGVudGl0aWVzIHdpdGggY29tbW9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgQmFzZUZpbHRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHoudW5pb24oW1VVSURTY2hlbWEsIHouYXJyYXkoVVVJRFNjaGVtYSksIFVVSURQcmVmaXhTY2hlbWFdKS5vcHRpb25hbCgpLFxuICB2aXNpYmlsaXR5OiBWaXNpYmlsaXR5U2NoZW1hLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNEZWZhdWx0OiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIGZpbHRlcnMgKGFwcGxpZWQgb25seSBieSBlbnRpdGllcyB0aGF0IGNhcnJ5XG4gIC8vIG93bmVyL2xpZmVjeWNsZSBjb2x1bW5zIOKAlCBwaXBlbGluZXMgYW5kIHBsdWdpbnMpLlxuICBvd25lcklkOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBsaWZlY3ljbGU6IExpZmVjeWNsZVNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG4iXX0=
@@ -0,0 +1,26 @@
1
+ /** What the plugin's Dockerfile itself declares for its final image. */
2
+ export interface DockerfileFacts {
3
+ /** The final image's own labels (later instructions win). */
4
+ labels: Record<string, string>;
5
+ /** The final image's own `USER`, or null when the Dockerfile sets none. */
6
+ finalUser: string | null;
7
+ /**
8
+ * The external image the final stage is ultimately built `FROM` (following
9
+ * stage aliases), as written; null when there is no `FROM`, it is `scratch`,
10
+ * or it depends on a build argument (`$`), which isn't known statically.
11
+ */
12
+ baseImage: string | null;
13
+ }
14
+ /** The `key → value` pairs of one `LABEL` instruction's arguments. */
15
+ export declare function parseLabelArgs(args: string): Array<[string, string]>;
16
+ /** Parse what `content` declares for its final image. Never throws. */
17
+ export declare function parseDockerfile(content: string | null | undefined): DockerfileFacts;
18
+ /** The OCI annotation keys the catalog reads. */
19
+ export declare const OCI_LABELS: {
20
+ readonly title: 'org.opencontainers.image.title';
21
+ readonly description: 'org.opencontainers.image.description';
22
+ readonly licenses: 'org.opencontainers.image.licenses';
23
+ readonly url: 'org.opencontainers.image.url';
24
+ readonly source: 'org.opencontainers.image.source';
25
+ readonly documentation: 'org.opencontainers.image.documentation';
26
+ };