@pipeline-builder/api-core 4.1.13 → 4.1.15
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.
- package/README.md +3 -2
- package/lib/constants/index.d.ts +0 -1
- package/lib/constants/index.js +1 -2
- package/lib/errors/app-errors.d.ts +8 -3
- package/lib/errors/app-errors.js +10 -5
- package/lib/helpers/access-helpers.d.ts +4 -6
- package/lib/helpers/access-helpers.js +6 -8
- package/lib/helpers/index.d.ts +3 -3
- package/lib/helpers/index.js +4 -4
- package/lib/helpers/org-hierarchy-http.d.ts +11 -10
- package/lib/helpers/org-hierarchy-http.js +24 -35
- package/lib/helpers/org-hierarchy.d.ts +37 -3
- package/lib/helpers/org-hierarchy.js +45 -4
- package/lib/helpers/restore-helpers.d.ts +44 -24
- package/lib/helpers/restore-helpers.js +41 -52
- package/lib/helpers/sse-helpers.d.ts +29 -7
- package/lib/helpers/sse-helpers.js +36 -9
- package/lib/index.d.ts +16 -14
- package/lib/index.js +17 -15
- package/lib/middleware/assurance.d.ts +116 -0
- package/lib/middleware/assurance.js +176 -0
- package/lib/middleware/auth.d.ts +5 -427
- package/lib/middleware/auth.js +36 -789
- package/lib/middleware/ecosystem-guard.d.ts +47 -0
- package/lib/middleware/ecosystem-guard.js +60 -0
- package/lib/middleware/index.d.ts +11 -4
- package/lib/middleware/index.js +12 -5
- package/lib/middleware/jwt-verify.d.ts +52 -0
- package/lib/middleware/jwt-verify.js +105 -0
- package/lib/middleware/permission-gates.d.ts +133 -0
- package/lib/middleware/permission-gates.js +260 -0
- package/lib/middleware/revocation.d.ts +96 -0
- package/lib/middleware/revocation.js +162 -0
- package/lib/middleware/route-table.d.ts +11 -0
- package/lib/middleware/route-table.js +4 -1
- package/lib/middleware/service-tokens.d.ts +83 -0
- package/lib/middleware/service-tokens.js +158 -0
- package/lib/middleware/step-up.d.ts +2 -2
- package/lib/middleware/step-up.js +8 -7
- package/lib/middleware/system-org.d.ts +20 -0
- package/lib/middleware/system-org.js +25 -0
- package/lib/openapi/routes/plugin-routes.js +133 -10
- package/lib/openapi/schema-registry.js +2 -5
- package/lib/routes/index.d.ts +1 -1
- package/lib/routes/index.js +2 -2
- package/lib/services/api-key-exchange.js +7 -5
- package/lib/services/audit-spool.d.ts +34 -10
- package/lib/services/audit-spool.js +75 -34
- package/lib/services/cache-service.d.ts +7 -0
- package/lib/services/cache-service.js +1 -1
- package/lib/services/circuit-breaker.d.ts +14 -1
- package/lib/services/circuit-breaker.js +36 -10
- package/lib/services/compliance-client.d.ts +10 -2
- package/lib/services/compliance-client.js +17 -10
- package/lib/services/compliance-event-subscriber.js +6 -6
- package/lib/services/durable-event-bus.js +8 -11
- package/lib/services/ecosystem-notify-client.d.ts +32 -0
- package/lib/services/ecosystem-notify-client.js +71 -0
- package/lib/services/env-redis.d.ts +4 -1
- package/lib/services/env-redis.js +32 -3
- package/lib/services/http-client.d.ts +19 -0
- package/lib/services/http-client.js +98 -19
- package/lib/services/index.d.ts +25 -24
- package/lib/services/index.js +25 -22
- package/lib/services/jwks-cache.js +5 -4
- package/lib/services/leader-lock.d.ts +22 -5
- package/lib/services/leader-lock.js +61 -6
- package/lib/services/quota.d.ts +9 -4
- package/lib/services/quota.js +34 -40
- package/lib/services/remote-audit-client.d.ts +28 -32
- package/lib/services/remote-audit-client.js +166 -49
- package/lib/services/retry-forever.js +5 -11
- package/lib/services/retry-strategy.d.ts +1 -1
- package/lib/services/retry-strategy.js +5 -4
- package/lib/services/scheduler.d.ts +8 -3
- package/lib/services/scheduler.js +17 -5
- package/lib/services/service-boot.d.ts +14 -13
- package/lib/services/service-boot.js +18 -15
- package/lib/services/service-keys.d.ts +1 -1
- package/lib/services/service-keys.js +12 -18
- package/lib/services/sse-ticket-store.d.ts +9 -1
- package/lib/services/sse-ticket-store.js +24 -9
- package/lib/services/system-notification.d.ts +27 -0
- package/lib/services/system-notification.js +50 -0
- package/lib/services/token-revocation.d.ts +50 -1
- package/lib/services/token-revocation.js +103 -3
- package/lib/types/audit-events.d.ts +6 -6
- package/lib/types/audit-events.js +1 -1
- package/lib/types/common.d.ts +32 -13
- package/lib/types/common.js +2 -1
- package/lib/types/ecosystem-notifications.d.ts +142 -0
- package/lib/types/ecosystem-notifications.js +210 -0
- package/lib/types/ecosystem.d.ts +77 -0
- package/lib/types/ecosystem.js +119 -0
- package/lib/types/error-codes.d.ts +81 -0
- package/lib/types/error-codes.js +108 -1
- package/lib/types/feature-flags.d.ts +21 -1
- package/lib/types/feature-flags.js +36 -2
- package/lib/types/index.d.ts +14 -9
- package/lib/types/index.js +15 -10
- package/lib/types/permissions.d.ts +46 -8
- package/lib/types/permissions.js +75 -12
- package/lib/types/plugin-catalog.d.ts +35 -0
- package/lib/types/plugin-catalog.js +39 -0
- package/lib/types/plugin-health.d.ts +102 -0
- package/lib/types/plugin-health.js +184 -0
- package/lib/types/quota-tiers.d.ts +15 -0
- package/lib/types/quota-tiers.js +23 -3
- package/lib/types/wire-vocabulary.d.ts +102 -0
- package/lib/types/wire-vocabulary.js +94 -0
- package/lib/utils/alias-resolver.js +2 -2
- package/lib/utils/audit.d.ts +5 -2
- package/lib/utils/audit.js +6 -3
- package/lib/utils/compliance-attributes.js +3 -4
- package/lib/utils/concurrency.d.ts +7 -0
- package/lib/utils/concurrency.js +13 -1
- package/lib/utils/env.d.ts +3 -4
- package/lib/utils/env.js +4 -5
- package/lib/utils/identity.d.ts +13 -4
- package/lib/utils/identity.js +18 -10
- package/lib/utils/index.d.ts +13 -10
- package/lib/utils/index.js +13 -10
- package/lib/utils/jwk.d.ts +4 -0
- package/lib/utils/jwk.js +13 -1
- package/lib/utils/logger.d.ts +1 -1
- package/lib/utils/logger.js +1 -1
- package/lib/utils/object.d.ts +11 -0
- package/lib/utils/object.js +24 -1
- package/lib/utils/params.d.ts +8 -22
- package/lib/utils/params.js +15 -43
- package/lib/utils/plugin-compliance.d.ts +98 -0
- package/lib/utils/plugin-compliance.js +78 -0
- package/lib/utils/proof-of-work.d.ts +69 -0
- package/lib/utils/proof-of-work.js +139 -0
- package/lib/utils/response.d.ts +16 -6
- package/lib/utils/response.js +18 -15
- package/lib/utils/retention.d.ts +17 -0
- package/lib/utils/retention.js +30 -0
- package/lib/utils/secret-encryption.d.ts +7 -7
- package/lib/utils/secret-encryption.js +9 -10
- package/lib/utils/secret-rotation.js +2 -2
- package/lib/utils/sensitive-patterns.js +4 -5
- package/lib/utils/service-registry.d.ts +15 -0
- package/lib/utils/service-registry.js +24 -0
- package/lib/utils/ssrf.d.ts +11 -2
- package/lib/utils/ssrf.js +112 -33
- package/lib/validation/ai-schemas.js +3 -2
- package/lib/validation/common-schemas.d.ts +0 -9
- package/lib/validation/common-schemas.js +1 -7
- package/lib/validation/dockerfile-static.d.ts +26 -0
- package/lib/validation/dockerfile-static.js +210 -0
- package/lib/validation/index.d.ts +13 -4
- package/lib/validation/index.js +14 -5
- package/lib/validation/message-schemas.js +6 -4
- package/lib/validation/pipeline-schemas.d.ts +8 -2
- package/lib/validation/pipeline-schemas.js +30 -4
- package/lib/validation/plugin-base-images.d.ts +20 -0
- package/lib/validation/plugin-base-images.js +17 -0
- package/lib/validation/plugin-catalog-detect.d.ts +86 -0
- package/lib/validation/plugin-catalog-detect.js +237 -0
- package/lib/validation/plugin-catalog-metadata.d.ts +141 -0
- package/lib/validation/plugin-catalog-metadata.js +162 -0
- package/lib/validation/plugin-heuristics.d.ts +41 -0
- package/lib/validation/plugin-heuristics.js +211 -0
- package/lib/validation/plugin-lint.d.ts +18 -0
- package/lib/validation/plugin-lint.js +136 -0
- package/lib/validation/plugin-name-confusable.d.ts +15 -0
- package/lib/validation/plugin-name-confusable.js +81 -0
- package/lib/validation/plugin-schemas.d.ts +40 -26
- package/lib/validation/plugin-schemas.js +26 -23
- package/lib/validation/plugin-spec-schema.d.ts +112 -0
- package/lib/validation/plugin-spec-schema.js +163 -0
- package/lib/validation/plugin-template-contract.d.ts +64 -0
- package/lib/validation/plugin-template-contract.js +113 -0
- package/package.json +69 -4
- package/lib/testing/mock-api-core.d.ts +0 -150
- package/lib/testing/mock-api-core.js +0 -246
- package/lib/testing/mock-drizzle.d.ts +0 -6
- package/lib/testing/mock-drizzle.js +0 -57
- package/lib/testing/route-coverage.d.ts +0 -64
- package/lib/testing/route-coverage.js +0 -183
- package/lib/testing/service-tokens.d.ts +0 -66
- package/lib/testing/service-tokens.js +0 -137
- package/lib/testing/tier-mock.d.ts +0 -44
- package/lib/testing/tier-mock.js +0 -65
- package/lib/testing/user-tokens.d.ts +0 -75
- 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
|
|
33
|
-
*
|
|
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
|
|
38
|
-
if (v4)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
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,
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLDJFQUEyRTtBQUMzRSxPQUFPLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsd0VBQXdFO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFckQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDeEQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNqQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7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QyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzNFLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUN2QyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3hDLHdFQUF3RTtJQUN4RSxvREFBb0Q7SUFDcEQsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3JDLFNBQVMsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFO0NBQ3RDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vLyBNdXN0IHJ1biBiZWZvcmUgYW55IHouKiBzY2hlbWEgY3JlYXRpb24g4oCUIFpvZCA0IHJlcXVpcmVzIGVhZ2VyIGV4dGVuc2lvblxuaW1wb3J0ICcuLi9vcGVuYXBpL2V4dGVuZC16b2QuanMnO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBDUklUSUNBTElUWV9MRVZFTFMsIExJRkVDWUNMRV9TVEFHRVMsIE9XTkVSX1RZUEVTIH0gZnJvbSAnLi4vdHlwZXMvY2F0YWxvZy1tZXRhZGF0YS5qcyc7XG5pbXBvcnQgeyBWSVNJQklMSVRJRVMgfSBmcm9tICcuLi90eXBlcy92aXNpYmlsaXR5LmpzJztcbmltcG9ydCB7IGVudkludCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5cbi8qKiBUaGUgc2hhcmVkIHRocmVlLXJ1bmcgc2hhcmluZyBsYWRkZXIg4oCUIHNlZSB0aGUgYFZpc2liaWxpdHlgIHR5cGUuICovXG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eVNjaGVtYSA9IHouZW51bShWSVNJQklMSVRJRVMpO1xuXG4vKipcbiAqIERldmVsb3Blci1wb3J0YWwgY2F0YWxvZy1tZXRhZGF0YSBzY2hlbWFzIOKAlCBzaGFyZWQgYnkgcGlwZWxpbmUgYW5kIHBsdWdpblxuICogY3JlYXRlL3VwZGF0ZSBib2RpZXMgKGFuZCB0aGUgZmlsdGVyIHNjaGVtYSBiZWxvdykuIE1pcnJvciB0aGUgc2hhcmVkIHR5cGVzXG4gKiBpbiBgdHlwZXMvY2F0YWxvZy1tZXRhZGF0YS50c2AuXG4gKi9cbmV4cG9ydCBjb25zdCBMaWZlY3ljbGVTY2hlbWEgPSB6LmVudW0oTElGRUNZQ0xFX1NUQUdFUyk7XG5leHBvcnQgY29uc3QgQ3JpdGljYWxpdHlTY2hlbWEgPSB6LmVudW0oQ1JJVElDQUxJVFlfTEVWRUxTKTtcbmV4cG9ydCBjb25zdCBPd25lclR5cGVTY2hlbWEgPSB6LmVudW0oT1dORVJfVFlQRVMpO1xuXG5leHBvcnQgY29uc3QgRW50aXR5TGlua1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgdGl0bGU6IHouc3RyaW5nKCkubWluKDEpLm1heCgxMjApLFxuICB1cmw6IHouc3RyaW5nKCkudXJsKCkubWF4KDIwNDgpLFxuICBpY29uOiB6LnN0cmluZygpLm1heCg0MCkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKiogVHlwZWQgY2xhc3NpZmljYXRpb24gbGFiZWxzOiBgeyB0ZWFtOiAncGF5bWVudHMnLCB0aWVyOiAnZ29sZCcgfWAuICovXG5leHBvcnQgY29uc3QgRW50aXR5TGFiZWxzU2NoZW1hID0gei5yZWNvcmQoei5zdHJpbmcoKS5taW4oMSkubWF4KDYzKSwgei5zdHJpbmcoKS5tYXgoMjU1KSk7XG5cbi8qKlxuICogQ2F0YWxvZy1tZXRhZGF0YSBmaWVsZHMgY29tbW9uIHRvIGNhdGFsb2cgZW50aXRpZXMuIFNwcmVhZCBpbnRvIGNyZWF0ZS91cGRhdGVcbiAqIGJvZHkgc2NoZW1hcyBzbyBwaXBlbGluZXMgYW5kIHBsdWdpbnMgYWNjZXB0IGlkZW50aWNhbCBvd25lcnNoaXAvbGlmZWN5Y2xlL1xuICogY2xhc3NpZmljYXRpb24gaW5wdXQuIEFsbCBvcHRpb25hbCDigJQgb3duZXIgZGVmYXVsdHMgdG8gdGhlIGNyZWF0b3Igc2VydmVyLXNpZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBDYXRhbG9nTWV0YWRhdGFTaGFwZSA9IHtcbiAgb3duZXJJZDogei5zdHJpbmcoKS5taW4oMSkubWF4KDI1NSkub3B0aW9uYWwoKSxcbiAgb3duZXJUeXBlOiBPd25lclR5cGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgbGlmZWN5Y2xlOiBMaWZlY3ljbGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgY3JpdGljYWxpdHk6IENyaXRpY2FsaXR5U2NoZW1hLm9wdGlvbmFsKCksXG4gIGxhYmVsczogRW50aXR5TGFiZWxzU2NoZW1hLm9wdGlvbmFsKCksXG4gIGxpbmtzOiB6LmFycmF5KEVudGl0eUxpbmtTY2hlbWEpLm1heCg1MCkub3B0aW9uYWwoKSxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogU29ydCBvcmRlciBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IFNvcnRPcmRlclNjaGVtYSA9IHouZW51bShbJ2FzYycsICdkZXNjJ10pO1xuXG4vKipcbiAqIFBhZ2luYXRpb24gcGFyYW1ldGVycyBzY2hlbWEuXG4gKlxuICogYE1BWF9QQUdFX0xJTUlUYCAvIGBERUZBVUxUX1BBR0VfTElNSVRgIGFyZSB0aGUgU0lOR0xFIHNvdXJjZSBmb3IgdGhlc2UgdmFsdWVzXG4gKiBhY3Jvc3MgdGhlIG1vbm9yZXBvIOKAlCBwaXBlbGluZS1jb3JlJ3MgYENvcmVDb25zdGFudHNgIGFuZCBwaXBlbGluZS1kYXRhJ3NcbiAqIGBDcnVkU2VydmljZWAgaW1wb3J0IHRoZW0gZnJvbSBoZXJlIGluc3RlYWQgb2YgcmUtcmVhZGluZyB0aGUgZW52ICh3aGljaCBkcmlmdGVkKS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9QQUdFX0xJTUlUID0gZW52SW50KCdNQVhfUEFHRV9MSU1JVCcsIDEwMDAsIHsgbWluOiAxIH0pO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUEFHRV9MSU1JVCA9IGVudkludCgnREVGQVVMVF9QQUdFX0xJTUlUJywgMTAwLCB7IG1pbjogMSB9KTtcbi8qKiBDZWlsaW5nIG9uIG9mZnNldC1iYXNlZCBwYWdpbmcg4oCUIGJleW9uZCB0aGlzLCBkZWVwIHBhZ2luZyBtdXN0IHVzZSB0aGUgY3Vyc29yIEFQSVxuICogIChhbiB1bmJvdW5kZWQgb2Zmc2V0IGlzIGEgc2Nhbi1hbmQtZGlzY2FyZCBEb1MgYW1wbGlmaWVyIG9uIGhvdCBsaXN0IHJvdXRlcykuICovXG5leHBvcnQgY29uc3QgTUFYX1BBR0VfT0ZGU0VUID0gZW52SW50KCdNQVhfUEFHRV9PRkZTRVQnLCAxMDAwMDAsIHsgbWluOiAwIH0pO1xuXG4vKipcbiAqIEJvb2xlYW4gcXVlcnkgcGFyYW1ldGVyIHNjaGVtYVxuICogSGFuZGxlcyBzdHJpbmcgXCJ0cnVlXCIvXCJmYWxzZVwiIGFuZCBib29sZWFuIHZhbHVlc1xuICovXG5leHBvcnQgY29uc3QgQm9vbGVhblF1ZXJ5U2NoZW1hID0gei51bmlvbihbXG4gIHouYm9vbGVhbigpLFxuICB6LmVudW0oWyd0cnVlJywgJ2ZhbHNlJ10pLnRyYW5zZm9ybSh2YWwgPT4gdmFsID09PSAndHJ1ZScpLFxuICB6LnN0cmluZygpLnRyYW5zZm9ybSh2YWwgPT4gdmFsID09PSAndHJ1ZScpLFxuXSk7XG5cbi8qKlxuICogVVVJRCBzY2hlbWEgd2l0aCB2YWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBVVUlEU2NoZW1hID0gei5zdHJpbmcoKS51dWlkKHtcbiAgbWVzc2FnZTogJ0ludmFsaWQgVVVJRCBmb3JtYXQnLFxufSk7XG5cbi8qKlxuICogT3B0aW9uYWwgVVVJRCBzY2hlbWEgKGZvciBwYXJ0aWFsIFVVSURzIG9yIHByZWZpeGVzKVxuICovXG5leHBvcnQgY29uc3QgVVVJRFByZWZpeFNjaGVtYSA9IHouc3RyaW5nKCkucmVnZXgoL15bMC05YS1mLV0rJC9pLCB7XG4gIG1lc3NhZ2U6ICdJbnZhbGlkIFVVSUQgcHJlZml4IGZvcm1hdCcsXG59KTtcblxuLyoqXG4gKiBCYXNlIGZpbHRlciBzY2hlbWEgZm9yIGVudGl0aWVzIHdpdGggY29tbW9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgQmFzZUZpbHRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHoudW5pb24oW1VVSURTY2hlbWEsIHouYXJyYXkoVVVJRFNjaGVtYSksIFVVSURQcmVmaXhTY2hlbWFdKS5vcHRpb25hbCgpLFxuICB2aXNpYmlsaXR5OiBWaXNpYmlsaXR5U2NoZW1hLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNEZWZhdWx0OiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIGZpbHRlcnMgKGFwcGxpZWQgb25seSBieSBlbnRpdGllcyB0aGF0IGNhcnJ5XG4gIC8vIG93bmVyL2xpZmVjeWNsZSBjb2x1bW5zIOKAlCBwaXBlbGluZXMgYW5kIHBsdWdpbnMpLlxuICBvd25lcklkOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBsaWZlY3ljbGU6IExpZmVjeWNsZVNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG4iXX0=
|
|
@@ -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
|
+
};
|