@pipeline-builder/api-core 5.0.8 → 5.0.10

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.
@@ -12,6 +12,7 @@
12
12
  * count fixable Critical findings only, because an unfixable one can't be
13
13
  * acted on by rebuilding or upgrading.
14
14
  */
15
+ import { SYSTEM_ORG_ID } from '../middleware/system-org.js';
15
16
  import { envBool, envInt } from '../utils/env.js';
16
17
  /** Findings a flag / gate message carries. */
17
18
  export const SCAN_FLAG_TOP_FINDINGS = 10;
@@ -25,6 +26,102 @@ export const VULN_FLAGGED_WARNING = 'VULN_FLAGGED';
25
26
  export function pluginVulnMaxCritical() {
26
27
  return envInt('PLUGIN_VULN_MAX_CRITICAL', 0, { min: -1 });
27
28
  }
29
+ /**
30
+ * Parse `PLUGIN_VULN_WAIVERS`, REPORTING what was dropped.
31
+ *
32
+ * Dropping a malformed entry is the safe direction — a typo must not become a
33
+ * wildcard — but silently dropping it is a usability trap: the operator sets a
34
+ * waiver, the gate keeps blocking, and nothing anywhere says why. Callers that
35
+ * can surface it (service boot) use this; `parseVulnWaivers` is the shorthand
36
+ * for the ones that cannot.
37
+ *
38
+ * Entry grammar: `<plugin>[@<version>]:<YYYY-MM-DD>:<pkg>[,<pkg>…]`
39
+ */
40
+ export function parseVulnWaiversVerbose(raw = process.env.PLUGIN_VULN_WAIVERS) {
41
+ const waivers = [];
42
+ const problems = [];
43
+ if (!raw?.trim())
44
+ return { waivers, problems };
45
+ const reject = (entry, reason) => { problems.push({ entry: entry.trim(), reason }); };
46
+ for (const entry of raw.split(';')) {
47
+ if (!entry.trim())
48
+ continue;
49
+ const [target, expires, packages] = entry.split(':').map((f) => f?.trim() ?? '');
50
+ // Every field is REQUIRED. An entry missing its package list would
51
+ // otherwise read as "waive this plugin entirely", which is the one thing
52
+ // this must not be able to express.
53
+ if (!target || !expires || !packages) {
54
+ reject(entry, 'expected <plugin>[@<version>]:<YYYY-MM-DD>:<package>[,<package>…]');
55
+ continue;
56
+ }
57
+ const at = target.indexOf('@');
58
+ const plugin = at === -1 ? target : target.slice(0, at).trim();
59
+ const version = at === -1 ? null : target.slice(at + 1).trim();
60
+ if (!plugin) {
61
+ reject(entry, 'no plugin name');
62
+ continue;
63
+ }
64
+ if (at !== -1 && !version) {
65
+ reject(entry, "'@' with no version — omit it to cover every version");
66
+ continue;
67
+ }
68
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(expires)) {
69
+ reject(entry, `expiry '${expires}' is not YYYY-MM-DD`);
70
+ continue;
71
+ }
72
+ const when = new Date(`${expires}T23:59:59.999Z`);
73
+ if (Number.isNaN(when.getTime())) {
74
+ reject(entry, `expiry '${expires}' is not a real date`);
75
+ continue;
76
+ }
77
+ const names = packages.split(',').map((n) => n.trim()).filter(Boolean);
78
+ if (names.length === 0) {
79
+ reject(entry, 'no package names');
80
+ continue;
81
+ }
82
+ waivers.push({ plugin, version, expires: when, packages: names });
83
+ }
84
+ return { waivers, problems };
85
+ }
86
+ /** Parse `PLUGIN_VULN_WAIVERS`. Malformed or incomplete entries are dropped. */
87
+ export function parseVulnWaivers(raw = process.env.PLUGIN_VULN_WAIVERS) {
88
+ return parseVulnWaiversVerbose(raw).waivers;
89
+ }
90
+ /**
91
+ * Split findings into what still counts and what an unexpired waiver exempts.
92
+ *
93
+ * Matching is on the package name a waiver names, case-insensitively, and only
94
+ * for findings that are FIXABLE — an unfixable finding never counted toward the
95
+ * floor, so "waiving" it would overstate what the waiver does.
96
+ */
97
+ export function applyVulnWaivers(pluginName, findings, waivers = parseVulnWaivers(), now = new Date(), orgId, pluginVersion) {
98
+ // SYSTEM ORG ONLY. Plugin names are unique per (name, version, orgId), NOT
99
+ // globally — any tenant can create a plugin called `artillery`. Matching on
100
+ // the name alone would hand every one of them the operator's exemption, so a
101
+ // tenant could inherit a waiver simply by choosing the name, and ship an
102
+ // image whose Criticals the gate then waved through. The waivers exist for the
103
+ // Official catalog the operator curates, which lives in the system org; a
104
+ // caller that cannot say which org this build belongs to gets no waiver.
105
+ if (orgId === undefined || orgId.toLowerCase() !== SYSTEM_ORG_ID)
106
+ return { counted: [...findings], waived: [] };
107
+ const active = waivers.filter((w) => w.plugin === pluginName
108
+ && w.expires.getTime() >= now.getTime()
109
+ // A version-pinned waiver covers that version only. An unpinned one covers
110
+ // every version, which is why the pin is worth writing.
111
+ && (w.version === null || w.version === pluginVersion));
112
+ if (active.length === 0)
113
+ return { counted: [...findings], waived: [] };
114
+ const exempt = new Set(active.flatMap((w) => w.packages.map((n) => n.toLowerCase())));
115
+ const counted = [];
116
+ const waived = [];
117
+ for (const f of findings) {
118
+ if (f.fixedIn.length > 0 && exempt.has(f.packageName.toLowerCase()))
119
+ waived.push(f);
120
+ else
121
+ counted.push(f);
122
+ }
123
+ return { counted, waived };
124
+ }
28
125
  /** Whether `fixableCritical` breaks the platform floor (never, when disabled). */
29
126
  export function exceedsVulnFloor(fixableCritical, max = pluginVulnMaxCritical()) {
30
127
  return max >= 0 && (fixableCritical ?? 0) > max;
@@ -87,4 +184,4 @@ export function asScanFlag(value) {
87
184
  findings: findings.map((f) => ({ ...f, fixedIn: Array.isArray(f.fixedIn) ? f.fixedIn : [] })),
88
185
  };
89
186
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNjYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcGx1Z2luLXNjYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7R0FXRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUF5RGxELDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFFekMsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGNBQWMsQ0FBQztBQUVuRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxPQUFPLE1BQU0sQ0FBQywwQkFBMEIsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLGVBQTBDLEVBQUUsR0FBRyxHQUFXLHFCQUFxQixFQUFFO0lBQ2hILE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxPQUFPLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELGtEQUFrRDtBQUNsRCxNQUFNLFVBQVUsV0FBVyxDQUFDLENBQXdFO0lBQ2xHLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDL0UsT0FBTyxD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Q0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFDLFFBQWdDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkksT0FBTztRQUNMLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtRQUNwQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7UUFDWixXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM5RixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBsdWdpbiBpbWFnZSBzY2FuIGdhdGVzIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kIFwiU2NhbiBnYXRlc1wiKTogdGhlIHNoYXJlZFxuICogdm9jYWJ1bGFyeSBvZiB0aGUgYnVpbGQtdGltZSBnYXRlLCB0aGUgbmlnaHRseSByZXNjYW4ncyBmbGFnLCBhbmQgdGhlXG4gKiByZXNvbHV0aW9uIHdhcm5pbmcgLyBibG9jayDigJQgdXNlZCBieSB0aGUgcGx1Z2luIHNlcnZpY2UgKHdoaWNoIHN0b3JlcyBhbmRcbiAqIGVuZm9yY2VzIHRoZW0pLCB0aGUgcmVzb2x2ZXIgaW4gcGlwZWxpbmUtZGF0YSAod2hpY2ggc2tpcHMgb3Igd2FybnMpLCBhbmQgdGhlXG4gKiBkYXNoYm9hcmQgKHdoaWNoIHNob3dzIHRoZW0pLlxuICpcbiAqIEEgZmluZGluZyBpcyBGSVhBQkxFIHdoZW4gZ3J5cGUgcmVwb3J0cyBhIGZpeGVkIHZlcnNpb24gZm9yIGl0XG4gKiAoYHZ1bG5lcmFiaWxpdHkuZml4LnN0YXRlID09IFwiZml4ZWRcImAgd2l0aCBhdCBsZWFzdCBvbmUgdmVyc2lvbik6IHRoZSBnYXRlc1xuICogY291bnQgZml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncyBvbmx5LCBiZWNhdXNlIGFuIHVuZml4YWJsZSBvbmUgY2FuJ3QgYmVcbiAqIGFjdGVkIG9uIGJ5IHJlYnVpbGRpbmcgb3IgdXBncmFkaW5nLlxuICovXG5cbmltcG9ydCB7IGVudkJvb2wsIGVudkludCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5cbi8qKiBPbmUgQ3JpdGljYWwvSGlnaCBmaW5kaW5nIGFzIHRoZSBmbGFnIGFuZCB0aGUgZ2F0ZSBtZXNzYWdlcyBjYXJyeSBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2NhbkZpbmRpbmcge1xuICAvKiogVGhlIHZ1bG5lcmFiaWxpdHkgaWQgKENWRS3igKYsIEdIU0Et4oCmKS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgc2V2ZXJpdHk6ICdjcml0aWNhbCcgfCAnaGlnaCc7XG4gIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBWZXJzaW9ucyB0aGF0IGZpeCBpdDsgZW1wdHkgPSBubyBmaXggYXZhaWxhYmxlIChub3QgZml4YWJsZSkuICovXG4gIGZpeGVkSW46IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIGBzY2FuX2ZsYWdgIG9uIGEgdmVyc2lvbiB0aGUgbmlnaHRseSByZXNjYW4gZmxhZ2dlZDogaXRzIGZpeGFibGVcbiAqIENyaXRpY2FsL0hpZ2ggY291bnRzIGF0IHRoYXQgcmVzY2FuIGFuZCB0aGUgdG9wIGZpeGFibGUgZmluZGluZ3MuIFNldCB3aGlsZVxuICogZml4YWJsZSBDcml0aWNhbHMgZXhjZWVkIGBQTFVHSU5fVlVMTl9NQVhfQ1JJVElDQUxgLCBjbGVhcmVkIHdoZW4gYSByZXNjYW5cbiAqIGZpbmRzIHRoZW0gcmVzb2x2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2NhbkZsYWcge1xuICAvKiogRml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncy4gKi9cbiAgY3JpdGljYWw6IG51bWJlcjtcbiAgLyoqIEZpeGFibGUgSGlnaCBmaW5kaW5ncy4gKi9cbiAgaGlnaDogbnVtYmVyO1xuICAvKiogVGhlIGZsb29yIGl0IHdhcyBjb21wYXJlZCBhZ2FpbnN0IChgUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMYCkuICovXG4gIG1heENyaXRpY2FsOiBudW1iZXI7XG4gIC8qKiBBdCBtb3N0IHtAbGluayBTQ0FOX0ZMQUdfVE9QX0ZJTkRJTkdTfSBmaXhhYmxlIGZpbmRpbmdzLCBDcml0aWNhbHMgZmlyc3QuICovXG4gIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xufVxuXG4vKipcbiAqIGBzY2FuX3N1bW1hcnlgIG9uIGV2ZXJ5IGluLXVzZSB2ZXJzaW9uOiB0aGUgTEFTVCByZXNjYW4ncyBmaW5kaW5ncywgd3JpdHRlblxuICogd2hldGhlciBvciBub3QgdGhlIGdhdGUgdHJpcHBlZC5cbiAqXG4gKiBEaXN0aW5jdCBmcm9tIHtAbGluayBQbHVnaW5TY2FuRmxhZ30sIHdoaWNoIGV4aXN0cyBvbmx5IHdoaWxlIGEgdmVyc2lvbiBpcyBvdmVyXG4gKiB0aGUgZmxvb3IuIEEgdmVyc2lvbiBjYXJyeWluZyBub3RoaW5nIGJ1dCBIaWdoIGZpbmRpbmdzIGlzIG5ldmVyIGZsYWdnZWQg4oCUIHNvIGFcbiAqIHJlcG9ydCB3aG9zZSBqb2IgaXMgdG8gc2hvdyBDcml0aWNhbCBBTkQgSGlnaCBleHBvc3VyZSBoYWQgbm8gc291cmNlIHRvIHJlYWQuXG4gKiBXaGF0IGEgcmVwb3J0IFNIT1dTIGFuZCB3aGF0IGEgYnVpbGQgUkVGVVNFUyBhcmUgZGlmZmVyZW50IHF1ZXN0aW9ucywgYW5kXG4gKiBjb25mbGF0aW5nIHRoZW0gbWVhbnQgdGhlIGFuc3dlciB0byB0aGUgZmlyc3Qgd2FzIFwibm90aGluZ1wiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNjYW5TdW1tYXJ5IHtcbiAgLyoqIEZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3MgYXQgdGhlIGxhc3QgcmVzY2FuLiAqL1xuICBjcml0aWNhbEZpeGFibGU6IG51bWJlcjtcbiAgLyoqIEZpeGFibGUgSGlnaCBmaW5kaW5ncyBhdCB0aGUgbGFzdCByZXNjYW4uICovXG4gIGhpZ2hGaXhhYmxlOiBudW1iZXI7XG4gIC8qKiBUb3RhbHMgaW5jbHVkaW5nIHVuZml4YWJsZSBmaW5kaW5ncywgZm9yIGNvbnRleHQuICovXG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgLyoqIEF0IG1vc3Qge0BsaW5rIFNDQU5fRkxBR19UT1BfRklORElOR1N9IGZpbmRpbmdzLCBDcml0aWNhbHMgZmlyc3QuICovXG4gIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xuICAvKiogV2hlbiB0aGUgcmVzY2FuIHRoYXQgcHJvZHVjZWQgdGhpcyByYW4gKElTTykuICovXG4gIHNjYW5uZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGltYWdlIHRoaXMgZGVzY3JpYmVzLiBBIHZlcnNpb24gcmVidWlsdCBvbiBhIHBhdGNoZWQgYmFzZSBpcyBhXG4gICAqICBkaWZmZXJlbnQgYXJ0aWZhY3QsIHNvIGEgc3VtbWFyeSB3aXRob3V0IGl0cyBkaWdlc3QgY2Fubm90IGJlIHRydXN0ZWQuICovXG4gIGltYWdlRGlnZXN0Pzogc3RyaW5nO1xufVxuXG4vKiogRmluZGluZ3MgYSBmbGFnIC8gZ2F0ZSBtZXNzYWdlIGNhcnJpZXMuICovXG5leHBvcnQgY29uc3QgU0NBTl9GTEFHX1RPUF9GSU5ESU5HUyA9IDEwO1xuXG4vKiogTG9va3VwIC8gcmVzb2x1dGlvbiB3YXJuaW5nIGNvZGUgZm9yIGEgZmxhZ2dlZCB2ZXJzaW9uLiAqL1xuZXhwb3J0IGNvbnN0IFZVTE5fRkxBR0dFRF9XQVJOSU5HID0gJ1ZVTE5fRkxBR0dFRCc7XG5cbi8qKlxuICogYFBMVUdJTl9WVUxOX01BWF9DUklUSUNBTGA6IHRoZSBwbGF0Zm9ybSBmbG9vciDigJQgYSB2ZXJzaW9uIHdpdGggTU9SRSBmaXhhYmxlXG4gKiBDcml0aWNhbCBmaW5kaW5ncyB0aGFuIHRoaXMgZmFpbHMgaXRzIGJ1aWxkIChgUExVR0lOX1ZVTE5fR0FURWApIGFuZCBpc1xuICogZmxhZ2dlZCBieSB0aGUgcmVzY2FuLiBEZWZhdWx0IGAwYDsgYC0xYCBkaXNhYmxlcyB0aGUgZmxvb3IgKGFuZCB0aGUgZmxhZykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVnaW5WdWxuTWF4Q3JpdGljYWwoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVudkludCgnUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMJywgMCwgeyBtaW46IC0xIH0pO1xufVxuXG4vKiogV2hldGhlciBgZml4YWJsZUNyaXRpY2FsYCBicmVha3MgdGhlIHBsYXRmb3JtIGZsb29yIChuZXZlciwgd2hlbiBkaXNhYmxlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gZXhjZWVkc1Z1bG5GbG9vcihmaXhhYmxlQ3JpdGljYWw6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIG1heDogbnVtYmVyID0gcGx1Z2luVnVsbk1heENyaXRpY2FsKCkpOiBib29sZWFuIHtcbiAgcmV0dXJuIG1heCA+PSAwICYmIChmaXhhYmxlQ3JpdGljYWwgPz8gMCkgPiBtYXg7XG59XG5cbi8qKlxuICogYFBMVUdJTl9CTE9DS19PTl9ORVdfQ1JJVElDQUxgIChkZWZhdWx0IGZhbHNlKTogcmVzb2x1dGlvbiBTS0lQUyBmbGFnZ2VkXG4gKiB2ZXJzaW9ucyBmb3IgcmFuZ2VzIGFuZCB0aGUgZGVmYXVsdCAoZmFsbGluZyBiYWNrIHRvIHRoZSBuZXdlc3QgdW5mbGFnZ2VkXG4gKiBvbmUpLCBhbmQgYW4gZXhhY3QgcGluIHRvIGEgZmxhZ2dlZCB2ZXJzaW9uIGlzIHJlZnVzZWQgNDA5XG4gKiBgUExVR0lOX1ZFUlNJT05fVlVMTl9CTE9DS0VEYC4gT2ZmOiBmbGFnZ2VkIHZlcnNpb25zIHJlc29sdmUgd2l0aCBhXG4gKiBgVlVMTl9GTEFHR0VEYCB3YXJuaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tPbk5ld0NyaXRpY2FsKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZW52Qm9vbCgnUExVR0lOX0JMT0NLX09OX05FV19DUklUSUNBTCcsIGZhbHNlKTtcbn1cblxuLyoqIGBwa2dAMS4yLjMg4oaSIDEuMi40YCAvIGBwa2dAMS4yLjMgKG5vIGZpeClgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlRml4KGY6IFBpY2s8UGx1Z2luU2NhbkZpbmRpbmcsICdwYWNrYWdlTmFtZScgfCAncGFja2FnZVZlcnNpb24nIHwgJ2ZpeGVkSW4nPik6IHN0cmluZyB7XG4gIGNvbnN0IGF0ID0gYCR7Zi5wYWNrYWdlTmFtZX0ke2YucGFja2FnZVZlcnNpb24gPyBgQCR7Zi5wYWNrYWdlVmVyc2lvbn1gIDogJyd9YDtcbiAgcmV0dXJuIGYuZml4ZWRJbi5sZW5ndGggPiAwID8gYCR7YXR9IOKGkiAke2YuZml4ZWRJbi5qb2luKCcsICcpfWAgOiBgJHthdH0gKG5vIGZpeClgO1xufVxuXG4vKiogYENWRS0xIChvcGVuc3NsQDMuMC4xIOKGkiAzLjAuMik7IENWRS0yICjigKYpYCBmb3IgdGhlIGZpcnN0IGBsaW1pdGAgZmluZGluZ3MuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVGaW5kaW5ncyhmaW5kaW5nczogcmVhZG9ubHkgUGx1Z2luU2NhbkZpbmRpbmdbXSwgbGltaXQgPSA1KTogc3RyaW5nIHtcbiAgY29uc3Qgc2hvd24gPSBmaW5kaW5ncy5zbGljZSgwLCBsaW1pdCkubWFwKChmKSA9PiBgJHtmLmlkfSAoJHtkZXNjcmliZUZpeChmKX0pYCkuam9pbignOyAnKTtcbiAgY29uc3QgbW9yZSA9IGZpbmRpbmdzLmxlbmd0aCA+IGxpbWl0ID8gYDsgKyR7ZmluZGluZ3MubGVuZ3RoIC0gbGltaXR9IG1vcmVgIDogJyc7XG4gIHJldHVybiBgJHtzaG93bn0ke21vcmV9YDtcbn1cblxuLyoqIFRoZSB3YXJuaW5nIHRleHQgZm9yIGEgZmxhZ2dlZCB2ZXJzaW9uOiBgeEB2IGhhcyBOIGZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3Mg4oCUIHJlYnVpbGQgb3IgdXBncmFkZWAuICovXG5leHBvcnQgZnVuY3Rpb24gdnVsbkZsYWdnZWRNZXNzYWdlKHJlZjogc3RyaW5nLCBmbGFnOiBQaWNrPFBsdWdpblNjYW5GbGFnLCAnY3JpdGljYWwnPik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtyZWZ9IGhhcyAke2ZsYWcuY3JpdGljYWx9IGZpeGFibGUgQ3JpdGljYWwgZmluZGluZyR7ZmxhZy5jcml0aWNhbCA9PT0gMSA/ICcnIDogJ3MnfSDigJQgcmVidWlsZCBvciB1cGdyYWRlYDtcbn1cblxuLyoqIEEgYFZVTE5fRkxBR0dFRGAgbG9va3VwIHdhcm5pbmcgKHRoZSBsb29rdXAgZW52ZWxvcGUncyBgd2FybmluZ3NbXWAgZW50cnkpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuRmxhZ2dlZFdhcm5pbmcge1xuICBjb2RlOiB0eXBlb2YgVlVMTl9GTEFHR0VEX1dBUk5JTkc7XG4gIHBsdWdpbjogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogVG9wIGZpeGFibGUgZmluZGluZ3Mgd2l0aCB0aGVpciBmaXhlZCB2ZXJzaW9ucy4gKi9cbiAgZmluZGluZ3M6IFBsdWdpblNjYW5GaW5kaW5nW107XG59XG5cbi8qKiBCdWlsZCB0aGUgYFZVTE5fRkxBR0dFRGAgd2FybmluZyBmb3IgYHBsdWdpbkB2ZXJzaW9uYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2dWxuRmxhZ2dlZFdhcm5pbmcocGx1Z2luOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgZmxhZzogUGx1Z2luU2NhbkZsYWcpOiBWdWxuRmxhZ2dlZFdhcm5pbmcge1xuICByZXR1cm4ge1xuICAgIGNvZGU6IFZVTE5fRkxBR0dFRF9XQVJOSU5HLFxuICAgIHBsdWdpbixcbiAgICB2ZXJzaW9uLFxuICAgIGNyaXRpY2FsOiBmbGFnLmNyaXRpY2FsLFxuICAgIGhpZ2g6IGZsYWcuaGlnaCxcbiAgICBtZXNzYWdlOiB2dWxuRmxhZ2dlZE1lc3NhZ2UoYCR7cGx1Z2lufUAke3ZlcnNpb259YCwgZmxhZyksXG4gICAgZmluZGluZ3M6IGZsYWcuZmluZGluZ3Muc2xpY2UoMCwgU0NBTl9GTEFHX1RPUF9GSU5ESU5HUyksXG4gIH07XG59XG5cbi8qKiBUaGUgNDA5IG1lc3NhZ2UgZm9yIGFuIGV4YWN0IHBpbiB0byBhIGZsYWdnZWQgdmVyc2lvbiB3aGlsZSBibG9ja2luZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2dWxuQmxvY2tlZE1lc3NhZ2UocGx1Z2luOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgZmxhZzogUGx1Z2luU2NhbkZsYWcpOiBzdHJpbmcge1xuICBjb25zdCBmaXhlcyA9IGZsYWcuZmluZGluZ3MubGVuZ3RoID4gMCA/IGAgRml4OiAke2Rlc2NyaWJlRmluZGluZ3MoZmxhZy5maW5kaW5ncyl9LmAgOiAnJztcbiAgcmV0dXJuIGAke3BsdWdpbn1AJHt2ZXJzaW9ufSBpcyBibG9ja2VkOiBhIHJlc2NhbiBmb3VuZCAke2ZsYWcuY3JpdGljYWx9IGZpeGFibGUgQ3JpdGljYWwgZmluZGluZyR7ZmxhZy5jcml0aWNhbCA9PT0gMSA/ICcnIDogJ3MnfSBgXG4gICAgKyBgKFBMVUdJTl9CTE9DS19PTl9ORVdfQ1JJVElDQUwpLiBSZWJ1aWxkIGl0IG9uIHBhdGNoZWQgcGFja2FnZXMgb3IgbW92ZSB0byBhIG5ld2VyIHZlcnNpb24uJHtmaXhlc31gO1xufVxuXG4vKiogTmFycm93IGFuIHVua25vd24gYHNjYW5fZmxhZ2AganNvbmIgdmFsdWUuICovXG5leHBvcnQgZnVuY3Rpb24gYXNTY2FuRmxhZyh2YWx1ZTogdW5rbm93bik6IFBsdWdpblNjYW5GbGFnIHwgbnVsbCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiB2LmNyaXRpY2FsICE9PSAnbnVtYmVyJyB8fCB0eXBlb2Ygdi5oaWdoICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGZpbmRpbmdzID0gQXJyYXkuaXNBcnJheSh2LmZpbmRpbmdzKSA/ICh2LmZpbmRpbmdzIGFzIFBsdWdpblNjYW5GaW5kaW5nW10pLmZpbHRlcigoZikgPT4gZiAmJiB0eXBlb2YgZi5pZCA9PT0gJ3N0cmluZycpIDogW107XG4gIHJldHVybiB7XG4gICAgY3JpdGljYWw6IHYuY3JpdGljYWwsXG4gICAgaGlnaDogdi5oaWdoLFxuICAgIG1heENyaXRpY2FsOiB0eXBlb2Ygdi5tYXhDcml0aWNhbCA9PT0gJ251bWJlcicgPyB2Lm1heENyaXRpY2FsIDogMCxcbiAgICBmaW5kaW5nczogZmluZGluZ3MubWFwKChmKSA9PiAoeyAuLi5mLCBmaXhlZEluOiBBcnJheS5pc0FycmF5KGYuZml4ZWRJbikgPyBmLmZpeGVkSW4gOiBbXSB9KSksXG4gIH07XG59XG4iXX0=
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNjYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcGx1Z2luLXNjYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7R0FXRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBeURsRCw4Q0FBOEM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBRXpDLDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxjQUFjLENBQUM7QUFFbkQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsT0FBTyxNQUFNLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBbUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsR0FBRyxHQUF1QixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtJQUMvRixNQUFNLE9BQU8sR0FBaUIsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUF3QixFQUFFLENBQUM7SUFDekMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7UUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQy9DLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0RyxLQUFLLE1BQU0sS0FB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LE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25JLE9BQU87UUFDTCxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7UUFDcEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1FBQ1osV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDOUYsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQbHVnaW4gaW1hZ2Ugc2NhbiBnYXRlcyAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCBcIlNjYW4gZ2F0ZXNcIik6IHRoZSBzaGFyZWRcbiAqIHZvY2FidWxhcnkgb2YgdGhlIGJ1aWxkLXRpbWUgZ2F0ZSwgdGhlIG5pZ2h0bHkgcmVzY2FuJ3MgZmxhZywgYW5kIHRoZVxuICogcmVzb2x1dGlvbiB3YXJuaW5nIC8gYmxvY2sg4oCUIHVzZWQgYnkgdGhlIHBsdWdpbiBzZXJ2aWNlICh3aGljaCBzdG9yZXMgYW5kXG4gKiBlbmZvcmNlcyB0aGVtKSwgdGhlIHJlc29sdmVyIGluIHBpcGVsaW5lLWRhdGEgKHdoaWNoIHNraXBzIG9yIHdhcm5zKSwgYW5kIHRoZVxuICogZGFzaGJvYXJkICh3aGljaCBzaG93cyB0aGVtKS5cbiAqXG4gKiBBIGZpbmRpbmcgaXMgRklYQUJMRSB3aGVuIGdyeXBlIHJlcG9ydHMgYSBmaXhlZCB2ZXJzaW9uIGZvciBpdFxuICogKGB2dWxuZXJhYmlsaXR5LmZpeC5zdGF0ZSA9PSBcImZpeGVkXCJgIHdpdGggYXQgbGVhc3Qgb25lIHZlcnNpb24pOiB0aGUgZ2F0ZXNcbiAqIGNvdW50IGZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3Mgb25seSwgYmVjYXVzZSBhbiB1bmZpeGFibGUgb25lIGNhbid0IGJlXG4gKiBhY3RlZCBvbiBieSByZWJ1aWxkaW5nIG9yIHVwZ3JhZGluZy5cbiAqL1xuXG5pbXBvcnQgeyBTWVNURU1fT1JHX0lEIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zeXN0ZW0tb3JnLmpzJztcbmltcG9ydCB7IGVudkJvb2wsIGVudkludCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5cbi8qKiBPbmUgQ3JpdGljYWwvSGlnaCBmaW5kaW5nIGFzIHRoZSBmbGFnIGFuZCB0aGUgZ2F0ZSBtZXNzYWdlcyBjYXJyeSBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2NhbkZpbmRpbmcge1xuICAvKiogVGhlIHZ1bG5lcmFiaWxpdHkgaWQgKENWRS3igKYsIEdIU0Et4oCmKS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgc2V2ZXJpdHk6ICdjcml0aWNhbCcgfCAnaGlnaCc7XG4gIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBWZXJzaW9ucyB0aGF0IGZpeCBpdDsgZW1wdHkgPSBubyBmaXggYXZhaWxhYmxlIChub3QgZml4YWJsZSkuICovXG4gIGZpeGVkSW46IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIGBzY2FuX2ZsYWdgIG9uIGEgdmVyc2lvbiB0aGUgbmlnaHRseSByZXNjYW4gZmxhZ2dlZDogaXRzIGZpeGFibGVcbiAqIENyaXRpY2FsL0hpZ2ggY291bnRzIGF0IHRoYXQgcmVzY2FuIGFuZCB0aGUgdG9wIGZpeGFibGUgZmluZGluZ3MuIFNldCB3aGlsZVxuICogZml4YWJsZSBDcml0aWNhbHMgZXhjZWVkIGBQTFVHSU5fVlVMTl9NQVhfQ1JJVElDQUxgLCBjbGVhcmVkIHdoZW4gYSByZXNjYW5cbiAqIGZpbmRzIHRoZW0gcmVzb2x2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2NhbkZsYWcge1xuICAvKiogRml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncy4gKi9cbiAgY3JpdGljYWw6IG51bWJlcjtcbiAgLyoqIEZpeGFibGUgSGlnaCBmaW5kaW5ncy4gKi9cbiAgaGlnaDogbnVtYmVyO1xuICAvKiogVGhlIGZsb29yIGl0IHdhcyBjb21wYXJlZCBhZ2FpbnN0IChgUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMYCkuICovXG4gIG1heENyaXRpY2FsOiBudW1iZXI7XG4gIC8qKiBBdCBtb3N0IHtAbGluayBTQ0FOX0ZMQUdfVE9QX0ZJTkRJTkdTfSBmaXhhYmxlIGZpbmRpbmdzLCBDcml0aWNhbHMgZmlyc3QuICovXG4gIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xufVxuXG4vKipcbiAqIGBzY2FuX3N1bW1hcnlgIG9uIGV2ZXJ5IGluLXVzZSB2ZXJzaW9uOiB0aGUgTEFTVCByZXNjYW4ncyBmaW5kaW5ncywgd3JpdHRlblxuICogd2hldGhlciBvciBub3QgdGhlIGdhdGUgdHJpcHBlZC5cbiAqXG4gKiBEaXN0aW5jdCBmcm9tIHtAbGluayBQbHVnaW5TY2FuRmxhZ30sIHdoaWNoIGV4aXN0cyBvbmx5IHdoaWxlIGEgdmVyc2lvbiBpcyBvdmVyXG4gKiB0aGUgZmxvb3IuIEEgdmVyc2lvbiBjYXJyeWluZyBub3RoaW5nIGJ1dCBIaWdoIGZpbmRpbmdzIGlzIG5ldmVyIGZsYWdnZWQg4oCUIHNvIGFcbiAqIHJlcG9ydCB3aG9zZSBqb2IgaXMgdG8gc2hvdyBDcml0aWNhbCBBTkQgSGlnaCBleHBvc3VyZSBoYWQgbm8gc291cmNlIHRvIHJlYWQuXG4gKiBXaGF0IGEgcmVwb3J0IFNIT1dTIGFuZCB3aGF0IGEgYnVpbGQgUkVGVVNFUyBhcmUgZGlmZmVyZW50IHF1ZXN0aW9ucywgYW5kXG4gKiBjb25mbGF0aW5nIHRoZW0gbWVhbnQgdGhlIGFuc3dlciB0byB0aGUgZmlyc3Qgd2FzIFwibm90aGluZ1wiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNjYW5TdW1tYXJ5IHtcbiAgLyoqIEZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3MgYXQgdGhlIGxhc3QgcmVzY2FuLiAqL1xuICBjcml0aWNhbEZpeGFibGU6IG51bWJlcjtcbiAgLyoqIEZpeGFibGUgSGlnaCBmaW5kaW5ncyBhdCB0aGUgbGFzdCByZXNjYW4uICovXG4gIGhpZ2hGaXhhYmxlOiBudW1iZXI7XG4gIC8qKiBUb3RhbHMgaW5jbHVkaW5nIHVuZml4YWJsZSBmaW5kaW5ncywgZm9yIGNvbnRleHQuICovXG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgLyoqIEF0IG1vc3Qge0BsaW5rIFNDQU5fRkxBR19UT1BfRklORElOR1N9IGZpbmRpbmdzLCBDcml0aWNhbHMgZmlyc3QuICovXG4gIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xuICAvKiogV2hlbiB0aGUgcmVzY2FuIHRoYXQgcHJvZHVjZWQgdGhpcyByYW4gKElTTykuICovXG4gIHNjYW5uZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGltYWdlIHRoaXMgZGVzY3JpYmVzLiBBIHZlcnNpb24gcmVidWlsdCBvbiBhIHBhdGNoZWQgYmFzZSBpcyBhXG4gICAqICBkaWZmZXJlbnQgYXJ0aWZhY3QsIHNvIGEgc3VtbWFyeSB3aXRob3V0IGl0cyBkaWdlc3QgY2Fubm90IGJlIHRydXN0ZWQuICovXG4gIGltYWdlRGlnZXN0Pzogc3RyaW5nO1xufVxuXG4vKiogRmluZGluZ3MgYSBmbGFnIC8gZ2F0ZSBtZXNzYWdlIGNhcnJpZXMuICovXG5leHBvcnQgY29uc3QgU0NBTl9GTEFHX1RPUF9GSU5ESU5HUyA9IDEwO1xuXG4vKiogTG9va3VwIC8gcmVzb2x1dGlvbiB3YXJuaW5nIGNvZGUgZm9yIGEgZmxhZ2dlZCB2ZXJzaW9uLiAqL1xuZXhwb3J0IGNvbnN0IFZVTE5fRkxBR0dFRF9XQVJOSU5HID0gJ1ZVTE5fRkxBR0dFRCc7XG5cbi8qKlxuICogYFBMVUdJTl9WVUxOX01BWF9DUklUSUNBTGA6IHRoZSBwbGF0Zm9ybSBmbG9vciDigJQgYSB2ZXJzaW9uIHdpdGggTU9SRSBmaXhhYmxlXG4gKiBDcml0aWNhbCBmaW5kaW5ncyB0aGFuIHRoaXMgZmFpbHMgaXRzIGJ1aWxkIChgUExVR0lOX1ZVTE5fR0FURWApIGFuZCBpc1xuICogZmxhZ2dlZCBieSB0aGUgcmVzY2FuLiBEZWZhdWx0IGAwYDsgYC0xYCBkaXNhYmxlcyB0aGUgZmxvb3IgKGFuZCB0aGUgZmxhZykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVnaW5WdWxuTWF4Q3JpdGljYWwoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVudkludCgnUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMJywgMCwgeyBtaW46IC0xIH0pO1xufVxuXG4vKipcbiAqIEEgc2NvcGVkLCBFWFBJUklORyBleGVtcHRpb24gZnJvbSB0aGUgdnVsbmVyYWJpbGl0eSBmbG9vciBmb3Igb25lIHBsdWdpbi5cbiAqXG4gKiBgUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMYCBpcyB0aGUgb25seSBvdGhlciBsZXZlciBhbmQgaXQgaXMgZmFyIHRvbyBibHVudDpcbiAqIHJhaXNpbmcgaXQgYWJvdmUgMCBleGVtcHRzIGV2ZXJ5IHBsdWdpbiBmcm9tIGV2ZXJ5IENyaXRpY2FsLiBTb21lIGltYWdlc1xuICogZ2VudWluZWx5IGNhbm5vdCByZWFjaCB6ZXJvIOKAlCBhIGJyb3dzZXItYnVuZGxpbmcgdGVzdCBydW5uZXIgKGFydGlsbGVyeSBzaGlwc1xuICogQ2hyb21pdW0gdGhyb3VnaCBpdHMgb3duIEBwbGF5d3JpZ2h0L2Jyb3dzZXItY2hyb21pdW0gZGVwZW5kZW5jeSwgcGxheXdyaWdodFxuICogZG93bmxvYWRzIEZpcmVmb3gpIGlzIGF0IHVwc3RyZWFtJ3MgbGF0ZXN0IGFuZCBzdGlsbCBjYXJyaWVzIGZpeGFibGUgZmluZGluZ3MsXG4gKiBiZWNhdXNlIGJyb3dzZXJzIHNoaXAgQ1ZFIGZpeGVzIHdlZWtseSB3aGlsZSBwaW5uZWQgYnVpbGRzIGxhZyBieSBkZXNpZ24uXG4gKiBXaXRob3V0IGEgbmFycm93IGV4ZW1wdGlvbiB0aGUgb25seSBvcHRpb25zIGFyZSBcImJsb2NrIHRoZSBwbHVnaW4gZm9yZXZlclwiIG9yXG4gKiBcImRpc2FibGUgdGhlIGZsb29yIGZvciBldmVyeXRoaW5nXCIuXG4gKlxuICogVGhyZWUgcHJvcGVydGllcyBtYWtlIHRoaXMgYW4gZXhlbXB0aW9uIHJhdGhlciB0aGFuIGEgaG9sZSwgYW5kIGFsbCB0aHJlZSBhcmVcbiAqIGVuZm9yY2VkIGJlbG93IHJhdGhlciB0aGFuIGRvY3VtZW50ZWQgYW5kIGhvcGVkIGZvcjpcbiAqXG4gKiAgIFNDT1BFRCAgICB0byBvbmUgcGx1Z2luLCB0byBuYW1lZCBwYWNrYWdlcywgQU5EIHRvIHRoZSBzeXN0ZW0gb3JnLiBBIG5ld1xuICogICAgICAgICAgICAgQ3JpdGljYWwgaW4gYW55IG90aGVyIHBhY2thZ2Ugc3RpbGwgZmFpbHMgdGhlIGdhdGUsIHNvIGEgd2FpdmVyXG4gKiAgICAgICAgICAgICBjYW5ub3QgZ3JvdyBzaWxlbnRseSBpbnRvIFwidGhpcyBwbHVnaW4gaXMgZXhlbXB0XCIuIFRoZSBvcmcgYm91bmRcbiAqICAgICAgICAgICAgIG1hdHRlcnMgYmVjYXVzZSBwbHVnaW4gbmFtZXMgYXJlIHVuaXF1ZSBwZXIgKG5hbWUsIHZlcnNpb24sXG4gKiAgICAgICAgICAgICBvcmdJZCkgYW5kIE5PVCBnbG9iYWxseTogd2l0aG91dCBpdCwgYW55IHRlbmFudCBjb3VsZCBpbmhlcml0IGFuXG4gKiAgICAgICAgICAgICBleGVtcHRpb24gYnkgbmFtaW5nIHRoZWlyIHBsdWdpbiBgYXJ0aWxsZXJ5YC5cbiAqICAgRVhQSVJJTkcgIGV2ZXJ5IGVudHJ5IGNhcnJpZXMgYSBkYXRlIGFuZCBzdG9wcyBhcHBseWluZyBhZnRlciBpdC4gQSB3YWl2ZXJcbiAqICAgICAgICAgICAgIG5vYm9keSByZXZpc2l0cyBiZWNvbWVzIHBlcm1hbmVudDsgdGhpcyBvbmUgbGFwc2VzIG9uIGl0cyBvd24gYW5kXG4gKiAgICAgICAgICAgICB0aGUgcGx1Z2luIHN0YXJ0cyBmYWlsaW5nIGFnYWluLCB3aGljaCBpcyB0aGUgaW50ZW5kZWQgcHJvbXB0LlxuICogICBWSVNJQkxFICAgd2hhdCB3YXMgd2FpdmVkIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsIHNvIGl0IHJlYWNoZXMgdGhlXG4gKiAgICAgICAgICAgICBtZXRyaWMsIHRoZSBhdWRpdCByZWNvcmQgYW5kIHRoZSBidWlsZCBtZXNzYWdlIGluc3RlYWQgb2ZcbiAqICAgICAgICAgICAgIHZhbmlzaGluZyBmcm9tIHRoZSBjb3VudC5cbiAqXG4gKiBGb3JtYXQg4oCUIGVudHJpZXMgYDtgLXNlcGFyYXRlZCwgZmllbGRzIGA6YC1zZXBhcmF0ZWQsIHBhY2thZ2VzIGAsYC1zZXBhcmF0ZWQ6XG4gKlxuICogICBQTFVHSU5fVlVMTl9XQUlWRVJTPWFydGlsbGVyeToyMDI2LTEyLTMxOmNocm9taXVtLGNocm9tZTtwbGF5d3JpZ2h0OjIwMjYtMTItMzE6ZmlyZWZveFxuICpcbiAqIEEgbWFsZm9ybWVkIGVudHJ5IGlzIERST1BQRUQsIG5ldmVyIHRyZWF0ZWQgYXMgYSB3aWxkY2FyZDogdGhlIGZhaWx1cmUgbW9kZVxuICogb2YgYSB0eXBvIG11c3QgYmUgXCJ0aGUgZ2F0ZSBzdGlsbCBibG9ja3NcIiwgbm90IFwiZXZlcnl0aGluZyBpcyB3YWl2ZWRcIi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuV2FpdmVyIHtcbiAgLyoqIFBsdWdpbiBuYW1lIHRoZSB3YWl2ZXIgYXBwbGllcyB0byAoZXhhY3QgbWF0Y2gpLiAqL1xuICBwbHVnaW46IHN0cmluZztcbiAgLyoqXG4gICAqIFBsdWdpbiB2ZXJzaW9uIHRoZSB3YWl2ZXIgaXMgbGltaXRlZCB0bywgb3IgbnVsbCBmb3IgZXZlcnkgdmVyc2lvbi5cbiAgICpcbiAgICogQSB3YWl2ZXIgaXMgYSBqdWRnZW1lbnQgYWJvdXQgYSBTUEVDSUZJQyBpbWFnZSDigJQgXCJ0aGlzIHJlbGVhc2Ugb2YgYXJ0aWxsZXJ5XG4gICAqIGJ1bmRsZXMgYSBDaHJvbWl1bSB3ZSBjYW5ub3QgcGF0Y2hcIi4gTGVmdCB1bnBpbm5lZCBpdCBzaWxlbnRseSBjYXJyaWVzIHRvXG4gICAqIGV2ZXJ5IGZ1dHVyZSB2ZXJzaW9uLCBpbmNsdWRpbmcgb25lcyB3aG9zZSBmaW5kaW5ncyBub2JvZHkgaGFzIGxvb2tlZCBhdCxcbiAgICogd2hpY2ggaXMgaG93IGEgbmFycm93IGV4ZW1wdGlvbiBiZWNvbWVzIGEgc3RhbmRpbmcgb25lLlxuICAgKi9cbiAgdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIEluY2x1c2l2ZSBleHBpcnkgKFVUQyBkYXRlKS4gQWZ0ZXIgaXQgdGhlIGVudHJ5IGhhcyBubyBlZmZlY3QuICovXG4gIGV4cGlyZXM6IERhdGU7XG4gIC8qKiBQYWNrYWdlIG5hbWVzIHdob3NlIGZpbmRpbmdzIGFyZSBleGVtcHQuIE5ldmVyIGVtcHR5IOKAlCBzZWUgcGFyc2VWdWxuV2FpdmVycy4gKi9cbiAgcGFja2FnZXM6IHN0cmluZ1tdO1xufVxuXG4vKiogQSBkcm9wcGVkIGVudHJ5IGFuZCB3aHksIHNvIHRoZSBvcGVyYXRvciBjYW4gYmUgdG9sZCBpbnN0ZWFkIG9mIGd1ZXNzaW5nLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuV2FpdmVyUHJvYmxlbSB7XG4gIGVudHJ5OiBzdHJpbmc7XG4gIHJlYXNvbjogc3RyaW5nO1xufVxuXG4vKiogUGFyc2VkIHdhaXZlcnMgcGx1cyB0aGUgZW50cmllcyB0aGF0IHdlcmUgcmVqZWN0ZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFZ1bG5XYWl2ZXJQYXJzZSB7XG4gIHdhaXZlcnM6IFZ1bG5XYWl2ZXJbXTtcbiAgcHJvYmxlbXM6IFZ1bG5XYWl2ZXJQcm9ibGVtW107XG59XG5cbi8qKlxuICogUGFyc2UgYFBMVUdJTl9WVUxOX1dBSVZFUlNgLCBSRVBPUlRJTkcgd2hhdCB3YXMgZHJvcHBlZC5cbiAqXG4gKiBEcm9wcGluZyBhIG1hbGZvcm1lZCBlbnRyeSBpcyB0aGUgc2FmZSBkaXJlY3Rpb24g4oCUIGEgdHlwbyBtdXN0IG5vdCBiZWNvbWUgYVxuICogd2lsZGNhcmQg4oCUIGJ1dCBzaWxlbnRseSBkcm9wcGluZyBpdCBpcyBhIHVzYWJpbGl0eSB0cmFwOiB0aGUgb3BlcmF0b3Igc2V0cyBhXG4gKiB3YWl2ZXIsIHRoZSBnYXRlIGtlZXBzIGJsb2NraW5nLCBhbmQgbm90aGluZyBhbnl3aGVyZSBzYXlzIHdoeS4gQ2FsbGVycyB0aGF0XG4gKiBjYW4gc3VyZmFjZSBpdCAoc2VydmljZSBib290KSB1c2UgdGhpczsgYHBhcnNlVnVsbldhaXZlcnNgIGlzIHRoZSBzaG9ydGhhbmRcbiAqIGZvciB0aGUgb25lcyB0aGF0IGNhbm5vdC5cbiAqXG4gKiBFbnRyeSBncmFtbWFyOiBgPHBsdWdpbj5bQDx2ZXJzaW9uPl06PFlZWVktTU0tREQ+Ojxwa2c+Wyw8cGtnPuKApl1gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZ1bG5XYWl2ZXJzVmVyYm9zZShyYXc6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb2Nlc3MuZW52LlBMVUdJTl9WVUxOX1dBSVZFUlMpOiBWdWxuV2FpdmVyUGFyc2Uge1xuICBjb25zdCB3YWl2ZXJzOiBWdWxuV2FpdmVyW10gPSBbXTtcbiAgY29uc3QgcHJvYmxlbXM6IFZ1bG5XYWl2ZXJQcm9ibGVtW10gPSBbXTtcbiAgaWYgKCFyYXc/LnRyaW0oKSkgcmV0dXJuIHsgd2FpdmVycywgcHJvYmxlbXMgfTtcbiAgY29uc3QgcmVqZWN0ID0gKGVudHJ5OiBzdHJpbmcsIHJlYXNvbjogc3RyaW5nKSA9PiB7IHByb2JsZW1zLnB1c2goeyBlbnRyeTogZW50cnkudHJpbSgpLCByZWFzb24gfSk7IH07XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiByYXcuc3BsaXQoJzsnKSkge1xuICAgIGlmICghZW50cnkudHJpbSgpKSBjb250aW51ZTtcbiAgICBjb25zdCBbdGFyZ2V0LCBleHBpcmVzLCBwYWNrYWdlc10gPSBlbnRyeS5zcGxpdCgnOicpLm1hcCgoZikgPT4gZj8udHJpbSgpID8/ICcnKTtcbiAgICAvLyBFdmVyeSBmaWVsZCBpcyBSRVFVSVJFRC4gQW4gZW50cnkgbWlzc2luZyBpdHMgcGFja2FnZSBsaXN0IHdvdWxkXG4gICAgLy8gb3RoZXJ3aXNlIHJlYWQgYXMgXCJ3YWl2ZSB0aGlzIHBsdWdpbiBlbnRpcmVseVwiLCB3aGljaCBpcyB0aGUgb25lIHRoaW5nXG4gICAgLy8gdGhpcyBtdXN0IG5vdCBiZSBhYmxlIHRvIGV4cHJlc3MuXG4gICAgaWYgKCF0YXJnZXQgfHwgIWV4cGlyZXMgfHwgIXBhY2thZ2VzKSB7XG4gICAgICByZWplY3QoZW50cnksICdleHBlY3RlZCA8cGx1Z2luPltAPHZlcnNpb24+XTo8WVlZWS1NTS1ERD46PHBhY2thZ2U+Wyw8cGFja2FnZT7igKZdJyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYXQgPSB0YXJnZXQuaW5kZXhPZignQCcpO1xuICAgIGNvbnN0IHBsdWdpbiA9IGF0ID09PSAtMSA/IHRhcmdldCA6IHRhcmdldC5zbGljZSgwLCBhdCkudHJpbSgpO1xuICAgIGNvbnN0IHZlcnNpb24gPSBhdCA9PT0gLTEgPyBudWxsIDogdGFyZ2V0LnNsaWNlKGF0ICsgMSkudHJpbSgpO1xuICAgIGlmICghcGx1Z2luKSB7IHJlamVjdChlbnRyeSwgJ25vIHBsdWdpbiBuYW1lJyk7IGNvbnRpbnVlOyB9XG4gICAgaWYgKGF0ICE9PSAtMSAmJiAhdmVyc2lvbikgeyByZWplY3QoZW50cnksIFwiJ0AnIHdpdGggbm8gdmVyc2lvbiDigJQgb21pdCBpdCB0byBjb3ZlciBldmVyeSB2ZXJzaW9uXCIpOyBjb250aW51ZTsgfVxuICAgIGlmICghL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QoZXhwaXJlcykpIHsgcmVqZWN0KGVudHJ5LCBgZXhwaXJ5ICcke2V4cGlyZXN9JyBpcyBub3QgWVlZWS1NTS1ERGApOyBjb250aW51ZTsgfVxuICAgIGNvbnN0IHdoZW4gPSBuZXcgRGF0ZShgJHtleHBpcmVzfVQyMzo1OTo1OS45OTlaYCk7XG4gICAgaWYgKE51bWJlci5pc05hTih3aGVuLmdldFRpbWUoKSkpIHsgcmVqZWN0KGVudHJ5LCBgZXhwaXJ5ICcke2V4cGlyZXN9JyBpcyBub3QgYSByZWFsIGRhdGVgKTsgY29udGludWU7IH1cbiAgICBjb25zdCBuYW1lcyA9IHBhY2thZ2VzLnNwbGl0KCcsJykubWFwKChuKSA9PiBuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHsgcmVqZWN0KGVudHJ5LCAnbm8gcGFja2FnZSBuYW1lcycpOyBjb250aW51ZTsgfVxuICAgIHdhaXZlcnMucHVzaCh7IHBsdWdpbiwgdmVyc2lvbiwgZXhwaXJlczogd2hlbiwgcGFja2FnZXM6IG5hbWVzIH0pO1xuICB9XG4gIHJldHVybiB7IHdhaXZlcnMsIHByb2JsZW1zIH07XG59XG5cbi8qKiBQYXJzZSBgUExVR0lOX1ZVTE5fV0FJVkVSU2AuIE1hbGZvcm1lZCBvciBpbmNvbXBsZXRlIGVudHJpZXMgYXJlIGRyb3BwZWQuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWdWxuV2FpdmVycyhyYXc6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb2Nlc3MuZW52LlBMVUdJTl9WVUxOX1dBSVZFUlMpOiBWdWxuV2FpdmVyW10ge1xuICByZXR1cm4gcGFyc2VWdWxuV2FpdmVyc1ZlcmJvc2UocmF3KS53YWl2ZXJzO1xufVxuXG4vKiogV2hhdCBhIHdhaXZlciByZW1vdmVkIGZyb20gdGhlIGNvdW50LCBhbmQgd2hhdCBzdGlsbCBjb3VudHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhaXZlck91dGNvbWUge1xuICAvKiogRmluZGluZ3MgdGhlIGZsb29yIHN0aWxsIGNvdW50cy4gKi9cbiAgY291bnRlZDogUGx1Z2luU2NhbkZpbmRpbmdbXTtcbiAgLyoqIEZpbmRpbmdzIGFuIHVuZXhwaXJlZCB3YWl2ZXIgZXhlbXB0ZWQgKGVtcHR5IHdoZW4gbm9uZSBhcHBsaWVkKS4gKi9cbiAgd2FpdmVkOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xufVxuXG4vKipcbiAqIFNwbGl0IGZpbmRpbmdzIGludG8gd2hhdCBzdGlsbCBjb3VudHMgYW5kIHdoYXQgYW4gdW5leHBpcmVkIHdhaXZlciBleGVtcHRzLlxuICpcbiAqIE1hdGNoaW5nIGlzIG9uIHRoZSBwYWNrYWdlIG5hbWUgYSB3YWl2ZXIgbmFtZXMsIGNhc2UtaW5zZW5zaXRpdmVseSwgYW5kIG9ubHlcbiAqIGZvciBmaW5kaW5ncyB0aGF0IGFyZSBGSVhBQkxFIOKAlCBhbiB1bmZpeGFibGUgZmluZGluZyBuZXZlciBjb3VudGVkIHRvd2FyZCB0aGVcbiAqIGZsb29yLCBzbyBcIndhaXZpbmdcIiBpdCB3b3VsZCBvdmVyc3RhdGUgd2hhdCB0aGUgd2FpdmVyIGRvZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVZ1bG5XYWl2ZXJzKFxuICBwbHVnaW5OYW1lOiBzdHJpbmcsXG4gIGZpbmRpbmdzOiByZWFkb25seSBQbHVnaW5TY2FuRmluZGluZ1tdLFxuICB3YWl2ZXJzOiByZWFkb25seSBWdWxuV2FpdmVyW10gPSBwYXJzZVZ1bG5XYWl2ZXJzKCksXG4gIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCksXG4gIG9yZ0lkPzogc3RyaW5nLFxuICBwbHVnaW5WZXJzaW9uPzogc3RyaW5nLFxuKTogV2FpdmVyT3V0Y29tZSB7XG4gIC8vIFNZU1RFTSBPUkcgT05MWS4gUGx1Z2luIG5hbWVzIGFyZSB1bmlxdWUgcGVyIChuYW1lLCB2ZXJzaW9uLCBvcmdJZCksIE5PVFxuICAvLyBnbG9iYWxseSDigJQgYW55IHRlbmFudCBjYW4gY3JlYXRlIGEgcGx1Z2luIGNhbGxlZCBgYXJ0aWxsZXJ5YC4gTWF0Y2hpbmcgb25cbiAgLy8gdGhlIG5hbWUgYWxvbmUgd291bGQgaGFuZCBldmVyeSBvbmUgb2YgdGhlbSB0aGUgb3BlcmF0b3IncyBleGVtcHRpb24sIHNvIGFcbiAgLy8gdGVuYW50IGNvdWxkIGluaGVyaXQgYSB3YWl2ZXIgc2ltcGx5IGJ5IGNob29zaW5nIHRoZSBuYW1lLCBhbmQgc2hpcCBhblxuICAvLyBpbWFnZSB3aG9zZSBDcml0aWNhbHMgdGhlIGdhdGUgdGhlbiB3YXZlZCB0aHJvdWdoLiBUaGUgd2FpdmVycyBleGlzdCBmb3IgdGhlXG4gIC8vIE9mZmljaWFsIGNhdGFsb2cgdGhlIG9wZXJhdG9yIGN1cmF0ZXMsIHdoaWNoIGxpdmVzIGluIHRoZSBzeXN0ZW0gb3JnOyBhXG4gIC8vIGNhbGxlciB0aGF0IGNhbm5vdCBzYXkgd2hpY2ggb3JnIHRoaXMgYnVpbGQgYmVsb25ncyB0byBnZXRzIG5vIHdhaXZlci5cbiAgaWYgKG9yZ0lkID09PSB1bmRlZmluZWQgfHwgb3JnSWQudG9Mb3dlckNhc2UoKSAhPT0gU1lTVEVNX09SR19JRCkgcmV0dXJuIHsgY291bnRlZDogWy4uLmZpbmRpbmdzXSwgd2FpdmVkOiBbXSB9O1xuICBjb25zdCBhY3RpdmUgPSB3YWl2ZXJzLmZpbHRlcigodykgPT4gdy5wbHVnaW4gPT09IHBsdWdpbk5hbWVcbiAgICAmJiB3LmV4cGlyZXMuZ2V0VGltZSgpID49IG5vdy5nZXRUaW1lKClcbiAgICAvLyBBIHZlcnNpb24tcGlubmVkIHdhaXZlciBjb3ZlcnMgdGhhdCB2ZXJzaW9uIG9ubHkuIEFuIHVucGlubmVkIG9uZSBjb3ZlcnNcbiAgICAvLyBldmVyeSB2ZXJzaW9uLCB3aGljaCBpcyB3aHkgdGhlIHBpbiBpcyB3b3J0aCB3cml0aW5nLlxuICAgICYmICh3LnZlcnNpb24gPT09IG51bGwgfHwgdy52ZXJzaW9uID09PSBwbHVnaW5WZXJzaW9uKSk7XG4gIGlmIChhY3RpdmUubGVuZ3RoID09PSAwKSByZXR1cm4geyBjb3VudGVkOiBbLi4uZmluZGluZ3NdLCB3YWl2ZWQ6IFtdIH07XG4gIGNvbnN0IGV4ZW1wdCA9IG5ldyBTZXQoYWN0aXZlLmZsYXRNYXAoKHcpID0+IHcucGFja2FnZXMubWFwKChuKSA9PiBuLnRvTG93ZXJDYXNlKCkpKSk7XG4gIGNvbnN0IGNvdW50ZWQ6IFBsdWdpblNjYW5GaW5kaW5nW10gPSBbXTtcbiAgY29uc3Qgd2FpdmVkOiBQbHVnaW5TY2FuRmluZGluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZiBvZiBmaW5kaW5ncykge1xuICAgIGlmIChmLmZpeGVkSW4ubGVuZ3RoID4gMCAmJiBleGVtcHQuaGFzKGYucGFja2FnZU5hbWUudG9Mb3dlckNhc2UoKSkpIHdhaXZlZC5wdXNoKGYpO1xuICAgIGVsc2UgY291bnRlZC5wdXNoKGYpO1xuICB9XG4gIHJldHVybiB7IGNvdW50ZWQsIHdhaXZlZCB9O1xufVxuXG4vKiogV2hldGhlciBgZml4YWJsZUNyaXRpY2FsYCBicmVha3MgdGhlIHBsYXRmb3JtIGZsb29yIChuZXZlciwgd2hlbiBkaXNhYmxlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gZXhjZWVkc1Z1bG5GbG9vcihmaXhhYmxlQ3JpdGljYWw6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIG1heDogbnVtYmVyID0gcGx1Z2luVnVsbk1heENyaXRpY2FsKCkpOiBib29sZWFuIHtcbiAgcmV0dXJuIG1heCA+PSAwICYmIChmaXhhYmxlQ3JpdGljYWwgPz8gMCkgPiBtYXg7XG59XG5cbi8qKlxuICogYFBMVUdJTl9CTE9DS19PTl9ORVdfQ1JJVElDQUxgIChkZWZhdWx0IGZhbHNlKTogcmVzb2x1dGlvbiBTS0lQUyBmbGFnZ2VkXG4gKiB2ZXJzaW9ucyBmb3IgcmFuZ2VzIGFuZCB0aGUgZGVmYXVsdCAoZmFsbGluZyBiYWNrIHRvIHRoZSBuZXdlc3QgdW5mbGFnZ2VkXG4gKiBvbmUpLCBhbmQgYW4gZXhhY3QgcGluIHRvIGEgZmxhZ2dlZCB2ZXJzaW9uIGlzIHJlZnVzZWQgNDA5XG4gKiBgUExVR0lOX1ZFUlNJT05fVlVMTl9CTE9DS0VEYC4gT2ZmOiBmbGFnZ2VkIHZlcnNpb25zIHJlc29sdmUgd2l0aCBhXG4gKiBgVlVMTl9GTEFHR0VEYCB3YXJuaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tPbk5ld0NyaXRpY2FsKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZW52Qm9vbCgnUExVR0lOX0JMT0NLX09OX05FV19DUklUSUNBTCcsIGZhbHNlKTtcbn1cblxuLyoqIGBwa2dAMS4yLjMg4oaSIDEuMi40YCAvIGBwa2dAMS4yLjMgKG5vIGZpeClgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlRml4KGY6IFBpY2s8UGx1Z2luU2NhbkZpbmRpbmcsICdwYWNrYWdlTmFtZScgfCAncGFja2FnZVZlcnNpb24nIHwgJ2ZpeGVkSW4nPik6IHN0cmluZyB7XG4gIGNvbnN0IGF0ID0gYCR7Zi5wYWNrYWdlTmFtZX0ke2YucGFja2FnZVZlcnNpb24gPyBgQCR7Zi5wYWNrYWdlVmVyc2lvbn1gIDogJyd9YDtcbiAgcmV0dXJuIGYuZml4ZWRJbi5sZW5ndGggPiAwID8gYCR7YXR9IOKGkiAke2YuZml4ZWRJbi5qb2luKCcsICcpfWAgOiBgJHthdH0gKG5vIGZpeClgO1xufVxuXG4vKiogYENWRS0xIChvcGVuc3NsQDMuMC4xIOKGkiAzLjAuMik7IENWRS0yICjigKYpYCBmb3IgdGhlIGZpcnN0IGBsaW1pdGAgZmluZGluZ3MuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVGaW5kaW5ncyhmaW5kaW5nczogcmVhZG9ubHkgUGx1Z2luU2NhbkZpbmRpbmdbXSwgbGltaXQgPSA1KTogc3RyaW5nIHtcbiAgY29uc3Qgc2hvd24gPSBmaW5kaW5ncy5zbGljZSgwLCBsaW1pdCkubWFwKChmKSA9PiBgJHtmLmlkfSAoJHtkZXNjcmliZUZpeChmKX0pYCkuam9pbignOyAnKTtcbiAgY29uc3QgbW9yZSA9IGZpbmRpbmdzLmxlbmd0aCA+IGxpbWl0ID8gYDsgKyR7ZmluZGluZ3MubGVuZ3RoIC0gbGltaXR9IG1vcmVgIDogJyc7XG4gIHJldHVybiBgJHtzaG93bn0ke21vcmV9YDtcbn1cblxuLyoqIFRoZSB3YXJuaW5nIHRleHQgZm9yIGEgZmxhZ2dlZCB2ZXJzaW9uOiBgeEB2IGhhcyBOIGZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3Mg4oCUIHJlYnVpbGQgb3IgdXBncmFkZWAuICovXG5leHBvcnQgZnVuY3Rpb24gdnVsbkZsYWdnZWRNZXNzYWdlKHJlZjogc3RyaW5nLCBmbGFnOiBQaWNrPFBsdWdpblNjYW5GbGFnLCAnY3JpdGljYWwnPik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtyZWZ9IGhhcyAke2ZsYWcuY3JpdGljYWx9IGZpeGFibGUgQ3JpdGljYWwgZmluZGluZyR7ZmxhZy5jcml0aWNhbCA9PT0gMSA/ICcnIDogJ3MnfSDigJQgcmVidWlsZCBvciB1cGdyYWRlYDtcbn1cblxuLyoqIEEgYFZVTE5fRkxBR0dFRGAgbG9va3VwIHdhcm5pbmcgKHRoZSBsb29rdXAgZW52ZWxvcGUncyBgd2FybmluZ3NbXWAgZW50cnkpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuRmxhZ2dlZFdhcm5pbmcge1xuICBjb2RlOiB0eXBlb2YgVlVMTl9GTEFHR0VEX1dBUk5JTkc7XG4gIHBsdWdpbjogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogVG9wIGZpeGFibGUgZmluZGluZ3Mgd2l0aCB0aGVpciBmaXhlZCB2ZXJzaW9ucy4gKi9cbiAgZmluZGluZ3M6IFBsdWdpblNjYW5GaW5kaW5nW107XG59XG5cbi8qKiBCdWlsZCB0aGUgYFZVTE5fRkxBR0dFRGAgd2FybmluZyBmb3IgYHBsdWdpbkB2ZXJzaW9uYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2dWxuRmxhZ2dlZFdhcm5pbmcocGx1Z2luOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgZmxhZzogUGx1Z2luU2NhbkZsYWcpOiBWdWxuRmxhZ2dlZFdhcm5pbmcge1xuICByZXR1cm4ge1xuICAgIGNvZGU6IFZVTE5fRkxBR0dFRF9XQVJOSU5HLFxuICAgIHBsdWdpbixcbiAgICB2ZXJzaW9uLFxuICAgIGNyaXRpY2FsOiBmbGFnLmNyaXRpY2FsLFxuICAgIGhpZ2g6IGZsYWcuaGlnaCxcbiAgICBtZXNzYWdlOiB2dWxuRmxhZ2dlZE1lc3NhZ2UoYCR7cGx1Z2lufUAke3ZlcnNpb259YCwgZmxhZyksXG4gICAgZmluZGluZ3M6IGZsYWcuZmluZGluZ3Muc2xpY2UoMCwgU0NBTl9GTEFHX1RPUF9GSU5ESU5HUyksXG4gIH07XG59XG5cbi8qKiBUaGUgNDA5IG1lc3NhZ2UgZm9yIGFuIGV4YWN0IHBpbiB0byBhIGZsYWdnZWQgdmVyc2lvbiB3aGlsZSBibG9ja2luZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2dWxuQmxvY2tlZE1lc3NhZ2UocGx1Z2luOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgZmxhZzogUGx1Z2luU2NhbkZsYWcpOiBzdHJpbmcge1xuICBjb25zdCBmaXhlcyA9IGZsYWcuZmluZGluZ3MubGVuZ3RoID4gMCA/IGAgRml4OiAke2Rlc2NyaWJlRmluZGluZ3MoZmxhZy5maW5kaW5ncyl9LmAgOiAnJztcbiAgcmV0dXJuIGAke3BsdWdpbn1AJHt2ZXJzaW9ufSBpcyBibG9ja2VkOiBhIHJlc2NhbiBmb3VuZCAke2ZsYWcuY3JpdGljYWx9IGZpeGFibGUgQ3JpdGljYWwgZmluZGluZyR7ZmxhZy5jcml0aWNhbCA9PT0gMSA/ICcnIDogJ3MnfSBgXG4gICAgKyBgKFBMVUdJTl9CTE9DS19PTl9ORVdfQ1JJVElDQUwpLiBSZWJ1aWxkIGl0IG9uIHBhdGNoZWQgcGFja2FnZXMgb3IgbW92ZSB0byBhIG5ld2VyIHZlcnNpb24uJHtmaXhlc31gO1xufVxuXG4vKiogTmFycm93IGFuIHVua25vd24gYHNjYW5fZmxhZ2AganNvbmIgdmFsdWUuICovXG5leHBvcnQgZnVuY3Rpb24gYXNTY2FuRmxhZyh2YWx1ZTogdW5rbm93bik6IFBsdWdpblNjYW5GbGFnIHwgbnVsbCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiB2LmNyaXRpY2FsICE9PSAnbnVtYmVyJyB8fCB0eXBlb2Ygdi5oaWdoICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGZpbmRpbmdzID0gQXJyYXkuaXNBcnJheSh2LmZpbmRpbmdzKSA/ICh2LmZpbmRpbmdzIGFzIFBsdWdpblNjYW5GaW5kaW5nW10pLmZpbHRlcigoZikgPT4gZiAmJiB0eXBlb2YgZi5pZCA9PT0gJ3N0cmluZycpIDogW107XG4gIHJldHVybiB7XG4gICAgY3JpdGljYWw6IHYuY3JpdGljYWwsXG4gICAgaGlnaDogdi5oaWdoLFxuICAgIG1heENyaXRpY2FsOiB0eXBlb2Ygdi5tYXhDcml0aWNhbCA9PT0gJ251bWJlcicgPyB2Lm1heENyaXRpY2FsIDogMCxcbiAgICBmaW5kaW5nczogZmluZGluZ3MubWFwKChmKSA9PiAoeyAuLi5mLCBmaXhlZEluOiBBcnJheS5pc0FycmF5KGYuZml4ZWRJbikgPyBmLmZpeGVkSW4gOiBbXSB9KSksXG4gIH07XG59XG4iXX0=
@@ -17,7 +17,7 @@
17
17
  * (`admin.superadmin.grant`, `org.ownership.transfer`, `user.login`, …). Keep
18
18
  * this list free of any platform-only action.
19
19
  */
20
- export declare const REMOTE_AUDIT_ACTIONS: readonly ['plugin.build.completed', 'plugin.build.failed', 'plugin.build.timeout', 'plugin.scan.skipped', 'plugin.delete', 'plugin.restore', 'plugin.purge', 'plugin.update', 'plugin.upload', 'plugin.deploy', 'plugin.bulk.update', 'plugin.bulk.delete', 'plugin.dlq.purge', 'plugin.build.retry', 'plugin.dlq.replay', 'pipeline.create', 'pipeline.update', 'pipeline.delete', 'pipeline.restore', 'pipeline.purge', 'pipeline_template.create', 'pipeline_template.update', 'pipeline_template.delete', 'pipeline_template.restore', 'pipeline_template.purge', 'pipeline.execution.start', 'pipeline.execution.cancel', 'pipeline.registry.register', 'pipeline.registry.deregister', 'quota.reset', 'quota.limit.update', 'quota.delete', 'compliance.exemption.approve', 'compliance.exemption.revoke', 'compliance.rule.toggle', 'compliance.rule.create', 'compliance.rule.update', 'compliance.rule.delete', 'compliance.rule.restore', 'compliance.rule.purge', 'compliance.policy.create', 'compliance.policy.update', 'compliance.policy.delete', 'compliance.policy.restore', 'compliance.policy.purge', 'compliance.scan-schedule.create', 'compliance.scan-schedule.update', 'compliance.scan-schedule.delete', 'compliance.template.apply', 'compliance.scan.create', 'compliance.scan.cancel', 'compliance.notification-preference.update', 'registry.gc', 'registry.image.delete', 'registry.image.copy', 'registry.image.sign', 'message.announcement.create', 'message.delete', 'message.restore', 'message.purge', 'billing.subscription.create', 'billing.subscription.update', 'billing.subscription.reactivate', 'billing.subscription.cancel', 'billing.subscription.delete', 'billing.tier.override', 'billing.addon.add', 'billing.addon.remove', 'billing.addon.prune', 'billing.discount.generate', 'billing.discount.issue', 'billing.discount.apply', 'billing.discount.remove', 'billing.discount.revoke', 'billing.promotion.create', 'billing.promotion.update', 'billing.promotion.revoke', 'billing.promotion.grant', 'billing.promotion.activate', 'billing.credit.consumed', 'billing.credit.exhausted', 'billing.combo.expired', 'reporting.settings.update', 'reporting.deployment.outcome', 'reporting.retention.sync', 'reporting.report.definition.create', 'reporting.report.definition.update', 'reporting.report.definition.delete', 'reporting.report.ownership.transfer', 'reporting.report.published', 'reporting.report.republished', 'reporting.report.link.created', 'reporting.report.link.revoked', 'reporting.report.recipient.added', 'reporting.report.recipient.removed', 'reporting.report.policy.update', 'reporting.report.paused', 'reporting.report.resumed', 'authz.denied', 'ask.query', 'ask.agent.turn', 'publisher.create', 'publisher.update', 'publisher.terms.accept', 'publisher.verify.request', 'publisher.verify.approve', 'publisher.verify.reject', 'publisher.tier.change', 'publisher.suspend', 'publisher.unsuspend', 'publisher.transfer.request', 'publisher.transfer.accept', 'publisher.transfer.decline', 'publisher.transfer.approve', 'publisher.transfer.reject', 'publisher.profile-change.approve', 'publisher.profile-change.reject', 'plugin.request.submit', 'plugin.request.withdraw', 'plugin.request.approve', 'plugin.request.second-approve', 'plugin.request.reject', 'plugin.request.auto-approve', 'plugin.listing.publish', 'plugin.listing.unlist', 'plugin.listing.update', 'plugin.listing.state.change', 'plugin.listing.pause', 'plugin.listing.unpause', 'plugin.version.pause', 'plugin.version.yank', 'plugin.version.unyank', 'plugin.version.deprecate', 'plugin.collection.update', 'ecosystem.auto-approval-rule.create', 'ecosystem.auto-approval-rule.update', 'ecosystem.auto-approval-rule.delete', 'ecosystem.reserved-name.update', 'ecosystem.sla.update', 'registry.image.publish', 'registry.image.resign', 'registry.image.yank', 'registry.image.gc', 'plugin.install.request', 'plugin.install.approve', 'plugin.install.deny', 'plugin.install.create', 'plugin.install.upgrade', 'plugin.install.change-request', 'plugin.install.change-approve', 'plugin.install.change-reject', 'plugin.install.remove', 'org.plugin-install-policy.update', 'plugin.review.create', 'plugin.review.update', 'plugin.review.delete', 'plugin.review.report', 'plugin.review.hold', 'plugin.review.release', 'plugin.review.remove', 'plugin.review.anonymize', 'plugin.review.reply.create', 'plugin.review.reply.update', 'plugin.review.reply.delete', 'plugin.submission.create', 'plugin.submission.verify', 'plugin.submission.gate-fail', 'plugin.submission.approve', 'plugin.submission.reject', 'plugin.submission.claim', 'plugin.submission.expire', 'plugin.advisory.create', 'plugin.advisory.update', 'plugin.advisory.publish', 'plugin.advisory.withdraw', 'plugin.security_notifications.update', 'plugin.security_notifications.external_email.verify', 'plugin.security_notifications.test'];
20
+ export declare const REMOTE_AUDIT_ACTIONS: readonly ['plugin.build.completed', 'plugin.build.failed', 'plugin.build.timeout', 'plugin.scan.skipped', 'plugin.vuln.waived', 'plugin.delete', 'plugin.restore', 'plugin.purge', 'plugin.update', 'plugin.upload', 'plugin.deploy', 'plugin.bulk.update', 'plugin.bulk.delete', 'plugin.dlq.purge', 'plugin.build.retry', 'plugin.dlq.replay', 'pipeline.create', 'pipeline.update', 'pipeline.delete', 'pipeline.restore', 'pipeline.purge', 'pipeline_template.create', 'pipeline_template.update', 'pipeline_template.delete', 'pipeline_template.restore', 'pipeline_template.purge', 'pipeline.execution.start', 'pipeline.execution.cancel', 'pipeline.registry.register', 'pipeline.registry.deregister', 'quota.reset', 'quota.limit.update', 'quota.delete', 'compliance.exemption.approve', 'compliance.exemption.revoke', 'compliance.rule.toggle', 'compliance.rule.create', 'compliance.rule.update', 'compliance.rule.delete', 'compliance.rule.restore', 'compliance.rule.purge', 'compliance.policy.create', 'compliance.policy.update', 'compliance.policy.delete', 'compliance.policy.restore', 'compliance.policy.purge', 'compliance.scan-schedule.create', 'compliance.scan-schedule.update', 'compliance.scan-schedule.delete', 'compliance.template.apply', 'compliance.scan.create', 'compliance.scan.cancel', 'compliance.notification-preference.update', 'registry.gc', 'registry.image.delete', 'registry.image.copy', 'registry.image.sign', 'message.announcement.create', 'message.delete', 'message.restore', 'message.purge', 'billing.subscription.create', 'billing.subscription.update', 'billing.subscription.reactivate', 'billing.subscription.cancel', 'billing.subscription.delete', 'billing.tier.override', 'billing.addon.add', 'billing.addon.remove', 'billing.addon.prune', 'billing.discount.generate', 'billing.discount.issue', 'billing.discount.apply', 'billing.discount.remove', 'billing.discount.revoke', 'billing.promotion.create', 'billing.promotion.update', 'billing.promotion.revoke', 'billing.promotion.grant', 'billing.promotion.activate', 'billing.credit.consumed', 'billing.credit.exhausted', 'billing.combo.expired', 'reporting.settings.update', 'reporting.deployment.outcome', 'reporting.retention.sync', 'reporting.report.definition.create', 'reporting.report.definition.update', 'reporting.report.definition.delete', 'reporting.report.ownership.transfer', 'reporting.report.published', 'reporting.report.republished', 'reporting.report.link.created', 'reporting.report.link.revoked', 'reporting.report.recipient.added', 'reporting.report.recipient.removed', 'reporting.report.policy.update', 'reporting.report.paused', 'reporting.report.resumed', 'authz.denied', 'ask.query', 'ask.agent.turn', 'publisher.create', 'publisher.update', 'publisher.terms.accept', 'publisher.verify.request', 'publisher.verify.approve', 'publisher.verify.reject', 'publisher.tier.change', 'publisher.suspend', 'publisher.unsuspend', 'publisher.transfer.request', 'publisher.transfer.accept', 'publisher.transfer.decline', 'publisher.transfer.approve', 'publisher.transfer.reject', 'publisher.profile-change.approve', 'publisher.profile-change.reject', 'plugin.request.submit', 'plugin.request.withdraw', 'plugin.request.approve', 'plugin.request.second-approve', 'plugin.request.reject', 'plugin.request.auto-approve', 'plugin.listing.publish', 'plugin.listing.unlist', 'plugin.listing.update', 'plugin.listing.state.change', 'plugin.listing.pause', 'plugin.listing.unpause', 'plugin.version.pause', 'plugin.version.yank', 'plugin.version.unyank', 'plugin.version.deprecate', 'plugin.collection.update', 'ecosystem.auto-approval-rule.create', 'ecosystem.auto-approval-rule.update', 'ecosystem.auto-approval-rule.delete', 'ecosystem.reserved-name.update', 'ecosystem.sla.update', 'registry.image.publish', 'registry.image.resign', 'registry.image.yank', 'registry.image.gc', 'plugin.install.request', 'plugin.install.approve', 'plugin.install.deny', 'plugin.install.create', 'plugin.install.upgrade', 'plugin.install.change-request', 'plugin.install.change-approve', 'plugin.install.change-reject', 'plugin.install.remove', 'org.plugin-install-policy.update', 'plugin.shadowing.denied', 'plugin.review.create', 'plugin.review.update', 'plugin.review.delete', 'plugin.review.report', 'plugin.review.hold', 'plugin.review.release', 'plugin.review.remove', 'plugin.review.anonymize', 'plugin.review.reply.create', 'plugin.review.reply.update', 'plugin.review.reply.delete', 'plugin.submission.create', 'plugin.submission.verify', 'plugin.submission.gate-fail', 'plugin.submission.approve', 'plugin.submission.reject', 'plugin.submission.claim', 'plugin.submission.expire', 'plugin.advisory.create', 'plugin.advisory.update', 'plugin.advisory.publish', 'plugin.advisory.withdraw', 'plugin.security_notifications.update', 'plugin.security_notifications.external_email.verify', 'plugin.security_notifications.test'];
21
21
  export type RemoteAuditAction = typeof REMOTE_AUDIT_ACTIONS[number];
22
22
  /** Whether `value` is an action a remote service may emit (the ingest allow-list). */
23
23
  export declare function isRemoteAuditAction(value: string): value is RemoteAuditAction;
@@ -27,6 +27,13 @@ export const REMOTE_AUDIT_ACTIONS = [
27
27
  // the operator escape hatch `PLUGIN_ALLOW_UNSCANNED` is on (without it the
28
28
  // build fails `IMAGE_SCAN_UNAVAILABLE`). `details` carry name/version/digest.
29
29
  'plugin.scan.skipped',
30
+ // Fixable Critical findings were EXEMPTED from the platform floor by a
31
+ // `PLUGIN_VULN_WAIVERS` entry, so a build that would otherwise have failed
32
+ // PLUGIN_VULN_GATE was allowed through. The other half of plugin.scan.skipped:
33
+ // both are operator escape hatches that change a gate's verdict, and a metric
34
+ // and a log line are not a durable record of one. `details` carry
35
+ // name/version/digest, how many findings were waived and which packages.
36
+ 'plugin.vuln.waived',
30
37
  // Plugin lifecycle mutations (api/plugin route handlers) — the destructive /
31
38
  // publishing surface that builds already audit's counterpart: registry delete,
32
39
  // source upload, and deploy-to-cluster. `targetId` is the plugin id.
@@ -298,6 +305,14 @@ export const REMOTE_AUDIT_ACTIONS = [
298
305
  'plugin.install.change-reject',
299
306
  'plugin.install.remove',
300
307
  'org.plugin-install-policy.update',
308
+ // An upload REFUSED because its name would override something the org already
309
+ // resolves — a listing, or a team's parent-org plugin — and the consumption
310
+ // policy says `shadowing: deny`. Audited because a refusal otherwise returns
311
+ // an error to the caller and leaves nothing behind: an attempt to define
312
+ // `trivy` over the Official scanner is exactly the thing someone should be
313
+ // able to find afterwards. `details` carry the name and what it would have
314
+ // overridden.
315
+ 'plugin.shadowing.denied',
301
316
  // Reviews and replies.
302
317
  'plugin.review.create',
303
318
  'plugin.review.update',
@@ -336,4 +351,4 @@ export const REMOTE_AUDIT_ACTIONS = [
336
351
  export function isRemoteAuditAction(value) {
337
352
  return REMOTE_AUDIT_ACTIONS.includes(value);
338
353
  }
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcmVtb3RlLWF1ZGl0LWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBR0g7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsc0JBQXNCO0lBQ3RCLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQiw2RUFBNkU7SUFDN0UsK0VBQStFO0lBQy9FLHFFQUFxRTtJQUNyRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YsZUFBZTtJQUNmLDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIseUVBQXlFO0lBQ3pFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsdUVBQXVFO0lBQ3ZFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsZ0VBQWdFO0lBQ2hFLHFFQUFxRTtJQUNyRSxvREFBb0Q7SUFDcEQsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG1FQUFtRTtJQUNuRSw0RUFBNEU7SUFDNUUsMERBQTBEO0lBQzFELGdCQUFnQjtJQUNoQiwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwyQkFBMkI7SUFDM0IseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQiwyQkFBMkI7SUFDM0IsaUZBQWlGO0lBQ2pGLG9GQUFvRjtJQUNwRiw0QkFBNEI7SUFDNUIsOEJBQThCO0lBQzlCLDJFQUEyRTtJQUMzRSww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QUN2Qix3QkFBd0I7SUFDeEIsdUJBQXVCO0lBQ3ZCLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsb0VBQW9FO0lBQ3BFLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIscUJBQXFCO0lBQ3JCLHVCQUF1QjtJQUN2Qix3QkFBd0I7SUFDeEIseUZBQXlGO0lBQ3pGLCtCQUErQjtJQUMvQiwrQkFBK0I7SUFDL0IsOEJBQThCO0lBQzlCLHVCQUF1QjtJQUN2QixrQ0FBa0M7SUFDbEMsdUJBQXVCO0lBQ3ZCLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsc0JBQXNCO0lBQ3RCLHNCQUFzQjtJQUN0QixvQkFBb0I7SUFDcEIsdUJBQXVCO0lBQ3ZCLHNCQUFzQjtJQUN0Qix5QkFBeUI7SUFDekIsNEJBQTRCO0lBQzVCLDRCQUE0QjtJQUM1Qiw0QkFBNEI7SUFDNUIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsNkJBQTZCO0lBQzdCLDJCQUEyQjtJQUMzQiwwQkFBMEI7SUFDMUIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQix3RUFBd0U7SUFDeEUscURBQXFEO0lBQ3JELHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHVFQUF1RTtJQUN2RSwwRUFBMEU7SUFDMUUsc0NBQXNDO0lBQ3RDLHFEQUFxRDtJQUNyRCxvQ0FBb0M7Q0FDNUIsQ0FBQztBQUlYLHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBYTtJQUMvQyxPQUFRLG9CQUEwQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHJlbW90ZSAobm9uLXBsYXRmb3JtKSBhdWRpdCBBQ1RJT04gVk9DQUJVTEFSWS5cbiAqXG4gKiBLZXB0IGFwYXJ0IGZyb20gdGhlIGNsaWVudCB0aGF0IHNoaXBzIHRoZSBldmVudHMgKGBzZXJ2aWNlcy9yZW1vdGUtYXVkaXQtY2xpZW50LnRzYClcbiAqIGJlY2F1c2UgaXQgaXMgYW4gYWxsb3ctbGlzdCwgbm90IG1hY2hpbmVyeTogaXQgaXMgdGhlIHRoaW5nIGEgcmV2aWV3ZXIgcmVhZHNcbiAqIGVuZCB0byBlbmQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIGEgc2VydmljZSBtYXkgZW1pdCBhIGdpdmVuIGFjdGlvbiwgYW5kIGl0IGlzXG4gKiB3aGF0IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBhZ2FpbnN0LlxuICovXG5cblxuLyoqXG4gKiBUaGUgZXhhY3Qgc2V0IG9mIGF1ZGl0IGFjdGlvbnMgYSBOT04tUExBVEZPUk0gKHJlbW90ZSkgc2VydmljZSBpcyBwZXJtaXR0ZWQgdG9cbiAqIGVtaXQgdGhyb3VnaCBgUE9TVCAvYXVkaXQvZXZlbnRzYC4gVGhpcyBpcyB0aGUgU0lOR0xFIFNPVVJDRSDigJQgYFJlbW90ZUF1ZGl0QWN0aW9uYFxuICogaXMgZGVyaXZlZCBmcm9tIGl0LCBzbyB0aGUgdHlwZSBhbmQgdGhlIHJ1bnRpbWUgYWxsb3ctbGlzdCBjYW4gbmV2ZXIgZHJpZnQuXG4gKlxuICogU0VDVVJJVFk6IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBgYWN0aW9uYCBhZ2FpbnN0IHRoaXMgc3Vic2V0ICh2aWFcbiAqIHtAbGluayBpc1JlbW90ZUF1ZGl0QWN0aW9ufSksIE5PVCB0aGUgZnVsbCBwbGF0Zm9ybSBgQXVkaXRBY3Rpb25gIHVuaW9uIOKAlCBhXG4gKiBgc2VydmljZToqYCB0b2tlbiBtdXN0IG5vdCBiZSBhYmxlIHRvIGZvcmdlIHBsYXRmb3JtLWF1dGhvcml0eSBldmVudHNcbiAqIChgYWRtaW4uc3VwZXJhZG1pbi5ncmFudGAsIGBvcmcub3duZXJzaGlwLnRyYW5zZmVyYCwgYHVzZXIubG9naW5gLCDigKYpLiBLZWVwXG4gKiB0aGlzIGxpc3QgZnJlZSBvZiBhbnkgcGxhdGZvcm0tb25seSBhY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSRU1PVEVfQVVESVRfQUNUSU9OUyA9IFtcbiAgJ3BsdWdpbi5idWlsZC5jb21wbGV0ZWQnLFxuICAncGx1Z2luLmJ1aWxkLmZhaWxlZCcsXG4gICdwbHVnaW4uYnVpbGQudGltZW91dCcsXG4gIC8vIEEgdmVyc2lvbiBwZXJzaXN0ZWQgVU5TQ0FOTkVEIGJlY2F1c2UgdGhlIGJ1aWxkLXRpbWUgc2NhbiBjb3VsZCBub3QgcnVuIGFuZFxuICAvLyB0aGUgb3BlcmF0b3IgZXNjYXBlIGhhdGNoIGBQTFVHSU5fQUxMT1dfVU5TQ0FOTkVEYCBpcyBvbiAod2l0aG91dCBpdCB0aGVcbiAgLy8gYnVpbGQgZmFpbHMgYElNQUdFX1NDQU5fVU5BVkFJTEFCTEVgKS4gYGRldGFpbHNgIGNhcnJ5IG5hbWUvdmVyc2lvbi9kaWdlc3QuXG4gICdwbHVnaW4uc2Nhbi5za2lwcGVkJyxcbiAgLy8gUGx1Z2luIGxpZmVjeWNsZSBtdXRhdGlvbnMgKGFwaS9wbHVnaW4gcm91dGUgaGFuZGxlcnMpIOKAlCB0aGUgZGVzdHJ1Y3RpdmUgL1xuICAvLyBwdWJsaXNoaW5nIHN1cmZhY2UgdGhhdCBidWlsZHMgYWxyZWFkeSBhdWRpdCdzIGNvdW50ZXJwYXJ0OiByZWdpc3RyeSBkZWxldGUsXG4gIC8vIHNvdXJjZSB1cGxvYWQsIGFuZCBkZXBsb3ktdG8tY2x1c3Rlci4gYHRhcmdldElkYCBpcyB0aGUgcGx1Z2luIGlkLlxuICAncGx1Z2luLmRlbGV0ZScsXG4gICdwbHVnaW4ucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBwdXJnZTogcGVybWFuZW50IGhhcmQtZGVsZXRlIG9mIGEgc29mdC1kZWxldGVkIHBsdWdpbiB0b21ic3RvbmUgb25cbiAgLy8gZGVtYW5kIChmaW5hbGl6ZXMgd2hhdCB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkIG90aGVyd2lzZSBkbyBsYXRlcikuXG4gICdwbHVnaW4ucHVyZ2UnLFxuICAncGx1Z2luLnVwZGF0ZScsXG4gICdwbHVnaW4udXBsb2FkJyxcbiAgJ3BsdWdpbi5kZXBsb3knLFxuICAvLyBQbHVnaW4gYnVsayBtdXRhdGlvbnMgKGFwaS9wbHVnaW4gYnVsay1wbHVnaW4gcm91dGUpICsgRExRIHB1cmdlIChkcm9wcyBhbGxcbiAgLy8gZGVhZC1sZXR0ZXJlZCBidWlsZCBqb2JzLCBjcm9zcy1vcmcsIHN5c2FkbWluKS4gYGRldGFpbHNgIGNhcnJpZXMgY291bnRzLlxuICAncGx1Z2luLmJ1bGsudXBkYXRlJyxcbiAgJ3BsdWdpbi5idWxrLmRlbGV0ZScsXG4gICdwbHVnaW4uZGxxLnB1cmdlJyxcbiAgLy8gQnVpbGQgcmUtcnVucyBmcm9tIHRoZSBxdWV1ZS10cmlhZ2Ugc3VyZmFjZTogcmUtZW5xdWV1ZSBhIEZBSUxFRCBidWlsZFxuICAvLyAoYHBsdWdpbi5idWlsZC5yZXRyeWApIG9yIGEgZGVhZC1sZXR0ZXJlZCBvbmUgKGBwbHVnaW4uZGxxLnJlcGxheWApLiBCb3RoXG4gIC8vIHJlLXJ1biBhbiBpbWFnZSBidWlsZCArIHBsdWdpbiBwZXJzaXN0IG9uIHRoZSBjYWxsZXIncyBhdXRob3JpdHksIHNvIHRoZXlcbiAgLy8gYXJlIGF1ZGl0ZWQgbXV0YXRpb25zOyBgYWZmZWN0ZWRPcmdJZGAgY2FycmllcyB0aGUgam9iJ3Mgb3duaW5nIG9yZy5cbiAgJ3BsdWdpbi5idWlsZC5yZXRyeScsXG4gICdwbHVnaW4uZGxxLnJlcGxheScsXG4gIC8vIFBpcGVsaW5lIG11dGF0aW9ucyDigJQgZW1pdHRlZCBieSBhcGkvcGlwZWxpbmUncyByb3V0ZSBoYW5kbGVyc1xuICAvLyAoY3JlYXRlL3VwZGF0ZS9kZWxldGUgKyBDb2RlUGlwZWxpbmUgZXhlY3V0aW9uIHRyaWdnZXIvY2FuY2VsKSBhbmRcbiAgLy8gcG9zdGVkIHRvIHBsYXRmb3JtJ3MgYFBPU1QgL2F1ZGl0L2V2ZW50c2AgaW5nZXN0LlxuICAncGlwZWxpbmUuY3JlYXRlJyxcbiAgJ3BpcGVsaW5lLnVwZGF0ZScsXG4gICdwaXBlbGluZS5kZWxldGUnLFxuICAncGlwZWxpbmUucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBwdXJnZTogcGVybWFuZW50IGhhcmQtZGVsZXRlIG9mIGEgc29mdC1kZWxldGVkIHBpcGVsaW5lIC9cbiAgLy8gcGlwZWxpbmVfdGVtcGxhdGUgdG9tYnN0b25lIG9uIGRlbWFuZCAoZmluYWxpemVzIHdoYXQgdGhlIHJldGVudGlvbiBzd2VlcFxuICAvLyB3b3VsZCBvdGhlcndpc2UgZG8gbGF0ZXIpLiBgdGFyZ2V0SWRgIGlzIHRoZSBwdXJnZWQgaWQuXG4gICdwaXBlbGluZS5wdXJnZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5jcmVhdGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUudXBkYXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLmRlbGV0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5yZXN0b3JlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnB1cmdlJyxcbiAgJ3BpcGVsaW5lLmV4ZWN1dGlvbi5zdGFydCcsXG4gICdwaXBlbGluZS5leGVjdXRpb24uY2FuY2VsJyxcbiAgLy8gQ29kZVBpcGVsaW5lIEFSTi1yZWdpc3RyeSBjb25maWcgKGFwaS9waXBlbGluZSByZWdpc3RyeSByb3V0ZSkg4oCUIHJlZ2lzdGVyaW5nIC9cbiAgLy8gZGVyZWdpc3RlcmluZyB0aGUgZXh0ZXJuYWwgQ29kZVBpcGVsaW5lIHRoYXQgYmFja3MgYSBwaXBlbGluZSAoZGVwbG95LWFmZmVjdGluZykuXG4gICdwaXBlbGluZS5yZWdpc3RyeS5yZWdpc3RlcicsXG4gICdwaXBlbGluZS5yZWdpc3RyeS5kZXJlZ2lzdGVyJyxcbiAgLy8gUXVvdGEgYWRtaW5pc3RyYXRpb24gKGFwaS9xdW90YSkg4oCUIGEgc3VwZXJhZG1pbiByZXNldHRpbmcgYW4gb3JnJ3MgdXNhZ2VcbiAgLy8gY291bnRlciBvciBlZGl0aW5nIGl0cyB0aWVyIGxpbWl0cy4gYGFmZmVjdGVkT3JnSWRgIGlzIHRoZSBvcmcgY2hhbmdlZDtcbiAgLy8gYGRldGFpbHNgIGNhcnJpZXMgdGhlIHF1b3RhVHlwZSArIG9sZC9uZXcgdmFsdWUuXG4gICdxdW90YS5yZXNldCcsXG4gICdxdW90YS5saW1pdC51cGRhdGUnLFxuICAvLyBBIHN1cGVyYWRtaW4gZGVsZXRpbmcgYW4gb3JnJ3MgZW50aXJlIHF1b3RhIGRvY3VtZW50LlxuICAncXVvdGEuZGVsZXRlJyxcbiAgLy8gQ29tcGxpYW5jZSBhZG1pbmlzdHJhdGlvbiAoYXBpL2NvbXBsaWFuY2UpIOKAlCB0aGUgZW5mb3JjZW1lbnQtcG9zdHVyZSBzdXJmYWNlLlxuICAvLyBBcHByb3ZpbmcvcmV2b2tpbmcgYW4gZXhlbXB0aW9uLCB0b2dnbGluZy9hdXRob3JpbmcvZGVsZXRpbmcgYSBydWxlLFxuICAvLyBhdXRob3JpbmcvZGVsZXRpbmcgYSBwb2xpY3ksIG1hbmFnaW5nIHNjYW4gc2NoZWR1bGVzLCBhcHBseWluZyBhIHRlbXBsYXRlLFxuICAvLyBvciBjYW5jZWxsaW5nIGEgcnVubmluZyBzY2FuLiBgdGFyZ2V0SWRgIGlzIHRoZSBydWxlL3BvbGljeS9leGVtcHRpb24vc2NhbiBpZC5cbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLmFwcHJvdmUnLFxuICAnY29tcGxpYW5jZS5leGVtcHRpb24ucmV2b2tlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS50b2dnbGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgb24tZGVtYW5kIGhhcmQtZGVsZXRlIChQVVJHRSkgb2YgYSBzb2Z0LWRlbGV0ZWQgcnVsZS9wb2xpY3kgdG9tYnN0b25lIOKAlFxuICAvLyB0aGUgY2FsbGVyLWluaXRpYXRlZCBjb3VudGVycGFydCB0byB0aGUgcmV0ZW50aW9uIHN3ZWVwJ3MgYXV0by1wdXJnZS4gRGVzdHJveXNcbiAgLy8gdGhlIHRvbWJzdG9uZSBwZXJtYW5lbnRseSwgc28gaXQgY2FycmllcyB0aGUgZHVyYWJsZSwgdGFtcGVyLWV2aWRlbnQgdHJhaWwuXG4gICdjb21wbGlhbmNlLnJ1bGUucHVyZ2UnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kucmVzdG9yZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnRlbXBsYXRlLmFwcGx5JyxcbiAgLy8gTGF1bmNoaW5nIGFuIG9yZy13aWRlIHJlLWV2YWx1YXRpb24gKHRoZSBjb3VudGVycGFydCB0byBgLmNhbmNlbGApIOKAlCBpdFxuICAvLyBwZXJzaXN0cyBhIHNjYW4gYW5kIGNhbiBibG9jayBlbnRpdGllcyB0aGF0IHBhc3NlZCBiZWZvcmUuXG4gICdjb21wbGlhbmNlLnNjYW4uY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jYW5jZWwnLFxuICAvLyBQZXItb3JnIGNvbXBsaWFuY2Ugbm90aWZpY2F0aW9uIHNldHRpbmdzOiByZWNpcGllbnRzICsgdGhlIG91dGJvdW5kIHdlYmhvb2tcbiAgLy8gVVJML3NlY3JldC4gQmVhcmVyLWVxdWl2YWxlbnQgY29uZmlnIHRoYXQgcmVkaXJlY3RzIHZpb2xhdGlvbiBub3RpY2VzLCBzbyBhXG4gIC8vIGNoYW5nZSBjYXJyaWVzIHRoZSBkdXJhYmxlIHRyYWlsIChuZXZlciB0aGUgc2VjcmV0IGl0c2VsZikuXG4gICdjb21wbGlhbmNlLm5vdGlmaWNhdGlvbi1wcmVmZXJlbmNlLnVwZGF0ZScsXG4gIC8vIEltYWdlLXJlZ2lzdHJ5IGRlc3RydWN0aXZlIG9wcyAoYXBpL2ltYWdlLXJlZ2lzdHJ5KSDigJQgZ2FyYmFnZS1jb2xsZWN0aW9uXG4gIC8vIHN3ZWVwcyBhbmQgZXhwbGljaXQgaW1hZ2UvdGFnIGRlbGV0ZXMuXG4gICdyZWdpc3RyeS5nYycsXG4gICdyZWdpc3RyeS5pbWFnZS5kZWxldGUnLFxuICAvLyBDcm9zcy1yZXBvIHRhZy9pbWFnZSBjb3B5IChhcGkvaW1hZ2UtcmVnaXN0cnkgUE9TVCAvYXBpL2ltYWdlcy9jb3B5KS4gQVxuICAvLyBjcm9zcy10ZW5hbnQgY29weSBtb3ZlcyBkYXRhIGFjcm9zcyBjdXN0b21lciBib3VuZGFyaWVzLCBzbyBpdCBuZWVkcyB0aGVcbiAgLy8gZHVyYWJsZSwgdGFtcGVyLWV2aWRlbnQgdHJhaWwg4oCUIG5vdCBqdXN0IHRoZSBMb2tpIG9wZXJhdG9yIGxpbmUuXG4gICdyZWdpc3RyeS5pbWFnZS5jb3B5JyxcbiAgLy8gQSBwbHVnaW4gaW1hZ2Ugc2lnbmVkICsgU0JPTS1hdHRlc3RlZCBieSB0aGUgcGxhdGZvcm0ncyBwbHVnaW4tc2lnbmluZyBrZXlcbiAgLy8gKGFwaS9pbWFnZS1yZWdpc3RyeSBQT1NUIC9pbnRlcm5hbC9wbHVnaW4tc2lnbmF0dXJlcywgY2FsbGVkIGJ5IHRoZSBwbHVnaW5cbiAgLy8gYnVpbGQgd29ya2VyKS4gVGhlIGtleSBpcyB3aGF0IHN5bnRoIHRydXN0cywgc28gZXZlcnkgdXNlIGlzIG9uIHRoZSB0cmFpbC5cbiAgJ3JlZ2lzdHJ5LmltYWdlLnNpZ24nLFxuICAvLyBNZXNzYWdpbmcgKGFwaS9tZXNzYWdlKSDigJQgYWRtaW4gQlJPQURDQVNUIGFubm91bmNlbWVudHMgKyBkZXN0cnVjdGl2ZVxuICAvLyBkZWxldGVzLiAxOjEgdXNlciBtZXNzYWdlcyBhcmUgaW50ZW50aW9uYWxseSBOT1QgYXVkaXRlZCAobm9pc2UgKyB0aGV5IHdvdWxkXG4gIC8vIHB1bGwgcHJpdmF0ZSBjb250ZW50IGludG8gdGhlIHRyYWlsKS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHlcbiAgLy8gKHN1YmplY3QvdHlwZS9zY29wZSksIE5FVkVSIG1lc3NhZ2UgYm9keSBjb250ZW50LlxuICAnbWVzc2FnZS5hbm5vdW5jZW1lbnQuY3JlYXRlJyxcbiAgJ21lc3NhZ2UuZGVsZXRlJyxcbiAgJ21lc3NhZ2UucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBvbi1kZW1hbmQgUFVSR0UgKHBlcm1hbmVudCBoYXJkLWRlbGV0ZSkgb2YgYW4gYWxyZWFkeS1zb2Z0LWRlbGV0ZWRcbiAgLy8gbWVzc2FnZSB0b21ic3RvbmUg4oCUIHRoZSBkZXN0cnVjdGl2ZSBmaW5hbGl6ZXIgdGhlIHJldGVudGlvbiBzd2VlcCB3b3VsZFxuICAvLyBvdGhlcndpc2UgcGVyZm9ybSBhdCB0aGUgcHVyZ2UgZGVhZGxpbmUuIGBkZXRhaWxzYCBjYXJyeSBtZXRhZGF0YSBvbmx5LlxuICAnbWVzc2FnZS5wdXJnZScsXG4gIC8vIEJpbGxpbmcgKGFwaS9iaWxsaW5nKSDigJQgc3Vic2NyaXB0aW9uICsgZW50aXRsZW1lbnQgbXV0YXRpb25zLCBtaXJyb3JlZCB0byB0aGVcbiAgLy8gY2VudHJhbCBhdWRpdCB0cmFpbCAodGhlc2UgYWxzbyB3cml0ZSB0byB0aGUgc2VydmljZS1sb2NhbCBiaWxsaW5nX2V2ZW50c1xuICAvLyBjb2xsZWN0aW9uKS4gYGRldGFpbHNgIGNhcnJ5IHBsYW4vdGllci9hZGRvbiBpZHMgb25seSDigJQgbmV2ZXIgY2FyZC9wYXltZW50XG4gIC8vIHNlY3JldHMgb3IgYW4gQVdTIGFjY291bnQgaWQuXG4gIC8vIFN1YnNjcmlwdGlvbiBsaWZlY3ljbGUgYSBDVVNUT01FUiBkcml2ZXMgKHRoZSBhZG1pbiBjb3VudGVycGFydCBpc1xuICAvLyBgYmlsbGluZy50aWVyLm92ZXJyaWRlYCk6IHNlbGYtc2VydmUgY3JlYXRlIChkaXJlY3Qgb3IgTWFya2V0cGxhY2UgY2xhaW0pLFxuICAvLyBwbGFuL2ludGVydmFsIGNoYW5nZSwgY2FuY2VsLWF0LXBlcmlvZC1lbmQsIHVuZG8tY2FuY2VsLCBjYXNjYWRlIGRlbGV0ZS5cbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24ucmVhY3RpdmF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5jYW5jZWwnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uZGVsZXRlJyxcbiAgJ2JpbGxpbmcudGllci5vdmVycmlkZScsXG4gIC8vIE9wZXJhdG9yLW9ubHkgcmVzZWVkIG9mIHRoZSBpbnZvaWNlIGxlZGdlciBmcm9tIHRoZSBwYXltZW50IHByb3ZpZGVyJ3NcbiAgLy8gaGlzdG9yeSAoUE9TVCAvYmlsbGluZy9hZG1pbi9iYWNrZmlsbCkg4oCUIG11dGF0ZXMgZmluYW5jZSBkYXRhIGZsZWV0LXdpZGUuXG4gICdiaWxsaW5nLmFkZG9uLmFkZCcsXG4gICdiaWxsaW5nLmFkZG9uLnJlbW92ZScsXG4gIC8vIFN5c3RlbS1pbml0aWF0ZWQgcmVtb3ZhbCBvZiBhIHRpZXItaW5jbHVkZWQgYWRkLW9uIG9uIGEgcGxhbiB1cGdyYWRlICh0aGVcbiAgLy8gYWNjb3VudCdzIG5ldyB0aWVyIG5vdyBidW5kbGVzIHRoZSBmZWF0dXJlKSDigJQgZGlzdGluY3QgZnJvbSBhIHVzZXItaW5pdGlhdGVkXG4gIC8vIGByZW1vdmVgIHNvIGZpbmFuY2UgY2FuIHRlbGwgYW4gYXV0by1wcnVuZSBmcm9tIGEgY3VzdG9tZXIgYWN0aW9uLlxuICAnYmlsbGluZy5hZGRvbi5wcnVuZScsXG4gIC8vIERpc2NvdW50cyAoZG9jcy9iaWxsaW5nLWRpc2NvdW50cy5tZCkg4oCUIG1pbnQvaXNzdWUvYXBwbHkvcmVtb3ZlL3Jldm9rZSBvZiBhXG4gIC8vIHByaWNlIGNvdXBvbiBvciB1c2FnZSBjcmVkaXQuIGBkZXRhaWxzYCBjYXJyeSB0aGUgZGlzY291bnQgaWQgKyBraW5kL3ZhbHVlXG4gIC8vIG9ubHksIG5ldmVyIHRoZSBvcGFxdWUgdG9rZW4gb3Igc2lnbmluZyBrZXkuXG4gICdiaWxsaW5nLmRpc2NvdW50LmdlbmVyYXRlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQuaXNzdWUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5hcHBseScsXG4gICdiaWxsaW5nLmRpc2NvdW50LnJlbW92ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50LnJldm9rZScsXG4gIC8vIFByb21vdGlvbnMgKGRvY3MvYmlsbGluZy1kaXNjb3VudHMubWQjcHJvbW90aW9ucykg4oCUIHJ1bGUtZHJpdmVuIGF1dG8tZ3JhbnRcbiAgLy8gY2FtcGFpZ25zLiBgZGV0YWlsc2AgY2FycnkgdGhlIHByb21vdGlvbiBpZCArIGNlbnRzL2V2ZW50IG9ubHkuXG4gICdiaWxsaW5nLnByb21vdGlvbi5jcmVhdGUnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24udXBkYXRlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLnJldm9rZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi5ncmFudCcsXG4gICdiaWxsaW5nLnByb21vdGlvbi5hY3RpdmF0ZScsXG4gIC8vIFVzYWdlLWNyZWRpdCByZWFsaXphdGlvbiDigJQgYSBjdXN0b21lci9jb21wbGlhbmNlLXZpc2libGUgcmVjb3JkIG9mIGNyZWRpdFxuICAvLyBtb3ZlbWVudDogYGNvbnN1bWVkYCAoTWFya2V0cGxhY2UgbWV0ZXJlZCBkcmF3ZG93biksIGBleGhhdXN0ZWRgIChiYWxhbmNlIGhpdFxuICAvLyB6ZXJvKSwgYW5kIGEgY29tYm8gZW5kaW5nLiBgZGV0YWlsc2AgY2FycnkgY2VudHMvaWRzIG9ubHksIG5vIHBheW1lbnQgc2VjcmV0cy5cbiAgJ2JpbGxpbmcuY3JlZGl0LmNvbnN1bWVkJyxcbiAgJ2JpbGxpbmcuY3JlZGl0LmV4aGF1c3RlZCcsXG4gICdiaWxsaW5nLmNvbWJvLmV4cGlyZWQnLFxuICAvLyBSZXBvcnRpbmcgKGFwaS9yZXBvcnRpbmcpIOKAlCB0aGUgdGhyZWUgcmVwb3J0aW5nIG11dGF0aW9ucyB3aG9zZSBlZmZlY3RcbiAgLy8gb3V0bGl2ZXMgYSByZXF1ZXN0IGxvZzogdGhlIHBlci1vcmcgY29ycmVsYXRpb24td2luZG93IGNvbmZpZyB3cml0ZSwgYVxuICAvLyBwb3N0LWRlcGxveSBvdXRjb21lIG1hcmtlciAoaXQgbW92ZXMgdGhlIG9yZydzIERPUkEgQ0ZSL01UVFIpLCBhbmQgdGhlXG4gIC8vIGluYm91bmQgYmlsbGluZ+KGknJlcG9ydGluZyByZXRlbnRpb24tZW50aXRsZW1lbnQgc3luYyAoYSByZXRlbnRpb24gY3V0IGlzIGFcbiAgLy8gZGF0YS1kZXN0cm95aW5nIGNoYW5nZSBhcHBsaWVkIGJ5IHRoZSBuZXh0IHN3ZWVwKS4gYGRldGFpbHNgIGNhcnJ5IHRoZVxuICAvLyBzZXR0aW5ncy9vdXRjb21lIHZhbHVlcyBvbmx5LlxuICAncmVwb3J0aW5nLnNldHRpbmdzLnVwZGF0ZScsXG4gICdyZXBvcnRpbmcuZGVwbG95bWVudC5vdXRjb21lJyxcbiAgJ3JlcG9ydGluZy5yZXRlbnRpb24uc3luYycsXG4gIC8vIFN0YWtlaG9sZGVyIHJlcG9ydHMg4oCUIHRoZSBhZGQtb24ncyBhdXRob3JpbmcgYW5kIFBVQkxJU0hJTkcgc3VyZmFjZS4gUHVibGlzaGluZ1xuICAvLyBpcyB0aGUgbW9tZW50IGludGVybmFsIGRlbGl2ZXJ5IG51bWJlcnMgbGVhdmUgdGhlIHBsYXRmb3JtLCBzbyB0aGUgd2hvbGVcbiAgLy8gb3V0d2FyZCBwYXRoIGlzIGF1ZGl0YWJsZTogd2hpY2ggcmVwb3J0LCB3aGljaCBwZXJpb2QncyBmcm96ZW4gc25hcHNob3QsXG4gIC8vIHdoaWNoIHZlcnNpb24sIGFuZCB3aG8gbGV0IGl0IG91dC4gYGxpbmsuY3JlYXRlZGAgLyBgbGluay5yZXZva2VkYCBjb3ZlciB0aGVcbiAgLy8gVVJMcyB0aGF0IGxldCBzb21lb25lIHdpdGhvdXQgYW4gYWNjb3VudCByZWFkIGl0OyBgcmVjaXBpZW50LmFkZGVkYCAvXG4gIC8vIGByZWNpcGllbnQucmVtb3ZlZGAgY292ZXIgd2hvIGlzIG9uIHRoZSBkaXN0cmlidXRpb24gbGlzdCwgd2hpY2ggaXMgdGhlIG90aGVyXG4gIC8vIHdheSBkYXRhIHJlYWNoZXMgYSBwZXJzb24uIGBvd25lcnNoaXAudHJhbnNmZXJgIGlzIGEgcHJpdmlsZWdlIG1vdmU6IGFcbiAgLy8gc2NoZWR1bGVkIHJ1biBpcyBhdXRob3JpemVkIGFzIGl0cyBPV05FUiwgc28gaGFuZGluZyBhIGRlZmluaXRpb24gb3ZlciBoYW5kc1xuICAvLyBvdmVyIHdob3NlIGFjY2VzcyB0aGUgbnVtYmVycyBhcmUgY29tcHV0ZWQgd2l0aC5cbiAgLy9cbiAgLy8gRGVsaWJlcmF0ZWx5IE5PVCBhdWRpdGVkOiByZWFkaW5nIGEgc2hhcmVkIHJlcG9ydC4gVGhlIGFjY2VzcyBpcyBsb2dnZWQgYW5kXG4gIC8vIGNvdW50ZWQgcGVyIGxpbmssIGJ1dCBpdCBpcyBhbiBVTkFVVEhFTlRJQ0FURUQsIGV4dGVybmFsbHktdHJpZ2dlcmVkIGV2ZW50IOKAlFxuICAvLyBhbnlvbmUgaG9sZGluZyBhIFVSTCBjb3VsZCBvdGhlcndpc2Ugd3JpdGUgdW5ib3VuZGVkIHJvd3MgaW50byB0aGUgb3JnJ3MgYXVkaXRcbiAgLy8gdHJhaWwsIHdoaWNoIHR1cm5zIGEgcmVhZCBpbnRvIGEgd2F5IHRvIGJ1cnkgdGhlIGVudHJpZXMgdGhhdCBtYXR0ZXIuXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24uY3JlYXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi51cGRhdGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLmRlbGV0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0Lm93bmVyc2hpcC50cmFuc2ZlcicsXG4gICdyZXBvcnRpbmcucmVwb3J0LnB1Ymxpc2hlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlcHVibGlzaGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5jcmVhdGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5yZXZva2VkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LmFkZGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnJlbW92ZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5wb2xpY3kudXBkYXRlJyxcbiAgLy8gQSBkZWZpbml0aW9uIFNUT1BQRUQgcHJvZHVjaW5nIHJlcG9ydHMgd2l0aG91dCBhbnlvbmUgYXNraW5nIGl0IHRvOiB0aGUgb3duZXJcbiAgLy8gd2FzIGRlYWN0aXZhdGVkIG9yIHJlbW92ZWQsIG9yIGxvc3QgdGhlIHBlcm1pc3Npb24gYSBydW4gaXMgYXV0aG9yaXplZCB3aXRoLlxuICAvLyBSZWNvcmRlZCBiZWNhdXNlIHRoZSBlZmZlY3QgaXMgc2lsZW50IOKAlCBhIG1hbmFnZXIgZmluZHMgb3V0IGJ5IG5vdCByZWNlaXZpbmdcbiAgLy8gdGhlIHJlcG9ydCDigJQgc28gdGhlIHRyYWlsIGhhcyB0byBzYXkgd2hpY2ggcmVwb3J0cyBzdG9wcGVkIGFuZCB3aHkuXG4gICdyZXBvcnRpbmcucmVwb3J0LnBhdXNlZCcsXG4gIC8vIOKApmFuZCBzdGFydGVkIGFnYWluLiBJdHMgb3duIGFjdGlvbiByYXRoZXIgdGhhbiBhIGRldGFpbCBvbiB0aGUgcGF1c2UsIGJlY2F1c2UgdGhlXG4gIC8vIHF1ZXN0aW9uIGEgcmV2aWV3ZXIgYXNrcyBpcyBcIndhcyB0aGlzIGFjY291bnQncyByZXBvcnRpbmcgb2ZmIGJldHdlZW4gdGhlc2UgdHdvXG4gIC8vIGRhdGVzXCIsIGFuZCBhbnN3ZXJpbmcgaXQgZnJvbSBhIHNpbmdsZSBhY3Rpb24ncyBkZXRhaWxzIG1lYW5zIHJlYWRpbmcgZXZlcnkgcm93LlxuICAncmVwb3J0aW5nLnJlcG9ydC5yZXN1bWVkJyxcbiAgLy8gRGVuaWVkIGF1dGhvcml6YXRpb24gYXR0ZW1wdCDigJQgZW1pdHRlZCBiZXN0LWVmZm9ydCBieSB0aGUgc2hhcmVkXG4gIC8vIGByZXF1aXJlUGVybWlzc2lvbmAgLyBgcmVxdWlyZVN5c3RlbUFkbWluYCBnYXRlIHdoZW4gYSBzdGF0ZS1jaGFuZ2luZ1xuICAvLyAobm9uLUdFVCkgcmVxdWVzdCBpcyByZWplY3RlZCwgc28gcHJvYmluZy9lc2NhbGF0aW9uIGF0dGVtcHRzIGFyZSB2aXNpYmxlXG4gIC8vIHJhdGhlciB0aGFuIGludmlzaWJsZS4gYGRldGFpbHNgIGNhcnJpZXMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb24gKyBwYXRoO1xuICAvLyBgb3V0Y29tZWAgaXMgJ2ZhaWx1cmUnLlxuICAnYXV0aHouZGVuaWVkJyxcbiAgLy8gXCJBc2tcIiBhc3Npc3RhbnQgYWN0aXZpdHkg4oCUIHZpc2liaWxpdHkgaW50byB3aGF0IHRoZSBhc3Npc3RhbnQgZGlkIG9uIGEgdXNlcidzXG4gIC8vIGJlaGFsZi4gYGFzay5xdWVyeWAgaXMgYSByZWFkLW9ubHkgaG93LXRvIHR1cm47IGBhc2suYWdlbnQudHVybmAgaXMgYSB0b29sLWNhbGxpbmdcbiAgLy8gdHVybi4gYGRldGFpbHNgIGNhcnJ5IFNBRkUgTUVUQURBVEEgT05MWSAodG9vbHMgdXNlZCwgcHJvcG9zYWwga2luZHMsIHF1ZXJ5XG4gIC8vIGxlbmd0aCwgb3V0Y29tZSksIG5ldmVyIHRoZSByYXcgcXVlcnkgdGV4dC5cbiAgJ2Fzay5xdWVyeScsXG4gICdhc2suYWdlbnQudHVybicsXG4gIC8vIFBsdWdpbiBlY29zeXN0ZW0gKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpLiBHb3Zlcm5hbmNlIGFjdGlvbnNcbiAgLy8gYXJlIHJlY29yZGVkIHdpdGggYG9yZ0lkYCA9IHRoZSBzeXN0ZW0gb3JnOyBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlXG4gIC8vIHB1Ymxpc2hlcidzIG9yZyAobGlzdGluZy92ZXJzaW9uL3Jldmlldy9hZHZpc29yeS9wdWJsaXNoZXIgbW9kZXJhdGlvbikgb3JcbiAgLy8gdGhlIGluc3RhbGxpbmcgb3JnIChpbnN0YWxscyArIHBvbGljeSkuIEFub255bW91cyBzdWJtaXNzaW9ucyB1c2UgdGhlXG4gIC8vIGBBTk9OWU1PVVNfQUNUT1JfSURgIGFjdG9yIHdpdGggYGRldGFpbHMuc3VibWlzc2lvbklkYC4gYGRldGFpbHNgIGNhcnJ5IGlkcyxcbiAgLy8gdmVyc2lvbnMsIGRpZ2VzdHMsIHRpZXIsIHN0YXRlIGFuZCByZWFzb24gY29kZXMgb25seSDigJQgbmV2ZXIgcmV2aWV3IGJvZGllcyxcbiAgLy8gUkVBRE1FIGNvbnRlbnQsIHNlY3JldHMgb3IgZW1haWxzLlxuICAvLyBQdWJsaXNoZXJzLlxuICAncHVibGlzaGVyLmNyZWF0ZScsXG4gICdwdWJsaXNoZXIudXBkYXRlJyxcbiAgJ3B1Ymxpc2hlci50ZXJtcy5hY2NlcHQnLFxuICAncHVibGlzaGVyLnZlcmlmeS5yZXF1ZXN0JyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIudmVyaWZ5LnJlamVjdCcsXG4gICdwdWJsaXNoZXIudGllci5jaGFuZ2UnLFxuICAncHVibGlzaGVyLnN1c3BlbmQnLFxuICAncHVibGlzaGVyLnVuc3VzcGVuZCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIucmVxdWVzdCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuYWNjZXB0JyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5kZWNsaW5lJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5yZWplY3QnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLnJlamVjdCcsXG4gIC8vIFB1Ymxpc2ggcmVxdWVzdHMgKHRlbmFudCDihpIgc3lzdGVtIG9yZykuIGBkZXRhaWxzLmtpbmRgIG5hbWVzIHRoZSByZXF1ZXN0LlxuICAncGx1Z2luLnJlcXVlc3Quc3VibWl0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LndpdGhkcmF3JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3Quc2Vjb25kLWFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3QucmVqZWN0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmF1dG8tYXBwcm92ZScsXG4gIC8vIExpc3RpbmdzIGFuZCB2ZXJzaW9ucyAoc3lzdGVtIG9yZywgZXhjZXB0IHRoZSB0ZW5hbnQgcGF1c2UpLlxuICAncGx1Z2luLmxpc3RpbmcucHVibGlzaCcsXG4gICdwbHVnaW4ubGlzdGluZy51bmxpc3QnLFxuICAncGx1Z2luLmxpc3RpbmcudXBkYXRlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnN0YXRlLmNoYW5nZScsXG4gICdwbHVnaW4ubGlzdGluZy5wYXVzZScsXG4gICdwbHVnaW4ubGlzdGluZy51bnBhdXNlJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLnBhdXNlJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLnlhbmsnLFxuICAncGx1Z2luLnZlcnNpb24udW55YW5rJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLmRlcHJlY2F0ZScsXG4gICdwbHVnaW4uY29sbGVjdGlvbi51cGRhdGUnLFxuICAvLyBFY29zeXN0ZW0gY29uZmlndXJhdGlvbiAoc3lzdGVtIG9yZykuXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLmNyZWF0ZScsXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLnVwZGF0ZScsXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLmRlbGV0ZScsXG4gICdlY29zeXN0ZW0ucmVzZXJ2ZWQtbmFtZS51cGRhdGUnLFxuICAnZWNvc3lzdGVtLnNsYS51cGRhdGUnLFxuICAvLyBQdWJsaWMgcmVnaXN0cnkgbmFtZXNwYWNlIChgcHVibGljLypgKTogY29weSArIHNpZ24gKyBhdHRlc3Qgb24gcHVibGlzaCxcbiAgLy8gdGhlIHRpZXItY2hhbmdlL3N1c3BlbnNpb24gcmUtc2lnbiBqb2IsIHRhZyByZW1vdmFsIG9uIHlhbmsvdGFrZWRvd24sIGFuZFxuICAvLyB0aGUgcmV0ZW50aW9uIHN3ZWVwLlxuICAncmVnaXN0cnkuaW1hZ2UucHVibGlzaCcsXG4gICdyZWdpc3RyeS5pbWFnZS5yZXNpZ24nLFxuICAncmVnaXN0cnkuaW1hZ2UueWFuaycsXG4gICdyZWdpc3RyeS5pbWFnZS5nYycsXG4gIC8vIEluc3RhbGxzIGFuZCB0aGUgaW5zdGFsbGluZyBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgKG9yZy1sb2NhbCkuXG4gICdwbHVnaW4uaW5zdGFsbC5yZXF1ZXN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmFwcHJvdmUnLFxuICAncGx1Z2luLmluc3RhbGwuZGVueScsXG4gICdwbHVnaW4uaW5zdGFsbC5jcmVhdGUnLFxuICAncGx1Z2luLmluc3RhbGwudXBncmFkZScsXG4gIC8vIEEgbWVtYmVyJ3MgcmVxdWVzdCB0byBjaGFuZ2UgYW4gaW5zdGFsbCBwYXN0IHdoYXQgdGhleSBtYXkgZG8gYWxvbmUsIGFuZCBpdHMgZGVjaXNpb24uXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVxdWVzdCcsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtYXBwcm92ZScsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVqZWN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLnJlbW92ZScsXG4gICdvcmcucGx1Z2luLWluc3RhbGwtcG9saWN5LnVwZGF0ZScsXG4gIC8vIFJldmlld3MgYW5kIHJlcGxpZXMuXG4gICdwbHVnaW4ucmV2aWV3LmNyZWF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnVwZGF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LmRlbGV0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcG9ydCcsXG4gICdwbHVnaW4ucmV2aWV3LmhvbGQnLFxuICAncGx1Z2luLnJldmlldy5yZWxlYXNlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVtb3ZlJyxcbiAgJ3BsdWdpbi5yZXZpZXcuYW5vbnltaXplJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkudXBkYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuZGVsZXRlJyxcbiAgLy8gQW5vbnltb3VzIHN1Ym1pc3Npb25zLlxuICAncGx1Z2luLnN1Ym1pc3Npb24uY3JlYXRlJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLnZlcmlmeScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5nYXRlLWZhaWwnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uYXBwcm92ZScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5yZWplY3QnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uY2xhaW0nLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uZXhwaXJlJyxcbiAgLy8gU2VjdXJpdHkgYWR2aXNvcmllcyAocHVibGlzaC93aXRoZHJhdyBhcmUgc3lzdGVtLW9yZyBvbmx5OyB1cGRhdGUgPSBhXG4gIC8vIG1vZGVyYXRvciBlZGl0aW5nIGEgZHJhZnQgYmVmb3JlIGl0IGlzIHB1Ymxpc2hlZCkuXG4gICdwbHVnaW4uYWR2aXNvcnkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS51cGRhdGUnLFxuICAncGx1Z2luLmFkdmlzb3J5LnB1Ymxpc2gnLFxuICAncGx1Z2luLmFkdmlzb3J5LndpdGhkcmF3JyxcbiAgLy8gUGVyLW9yZyBwbHVnaW4gc2VjdXJpdHkgbm90aWZpY2F0aW9ucyAocGx1Z2luIHNjYW4gZ2F0ZXMpOiB0aGUgc2V0dGluZ3NcbiAgLy8gKHJlY2lwaWVudHMsIGRpZ2VzdCwgd2ViaG9vaywgZXh0ZXJuYWwgYWRkcmVzcyDigJQgY2hhbmdlZCBmaWVsZCBuYW1lcyBhbmRcbiAgLy8gdGhlIHdlYmhvb2sgaG9zdCBvbmx5LCBuZXZlciB0aGUgc2VjcmV0IG9yIHRoZSBhZGRyZXNzKSwgYW4gZXh0ZXJuYWxcbiAgLy8gYWRkcmVzcyBjb25maXJtZWQgdGhyb3VnaCBpdHMgZW1haWxlZCBzaW5nbGUtdXNlIGxpbmssIGFuZCBhIHRlc3Qgc2VuZC5cbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLnVwZGF0ZScsXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy5leHRlcm5hbF9lbWFpbC52ZXJpZnknLFxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMudGVzdCcsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZW1vdGVBdWRpdEFjdGlvbiA9IHR5cGVvZiBSRU1PVEVfQVVESVRfQUNUSU9OU1tudW1iZXJdO1xuXG4vKiogV2hldGhlciBgdmFsdWVgIGlzIGFuIGFjdGlvbiBhIHJlbW90ZSBzZXJ2aWNlIG1heSBlbWl0ICh0aGUgaW5nZXN0IGFsbG93LWxpc3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlQXVkaXRBY3Rpb24odmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFJlbW90ZUF1ZGl0QWN0aW9uIHtcbiAgcmV0dXJuIChSRU1PVEVfQVVESVRfQUNUSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuIl19
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcmVtb3RlLWF1ZGl0LWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBR0g7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsc0JBQXNCO0lBQ3RCLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQix1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsa0VBQWtFO0lBQ2xFLHlFQUF5RTtJQUN6RSxvQkFBb0I7SUFDcEIsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxxRUFBcUU7SUFDckUsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQiw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGVBQWU7SUFDZiw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLHVFQUF1RTtJQUN2RSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGdFQUFnRTtJQUNoRSxxRUFBcUU7SUFDckUsb0RBQW9EO0lBQ3BELGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixtRUFBbUU7SUFDbkUsNEVBQTRFO0lBQzVFLDBEQUEwRDtJQUMxRCxnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMkJBQTJCO0lBQzNCLHlCQUF5QjtJQUN6Qiww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QyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHJlbW90ZSAobm9uLXBsYXRmb3JtKSBhdWRpdCBBQ1RJT04gVk9DQUJVTEFSWS5cbiAqXG4gKiBLZXB0IGFwYXJ0IGZyb20gdGhlIGNsaWVudCB0aGF0IHNoaXBzIHRoZSBldmVudHMgKGBzZXJ2aWNlcy9yZW1vdGUtYXVkaXQtY2xpZW50LnRzYClcbiAqIGJlY2F1c2UgaXQgaXMgYW4gYWxsb3ctbGlzdCwgbm90IG1hY2hpbmVyeTogaXQgaXMgdGhlIHRoaW5nIGEgcmV2aWV3ZXIgcmVhZHNcbiAqIGVuZCB0byBlbmQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIGEgc2VydmljZSBtYXkgZW1pdCBhIGdpdmVuIGFjdGlvbiwgYW5kIGl0IGlzXG4gKiB3aGF0IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBhZ2FpbnN0LlxuICovXG5cblxuLyoqXG4gKiBUaGUgZXhhY3Qgc2V0IG9mIGF1ZGl0IGFjdGlvbnMgYSBOT04tUExBVEZPUk0gKHJlbW90ZSkgc2VydmljZSBpcyBwZXJtaXR0ZWQgdG9cbiAqIGVtaXQgdGhyb3VnaCBgUE9TVCAvYXVkaXQvZXZlbnRzYC4gVGhpcyBpcyB0aGUgU0lOR0xFIFNPVVJDRSDigJQgYFJlbW90ZUF1ZGl0QWN0aW9uYFxuICogaXMgZGVyaXZlZCBmcm9tIGl0LCBzbyB0aGUgdHlwZSBhbmQgdGhlIHJ1bnRpbWUgYWxsb3ctbGlzdCBjYW4gbmV2ZXIgZHJpZnQuXG4gKlxuICogU0VDVVJJVFk6IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBgYWN0aW9uYCBhZ2FpbnN0IHRoaXMgc3Vic2V0ICh2aWFcbiAqIHtAbGluayBpc1JlbW90ZUF1ZGl0QWN0aW9ufSksIE5PVCB0aGUgZnVsbCBwbGF0Zm9ybSBgQXVkaXRBY3Rpb25gIHVuaW9uIOKAlCBhXG4gKiBgc2VydmljZToqYCB0b2tlbiBtdXN0IG5vdCBiZSBhYmxlIHRvIGZvcmdlIHBsYXRmb3JtLWF1dGhvcml0eSBldmVudHNcbiAqIChgYWRtaW4uc3VwZXJhZG1pbi5ncmFudGAsIGBvcmcub3duZXJzaGlwLnRyYW5zZmVyYCwgYHVzZXIubG9naW5gLCDigKYpLiBLZWVwXG4gKiB0aGlzIGxpc3QgZnJlZSBvZiBhbnkgcGxhdGZvcm0tb25seSBhY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSRU1PVEVfQVVESVRfQUNUSU9OUyA9IFtcbiAgJ3BsdWdpbi5idWlsZC5jb21wbGV0ZWQnLFxuICAncGx1Z2luLmJ1aWxkLmZhaWxlZCcsXG4gICdwbHVnaW4uYnVpbGQudGltZW91dCcsXG4gIC8vIEEgdmVyc2lvbiBwZXJzaXN0ZWQgVU5TQ0FOTkVEIGJlY2F1c2UgdGhlIGJ1aWxkLXRpbWUgc2NhbiBjb3VsZCBub3QgcnVuIGFuZFxuICAvLyB0aGUgb3BlcmF0b3IgZXNjYXBlIGhhdGNoIGBQTFVHSU5fQUxMT1dfVU5TQ0FOTkVEYCBpcyBvbiAod2l0aG91dCBpdCB0aGVcbiAgLy8gYnVpbGQgZmFpbHMgYElNQUdFX1NDQU5fVU5BVkFJTEFCTEVgKS4gYGRldGFpbHNgIGNhcnJ5IG5hbWUvdmVyc2lvbi9kaWdlc3QuXG4gICdwbHVnaW4uc2Nhbi5za2lwcGVkJyxcbiAgLy8gRml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncyB3ZXJlIEVYRU1QVEVEIGZyb20gdGhlIHBsYXRmb3JtIGZsb29yIGJ5IGFcbiAgLy8gYFBMVUdJTl9WVUxOX1dBSVZFUlNgIGVudHJ5LCBzbyBhIGJ1aWxkIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgZmFpbGVkXG4gIC8vIFBMVUdJTl9WVUxOX0dBVEUgd2FzIGFsbG93ZWQgdGhyb3VnaC4gVGhlIG90aGVyIGhhbGYgb2YgcGx1Z2luLnNjYW4uc2tpcHBlZDpcbiAgLy8gYm90aCBhcmUgb3BlcmF0b3IgZXNjYXBlIGhhdGNoZXMgdGhhdCBjaGFuZ2UgYSBnYXRlJ3MgdmVyZGljdCwgYW5kIGEgbWV0cmljXG4gIC8vIGFuZCBhIGxvZyBsaW5lIGFyZSBub3QgYSBkdXJhYmxlIHJlY29yZCBvZiBvbmUuIGBkZXRhaWxzYCBjYXJyeVxuICAvLyBuYW1lL3ZlcnNpb24vZGlnZXN0LCBob3cgbWFueSBmaW5kaW5ncyB3ZXJlIHdhaXZlZCBhbmQgd2hpY2ggcGFja2FnZXMuXG4gICdwbHVnaW4udnVsbi53YWl2ZWQnLFxuICAvLyBQbHVnaW4gbGlmZWN5Y2xlIG11dGF0aW9ucyAoYXBpL3BsdWdpbiByb3V0ZSBoYW5kbGVycykg4oCUIHRoZSBkZXN0cnVjdGl2ZSAvXG4gIC8vIHB1Ymxpc2hpbmcgc3VyZmFjZSB0aGF0IGJ1aWxkcyBhbHJlYWR5IGF1ZGl0J3MgY291bnRlcnBhcnQ6IHJlZ2lzdHJ5IGRlbGV0ZSxcbiAgLy8gc291cmNlIHVwbG9hZCwgYW5kIGRlcGxveS10by1jbHVzdGVyLiBgdGFyZ2V0SWRgIGlzIHRoZSBwbHVnaW4gaWQuXG4gICdwbHVnaW4uZGVsZXRlJyxcbiAgJ3BsdWdpbi5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGx1Z2luIHRvbWJzdG9uZSBvblxuICAvLyBkZW1hbmQgKGZpbmFsaXplcyB3aGF0IHRoZSByZXRlbnRpb24gc3dlZXAgd291bGQgb3RoZXJ3aXNlIGRvIGxhdGVyKS5cbiAgJ3BsdWdpbi5wdXJnZScsXG4gICdwbHVnaW4udXBkYXRlJyxcbiAgJ3BsdWdpbi51cGxvYWQnLFxuICAncGx1Z2luLmRlcGxveScsXG4gIC8vIFBsdWdpbiBidWxrIG11dGF0aW9ucyAoYXBpL3BsdWdpbiBidWxrLXBsdWdpbiByb3V0ZSkgKyBETFEgcHVyZ2UgKGRyb3BzIGFsbFxuICAvLyBkZWFkLWxldHRlcmVkIGJ1aWxkIGpvYnMsIGNyb3NzLW9yZywgc3lzYWRtaW4pLiBgZGV0YWlsc2AgY2FycmllcyBjb3VudHMuXG4gICdwbHVnaW4uYnVsay51cGRhdGUnLFxuICAncGx1Z2luLmJ1bGsuZGVsZXRlJyxcbiAgJ3BsdWdpbi5kbHEucHVyZ2UnLFxuICAvLyBCdWlsZCByZS1ydW5zIGZyb20gdGhlIHF1ZXVlLXRyaWFnZSBzdXJmYWNlOiByZS1lbnF1ZXVlIGEgRkFJTEVEIGJ1aWxkXG4gIC8vIChgcGx1Z2luLmJ1aWxkLnJldHJ5YCkgb3IgYSBkZWFkLWxldHRlcmVkIG9uZSAoYHBsdWdpbi5kbHEucmVwbGF5YCkuIEJvdGhcbiAgLy8gcmUtcnVuIGFuIGltYWdlIGJ1aWxkICsgcGx1Z2luIHBlcnNpc3Qgb24gdGhlIGNhbGxlcidzIGF1dGhvcml0eSwgc28gdGhleVxuICAvLyBhcmUgYXVkaXRlZCBtdXRhdGlvbnM7IGBhZmZlY3RlZE9yZ0lkYCBjYXJyaWVzIHRoZSBqb2IncyBvd25pbmcgb3JnLlxuICAncGx1Z2luLmJ1aWxkLnJldHJ5JyxcbiAgJ3BsdWdpbi5kbHEucmVwbGF5JyxcbiAgLy8gUGlwZWxpbmUgbXV0YXRpb25zIOKAlCBlbWl0dGVkIGJ5IGFwaS9waXBlbGluZSdzIHJvdXRlIGhhbmRsZXJzXG4gIC8vIChjcmVhdGUvdXBkYXRlL2RlbGV0ZSArIENvZGVQaXBlbGluZSBleGVjdXRpb24gdHJpZ2dlci9jYW5jZWwpIGFuZFxuICAvLyBwb3N0ZWQgdG8gcGxhdGZvcm0ncyBgUE9TVCAvYXVkaXQvZXZlbnRzYCBpbmdlc3QuXG4gICdwaXBlbGluZS5jcmVhdGUnLFxuICAncGlwZWxpbmUudXBkYXRlJyxcbiAgJ3BpcGVsaW5lLmRlbGV0ZScsXG4gICdwaXBlbGluZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGlwZWxpbmUgL1xuICAvLyBwaXBlbGluZV90ZW1wbGF0ZSB0b21ic3RvbmUgb24gZGVtYW5kIChmaW5hbGl6ZXMgd2hhdCB0aGUgcmV0ZW50aW9uIHN3ZWVwXG4gIC8vIHdvdWxkIG90aGVyd2lzZSBkbyBsYXRlcikuIGB0YXJnZXRJZGAgaXMgdGhlIHB1cmdlZCBpZC5cbiAgJ3BpcGVsaW5lLnB1cmdlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLmNyZWF0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS51cGRhdGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUuZGVsZXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnJlc3RvcmUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUucHVyZ2UnLFxuICAncGlwZWxpbmUuZXhlY3V0aW9uLnN0YXJ0JyxcbiAgJ3BpcGVsaW5lLmV4ZWN1dGlvbi5jYW5jZWwnLFxuICAvLyBDb2RlUGlwZWxpbmUgQVJOLXJlZ2lzdHJ5IGNvbmZpZyAoYXBpL3BpcGVsaW5lIHJlZ2lzdHJ5IHJvdXRlKSDigJQgcmVnaXN0ZXJpbmcgL1xuICAvLyBkZXJlZ2lzdGVyaW5nIHRoZSBleHRlcm5hbCBDb2RlUGlwZWxpbmUgdGhhdCBiYWNrcyBhIHBpcGVsaW5lIChkZXBsb3ktYWZmZWN0aW5nKS5cbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LnJlZ2lzdGVyJyxcbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LmRlcmVnaXN0ZXInLFxuICAvLyBRdW90YSBhZG1pbmlzdHJhdGlvbiAoYXBpL3F1b3RhKSDigJQgYSBzdXBlcmFkbWluIHJlc2V0dGluZyBhbiBvcmcncyB1c2FnZVxuICAvLyBjb3VudGVyIG9yIGVkaXRpbmcgaXRzIHRpZXIgbGltaXRzLiBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlIG9yZyBjaGFuZ2VkO1xuICAvLyBgZGV0YWlsc2AgY2FycmllcyB0aGUgcXVvdGFUeXBlICsgb2xkL25ldyB2YWx1ZS5cbiAgJ3F1b3RhLnJlc2V0JyxcbiAgJ3F1b3RhLmxpbWl0LnVwZGF0ZScsXG4gIC8vIEEgc3VwZXJhZG1pbiBkZWxldGluZyBhbiBvcmcncyBlbnRpcmUgcXVvdGEgZG9jdW1lbnQuXG4gICdxdW90YS5kZWxldGUnLFxuICAvLyBDb21wbGlhbmNlIGFkbWluaXN0cmF0aW9uIChhcGkvY29tcGxpYW5jZSkg4oCUIHRoZSBlbmZvcmNlbWVudC1wb3N0dXJlIHN1cmZhY2UuXG4gIC8vIEFwcHJvdmluZy9yZXZva2luZyBhbiBleGVtcHRpb24sIHRvZ2dsaW5nL2F1dGhvcmluZy9kZWxldGluZyBhIHJ1bGUsXG4gIC8vIGF1dGhvcmluZy9kZWxldGluZyBhIHBvbGljeSwgbWFuYWdpbmcgc2NhbiBzY2hlZHVsZXMsIGFwcGx5aW5nIGEgdGVtcGxhdGUsXG4gIC8vIG9yIGNhbmNlbGxpbmcgYSBydW5uaW5nIHNjYW4uIGB0YXJnZXRJZGAgaXMgdGhlIHJ1bGUvcG9saWN5L2V4ZW1wdGlvbi9zY2FuIGlkLlxuICAnY29tcGxpYW5jZS5leGVtcHRpb24uYXBwcm92ZScsXG4gICdjb21wbGlhbmNlLmV4ZW1wdGlvbi5yZXZva2UnLFxuICAnY29tcGxpYW5jZS5ydWxlLnRvZ2dsZScsXG4gICdjb21wbGlhbmNlLnJ1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBvbi1kZW1hbmQgaGFyZC1kZWxldGUgKFBVUkdFKSBvZiBhIHNvZnQtZGVsZXRlZCBydWxlL3BvbGljeSB0b21ic3RvbmUg4oCUXG4gIC8vIHRoZSBjYWxsZXItaW5pdGlhdGVkIGNvdW50ZXJwYXJ0IHRvIHRoZSByZXRlbnRpb24gc3dlZXAncyBhdXRvLXB1cmdlLiBEZXN0cm95c1xuICAvLyB0aGUgdG9tYnN0b25lIHBlcm1hbmVudGx5LCBzbyBpdCBjYXJyaWVzIHRoZSBkdXJhYmxlLCB0YW1wZXItZXZpZGVudCB0cmFpbC5cbiAgJ2NvbXBsaWFuY2UucnVsZS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5yZXN0b3JlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnB1cmdlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuZGVsZXRlJyxcbiAgJ2NvbXBsaWFuY2UudGVtcGxhdGUuYXBwbHknLFxuICAvLyBMYXVuY2hpbmcgYW4gb3JnLXdpZGUgcmUtZXZhbHVhdGlvbiAodGhlIGNvdW50ZXJwYXJ0IHRvIGAuY2FuY2VsYCkg4oCUIGl0XG4gIC8vIHBlcnNpc3RzIGEgc2NhbiBhbmQgY2FuIGJsb2NrIGVudGl0aWVzIHRoYXQgcGFzc2VkIGJlZm9yZS5cbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLmNhbmNlbCcsXG4gIC8vIFBlci1vcmcgY29tcGxpYW5jZSBub3RpZmljYXRpb24gc2V0dGluZ3M6IHJlY2lwaWVudHMgKyB0aGUgb3V0Ym91bmQgd2ViaG9va1xuICAvLyBVUkwvc2VjcmV0LiBCZWFyZXItZXF1aXZhbGVudCBjb25maWcgdGhhdCByZWRpcmVjdHMgdmlvbGF0aW9uIG5vdGljZXMsIHNvIGFcbiAgLy8gY2hhbmdlIGNhcnJpZXMgdGhlIGR1cmFibGUgdHJhaWwgKG5ldmVyIHRoZSBzZWNyZXQgaXRzZWxmKS5cbiAgJ2NvbXBsaWFuY2Uubm90aWZpY2F0aW9uLXByZWZlcmVuY2UudXBkYXRlJyxcbiAgLy8gSW1hZ2UtcmVnaXN0cnkgZGVzdHJ1Y3RpdmUgb3BzIChhcGkvaW1hZ2UtcmVnaXN0cnkpIOKAlCBnYXJiYWdlLWNvbGxlY3Rpb25cbiAgLy8gc3dlZXBzIGFuZCBleHBsaWNpdCBpbWFnZS90YWcgZGVsZXRlcy5cbiAgJ3JlZ2lzdHJ5LmdjJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLmRlbGV0ZScsXG4gIC8vIENyb3NzLXJlcG8gdGFnL2ltYWdlIGNvcHkgKGFwaS9pbWFnZS1yZWdpc3RyeSBQT1NUIC9hcGkvaW1hZ2VzL2NvcHkpLiBBXG4gIC8vIGNyb3NzLXRlbmFudCBjb3B5IG1vdmVzIGRhdGEgYWNyb3NzIGN1c3RvbWVyIGJvdW5kYXJpZXMsIHNvIGl0IG5lZWRzIHRoZVxuICAvLyBkdXJhYmxlLCB0YW1wZXItZXZpZGVudCB0cmFpbCDigJQgbm90IGp1c3QgdGhlIExva2kgb3BlcmF0b3IgbGluZS5cbiAgJ3JlZ2lzdHJ5LmltYWdlLmNvcHknLFxuICAvLyBBIHBsdWdpbiBpbWFnZSBzaWduZWQgKyBTQk9NLWF0dGVzdGVkIGJ5IHRoZSBwbGF0Zm9ybSdzIHBsdWdpbi1zaWduaW5nIGtleVxuICAvLyAoYXBpL2ltYWdlLXJlZ2lzdHJ5IFBPU1QgL2ludGVybmFsL3BsdWdpbi1zaWduYXR1cmVzLCBjYWxsZWQgYnkgdGhlIHBsdWdpblxuICAvLyBidWlsZCB3b3JrZXIpLiBUaGUga2V5IGlzIHdoYXQgc3ludGggdHJ1c3RzLCBzbyBldmVyeSB1c2UgaXMgb24gdGhlIHRyYWlsLlxuICAncmVnaXN0cnkuaW1hZ2Uuc2lnbicsXG4gIC8vIE1lc3NhZ2luZyAoYXBpL21lc3NhZ2UpIOKAlCBhZG1pbiBCUk9BRENBU1QgYW5ub3VuY2VtZW50cyArIGRlc3RydWN0aXZlXG4gIC8vIGRlbGV0ZXMuIDE6MSB1c2VyIG1lc3NhZ2VzIGFyZSBpbnRlbnRpb25hbGx5IE5PVCBhdWRpdGVkIChub2lzZSArIHRoZXkgd291bGRcbiAgLy8gcHVsbCBwcml2YXRlIGNvbnRlbnQgaW50byB0aGUgdHJhaWwpLiBgZGV0YWlsc2AgY2FycnkgbWV0YWRhdGEgb25seVxuICAvLyAoc3ViamVjdC90eXBlL3Njb3BlKSwgTkVWRVIgbWVzc2FnZSBib2R5IGNvbnRlbnQuXG4gICdtZXNzYWdlLmFubm91bmNlbWVudC5jcmVhdGUnLFxuICAnbWVzc2FnZS5kZWxldGUnLFxuICAnbWVzc2FnZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIG9uLWRlbWFuZCBQVVJHRSAocGVybWFuZW50IGhhcmQtZGVsZXRlKSBvZiBhbiBhbHJlYWR5LXNvZnQtZGVsZXRlZFxuICAvLyBtZXNzYWdlIHRvbWJzdG9uZSDigJQgdGhlIGRlc3RydWN0aXZlIGZpbmFsaXplciB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkXG4gIC8vIG90aGVyd2lzZSBwZXJmb3JtIGF0IHRoZSBwdXJnZSBkZWFkbGluZS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHkuXG4gICdtZXNzYWdlLnB1cmdlJyxcbiAgLy8gQmlsbGluZyAoYXBpL2JpbGxpbmcpIOKAlCBzdWJzY3JpcHRpb24gKyBlbnRpdGxlbWVudCBtdXRhdGlvbnMsIG1pcnJvcmVkIHRvIHRoZVxuICAvLyBjZW50cmFsIGF1ZGl0IHRyYWlsICh0aGVzZSBhbHNvIHdyaXRlIHRvIHRoZSBzZXJ2aWNlLWxvY2FsIGJpbGxpbmdfZXZlbnRzXG4gIC8vIGNvbGxlY3Rpb24pLiBgZGV0YWlsc2AgY2FycnkgcGxhbi90aWVyL2FkZG9uIGlkcyBvbmx5IOKAlCBuZXZlciBjYXJkL3BheW1lbnRcbiAgLy8gc2VjcmV0cyBvciBhbiBBV1MgYWNjb3VudCBpZC5cbiAgLy8gU3Vic2NyaXB0aW9uIGxpZmVjeWNsZSBhIENVU1RPTUVSIGRyaXZlcyAodGhlIGFkbWluIGNvdW50ZXJwYXJ0IGlzXG4gIC8vIGBiaWxsaW5nLnRpZXIub3ZlcnJpZGVgKTogc2VsZi1zZXJ2ZSBjcmVhdGUgKGRpcmVjdCBvciBNYXJrZXRwbGFjZSBjbGFpbSksXG4gIC8vIHBsYW4vaW50ZXJ2YWwgY2hhbmdlLCBjYW5jZWwtYXQtcGVyaW9kLWVuZCwgdW5kby1jYW5jZWwsIGNhc2NhZGUgZGVsZXRlLlxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLnVwZGF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5yZWFjdGl2YXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNhbmNlbCcsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5kZWxldGUnLFxuICAnYmlsbGluZy50aWVyLm92ZXJyaWRlJyxcbiAgLy8gT3BlcmF0b3Itb25seSByZXNlZWQgb2YgdGhlIGludm9pY2UgbGVkZ2VyIGZyb20gdGhlIHBheW1lbnQgcHJvdmlkZXInc1xuICAvLyBoaXN0b3J5IChQT1NUIC9iaWxsaW5nL2FkbWluL2JhY2tmaWxsKSDigJQgbXV0YXRlcyBmaW5hbmNlIGRhdGEgZmxlZXQtd2lkZS5cbiAgJ2JpbGxpbmcuYWRkb24uYWRkJyxcbiAgJ2JpbGxpbmcuYWRkb24ucmVtb3ZlJyxcbiAgLy8gU3lzdGVtLWluaXRpYXRlZCByZW1vdmFsIG9mIGEgdGllci1pbmNsdWRlZCBhZGQtb24gb24gYSBwbGFuIHVwZ3JhZGUgKHRoZVxuICAvLyBhY2NvdW50J3MgbmV3IHRpZXIgbm93IGJ1bmRsZXMgdGhlIGZlYXR1cmUpIOKAlCBkaXN0aW5jdCBmcm9tIGEgdXNlci1pbml0aWF0ZWRcbiAgLy8gYHJlbW92ZWAgc28gZmluYW5jZSBjYW4gdGVsbCBhbiBhdXRvLXBydW5lIGZyb20gYSBjdXN0b21lciBhY3Rpb24uXG4gICdiaWxsaW5nLmFkZG9uLnBydW5lJyxcbiAgLy8gRGlzY291bnRzIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kKSDigJQgbWludC9pc3N1ZS9hcHBseS9yZW1vdmUvcmV2b2tlIG9mIGFcbiAgLy8gcHJpY2UgY291cG9uIG9yIHVzYWdlIGNyZWRpdC4gYGRldGFpbHNgIGNhcnJ5IHRoZSBkaXNjb3VudCBpZCArIGtpbmQvdmFsdWVcbiAgLy8gb25seSwgbmV2ZXIgdGhlIG9wYXF1ZSB0b2tlbiBvciBzaWduaW5nIGtleS5cbiAgJ2JpbGxpbmcuZGlzY291bnQuZ2VuZXJhdGUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5pc3N1ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50LmFwcGx5JyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmVtb3ZlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmV2b2tlJyxcbiAgLy8gUHJvbW90aW9ucyAoZG9jcy9iaWxsaW5nLWRpc2NvdW50cy5tZCNwcm9tb3Rpb25zKSDigJQgcnVsZS1kcml2ZW4gYXV0by1ncmFudFxuICAvLyBjYW1wYWlnbnMuIGBkZXRhaWxzYCBjYXJyeSB0aGUgcHJvbW90aW9uIGlkICsgY2VudHMvZXZlbnQgb25seS5cbiAgJ2JpbGxpbmcucHJvbW90aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24ucmV2b2tlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmdyYW50JyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmFjdGl2YXRlJyxcbiAgLy8gVXNhZ2UtY3JlZGl0IHJlYWxpemF0aW9uIOKAlCBhIGN1c3RvbWVyL2NvbXBsaWFuY2UtdmlzaWJsZSByZWNvcmQgb2YgY3JlZGl0XG4gIC8vIG1vdmVtZW50OiBgY29uc3VtZWRgIChNYXJrZXRwbGFjZSBtZXRlcmVkIGRyYXdkb3duKSwgYGV4aGF1c3RlZGAgKGJhbGFuY2UgaGl0XG4gIC8vIHplcm8pLCBhbmQgYSBjb21ibyBlbmRpbmcuIGBkZXRhaWxzYCBjYXJyeSBjZW50cy9pZHMgb25seSwgbm8gcGF5bWVudCBzZWNyZXRzLlxuICAnYmlsbGluZy5jcmVkaXQuY29uc3VtZWQnLFxuICAnYmlsbGluZy5jcmVkaXQuZXhoYXVzdGVkJyxcbiAgJ2JpbGxpbmcuY29tYm8uZXhwaXJlZCcsXG4gIC8vIFJlcG9ydGluZyAoYXBpL3JlcG9ydGluZykg4oCUIHRoZSB0aHJlZSByZXBvcnRpbmcgbXV0YXRpb25zIHdob3NlIGVmZmVjdFxuICAvLyBvdXRsaXZlcyBhIHJlcXVlc3QgbG9nOiB0aGUgcGVyLW9yZyBjb3JyZWxhdGlvbi13aW5kb3cgY29uZmlnIHdyaXRlLCBhXG4gIC8vIHBvc3QtZGVwbG95IG91dGNvbWUgbWFya2VyIChpdCBtb3ZlcyB0aGUgb3JnJ3MgRE9SQSBDRlIvTVRUUiksIGFuZCB0aGVcbiAgLy8gaW5ib3VuZCBiaWxsaW5n4oaScmVwb3J0aW5nIHJldGVudGlvbi1lbnRpdGxlbWVudCBzeW5jIChhIHJldGVudGlvbiBjdXQgaXMgYVxuICAvLyBkYXRhLWRlc3Ryb3lpbmcgY2hhbmdlIGFwcGxpZWQgYnkgdGhlIG5leHQgc3dlZXApLiBgZGV0YWlsc2AgY2FycnkgdGhlXG4gIC8vIHNldHRpbmdzL291dGNvbWUgdmFsdWVzIG9ubHkuXG4gICdyZXBvcnRpbmcuc2V0dGluZ3MudXBkYXRlJyxcbiAgJ3JlcG9ydGluZy5kZXBsb3ltZW50Lm91dGNvbWUnLFxuICAncmVwb3J0aW5nLnJldGVudGlvbi5zeW5jJyxcbiAgLy8gU3Rha2Vob2xkZXIgcmVwb3J0cyDigJQgdGhlIGFkZC1vbidzIGF1dGhvcmluZyBhbmQgUFVCTElTSElORyBzdXJmYWNlLiBQdWJsaXNoaW5nXG4gIC8vIGlzIHRoZSBtb21lbnQgaW50ZXJuYWwgZGVsaXZlcnkgbnVtYmVycyBsZWF2ZSB0aGUgcGxhdGZvcm0sIHNvIHRoZSB3aG9sZVxuICAvLyBvdXR3YXJkIHBhdGggaXMgYXVkaXRhYmxlOiB3aGljaCByZXBvcnQsIHdoaWNoIHBlcmlvZCdzIGZyb3plbiBzbmFwc2hvdCxcbiAgLy8gd2hpY2ggdmVyc2lvbiwgYW5kIHdobyBsZXQgaXQgb3V0LiBgbGluay5jcmVhdGVkYCAvIGBsaW5rLnJldm9rZWRgIGNvdmVyIHRoZVxuICAvLyBVUkxzIHRoYXQgbGV0IHNvbWVvbmUgd2l0aG91dCBhbiBhY2NvdW50IHJlYWQgaXQ7IGByZWNpcGllbnQuYWRkZWRgIC9cbiAgLy8gYHJlY2lwaWVudC5yZW1vdmVkYCBjb3ZlciB3aG8gaXMgb24gdGhlIGRpc3RyaWJ1dGlvbiBsaXN0LCB3aGljaCBpcyB0aGUgb3RoZXJcbiAgLy8gd2F5IGRhdGEgcmVhY2hlcyBhIHBlcnNvbi4gYG93bmVyc2hpcC50cmFuc2ZlcmAgaXMgYSBwcml2aWxlZ2UgbW92ZTogYVxuICAvLyBzY2hlZHVsZWQgcnVuIGlzIGF1dGhvcml6ZWQgYXMgaXRzIE9XTkVSLCBzbyBoYW5kaW5nIGEgZGVmaW5pdGlvbiBvdmVyIGhhbmRzXG4gIC8vIG92ZXIgd2hvc2UgYWNjZXNzIHRoZSBudW1iZXJzIGFyZSBjb21wdXRlZCB3aXRoLlxuICAvL1xuICAvLyBEZWxpYmVyYXRlbHkgTk9UIGF1ZGl0ZWQ6IHJlYWRpbmcgYSBzaGFyZWQgcmVwb3J0LiBUaGUgYWNjZXNzIGlzIGxvZ2dlZCBhbmRcbiAgLy8gY291bnRlZCBwZXIgbGluaywgYnV0IGl0IGlzIGFuIFVOQVVUSEVOVElDQVRFRCwgZXh0ZXJuYWxseS10cmlnZ2VyZWQgZXZlbnQg4oCUXG4gIC8vIGFueW9uZSBob2xkaW5nIGEgVVJMIGNvdWxkIG90aGVyd2lzZSB3cml0ZSB1bmJvdW5kZWQgcm93cyBpbnRvIHRoZSBvcmcncyBhdWRpdFxuICAvLyB0cmFpbCwgd2hpY2ggdHVybnMgYSByZWFkIGludG8gYSB3YXkgdG8gYnVyeSB0aGUgZW50cmllcyB0aGF0IG1hdHRlci5cbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi5jcmVhdGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLnVwZGF0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24uZGVsZXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQub3duZXJzaGlwLnRyYW5zZmVyJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucHVibGlzaGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVwdWJsaXNoZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5saW5rLmNyZWF0ZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5saW5rLnJldm9rZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5yZWNpcGllbnQuYWRkZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5yZWNpcGllbnQucmVtb3ZlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnBvbGljeS51cGRhdGUnLFxuICAvLyBBIGRlZmluaXRpb24gU1RPUFBFRCBwcm9kdWNpbmcgcmVwb3J0cyB3aXRob3V0IGFueW9uZSBhc2tpbmcgaXQgdG86IHRoZSBvd25lclxuICAvLyB3YXMgZGVhY3RpdmF0ZWQgb3IgcmVtb3ZlZCwgb3IgbG9zdCB0aGUgcGVybWlzc2lvbiBhIHJ1biBpcyBhdXRob3JpemVkIHdpdGguXG4gIC8vIFJlY29yZGVkIGJlY2F1c2UgdGhlIGVmZmVjdCBpcyBzaWxlbnQg4oCUIGEgbWFuYWdlciBmaW5kcyBvdXQgYnkgbm90IHJlY2VpdmluZ1xuICAvLyB0aGUgcmVwb3J0IOKAlCBzbyB0aGUgdHJhaWwgaGFzIHRvIHNheSB3aGljaCByZXBvcnRzIHN0b3BwZWQgYW5kIHdoeS5cbiAgJ3JlcG9ydGluZy5yZXBvcnQucGF1c2VkJyxcbiAgLy8g4oCmYW5kIHN0YXJ0ZWQgYWdhaW4uIEl0cyBvd24gYWN0aW9uIHJhdGhlciB0aGFuIGEgZGV0YWlsIG9uIHRoZSBwYXVzZSwgYmVjYXVzZSB0aGVcbiAgLy8gcXVlc3Rpb24gYSByZXZpZXdlciBhc2tzIGlzIFwid2FzIHRoaXMgYWNjb3VudCdzIHJlcG9ydGluZyBvZmYgYmV0d2VlbiB0aGVzZSB0d29cbiAgLy8gZGF0ZXNcIiwgYW5kIGFuc3dlcmluZyBpdCBmcm9tIGEgc2luZ2xlIGFjdGlvbidzIGRldGFpbHMgbWVhbnMgcmVhZGluZyBldmVyeSByb3cuXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlc3VtZWQnLFxuICAvLyBEZW5pZWQgYXV0aG9yaXphdGlvbiBhdHRlbXB0IOKAlCBlbWl0dGVkIGJlc3QtZWZmb3J0IGJ5IHRoZSBzaGFyZWRcbiAgLy8gYHJlcXVpcmVQZXJtaXNzaW9uYCAvIGByZXF1aXJlU3lzdGVtQWRtaW5gIGdhdGUgd2hlbiBhIHN0YXRlLWNoYW5naW5nXG4gIC8vIChub24tR0VUKSByZXF1ZXN0IGlzIHJlamVjdGVkLCBzbyBwcm9iaW5nL2VzY2FsYXRpb24gYXR0ZW1wdHMgYXJlIHZpc2libGVcbiAgLy8gcmF0aGVyIHRoYW4gaW52aXNpYmxlLiBgZGV0YWlsc2AgY2FycmllcyB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbiArIHBhdGg7XG4gIC8vIGBvdXRjb21lYCBpcyAnZmFpbHVyZScuXG4gICdhdXRoei5kZW5pZWQnLFxuICAvLyBcIkFza1wiIGFzc2lzdGFudCBhY3Rpdml0eSDigJQgdmlzaWJpbGl0eSBpbnRvIHdoYXQgdGhlIGFzc2lzdGFudCBkaWQgb24gYSB1c2VyJ3NcbiAgLy8gYmVoYWxmLiBgYXNrLnF1ZXJ5YCBpcyBhIHJlYWQtb25seSBob3ctdG8gdHVybjsgYGFzay5hZ2VudC50dXJuYCBpcyBhIHRvb2wtY2FsbGluZ1xuICAvLyB0dXJuLiBgZGV0YWlsc2AgY2FycnkgU0FGRSBNRVRBREFUQSBPTkxZICh0b29scyB1c2VkLCBwcm9wb3NhbCBraW5kcywgcXVlcnlcbiAgLy8gbGVuZ3RoLCBvdXRjb21lKSwgbmV2ZXIgdGhlIHJhdyBxdWVyeSB0ZXh0LlxuICAnYXNrLnF1ZXJ5JyxcbiAgJ2Fzay5hZ2VudC50dXJuJyxcbiAgLy8gUGx1Z2luIGVjb3N5c3RlbSAoZG9jcy9ydW5ib29rcy9lY29zeXN0ZW0tbW9kZXJhdGlvbi5tZCkuIEdvdmVybmFuY2UgYWN0aW9uc1xuICAvLyBhcmUgcmVjb3JkZWQgd2l0aCBgb3JnSWRgID0gdGhlIHN5c3RlbSBvcmc7IGBhZmZlY3RlZE9yZ0lkYCBpcyB0aGVcbiAgLy8gcHVibGlzaGVyJ3Mgb3JnIChsaXN0aW5nL3ZlcnNpb24vcmV2aWV3L2Fkdmlzb3J5L3B1Ymxpc2hlciBtb2RlcmF0aW9uKSBvclxuICAvLyB0aGUgaW5zdGFsbGluZyBvcmcgKGluc3RhbGxzICsgcG9saWN5KS4gQW5vbnltb3VzIHN1Ym1pc3Npb25zIHVzZSB0aGVcbiAgLy8gYEFOT05ZTU9VU19BQ1RPUl9JRGAgYWN0b3Igd2l0aCBgZGV0YWlscy5zdWJtaXNzaW9uSWRgLiBgZGV0YWlsc2AgY2FycnkgaWRzLFxuICAvLyB2ZXJzaW9ucywgZGlnZXN0cywgdGllciwgc3RhdGUgYW5kIHJlYXNvbiBjb2RlcyBvbmx5IOKAlCBuZXZlciByZXZpZXcgYm9kaWVzLFxuICAvLyBSRUFETUUgY29udGVudCwgc2VjcmV0cyBvciBlbWFpbHMuXG4gIC8vIFB1Ymxpc2hlcnMuXG4gICdwdWJsaXNoZXIuY3JlYXRlJyxcbiAgJ3B1Ymxpc2hlci51cGRhdGUnLFxuICAncHVibGlzaGVyLnRlcm1zLmFjY2VwdCcsXG4gICdwdWJsaXNoZXIudmVyaWZ5LnJlcXVlc3QnLFxuICAncHVibGlzaGVyLnZlcmlmeS5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkucmVqZWN0JyxcbiAgJ3B1Ymxpc2hlci50aWVyLmNoYW5nZScsXG4gICdwdWJsaXNoZXIuc3VzcGVuZCcsXG4gICdwdWJsaXNoZXIudW5zdXNwZW5kJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5yZXF1ZXN0JyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5hY2NlcHQnLFxuICAncHVibGlzaGVyLnRyYW5zZmVyLmRlY2xpbmUnLFxuICAncHVibGlzaGVyLnRyYW5zZmVyLmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnRyYW5zZmVyLnJlamVjdCcsXG4gICdwdWJsaXNoZXIucHJvZmlsZS1jaGFuZ2UuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIucHJvZmlsZS1jaGFuZ2UucmVqZWN0JyxcbiAgLy8gUHVibGlzaCByZXF1ZXN0cyAodGVuYW50IOKGkiBzeXN0ZW0gb3JnKS4gYGRldGFpbHMua2luZGAgbmFtZXMgdGhlIHJlcXVlc3QuXG4gICdwbHVnaW4ucmVxdWVzdC5zdWJtaXQnLFxuICAncGx1Z2luLnJlcXVlc3Qud2l0aGRyYXcnLFxuICAncGx1Z2luLnJlcXVlc3QuYXBwcm92ZScsXG4gICdwbHVnaW4ucmVxdWVzdC5zZWNvbmQtYXBwcm92ZScsXG4gICdwbHVnaW4ucmVxdWVzdC5yZWplY3QnLFxuICAncGx1Z2luLnJlcXVlc3QuYXV0by1hcHByb3ZlJyxcbiAgLy8gTGlzdGluZ3MgYW5kIHZlcnNpb25zIChzeXN0ZW0gb3JnLCBleGNlcHQgdGhlIHRlbmFudCBwYXVzZSkuXG4gICdwbHVnaW4ubGlzdGluZy5wdWJsaXNoJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnVubGlzdCcsXG4gICdwbHVnaW4ubGlzdGluZy51cGRhdGUnLFxuICAncGx1Z2luLmxpc3Rpbmcuc3RhdGUuY2hhbmdlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnBhdXNlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnVucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ueWFuaycsXG4gICdwbHVnaW4udmVyc2lvbi51bnlhbmsnLFxuICAncGx1Z2luLnZlcnNpb24uZGVwcmVjYXRlJyxcbiAgJ3BsdWdpbi5jb2xsZWN0aW9uLnVwZGF0ZScsXG4gIC8vIEVjb3N5c3RlbSBjb25maWd1cmF0aW9uIChzeXN0ZW0gb3JnKS5cbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUuY3JlYXRlJyxcbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUudXBkYXRlJyxcbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUuZGVsZXRlJyxcbiAgJ2Vjb3N5c3RlbS5yZXNlcnZlZC1uYW1lLnVwZGF0ZScsXG4gICdlY29zeXN0ZW0uc2xhLnVwZGF0ZScsXG4gIC8vIFB1YmxpYyByZWdpc3RyeSBuYW1lc3BhY2UgKGBwdWJsaWMvKmApOiBjb3B5ICsgc2lnbiArIGF0dGVzdCBvbiBwdWJsaXNoLFxuICAvLyB0aGUgdGllci1jaGFuZ2Uvc3VzcGVuc2lvbiByZS1zaWduIGpvYiwgdGFnIHJlbW92YWwgb24geWFuay90YWtlZG93biwgYW5kXG4gIC8vIHRoZSByZXRlbnRpb24gc3dlZXAuXG4gICdyZWdpc3RyeS5pbWFnZS5wdWJsaXNoJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLnJlc2lnbicsXG4gICdyZWdpc3RyeS5pbWFnZS55YW5rJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLmdjJyxcbiAgLy8gSW5zdGFsbHMgYW5kIHRoZSBpbnN0YWxsaW5nIG9yZydzIGNvbnN1bXB0aW9uIHBvbGljeSAob3JnLWxvY2FsKS5cbiAgJ3BsdWdpbi5pbnN0YWxsLnJlcXVlc3QnLFxuICAncGx1Z2luLmluc3RhbGwuYXBwcm92ZScsXG4gICdwbHVnaW4uaW5zdGFsbC5kZW55JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmNyZWF0ZScsXG4gICdwbHVnaW4uaW5zdGFsbC51cGdyYWRlJyxcbiAgLy8gQSBtZW1iZXIncyByZXF1ZXN0IHRvIGNoYW5nZSBhbiBpbnN0YWxsIHBhc3Qgd2hhdCB0aGV5IG1heSBkbyBhbG9uZSwgYW5kIGl0cyBkZWNpc2lvbi5cbiAgJ3BsdWdpbi5pbnN0YWxsLmNoYW5nZS1yZXF1ZXN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmNoYW5nZS1hcHByb3ZlJyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmNoYW5nZS1yZWplY3QnLFxuICAncGx1Z2luLmluc3RhbGwucmVtb3ZlJyxcbiAgJ29yZy5wbHVnaW4taW5zdGFsbC1wb2xpY3kudXBkYXRlJyxcbiAgLy8gQW4gdXBsb2FkIFJFRlVTRUQgYmVjYXVzZSBpdHMgbmFtZSB3b3VsZCBvdmVycmlkZSBzb21ldGhpbmcgdGhlIG9yZyBhbHJlYWR5XG4gIC8vIHJlc29sdmVzIOKAlCBhIGxpc3RpbmcsIG9yIGEgdGVhbSdzIHBhcmVudC1vcmcgcGx1Z2luIOKAlCBhbmQgdGhlIGNvbnN1bXB0aW9uXG4gIC8vIHBvbGljeSBzYXlzIGBzaGFkb3dpbmc6IGRlbnlgLiBBdWRpdGVkIGJlY2F1c2UgYSByZWZ1c2FsIG90aGVyd2lzZSByZXR1cm5zXG4gIC8vIGFuIGVycm9yIHRvIHRoZSBjYWxsZXIgYW5kIGxlYXZlcyBub3RoaW5nIGJlaGluZDogYW4gYXR0ZW1wdCB0byBkZWZpbmVcbiAgLy8gYHRyaXZ5YCBvdmVyIHRoZSBPZmZpY2lhbCBzY2FubmVyIGlzIGV4YWN0bHkgdGhlIHRoaW5nIHNvbWVvbmUgc2hvdWxkIGJlXG4gIC8vIGFibGUgdG8gZmluZCBhZnRlcndhcmRzLiBgZGV0YWlsc2AgY2FycnkgdGhlIG5hbWUgYW5kIHdoYXQgaXQgd291bGQgaGF2ZVxuICAvLyBvdmVycmlkZGVuLlxuICAncGx1Z2luLnNoYWRvd2luZy5kZW5pZWQnLFxuICAvLyBSZXZpZXdzIGFuZCByZXBsaWVzLlxuICAncGx1Z2luLnJldmlldy5jcmVhdGUnLFxuICAncGx1Z2luLnJldmlldy51cGRhdGUnLFxuICAncGx1Z2luLnJldmlldy5kZWxldGUnLFxuICAncGx1Z2luLnJldmlldy5yZXBvcnQnLFxuICAncGx1Z2luLnJldmlldy5ob2xkJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVsZWFzZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlbW92ZScsXG4gICdwbHVnaW4ucmV2aWV3LmFub255bWl6ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcGx5LmNyZWF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcGx5LnVwZGF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcGx5LmRlbGV0ZScsXG4gIC8vIEFub255bW91cyBzdWJtaXNzaW9ucy5cbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmNyZWF0ZScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi52ZXJpZnknLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uZ2F0ZS1mYWlsJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmFwcHJvdmUnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24ucmVqZWN0JyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmNsYWltJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmV4cGlyZScsXG4gIC8vIFNlY3VyaXR5IGFkdmlzb3JpZXMgKHB1Ymxpc2gvd2l0aGRyYXcgYXJlIHN5c3RlbS1vcmcgb25seTsgdXBkYXRlID0gYVxuICAvLyBtb2RlcmF0b3IgZWRpdGluZyBhIGRyYWZ0IGJlZm9yZSBpdCBpcyBwdWJsaXNoZWQpLlxuICAncGx1Z2luLmFkdmlzb3J5LmNyZWF0ZScsXG4gICdwbHVnaW4uYWR2aXNvcnkudXBkYXRlJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS5wdWJsaXNoJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS53aXRoZHJhdycsXG4gIC8vIFBlci1vcmcgcGx1Z2luIHNlY3VyaXR5IG5vdGlmaWNhdGlvbnMgKHBsdWdpbiBzY2FuIGdhdGVzKTogdGhlIHNldHRpbmdzXG4gIC8vIChyZWNpcGllbnRzLCBkaWdlc3QsIHdlYmhvb2ssIGV4dGVybmFsIGFkZHJlc3Mg4oCUIGNoYW5nZWQgZmllbGQgbmFtZXMgYW5kXG4gIC8vIHRoZSB3ZWJob29rIGhvc3Qgb25seSwgbmV2ZXIgdGhlIHNlY3JldCBvciB0aGUgYWRkcmVzcyksIGFuIGV4dGVybmFsXG4gIC8vIGFkZHJlc3MgY29uZmlybWVkIHRocm91Z2ggaXRzIGVtYWlsZWQgc2luZ2xlLXVzZSBsaW5rLCBhbmQgYSB0ZXN0IHNlbmQuXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy51cGRhdGUnLFxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMuZXh0ZXJuYWxfZW1haWwudmVyaWZ5JyxcbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLnRlc3QnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUmVtb3RlQXVkaXRBY3Rpb24gPSB0eXBlb2YgUkVNT1RFX0FVRElUX0FDVElPTlNbbnVtYmVyXTtcblxuLyoqIFdoZXRoZXIgYHZhbHVlYCBpcyBhbiBhY3Rpb24gYSByZW1vdGUgc2VydmljZSBtYXkgZW1pdCAodGhlIGluZ2VzdCBhbGxvdy1saXN0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbW90ZUF1ZGl0QWN0aW9uKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBSZW1vdGVBdWRpdEFjdGlvbiB7XG4gIHJldHVybiAoUkVNT1RFX0FVRElUX0FDVElPTlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cbiJdfQ==
@@ -79,6 +79,17 @@ export type BlockOnAdvisory = (typeof BLOCK_ON_ADVISORY_LEVELS)[number];
79
79
  /** Whether official plugins need an explicit install before a pipeline can use them. */
80
80
  export declare const OFFICIAL_INSTALLS_MODES: readonly ['implicit', 'explicit'];
81
81
  export type OfficialInstalls = (typeof OFFICIAL_INSTALLS_MODES)[number];
82
+ /**
83
+ * What happens when an org defines a plugin NAME that overrides something it
84
+ * would otherwise resolve — a listing, or (for a team) its parent org's plugin.
85
+ *
86
+ * `allow` keeps today's behaviour: the override is silent beyond the dashboard
87
+ * banner. `warn` is the same resolution with the fact recorded prominently.
88
+ * `deny` refuses the upload, which is the only setting that actually stops a
89
+ * team replacing the Official `trivy` for every pipeline that names it.
90
+ */
91
+ export declare const SHADOWING_MODES: readonly ['allow', 'warn', 'deny'];
92
+ export type ShadowingMode = (typeof SHADOWING_MODES)[number];
82
93
  export declare const REVIEW_STATUSES: readonly ['published', 'held', 'removed'];
83
94
  export type ReviewStatus = (typeof REVIEW_STATUSES)[number];
84
95
  /** Why a held review is held. */
@@ -75,6 +75,16 @@ export const INSTALL_STATUSES = ['active', 'pending_approval', 'denied'];
75
75
  export const BLOCK_ON_ADVISORY_LEVELS = ['critical', 'high', 'never'];
76
76
  /** Whether official plugins need an explicit install before a pipeline can use them. */
77
77
  export const OFFICIAL_INSTALLS_MODES = ['implicit', 'explicit'];
78
+ /**
79
+ * What happens when an org defines a plugin NAME that overrides something it
80
+ * would otherwise resolve — a listing, or (for a team) its parent org's plugin.
81
+ *
82
+ * `allow` keeps today's behaviour: the override is silent beyond the dashboard
83
+ * banner. `warn` is the same resolution with the fact recorded prominently.
84
+ * `deny` refuses the upload, which is the only setting that actually stops a
85
+ * team replacing the Official `trivy` for every pipeline that names it.
86
+ */
87
+ export const SHADOWING_MODES = ['allow', 'warn', 'deny'];
78
88
  export const REVIEW_STATUSES = ['published', 'held', 'removed'];
79
89
  /** Why a held review is held. */
80
90
  export const REVIEW_HOLD_REASONS = ['reports', 'burst', 'filter', 'security', 'moderator'];
@@ -99,4 +109,4 @@ export const SUBMISSION_STATUSES = [
99
109
  export const PLUGIN_SECURITY_RECIPIENT_MODES = ['writers', 'users'];
100
110
  /** How rescan findings (N31) are batched; blocked builds (N30) are always immediate. */
101
111
  export const PLUGIN_SECURITY_DIGEST_MODES = ['immediate', 'daily', 'weekly'];
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS12b2NhYnVsYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3dpcmUtdm9jYWJ1bGFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7R0FTRztBQUVILGdGQUFnRjtBQUNoRixtQkFBbUI7QUFDbkIsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFHekUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRzVELHVGQUF1RjtBQUN2RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsSUFBSSxFQUFFLEtBQUs7SUFDWCxVQUFVLEVBQUUsYUFBYTtJQUN6QixPQUFPO0lBQ1AsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSztJQUN4QixJQUFJLEVBQUUsT0FBTztJQUNiLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVTtJQUNqQyxTQUFTLEVBQUUsU0FBUztJQUNwQixVQUFVLEVBQUUsVUFBVTtDQUNkLENBQUM7QUFHWCxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBNEMsQ0FBQztBQUV2SCwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFVLENBQUM7QUFHNUQsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUd6RCxnRkFBZ0Y7QUFDaEYsV0FBVztBQUNYLGdGQUFnRjtBQUVoRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxjQUFjLEVBQUUs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QUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRzVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFVLENBQUM7QUFHbEYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQVUsQ0FBQztBQUc1RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBRzVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVM7Q0FDM0csQ0FBQztBQUdYLGdGQUFnRjtBQUNoRiwwQ0FBMEM7QUFDMUMsZ0ZBQWdGO0FBRWhGOzJFQUMyRTtBQUMzRSxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQVUsQ0FBQztBQUc3RSx3RkFBd0Y7QUFDeEYsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQ2xvc2VkIHN0cmluZyB2b2NhYnVsYXJpZXMgdGhhdCBjcm9zcyB0aGUgd2lyZSBiZXR3ZWVuIHRoZSBzZXJ2aWNlcyBhbmQgdGhlXG4gKiBicm93c2VyLiBFYWNoIGlzIGFuIGBhcyBjb25zdGAgYXJyYXkgKHRoZSBydW50aW1lIGxpc3QgYSBab2QgZW51bSwgYSBNb25nb29zZVxuICogZW51bSBvciBhIGRyaXp6bGUgYCR0eXBlYCBidWlsZHMgZnJvbSkgcGx1cyB0aGUgdW5pb24gdHlwZSBkZXJpdmVkIGZyb20gaXQuXG4gKlxuICogRGVwZW5kZW5jeS1mcmVlIG9uIHB1cnBvc2U6IHRoZSBmcm9udGVuZCBpbXBvcnRzIHRoZXNlIHR5cGVzLCBzbyBhIHZhbHVlIGFkZGVkXG4gKiBoZXJlIHJlYWNoZXMgdGhlIFVJJ3MgZXhoYXVzdGl2ZSBsYWJlbCBtYXBzIGFzIGEgY29tcGlsZSBlcnJvciBpbnN0ZWFkIG9mIGFcbiAqIHNpbGVudGx5IHVuaGFuZGxlZCBzdHJpbmcuIFRoZSBQb3N0Z3JlcyBDSEVDSyBjb25zdHJhaW50cyBpbiBlYWNoIGRlcGxveVxuICogdGFyZ2V0J3MgYHBvc3RncmVzLWluaXQuc3FsYCBtaXJyb3IgdGhlIG9uZXMgc3RvcmVkIGluIFNRTC5cbiAqL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29tcGxpYW5jZSBydWxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IFJVTEVfU0VWRVJJVElFUyA9IFsnd2FybmluZycsICdlcnJvcicsICdjcml0aWNhbCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUnVsZVNldmVyaXR5ID0gKHR5cGVvZiBSVUxFX1NFVkVSSVRJRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBSVUxFX1RBUkdFVFMgPSBbJ3BsdWdpbicsICdwaXBlbGluZSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUnVsZVRhcmdldCA9ICh0eXBlb2YgUlVMRV9UQVJHRVRTKVtudW1iZXJdO1xuXG4vKiogRmllbGQtZXZhbHVhdGlvbiBvcGVyYXRvcnM7IHRoZSBlbmdpbmUncyBpbXBsZW1lbnRhdGlvbnMgbGl2ZSBpbiBhcGkvY29tcGxpYW5jZS4gKi9cbmV4cG9ydCBjb25zdCBSVUxFX09QRVJBVE9SUyA9IFtcbiAgJ2VxJywgJ25lcScsXG4gICdjb250YWlucycsICdub3RDb250YWlucycsXG4gICdyZWdleCcsXG4gICdndCcsICdndGUnLCAnbHQnLCAnbHRlJyxcbiAgJ2luJywgJ25vdEluJyxcbiAgJ2V4aXN0cycsICdub3RFeGlzdHMnLCAnbm90RW1wdHknLFxuICAnY291bnRHdCcsICdjb3VudEx0JyxcbiAgJ2xlbmd0aEd0JywgJ2xlbmd0aEx0Jyxcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSdWxlT3BlcmF0b3IgPSAodHlwZW9mIFJVTEVfT1BFUkFUT1JTKVtudW1iZXJdO1xuXG4vKiogT3BlcmF0b3JzIHRoYXQgdGVzdCBwcmVzZW5jZSBvbmx5IGFuZCB0YWtlIG5vIGNvbXBhcmlzb24gdmFsdWUuICovXG5leHBvcnQgY29uc3QgVkFMVUVMRVNTX1JVTEVfT1BFUkFUT1JTID0gWydleGlzdHMnLCAnbm90RXhpc3RzJywgJ25vdEVtcHR5J10gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IFJ1bGVPcGVyYXRvcltdO1xuXG4vKiogSG93IGEgbXVsdGktY29uZGl0aW9uIHJ1bGUgY29tYmluZXMgaXRzIGNvbmRpdGlvbnMuICovXG5leHBvcnQgY29uc3QgUlVMRV9DT05ESVRJT05fTU9ERVMgPSBbJ2FsbCcsICdhbnknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJ1bGVDb25kaXRpb25Nb2RlID0gKHR5cGVvZiBSVUxFX0NPTkRJVElPTl9NT0RFUylbbnVtYmVyXTtcblxuLyoqIGBwdWJsaXNoZWRgIHJ1bGVzIGJlbG9uZyB0byB0aGUgc3lzdGVtIG9yZyBhbmQgYXBwbHkgYnkgc3Vic2NyaXB0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IFJVTEVfU0NPUEVTID0gWydvcmcnLCAncHVibGlzaGVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSdWxlU2NvcGUgPSAodHlwZW9mIFJVTEVfU0NPUEVTKVtudW1iZXJdO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTWVzc2FnZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX1RZUEVTID0gWydhbm5vdW5jZW1lbnQnLCAnY29udmVyc2F0aW9uJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBNZXNzYWdlVHlwZSA9ICh0eXBlb2YgTUVTU0FHRV9UWVBFUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IE1FU1NBR0VfUFJJT1JJVElFUyA9IFsnbm9ybWFsJywgJ2hpZ2gnLCAndXJnZW50J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBNZXNzYWdlUHJpb3JpdHkgPSAodHlwZW9mIE1FU1NBR0VfUFJJT1JJVElFUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJpbGxpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBTVUJTQ1JJUFRJT05fU1RBVFVTRVMgPSBbJ2FjdGl2ZScsICdjYW5jZWxlZCcsICdwYXN0X2R1ZScsICd0cmlhbGluZycsICdpbmNvbXBsZXRlJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdGF0dXMgPSAodHlwZW9mIFNVQlNDUklQVElPTl9TVEFUVVNFUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IEJJTExJTkdfSU5URVJWQUxTID0gWydtb250aGx5JywgJ2FubnVhbCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgQmlsbGluZ0ludGVydmFsID0gKHR5cGVvZiBCSUxMSU5HX0lOVEVSVkFMUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIElkZW50aXR5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogT0lEQyBwcm92aWRlcnMgYW4gb3JnIElkUCBjb25maWcgY2FuIG5hbWUgKEdpdEh1YiBpcyBPQXV0aC1vbmx5IGFuZCByZWZ1c2VkIGJ5IHRoZSBPSURDIGVuZ2luZSkuICovXG5leHBvcnQgY29uc3QgSURQX1BST1ZJREVSUyA9IFsnZ2VuZXJpYy1vaWRjJywgJ2NvZ25pdG8nLCAnZ29vZ2xlJywgJ2dpdGh1YiddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgSWRwUHJvdmlkZXIgPSAodHlwZW9mIElEUF9QUk9WSURFUlMpW251bWJlcl07XG5cbi8qKiBUaGUgZmVkZXJhdGlvbiBwcm90b2NvbCBhbiBvcmcgc2lnbnMgaW4gb3ZlciDigJQgb25lIHBlciBvcmcuICovXG5leHBvcnQgY29uc3QgSURQX1BST1RPQ09MUyA9IFsnb2lkYycsICdzYW1sJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJZHBQcm90b2NvbCA9ICh0eXBlb2YgSURQX1BST1RPQ09MUylbbnVtYmVyXTtcblxuLyoqXG4gKiBXaGljaCBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGUgY2FycmllcyB3aGljaCBpZGVudGl0eSBmaWVsZC4gQW4gZW1wdHkgbmFtZVxuICogbWVhbnMgXCJ1c2UgdGhlIGNvbW1vbiBzcGVsbGluZ3NcIiAoc2hvcnQgbmFtZXMgcGx1cyB0aGUgRW50cmEvU2hpYmJvbGV0aCBVUklzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW1sQXR0cmlidXRlTWFwcGluZyB7XG4gIC8qKiBBdHRyaWJ1dGUgaG9sZGluZyB0aGUgdXNlcidzIGVtYWlsIGFkZHJlc3MuICovXG4gIGVtYWlsPzogc3RyaW5nO1xuICAvKiogQXR0cmlidXRlIGhvbGRpbmcgdGhlIGRpc3BsYXkgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIEF0dHJpYnV0ZSBob2xkaW5nIGdyb3VwIG1lbWJlcnNoaXBzIChkcml2ZXMgSklUIHJvbGUgbWFwcGluZykuICovXG4gIGdyb3Vwcz86IHN0cmluZztcbn1cblxuLyoqIFRoZSBjb2Fyc2UgZ3JhbnQgYSBwZXJtaXNzaW9uIHJvbGUgZ2l2ZXMgaXRzIG1lbWJlcnMuICovXG5leHBvcnQgY29uc3QgUk9MRV9HUkFOVFMgPSBbJ3N1cGVyYWRtaW4nLCAnYWRtaW4nLCAnbWVtYmVyJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSb2xlR3JhbnQgPSAodHlwZW9mIFJPTEVfR1JBTlRTKVtudW1iZXJdO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUGx1Z2luIGVjb3N5c3RlbSAoZWFjaCBtaXJyb3JlZCBieSBhIENIRUNLIGluIHBvc3RncmVzLWluaXQuc3FsKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFB1Ymxpc2hlciB0cnVzdCB0aWVyLiAqL1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hFUl9USUVSUyA9IFsnb2ZmaWNpYWwnLCAndmVyaWZpZWQnLCAnY29tbXVuaXR5JywgJ3VudmVyaWZpZWQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFB1Ymxpc2hlclRpZXIgPSAodHlwZW9mIFBVQkxJU0hFUl9USUVSUylbbnVtYmVyXTtcblxuLyoqIEEgZGlyZWN0b3J5IGxpc3RpbmcncyBsaWZlY3ljbGUgc3RhdGUuICovXG5leHBvcnQgY29uc3QgTElTVElOR19TVEFURVMgPSBbJ2xpc3RlZCcsICd1bm1haW50YWluZWQnLCAnc3VzcGVuZGVkJywgJ3RyYW5zZmVycmVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBMaXN0aW5nU3RhdGUgPSAodHlwZW9mIExJU1RJTkdfU1RBVEVTKVtudW1iZXJdO1xuXG4vKiogV2hhdCBhIHB1Ymxpc2ggcmVxdWVzdCBhc2tzIHRoZSBzeXN0ZW0gb3JnIHRvIGRvLiAqL1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hfUkVRVUVTVF9LSU5EUyA9IFtcbiAgJ25ld19saXN0aW5nJywgJ25ld192ZXJzaW9uJywgJ2xpc3RpbmdfdXBkYXRlJywgJ3lhbmsnLCAndW5wYXVzZScsXG4gICd0cmFuc2ZlcicsICdjbGFpbScsICdwcm9maWxlX2NoYW5nZScsICdhZHZpc29yeScsICd2ZXJpZnknLCAnbW9kZXJhdGlvbicsICdzdWJtaXNzaW9uJyxcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQdWJsaXNoUmVxdWVzdEtpbmQgPSAodHlwZW9mIFBVQkxJU0hfUkVRVUVTVF9LSU5EUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFBVQkxJU0hfUkVRVUVTVF9TVEFUVVNFUyA9IFsncGVuZGluZycsICdwZW5kaW5nX3NlY29uZF9hcHByb3ZhbCcsICdhcHByb3ZlZCcsICdyZWplY3RlZCcsICd3aXRoZHJhd24nXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFB1Ymxpc2hSZXF1ZXN0U3RhdHVzID0gKHR5cGVvZiBQVUJMSVNIX1JFUVVFU1RfU1RBVFVTRVMpW251bWJlcl07XG5cbi8qKiBUaGUgc3RhdHVzZXMgYSByZXF1ZXN0IGlzIHN0aWxsIFwib3BlblwiIGluIChkcml2ZXMgdGhlIG9uZS1vcGVuLXJlcXVlc3QgaW5kZXgpLiAqL1xuZXhwb3J0IGNvbnN0IE9QRU5fUFVCTElTSF9SRVFVRVNUX1NUQVRVU0VTID0gWydwZW5kaW5nJywgJ3BlbmRpbmdfc2Vjb25kX2FwcHJvdmFsJ10gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IFB1Ymxpc2hSZXF1ZXN0U3RhdHVzW107XG5cbi8qKiBgc2VjdXJpdHlgIHJlcXVlc3RzIGp1bXAgdGhlIG1vZGVyYXRpb24gcXVldWUuICovXG5leHBvcnQgY29uc3QgUFVCTElTSF9SRVFVRVNUX0xBTkVTID0gWydzdGFuZGFyZCcsICdzZWN1cml0eSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUHVibGlzaFJlcXVlc3RMYW5lID0gKHR5cGVvZiBQVUJMSVNIX1JFUVVFU1RfTEFORVMpW251bWJlcl07XG5cbi8qKiBJbnN0YWxsIHZlcnNpb24gcG9saWN5OiBleGFjdCwgYH5gLCBgXmAsIG9yIGFueXRoaW5nIG5vbi1icmVha2luZy4gKi9cbmV4cG9ydCBjb25zdCBJTlNUQUxMX1ZFUlNJT05fUE9MSUNJRVMgPSBbJ3Bpbm5lZCcsICdwYXRjaCcsICdtaW5vcicsICdsYXRlc3QnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEluc3RhbGxWZXJzaW9uUG9saWN5ID0gKHR5cGVvZiBJTlNUQUxMX1ZFUlNJT05fUE9MSUNJRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBJTlNUQUxMX1NUQVRVU0VTID0gWydhY3RpdmUnLCAncGVuZGluZ19hcHByb3ZhbCcsICdkZW5pZWQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEluc3RhbGxTdGF0dXMgPSAodHlwZW9mIElOU1RBTExfU1RBVFVTRVMpW251bWJlcl07XG5cbi8qKiBUaGUgYWR2aXNvcnkgc2V2ZXJpdHkgYXQgd2hpY2ggYSBjb25zdW1wdGlvbiBwb2xpY3kgYmxvY2tzIGluc3RhbGxzLiAqL1xuZXhwb3J0IGNvbnN0IEJMT0NLX09OX0FEVklTT1JZX0xFVkVMUyA9IFsnY3JpdGljYWwnLCAnaGlnaCcsICduZXZlciddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgQmxvY2tPbkFkdmlzb3J5ID0gKHR5cGVvZiBCTE9DS19PTl9BRFZJU09SWV9MRVZFTFMpW251bWJlcl07XG5cbi8qKiBXaGV0aGVyIG9mZmljaWFsIHBsdWdpbnMgbmVlZCBhbiBleHBsaWNpdCBpbnN0YWxsIGJlZm9yZSBhIHBpcGVsaW5lIGNhbiB1c2UgdGhlbS4gKi9cbmV4cG9ydCBjb25zdCBPRkZJQ0lBTF9JTlNUQUxMU19NT0RFUyA9IFsnaW1wbGljaXQnLCAnZXhwbGljaXQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIE9mZmljaWFsSW5zdGFsbHMgPSAodHlwZW9mIE9GRklDSUFMX0lOU1RBTExTX01PREVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgUkVWSUVXX1NUQVRVU0VTID0gWydwdWJsaXNoZWQnLCAnaGVsZCcsICdyZW1vdmVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXZpZXdTdGF0dXMgPSAodHlwZW9mIFJFVklFV19TVEFUVVNFUylbbnVtYmVyXTtcblxuLyoqIFdoeSBhIGhlbGQgcmV2aWV3IGlzIGhlbGQuICovXG5leHBvcnQgY29uc3QgUkVWSUVXX0hPTERfUkVBU09OUyA9IFsncmVwb3J0cycsICdidXJzdCcsICdmaWx0ZXInLCAnc2VjdXJpdHknLCAnbW9kZXJhdG9yJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXZpZXdIb2xkUmVhc29uID0gKHR5cGVvZiBSRVZJRVdfSE9MRF9SRUFTT05TKVtudW1iZXJdO1xuXG4vKiogQSByZXZpZXcgcmVwb3J0J3MgY2F0ZWdvcnk7IGBzZWN1cml0eWAgcm91dGVzIHByaXZhdGVseSB0byB0aGUgYWR2aXNvcnkgcGF0aC4gKi9cbmV4cG9ydCBjb25zdCBSRVZJRVdfUkVQT1JUX0NBVEVHT1JJRVMgPSBbJ3NwYW0nLCAnYWJ1c2UnLCAnb2ZmX3RvcGljJywgJ3NlY3VyaXR5J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXZpZXdSZXBvcnRDYXRlZ29yeSA9ICh0eXBlb2YgUkVWSUVXX1JFUE9SVF9DQVRFR09SSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgQURWSVNPUllfU0VWRVJJVElFUyA9IFsnY3JpdGljYWwnLCAnaGlnaCcsICdtZWRpdW0nLCAnbG93J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBBZHZpc29yeVNldmVyaXR5ID0gKHR5cGVvZiBBRFZJU09SWV9TRVZFUklUSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgQURWSVNPUllfU1RBVEVTID0gWydkcmFmdCcsICdwdWJsaXNoZWQnLCAnd2l0aGRyYXduJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBBZHZpc29yeVN0YXRlID0gKHR5cGVvZiBBRFZJU09SWV9TVEFURVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBBRFZJU09SWV9TT1VSQ0VTID0gWydwdWJsaXNoZXInLCAnbW9kZXJhdG9yJywgJ2N2ZV9yZXNjYW4nLCAncmV2aWV3J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBBZHZpc29yeVNvdXJjZSA9ICh0eXBlb2YgQURWSVNPUllfU09VUkNFUylbbnVtYmVyXTtcblxuLyoqXG4gKiBBbiBhbm9ueW1vdXMgc3VibWlzc2lvbidzIGxpZmVjeWNsZS4gYHB1Ymxpc2hpbmdgIGlzIHRoZSBzaG9ydCBjbGFpbSBhblxuICogYXBwcm92YWwgdGFrZXMgYmVmb3JlIGl0IGNvcGllcyB0aGUgcXVhcmFudGluZWQgaW1hZ2Ugb3V0LCBzbyBhbiBleHBpcnkgY2FuXG4gKiBuZXZlciBkZWxldGUgdGhlIGFydGlmYWN0cyBvZiBhIHN1Ym1pc3Npb24gdGhhdCBpcyBiZWluZyBwdWJsaXNoZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTVUJNSVNTSU9OX1NUQVRVU0VTID0gW1xuICAncGVuZGluZ192ZXJpZmljYXRpb24nLCAncGVuZGluZ19yZXZpZXcnLCAncHVibGlzaGluZycsICdnYXRlX2ZhaWxlZCcsICdhcHByb3ZlZCcsICdyZWplY3RlZCcsICdleHBpcmVkJywgJ2NsYWltZWQnLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFN1Ym1pc3Npb25TdGF0dXMgPSAodHlwZW9mIFNVQk1JU1NJT05fU1RBVFVTRVMpW251bWJlcl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQbHVnaW4gc2VjdXJpdHkgbm90aWZpY2F0aW9ucyAocGVyIG9yZylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBXaG8gcmVjZWl2ZXMgYW4gb3JnJ3MgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXM6IGB3cml0ZXJzYCA9IHRoZSB1cGxvYWRlciBwbHVzXG4gKiAgbWVtYmVycyBob2xkaW5nIGBwbHVnaW5zOndyaXRlYDsgYHVzZXJzYCA9IHRoZSBvcmcncyBjaG9zZW4gbWVtYmVycy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fU0VDVVJJVFlfUkVDSVBJRU5UX01PREVTID0gWyd3cml0ZXJzJywgJ3VzZXJzJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQbHVnaW5TZWN1cml0eVJlY2lwaWVudE1vZGUgPSAodHlwZW9mIFBMVUdJTl9TRUNVUklUWV9SRUNJUElFTlRfTU9ERVMpW251bWJlcl07XG5cbi8qKiBIb3cgcmVzY2FuIGZpbmRpbmdzIChOMzEpIGFyZSBiYXRjaGVkOyBibG9ja2VkIGJ1aWxkcyAoTjMwKSBhcmUgYWx3YXlzIGltbWVkaWF0ZS4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fU0VDVVJJVFlfRElHRVNUX01PREVTID0gWydpbW1lZGlhdGUnLCAnZGFpbHknLCAnd2Vla2x5J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQbHVnaW5TZWN1cml0eURpZ2VzdE1vZGUgPSAodHlwZW9mIFBMVUdJTl9TRUNVUklUWV9ESUdFU1RfTU9ERVMpW251bWJlcl07XG4iXX0=
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS12b2NhYnVsYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3dpcmUtdm9jYWJ1bGFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7R0FTRztBQUVILGdGQUFnRjtBQUNoRixtQkFBbUI7QUFDbkIsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFHekUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRzVELHVGQUF1RjtBQUN2RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsSUFBSSxFQUFFLEtBQUs7SUFDWCxVQUFVLEVBQUUsYUFBYTtJQUN6QixPQUFPO0lBQ1AsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSztJQUN4QixJQUFJLEVBQUUsT0FBTztJQUNiLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVTtJQUNqQyxTQUFTLEVBQUUsU0FBUztJQUNwQixVQUFVLEVBQUUsVUFBVTtDQUNkLENBQUM7QUFHWCxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBNEMsQ0FBQztBQUV2SCwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFVLENBQUM7QUFHNUQsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUd6RCxnRkFBZ0Y7QUFDaEYsV0FBVztBQUNYLGdGQUFnRjtBQUVoRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxjQUFjLEVBQUUs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LFVBQVUsRUFBRSxXQUFXLENBQVUsQ0FBQztBQUdwRyxvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQVUsQ0FBQztBQUc1RixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBVSxDQUFDO0FBR2xGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFVLENBQUM7QUFHNUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQVUsQ0FBQztBQUc1Rjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTO0NBQzNHLENBQUM7QUFHWCxnRkFBZ0Y7QUFDaEYsMENBQTBDO0FBQzFDLGdGQUFnRjtBQUVoRjsyRUFDMkU7QUFDM0UsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFHN0Usd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIENsb3NlZCBzdHJpbmcgdm9jYWJ1bGFyaWVzIHRoYXQgY3Jvc3MgdGhlIHdpcmUgYmV0d2VlbiB0aGUgc2VydmljZXMgYW5kIHRoZVxuICogYnJvd3Nlci4gRWFjaCBpcyBhbiBgYXMgY29uc3RgIGFycmF5ICh0aGUgcnVudGltZSBsaXN0IGEgWm9kIGVudW0sIGEgTW9uZ29vc2VcbiAqIGVudW0gb3IgYSBkcml6emxlIGAkdHlwZWAgYnVpbGRzIGZyb20pIHBsdXMgdGhlIHVuaW9uIHR5cGUgZGVyaXZlZCBmcm9tIGl0LlxuICpcbiAqIERlcGVuZGVuY3ktZnJlZSBvbiBwdXJwb3NlOiB0aGUgZnJvbnRlbmQgaW1wb3J0cyB0aGVzZSB0eXBlcywgc28gYSB2YWx1ZSBhZGRlZFxuICogaGVyZSByZWFjaGVzIHRoZSBVSSdzIGV4aGF1c3RpdmUgbGFiZWwgbWFwcyBhcyBhIGNvbXBpbGUgZXJyb3IgaW5zdGVhZCBvZiBhXG4gKiBzaWxlbnRseSB1bmhhbmRsZWQgc3RyaW5nLiBUaGUgUG9zdGdyZXMgQ0hFQ0sgY29uc3RyYWludHMgaW4gZWFjaCBkZXBsb3lcbiAqIHRhcmdldCdzIGBwb3N0Z3Jlcy1pbml0LnNxbGAgbWlycm9yIHRoZSBvbmVzIHN0b3JlZCBpbiBTUUwuXG4gKi9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvbXBsaWFuY2UgcnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBSVUxFX1NFVkVSSVRJRVMgPSBbJ3dhcm5pbmcnLCAnZXJyb3InLCAnY3JpdGljYWwnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJ1bGVTZXZlcml0eSA9ICh0eXBlb2YgUlVMRV9TRVZFUklUSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgUlVMRV9UQVJHRVRTID0gWydwbHVnaW4nLCAncGlwZWxpbmUnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJ1bGVUYXJnZXQgPSAodHlwZW9mIFJVTEVfVEFSR0VUUylbbnVtYmVyXTtcblxuLyoqIEZpZWxkLWV2YWx1YXRpb24gb3BlcmF0b3JzOyB0aGUgZW5naW5lJ3MgaW1wbGVtZW50YXRpb25zIGxpdmUgaW4gYXBpL2NvbXBsaWFuY2UuICovXG5leHBvcnQgY29uc3QgUlVMRV9PUEVSQVRPUlMgPSBbXG4gICdlcScsICduZXEnLFxuICAnY29udGFpbnMnLCAnbm90Q29udGFpbnMnLFxuICAncmVnZXgnLFxuICAnZ3QnLCAnZ3RlJywgJ2x0JywgJ2x0ZScsXG4gICdpbicsICdub3RJbicsXG4gICdleGlzdHMnLCAnbm90RXhpc3RzJywgJ25vdEVtcHR5JyxcbiAgJ2NvdW50R3QnLCAnY291bnRMdCcsXG4gICdsZW5ndGhHdCcsICdsZW5ndGhMdCcsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUnVsZU9wZXJhdG9yID0gKHR5cGVvZiBSVUxFX09QRVJBVE9SUylbbnVtYmVyXTtcblxuLyoqIE9wZXJhdG9ycyB0aGF0IHRlc3QgcHJlc2VuY2Ugb25seSBhbmQgdGFrZSBubyBjb21wYXJpc29uIHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0IFZBTFVFTEVTU19SVUxFX09QRVJBVE9SUyA9IFsnZXhpc3RzJywgJ25vdEV4aXN0cycsICdub3RFbXB0eSddIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBSdWxlT3BlcmF0b3JbXTtcblxuLyoqIEhvdyBhIG11bHRpLWNvbmRpdGlvbiBydWxlIGNvbWJpbmVzIGl0cyBjb25kaXRpb25zLiAqL1xuZXhwb3J0IGNvbnN0IFJVTEVfQ09ORElUSU9OX01PREVTID0gWydhbGwnLCAnYW55J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSdWxlQ29uZGl0aW9uTW9kZSA9ICh0eXBlb2YgUlVMRV9DT05ESVRJT05fTU9ERVMpW251bWJlcl07XG5cbi8qKiBgcHVibGlzaGVkYCBydWxlcyBiZWxvbmcgdG8gdGhlIHN5c3RlbSBvcmcgYW5kIGFwcGx5IGJ5IHN1YnNjcmlwdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBSVUxFX1NDT1BFUyA9IFsnb3JnJywgJ3B1Ymxpc2hlZCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUnVsZVNjb3BlID0gKHR5cGVvZiBSVUxFX1NDT1BFUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1lc3NhZ2VzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgTUVTU0FHRV9UWVBFUyA9IFsnYW5ub3VuY2VtZW50JywgJ2NvbnZlcnNhdGlvbiddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTWVzc2FnZVR5cGUgPSAodHlwZW9mIE1FU1NBR0VfVFlQRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX1BSSU9SSVRJRVMgPSBbJ25vcm1hbCcsICdoaWdoJywgJ3VyZ2VudCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTWVzc2FnZVByaW9yaXR5ID0gKHR5cGVvZiBNRVNTQUdFX1BSSU9SSVRJRVMpW251bWJlcl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCaWxsaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgU1VCU0NSSVBUSU9OX1NUQVRVU0VTID0gWydhY3RpdmUnLCAnY2FuY2VsZWQnLCAncGFzdF9kdWUnLCAndHJpYWxpbmcnLCAnaW5jb21wbGV0ZSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uU3RhdHVzID0gKHR5cGVvZiBTVUJTQ1JJUFRJT05fU1RBVFVTRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBCSUxMSU5HX0lOVEVSVkFMUyA9IFsnbW9udGhseScsICdhbm51YWwnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJpbGxpbmdJbnRlcnZhbCA9ICh0eXBlb2YgQklMTElOR19JTlRFUlZBTFMpW251bWJlcl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBJZGVudGl0eVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE9JREMgcHJvdmlkZXJzIGFuIG9yZyBJZFAgY29uZmlnIGNhbiBuYW1lIChHaXRIdWIgaXMgT0F1dGgtb25seSBhbmQgcmVmdXNlZCBieSB0aGUgT0lEQyBlbmdpbmUpLiAqL1xuZXhwb3J0IGNvbnN0IElEUF9QUk9WSURFUlMgPSBbJ2dlbmVyaWMtb2lkYycsICdjb2duaXRvJywgJ2dvb2dsZScsICdnaXRodWInXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIElkcFByb3ZpZGVyID0gKHR5cGVvZiBJRFBfUFJPVklERVJTKVtudW1iZXJdO1xuXG4vKiogVGhlIGZlZGVyYXRpb24gcHJvdG9jb2wgYW4gb3JnIHNpZ25zIGluIG92ZXIg4oCUIG9uZSBwZXIgb3JnLiAqL1xuZXhwb3J0IGNvbnN0IElEUF9QUk9UT0NPTFMgPSBbJ29pZGMnLCAnc2FtbCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgSWRwUHJvdG9jb2wgPSAodHlwZW9mIElEUF9QUk9UT0NPTFMpW251bWJlcl07XG5cbi8qKlxuICogV2hpY2ggU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlIGNhcnJpZXMgd2hpY2ggaWRlbnRpdHkgZmllbGQuIEFuIGVtcHR5IG5hbWVcbiAqIG1lYW5zIFwidXNlIHRoZSBjb21tb24gc3BlbGxpbmdzXCIgKHNob3J0IG5hbWVzIHBsdXMgdGhlIEVudHJhL1NoaWJib2xldGggVVJJcykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtbEF0dHJpYnV0ZU1hcHBpbmcge1xuICAvKiogQXR0cmlidXRlIGhvbGRpbmcgdGhlIHVzZXIncyBlbWFpbCBhZGRyZXNzLiAqL1xuICBlbWFpbD86IHN0cmluZztcbiAgLyoqIEF0dHJpYnV0ZSBob2xkaW5nIHRoZSBkaXNwbGF5IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBBdHRyaWJ1dGUgaG9sZGluZyBncm91cCBtZW1iZXJzaGlwcyAoZHJpdmVzIEpJVCByb2xlIG1hcHBpbmcpLiAqL1xuICBncm91cHM/OiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgY29hcnNlIGdyYW50IGEgcGVybWlzc2lvbiByb2xlIGdpdmVzIGl0cyBtZW1iZXJzLiAqL1xuZXhwb3J0IGNvbnN0IFJPTEVfR1JBTlRTID0gWydzdXBlcmFkbWluJywgJ2FkbWluJywgJ21lbWJlciddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUm9sZUdyYW50ID0gKHR5cGVvZiBST0xFX0dSQU5UUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBsdWdpbiBlY29zeXN0ZW0gKGVhY2ggbWlycm9yZWQgYnkgYSBDSEVDSyBpbiBwb3N0Z3Jlcy1pbml0LnNxbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBQdWJsaXNoZXIgdHJ1c3QgdGllci4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSVNIRVJfVElFUlMgPSBbJ29mZmljaWFsJywgJ3ZlcmlmaWVkJywgJ2NvbW11bml0eScsICd1bnZlcmlmaWVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQdWJsaXNoZXJUaWVyID0gKHR5cGVvZiBQVUJMSVNIRVJfVElFUlMpW251bWJlcl07XG5cbi8qKiBBIGRpcmVjdG9yeSBsaXN0aW5nJ3MgbGlmZWN5Y2xlIHN0YXRlLiAqL1xuZXhwb3J0IGNvbnN0IExJU1RJTkdfU1RBVEVTID0gWydsaXN0ZWQnLCAndW5tYWludGFpbmVkJywgJ3N1c3BlbmRlZCcsICd0cmFuc2ZlcnJlZCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTGlzdGluZ1N0YXRlID0gKHR5cGVvZiBMSVNUSU5HX1NUQVRFUylbbnVtYmVyXTtcblxuLyoqIFdoYXQgYSBwdWJsaXNoIHJlcXVlc3QgYXNrcyB0aGUgc3lzdGVtIG9yZyB0byBkby4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSVNIX1JFUVVFU1RfS0lORFMgPSBbXG4gICduZXdfbGlzdGluZycsICduZXdfdmVyc2lvbicsICdsaXN0aW5nX3VwZGF0ZScsICd5YW5rJywgJ3VucGF1c2UnLFxuICAndHJhbnNmZXInLCAnY2xhaW0nLCAncHJvZmlsZV9jaGFuZ2UnLCAnYWR2aXNvcnknLCAndmVyaWZ5JywgJ21vZGVyYXRpb24nLCAnc3VibWlzc2lvbicsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUHVibGlzaFJlcXVlc3RLaW5kID0gKHR5cGVvZiBQVUJMSVNIX1JFUVVFU1RfS0lORFMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBQVUJMSVNIX1JFUVVFU1RfU1RBVFVTRVMgPSBbJ3BlbmRpbmcnLCAncGVuZGluZ19zZWNvbmRfYXBwcm92YWwnLCAnYXBwcm92ZWQnLCAncmVqZWN0ZWQnLCAnd2l0aGRyYXduJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQdWJsaXNoUmVxdWVzdFN0YXR1cyA9ICh0eXBlb2YgUFVCTElTSF9SRVFVRVNUX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogVGhlIHN0YXR1c2VzIGEgcmVxdWVzdCBpcyBzdGlsbCBcIm9wZW5cIiBpbiAoZHJpdmVzIHRoZSBvbmUtb3Blbi1yZXF1ZXN0IGluZGV4KS4gKi9cbmV4cG9ydCBjb25zdCBPUEVOX1BVQkxJU0hfUkVRVUVTVF9TVEFUVVNFUyA9IFsncGVuZGluZycsICdwZW5kaW5nX3NlY29uZF9hcHByb3ZhbCddIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBQdWJsaXNoUmVxdWVzdFN0YXR1c1tdO1xuXG4vKiogYHNlY3VyaXR5YCByZXF1ZXN0cyBqdW1wIHRoZSBtb2RlcmF0aW9uIHF1ZXVlLiAqL1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hfUkVRVUVTVF9MQU5FUyA9IFsnc3RhbmRhcmQnLCAnc2VjdXJpdHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFB1Ymxpc2hSZXF1ZXN0TGFuZSA9ICh0eXBlb2YgUFVCTElTSF9SRVFVRVNUX0xBTkVTKVtudW1iZXJdO1xuXG4vKiogSW5zdGFsbCB2ZXJzaW9uIHBvbGljeTogZXhhY3QsIGB+YCwgYF5gLCBvciBhbnl0aGluZyBub24tYnJlYWtpbmcuICovXG5leHBvcnQgY29uc3QgSU5TVEFMTF9WRVJTSU9OX1BPTElDSUVTID0gWydwaW5uZWQnLCAncGF0Y2gnLCAnbWlub3InLCAnbGF0ZXN0J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJbnN0YWxsVmVyc2lvblBvbGljeSA9ICh0eXBlb2YgSU5TVEFMTF9WRVJTSU9OX1BPTElDSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgSU5TVEFMTF9TVEFUVVNFUyA9IFsnYWN0aXZlJywgJ3BlbmRpbmdfYXBwcm92YWwnLCAnZGVuaWVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJbnN0YWxsU3RhdHVzID0gKHR5cGVvZiBJTlNUQUxMX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogVGhlIGFkdmlzb3J5IHNldmVyaXR5IGF0IHdoaWNoIGEgY29uc3VtcHRpb24gcG9saWN5IGJsb2NrcyBpbnN0YWxscy4gKi9cbmV4cG9ydCBjb25zdCBCTE9DS19PTl9BRFZJU09SWV9MRVZFTFMgPSBbJ2NyaXRpY2FsJywgJ2hpZ2gnLCAnbmV2ZXInXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJsb2NrT25BZHZpc29yeSA9ICh0eXBlb2YgQkxPQ0tfT05fQURWSVNPUllfTEVWRUxTKVtudW1iZXJdO1xuXG4vKiogV2hldGhlciBvZmZpY2lhbCBwbHVnaW5zIG5lZWQgYW4gZXhwbGljaXQgaW5zdGFsbCBiZWZvcmUgYSBwaXBlbGluZSBjYW4gdXNlIHRoZW0uICovXG5leHBvcnQgY29uc3QgT0ZGSUNJQUxfSU5TVEFMTFNfTU9ERVMgPSBbJ2ltcGxpY2l0JywgJ2V4cGxpY2l0J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBPZmZpY2lhbEluc3RhbGxzID0gKHR5cGVvZiBPRkZJQ0lBTF9JTlNUQUxMU19NT0RFUylbbnVtYmVyXTtcblxuLyoqXG4gKiBXaGF0IGhhcHBlbnMgd2hlbiBhbiBvcmcgZGVmaW5lcyBhIHBsdWdpbiBOQU1FIHRoYXQgb3ZlcnJpZGVzIHNvbWV0aGluZyBpdFxuICogd291bGQgb3RoZXJ3aXNlIHJlc29sdmUg4oCUIGEgbGlzdGluZywgb3IgKGZvciBhIHRlYW0pIGl0cyBwYXJlbnQgb3JnJ3MgcGx1Z2luLlxuICpcbiAqIGBhbGxvd2Aga2VlcHMgdG9kYXkncyBiZWhhdmlvdXI6IHRoZSBvdmVycmlkZSBpcyBzaWxlbnQgYmV5b25kIHRoZSBkYXNoYm9hcmRcbiAqIGJhbm5lci4gYHdhcm5gIGlzIHRoZSBzYW1lIHJlc29sdXRpb24gd2l0aCB0aGUgZmFjdCByZWNvcmRlZCBwcm9taW5lbnRseS5cbiAqIGBkZW55YCByZWZ1c2VzIHRoZSB1cGxvYWQsIHdoaWNoIGlzIHRoZSBvbmx5IHNldHRpbmcgdGhhdCBhY3R1YWxseSBzdG9wcyBhXG4gKiB0ZWFtIHJlcGxhY2luZyB0aGUgT2ZmaWNpYWwgYHRyaXZ5YCBmb3IgZXZlcnkgcGlwZWxpbmUgdGhhdCBuYW1lcyBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNIQURPV0lOR19NT0RFUyA9IFsnYWxsb3cnLCAnd2FybicsICdkZW55J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBTaGFkb3dpbmdNb2RlID0gKHR5cGVvZiBTSEFET1dJTkdfTU9ERVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBSRVZJRVdfU1RBVFVTRVMgPSBbJ3B1Ymxpc2hlZCcsICdoZWxkJywgJ3JlbW92ZWQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJldmlld1N0YXR1cyA9ICh0eXBlb2YgUkVWSUVXX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogV2h5IGEgaGVsZCByZXZpZXcgaXMgaGVsZC4gKi9cbmV4cG9ydCBjb25zdCBSRVZJRVdfSE9MRF9SRUFTT05TID0gWydyZXBvcnRzJywgJ2J1cnN0JywgJ2ZpbHRlcicsICdzZWN1cml0eScsICdtb2RlcmF0b3InXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJldmlld0hvbGRSZWFzb24gPSAodHlwZW9mIFJFVklFV19IT0xEX1JFQVNPTlMpW251bWJlcl07XG5cbi8qKiBBIHJldmlldyByZXBvcnQncyBjYXRlZ29yeTsgYHNlY3VyaXR5YCByb3V0ZXMgcHJpdmF0ZWx5IHRvIHRoZSBhZHZpc29yeSBwYXRoLiAqL1xuZXhwb3J0IGNvbnN0IFJFVklFV19SRVBPUlRfQ0FURUdPUklFUyA9IFsnc3BhbScsICdhYnVzZScsICdvZmZfdG9waWMnLCAnc2VjdXJpdHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJldmlld1JlcG9ydENhdGVnb3J5ID0gKHR5cGVvZiBSRVZJRVdfUkVQT1JUX0NBVEVHT1JJRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBBRFZJU09SWV9TRVZFUklUSUVTID0gWydjcml0aWNhbCcsICdoaWdoJywgJ21lZGl1bScsICdsb3cnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEFkdmlzb3J5U2V2ZXJpdHkgPSAodHlwZW9mIEFEVklTT1JZX1NFVkVSSVRJRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBBRFZJU09SWV9TVEFURVMgPSBbJ2RyYWZ0JywgJ3B1Ymxpc2hlZCcsICd3aXRoZHJhd24nXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEFkdmlzb3J5U3RhdGUgPSAodHlwZW9mIEFEVklTT1JZX1NUQVRFUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IEFEVklTT1JZX1NPVVJDRVMgPSBbJ3B1Ymxpc2hlcicsICdtb2RlcmF0b3InLCAnY3ZlX3Jlc2NhbicsICdyZXZpZXcnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEFkdmlzb3J5U291cmNlID0gKHR5cGVvZiBBRFZJU09SWV9TT1VSQ0VTKVtudW1iZXJdO1xuXG4vKipcbiAqIEFuIGFub255bW91cyBzdWJtaXNzaW9uJ3MgbGlmZWN5Y2xlLiBgcHVibGlzaGluZ2AgaXMgdGhlIHNob3J0IGNsYWltIGFuXG4gKiBhcHByb3ZhbCB0YWtlcyBiZWZvcmUgaXQgY29waWVzIHRoZSBxdWFyYW50aW5lZCBpbWFnZSBvdXQsIHNvIGFuIGV4cGlyeSBjYW5cbiAqIG5ldmVyIGRlbGV0ZSB0aGUgYXJ0aWZhY3RzIG9mIGEgc3VibWlzc2lvbiB0aGF0IGlzIGJlaW5nIHB1Ymxpc2hlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNVQk1JU1NJT05fU1RBVFVTRVMgPSBbXG4gICdwZW5kaW5nX3ZlcmlmaWNhdGlvbicsICdwZW5kaW5nX3JldmlldycsICdwdWJsaXNoaW5nJywgJ2dhdGVfZmFpbGVkJywgJ2FwcHJvdmVkJywgJ3JlamVjdGVkJywgJ2V4cGlyZWQnLCAnY2xhaW1lZCcsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU3VibWlzc2lvblN0YXR1cyA9ICh0eXBlb2YgU1VCTUlTU0lPTl9TVEFUVVNFUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBsdWdpbiBzZWN1cml0eSBub3RpZmljYXRpb25zIChwZXIgb3JnKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFdobyByZWNlaXZlcyBhbiBvcmcncyBwbHVnaW4gc2VjdXJpdHkgbm90aWNlczogYHdyaXRlcnNgID0gdGhlIHVwbG9hZGVyIHBsdXNcbiAqICBtZW1iZXJzIGhvbGRpbmcgYHBsdWdpbnM6d3JpdGVgOyBgdXNlcnNgID0gdGhlIG9yZydzIGNob3NlbiBtZW1iZXJzLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9TRUNVUklUWV9SRUNJUElFTlRfTU9ERVMgPSBbJ3dyaXRlcnMnLCAndXNlcnMnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpblNlY3VyaXR5UmVjaXBpZW50TW9kZSA9ICh0eXBlb2YgUExVR0lOX1NFQ1VSSVRZX1JFQ0lQSUVOVF9NT0RFUylbbnVtYmVyXTtcblxuLyoqIEhvdyByZXNjYW4gZmluZGluZ3MgKE4zMSkgYXJlIGJhdGNoZWQ7IGJsb2NrZWQgYnVpbGRzIChOMzApIGFyZSBhbHdheXMgaW1tZWRpYXRlLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9TRUNVUklUWV9ESUdFU1RfTU9ERVMgPSBbJ2ltbWVkaWF0ZScsICdkYWlseScsICd3ZWVrbHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpblNlY3VyaXR5RGlnZXN0TW9kZSA9ICh0eXBlb2YgUExVR0lOX1NFQ1VSSVRZX0RJR0VTVF9NT0RFUylbbnVtYmVyXTtcbiJdfQ==