@poe-platform/safe-bash 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +5 -2
  2. package/package.json +2 -2
  3. package/dist/safe-bash/commands/git/arguments.d.ts +0 -17
  4. package/dist/safe-bash/commands/git/arguments.d.ts.map +0 -1
  5. package/dist/safe-bash/commands/git/arguments.js +0 -150
  6. package/dist/safe-bash/commands/git/arguments.js.map +0 -1
  7. package/dist/safe-bash/commands/git/codec.d.ts +0 -8
  8. package/dist/safe-bash/commands/git/codec.d.ts.map +0 -1
  9. package/dist/safe-bash/commands/git/codec.js +0 -225
  10. package/dist/safe-bash/commands/git/codec.js.map +0 -1
  11. package/dist/safe-bash/commands/git/config.d.ts +0 -8
  12. package/dist/safe-bash/commands/git/config.d.ts.map +0 -1
  13. package/dist/safe-bash/commands/git/config.js +0 -100
  14. package/dist/safe-bash/commands/git/config.js.map +0 -1
  15. package/dist/safe-bash/commands/git/crc.d.ts +0 -3
  16. package/dist/safe-bash/commands/git/crc.d.ts.map +0 -1
  17. package/dist/safe-bash/commands/git/crc.js +0 -14
  18. package/dist/safe-bash/commands/git/crc.js.map +0 -1
  19. package/dist/safe-bash/commands/git/delta.d.ts +0 -4
  20. package/dist/safe-bash/commands/git/delta.d.ts.map +0 -1
  21. package/dist/safe-bash/commands/git/delta.js +0 -62
  22. package/dist/safe-bash/commands/git/delta.js.map +0 -1
  23. package/dist/safe-bash/commands/git/diff.d.ts +0 -9
  24. package/dist/safe-bash/commands/git/diff.d.ts.map +0 -1
  25. package/dist/safe-bash/commands/git/diff.js +0 -131
  26. package/dist/safe-bash/commands/git/diff.js.map +0 -1
  27. package/dist/safe-bash/commands/git/ignore.d.ts +0 -22
  28. package/dist/safe-bash/commands/git/ignore.d.ts.map +0 -1
  29. package/dist/safe-bash/commands/git/ignore.js +0 -153
  30. package/dist/safe-bash/commands/git/ignore.js.map +0 -1
  31. package/dist/safe-bash/commands/git/index.d.ts +0 -7
  32. package/dist/safe-bash/commands/git/index.d.ts.map +0 -1
  33. package/dist/safe-bash/commands/git/index.js +0 -66
  34. package/dist/safe-bash/commands/git/index.js.map +0 -1
  35. package/dist/safe-bash/commands/git/io.d.ts +0 -46
  36. package/dist/safe-bash/commands/git/io.d.ts.map +0 -1
  37. package/dist/safe-bash/commands/git/io.js +0 -388
  38. package/dist/safe-bash/commands/git/io.js.map +0 -1
  39. package/dist/safe-bash/commands/git/limits.d.ts +0 -39
  40. package/dist/safe-bash/commands/git/limits.d.ts.map +0 -1
  41. package/dist/safe-bash/commands/git/limits.js +0 -43
  42. package/dist/safe-bash/commands/git/limits.js.map +0 -1
  43. package/dist/safe-bash/commands/git/pack.d.ts +0 -14
  44. package/dist/safe-bash/commands/git/pack.d.ts.map +0 -1
  45. package/dist/safe-bash/commands/git/pack.js +0 -273
  46. package/dist/safe-bash/commands/git/pack.js.map +0 -1
  47. package/dist/safe-bash/commands/git/queries.d.ts +0 -6
  48. package/dist/safe-bash/commands/git/queries.d.ts.map +0 -1
  49. package/dist/safe-bash/commands/git/queries.js +0 -292
  50. package/dist/safe-bash/commands/git/queries.js.map +0 -1
  51. package/dist/safe-bash/commands/git/repository.d.ts +0 -49
  52. package/dist/safe-bash/commands/git/repository.d.ts.map +0 -1
  53. package/dist/safe-bash/commands/git/repository.js +0 -473
  54. package/dist/safe-bash/commands/git/repository.js.map +0 -1
@@ -1,273 +0,0 @@
1
- import { inflatePackedFrame } from "./codec.js";
2
- import { crc32 } from "./crc.js";
3
- import { applyDelta } from "./delta.js";
4
- import { GIT_LIMITS, demand } from "./limits.js";
5
- const packName = /^pack-([0-9a-f]{40})\.(pack|idx|rev|bitmap|keep|mtimes)$/;
6
- export class PackCatalogue {
7
- session;
8
- objects = new Map();
9
- owners = new Set();
10
- constructor(session) {
11
- this.session = session;
12
- session.onFinish(() => this.close());
13
- }
14
- close() {
15
- for (const body of this.owners)
16
- this.session.release(body);
17
- this.owners.clear();
18
- this.objects.clear();
19
- }
20
- async retain(oid, object) {
21
- const prior = this.objects.get(oid);
22
- if (!prior) {
23
- this.owners.add(object.bytes);
24
- this.objects.set(oid, object);
25
- return object;
26
- }
27
- let same = prior.type === object.type && prior.bytes.length === object.bytes.length;
28
- for (let offset = 0; same && offset < object.bytes.length; offset += 4096) {
29
- const end = Math.min(object.bytes.length, offset + 4096);
30
- await this.session.step(end - offset);
31
- same = prior.bytes.subarray(offset, end).equals(object.bytes.subarray(offset, end));
32
- }
33
- demand(same, "conflicting Git packed duplicate object");
34
- this.session.release(object.bytes);
35
- return prior;
36
- }
37
- async admit(gitdir) {
38
- const session = this.session;
39
- const census = async () => {
40
- const pairs = new Map();
41
- const observations = [];
42
- for (const part of ["pack", "info"]) {
43
- const directory = session.path(gitdir, `objects/${part}`);
44
- const parent = await session.stat(directory);
45
- if (!parent) {
46
- observations.push(`${part}:absent`);
47
- continue;
48
- }
49
- demand(parent.type === "directory", "Git packed metadata directory required");
50
- observations.push(`${part}:directory`);
51
- for (const entry of await session.list(directory)) {
52
- const path = session.path(directory, entry.name);
53
- const stat = await session.stat(path);
54
- demand(entry.type === "file" && stat?.type === "file", "Git packed sidecar/link/type refused");
55
- demand(Number.isSafeInteger(stat.size) && stat.size >= 0, "invalid Git packed metadata size");
56
- const matched = part === "pack" ? packName.exec(entry.name) : null;
57
- if (matched) {
58
- const name = matched[1], kind = matched[2];
59
- if (!pairs.has(name)) {
60
- session.reserve(256);
61
- pairs.set(name, new Set());
62
- }
63
- pairs.get(name).add(kind);
64
- demand(stat.size <= (kind === "pack" ? GIT_LIMITS.maxPackBytes : GIT_LIMITS.maxIndexBytes), "Git pack/idx/sidecar size exceeded");
65
- }
66
- else {
67
- demand(part === "pack" ? entry.name === "multi-pack-index" : entry.name === "packs" || entry.name === "commit-graph", "unsupported Git unknown/promisor packed storage");
68
- demand(stat.size <= GIT_LIMITS.maxIndexBytes, "Git inert sidecar size exceeded");
69
- }
70
- const observation = `${part}/${entry.name}:${stat.type}:${stat.size}:${stat.mode}:${stat.mtimeMs}:${stat.ctimeMs}`;
71
- session.reserve(observation.length * 2);
72
- observations.push(observation);
73
- }
74
- }
75
- for (const kinds of pairs.values())
76
- demand(kinds.has("pack") && kinds.has("idx"), "Git incomplete pack/idx pair");
77
- demand(pairs.size <= GIT_LIMITS.maxPacks, "Git maxPacks exceeded");
78
- return session.sorted(observations);
79
- };
80
- const before = await census();
81
- session.observe(async () => {
82
- const after = await census();
83
- demand(after.length === before.length, "Git pack membership changed before output");
84
- for (let index = 0; index < before.length; index++) {
85
- await session.step(before[index].length + 1);
86
- demand(after[index] === before[index], "Git pack/sidecar observations changed before output");
87
- }
88
- });
89
- for (const row of before) {
90
- const match = /^pack\/(pack-([0-9a-f]{40})\.pack):/.exec(row);
91
- if (!match)
92
- continue;
93
- session.charge("maxPacks", 1);
94
- await this.readPack(session.path(gitdir, `objects/pack/${match[1]}`), match[2]);
95
- }
96
- }
97
- async index(bytes, pack) {
98
- const session = this.session;
99
- demand(bytes.length >= 1072 && bytes.subarray(0, 8).equals(Buffer.from("ff744f6300000002", "hex")), "Git idx2 header/size refused");
100
- demand(await session.hash(bytes.subarray(0, -20)) === bytes.subarray(-20).toString("hex"), "Git idx checksum mismatch");
101
- demand(bytes.subarray(-40, -20).equals(pack.subarray(-20)), "Git idx pack checksum mismatch");
102
- const count = bytes.readUInt32BE(1028);
103
- session.charge("maxEntries", count);
104
- const base = 1072 + count * 28, extra = bytes.length - base;
105
- demand(Number.isSafeInteger(base) && extra >= 0 && extra % 8 === 0 && (count === 0 ? extra === 0 : extra / 8 <= count - 1), "Git idx extent refused");
106
- demand(pack.readUInt32BE(8) === count, "Git pack/index object count mismatch");
107
- const largeStart = 1032 + count * 28, largeCount = extra / 8;
108
- session.reserve(count * 256);
109
- const slots = session.allocate(largeCount);
110
- let buckets;
111
- try {
112
- buckets = session.allocate(1024);
113
- const rows = [];
114
- let previous = "";
115
- for (let index = 0; index < count; index++) {
116
- await session.step(40);
117
- const oid = bytes.subarray(1032 + index * 20, 1052 + index * 20).toString("hex");
118
- demand(oid > previous, "Git idx OID order/duplicate refused");
119
- previous = oid;
120
- const bucket = bytes[1032 + index * 20];
121
- buckets.writeUInt32BE(buckets.readUInt32BE(bucket * 4) + 1, bucket * 4);
122
- const value = bytes.readUInt32BE(1032 + count * 24 + index * 4);
123
- let offset = value;
124
- if (value >= 0x80000000) {
125
- const slot = value - 0x80000000;
126
- demand(slot < largeCount && slots[slot] === 0, "Git idx large slot invalid/duplicate");
127
- slots[slot] = 1;
128
- const large = bytes.readBigUInt64BE(largeStart + slot * 8);
129
- demand(large <= BigInt(Number.MAX_SAFE_INTEGER), "Git idx offset unsafe");
130
- offset = Number(large);
131
- }
132
- demand(offset >= 12 && offset < pack.length - 20, "Git idx offset outside pack");
133
- rows.push({ oid, offset, crc: bytes.readUInt32BE(1032 + count * 20 + index * 4), end: 0, type: 0, declared: 0, compressed: 0, base: undefined, state: 0, depth: 0, object: undefined });
134
- }
135
- for (let slot = 0; slot < largeCount; slot++) {
136
- await session.step();
137
- demand(slots[slot] === 1, "unused Git idx large slot");
138
- }
139
- let cumulative = 0;
140
- for (let bucket = 0; bucket < 256; bucket++) {
141
- await session.step();
142
- cumulative += buckets.readUInt32BE(bucket * 4);
143
- demand(bytes.readUInt32BE(8 + bucket * 4) === cumulative, "Git idx fanout mismatch");
144
- }
145
- return rows;
146
- }
147
- finally {
148
- session.release(slots);
149
- if (buckets)
150
- session.release(buckets);
151
- }
152
- }
153
- async readPack(path, name) {
154
- const session = this.session;
155
- const pack = await session.readExact(path, GIT_LIMITS.maxPackBytes);
156
- let index;
157
- try {
158
- demand(pack.length >= 32 && pack.subarray(0, 4).toString("ascii") === "PACK", "Git pack header refused");
159
- demand(pack.readUInt32BE(4) === 2 || pack.readUInt32BE(4) === 3, "Git pack version refused");
160
- const checksum = pack.subarray(-20).toString("hex");
161
- demand(await session.hash(pack.subarray(0, -20)) === checksum && name === checksum, "Git pack checksum/name mismatch");
162
- index = await session.readExact(path.slice(0, -5) + ".idx", GIT_LIMITS.maxIndexBytes);
163
- const rows = await this.index(index, pack);
164
- const byOid = new Map();
165
- const byOffset = new Map();
166
- const offsets = [];
167
- for (const row of rows) {
168
- await session.step(4);
169
- byOid.set(row.oid, row);
170
- byOffset.set(row.offset, row);
171
- offsets.push(row.offset.toString().padStart(10, "0"));
172
- }
173
- demand(byOffset.size === rows.length, "duplicate Git idx pack offset");
174
- const order = await session.sorted(offsets);
175
- const ordered = [];
176
- for (const offset of order) {
177
- await session.step();
178
- ordered.push(byOffset.get(Number(offset)));
179
- }
180
- if (!ordered.length)
181
- demand(pack.length === 32, "Git empty pack trailing bytes");
182
- for (let position = 0; position < ordered.length; position++) {
183
- const row = ordered[position];
184
- demand(position !== 0 || row.offset === 12, "Git first pack entry offset mismatch");
185
- row.end = ordered[position + 1]?.offset ?? pack.length - 20;
186
- demand(await crc32(session, pack.subarray(row.offset, row.end)) === row.crc, "Git pack entry CRC mismatch");
187
- let cursor = row.offset;
188
- const byte = () => { demand(cursor < row.end, "truncated Git pack entry header"); return pack[cursor++]; };
189
- let part = byte(), factor = 16;
190
- row.type = (part >>> 4) & 7;
191
- demand([1, 2, 3, 4, 6, 7].includes(row.type), "Git pack entry type refused");
192
- row.declared = part & 15;
193
- while (part >= 128) {
194
- await session.step();
195
- part = byte();
196
- row.declared += (part & 127) * factor;
197
- demand(Number.isSafeInteger(row.declared) && row.declared <= GIT_LIMITS.maxObjectBytes, "Git pack declared size exceeded");
198
- factor *= 128;
199
- demand(Number.isSafeInteger(factor), "Git pack size overflow");
200
- }
201
- if (row.type === 6) {
202
- part = byte();
203
- let distance = part & 127;
204
- while (part >= 128) {
205
- await session.step();
206
- part = byte();
207
- distance = (distance + 1) * 128 + (part & 127);
208
- demand(Number.isSafeInteger(distance), "Git OFS distance overflow");
209
- }
210
- row.base = byOffset.get(row.offset - distance);
211
- demand(distance > 0 && row.base && row.base.offset < row.offset, "Git OFS base is not earlier entry");
212
- }
213
- else if (row.type === 7) {
214
- demand(cursor + 20 <= row.end, "truncated Git REF base");
215
- row.base = byOid.get(pack.subarray(cursor, cursor + 20).toString("hex"));
216
- cursor += 20;
217
- demand(row.base, "Git REF base outside same pack");
218
- }
219
- row.compressed = cursor;
220
- }
221
- for (const target of ordered) {
222
- const pending = [];
223
- let current = target;
224
- while (current.state !== 2) {
225
- await session.step();
226
- demand(current.state === 0, "Git delta cycle");
227
- current.state = 1;
228
- pending.push(current);
229
- demand(pending.length <= GIT_LIMITS.maxDeltaDepth + 1, "Git delta depth exceeded");
230
- if (!current.base)
231
- break;
232
- current = current.base;
233
- }
234
- while (pending.length) {
235
- const row = pending.pop();
236
- row.depth = row.base ? row.base.depth + 1 : 0;
237
- demand(row.depth <= GIT_LIMITS.maxDeltaDepth, "Git delta intrinsic depth exceeded");
238
- const inflated = await inflatePackedFrame(session, pack.subarray(row.compressed, row.end), row.declared);
239
- let object;
240
- let transferred = false;
241
- try {
242
- if (row.base) {
243
- demand(row.base.state === 2 && row.base.object, "Git delta base not verified");
244
- object = await applyDelta(session, row.base.object, inflated, row.oid);
245
- }
246
- else {
247
- const type = ["commit", "tree", "blob", "tag"][row.type - 1];
248
- demand(await session.hash(inflated, type) === row.oid, "Git packed object hash mismatch");
249
- object = { type, bytes: inflated };
250
- }
251
- row.object = await this.retain(row.oid, object);
252
- transferred = true;
253
- row.state = 2;
254
- }
255
- finally {
256
- if (row.base || !transferred)
257
- session.release(inflated);
258
- if (object && !transferred)
259
- session.release(object.bytes);
260
- }
261
- }
262
- }
263
- await session.observeExact(path, GIT_LIMITS.maxPackBytes, pack);
264
- await session.observeExact(path.slice(0, -5) + ".idx", GIT_LIMITS.maxIndexBytes, index);
265
- }
266
- finally {
267
- session.release(pack);
268
- if (index)
269
- session.release(index);
270
- }
271
- }
272
- }
273
- //# sourceMappingURL=pack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../../src/commands/git/pack.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { type Arguments } from "./arguments.js";
2
- import { Repository } from "./repository.js";
3
- export declare function status(repository: Repository, parsed: Arguments): Promise<number>;
4
- export declare function diff(repository: Repository, parsed: Arguments): Promise<number>;
5
- export declare function query(repository: Repository, parsed: Arguments): Promise<number>;
6
- //# sourceMappingURL=queries.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/commands/git/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK5E,OAAO,EAAE,UAAU,EAAc,MAAM,iBAAiB,CAAC;AA6GzD,wBAAsB,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBvF;AAED,wBAAsB,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BrF;AAED,wBAAsB,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA+CtF"}
@@ -1,292 +0,0 @@
1
- import { relativePath } from "../../contracts/index.js";
2
- import { pathspecs, quote, selected } from "./arguments.js";
3
- import { patch } from "./diff.js";
4
- import { ignored, ignoreFile } from "./ignore.js";
5
- import { objectPath, parent } from "./io.js";
6
- import { GIT_LIMITS, GitFailure, demand } from "./limits.js";
7
- import { Repository } from "./repository.js";
8
- function change(before, after) {
9
- if (!before)
10
- return after ? "A" : " ";
11
- if (!after)
12
- return "D";
13
- if ((before.mode & 0o170000) !== (after.mode & 0o170000))
14
- return "T";
15
- return before.mode !== after.mode || before.oid !== after.oid ? "M" : " ";
16
- }
17
- async function blob(repository, entry) {
18
- if (!entry)
19
- return undefined;
20
- const object = await repository.object(entry.oid);
21
- demand(object.type === "blob", "Git index/tree leaf is not a blob");
22
- return { ...entry, bytes: object.bytes };
23
- }
24
- async function attributes(repository, specs, maps, worktree) {
25
- const session = repository.session;
26
- const check = async (bytes) => {
27
- for (const line of session.text(bytes).split("\n")) {
28
- await session.step(line.length + 1);
29
- demand(!line.trim() || line.trimStart().startsWith("#"), "M1A active Git attributes unsupported");
30
- }
31
- };
32
- const info = await session.read(session.path(repository.gitdir, "info/attributes"), GIT_LIMITS.maxMetadataBytes, true, true);
33
- if (info) {
34
- try {
35
- await check(info);
36
- }
37
- finally {
38
- session.release(info);
39
- }
40
- }
41
- const names = new Set([".gitattributes"]);
42
- for (const map of maps)
43
- for (const name of map.keys()) {
44
- if (!selected(name, specs))
45
- continue;
46
- let directory = parent(name);
47
- while (directory !== "." && directory !== "/") {
48
- names.add(directory + "/.gitattributes");
49
- directory = parent(directory);
50
- }
51
- if (name.endsWith("/.gitattributes"))
52
- names.add(name);
53
- }
54
- for (const spec of specs) {
55
- let directory = spec;
56
- while (directory && directory !== "." && directory !== "/") {
57
- names.add(directory + "/.gitattributes");
58
- directory = parent(directory);
59
- }
60
- }
61
- for (const name of names) {
62
- for (const map of maps) {
63
- const entry = map.get(name);
64
- if (!entry)
65
- continue;
66
- demand(entry.mode !== 0o120000, "symlinked Git attributes unsupported");
67
- const value = await blob(repository, entry);
68
- demand(value.bytes.length <= GIT_LIMITS.maxMetadataBytes, "Git attributes size exceeded");
69
- await check(value.bytes);
70
- }
71
- if (worktree && repository.root) {
72
- let directory = parent(name), obstructed = false;
73
- while (directory !== "." && directory !== "/") {
74
- const stat = await session.stat(session.path(repository.root, directory));
75
- if (!stat || stat.type !== "directory") {
76
- obstructed = true;
77
- break;
78
- }
79
- directory = parent(directory);
80
- }
81
- if (obstructed)
82
- continue;
83
- const value = await session.read(session.path(repository.root, name), GIT_LIMITS.maxMetadataBytes, true, true);
84
- if (value) {
85
- try {
86
- await check(value);
87
- }
88
- finally {
89
- session.release(value);
90
- }
91
- }
92
- }
93
- }
94
- }
95
- async function untracked(repository, parsed, tracked) {
96
- const session = repository.session, root = repository.root;
97
- const specs = pathspecs(parsed, root);
98
- const directories = new Set();
99
- for (const path of tracked) {
100
- let directory = parent(path);
101
- while (directory !== "." && directory !== "/") {
102
- await session.step(directory.length + 1);
103
- if (!directories.has(directory)) {
104
- session.reserve(directory.length * 2 + 24);
105
- directories.add(directory);
106
- }
107
- directory = parent(directory);
108
- }
109
- }
110
- const initial = await ignoreFile(session, session.path(repository.gitdir, "info/exclude"), "");
111
- const walk = async (directory, inherited, depth) => {
112
- demand(depth <= GIT_LIMITS.maxDepth, "Git worktree depth exceeded");
113
- const absolute = session.path(root, directory);
114
- const rules = [...inherited, ...await ignoreFile(session, session.path(absolute, ".gitignore"), directory)];
115
- const output = [];
116
- for (const name of await session.sorted((await session.list(absolute)).map(entry => entry.name))) {
117
- if (name.toLowerCase() === ".git") {
118
- demand(!directory && name === ".git", "nested/case-aliased Git repository unsupported");
119
- continue;
120
- }
121
- const path = directory ? directory + "/" + name : name;
122
- objectPath(path);
123
- const stat = (await session.stat(session.path(root, path)));
124
- demand(stat, "Git directory changed during scan");
125
- const hasTracked = tracked.has(path) || directories.has(path);
126
- await session.step(path.length + 1);
127
- if (!hasTracked && await ignored(session, rules, path, stat.type === "directory"))
128
- continue;
129
- if (stat.type === "directory") {
130
- const children = await walk(path, rules, depth + 1);
131
- if (children.length && !hasTracked && parsed.untracked === "normal" && selected(path, specs))
132
- output.push(path + "/");
133
- else
134
- output.push(...children);
135
- }
136
- else if (!tracked.has(path) && selected(path, specs)) {
137
- demand(stat.type === "file" || stat.type === "symlink", "unsupported Git worktree entry");
138
- output.push(path);
139
- }
140
- }
141
- return output;
142
- };
143
- return walk("", initial, 0);
144
- }
145
- function display(repository, parsed, path, porcelain = false) {
146
- const name = porcelain ? path : relativePath(parsed.cwd, repository.session.path(repository.root ?? repository.cwd, path)) + (path.endsWith("/") ? "/" : "");
147
- return parsed.flags.has("-z") ? name : quote(name);
148
- }
149
- export async function status(repository, parsed) {
150
- demand(repository.root, "Git status requires a worktree");
151
- const session = repository.session, specs = pathspecs(parsed, repository.root);
152
- const index = await repository.index(), head = await repository.tree(await repository.revision("HEAD", true));
153
- const cached = new Map(index.filter(entry => entry.stage === 0).map(entry => [entry.path, entry]));
154
- await attributes(repository, specs, [head, cached], true);
155
- const stages = new Map();
156
- for (const entry of index)
157
- if (entry.stage)
158
- stages.set(entry.path, (stages.get(entry.path) ?? 0) | 1 << (entry.stage - 1));
159
- const rows = [];
160
- const conflict = { 1: "DD", 2: "AU", 4: "UA", 3: "UD", 5: "DU", 6: "AA", 7: "UU" };
161
- for (const path of await session.sorted(new Set([...head.keys(), ...cached.keys(), ...stages.keys()]))) {
162
- if (!selected(path, specs))
163
- continue;
164
- if (stages.has(path)) {
165
- rows.push({ path, code: conflict[stages.get(path)] });
166
- continue;
167
- }
168
- const entry = cached.get(path), working = entry ? await repository.working(entry) : undefined;
169
- const code = change(head.get(path), entry) + (entry ? change(entry, working) : " ");
170
- if (working)
171
- session.release(working.bytes);
172
- if (code !== " ")
173
- rows.push({ path, code });
174
- }
175
- if (parsed.untracked !== "no")
176
- for (const path of await untracked(repository, parsed, new Set(index.map(entry => entry.path))))
177
- rows.push({ path, code: "??" });
178
- await session.unchanged();
179
- const porcelain = ["--porcelain", "--porcelain=v1", "-z"].some(flag => parsed.flags.has(flag));
180
- for (const row of rows)
181
- await session.output(`${row.code} ${display(repository, parsed, row.path, porcelain)}${parsed.flags.has("-z") ? "\0" : "\n"}`);
182
- return 0;
183
- }
184
- export async function diff(repository, parsed) {
185
- const session = repository.session, specs = pathspecs(parsed, repository.root);
186
- const cached = parsed.flags.has("--cached") || parsed.flags.has("--staged");
187
- demand(!cached || parsed.operands.length <= 1, "cached Git diff takes at most one revision");
188
- const working = !cached && parsed.operands.length < 2;
189
- demand(!working || repository.root, "working Git diff requires a worktree");
190
- const index = cached || working ? await repository.index() : [];
191
- demand(!index.some(entry => entry.stage && selected(entry.path, specs)), "selected unmerged Git diff unsupported");
192
- const indexMap = new Map(index.filter(entry => !entry.stage).map(entry => [entry.path, entry]));
193
- const before = parsed.operands[0] || cached ? await repository.tree(await repository.revision(parsed.operands[0] ?? "HEAD", cached && !parsed.operands[0])) : indexMap;
194
- const after = parsed.operands[1] ? await repository.tree(await repository.revision(parsed.operands[1])) : indexMap;
195
- await attributes(repository, specs, [before, after], working);
196
- await session.unchanged();
197
- let different = false;
198
- const paths = new Set([...before.keys(), ...after.keys()]);
199
- for (const path of await session.sorted(paths)) {
200
- if (!selected(path, specs))
201
- continue;
202
- const original = await blob(repository, before.get(path));
203
- const replacement = working ? after.has(path) ? await repository.working(after.get(path)) : undefined : await blob(repository, after.get(path));
204
- try {
205
- const code = change(original, replacement);
206
- if (code === " ")
207
- continue;
208
- different = true;
209
- if (parsed.flags.has("--quiet"))
210
- continue;
211
- if (parsed.flags.has("--name-only") || parsed.flags.has("--name-status")) {
212
- const prefix = parsed.flags.has("--name-status") ? code + (parsed.flags.has("-z") ? "\0" : "\t") : "";
213
- await session.output(prefix + (parsed.flags.has("-z") ? path : quote(path)) + (parsed.flags.has("-z") ? "\0" : "\n"));
214
- }
215
- else
216
- await patch(repository, parsed, path, original, replacement);
217
- }
218
- finally {
219
- if (working && replacement)
220
- session.release(replacement.bytes);
221
- }
222
- }
223
- return different && (parsed.flags.has("--quiet") || parsed.flags.has("--exit-code")) ? 1 : 0;
224
- }
225
- export async function query(repository, parsed) {
226
- const session = repository.session;
227
- if (parsed.command === "status")
228
- return status(repository, parsed);
229
- if (parsed.command === "diff")
230
- return diff(repository, parsed);
231
- if (parsed.command === "ls-files") {
232
- const specs = pathspecs(parsed, repository.root), rows = (await repository.index()).filter(entry => selected(entry.path, specs));
233
- await session.unchanged();
234
- for (const entry of rows)
235
- await session.output(`${parsed.flags.has("-s") || parsed.flags.has("--stage") ? `${entry.mode.toString(8)} ${entry.oid} ${entry.stage}\t` : ""}${display(repository, parsed, entry.path)}${parsed.flags.has("-z") ? "\0" : "\n"}`);
236
- return 0;
237
- }
238
- if (parsed.command === "rev-parse") {
239
- let value;
240
- if (parsed.flags.has("--show-toplevel")) {
241
- demand(repository.root, "bare Git repository has no toplevel");
242
- value = repository.root;
243
- }
244
- else if (parsed.flags.has("--absolute-git-dir"))
245
- value = repository.gitdir;
246
- else if (parsed.flags.has("--is-bare-repository"))
247
- value = String(!repository.root);
248
- else if (parsed.flags.has("--is-inside-work-tree"))
249
- value = String(Boolean(repository.root));
250
- else
251
- value = (await repository.revision(parsed.operands[0]));
252
- await session.unchanged();
253
- await session.output(value + "\n");
254
- return 0;
255
- }
256
- if (parsed.command === "show" && !parsed.flags.has("--no-patch")) {
257
- const operand = parsed.operands[0], colon = operand.indexOf(":");
258
- demand(colon > 0 && !parsed.format, "M1A show requires REV:path or --no-patch --format");
259
- const name = operand.slice(colon + 1);
260
- objectPath(name);
261
- const entries = await repository.tree(await repository.revision(operand.slice(0, colon)));
262
- const entry = entries.get(name);
263
- demand(entry, "Git tree path not found");
264
- const content = (await blob(repository, entry));
265
- await session.unchanged();
266
- await session.output(content.bytes);
267
- return 0;
268
- }
269
- let oid = await repository.revision(parsed.operands[0] ?? "HEAD");
270
- const limit = parsed.command === "show" ? 1 : parsed.count ?? GIT_LIMITS.maxCommits;
271
- const seen = new Set();
272
- await session.unchanged();
273
- for (let index = 0; oid && index < limit; index++) {
274
- oid = await repository.peel(oid, "commit");
275
- demand(!seen.has(oid), "cyclic Git history");
276
- seen.add(oid);
277
- const commit = await repository.commit(oid);
278
- let text = parsed.format === "oneline" ? await repository.abbreviation(oid) : oid;
279
- if (parsed.format !== "%H") {
280
- const message = session.text(commit.message), newline = message.indexOf("\n");
281
- const subject = newline < 0 ? message : message.slice(0, newline);
282
- demand(!/[\x00-\x1f\x7f]/.test(subject) && (newline < 0 || newline === message.length - 1 || message[newline + 1] === "\n"), "unsupported Git commit subject");
283
- text += " " + subject;
284
- }
285
- await session.output(text + "\n");
286
- oid = commit.parents[0];
287
- if (index + 1 === GIT_LIMITS.maxCommits && parsed.count === undefined && oid)
288
- throw new GitFailure("Git history limit exceeded");
289
- }
290
- return 0;
291
- }
292
- //# sourceMappingURL=queries.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/commands/git/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAkB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAa,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAc,MAAM,iBAAiB,CAAC;AAEzD,SAAS,MAAM,CAAC,MAA+C,EAAE,KAA8C;IAC7G,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QAAE,OAAO,GAAG,CAAC;IACrE,OAAO,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC5E,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,UAAsB,EAAE,KAAwB;IAClE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,mCAAmC,CAAC,CAAC;IACpE,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,UAAsB,EAAE,KAAwB,EAAE,IAA2C,EAAE,QAAiB;IACxI,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACnC,MAAM,KAAK,GAAG,KAAK,EAAE,KAAa,EAAiB,EAAE;QACnD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,uCAAuC,CAAC,CAAC;QACpG,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7H,IAAI,IAAI,EAAE,CAAC;QAAC,IAAI,CAAC;YAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;IAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;gBAAE,SAAS;YACrC,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;gBAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,iBAAiB,CAAC,CAAC;gBAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAC3H,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,OAAO,SAAS,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,iBAAiB,CAAC,CAAC;YAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;IAC1I,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,sCAAsC,CAAC,CAAC;YACxE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAM,CAAC,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,CAAC;YAC3F,MAAM,KAAK,CAAC,KAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;YACjD,OAAO,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC1E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAAC,UAAU,GAAG,IAAI,CAAC;oBAAC,MAAM;gBAAC,CAAC;gBACrE,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,UAAU;gBAAE,SAAS;YACzB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/G,IAAI,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;wBAAS,CAAC;oBAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;YAAC,CAAC;QAChF,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,UAAsB,EAAE,MAAiB,EAAE,OAA4B;IAC9F,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,GAAG,UAAU,CAAC,IAAK,CAAC;IAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC9C,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAC5G,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,KAAK,EAAE,SAAiB,EAAE,SAAgC,EAAE,KAAa,EAAqB,EAAE;QAC3G,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAC5G,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACjG,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;gBAClC,MAAM,CAAC,CAAC,SAAS,IAAI,IAAI,KAAK,MAAM,EAAE,gDAAgD,CAAC,CAAC;gBACxF,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACvD,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,UAAU,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;gBAAE,SAAS;YAC5F,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBACpD,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;;oBACjH,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBACvD,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,gCAAgC,CAAC,CAAC;gBAC1F,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,OAAO,CAAC,UAAsB,EAAE,MAAiB,EAAE,IAAY,EAAE,SAAS,GAAG,KAAK;IACzF,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7J,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAsB,EAAE,MAAiB;IACpE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9G,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACnG,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,KAAK;QAAE,IAAI,KAAK,CAAC,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3H,MAAM,IAAI,GAAqC,EAAE,CAAC;IAClD,MAAM,QAAQ,GAA2B,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3G,KAAK,MAAM,IAAI,IAAI,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,SAAS;QACrC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAE,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAC5F,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpF,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI;QAAE,KAAK,MAAM,IAAI,IAAI,MAAM,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChK,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,CAAC,aAAa,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvJ,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,UAAsB,EAAE,MAAiB;IAClE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5E,MAAM,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,4CAA4C,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACtD,MAAM,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,sCAAsC,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,wCAAwC,CAAC,CAAC;IACnH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvK,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACnH,MAAM,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;IAC1B,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,KAAK,MAAM,IAAI,IAAI,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,SAAS;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACjJ,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC3C,IAAI,IAAI,KAAK,GAAG;gBAAE,SAAS;YAC3B,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAS;YAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;gBACzE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACxH,CAAC;;gBAAM,MAAM,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QACtE,CAAC;gBAAS,CAAC;YAAC,IAAI,OAAO,IAAI,WAAW;gBAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IAC/E,CAAC;IACD,OAAO,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,UAAsB,EAAE,MAAiB;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACnC,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACjI,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,IAAI;YAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7P,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,IAAI,KAAa,CAAC;QAClB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,qCAAqC,CAAC,CAAC;YAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;QAAC,CAAC;aAChI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAAE,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;aACtE,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC;YAAE,KAAK,GAAG,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aAC/E,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAAE,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;;YACxF,KAAK,GAAG,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC;QAC/D,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QAAC,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,mDAAmD,CAAC,CAAC;QACzF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1F,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAAC,MAAM,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAE,CAAC;QACjD,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QAAC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,GAAG,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,UAAU,CAAC;IACpF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;IAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAClF,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9E,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,gCAAgC,CAAC,CAAC;YAC/J,IAAI,IAAI,GAAG,GAAG,OAAO,CAAC;QACxB,CAAC;QACD,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,KAAK,GAAG,CAAC,KAAK,UAAU,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG;YAAE,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAC;IACnI,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}