@hcrosse/opencode-pr-tracker 0.2.0 → 0.4.0

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.
@@ -1,24 +1,36 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/.bun/graceful-fs@4.2.11/node_modules/graceful-fs/polyfills.js", "../node_modules/.bun/graceful-fs@4.2.11/node_modules/graceful-fs/legacy-streams.js", "../node_modules/.bun/graceful-fs@4.2.11/node_modules/graceful-fs/clone.js", "../node_modules/.bun/graceful-fs@4.2.11/node_modules/graceful-fs/graceful-fs.js", "../node_modules/.bun/retry@0.12.0/node_modules/retry/lib/retry_operation.js", "../node_modules/.bun/retry@0.12.0/node_modules/retry/lib/retry.js", "../node_modules/.bun/signal-exit@3.0.7/node_modules/signal-exit/signals.js", "../node_modules/.bun/signal-exit@3.0.7/node_modules/signal-exit/index.js", "../node_modules/.bun/proper-lockfile@4.1.2/node_modules/proper-lockfile/lib/mtime-precision.js", "../node_modules/.bun/proper-lockfile@4.1.2/node_modules/proper-lockfile/lib/lockfile.js", "../node_modules/.bun/proper-lockfile@4.1.2/node_modules/proper-lockfile/lib/adapter.js", "../node_modules/.bun/proper-lockfile@4.1.2/node_modules/proper-lockfile/index.js", "../src/server.ts", "../src/state.ts", "../src/url.ts"],
3
+ "sources": ["../src/server.ts", "../src/adapters/github/Client.ts", "../src/ports/GitHub.ts", "../src/domain/Snapshot.ts", "../src/domain/PullRequest.ts", "../src/adapters/Command.ts", "../src/adapters/github/Query.ts", "../src/adapters/github/Repository.ts", "../src/adapters/github/Response.ts", "../src/domain/Checks.ts", "../src/adapters/github/Token.ts", "../src/adapters/Storage.ts", "../src/domain/Tracking.ts", "../src/ports/TrackingRepository.ts", "../src/application/Monitor.ts", "../src/application/FetchQueue.ts", "../src/application/Known.ts", "../src/domain/RefreshPolicy.ts", "../src/application/Time.ts", "../src/application/Tracker.ts", "../src/rpc.ts", "../src/domain/StackLayout.ts", "../src/server/Requests.ts", "../src/messages.ts", "../src/server/Rpc.ts", "../src/server/Tools.ts", "../src/domain/Appearance.ts"],
4
4
  "sourcesContent": [
5
- "var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n",
6
- "var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n",
7
- "'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n",
8
- "var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n",
9
- "function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts;\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(this._errors.length - 1, this._errors.length);\n this._timeouts = this._cachedTimeouts.slice(0);\n timeout = this._timeouts.shift();\n } else {\n return false;\n }\n }\n\n var self = this;\n var timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n",
10
- "var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && options.forever,\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * opts.minTimeout * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n",
11
- "// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems. Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL. It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n 'SIGABRT',\n 'SIGALRM',\n 'SIGHUP',\n 'SIGINT',\n 'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n module.exports.push(\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n module.exports.push(\n 'SIGIO',\n 'SIGPOLL',\n 'SIGPWR',\n 'SIGSTKFLT',\n 'SIGUNUSED'\n )\n}\n",
12
- "// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nvar process = global.process\n\nconst processOk = function (process) {\n return process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function'\n}\n\n// some kind of non-node environment, just no-op\n/* istanbul ignore if */\nif (!processOk(process)) {\n module.exports = function () {\n return function () {}\n }\n} else {\n var assert = require('assert')\n var signals = require('./signals.js')\n var isWin = /^win/i.test(process.platform)\n\n var EE = require('events')\n /* istanbul ignore if */\n if (typeof EE !== 'function') {\n EE = EE.EventEmitter\n }\n\n var emitter\n if (process.__signal_exit_emitter__) {\n emitter = process.__signal_exit_emitter__\n } else {\n emitter = process.__signal_exit_emitter__ = new EE()\n emitter.count = 0\n emitter.emitted = {}\n }\n\n // Because this emitter is a global, we have to check to see if a\n // previous version of this library failed to enable infinite listeners.\n // I know what you're about to say. But literally everything about\n // signal-exit is a compromise with evil. Get used to it.\n if (!emitter.infinite) {\n emitter.setMaxListeners(Infinity)\n emitter.infinite = true\n }\n\n module.exports = function (cb, opts) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return function () {}\n }\n assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n if (loaded === false) {\n load()\n }\n\n var ev = 'exit'\n if (opts && opts.alwaysLast) {\n ev = 'afterexit'\n }\n\n var remove = function () {\n emitter.removeListener(ev, cb)\n if (emitter.listeners('exit').length === 0 &&\n emitter.listeners('afterexit').length === 0) {\n unload()\n }\n }\n emitter.on(ev, cb)\n\n return remove\n }\n\n var unload = function unload () {\n if (!loaded || !processOk(global.process)) {\n return\n }\n loaded = false\n\n signals.forEach(function (sig) {\n try {\n process.removeListener(sig, sigListeners[sig])\n } catch (er) {}\n })\n process.emit = originalProcessEmit\n process.reallyExit = originalProcessReallyExit\n emitter.count -= 1\n }\n module.exports.unload = unload\n\n var emit = function emit (event, code, signal) {\n /* istanbul ignore if */\n if (emitter.emitted[event]) {\n return\n }\n emitter.emitted[event] = true\n emitter.emit(event, code, signal)\n }\n\n // { <signal>: <listener fn>, ... }\n var sigListeners = {}\n signals.forEach(function (sig) {\n sigListeners[sig] = function listener () {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n var listeners = process.listeners(sig)\n if (listeners.length === emitter.count) {\n unload()\n emit('exit', null, sig)\n /* istanbul ignore next */\n emit('afterexit', null, sig)\n /* istanbul ignore next */\n if (isWin && sig === 'SIGHUP') {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n sig = 'SIGINT'\n }\n /* istanbul ignore next */\n process.kill(process.pid, sig)\n }\n }\n })\n\n module.exports.signals = function () {\n return signals\n }\n\n var loaded = false\n\n var load = function load () {\n if (loaded || !processOk(global.process)) {\n return\n }\n loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n emitter.count += 1\n\n signals = signals.filter(function (sig) {\n try {\n process.on(sig, sigListeners[sig])\n return true\n } catch (er) {\n return false\n }\n })\n\n process.emit = processEmit\n process.reallyExit = processReallyExit\n }\n module.exports.load = load\n\n var originalProcessReallyExit = process.reallyExit\n var processReallyExit = function processReallyExit (code) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n process.exitCode = code || /* istanbul ignore next */ 0\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n originalProcessReallyExit.call(process, process.exitCode)\n }\n\n var originalProcessEmit = process.emit\n var processEmit = function processEmit (ev, arg) {\n if (ev === 'exit' && processOk(global.process)) {\n /* istanbul ignore else */\n if (arg !== undefined) {\n process.exitCode = arg\n }\n var ret = originalProcessEmit.apply(this, arguments)\n /* istanbul ignore next */\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n return ret\n } else {\n return originalProcessEmit.apply(this, arguments)\n }\n }\n}\n",
13
- "'use strict';\n\nconst cacheSymbol = Symbol();\n\nfunction probe(file, fs, callback) {\n const cachedPrecision = fs[cacheSymbol];\n\n if (cachedPrecision) {\n return fs.stat(file, (err, stat) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n callback(null, stat.mtime, cachedPrecision);\n });\n }\n\n // Set mtime by ceiling Date.now() to seconds + 5ms so that it's \"not on the second\"\n const mtime = new Date((Math.ceil(Date.now() / 1000) * 1000) + 5);\n\n fs.utimes(file, mtime, mtime, (err) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n fs.stat(file, (err, stat) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n const precision = stat.mtime.getTime() % 1000 === 0 ? 's' : 'ms';\n\n // Cache the precision in a non-enumerable way\n Object.defineProperty(fs, cacheSymbol, { value: precision });\n\n callback(null, stat.mtime, precision);\n });\n });\n}\n\nfunction getMtime(precision) {\n let now = Date.now();\n\n if (precision === 's') {\n now = Math.ceil(now / 1000) * 1000;\n }\n\n return new Date(now);\n}\n\nmodule.exports.probe = probe;\nmodule.exports.getMtime = getMtime;\n",
14
- "'use strict';\n\nconst path = require('path');\nconst fs = require('graceful-fs');\nconst retry = require('retry');\nconst onExit = require('signal-exit');\nconst mtimePrecision = require('./mtime-precision');\n\nconst locks = {};\n\nfunction getLockFile(file, options) {\n return options.lockfilePath || `${file}.lock`;\n}\n\nfunction resolveCanonicalPath(file, options, callback) {\n if (!options.realpath) {\n return callback(null, path.resolve(file));\n }\n\n // Use realpath to resolve symlinks\n // It also resolves relative paths\n options.fs.realpath(file, callback);\n}\n\nfunction acquireLock(file, options, callback) {\n const lockfilePath = getLockFile(file, options);\n\n // Use mkdir to create the lockfile (atomic operation)\n options.fs.mkdir(lockfilePath, (err) => {\n if (!err) {\n // At this point, we acquired the lock!\n // Probe the mtime precision\n return mtimePrecision.probe(lockfilePath, options.fs, (err, mtime, mtimePrecision) => {\n // If it failed, try to remove the lock..\n /* istanbul ignore if */\n if (err) {\n options.fs.rmdir(lockfilePath, () => {});\n\n return callback(err);\n }\n\n callback(null, mtime, mtimePrecision);\n });\n }\n\n // If error is not EEXIST then some other error occurred while locking\n if (err.code !== 'EEXIST') {\n return callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n if (options.stale <= 0) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n options.fs.stat(lockfilePath, (err, stat) => {\n if (err) {\n // Retry if the lockfile has been removed (meanwhile)\n // Skip stale check to avoid recursiveness\n if (err.code === 'ENOENT') {\n return acquireLock(file, { ...options, stale: 0 }, callback);\n }\n\n return callback(err);\n }\n\n if (!isLockStale(stat, options)) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n // If it's stale, remove it and try again!\n // Skip stale check to avoid recursiveness\n removeLock(file, options, (err) => {\n if (err) {\n return callback(err);\n }\n\n acquireLock(file, { ...options, stale: 0 }, callback);\n });\n });\n });\n}\n\nfunction isLockStale(stat, options) {\n return stat.mtime.getTime() < Date.now() - options.stale;\n}\n\nfunction removeLock(file, options, callback) {\n // Remove lockfile, ignoring ENOENT errors\n options.fs.rmdir(getLockFile(file, options), (err) => {\n if (err && err.code !== 'ENOENT') {\n return callback(err);\n }\n\n callback();\n });\n}\n\nfunction updateLock(file, options) {\n const lock = locks[file];\n\n // Just for safety, should never happen\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n return;\n }\n\n lock.updateDelay = lock.updateDelay || options.update;\n lock.updateTimeout = setTimeout(() => {\n lock.updateTimeout = null;\n\n // Stat the file to check if mtime is still ours\n // If it is, we can still recover from a system sleep or a busy event loop\n options.fs.stat(lock.lockfilePath, (err, stat) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n const isMtimeOurs = lock.mtime.getTime() === stat.mtime.getTime();\n\n if (!isMtimeOurs) {\n return setLockAsCompromised(\n file,\n lock,\n Object.assign(\n new Error('Unable to update lock within the stale threshold'),\n { code: 'ECOMPROMISED' }\n ));\n }\n\n const mtime = mtimePrecision.getMtime(lock.mtimePrecision);\n\n options.fs.utimes(lock.lockfilePath, mtime, mtime, (err) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // Ignore if the lock was released\n if (lock.released) {\n return;\n }\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n // All ok, keep updating..\n lock.mtime = mtime;\n lock.lastUpdate = Date.now();\n lock.updateDelay = null;\n updateLock(file, options);\n });\n });\n }, lock.updateDelay);\n\n // Unref the timer so that the nodejs process can exit freely\n // This is safe because all acquired locks will be automatically released\n // on process exit\n\n // We first check that `lock.updateTimeout.unref` exists because some users\n // may be using this module outside of NodeJS (e.g., in an electron app),\n // and in those cases `setTimeout` return an integer.\n /* istanbul ignore else */\n if (lock.updateTimeout.unref) {\n lock.updateTimeout.unref();\n }\n}\n\nfunction setLockAsCompromised(file, lock, err) {\n // Signal the lock has been released\n lock.released = true;\n\n // Cancel lock mtime update\n // Just for safety, at this point updateTimeout should be null\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n clearTimeout(lock.updateTimeout);\n }\n\n if (locks[file] === lock) {\n delete locks[file];\n }\n\n lock.options.onCompromised(err);\n}\n\n// ----------------------------------------------------------\n\nfunction lock(file, options, callback) {\n /* istanbul ignore next */\n options = {\n stale: 10000,\n update: null,\n realpath: true,\n retries: 0,\n fs,\n onCompromised: (err) => { throw err; },\n ...options,\n };\n\n options.retries = options.retries || 0;\n options.retries = typeof options.retries === 'number' ? { retries: options.retries } : options.retries;\n options.stale = Math.max(options.stale || 0, 2000);\n options.update = options.update == null ? options.stale / 2 : options.update || 0;\n options.update = Math.max(Math.min(options.update, options.stale / 2), 1000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Attempt to acquire the lock\n const operation = retry.operation(options.retries);\n\n operation.attempt(() => {\n acquireLock(file, options, (err, mtime, mtimePrecision) => {\n if (operation.retry(err)) {\n return;\n }\n\n if (err) {\n return callback(operation.mainError());\n }\n\n // We now own the lock\n const lock = locks[file] = {\n lockfilePath: getLockFile(file, options),\n mtime,\n mtimePrecision,\n options,\n lastUpdate: Date.now(),\n };\n\n // We must keep the lock fresh to avoid staleness\n updateLock(file, options);\n\n callback(null, (releasedCallback) => {\n if (lock.released) {\n return releasedCallback &&\n releasedCallback(Object.assign(new Error('Lock is already released'), { code: 'ERELEASED' }));\n }\n\n // Not necessary to use realpath twice when unlocking\n unlock(file, { ...options, realpath: false }, releasedCallback);\n });\n });\n });\n });\n}\n\nfunction unlock(file, options, callback) {\n options = {\n fs,\n realpath: true,\n ...options,\n };\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Skip if the lock is not acquired\n const lock = locks[file];\n\n if (!lock) {\n return callback(Object.assign(new Error('Lock is not acquired/owned by you'), { code: 'ENOTACQUIRED' }));\n }\n\n lock.updateTimeout && clearTimeout(lock.updateTimeout); // Cancel lock mtime update\n lock.released = true; // Signal the lock has been released\n delete locks[file]; // Delete from locks\n\n removeLock(file, options, callback);\n });\n}\n\nfunction check(file, options, callback) {\n options = {\n stale: 10000,\n realpath: true,\n fs,\n ...options,\n };\n\n options.stale = Math.max(options.stale || 0, 2000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Check if lockfile exists\n options.fs.stat(getLockFile(file, options), (err, stat) => {\n if (err) {\n // If does not exist, file is not locked. Otherwise, callback with error\n return err.code === 'ENOENT' ? callback(null, false) : callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n return callback(null, !isLockStale(stat, options));\n });\n });\n}\n\nfunction getLocks() {\n return locks;\n}\n\n// Remove acquired locks on exit\n/* istanbul ignore next */\nonExit(() => {\n for (const file in locks) {\n const options = locks[file].options;\n\n try { options.fs.rmdirSync(getLockFile(file, options)); } catch (e) { /* Empty */ }\n }\n});\n\nmodule.exports.lock = lock;\nmodule.exports.unlock = unlock;\nmodule.exports.check = check;\nmodule.exports.getLocks = getLocks;\n",
15
- "'use strict';\n\nconst fs = require('graceful-fs');\n\nfunction createSyncFs(fs) {\n const methods = ['mkdir', 'realpath', 'stat', 'rmdir', 'utimes'];\n const newFs = { ...fs };\n\n methods.forEach((method) => {\n newFs[method] = (...args) => {\n const callback = args.pop();\n let ret;\n\n try {\n ret = fs[`${method}Sync`](...args);\n } catch (err) {\n return callback(err);\n }\n\n callback(null, ret);\n };\n });\n\n return newFs;\n}\n\n// ----------------------------------------------------------\n\nfunction toPromise(method) {\n return (...args) => new Promise((resolve, reject) => {\n args.push((err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n });\n\n method(...args);\n });\n}\n\nfunction toSync(method) {\n return (...args) => {\n let err;\n let result;\n\n args.push((_err, _result) => {\n err = _err;\n result = _result;\n });\n\n method(...args);\n\n if (err) {\n throw err;\n }\n\n return result;\n };\n}\n\nfunction toSyncOptions(options) {\n // Shallow clone options because we are oging to mutate them\n options = { ...options };\n\n // Transform fs to use the sync methods instead\n options.fs = createSyncFs(options.fs || fs);\n\n // Retries are not allowed because it requires the flow to be sync\n if (\n (typeof options.retries === 'number' && options.retries > 0) ||\n (options.retries && typeof options.retries.retries === 'number' && options.retries.retries > 0)\n ) {\n throw Object.assign(new Error('Cannot use retries with the sync api'), { code: 'ESYNC' });\n }\n\n return options;\n}\n\nmodule.exports = {\n toPromise,\n toSync,\n toSyncOptions,\n};\n",
16
- "'use strict';\n\nconst lockfile = require('./lib/lockfile');\nconst { toPromise, toSync, toSyncOptions } = require('./lib/adapter');\n\nasync function lock(file, options) {\n const release = await toPromise(lockfile.lock)(file, options);\n\n return toPromise(release);\n}\n\nfunction lockSync(file, options) {\n const release = toSync(lockfile.lock)(file, toSyncOptions(options));\n\n return toSync(release);\n}\n\nfunction unlock(file, options) {\n return toPromise(lockfile.unlock)(file, options);\n}\n\nfunction unlockSync(file, options) {\n return toSync(lockfile.unlock)(file, toSyncOptions(options));\n}\n\nfunction check(file, options) {\n return toPromise(lockfile.check)(file, options);\n}\n\nfunction checkSync(file, options) {\n return toSync(lockfile.check)(file, toSyncOptions(options));\n}\n\nmodule.exports = lock;\nmodule.exports.lock = lock;\nmodule.exports.unlock = unlock;\nmodule.exports.lockSync = lockSync;\nmodule.exports.unlockSync = unlockSync;\nmodule.exports.check = check;\nmodule.exports.checkSync = checkSync;\n",
17
- "import { tool, type Hooks, type PluginModule } from \"@opencode-ai/plugin\"\n\nimport { createStateStore, type AttachFailure, type StateStore } from \"./state.js\"\nimport { formatPullRequestRef, parsePullRequestUrl, type InvalidPullRequestUrl } from \"./url.js\"\n\nexport type PrToolErrorCode =\n | InvalidPullRequestUrl[\"tag\"]\n | AttachFailure[\"tag\"]\n | \"InvalidPullRequestNumber\"\n | \"AmbiguousPullRequestNumber\"\n\nexport class PrToolError extends Error {\n override readonly name = \"PrToolError\"\n\n constructor(\n readonly code: PrToolErrorCode,\n message: string,\n ) {\n super(message)\n }\n}\n\nfunction toToolError(failure: AttachFailure): PrToolError {\n return new PrToolError(failure.tag, failure.message)\n}\n\nfunction formatReferenceList(references: readonly string[]): string {\n if (references.length < 2) return references.join(\"\")\n if (references.length === 2) return references.join(\" and \")\n return `${references.slice(0, -1).join(\", \")}, and ${references.at(-1)}`\n}\n\nexport function createServerHooks(store: StateStore): Hooks {\n return {\n async event({ event }) {\n if (event.type !== \"session.deleted\") return\n const result = await store.removeSession(event.properties.info.id)\n if (!result.ok) throw toToolError(result.error)\n },\n tool: {\n pr_attach: tool({\n description: \"Attach a canonical GitHub pull request URL to the current OpenCode session.\",\n args: {\n url: tool.schema.string().describe(\"A https://github.com/<owner>/<repository>/pull/<number> URL\"),\n },\n async execute(args, context) {\n const pullRequest = parsePullRequestUrl(args.url)\n if (!pullRequest.ok) throw new PrToolError(pullRequest.error.tag, pullRequest.error.message)\n\n const result = await store.attach(context.sessionID, pullRequest.value)\n if (!result.ok) throw toToolError(result.error)\n\n const reference = formatPullRequestRef(pullRequest.value)\n return result.value === \"added\"\n ? `Attached ${reference} to this session.`\n : `${reference} is already attached to this session.`\n },\n }),\n pr_detach: tool({\n description: \"Detach a pull request from the current OpenCode session by positive number or canonical URL.\",\n args: {\n pull_request: tool.schema\n .union([tool.schema.number().int().positive().max(Number.MAX_SAFE_INTEGER), tool.schema.string()])\n .describe(\"A positive pull request number or https://github.com/<owner>/<repository>/pull/<number> URL\"),\n },\n async execute(args, context) {\n if (typeof args.pull_request === \"number\") {\n if (!Number.isSafeInteger(args.pull_request) || args.pull_request <= 0) {\n throw new PrToolError(\n \"InvalidPullRequestNumber\",\n \"Expected a positive pull request number or canonical GitHub URL\",\n )\n }\n const result = await store.detachByNumber(context.sessionID, args.pull_request)\n if (!result.ok) throw toToolError(result.error)\n if (result.value.tag === \"absent\") {\n return `Pull request #${args.pull_request} is not attached to this session.`\n }\n if (result.value.tag === \"ambiguous\") {\n const references = result.value.pullRequests.map(formatPullRequestRef)\n throw new PrToolError(\n \"AmbiguousPullRequestNumber\",\n `Pull request #${args.pull_request} matches ${formatReferenceList(references)}. Use a canonical GitHub pull request URL.`,\n )\n }\n return `Detached ${formatPullRequestRef(result.value.pullRequest)} from this session.`\n }\n\n const pullRequest = parsePullRequestUrl(args.pull_request)\n if (!pullRequest.ok) throw new PrToolError(pullRequest.error.tag, pullRequest.error.message)\n\n const result = await store.detach(context.sessionID, pullRequest.value)\n if (!result.ok) throw toToolError(result.error)\n\n const reference = formatPullRequestRef(pullRequest.value)\n return result.value === \"removed\"\n ? `Detached ${reference} from this session.`\n : `${reference} is not attached to this session.`\n },\n }),\n },\n }\n}\n\nconst plugin: PluginModule & { id: string } = {\n id: \"opencode-pr-tracker\",\n server: async () => createServerHooks(createStateStore()),\n}\n\nexport default plugin\n",
18
- "import { createHash, randomUUID } from \"node:crypto\"\nimport { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\"\nimport { homedir } from \"node:os\"\nimport { join } from \"node:path\"\nimport { lock as lockFile } from \"proper-lockfile\"\n\nimport { parsePullRequestUrl, type PullRequestUrl, type Result } from \"./url.js\"\n\nexport const maximumPullRequestsPerSession = 20\n\nexport type PullRequestAttachment = Readonly<{\n pullRequest: PullRequestUrl\n attachedAt: string\n}>\n\nexport type InvalidStateFile = Readonly<{\n tag: \"InvalidStateFile\"\n message: \"The session pull request state file is invalid\"\n}>\n\nexport type StateUnavailable = Readonly<{\n tag: \"StateUnavailable\"\n operation: \"read\" | \"write\"\n message: string\n cause: unknown\n}>\n\nexport type AttachmentLimitReached = Readonly<{\n tag: \"AttachmentLimitReached\"\n limit: 20\n message: \"A session can track at most 20 pull requests\"\n}>\n\nexport type StateFailure = InvalidStateFile | StateUnavailable\nexport type AttachFailure = StateFailure | AttachmentLimitReached\nexport type DetachByNumberOutcome =\n | Readonly<{ tag: \"removed\"; pullRequest: PullRequestUrl }>\n | Readonly<{ tag: \"absent\" }>\n | Readonly<{ tag: \"ambiguous\"; pullRequests: readonly PullRequestUrl[] }>\n\nexport type StateStore = Readonly<{\n list(sessionID: string): Promise<Result<readonly PullRequestAttachment[], StateFailure>>\n attach(sessionID: string, pullRequest: PullRequestUrl): Promise<Result<\"added\" | \"already_attached\", AttachFailure>>\n detach(sessionID: string, pullRequest: PullRequestUrl): Promise<Result<\"removed\" | \"absent\", StateFailure>>\n detachByNumber(sessionID: string, number: number): Promise<Result<DetachByNumberOutcome, StateFailure>>\n removeSession(sessionID: string): Promise<Result<\"removed\" | \"absent\", StateFailure>>\n}>\n\ntype PersistedState = Readonly<{\n version: 1\n pullRequests: readonly Readonly<{ url: string; attachedAt: string }>[]\n}>\n\nconst invalidStateFile: Result<never, InvalidStateFile> = {\n ok: false,\n error: {\n tag: \"InvalidStateFile\",\n message: \"The session pull request state file is invalid\",\n },\n}\n\nconst lockStaleMilliseconds = 10_000\nconst lockUpdateMilliseconds = 2_000\n\nfunction stateUnavailable(operation: \"read\" | \"write\", message: string, cause: unknown): StateUnavailable {\n return { tag: \"StateUnavailable\", operation, message, cause }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n}\n\nfunction hasExactKeys(value: Record<string, unknown>, keys: readonly string[]): boolean {\n const actual = Object.keys(value)\n return actual.length === keys.length && keys.every((key) => Object.hasOwn(value, key))\n}\n\nfunction parseState(input: unknown): Result<readonly PullRequestAttachment[], InvalidStateFile> {\n if (!isRecord(input) || !hasExactKeys(input, [\"version\", \"pullRequests\"])) return invalidStateFile\n if (input.version !== 1 || !Array.isArray(input.pullRequests)) return invalidStateFile\n if (input.pullRequests.length > maximumPullRequestsPerSession) return invalidStateFile\n\n const attachments: PullRequestAttachment[] = []\n const seen = new Set<string>()\n for (const item of input.pullRequests) {\n if (!isRecord(item) || !hasExactKeys(item, [\"url\", \"attachedAt\"])) return invalidStateFile\n if (typeof item.url !== \"string\" || typeof item.attachedAt !== \"string\") return invalidStateFile\n\n const parsed = parsePullRequestUrl(item.url)\n if (!parsed.ok || parsed.value.url !== item.url || seen.has(item.url)) return invalidStateFile\n\n const attachedAt = new Date(item.attachedAt)\n if (Number.isNaN(attachedAt.valueOf()) || attachedAt.toISOString() !== item.attachedAt) return invalidStateFile\n\n seen.add(item.url)\n attachments.push({ pullRequest: parsed.value, attachedAt: item.attachedAt })\n }\n\n return { ok: true, value: attachments }\n}\n\nfunction isMissingFile(cause: unknown): boolean {\n return cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\"\n}\n\nfunction fileName(sessionID: string): string {\n return `${createHash(\"sha256\").update(sessionID).digest(\"hex\")}.json`\n}\n\nexport function defaultStateDirectory(\n environment: Readonly<Record<string, string | undefined>> = process.env,\n home: string = homedir(),\n): string {\n const dataHome = environment.XDG_DATA_HOME || join(home, \".local\", \"share\")\n return join(dataHome, \"opencode\", \"opencode-pr-tracker\")\n}\n\nexport function createStateStore(options: Readonly<{ directory?: string; now?: () => Date }> = {}): StateStore {\n const directory = options.directory ?? defaultStateDirectory()\n const now = options.now ?? (() => new Date())\n\n async function acquireLock(sessionID: string): Promise<\n Result<\n Readonly<{\n release(): Promise<void>\n compromised(): Error | undefined\n }>,\n StateUnavailable\n >\n > {\n const stateFile = join(directory, fileName(sessionID))\n let compromised: Error | undefined\n try {\n await mkdir(directory, { recursive: true })\n const release = await lockFile(stateFile, {\n realpath: false,\n stale: lockStaleMilliseconds,\n update: lockUpdateMilliseconds,\n retries: { retries: 50, factor: 1, minTimeout: 10, maxTimeout: 100 },\n onCompromised: (error) => {\n compromised = error\n },\n })\n return { ok: true, value: { release, compromised: () => compromised } }\n } catch (cause) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to lock the session pull request state\", cause),\n }\n }\n }\n\n async function withLock<Value, Failure>(\n sessionID: string,\n operation: () => Promise<Result<Value, Failure>>,\n ): Promise<Result<Value, Failure | StateUnavailable>> {\n const lock = await acquireLock(sessionID)\n if (!lock.ok) return lock\n let result: Result<Value, Failure>\n try {\n result = await operation()\n } catch (cause) {\n await lock.value.release().catch(() => undefined)\n throw cause\n }\n\n try {\n await lock.value.release()\n } catch (cause) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to unlock the session pull request state\", cause),\n }\n }\n\n const compromise = lock.value.compromised()\n if (compromise !== undefined) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"The session pull request state lock was compromised\", compromise),\n }\n }\n return result\n }\n\n async function readExisting(\n sessionID: string,\n ): Promise<Result<readonly PullRequestAttachment[] | undefined, StateFailure>> {\n const path = join(directory, fileName(sessionID))\n let content: string\n try {\n content = await readFile(path, \"utf8\")\n } catch (cause) {\n if (isMissingFile(cause)) return { ok: true, value: undefined }\n return {\n ok: false,\n error: stateUnavailable(\"read\", \"Unable to read the session pull request state\", cause),\n }\n }\n\n let decoded: unknown\n try {\n decoded = JSON.parse(content)\n } catch {\n return invalidStateFile\n }\n return parseState(decoded)\n }\n\n async function read(sessionID: string): Promise<Result<readonly PullRequestAttachment[], StateFailure>> {\n const result = await readExisting(sessionID)\n if (!result.ok) return result\n return { ok: true, value: result.value ?? [] }\n }\n\n async function write(\n sessionID: string,\n attachments: readonly PullRequestAttachment[],\n ): Promise<Result<void, StateUnavailable>> {\n const destination = join(directory, fileName(sessionID))\n const temporary = `${destination}.${process.pid}.${randomUUID()}.tmp`\n const state: PersistedState = {\n version: 1,\n pullRequests: attachments.map((attachment) => ({\n url: attachment.pullRequest.url,\n attachedAt: attachment.attachedAt,\n })),\n }\n\n try {\n await mkdir(directory, { recursive: true })\n await writeFile(temporary, `${JSON.stringify(state, null, 2)}\\n`, { mode: 0o600 })\n await rename(temporary, destination)\n return { ok: true, value: undefined }\n } catch (cause) {\n await rm(temporary, { force: true }).catch(() => undefined)\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to write the session pull request state\", cause),\n }\n }\n }\n\n return {\n list: read,\n async attach(sessionID, pullRequest) {\n return withLock<\"added\" | \"already_attached\", AttachFailure>(sessionID, async () => {\n const current = await read(sessionID)\n if (!current.ok) return current\n if (current.value.some((attachment) => attachment.pullRequest.url === pullRequest.url)) {\n return { ok: true, value: \"already_attached\" } as const\n }\n if (current.value.length >= maximumPullRequestsPerSession) {\n return {\n ok: false,\n error: {\n tag: \"AttachmentLimitReached\",\n limit: maximumPullRequestsPerSession,\n message: \"A session can track at most 20 pull requests\",\n },\n } as const\n }\n\n const written = await write(sessionID, [...current.value, { pullRequest, attachedAt: now().toISOString() }])\n if (!written.ok) return written\n return { ok: true, value: \"added\" } as const\n })\n },\n async detach(sessionID, pullRequest) {\n return withLock<\"removed\" | \"absent\", StateFailure>(sessionID, async () => {\n const current = await read(sessionID)\n if (!current.ok) return current\n const next = current.value.filter((attachment) => attachment.pullRequest.url !== pullRequest.url)\n if (next.length === current.value.length) return { ok: true, value: \"absent\" } as const\n\n const written = await write(sessionID, next)\n if (!written.ok) return written\n return { ok: true, value: \"removed\" } as const\n })\n },\n async detachByNumber(sessionID, number) {\n return withLock<DetachByNumberOutcome, StateFailure>(sessionID, async () => {\n const current = await read(sessionID)\n if (!current.ok) return current\n const matches = current.value.filter((attachment) => attachment.pullRequest.number === number)\n if (matches.length === 0) return { ok: true, value: { tag: \"absent\" } } as const\n if (matches.length > 1) {\n return {\n ok: true,\n value: { tag: \"ambiguous\", pullRequests: matches.map((attachment) => attachment.pullRequest) },\n } as const\n }\n\n const match = matches[0]\n if (match === undefined) return { ok: true, value: { tag: \"absent\" } } as const\n const next = current.value.filter((attachment) => attachment.pullRequest.url !== match.pullRequest.url)\n const written = await write(sessionID, next)\n if (!written.ok) return written\n return { ok: true, value: { tag: \"removed\", pullRequest: match.pullRequest } } as const\n })\n },\n async removeSession(sessionID) {\n return withLock<\"removed\" | \"absent\", StateFailure>(sessionID, async () => {\n const current = await readExisting(sessionID)\n if (!current.ok) return current\n if (current.value === undefined) return { ok: true, value: \"absent\" } as const\n try {\n await rm(join(directory, fileName(sessionID)), { force: true })\n return { ok: true, value: \"removed\" } as const\n } catch (cause) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to remove the session pull request state\", cause),\n } as const\n }\n })\n },\n }\n}\n",
19
- "declare const pullRequestUrlBrand: unique symbol\ndeclare const pullRequestBrand: unique symbol\n\nexport type CanonicalPullRequestUrl = string & {\n readonly [pullRequestUrlBrand]: \"CanonicalPullRequestUrl\"\n}\n\nexport type PullRequestUrl = Readonly<{\n url: CanonicalPullRequestUrl\n owner: string\n repository: string\n number: number\n readonly [pullRequestBrand]: \"PullRequestUrl\"\n}>\n\nexport type InvalidPullRequestUrl = Readonly<{\n tag: \"InvalidPullRequestUrl\"\n message: \"Expected https://github.com/<owner>/<repository>/pull/<positive-integer>\"\n}>\n\nexport type Result<Value, Failure> = Readonly<{ ok: true; value: Value }> | Readonly<{ ok: false; error: Failure }>\n\nconst invalidPullRequestUrl: Result<never, InvalidPullRequestUrl> = {\n ok: false,\n error: {\n tag: \"InvalidPullRequestUrl\",\n message: \"Expected https://github.com/<owner>/<repository>/pull/<positive-integer>\",\n },\n}\n\nconst segmentPattern = /^[A-Za-z0-9._-]+$/\n\nexport function parsePullRequestUrl(input: string): Result<PullRequestUrl, InvalidPullRequestUrl> {\n if (input.trim() !== input) return invalidPullRequestUrl\n if (input.includes(\"\\\\\")) return invalidPullRequestUrl\n if (!input.startsWith(\"https://\")) return invalidPullRequestUrl\n\n const authorityEnd = input.indexOf(\"/\", \"https://\".length)\n if (authorityEnd === -1) return invalidPullRequestUrl\n if (input.slice(\"https://\".length, authorityEnd).toLowerCase() !== \"github.com\") {\n return invalidPullRequestUrl\n }\n\n const rawPath = input.slice(authorityEnd).split(/[?#]/, 1).join(\"\")\n for (const segment of rawPath.split(\"/\")) {\n let decoded: string\n try {\n decoded = decodeURIComponent(segment)\n } catch {\n return invalidPullRequestUrl\n }\n if (decoded === \".\" || decoded === \"..\") return invalidPullRequestUrl\n }\n\n let parsed: URL\n try {\n parsed = new URL(input)\n } catch {\n return invalidPullRequestUrl\n }\n\n if (\n parsed.protocol !== \"https:\" ||\n parsed.hostname !== \"github.com\" ||\n parsed.username !== \"\" ||\n parsed.password !== \"\" ||\n parsed.port !== \"\" ||\n parsed.search !== \"\" ||\n parsed.hash !== \"\"\n ) {\n return invalidPullRequestUrl\n }\n\n const segments = parsed.pathname.split(\"/\")\n if (segments.length !== 5 || segments[0] !== \"\" || segments[3] !== \"pull\") {\n return invalidPullRequestUrl\n }\n\n const rawOwner = segments[1]\n const rawRepository = segments[2]\n const numberText = segments[4]\n if (\n rawOwner === undefined ||\n rawRepository === undefined ||\n numberText === undefined ||\n !segmentPattern.test(rawOwner) ||\n !segmentPattern.test(rawRepository) ||\n !/^\\d+$/.test(numberText)\n ) {\n return invalidPullRequestUrl\n }\n\n const number = Number(numberText)\n if (!Number.isSafeInteger(number) || number <= 0) return invalidPullRequestUrl\n\n const owner = rawOwner.toLowerCase()\n const repository = rawRepository.toLowerCase()\n // SAFETY: every URL component passed the canonical GitHub PR checks above.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- the parser establishes the brand invariant\n const url = `https://github.com/${owner}/${repository}/pull/${number}` as CanonicalPullRequestUrl\n const value = { url, owner, repository, number }\n // SAFETY: the parser established canonical URL and component consistency.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- parser establishes the object brand\n return { ok: true, value: value as PullRequestUrl }\n}\n\nexport function formatPullRequestRef(pullRequest: PullRequestUrl): string {\n return `${pullRequest.owner}/${pullRequest.repository}#${pullRequest.number}`\n}\n"
5
+ "import { Plugin } from \"@opencode/plugin/effect\"\nimport { Context, Effect, Layer, Option, Schedule, Schema, Stream } from \"effect\"\n\nimport { live as githubLive } from \"./adapters/github/Client.ts\"\nimport { layer as storageLayer } from \"./adapters/Storage.ts\"\nimport { Monitor, layer as monitorLayer } from \"./application/Monitor.ts\"\nimport { Tracker, layer as trackerLayer } from \"./application/Tracker.ts\"\nimport { Layout, PullRequestTracker } from \"./rpc.ts\"\nimport { toView, type Services, type Settings } from \"./server/Requests.ts\"\nimport { handlers } from \"./server/Rpc.ts\"\nimport { registerTools } from \"./server/Tools.ts\"\n\nconst pollInterval = \"1 second\"\n\nconst Options = Schema.Struct({ layout: Layout })\n\n/** The sidebar layout from the plugin options; anything but \"compact\" is the default. */\nconst layoutOf = (options: Plugin.Context[\"options\"]): Layout =>\n Option.match(Schema.decodeUnknownOption(Options)(options), {\n onNone: () => \"default\",\n onSome: ({ layout }) => layout,\n })\n\n/** Forgets a session everywhere once OpenCode deletes it. Every plugin instance sees the event. */\nconst forgetDeletedSessions = (ctx: Plugin.Context, services: Services): Effect.Effect<void> =>\n ctx.event.subscribe().pipe(\n Stream.runForEach((event) =>\n event.type === \"session.deleted\"\n ? Effect.andThen(\n services.tracker.forget(event.data.sessionID),\n services.monitor.forget(event.data.sessionID),\n )\n : Effect.void,\n ),\n Effect.ignore,\n )\n\nexport default Plugin.define({\n effect: (ctx) =>\n Effect.gen(function* () {\n const application = monitorLayer.pipe(\n Layer.provideMerge(trackerLayer),\n Layer.provide([githubLive, storageLayer(ctx.storage)]),\n )\n\n const context = yield* Layer.build(application)\n\n const services: Services = {\n monitor: Context.get(context, Monitor),\n tracker: Context.get(context, Tracker),\n }\n\n const settings: Settings = {\n directory: ctx.location.directory,\n layout: layoutOf(ctx.options),\n }\n\n const registration = yield* ctx.rpc\n .register(PullRequestTracker, handlers(services, settings))\n .pipe(Effect.orDie)\n\n yield* registerTools(ctx.tool, services, settings)\n yield* Effect.forkScoped(forgetDeletedSessions(ctx, services))\n yield* Effect.forkScoped(Effect.repeat(services.monitor.poll, Schedule.spaced(pollInterval)))\n yield* services.monitor.changes.pipe(\n Stream.runForEach((view) =>\n registration.events.emit(\"updated\", toView(view, settings.layout)).pipe(Effect.ignore),\n ),\n Effect.forkScoped,\n )\n }),\n id: \"opencode-pr-tracker\",\n})\n",
6
+ "import { Array as Arr, Effect, Layer, Option, Redacted, Result, Schema } from \"effect\"\nimport { FetchHttpClient, HttpClient, HttpClientRequest } from \"effect/unstable/http\"\n\nimport type { PullRequestRef } from \"../../domain/PullRequest.ts\"\nimport type { Diagnostic } from \"../../domain/Snapshot.ts\"\nimport { GitHub, GitHubFailure, maximumBatch, type ItemResult } from \"../../ports/GitHub.ts\"\nimport { CommandRunner, layer as commandLayer } from \"../Command.ts\"\nimport { alias, batch, continuation } from \"./Query.ts\"\nimport { resolveInRepository } from \"./Repository.ts\"\nimport {\n combined,\n Contexts,\n PullRequestNode,\n toReport,\n type BatchOutcome,\n type ContextNode,\n type Entry,\n} from \"./Response.ts\"\nimport { Token, layer as tokenLayer } from \"./Token.ts\"\n\nconst endpoint = \"https://api.github.com/graphql\"\n\nconst GraphQlError = Schema.Struct({\n path: Schema.optional(Schema.Array(Schema.Union([Schema.String, Schema.Number]))),\n type: Schema.optional(Schema.String),\n})\n\nconst Envelope = Schema.Struct({\n data: Schema.optional(Schema.NullOr(Schema.Record(Schema.String, Schema.Unknown))),\n errors: Schema.optional(Schema.Array(GraphQlError)),\n})\n\ntype Envelope = typeof Envelope.Type\n\nconst ContinuationData = Schema.Struct({\n resource: Schema.Struct({ statusCheckRollup: Schema.Struct({ contexts: Contexts }) }),\n})\n\nconst failure = (diagnostic: Diagnostic): GitHubFailure => new GitHubFailure({ diagnostic })\n\n/** A 401 from GitHub: the cached token may be stale. */\nclass Unauthorized extends Schema.TaggedError<Unauthorized>()(\"Unauthorized\", {}) {}\n\nconst failed = (diagnostic: Diagnostic): ItemResult => ({ _tag: \"Failed\", diagnostic })\n\nconst decodeEnvelope = Schema.decodeUnknownEffect(Envelope)\n\ntype Variables = Readonly<Record<string, string>>\n\n/** Posts one GraphQL document and decodes GitHub's response envelope. */\ntype Post = (query: string, variables: Variables) => Effect.Effect<Envelope, GitHubFailure>\n\n/** Posts one GraphQL document. A 401 refreshes the token and retries once. */\nconst makePost = Effect.fn(\"makePost\")(function* (): Effect.fn.Return<\n Post,\n never,\n HttpClient.HttpClient | Token\n> {\n const http = yield* HttpClient.HttpClient\n const token = yield* Token\n\n const attempt = Effect.fn(\"attempt\")(function* (query: string, variables: Variables) {\n const bearer = yield* token.get\n\n const request = HttpClientRequest.post(endpoint).pipe(\n HttpClientRequest.bearerToken(Redacted.value(bearer)),\n HttpClientRequest.bodyJsonUnsafe({ query, variables }),\n )\n\n const response = yield* http\n .execute(request)\n .pipe(Effect.mapError(() => failure(\"GitHubUnavailable\")))\n\n if (response.status === 401) return yield* new Unauthorized()\n\n if (response.status < 200 || response.status >= 300) return yield* failure(\"GitHubUnavailable\")\n\n const body = yield* response.json.pipe(Effect.mapError(() => failure(\"InvalidResponse\")))\n\n return yield* decodeEnvelope(body).pipe(Effect.mapError(() => failure(\"InvalidResponse\")))\n })\n\n return (query: string, variables: Variables): Effect.Effect<Envelope, GitHubFailure> =>\n attempt(query, variables).pipe(\n Effect.catchTag(\"Unauthorized\", () =>\n Effect.andThen(token.invalidate, attempt(query, variables)),\n ),\n Effect.catchTag(\"Unauthorized\", () => Effect.fail(failure(\"AuthenticationRequired\"))),\n )\n})\n\n/** Every check context for a pull request, following continuation pages. */\nconst allContexts = Effect.fn(\"allContexts\")(function* (post: Post, node: PullRequestNode) {\n const collected: ContextNode[] = []\n const followed = new Set<string>()\n let page = Option.map(Option.fromNullishOr(node.statusCheckRollup), (rollup) => rollup.contexts)\n\n while (Option.isSome(page)) {\n collected.push(...page.value.nodes)\n\n if (!page.value.pageInfo.hasNextPage) break\n\n // A claimed next page needs a new cursor, or CI would be judged on part or paging never end.\n const after = page.value.pageInfo.endCursor ?? \"\"\n\n if (after === \"\" || followed.has(after)) return yield* failure(\"InvalidResponse\")\n\n followed.add(after)\n\n const envelope = yield* post(continuation(), { cursor: after, url: node.url })\n\n if ((envelope.errors ?? []).length > 0) return yield* failure(\"InvalidResponse\")\n\n const data = yield* Schema.decodeUnknownEffect(ContinuationData)(envelope.data).pipe(\n Effect.mapError(() => failure(\"InvalidResponse\")),\n )\n\n page = Option.some(data.resource.statusCheckRollup.contexts)\n }\n\n return collected\n})\n\n/** GraphQL error types meaning the pull request does not exist or this token cannot see it. */\nconst inaccessible = new Set([\"NOT_FOUND\", \"FORBIDDEN\"])\n\n/** Errors for `key`, or naming no alias, fail it; only its own inaccessible errors mean missing. */\nfunction aliasFailure(request: Batch, key: string): Option.Option<Diagnostic> {\n const diagnostics = (request.envelope.errors ?? []).flatMap((error): Diagnostic[] => {\n const root = String((error.path ?? [])[0] ?? \"\")\n\n if (root === key) return [inaccessible.has(error.type ?? \"\") ? \"NotFound\" : \"InvalidResponse\"]\n\n return request.aliases.has(root) ? [] : [\"InvalidResponse\"]\n })\n\n if (diagnostics.length === 0) return Option.none()\n\n return Option.some(diagnostics.includes(\"InvalidResponse\") ? \"InvalidResponse\" : \"NotFound\")\n}\n\ninterface Batch {\n readonly post: Post\n readonly envelope: Envelope\n /** The aliases of this batch's pull requests. */\n readonly aliases: ReadonlySet<string>\n}\n\nconst itemResult = Effect.fn(\"itemResult\")(function* (\n request: Batch,\n ref: PullRequestRef,\n key: string,\n) {\n const { envelope, post } = request\n const reported = aliasFailure(request, key)\n const raw = Option.fromNullishOr((envelope.data ?? {})[key])\n\n if (Option.isSome(reported)) return failed(reported.value)\n\n if (Option.isNone(raw)) return failed(\"NotFound\")\n\n const node = Schema.decodeUnknownOption(PullRequestNode)(raw.value)\n\n if (Option.isNone(node)) return failed(\"InvalidResponse\")\n\n const contexts = yield* Effect.result(allContexts(post, node.value))\n\n if (Result.isFailure(contexts)) return failed(contexts.failure.diagnostic)\n\n return {\n _tag: \"Reported\",\n report: toReport(ref, node.value, contexts.success),\n } satisfies ItemResult\n})\n\nconst fetchBatch = Effect.fn(\"fetchBatch\")(function* (post: Post, refs: readonly PullRequestRef[]) {\n const variables = Object.fromEntries(refs.map((ref, index) => [alias(index), ref.url]))\n const envelope = yield* post(batch(refs.length), variables)\n\n // GitHub answers a request it could not run at all, such as a rate-limited one, without data.\n if (Option.isNone(Option.fromNullishOr(envelope.data))) return yield* failure(\"GitHubUnavailable\")\n\n const results = yield* Effect.forEach(\n refs,\n (ref, index) =>\n itemResult({ aliases: new Set(Object.keys(variables)), envelope, post }, ref, alias(index)),\n {\n concurrency: 4,\n },\n )\n\n return Arr.zip(\n refs.map((ref) => ref.url),\n results,\n )\n})\n\n/** A batch's results; when the whole batch failed, a failure for each of its pull requests. */\nconst outcomeOf = (post: Post, refs: readonly PullRequestRef[]): Effect.Effect<BatchOutcome> =>\n Effect.gen(function* () {\n const result = yield* Effect.result(fetchBatch(post, refs))\n\n if (Result.isSuccess(result)) return { entries: result.success, failure: Option.none() }\n\n const { diagnostic } = result.failure\n\n return {\n entries: refs.map((ref): Entry => [ref.url, { _tag: \"Failed\", diagnostic }]),\n failure: Option.some(diagnostic),\n }\n })\n\n/** The GitHub port over GraphQL. Requires an HTTP client, a token source, and `gh`. */\nexport const layer = Layer.effect(\n GitHub,\n Effect.gen(function* () {\n const post = yield* makePost()\n const runner = yield* CommandRunner\n\n return GitHub.of({\n fetch: (refs) => {\n const batches = Arr.chunksOf(\n Arr.dedupeWith(refs, (left, right) => left.url === right.url),\n maximumBatch,\n )\n\n return Effect.forEach(batches, (refsInBatch: readonly PullRequestRef[]) =>\n outcomeOf(post, refsInBatch),\n ).pipe(\n Effect.flatMap((outcomes: readonly BatchOutcome[]) =>\n Effect.fromResult(combined(outcomes)),\n ),\n Effect.mapError(failure),\n )\n },\n pullRequestInRepository: (directory, number) =>\n resolveInRepository(directory, number).pipe(Effect.provideService(CommandRunner, runner)),\n })\n }),\n)\n\n/** The GitHub port over `api.github.com`, with tokens from the environment or `gh`. */\nexport const live = layer.pipe(\n Layer.provide(tokenLayer),\n Layer.provide([commandLayer, FetchHttpClient.layer]),\n)\n",
7
+ "import { Context, Option, Schema, type Effect } from \"effect\"\n\nimport type { PullRequestRef } from \"../domain/PullRequest.ts\"\nimport { Diagnostic, type Snapshot } from \"../domain/Snapshot.ts\"\nimport type { Membership } from \"../domain/StackLayout.ts\"\n\n/** Everything one refresh learns about a pull request. */\nexport interface Report {\n readonly snapshot: Snapshot\n /** None when GitHub's Stack data was incomplete. */\n readonly membership: Option.Option<Membership>\n}\n\n/** A failure that affects the whole request rather than one pull request. */\nexport class GitHubFailure extends Schema.TaggedError<GitHubFailure>()(\"GitHubFailure\", {\n diagnostic: Diagnostic,\n}) {}\n\n/** The directory is not a GitHub repository `gh` can see, so a bare number cannot be resolved. */\nexport class RepositoryUnavailable extends Schema.TaggedError<RepositoryUnavailable>()(\n \"RepositoryUnavailable\",\n { directory: Schema.String },\n) {}\n\nexport type ItemResult =\n | { readonly _tag: \"Reported\"; readonly report: Report }\n | { readonly _tag: \"Failed\"; readonly diagnostic: Diagnostic }\n\nexport interface GitHubApi {\n /** Reports for pull requests, keyed by canonical URL. Large requests are split into batches. */\n readonly fetch: (\n refs: readonly PullRequestRef[],\n ) => Effect.Effect<ReadonlyMap<string, ItemResult>, GitHubFailure>\n /** The pull request `number` in the GitHub repository checked out at `directory`. */\n readonly pullRequestInRepository: (\n directory: string,\n number: number,\n ) => Effect.Effect<PullRequestRef, GitHubFailure | RepositoryUnavailable>\n}\n\nexport const maximumBatch = 20\n\nexport class GitHub extends Context.Service<GitHub, GitHubApi>()(\"opencode-pr-tracker/GitHub\") {}\n",
8
+ "import { Duration, Match, Schema } from \"effect\"\n\nimport { PullRequestRef } from \"./PullRequest.ts\"\n\nexport const Ci = Schema.Literals([\"passed\", \"pending\", \"failed\", \"none\"])\n\nexport type Ci = typeof Ci.Type\n\nexport const Mergeability = Schema.Literals([\"mergeable\", \"conflicting\", \"unknown\"])\n\nexport type Mergeability = typeof Mergeability.Type\n\nexport const PullRequestState = Schema.Union([\n Schema.TaggedStruct(\"Open\", {\n behind: Schema.Boolean,\n ci: Ci,\n draft: Schema.Boolean,\n mergeability: Mergeability,\n }),\n Schema.TaggedStruct(\"Merged\", {}),\n Schema.TaggedStruct(\"Closed\", {}),\n])\n\nexport type PullRequestState = typeof PullRequestState.Type\n\n/** What GitHub reported for one pull request at one refresh. */\nexport const Snapshot = Schema.Struct({\n ref: PullRequestRef,\n state: PullRequestState,\n title: Schema.String,\n})\n\nexport type Snapshot = typeof Snapshot.Type\n\n/** Why a refresh failed, as far as a user can act on it. */\nexport const Diagnostic = Schema.Literals([\n \"GitHubCliMissing\",\n \"AuthenticationRequired\",\n \"GitHubUnavailable\",\n \"NotFound\",\n \"InvalidResponse\",\n])\n\nexport type Diagnostic = typeof Diagnostic.Type\n\nexport const Status = Schema.Union([\n Schema.TaggedStruct(\"Pending\", {}),\n Schema.TaggedStruct(\"Fresh\", { snapshot: Snapshot }),\n Schema.TaggedStruct(\"Stale\", {\n diagnostic: Diagnostic,\n failingSince: Schema.Int,\n snapshot: Snapshot,\n }),\n Schema.TaggedStruct(\"Unavailable\", { diagnostic: Diagnostic }),\n])\n\nexport type Status = typeof Status.Type\n\n/** How long a pull request may keep failing before its last good snapshot is withdrawn. */\nexport const staleLimit = Duration.minutes(5)\n\nexport const pending: Status = { _tag: \"Pending\" }\n\nexport function succeeded(snapshot: Snapshot): Status {\n return { _tag: \"Fresh\", snapshot }\n}\n\n/** The status after a failed refresh at `now`, in epoch milliseconds. */\nexport function failed(status: Status, diagnostic: Diagnostic, now: number): Status {\n return Match.valueTags(status, {\n Fresh: ({ snapshot }): Status => ({ _tag: \"Stale\", diagnostic, failingSince: now, snapshot }),\n Pending: (): Status => ({ _tag: \"Unavailable\", diagnostic }),\n Stale: ({ failingSince, snapshot }): Status =>\n now - failingSince >= Duration.toMillis(staleLimit)\n ? { _tag: \"Unavailable\", diagnostic }\n : { _tag: \"Stale\", diagnostic, failingSince, snapshot },\n Unavailable: (): Status => ({ _tag: \"Unavailable\", diagnostic }),\n })\n}\n",
9
+ "import { Option, Result, Schema } from \"effect\"\n\nconst canonicalSegment = /^(?!\\.{1,2}$)[a-z0-9._-]+$/u\n\nconst pullRequestUrl =\n /^(?:https:\\/\\/)?github\\.com\\/(?<owner>[\\w.-]+)\\/(?<repository>[\\w.-]+)\\/pull\\/(?<number>\\d+)$/iu\n\nconst decimal = /^\\d+$/u\n\n/** Printable ASCII only. With the `u` and `i` flags, `\\w` also matches letters that fold to ASCII. */\nconst printableAscii = /^[\\u0021-\\u007E]*$/u\n\nconst Segment = Schema.String.check(Schema.isPattern(canonicalSegment))\n\nconst PullRequestNumber = Schema.Int.check(\n Schema.isBetween({ maximum: Number.MAX_SAFE_INTEGER, minimum: 1 }),\n)\n\n/** A canonical github.com pull request. Owner and repository are lowercase. */\nexport class PullRequestRef extends Schema.Class<PullRequestRef>(\"PullRequestRef\")({\n number: PullRequestNumber,\n owner: Segment,\n repository: Segment,\n}) {\n public get url(): string {\n return `https://github.com/${this.owner}/${this.repository}/pull/${String(this.number)}`\n }\n\n public get label(): string {\n return `${this.owner}/${this.repository}#${String(this.number)}`\n }\n}\n\nexport class InvalidPullRequestUrl extends Schema.TaggedError<InvalidPullRequestUrl>()(\n \"InvalidPullRequestUrl\",\n { input: Schema.String },\n) {}\n\nexport class InvalidPullRequestInput extends Schema.TaggedError<InvalidPullRequestInput>()(\n \"InvalidPullRequestInput\",\n { input: Schema.String },\n) {}\n\n/** A pull request named by URL, or by number within a repository resolved later. */\nexport type PullRequestInput =\n | { readonly _tag: \"Reference\"; readonly ref: PullRequestRef }\n | { readonly _tag: \"Number\"; readonly number: number }\n\nconst decodeRef = Schema.decodeUnknownOption(PullRequestRef)\n\nconst decodeNumber = Schema.decodeUnknownOption(PullRequestNumber)\n\nexport function samePullRequest(left: PullRequestRef, right: PullRequestRef): boolean {\n return left.url === right.url\n}\n\nexport function parsePullRequestUrl(\n input: string,\n): Result.Result<PullRequestRef, InvalidPullRequestUrl> {\n const match = printableAscii.test(input) ? pullRequestUrl.exec(input) : null\n const groups = match === null ? {} : (match.groups ?? {})\n\n const candidate = {\n number: Number(groups[\"number\"] ?? Number.NaN),\n owner: (groups[\"owner\"] ?? \"\").toLowerCase(),\n repository: (groups[\"repository\"] ?? \"\").toLowerCase(),\n }\n\n return Result.fromOption(decodeRef(candidate), () => new InvalidPullRequestUrl({ input }))\n}\n\nexport function parsePullRequestInput(\n input: string,\n): Result.Result<PullRequestInput, InvalidPullRequestInput> {\n const reference = parsePullRequestUrl(input)\n\n if (Result.isSuccess(reference))\n return Result.succeed({ _tag: \"Reference\", ref: reference.success })\n\n const number = decimal.test(input) ? decodeNumber(Number(input)) : Option.none()\n\n return Result.fromOption(number, () => new InvalidPullRequestInput({ input })).pipe(\n Result.map((value) => ({ _tag: \"Number\", number: value })),\n )\n}\n",
10
+ "import { Context, Effect, Layer, Schema, type Scope } from \"effect\"\n\nexport class CommandMissing extends Schema.TaggedError<CommandMissing>()(\"CommandMissing\", {\n command: Schema.String,\n}) {}\n\nexport class CommandFailed extends Schema.TaggedError<CommandFailed>()(\"CommandFailed\", {\n command: Schema.String,\n exitCode: Schema.Int,\n stderr: Schema.String,\n}) {}\n\nexport interface CommandRunnerApi {\n /** Runs `command` to completion and returns its standard output. Interruption kills it. */\n readonly run: (\n command: string,\n args: readonly string[],\n cwd: string,\n ) => Effect.Effect<string, CommandMissing | CommandFailed>\n}\n\nexport class CommandRunner extends Context.Service<CommandRunner, CommandRunnerApi>()(\n \"opencode-pr-tracker/CommandRunner\",\n) {}\n\n/** The parts of a running process this adapter uses. */\ninterface Child {\n readonly running: () => boolean\n readonly kill: () => void\n readonly completed: () => Promise<readonly [stdout: string, stderr: string, exitCode: number]>\n}\n\nconst isMissingExecutable = Schema.is(Schema.Struct({ code: Schema.Literal(\"ENOENT\") }))\n\nfunction spawn(command: string, args: readonly string[], cwd: string): Child {\n const process = Bun.spawn([command, ...args], {\n cwd,\n stderr: \"pipe\",\n stdin: \"ignore\",\n stdout: \"pipe\",\n })\n\n return {\n completed: async () => {\n const result = await Promise.all([\n new Response(process.stdout).text(),\n new Response(process.stderr).text(),\n process.exited,\n ])\n\n return result\n },\n kill: () => {\n process.kill()\n },\n running: () => process.exitCode === null,\n }\n}\n\n/** Starts the process; closing the scope, including on interruption, kills it if still running. */\nfunction start(\n command: string,\n args: readonly string[],\n cwd: string,\n): Effect.Effect<Child, CommandMissing | CommandFailed, Scope.Scope> {\n const started = Effect.try({\n catch: (cause) =>\n isMissingExecutable(cause)\n ? new CommandMissing({ command })\n : new CommandFailed({ command, exitCode: -1, stderr: String(cause) }),\n try: () => spawn(command, args, cwd),\n })\n\n return Effect.acquireRelease(started, (child: Child) =>\n Effect.sync(() => {\n if (child.running()) child.kill()\n }),\n )\n}\n\nfunction output(command: string, child: Child): Effect.Effect<string, CommandFailed> {\n return Effect.gen(function* () {\n const [stdout, stderr, exitCode] = yield* Effect.promise(child.completed)\n\n if (exitCode === 0) return stdout\n\n return yield* new CommandFailed({ command, exitCode, stderr })\n })\n}\n\nexport const layer = Layer.succeed(\n CommandRunner,\n CommandRunner.of({\n run: (command, args, cwd) =>\n Effect.scoped(\n Effect.flatMap(start(command, args, cwd), (child: Child) => output(command, child)),\n ),\n }),\n)\n",
11
+ "/** GraphQL documents for the batched pull request query and check-context continuation pages. */\n\nexport const defaultPageSize = 100\n\nconst contexts = (pageSize: number, after: string): string => `\n contexts(first: ${String(pageSize)}${after}) {\n pageInfo { hasNextPage endCursor }\n nodes {\n __typename\n ... on StatusContext { context state createdAt }\n ... on CheckRun {\n name status conclusion\n checkSuite {\n id\n createdAt\n app { id }\n workflowRun { event runNumber runAttempt workflow { id } }\n }\n }\n }\n }`\n\nconst pullRequest = (pageSize: number): string => `\n __typename\n ... on PullRequest {\n url title state isDraft mergeable mergeStateStatus\n stack {\n id size\n entries(first: 100) {\n pageInfo { hasNextPage }\n nodes { position pullRequest { url } }\n }\n }\n statusCheckRollup { ${contexts(pageSize, \"\")} }\n }`\n\nexport const alias = (index: number): string => `pr${String(index)}`\n\n/** One query for `count` pull requests, passed as variables `pr0`, `pr1`, and so on. */\nexport function batch(count: number, pageSize = defaultPageSize): string {\n const indexes = Array.from({ length: count }, (_, index) => index)\n const variables = indexes.map((index) => `$${alias(index)}: URI!`).join(\", \")\n\n const fields = indexes\n .map((index) => `${alias(index)}: resource(url: $${alias(index)}) { ${pullRequest(pageSize)} }`)\n .join(\"\\n\")\n\n return `query PullRequests(${variables}) {\\n${fields}\\n}`\n}\n\n/** The next page of check contexts for one pull request, with variables `url` and `cursor`. */\nexport function continuation(pageSize = defaultPageSize): string {\n return `query CheckContexts($url: URI!, $cursor: String!) {\n resource(url: $url) {\n __typename\n ... on PullRequest { statusCheckRollup { ${contexts(pageSize, \", after: $cursor\")} } }\n }\n}`\n}\n",
12
+ "import { Effect, Result, Schema } from \"effect\"\n\nimport { parsePullRequestUrl } from \"../../domain/PullRequest.ts\"\nimport { GitHubFailure, RepositoryUnavailable } from \"../../ports/GitHub.ts\"\nimport { CommandRunner } from \"../Command.ts\"\n\nconst RepositoryView = Schema.fromJsonString(Schema.Struct({ url: Schema.String }))\n\n/** Pull request `number` in the GitHub repository `gh` finds at `directory`. */\nexport const resolveInRepository = Effect.fn(\"resolveInRepository\")(function* (\n directory: string,\n number: number,\n) {\n const runner = yield* CommandRunner\n const unavailable = new RepositoryUnavailable({ directory })\n\n const output = yield* runner.run(\"gh\", [\"repo\", \"view\", \"--json\", \"url\"], directory).pipe(\n Effect.catchTags({\n CommandFailed: () => Effect.fail(unavailable),\n CommandMissing: () => Effect.fail(new GitHubFailure({ diagnostic: \"GitHubCliMissing\" })),\n }),\n )\n\n const view = yield* Schema.decodeUnknownEffect(RepositoryView)(output).pipe(\n Effect.mapError(() => unavailable),\n )\n\n return yield* Result.match(parsePullRequestUrl(`${view.url}/pull/${String(number)}`), {\n onFailure: () => Effect.fail(unavailable),\n onSuccess: Effect.succeed,\n })\n})\n",
13
+ "import { Array as Arr, Option, Result, Schema } from \"effect\"\n\nimport { classifyCi, type Check, type CheckOutcome } from \"../../domain/Checks.ts\"\nimport { parsePullRequestUrl, type PullRequestRef } from \"../../domain/PullRequest.ts\"\nimport type { Diagnostic, Mergeability, PullRequestState } from \"../../domain/Snapshot.ts\"\nimport type { Membership } from \"../../domain/StackLayout.ts\"\nimport type { ItemResult, Report } from \"../../ports/GitHub.ts\"\n\nconst PageInfo = Schema.Struct({\n endCursor: Schema.NullOr(Schema.String),\n hasNextPage: Schema.Boolean,\n})\n\nconst StatusState = Schema.Literals([\"EXPECTED\", \"PENDING\", \"SUCCESS\", \"ERROR\", \"FAILURE\"])\n\nconst MergeableState = Schema.Literals([\"MERGEABLE\", \"CONFLICTING\", \"UNKNOWN\"])\n\ntype MergeableState = typeof MergeableState.Type\n\ntype StatusState = typeof StatusState.Type\n\nconst StatusContextNode = Schema.Struct({\n __typename: Schema.Literal(\"StatusContext\"),\n context: Schema.String,\n createdAt: Schema.String,\n state: StatusState,\n})\n\nconst CheckRunNode = Schema.Struct({\n __typename: Schema.Literal(\"CheckRun\"),\n checkSuite: Schema.Struct({\n app: Schema.NullOr(Schema.Struct({ id: Schema.String })),\n createdAt: Schema.String,\n id: Schema.String,\n workflowRun: Schema.NullOr(\n Schema.Struct({\n event: Schema.String,\n runAttempt: Schema.Int,\n runNumber: Schema.Int,\n workflow: Schema.Struct({ id: Schema.String }),\n }),\n ),\n }),\n conclusion: Schema.NullOr(Schema.String),\n name: Schema.String,\n status: Schema.String,\n})\n\nexport const ContextNode = Schema.Union([StatusContextNode, CheckRunNode])\n\nexport type ContextNode = typeof ContextNode.Type\n\nexport const Contexts = Schema.Struct({\n nodes: Schema.Array(ContextNode),\n pageInfo: PageInfo,\n})\n\nexport type Contexts = typeof Contexts.Type\n\nconst StackNode = Schema.Struct({\n entries: Schema.Struct({\n nodes: Schema.Array(\n Schema.Struct({ position: Schema.Int, pullRequest: Schema.Struct({ url: Schema.String }) }),\n ),\n pageInfo: Schema.Struct({ hasNextPage: Schema.Boolean }),\n }),\n id: Schema.String,\n size: Schema.Int,\n})\n\nexport const PullRequestNode = Schema.Struct({\n __typename: Schema.Literal(\"PullRequest\"),\n isDraft: Schema.Boolean,\n mergeStateStatus: Schema.String,\n mergeable: MergeableState,\n stack: Schema.NullOr(StackNode),\n state: Schema.Literals([\"OPEN\", \"CLOSED\", \"MERGED\"]),\n statusCheckRollup: Schema.NullOr(Schema.Struct({ contexts: Contexts })),\n title: Schema.String,\n url: Schema.String,\n})\n\nexport type PullRequestNode = typeof PullRequestNode.Type\n\nconst failedConclusions = new Set([\n \"FAILURE\",\n \"CANCELLED\",\n \"TIMED_OUT\",\n \"ACTION_REQUIRED\",\n \"STARTUP_FAILURE\",\n \"STALE\",\n])\n\nconst timestamp = /^(?<seconds>[^.]+?)(?:\\.(?<fraction>\\d+))?Z$/u\n\n/** `[epochSeconds, nanoseconds]`, so runs created in the same second still order correctly. */\nexport function generationOf(createdAt: string): readonly number[] {\n const match = timestamp.exec(createdAt)\n const groups = match === null ? {} : (match.groups ?? {})\n const seconds = Date.parse(`${groups[\"seconds\"] ?? \"\"}Z`) / 1000\n const nanoseconds = Number((groups[\"fraction\"] ?? \"\").padEnd(9, \"0\").slice(0, 9))\n\n return [Number.isFinite(seconds) ? seconds : 0, nanoseconds]\n}\n\nfunction checkRunOutcome(status: string, conclusion: string | null): CheckOutcome {\n if (status !== \"COMPLETED\") return \"pending\"\n\n if (conclusion === \"SUCCESS\") return \"passed\"\n\n return failedConclusions.has(conclusion ?? \"\") ? \"failed\" : \"ignored\"\n}\n\nconst mergeabilities: Record<MergeableState, Mergeability> = {\n CONFLICTING: \"conflicting\",\n MERGEABLE: \"mergeable\",\n UNKNOWN: \"unknown\",\n}\n\nconst statusOutcomes: Record<StatusState, CheckOutcome> = {\n ERROR: \"failed\",\n EXPECTED: \"pending\",\n FAILURE: \"failed\",\n PENDING: \"pending\",\n SUCCESS: \"passed\",\n}\n\n/**\n * Status contexts are one check per context name. A workflow check is identified by its app,\n * workflow, event and name, and ordered by run and attempt. Any other check run is identified by\n * its app (or suite) and name, and ordered by when its suite was created.\n */\nexport function toCheck(node: ContextNode): Check {\n if (node.__typename === \"StatusContext\") {\n const identity = `status ${node.context.toLowerCase()}`\n\n return {\n generation: generationOf(node.createdAt),\n identity,\n outcome: statusOutcomes[node.state],\n }\n }\n\n const outcome = checkRunOutcome(node.status, node.conclusion)\n\n // Runs of one app's check replace each other across suites; without an app, each suite stands alone.\n const source =\n node.checkSuite.app === null ? `suite ${node.checkSuite.id}` : `app ${node.checkSuite.app.id}`\n\n return Option.match(Option.fromNullishOr(node.checkSuite.workflowRun), {\n onNone: () => ({\n generation: generationOf(node.checkSuite.createdAt),\n identity: `check ${source} ${node.name}`,\n outcome,\n }),\n onSome: (run) => ({\n generation: [run.runNumber, run.runAttempt],\n identity: `workflow ${source} ${run.workflow.id} ${run.event} ${node.name}`,\n outcome,\n }),\n })\n}\n\nfunction toState(node: PullRequestNode, contexts: readonly ContextNode[]): PullRequestState {\n if (node.state === \"MERGED\") return { _tag: \"Merged\" }\n\n if (node.state === \"CLOSED\") return { _tag: \"Closed\" }\n\n return {\n _tag: \"Open\",\n behind: node.mergeStateStatus === \"BEHIND\",\n ci: classifyCi(contexts.map((context) => toCheck(context))),\n draft: node.isDraft,\n mergeability: mergeabilities[node.mergeable],\n }\n}\n\n/** None when GitHub returned only part of the Stack, or a member URL we cannot parse. */\nexport function toMembership(node: PullRequestNode): Option.Option<Membership> {\n if (node.stack === null) return Option.some({ _tag: \"Standalone\" })\n\n const { entries, id, size } = node.stack\n const ordered = entries.nodes.toSorted((left, right) => left.position - right.position)\n\n const members = ordered.flatMap((entry) =>\n Option.toArray(Result.getSuccess(parsePullRequestUrl(entry.pullRequest.url))),\n )\n\n const complete = !entries.pageInfo.hasNextPage && members.length === size\n\n return complete && Arr.isArrayNonEmpty(members)\n ? Option.some({ _tag: \"Stack\", id, members })\n : Option.none()\n}\n\nexport function toReport(\n ref: PullRequestRef,\n node: PullRequestNode,\n contexts: readonly ContextNode[],\n): Report {\n return {\n membership: toMembership(node),\n snapshot: { ref, state: toState(node, contexts), title: node.title },\n }\n}\n\nexport type Entry = readonly [url: string, result: ItemResult]\n\n/** One batch's results, and why it failed as a whole, if it did. */\nexport interface BatchOutcome {\n readonly entries: readonly Entry[]\n readonly failure: Option.Option<Diagnostic>\n}\n\n/** Every batch's results together, or a failure when every batch failed. */\nexport function combined(\n outcomes: readonly BatchOutcome[],\n): Result.Result<ReadonlyMap<string, ItemResult>, Diagnostic> {\n const failures = outcomes.flatMap((outcome) => Option.toArray(outcome.failure))\n const everyBatchFailed = failures.length === outcomes.length\n\n return Option.match(\n Option.filter(Arr.head(failures), () => everyBatchFailed),\n {\n onNone: () => Result.succeed(new Map(outcomes.flatMap((outcome) => outcome.entries))),\n onSome: (diagnostic) => Result.fail(diagnostic),\n },\n )\n}\n",
14
+ "import { Array as Arr, Option, Order } from \"effect\"\n\nimport type { Ci } from \"./Snapshot.ts\"\n\nexport type CheckOutcome = \"passed\" | \"pending\" | \"failed\" | \"ignored\"\n\n/**\n * One check run or status context. Checks with the same `identity` are runs of one check;\n * only those with the greatest `generation` count. A generation is compared element by element,\n * for example `[runNumber, runAttempt]` or `[createdAtSeconds, createdAtNanoseconds]`.\n */\nexport interface Check {\n readonly identity: string\n readonly generation: readonly number[]\n readonly outcome: CheckOutcome\n}\n\nconst generationOrder = Arr.makeOrder(Order.Number)\n\ninterface Latest {\n readonly generation: readonly number[]\n readonly outcomes: readonly CheckOutcome[]\n}\n\n/** The newest runs of one check after seeing `check`: a newer run replaces them, a tie joins them. */\nfunction withRun(current: Option.Option<Latest>, check: Check): Latest {\n const replacement: Latest = { generation: check.generation, outcomes: [check.outcome] }\n\n return Option.match(current, {\n onNone: () => replacement,\n onSome: (existing: Latest): Latest => {\n const comparison = generationOrder(check.generation, existing.generation)\n\n if (comparison > 0) return replacement\n\n if (comparison < 0) return existing\n\n return { generation: existing.generation, outcomes: [...existing.outcomes, check.outcome] }\n },\n })\n}\n\nfunction latestOutcomes(checks: readonly Check[]): Set<CheckOutcome> {\n const latest = new Map<string, Latest>()\n\n for (const check of checks) {\n latest.set(check.identity, withRun(Option.fromNullishOr(latest.get(check.identity)), check))\n }\n\n return new Set([...latest.values()].flatMap((entry: Latest) => entry.outcomes))\n}\n\n/** Failed beats pending beats passed. Superseded runs are ignored; so are skipped or neutral runs. */\nexport function classifyCi(checks: readonly Check[]): Ci {\n const outcomes = latestOutcomes(checks)\n\n if (outcomes.has(\"failed\")) return \"failed\"\n\n if (outcomes.has(\"pending\")) return \"pending\"\n\n if (outcomes.has(\"passed\")) return \"passed\"\n\n return \"none\"\n}\n",
15
+ "import { Config, Context, Effect, Layer, Option, Redacted, Ref } from \"effect\"\n\nimport { GitHubFailure } from \"../../ports/GitHub.ts\"\nimport { CommandRunner } from \"../Command.ts\"\n\nexport interface TokenApi {\n /** The GitHub token, from `GH_TOKEN`, `GITHUB_TOKEN`, or `gh auth token`, cached after first use. */\n readonly get: Effect.Effect<Redacted.Redacted, GitHubFailure>\n /** Forgets the cached token, so the next `get` reads it again. */\n readonly invalidate: Effect.Effect<void>\n}\n\nexport class Token extends Context.Service<Token, TokenApi>()(\"opencode-pr-tracker/Token\") {}\n\n/** `GH_TOKEN`, then `GITHUB_TOKEN`, as `gh` itself reads them. Empty values count as unset. */\nconst variable = (name: string): Config.Config<Option.Option<Redacted.Redacted>> =>\n Config.option(Config.redacted(name)).pipe(\n Config.map(Option.filter((token) => Redacted.value(token).trim() !== \"\")),\n )\n\nconst environmentToken = Config.all([variable(\"GH_TOKEN\"), variable(\"GITHUB_TOKEN\")]).pipe(\n Config.map(\n ([ghToken, githubToken]: readonly [\n Option.Option<Redacted.Redacted>,\n Option.Option<Redacted.Redacted>,\n ]) => Option.orElse(ghToken, () => githubToken),\n ),\n)\n\nexport const layer = Layer.effect(\n Token,\n Effect.gen(function* () {\n const runner = yield* CommandRunner\n const cached = yield* Ref.make(Option.none<Redacted.Redacted>())\n\n const fromGh = runner.run(\"gh\", [\"auth\", \"token\"], process.cwd()).pipe(\n Effect.map((output) => output.trim()),\n Effect.filterOrFail(\n (token) => token !== \"\",\n () => new GitHubFailure({ diagnostic: \"AuthenticationRequired\" }),\n ),\n Effect.catchTags({\n CommandFailed: () =>\n Effect.fail(new GitHubFailure({ diagnostic: \"AuthenticationRequired\" })),\n CommandMissing: () => Effect.fail(new GitHubFailure({ diagnostic: \"GitHubCliMissing\" })),\n }),\n )\n\n // Read once: the environment does not change while the plugin runs.\n const fromEnvironment = yield* environmentToken.pipe(\n Effect.orElseSucceed(() => Option.none<Redacted.Redacted>()),\n )\n\n const load = Option.match(fromEnvironment, {\n onNone: () => Effect.map(fromGh, Redacted.make),\n onSome: Effect.succeed,\n }).pipe(Effect.tap((token) => Ref.set(cached, Option.some(token))))\n\n return Token.of({\n get: Ref.get(cached).pipe(\n Effect.flatMap(Option.match({ onNone: () => load, onSome: Effect.succeed })),\n ),\n invalidate: Ref.set(cached, Option.none()),\n })\n }),\n)\n",
16
+ "import type { StorageDomain } from \"@opencode/plugin/effect/storage\"\nimport { Array as Arr, Effect, Layer, Option, Result, Schema } from \"effect\"\n\nimport { parsePullRequestUrl } from \"../domain/PullRequest.ts\"\nimport { Attachment, maximumAttachments, type Tracking } from \"../domain/Tracking.ts\"\nimport { StoredStateInvalid, TrackingRepository } from \"../ports/TrackingRepository.ts\"\n\n/** The stored form of a session's attachments. Bump `version` for incompatible changes. */\nconst Stored = Schema.Struct({\n pullRequests: Schema.Array(Schema.Struct({ attachedAt: Schema.Int, url: Schema.String })).check(\n Schema.isMaxLength(maximumAttachments),\n ),\n version: Schema.Literal(1),\n})\n\ntype Stored = typeof Stored.Type\n\nconst keyOf = (sessionID: string): string => `session/${sessionID}`\n\nfunction toTracking(stored: Stored): Option.Option<Tracking> {\n const attachments = stored.pullRequests.map((entry) =>\n Result.map(\n parsePullRequestUrl(entry.url),\n (ref) => new Attachment({ attachedAt: entry.attachedAt, ref }),\n ),\n )\n\n const valid = attachments.flatMap((attachment) => Option.toArray(Result.getSuccess(attachment)))\n const unique = Arr.dedupeWith(valid, (left, right) => left.ref.url === right.ref.url)\n\n return unique.length === stored.pullRequests.length ? Option.some(unique) : Option.none()\n}\n\nfunction toStored(tracking: Tracking): Stored {\n return {\n pullRequests: tracking.map((attachment) => ({\n attachedAt: attachment.attachedAt,\n url: attachment.ref.url,\n })),\n version: 1,\n }\n}\n\n/** Attachments kept in plugin storage, one key per session. */\nexport function layer(storage: StorageDomain): Layer.Layer<TrackingRepository> {\n return Layer.succeed(\n TrackingRepository,\n TrackingRepository.of({\n load: (sessionID) =>\n storage.get(keyOf(sessionID)).pipe(\n Effect.flatMap((value) =>\n Option.match(Option.fromNullishOr(value), {\n onNone: () => Effect.succeed<Tracking>([]),\n onSome: (json) =>\n Schema.decodeUnknownOption(Stored)(json).pipe(\n Option.flatMap(toTracking),\n Option.match({\n onNone: () => Effect.fail(new StoredStateInvalid({ sessionID })),\n onSome: (tracking) => Effect.succeed(tracking),\n }),\n ),\n }),\n ),\n ),\n remove: (sessionID) => storage.remove(keyOf(sessionID)),\n save: (sessionID, tracking) => storage.set(keyOf(sessionID), toStored(tracking)),\n }),\n )\n}\n",
17
+ "import { Array as Arr, Option, Result, Schema } from \"effect\"\n\nimport { PullRequestRef, samePullRequest } from \"./PullRequest.ts\"\n\nexport const maximumAttachments = 20\n\nexport class Attachment extends Schema.Class<Attachment>(\"Attachment\")({\n attachedAt: Schema.Int,\n ref: PullRequestRef,\n}) {}\n\n/** The pull requests attached to one session, in display order. */\nexport type Tracking = readonly Attachment[]\n\nexport class AttachmentLimitReached extends Schema.TaggedError<AttachmentLimitReached>()(\n \"AttachmentLimitReached\",\n { limit: Schema.Int, requested: Schema.Int },\n) {}\n\nexport class AmbiguousPullRequestNumber extends Schema.TaggedError<AmbiguousPullRequestNumber>()(\n \"AmbiguousPullRequestNumber\",\n { matches: Schema.Array(PullRequestRef), number: Schema.Int },\n) {}\n\nexport interface Change {\n readonly tracking: Tracking\n readonly changed: boolean\n}\n\nexport interface Removal {\n readonly tracking: Tracking\n readonly removed: Option.Option<PullRequestRef>\n}\n\nfunction isMember(stack: readonly PullRequestRef[], attachment: Attachment): boolean {\n return stack.some((ref) => samePullRequest(ref, attachment.ref))\n}\n\n/**\n * Attaches every member of a stack, bottom to top. A single pull request is a stack of one.\n * Members are placed together where the earliest of them was already attached, or at the end.\n */\nexport function attach(\n tracking: Tracking,\n stack: Arr.NonEmptyReadonlyArray<PullRequestRef>,\n now: number,\n): Result.Result<Change, AttachmentLimitReached> {\n const members = Arr.dedupeWith(stack, samePullRequest)\n const others = tracking.filter((attachment) => !isMember(members, attachment))\n const requested = others.length + members.length\n\n if (requested > maximumAttachments) {\n return Result.fail(new AttachmentLimitReached({ limit: maximumAttachments, requested }))\n }\n\n const position = tracking.findIndex((attachment) => isMember(members, attachment))\n const insertAt = position === -1 ? others.length : position\n\n const placed = members.map((ref) =>\n Option.getOrElse(\n Arr.findFirst(tracking, (attachment) => samePullRequest(attachment.ref, ref)),\n () => new Attachment({ attachedAt: now, ref }),\n ),\n )\n\n const next = [...others.slice(0, insertAt), ...placed, ...others.slice(insertAt)]\n\n // Existing attachments are reused as they are, so any change shows as a different element.\n const changed =\n next.length !== tracking.length ||\n next.some((attachment, index) => attachment !== tracking[index])\n\n return Result.succeed({ changed, tracking: next })\n}\n\nexport function detach(tracking: Tracking, ref: PullRequestRef): Removal {\n const next = tracking.filter((attachment) => !samePullRequest(attachment.ref, ref))\n const removed = next.length === tracking.length ? Option.none() : Option.some(ref)\n\n return { removed, tracking: next }\n}\n\n/** Detaches the only attachment with `number`. Several matches are ambiguous. */\nexport function detachNumber(\n tracking: Tracking,\n number: number,\n): Result.Result<Removal, AmbiguousPullRequestNumber> {\n const matches = tracking.filter((attachment) => attachment.ref.number === number)\n\n if (matches.length > 1) {\n const refs = matches.map((attachment) => attachment.ref)\n\n return Result.fail(new AmbiguousPullRequestNumber({ matches: refs, number }))\n }\n\n return Result.succeed(\n Option.match(Arr.head(matches), {\n onNone: () => ({ removed: Option.none(), tracking }),\n onSome: (attachment) => detach(tracking, attachment.ref),\n }),\n )\n}\n",
18
+ "import { Context, Schema, type Effect } from \"effect\"\n\nimport type { Tracking } from \"../domain/Tracking.ts\"\n\n/** A session's stored attachments could not be read. They are kept as they are, not discarded. */\nexport class StoredStateInvalid extends Schema.TaggedError<StoredStateInvalid>()(\n \"StoredStateInvalid\",\n {\n sessionID: Schema.String,\n },\n) {}\n\nexport interface TrackingRepositoryApi {\n /** The session's attachments; empty when nothing is stored. */\n readonly load: (sessionID: string) => Effect.Effect<Tracking, StoredStateInvalid>\n readonly save: (sessionID: string, tracking: Tracking) => Effect.Effect<void>\n readonly remove: (sessionID: string) => Effect.Effect<void>\n}\n\nexport class TrackingRepository extends Context.Service<\n TrackingRepository,\n TrackingRepositoryApi\n>()(\"opencode-pr-tracker/TrackingRepository\") {}\n",
19
+ "import { Context, Effect, Layer, Option, PubSub, Ref, Result, Stream } from \"effect\"\n\nimport type { PullRequestRef } from \"../domain/PullRequest.ts\"\nimport type { Status } from \"../domain/Snapshot.ts\"\nimport type { Membership } from \"../domain/StackLayout.ts\"\nimport type { Attachment, Tracking } from \"../domain/Tracking.ts\"\nimport { GitHub, type GitHubApi, type ItemResult, type Report } from \"../ports/GitHub.ts\"\nimport type { StoredStateInvalid } from \"../ports/TrackingRepository.ts\"\nimport { FetchQueue } from \"./FetchQueue.ts\"\nimport { afterRefresh, isDue, unknown, withoutUnattached, type Known } from \"./Known.ts\"\nimport { currentMillis } from \"./Time.ts\"\nimport { Tracker, type TrackerApi } from \"./Tracker.ts\"\n\nexport interface Entry {\n readonly ref: PullRequestRef\n readonly attachedAt: number\n readonly status: Status\n readonly membership: Option.Option<Membership>\n}\n\nexport interface SessionView {\n readonly sessionID: string\n readonly entries: readonly Entry[]\n}\n\nexport interface MonitorApi {\n /** The session's pull requests with their latest known status. Marks the session as in use. */\n readonly view: (sessionID: string) => Effect.Effect<SessionView, StoredStateInvalid>\n /** Refreshes the session's pull requests now, except merged ones, and returns the result. */\n readonly refresh: (sessionID: string) => Effect.Effect<SessionView, StoredStateInvalid>\n /**\n * Shows a session after `ref` was attached: records what GitHub reported for `ref` so it is not\n * fetched again, then continues as `show`.\n */\n readonly attached: (\n sessionID: string,\n ref: PullRequestRef,\n report: Report,\n ) => Effect.Effect<SessionView, StoredStateInvalid>\n /**\n * Fetches the session's pull requests whose status is not yet known, publishes its view, and\n * returns it. Marks the session as in use. Use after its attachments change.\n */\n readonly show: (sessionID: string) => Effect.Effect<SessionView, StoredStateInvalid>\n /** Stops watching a session. Safe to repeat. */\n readonly forget: (sessionID: string) => Effect.Effect<void>\n /** Refreshes every due pull request of the sessions in use. Run it repeatedly. */\n readonly poll: Effect.Effect<void>\n /** A session's view after each refresh of it, including refreshes that `poll` runs. */\n readonly changes: Stream.Stream<SessionView>\n}\n\nexport class Monitor extends Context.Service<Monitor, MonitorApi>()(\n \"opencode-pr-tracker/Monitor\",\n) {}\n\nfunction entryOf(known: ReadonlyMap<string, Known>, attachment: Attachment): Entry {\n const current = known.get(attachment.ref.url) ?? unknown\n\n return {\n attachedAt: attachment.attachedAt,\n membership: current.membership,\n ref: attachment.ref,\n status: current.status,\n }\n}\n\nconst urlsOf = (tracking: Tracking): string[] => tracking.map((attachment) => attachment.ref.url)\n\ninterface Cache {\n readonly github: GitHubApi\n readonly known: Ref.Ref<ReadonlyMap<string, Known>>\n}\n\ninterface State extends Cache {\n readonly tracker: TrackerApi\n readonly working: Ref.Ref<ReadonlySet<string>>\n readonly published: PubSub.PubSub<SessionView>\n /** Fetches pull requests and records the results; see `FetchQueue`. */\n readonly fetch: (refs: readonly PullRequestRef[]) => Effect.Effect<void>\n}\n\n/** Records GitHub's results for pull requests as of now. */\nfunction remember(cache: Cache, results: ReadonlyMap<string, ItemResult>): Effect.Effect<void> {\n return Effect.gen(function* () {\n const now = yield* currentMillis\n\n yield* Ref.update(cache.known, (current: ReadonlyMap<string, Known>) => {\n const next = new Map(current)\n\n for (const [url, result] of results)\n next.set(url, afterRefresh(current.get(url) ?? unknown, result, now))\n\n return next\n })\n })\n}\n\n/** Fetches `refs` and records what GitHub said; a failed request counts against each of them. */\nfunction update(cache: Cache, refs: readonly PullRequestRef[]): Effect.Effect<void> {\n return Effect.gen(function* () {\n const outcome = yield* Effect.result(cache.github.fetch(refs))\n\n const results: ReadonlyMap<string, ItemResult> = Result.isSuccess(outcome)\n ? outcome.success\n : new Map(\n refs.map(\n (ref) => [ref.url, { _tag: \"Failed\", diagnostic: outcome.failure.diagnostic }] as const,\n ),\n )\n\n yield* remember(cache, results)\n })\n}\n\nfunction viewOf(state: State, sessionID: string): Effect.Effect<SessionView, StoredStateInvalid> {\n return Effect.gen(function* () {\n const tracking = yield* state.tracker.list(sessionID)\n const current = yield* Ref.get(state.known)\n\n return { entries: tracking.map((attachment) => entryOf(current, attachment)), sessionID }\n })\n}\n\nfunction publish(state: State, sessionID: string): Effect.Effect<void> {\n return viewOf(state, sessionID).pipe(\n Effect.flatMap((view: SessionView) => PubSub.publish(state.published, view)),\n Effect.ignore,\n )\n}\n\nconst use = (state: State, sessionID: string): Effect.Effect<void> =>\n Ref.update(state.working, (sessions: ReadonlySet<string>) => new Set(sessions).add(sessionID))\n\nfunction poll(state: State): Effect.Effect<void> {\n return Effect.gen(function* () {\n const sessions = [...(yield* Ref.get(state.working))]\n // Taken before listing attachments: statuses recorded after this belong to newer attachments.\n const known = yield* Ref.get(state.known)\n\n const trackings = yield* Effect.forEach(sessions, (sessionID: string) =>\n state.tracker.list(sessionID).pipe(Effect.orElseSucceed((): Tracking => [])),\n )\n\n const attached = new Map(\n trackings.flat().map((attachment) => [attachment.ref.url, attachment.ref]),\n )\n\n const now = yield* currentMillis\n // Choose from the cache as it is now: an attach may have recorded a report while listing.\n const current = yield* Ref.get(state.known)\n const due = [...attached.values()].filter((ref: PullRequestRef) => isDue(current, now, ref))\n\n yield* Ref.update(state.known, (entries: ReadonlyMap<string, Known>) =>\n withoutUnattached(entries, known, attached),\n )\n\n if (due.length === 0) return\n\n yield* state.fetch(due)\n\n const dueUrls = new Set(due.map((ref) => ref.url))\n\n const affected = sessions.filter((_, index) =>\n urlsOf(trackings[index] ?? []).some((url) => dueUrls.has(url)),\n )\n\n yield* Effect.forEach(affected, (sessionID: string) => publish(state, sessionID), {\n discard: true,\n })\n })\n}\n\n/** Fetches the session's pull requests that `select` picks, then publishes and returns its view. */\nfunction fetchAndShow(\n state: State,\n sessionID: string,\n select: (known: Option.Option<Known>) => boolean,\n): Effect.Effect<SessionView, StoredStateInvalid> {\n return Effect.gen(function* () {\n yield* use(state, sessionID)\n\n const tracking = yield* state.tracker.list(sessionID)\n const known = yield* Ref.get(state.known)\n\n yield* state.fetch(\n tracking\n .map((attachment) => attachment.ref)\n .filter((ref) => select(Option.fromNullishOr(known.get(ref.url)))),\n )\n const view = yield* viewOf(state, sessionID)\n\n yield* PubSub.publish(state.published, view)\n\n return view\n })\n}\n\nconst refreshable = (known: Option.Option<Known>): boolean =>\n Option.isSome(Option.getOrElse(known, () => unknown).dueAt)\n\nconst notYetKnown = (known: Option.Option<Known>): boolean => Option.isNone(known)\n\nexport const layer = Layer.effect(\n Monitor,\n Effect.gen(function* () {\n const cache: Cache = {\n github: yield* GitHub,\n known: yield* Ref.make<ReadonlyMap<string, Known>>(new Map()),\n }\n\n const queue = new FetchQueue((refs) => update(cache, refs), yield* Effect.scope)\n\n const state: State = {\n fetch: (refs) => queue.fetch(refs),\n github: cache.github,\n known: cache.known,\n published: yield* PubSub.unbounded<SessionView>(),\n tracker: yield* Tracker,\n working: yield* Ref.make<ReadonlySet<string>>(new Set()),\n }\n\n return Monitor.of({\n changes: Stream.fromPubSub(state.published),\n forget: (sessionID) =>\n Ref.update(\n state.working,\n (sessions: ReadonlySet<string>) =>\n new Set([...sessions].filter((id) => id !== sessionID)),\n ),\n poll: poll(state),\n attached: (sessionID, ref, report) =>\n Effect.andThen(\n remember(cache, new Map([[ref.url, { _tag: \"Reported\", report }]])),\n fetchAndShow(state, sessionID, notYetKnown),\n ),\n refresh: (sessionID) => fetchAndShow(state, sessionID, refreshable),\n show: (sessionID) => fetchAndShow(state, sessionID, notYetKnown),\n view: (sessionID) => Effect.andThen(use(state, sessionID), viewOf(state, sessionID)),\n })\n }),\n)\n",
20
+ "import { type Cause, Deferred, Effect, Exit, Option, type Scope } from \"effect\"\n\nimport type { PullRequestRef } from \"../domain/PullRequest.ts\"\n\n/** The fetch after the running one, shared by every request made while that one runs. */\ninterface Queued {\n readonly refs: Map<string, PullRequestRef>\n readonly done: Deferred.Deferred<boolean>\n}\n\n/**\n * Runs a fetch one call at a time. Requests made while a fetch runs join a single following fetch\n * of all their pull requests, so a burst of requests costs at most two fetches. Each request\n * completes once a fetch that started after it has finished. Fetches run in the given scope, so an\n * interrupted caller does not cancel a fetch that others are waiting for. A fetch that dies fails\n * the requests waiting for it; the next request starts a new fetch.\n */\nexport class FetchQueue {\n private running = false\n private queued = Option.none<Queued>()\n private readonly fetchNow: (refs: readonly PullRequestRef[]) => Effect.Effect<void>\n private readonly scope: Scope.Scope\n\n public constructor(\n fetchNow: (refs: readonly PullRequestRef[]) => Effect.Effect<void>,\n scope: Scope.Scope,\n ) {\n this.fetchNow = fetchNow\n this.scope = scope\n }\n\n public fetch(refs: readonly PullRequestRef[]): Effect.Effect<void> {\n return Effect.suspend(() => {\n if (refs.length === 0) return Effect.void\n\n if (this.running) return Effect.asVoid(Deferred.await(this.join(refs)))\n\n this.running = true\n\n const done = Deferred.makeUnsafe<boolean>()\n\n return Effect.andThen(Effect.forkIn(this.drain(refs, done), this.scope), Deferred.await(done))\n })\n }\n\n private join(refs: readonly PullRequestRef[]): Deferred.Deferred<boolean> {\n const next = Option.getOrElse(this.queued, (): Queued => ({\n done: Deferred.makeUnsafe(),\n refs: new Map(),\n }))\n\n for (const ref of refs) next.refs.set(ref.url, ref)\n this.queued = Option.some(next)\n\n return next.done\n }\n\n private drain(\n refs: readonly PullRequestRef[],\n done: Deferred.Deferred<boolean>,\n ): Effect.Effect<void> {\n return this.fetchNow(refs).pipe(\n Effect.andThen(Deferred.succeed(done, true)),\n Effect.andThen(Effect.suspend(() => this.next())),\n // A fetch that dies, or is interrupted when the scope closes, fails its waiters and resets the queue.\n Effect.onExit((exit) =>\n Exit.isSuccess(exit) ? Effect.void : Effect.suspend(() => this.reset(done, exit.cause)),\n ),\n )\n }\n\n private next(): Effect.Effect<void> {\n return Option.match(this.queued, {\n onNone: () =>\n Effect.sync(() => {\n this.running = false\n }),\n onSome: (queued) => {\n this.queued = Option.none()\n\n return this.drain([...queued.refs.values()], queued.done)\n },\n })\n }\n\n private reset(done: Deferred.Deferred<boolean>, cause: Cause.Cause<never>): Effect.Effect<void> {\n const waiting = [done, ...Option.toArray(Option.map(this.queued, (queued) => queued.done))]\n\n this.running = false\n this.queued = Option.none()\n\n return Effect.forEach(waiting, (deferred) => Deferred.failCause(deferred, cause), {\n discard: true,\n })\n }\n}\n",
21
+ "/** What the monitor knows about one pull request, and when to ask GitHub again. */\nimport { Duration, Option } from \"effect\"\n\nimport type { PullRequestRef } from \"../domain/PullRequest.ts\"\nimport { nextRefresh } from \"../domain/RefreshPolicy.ts\"\nimport { failed, pending, succeeded, type Status } from \"../domain/Snapshot.ts\"\nimport type { Membership } from \"../domain/StackLayout.ts\"\nimport type { ItemResult } from \"../ports/GitHub.ts\"\n\nexport interface Known {\n readonly status: Status\n readonly membership: Option.Option<Membership>\n /** When to refresh next; none once refreshing can no longer change anything. */\n readonly dueAt: Option.Option<number>\n}\n\nexport const unknown: Known = { dueAt: Option.some(0), membership: Option.none(), status: pending }\n\nexport function afterRefresh(previous: Known, result: ItemResult, now: number): Known {\n const status =\n result._tag === \"Reported\"\n ? succeeded(result.report.snapshot)\n : failed(previous.status, result.diagnostic, now)\n\n const membership = result._tag === \"Reported\" ? result.report.membership : previous.membership\n\n return {\n dueAt: Option.map(nextRefresh(status), (delay) => now + Duration.toMillis(delay)),\n membership,\n status,\n }\n}\n\nexport const isDue = (\n known: ReadonlyMap<string, Known>,\n now: number,\n ref: PullRequestRef,\n): boolean =>\n Option.match((known.get(ref.url) ?? unknown).dueAt, {\n onNone: () => false,\n onSome: (at: number) => at <= now,\n })\n\n/**\n * `entries` without pull requests that no session in use has attached, as of the `before`\n * snapshot. Entries that changed since were recorded for attachments newer than the snapshot.\n */\nexport function withoutUnattached(\n entries: ReadonlyMap<string, Known>,\n before: ReadonlyMap<string, Known>,\n attached: ReadonlyMap<string, PullRequestRef>,\n): ReadonlyMap<string, Known> {\n return new Map(\n [...entries].filter(\n ([url, entry]: readonly [string, Known]) => attached.has(url) || entry !== before.get(url),\n ),\n )\n}\n",
22
+ "import { Duration, Option } from \"effect\"\n\nimport type { Status } from \"./Snapshot.ts\"\n\nexport const refreshInterval = Duration.seconds(15)\n\n/** When to refresh a pull request next. Merged pull requests never change, so they stop. */\nexport function nextRefresh(status: Status): Option.Option<Duration.Duration> {\n const merged =\n (status._tag === \"Fresh\" || status._tag === \"Stale\") && status.snapshot.state._tag === \"Merged\"\n\n return merged ? Option.none() : Option.some(refreshInterval)\n}\n",
23
+ "import { Clock, Effect } from \"effect\"\n\n/**\n * The current time in whole epoch milliseconds. `Clock` promises only a number, and OpenCode's\n * clock reports fractions, but attachment and failure times are stored as integers.\n */\nexport const currentMillis: Effect.Effect<number> = Effect.map(Clock.currentTimeMillis, Math.floor)\n",
24
+ "import { Array as Arr, Context, Effect, Layer, Option, Schema, Semaphore } from \"effect\"\n\nimport type { PullRequestInput, PullRequestRef } from \"../domain/PullRequest.ts\"\nimport { Diagnostic } from \"../domain/Snapshot.ts\"\nimport {\n attach,\n detach,\n detachNumber,\n type AmbiguousPullRequestNumber,\n type AttachmentLimitReached,\n type Removal,\n type Tracking,\n} from \"../domain/Tracking.ts\"\nimport {\n GitHub,\n type GitHubApi,\n type GitHubFailure,\n type ItemResult,\n type Report,\n type RepositoryUnavailable,\n} from \"../ports/GitHub.ts\"\nimport {\n TrackingRepository,\n type StoredStateInvalid,\n type TrackingRepositoryApi,\n} from \"../ports/TrackingRepository.ts\"\nimport { currentMillis } from \"./Time.ts\"\n\n/** GitHub could not report the pull request being attached. */\nexport class PullRequestUnavailable extends Schema.TaggedError<PullRequestUnavailable>()(\n \"PullRequestUnavailable\",\n { diagnostic: Diagnostic, url: Schema.String },\n) {}\n\n/** GitHub reported only part of the pull request's Stack, so attaching all of it is impossible. */\nexport class StackIncomplete extends Schema.TaggedError<StackIncomplete>()(\"StackIncomplete\", {\n url: Schema.String,\n}) {}\n\nexport type AttachFailure =\n | AttachmentLimitReached\n | StackIncomplete\n | GitHubFailure\n | PullRequestUnavailable\n | RepositoryUnavailable\n | StoredStateInvalid\n\nexport interface Attached {\n /** The pull request that was named; its Stack may have brought others with it. */\n readonly ref: PullRequestRef\n /** What GitHub reported for it while attaching. */\n readonly report: Report\n readonly changed: boolean\n /** How many pull requests the named one's Stack has, itself included. */\n readonly stackSize: number\n readonly tracking: Tracking\n}\n\nexport interface TrackerApi {\n readonly list: (sessionID: string) => Effect.Effect<Tracking, StoredStateInvalid>\n /** Attaches a pull request, with its whole Stack. A bare number is resolved in `directory`. */\n readonly attach: (\n sessionID: string,\n input: PullRequestInput,\n directory: string,\n ) => Effect.Effect<Attached, AttachFailure>\n readonly detach: (\n sessionID: string,\n input: PullRequestInput,\n ) => Effect.Effect<Removal, StoredStateInvalid | AmbiguousPullRequestNumber>\n /** Removes everything stored for a session. Safe to repeat. */\n readonly forget: (sessionID: string) => Effect.Effect<void>\n}\n\nexport class Tracker extends Context.Service<Tracker, TrackerApi>()(\n \"opencode-pr-tracker/Tracker\",\n) {}\n\ninterface Discovered {\n readonly report: Report\n /** The pull request's Stack, bottom first; just the pull request when it has none. */\n readonly stack: Arr.NonEmptyReadonlyArray<PullRequestRef>\n}\n\nfunction discovered(\n ref: PullRequestRef,\n result: ItemResult,\n): Effect.Effect<Discovered, PullRequestUnavailable | StackIncomplete> {\n if (result._tag === \"Failed\")\n return Effect.fail(new PullRequestUnavailable({ diagnostic: result.diagnostic, url: ref.url }))\n\n const { report } = result\n\n return Option.match(report.membership, {\n onNone: () => Effect.fail(new StackIncomplete({ url: ref.url })),\n onSome: (membership) =>\n Effect.succeed({\n report,\n stack: membership._tag === \"Stack\" ? membership.members : Arr.of(ref),\n }),\n })\n}\n\n/** Runs one session's operations one at a time, in the order they were requested. */\nfunction sessionLocks(): (\n sessionID: string,\n) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R> {\n const locks = new Map<string, Semaphore.Semaphore>()\n\n return (sessionID) => (effect) =>\n Effect.suspend(() => {\n const lock = locks.get(sessionID) ?? Semaphore.makeUnsafe(1)\n\n locks.set(sessionID, lock)\n\n return lock.withPermit(effect)\n })\n}\n\ninterface Services {\n readonly github: GitHubApi\n readonly repository: TrackingRepositoryApi\n}\n\nfunction resolve(\n { github }: Services,\n input: PullRequestInput,\n directory: string,\n): Effect.Effect<PullRequestRef, GitHubFailure | RepositoryUnavailable> {\n return input._tag === \"Reference\"\n ? Effect.succeed(input.ref)\n : github.pullRequestInRepository(directory, input.number)\n}\n\nconst attachTo = Effect.fn(\"Tracker.attach\")(function* (\n services: Services,\n sessionID: string,\n target: Readonly<{ input: PullRequestInput; directory: string }>,\n) {\n const ref = yield* resolve(services, target.input, target.directory)\n const reports = yield* services.github.fetch([ref])\n const missing: ItemResult = { _tag: \"Failed\", diagnostic: \"NotFound\" }\n const { report, stack } = yield* discovered(ref, reports.get(ref.url) ?? missing)\n const current = yield* services.repository.load(sessionID)\n const change = yield* Effect.fromResult(attach(current, stack, yield* currentMillis))\n\n if (change.changed) yield* services.repository.save(sessionID, change.tracking)\n\n return {\n changed: change.changed,\n ref,\n report,\n stackSize: stack.length,\n tracking: change.tracking,\n }\n})\n\nconst detachFrom = Effect.fn(\"Tracker.detach\")(function* (\n { repository }: Services,\n sessionID: string,\n input: PullRequestInput,\n) {\n const current = yield* repository.load(sessionID)\n\n const removal: Removal =\n input._tag === \"Reference\"\n ? detach(current, input.ref)\n : yield* Effect.fromResult(detachNumber(current, input.number))\n\n if (Option.isSome(removal.removed)) yield* repository.save(sessionID, removal.tracking)\n\n return removal\n})\n\nexport const layer = Layer.effect(\n Tracker,\n Effect.gen(function* () {\n const services: Services = { github: yield* GitHub, repository: yield* TrackingRepository }\n const locked = sessionLocks()\n\n return Tracker.of({\n attach: (sessionID, input, directory) =>\n locked(sessionID)(attachTo(services, sessionID, { directory, input })),\n detach: (sessionID, input) => locked(sessionID)(detachFrom(services, sessionID, input)),\n forget: (sessionID) => locked(sessionID)(services.repository.remove(sessionID)),\n list: (sessionID) => services.repository.load(sessionID),\n })\n }),\n)\n",
25
+ "/**\n * The RPC contract between the server plugin and its clients, including the terminal plugin.\n * Schemas are Standard Schema so both Effect and Promise clients can use them.\n */\nimport { Rpc } from \"@opencode/plugin/rpc\"\nimport { Schema, type StandardSchema } from \"effect\"\n\nimport { PullRequestRef } from \"./domain/PullRequest.ts\"\nimport { Status } from \"./domain/Snapshot.ts\"\nimport { Membership } from \"./domain/StackLayout.ts\"\n\nexport const Layout = Schema.Literals([\"default\", \"compact\"])\n\nexport type Layout = typeof Layout.Type\n\nexport const EntryView = Schema.Struct({\n attachedAt: Schema.Int,\n membership: Schema.NullOr(Membership),\n ref: PullRequestRef,\n status: Status,\n})\n\nexport type EntryView = typeof EntryView.Type\n\n/** A session's attached pull requests, in display order, with the configured sidebar layout. */\nexport const View = Schema.Struct({\n entries: Schema.Array(EntryView),\n layout: Layout,\n sessionID: Schema.String,\n})\n\nexport type View = typeof View.Type\n\n/** A view as clients receive it: plain JSON data. */\nexport type ViewData = typeof View.Encoded\n\nconst Session = Schema.Struct({ sessionID: Schema.String })\n\n/** A pull request URL, with or without `https://`, or a number in the session's repository. */\nconst Target = Schema.Struct({ sessionID: Schema.String, target: Schema.String })\n\n/** The outcome of a change, with a message for the person who asked, and the session's new view. */\nexport const Changed = Schema.Struct({ message: Schema.String, view: View })\n\nexport type Changed = typeof Changed.Type\n\n/** A request that could not be carried out, with a message for the person who made it. */\nconst Rejected = Schema.Struct({ message: Schema.String })\n\n/**\n * The wire form of `schema`: plain JSON data, validated by the plugin's own copy of Effect.\n * OpenCode would handle an Effect schema with its own copy, which can reject values this one\n * accepts, and it sends only JSON, so decoded values such as class instances cannot cross.\n */\nfunction portable<S extends Schema.Top>(\n schema: S,\n): StandardSchema.StandardSchemaV1<S[\"Encoded\"], S[\"Encoded\"]> {\n return { \"~standard\": Schema.toStandardSchemaV1(Schema.toEncoded(schema))[\"~standard\"] }\n}\n\nexport const PullRequestTracker = Rpc.define({\n events: {\n updated: { schema: portable(View) },\n },\n id: \"opencode-pr-tracker\",\n methods: {\n attach: {\n errors: { rejected: portable(Rejected) },\n input: portable(Target),\n output: portable(Changed),\n },\n detach: {\n errors: { rejected: portable(Rejected) },\n input: portable(Target),\n output: portable(Changed),\n },\n list: {\n errors: { rejected: portable(Rejected) },\n input: portable(Session),\n output: portable(View),\n },\n refresh: {\n errors: { rejected: portable(Rejected) },\n input: portable(Session),\n output: portable(View),\n },\n },\n})\n\nexport type PullRequestTracker = typeof PullRequestTracker\n",
26
+ "import { Array as Arr, Option, Schema } from \"effect\"\n\nimport { PullRequestRef } from \"./PullRequest.ts\"\n\n/** GitHub Stack membership. Members are listed bottom to top. */\nexport const Membership = Schema.Union([\n Schema.TaggedStruct(\"Standalone\", {}),\n Schema.TaggedStruct(\"Stack\", {\n id: Schema.String,\n members: Schema.NonEmptyArray(PullRequestRef),\n }),\n])\n\nexport type Membership = typeof Membership.Type\n\ntype StackMembership = Extract<Membership, { readonly _tag: \"Stack\" }>\n\nexport interface Entry {\n readonly ref: PullRequestRef\n readonly membership: Option.Option<Membership>\n}\n\n/** `first`, `middle` and `last` draw a Stack's boundary; `bullet` is an ordinary pull request. */\nexport type Marker = \"bullet\" | \"first\" | \"middle\" | \"last\"\n\n/** How the line under a row continues: to the next attached member, to unattached members, or not. */\nexport type Connector = \"continues\" | \"open\" | \"none\"\n\nexport type Row<E extends Entry> =\n | {\n readonly _tag: \"PullRequest\"\n readonly entry: E\n readonly marker: Marker\n readonly connector: Connector\n }\n | { readonly _tag: \"Gap\"; readonly count: number }\n\ninterface Placed {\n readonly index: number\n readonly position: number\n readonly size: number\n}\n\n/** Where one entry sits within its Stack's attached members. */\ninterface Place {\n readonly current: Placed\n readonly previous: Option.Option<Placed>\n readonly first: boolean\n readonly last: boolean\n readonly attached: number\n}\n\ninterface Reported {\n readonly index: number\n readonly url: string\n readonly stack: StackMembership\n}\n\nconst stackOf = (entry: Entry): Option.Option<StackMembership> =>\n Option.filter(entry.membership, (membership) => membership._tag === \"Stack\")\n\nconst urlsOf = (stack: StackMembership): string[] => stack.members.map((member) => member.url)\n\nfunction reportsById(entries: readonly Entry[]): Map<string, Reported[]> {\n const byId = new Map<string, Reported[]>()\n\n for (const [index, entry] of entries.entries()) {\n for (const stack of Option.toArray(stackOf(entry))) {\n byId.set(stack.id, [...(byId.get(stack.id) ?? []), { index, stack, url: entry.ref.url }])\n }\n }\n\n return byId\n}\n\n/** Every Stack ID that lists each pull request, across all reported memberships. */\nfunction claims(byId: ReadonlyMap<string, readonly Reported[]>): Map<string, Set<string>> {\n const claimed = new Map<string, Set<string>>()\n\n for (const [id, reports] of byId) {\n for (const url of reports.flatMap((report) => urlsOf(report.stack))) {\n claimed.set(url, new Set([...(claimed.get(url) ?? []), id]))\n }\n }\n\n return claimed\n}\n\nfunction agrees(\n reports: readonly Reported[],\n entries: readonly Entry[],\n claimed: ReadonlyMap<string, ReadonlySet<string>>,\n): boolean {\n const members = Option.match(Arr.head(reports), {\n onNone: (): string[] => [],\n onSome: (report) => urlsOf(report.stack),\n })\n\n const listed = new Set(members)\n const attachedMembers = entries.filter((entry) => listed.has(entry.ref.url))\n\n return (\n listed.size === members.length &&\n reports.every((report) => urlsOf(report.stack).join(\"\\n\") === members.join(\"\\n\")) &&\n members.every((url) => (claimed.get(url) ?? new Set()).size === 1) &&\n attachedMembers.length === reports.length\n )\n}\n\nfunction placements(reports: readonly Reported[]): Option.Option<Placed[]> {\n const placed = reports.map((report) => ({\n index: report.index,\n position: urlsOf(report.stack).indexOf(report.url),\n size: report.stack.members.length,\n }))\n\n const adjacent = Arr.zipWith(\n placed,\n placed.slice(1),\n (before: Placed, after: Placed) =>\n after.index === before.index + 1 && after.position > before.position,\n )\n\n const ordered = placed.every((member: Placed) => member.position >= 0) && adjacent.every(Boolean)\n\n return ordered ? Option.some(placed) : Option.none()\n}\n\n/** Each entry that belongs to a consistent Stack, with its place among the attached members. */\nfunction consistentStacks(entries: readonly Entry[]): Map<number, Place> {\n const byId = reportsById(entries)\n const claimed = claims(byId)\n const places = new Map<number, Place>()\n\n for (const reports of byId.values()) {\n const placed = agrees(reports, entries, claimed) ? placements(reports) : Option.none()\n\n for (const group of Option.toArray(placed)) {\n for (const [step, current] of group.entries()) {\n places.set(current.index, {\n attached: group.length,\n current,\n first: step === 0,\n last: step === group.length - 1,\n previous: Arr.get(group, step - 1),\n })\n }\n }\n }\n\n return places\n}\n\nfunction marker(place: Place): Marker {\n const { current } = place\n\n if (place.attached === 1 && current.size > 1) return \"middle\"\n\n if (place.first && current.position === 0) return \"first\"\n\n if (place.last && current.position === current.size - 1) return \"last\"\n\n return \"middle\"\n}\n\nfunction connector(place: Place): Connector {\n if (!place.last) return \"continues\"\n\n return place.current.position < place.current.size - 1 ? \"open\" : \"none\"\n}\n\nfunction stackRows<E extends Entry>(entry: E, place: Place): Row<E>[] {\n const skipped = Option.match(place.previous, {\n onNone: () => 0,\n onSome: (before) => place.current.position - before.position - 1,\n })\n\n const row: Row<E> = {\n _tag: \"PullRequest\",\n connector: connector(place),\n entry,\n marker: marker(place),\n }\n\n return skipped > 0 ? [{ _tag: \"Gap\", count: skipped }, row] : [row]\n}\n\n/** Sidebar rows in attachment order, with Stack markers and gaps where membership is consistent. */\nexport function layout<E extends Entry>(entries: readonly E[]): Row<E>[] {\n const places = consistentStacks(entries)\n\n return entries.flatMap((entry, index) =>\n Option.match(Option.fromNullishOr(places.get(index)), {\n onNone: (): Row<E>[] => [{ _tag: \"PullRequest\", connector: \"none\", entry, marker: \"bullet\" }],\n onSome: (place) => stackRows(entry, place),\n }),\n )\n}\n",
27
+ "/** Requests to change a session's attachments, shared by the RPC methods and the agent tools. */\nimport { Effect, Option } from \"effect\"\n\nimport type { MonitorApi, SessionView } from \"../application/Monitor.ts\"\nimport type { TrackerApi } from \"../application/Tracker.ts\"\nimport { parsePullRequestInput, type PullRequestInput } from \"../domain/PullRequest.ts\"\nimport { attachedMessage, detachedMessage, type RequestFailure } from \"../messages.ts\"\nimport type { Changed, Layout, View } from \"../rpc.ts\"\n\nexport interface Services {\n readonly tracker: TrackerApi\n readonly monitor: MonitorApi\n}\n\nexport interface Settings {\n readonly layout: Layout\n /** Where this plugin instance runs; bare pull request numbers resolve in its repository. */\n readonly directory: string\n}\n\nexport function toView(view: SessionView, layout: Layout): View {\n return {\n entries: view.entries.map((entry) => ({\n attachedAt: entry.attachedAt,\n membership: Option.getOrNull(entry.membership),\n ref: entry.ref,\n status: entry.status,\n })),\n layout,\n sessionID: view.sessionID,\n }\n}\n\nconst parseTarget = (target: string): Effect.Effect<PullRequestInput, RequestFailure> =>\n Effect.fromResult(parsePullRequestInput(target))\n\n/** Changes a session's attachments for `target` and reports the change. */\nexport type Change = (sessionID: string, target: string) => Effect.Effect<Changed, RequestFailure>\n\nexport interface Requests {\n /**\n * Attaches `target`, with its Stack, then publishes the session's view. Only Stack members not yet\n * known are fetched; `target` itself was fetched while attaching.\n */\n readonly attach: Change\n /** Detaches `target`, then publishes the session's view, fetching only statuses not yet known. */\n readonly detach: Change\n}\n\nexport function requests({ monitor, tracker }: Services, settings: Settings): Requests {\n return {\n attach: (sessionID, target) =>\n Effect.gen(function* () {\n const attached = yield* tracker.attach(\n sessionID,\n yield* parseTarget(target),\n settings.directory,\n )\n\n const view = yield* monitor.attached(sessionID, attached.ref, attached.report)\n\n return { message: attachedMessage(attached), view: toView(view, settings.layout) }\n }),\n detach: (sessionID, target) =>\n Effect.gen(function* () {\n const removal = yield* tracker.detach(sessionID, yield* parseTarget(target))\n const view = yield* monitor.show(sessionID)\n\n return { message: detachedMessage(removal, target), view: toView(view, settings.layout) }\n }),\n }\n}\n",
28
+ "/** Messages for people: results and failures of tracker requests, shared by tools and the terminal. */\nimport { Match, Option } from \"effect\"\n\nimport type { AttachFailure, Attached } from \"./application/Tracker.ts\"\nimport type { InvalidPullRequestInput, PullRequestRef } from \"./domain/PullRequest.ts\"\nimport type { Diagnostic } from \"./domain/Snapshot.ts\"\nimport type { AmbiguousPullRequestNumber, Removal } from \"./domain/Tracking.ts\"\nimport type { StoredStateInvalid } from \"./ports/TrackingRepository.ts\"\n\nexport type RequestFailure =\n | AttachFailure\n | AmbiguousPullRequestNumber\n | InvalidPullRequestInput\n | StoredStateInvalid\n\nconst diagnosticMessages: Record<Diagnostic, string> = {\n AuthenticationRequired: \"GitHub needs you to sign in: run `gh auth login`, or set GH_TOKEN.\",\n GitHubCliMissing: \"Install the GitHub CLI (`gh`), or set GH_TOKEN.\",\n GitHubUnavailable: \"GitHub is not responding right now. Try again shortly.\",\n InvalidResponse: \"GitHub returned a response the tracker could not read.\",\n NotFound: \"The pull request does not exist, or your GitHub account cannot see it.\",\n}\n\nconst list = (refs: readonly PullRequestRef[]): string => {\n const labels = refs.map((ref) => ref.label)\n\n return labels.length <= 2\n ? labels.join(\" and \")\n : `${labels.slice(0, -1).join(\", \")}, and ${labels.at(-1) ?? \"\"}`\n}\n\nexport function failureMessage(failure: RequestFailure): string {\n return Match.valueTags(failure, {\n AmbiguousPullRequestNumber: ({ matches, number }) =>\n `#${String(number)} matches ${list(matches)}. Use the pull request URL instead.`,\n AttachmentLimitReached: ({ limit, requested }) =>\n `A session can track at most ${String(limit)} pull requests; this would make ${String(requested)}.`,\n GitHubFailure: ({ diagnostic }) => diagnosticMessages[diagnostic],\n InvalidPullRequestInput: () =>\n \"Expected a pull request URL, such as github.com/owner/repository/pull/123, or a pull request number.\",\n PullRequestUnavailable: ({ diagnostic, url }) => `${url}: ${diagnosticMessages[diagnostic]}`,\n RepositoryUnavailable: () =>\n \"This session's directory is not a GitHub repository that `gh` can see. Use the pull request URL instead.\",\n StackIncomplete: ({ url }) =>\n `GitHub returned only part of the Stack of ${url}, so nothing was attached. Try again later.`,\n StoredStateInvalid: () =>\n \"The tracker's saved state for this session cannot be read. It has been left unchanged.\",\n })\n}\n\nexport function attachedMessage(attached: Attached): string {\n const label = attached.ref.label\n\n if (!attached.changed) return `${label} is already attached.`\n\n return attached.stackSize > 1\n ? `Attached ${label} with the rest of its Stack (${String(attached.stackSize)} pull requests).`\n : `Attached ${label}.`\n}\n\nexport function detachedMessage(removal: Removal, target: string): string {\n return Option.match(removal.removed, {\n onNone: () => `${target} is not attached.`,\n onSome: (ref: PullRequestRef) => `Detached ${ref.label}.`,\n })\n}\n",
29
+ "import type { RpcHandlers } from \"@opencode/plugin/effect/rpc\"\nimport { Effect } from \"effect\"\n\nimport type { SessionView } from \"../application/Monitor.ts\"\nimport { failureMessage } from \"../messages.ts\"\nimport type { PullRequestTracker, View } from \"../rpc.ts\"\nimport { requests, toView, type Services, type Settings } from \"./Requests.ts\"\n\n/** The RPC methods, over the tracker and monitor of this plugin instance. */\nexport function handlers(services: Services, settings: Settings): RpcHandlers<PullRequestTracker> {\n const viewOf = (view: SessionView): View => toView(view, settings.layout)\n const { attach, detach } = requests(services, settings)\n\n return {\n attach: ({ sessionID, target }, context) =>\n attach(sessionID, target).pipe(\n Effect.mapError(failureMessage),\n Effect.mapError((message) => context.error(\"rejected\", message, { message })),\n ),\n detach: ({ sessionID, target }, context) =>\n detach(sessionID, target).pipe(\n Effect.mapError(failureMessage),\n Effect.mapError((message) => context.error(\"rejected\", message, { message })),\n ),\n list: ({ sessionID }, context) =>\n services.monitor.view(sessionID).pipe(\n Effect.map(viewOf),\n Effect.mapError(failureMessage),\n Effect.mapError((message) => context.error(\"rejected\", message, { message })),\n ),\n refresh: ({ sessionID }, context) =>\n services.monitor.refresh(sessionID).pipe(\n Effect.map(viewOf),\n Effect.mapError(failureMessage),\n Effect.mapError((message) => context.error(\"rejected\", message, { message })),\n ),\n }\n}\n",
30
+ "import type { ToolDomain } from \"@opencode/plugin/effect/tool\"\nimport { Tool } from \"@opencode/schema/tool\"\nimport { Effect, Schema, type Scope } from \"effect\"\n\nimport { appearance } from \"../domain/Appearance.ts\"\nimport { failureMessage, type RequestFailure } from \"../messages.ts\"\nimport { requests, type Change, type Services, type Settings } from \"./Requests.ts\"\n\nconst options = { codemode: true, namespace: \"pr\", pinned: true } as const\n\n/** A pull request URL or number. Agents may pass the number as text or as a JSON integer. */\nexport const PullRequestArgument = Schema.Struct({\n pull_request: Schema.Union([Schema.String, Schema.Int]).annotate({\n description:\n \"A pull request URL, such as github.com/owner/repository/pull/123, or a number in this repository\",\n }),\n})\n\nexport type PullRequestArgument = typeof PullRequestArgument.Type\n\ntype PullRequestArgumentSchema = typeof PullRequestArgument\n\n/** The argument as the text the tracker parses. */\nexport const targetOf = ({ pull_request }: PullRequestArgument): string => String(pull_request)\n\nconst NoArguments = Schema.Struct({})\n\ntype NoArguments = typeof NoArguments\n\nconst asToolError = (failure: RequestFailure): Tool.Error =>\n new Tool.Error({ message: failureMessage(failure) })\n\nconst listTool = ({ monitor }: Services): Tool.Info<NoArguments> => ({\n description: \"List the pull requests attached to this session, with their status.\",\n execute: (_input, context) =>\n monitor.view(context.sessionID).pipe(\n Effect.map((view) => ({\n content:\n view.entries.length === 0\n ? \"No pull requests are attached to this session.\"\n : view.entries\n .map((entry) => `- ${entry.ref.url} (${appearance(entry.status).label})`)\n .join(\"\\n\"),\n })),\n Effect.mapError(asToolError),\n ),\n input: NoArguments,\n name: \"list\",\n options,\n})\n\nconst changeTool = (\n name: string,\n description: string,\n change: Change,\n): Tool.Info<PullRequestArgumentSchema> => ({\n description,\n execute: (argument, context) =>\n change(context.sessionID, targetOf(argument)).pipe(\n Effect.map((changed) => ({ content: changed.message })),\n Effect.mapError(asToolError),\n ),\n input: PullRequestArgument,\n name,\n options,\n})\n\n/** Registers the `pr` tools, which act on the calling session. */\nexport function registerTools(\n tools: ToolDomain,\n services: Services,\n settings: Settings,\n): Effect.Effect<unknown, never, Scope.Scope> {\n return tools.transform((editor) => {\n editor.namespace({\n description: \"Pull requests attached to this session and shown in its sidebar\",\n name: \"pr\",\n })\n const changes = requests(services, settings)\n\n editor.add(listTool(services))\n editor.add(\n changeTool(\n \"attach\",\n \"Attach a pull request to this session. Attaching a GitHub Stack member attaches the whole Stack.\",\n changes.attach,\n ),\n )\n editor.add(\n changeTool(\n \"detach\",\n \"Detach a pull request from this session. Other members of its Stack stay attached.\",\n changes.detach,\n ),\n )\n })\n}\n",
31
+ "import { Match } from \"effect\"\n\nimport type { Diagnostic, PullRequestState, Status } from \"./Snapshot.ts\"\n\nexport type Tone = \"green\" | \"yellow\" | \"red\" | \"purple\" | \"gray\"\n\nexport interface Appearance {\n readonly tone: Tone\n readonly label: string\n readonly strikethrough: boolean\n readonly stale: boolean\n}\n\ntype Open = Extract<PullRequestState, { readonly _tag: \"Open\" }>\n\nconst diagnosticLabels: Record<Diagnostic, string> = {\n AuthenticationRequired: \"authenticate\",\n GitHubCliMissing: \"install gh\",\n GitHubUnavailable: \"GitHub unavailable\",\n InvalidResponse: \"invalid response\",\n NotFound: \"inaccessible\",\n}\n\nconst shown = (tone: Tone, label: string, strikethrough = false): Appearance => ({\n label,\n stale: false,\n strikethrough,\n tone,\n})\n\n/** Precedence: conflict, failed CI, draft, pending CI, behind, then passed or no checks. */\nfunction openAppearance(open: Open): Appearance {\n if (open.mergeability === \"conflicting\") return shown(\"red\", \"conflict\")\n\n if (open.ci === \"failed\") return shown(\"red\", \"failed\")\n\n if (open.draft) return shown(\"gray\", \"draft\")\n\n if (open.ci === \"pending\") return shown(\"yellow\", \"pending\")\n\n if (open.behind) return shown(\"yellow\", \"behind\")\n\n return open.ci === \"passed\" ? shown(\"green\", \"passed\") : shown(\"gray\", \"no checks\")\n}\n\nfunction stateAppearance(state: PullRequestState): Appearance {\n return Match.valueTags(state, {\n Closed: () => shown(\"red\", \"closed\", true),\n Merged: () => shown(\"purple\", \"merged\", true),\n Open: openAppearance,\n })\n}\n\nfunction markStale(fresh: Appearance): Appearance {\n return { label: fresh.label, stale: true, strikethrough: fresh.strikethrough, tone: fresh.tone }\n}\n\nexport function appearance(status: Status): Appearance {\n return Match.valueTags(status, {\n Fresh: ({ snapshot }) => stateAppearance(snapshot.state),\n Pending: () => shown(\"gray\", \"unavailable\"),\n Stale: ({ snapshot }) => markStale(stateAppearance(snapshot.state)),\n Unavailable: ({ diagnostic }) => shown(\"gray\", diagnosticLabels[diagnostic]),\n })\n}\n"
20
32
  ],
21
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA,IAAI;AAAA,EAEJ,IAAI,UAAU,QAAQ;AAAA,EACtB,IAAI,MAAM;AAAA,EAEV,IAAI,WAAW,QAAQ,IAAI,wBAAwB,QAAQ;AAAA,EAE3D,QAAQ,MAAM,QAAQ,GAAG;AAAA,IACvB,IAAI,CAAC;AAAA,MACH,MAAM,QAAQ,KAAK,OAAO;AAAA,IAC5B,OAAO;AAAA;AAAA,EAET,IAAI;AAAA,IACF,QAAQ,IAAI;AAAA,IACZ,OAAO,IAAI;AAAA,EAGb,IAAI,OAAO,QAAQ,UAAU,YAAY;AAAA,IACnC,QAAQ,QAAQ;AAAA,IACpB,QAAQ,QAAQ,QAAS,CAAC,GAAG;AAAA,MAC3B,MAAM;AAAA,MACN,MAAM,KAAK,SAAS,CAAC;AAAA;AAAA,IAEvB,IAAI,OAAO;AAAA,MAAgB,OAAO,eAAe,QAAQ,OAAO,KAAK;AAAA,EACvE;AAAA,EANM;AAAA,EAQN,OAAO,UAAU;AAAA,EAEjB,SAAS,KAAM,CAAC,IAAI;AAAA,IAKlB,IAAI,UAAU,eAAe,WAAW,KACpC,QAAQ,QAAQ,MAAM,wBAAwB,GAAG;AAAA,MACnD,YAAY,EAAE;AAAA,IAChB;AAAA,IAGA,IAAI,CAAC,GAAG,SAAS;AAAA,MACf,aAAa,EAAE;AAAA,IACjB;AAAA,IAOA,GAAG,QAAQ,SAAS,GAAG,KAAK;AAAA,IAC5B,GAAG,SAAS,SAAS,GAAG,MAAM;AAAA,IAC9B,GAAG,SAAS,SAAS,GAAG,MAAM;AAAA,IAE9B,GAAG,QAAQ,SAAS,GAAG,KAAK;AAAA,IAC5B,GAAG,SAAS,SAAS,GAAG,MAAM;AAAA,IAC9B,GAAG,SAAS,SAAS,GAAG,MAAM;AAAA,IAE9B,GAAG,YAAY,aAAa,GAAG,SAAS;AAAA,IACxC,GAAG,aAAa,aAAa,GAAG,UAAU;AAAA,IAC1C,GAAG,aAAa,aAAa,GAAG,UAAU;AAAA,IAE1C,GAAG,YAAY,aAAa,GAAG,SAAS;AAAA,IACxC,GAAG,aAAa,aAAa,GAAG,UAAU;AAAA,IAC1C,GAAG,aAAa,aAAa,GAAG,UAAU;AAAA,IAE1C,GAAG,OAAO,QAAQ,GAAG,IAAI;AAAA,IACzB,GAAG,QAAQ,QAAQ,GAAG,KAAK;AAAA,IAC3B,GAAG,QAAQ,QAAQ,GAAG,KAAK;AAAA,IAE3B,GAAG,WAAW,YAAY,GAAG,QAAQ;AAAA,IACrC,GAAG,YAAY,YAAY,GAAG,SAAS;AAAA,IACvC,GAAG,YAAY,YAAY,GAAG,SAAS;AAAA,IAGvC,IAAI,GAAG,SAAS,CAAC,GAAG,QAAQ;AAAA,MAC1B,GAAG,SAAS,QAAS,CAAC,MAAM,MAAM,IAAI;AAAA,QACpC,IAAI;AAAA,UAAI,QAAQ,SAAS,EAAE;AAAA;AAAA,MAE7B,GAAG,aAAa,QAAS,GAAG;AAAA,IAC9B;AAAA,IACA,IAAI,GAAG,SAAS,CAAC,GAAG,QAAQ;AAAA,MAC1B,GAAG,SAAS,QAAS,CAAC,MAAM,KAAK,KAAK,IAAI;AAAA,QACxC,IAAI;AAAA,UAAI,QAAQ,SAAS,EAAE;AAAA;AAAA,MAE7B,GAAG,aAAa,QAAS,GAAG;AAAA,IAC9B;AAAA,IAWA,IAAI,aAAa,SAAS;AAAA,MACxB,GAAG,SAAS,OAAO,GAAG,WAAW,aAAa,GAAG,SAC9C,QAAS,CAAC,WAAW;AAAA,QACtB,SAAS,MAAO,CAAC,MAAM,IAAI,IAAI;AAAA,UAC7B,IAAI,QAAQ,KAAK,IAAI;AAAA,UACrB,IAAI,UAAU;AAAA,UACd,UAAU,MAAM,IAAI,SAAS,EAAG,CAAC,IAAI;AAAA,YACnC,IAAI,OACI,GAAG,SAAS,YAAY,GAAG,SAAS,WAAW,GAAG,SAAS,YAC5D,KAAK,IAAI,IAAI,QAAQ,OAAO;AAAA,cACjC,WAAW,QAAQ,GAAG;AAAA,gBACpB,GAAG,KAAK,IAAI,QAAS,CAAC,QAAQ,IAAI;AAAA,kBAChC,IAAI,UAAU,OAAO,SAAS;AAAA,oBAC5B,UAAU,MAAM,IAAI,EAAE;AAAA,kBAEtB;AAAA,uBAAG,EAAE;AAAA,iBACR;AAAA,iBACA,OAAO;AAAA,cACV,IAAI,UAAU;AAAA,gBACZ,WAAW;AAAA,cACb;AAAA,YACF;AAAA,YACA,IAAI;AAAA,cAAI,GAAG,EAAE;AAAA,WACd;AAAA;AAAA,QAEH,IAAI,OAAO;AAAA,UAAgB,OAAO,eAAe,QAAQ,SAAS;AAAA,QAClE,OAAO;AAAA,QACN,GAAG,MAAM;AAAA,IACd;AAAA,IAGA,GAAG,OAAO,OAAO,GAAG,SAAS,aAAa,GAAG,OAC1C,QAAS,CAAC,SAAS;AAAA,MACpB,SAAS,IAAK,CAAC,IAAI,QAAQ,QAAQ,QAAQ,UAAU,WAAW;AAAA,QAC9D,IAAI;AAAA,QACJ,IAAI,aAAa,OAAO,cAAc,YAAY;AAAA,UAChD,IAAI,aAAa;AAAA,UACjB,WAAW,QAAS,CAAC,IAAI,GAAG,IAAI;AAAA,YAC9B,IAAI,MAAM,GAAG,SAAS,YAAY,aAAa,IAAI;AAAA,cACjD;AAAA,cACA,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AAAA,YACxE;AAAA,YACA,UAAU,MAAM,MAAM,SAAS;AAAA;AAAA,QAEnC;AAAA,QACA,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AAAA;AAAA,MAIxE,IAAI,OAAO;AAAA,QAAgB,OAAO,eAAe,MAAM,OAAO;AAAA,MAC9D,OAAO;AAAA,MACN,GAAG,IAAI;AAAA,IAEV,GAAG,WAAW,OAAO,GAAG,aAAa,aAAa,GAAG,WAClD,QAAS,CAAC,aAAa;AAAA,MAAE,OAAO,QAAS,CAAC,IAAI,QAAQ,QAAQ,QAAQ,UAAU;AAAA,QACjF,IAAI,aAAa;AAAA,QACjB,OAAO,MAAM;AAAA,UACX,IAAI;AAAA,YACF,OAAO,YAAY,KAAK,IAAI,IAAI,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,YAChE,OAAO,IAAI;AAAA,YACX,IAAI,GAAG,SAAS,YAAY,aAAa,IAAI;AAAA,cAC3C;AAAA,cACA;AAAA,YACF;AAAA,YACA,MAAM;AAAA;AAAA,QAEV;AAAA;AAAA,MACE,GAAG,QAAQ;AAAA,IAEf,SAAS,WAAY,CAAC,KAAI;AAAA,MACxB,IAAG,SAAS,QAAS,CAAC,MAAM,MAAM,UAAU;AAAA,QAC1C,IAAG,KAAM,MACA,UAAU,WAAW,UAAU,WAC/B,MACA,QAAS,CAAC,KAAK,IAAI;AAAA,UAC1B,IAAI,KAAK;AAAA,YACP,IAAI;AAAA,cAAU,SAAS,GAAG;AAAA,YAC1B;AAAA,UACF;AAAA,UAGA,IAAG,OAAO,IAAI,MAAM,QAAS,CAAC,MAAK;AAAA,YACjC,IAAG,MAAM,IAAI,QAAQ,CAAC,OAAM;AAAA,cAC1B,IAAI;AAAA,gBAAU,SAAS,QAAO,KAAI;AAAA,aACnC;AAAA,WACF;AAAA,SACF;AAAA;AAAA,MAGH,IAAG,aAAa,QAAS,CAAC,MAAM,MAAM;AAAA,QACpC,IAAI,KAAK,IAAG,SAAS,MAAM,UAAU,WAAW,UAAU,WAAW,IAAI;AAAA,QAIzE,IAAI,QAAQ;AAAA,QACZ,IAAI;AAAA,QACJ,IAAI;AAAA,UACF,MAAM,IAAG,WAAW,IAAI,IAAI;AAAA,UAC5B,QAAQ;AAAA,kBACR;AAAA,UACA,IAAI,OAAO;AAAA,YACT,IAAI;AAAA,cACF,IAAG,UAAU,EAAE;AAAA,cACf,OAAO,IAAI;AAAA,UACf,EAAO;AAAA,YACL,IAAG,UAAU,EAAE;AAAA;AAAA;AAAA,QAGnB,OAAO;AAAA;AAAA;AAAA,IAIX,SAAS,YAAa,CAAC,KAAI;AAAA,MACzB,IAAI,UAAU,eAAe,WAAW,KAAK,IAAG,SAAS;AAAA,QACvD,IAAG,UAAU,QAAS,CAAC,MAAM,IAAI,IAAI,IAAI;AAAA,UACvC,IAAG,KAAK,MAAM,UAAU,WAAW,QAAS,CAAC,IAAI,IAAI;AAAA,YACnD,IAAI,IAAI;AAAA,cACN,IAAI;AAAA,gBAAI,GAAG,EAAE;AAAA,cACb;AAAA,YACF;AAAA,YACA,IAAG,QAAQ,IAAI,IAAI,IAAI,QAAS,CAAC,KAAI;AAAA,cACnC,IAAG,MAAM,IAAI,QAAS,CAAC,MAAK;AAAA,gBAC1B,IAAI;AAAA,kBAAI,GAAG,OAAM,IAAG;AAAA,eACrB;AAAA,aACF;AAAA,WACF;AAAA;AAAA,QAGH,IAAG,cAAc,QAAS,CAAC,MAAM,IAAI,IAAI;AAAA,UACvC,IAAI,KAAK,IAAG,SAAS,MAAM,UAAU,SAAS;AAAA,UAC9C,IAAI;AAAA,UACJ,IAAI,QAAQ;AAAA,UACZ,IAAI;AAAA,YACF,MAAM,IAAG,YAAY,IAAI,IAAI,EAAE;AAAA,YAC/B,QAAQ;AAAA,oBACR;AAAA,YACA,IAAI,OAAO;AAAA,cACT,IAAI;AAAA,gBACF,IAAG,UAAU,EAAE;AAAA,gBACf,OAAO,IAAI;AAAA,YACf,EAAO;AAAA,cACL,IAAG,UAAU,EAAE;AAAA;AAAA;AAAA,UAGnB,OAAO;AAAA;AAAA,MAGX,EAAO,SAAI,IAAG,SAAS;AAAA,QACrB,IAAG,UAAU,QAAS,CAAC,IAAI,IAAI,IAAI,IAAI;AAAA,UAAE,IAAI;AAAA,YAAI,QAAQ,SAAS,EAAE;AAAA;AAAA,QACpE,IAAG,cAAc,QAAS,GAAG;AAAA,MAC/B;AAAA;AAAA,IAGF,SAAS,QAAS,CAAC,MAAM;AAAA,MACvB,IAAI,CAAC;AAAA,QAAM,OAAO;AAAA,MAClB,OAAO,QAAS,CAAC,QAAQ,MAAM,IAAI;AAAA,QACjC,OAAO,KAAK,KAAK,IAAI,QAAQ,MAAM,QAAS,CAAC,IAAI;AAAA,UAC/C,IAAI,UAAU,EAAE;AAAA,YAAG,KAAK;AAAA,UACxB,IAAI;AAAA,YAAI,GAAG,MAAM,MAAM,SAAS;AAAA,SACjC;AAAA;AAAA;AAAA,IAIL,SAAS,YAAa,CAAC,MAAM;AAAA,MAC3B,IAAI,CAAC;AAAA,QAAM,OAAO;AAAA,MAClB,OAAO,QAAS,CAAC,QAAQ,MAAM;AAAA,QAC7B,IAAI;AAAA,UACF,OAAO,KAAK,KAAK,IAAI,QAAQ,IAAI;AAAA,UACjC,OAAO,IAAI;AAAA,UACX,IAAI,CAAC,UAAU,EAAE;AAAA,YAAG,MAAM;AAAA;AAAA;AAAA;AAAA,IAMhC,SAAS,QAAS,CAAC,MAAM;AAAA,MACvB,IAAI,CAAC;AAAA,QAAM,OAAO;AAAA,MAClB,OAAO,QAAS,CAAC,QAAQ,KAAK,KAAK,IAAI;AAAA,QACrC,OAAO,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,QAAS,CAAC,IAAI;AAAA,UACnD,IAAI,UAAU,EAAE;AAAA,YAAG,KAAK;AAAA,UACxB,IAAI;AAAA,YAAI,GAAG,MAAM,MAAM,SAAS;AAAA,SACjC;AAAA;AAAA;AAAA,IAIL,SAAS,YAAa,CAAC,MAAM;AAAA,MAC3B,IAAI,CAAC;AAAA,QAAM,OAAO;AAAA,MAClB,OAAO,QAAS,CAAC,QAAQ,KAAK,KAAK;AAAA,QACjC,IAAI;AAAA,UACF,OAAO,KAAK,KAAK,IAAI,QAAQ,KAAK,GAAG;AAAA,UACrC,OAAO,IAAI;AAAA,UACX,IAAI,CAAC,UAAU,EAAE;AAAA,YAAG,MAAM;AAAA;AAAA;AAAA;AAAA,IAKhC,SAAS,OAAQ,CAAC,MAAM;AAAA,MACtB,IAAI,CAAC;AAAA,QAAM,OAAO;AAAA,MAGlB,OAAO,QAAS,CAAC,QAAQ,SAAS,IAAI;AAAA,QACpC,IAAI,OAAO,YAAY,YAAY;AAAA,UACjC,KAAK;AAAA,UACL,UAAU;AAAA,QACZ;AAAA,QACA,SAAS,QAAS,CAAC,IAAI,OAAO;AAAA,UAC5B,IAAI,OAAO;AAAA,YACT,IAAI,MAAM,MAAM;AAAA,cAAG,MAAM,OAAO;AAAA,YAChC,IAAI,MAAM,MAAM;AAAA,cAAG,MAAM,OAAO;AAAA,UAClC;AAAA,UACA,IAAI;AAAA,YAAI,GAAG,MAAM,MAAM,SAAS;AAAA;AAAA,QAElC,OAAO,UAAU,KAAK,KAAK,IAAI,QAAQ,SAAS,QAAQ,IACpD,KAAK,KAAK,IAAI,QAAQ,QAAQ;AAAA;AAAA;AAAA,IAItC,SAAS,WAAY,CAAC,MAAM;AAAA,MAC1B,IAAI,CAAC;AAAA,QAAM,OAAO;AAAA,MAGlB,OAAO,QAAS,CAAC,QAAQ,SAAS;AAAA,QAChC,IAAI,QAAQ,UAAU,KAAK,KAAK,IAAI,QAAQ,OAAO,IAC/C,KAAK,KAAK,IAAI,MAAM;AAAA,QACxB,IAAI,OAAO;AAAA,UACT,IAAI,MAAM,MAAM;AAAA,YAAG,MAAM,OAAO;AAAA,UAChC,IAAI,MAAM,MAAM;AAAA,YAAG,MAAM,OAAO;AAAA,QAClC;AAAA,QACA,OAAO;AAAA;AAAA;AAAA,IAgBX,SAAS,SAAU,CAAC,IAAI;AAAA,MACtB,IAAI,CAAC;AAAA,QACH,OAAO;AAAA,MAET,IAAI,GAAG,SAAS;AAAA,QACd,OAAO;AAAA,MAET,IAAI,UAAU,CAAC,QAAQ,UAAU,QAAQ,OAAO,MAAM;AAAA,MACtD,IAAI,SAAS;AAAA,QACX,IAAI,GAAG,SAAS,YAAY,GAAG,SAAS;AAAA,UACtC,OAAO;AAAA,MACX;AAAA,MAEA,OAAO;AAAA;AAAA;AAAA;;;;EChWX,IAAI,6BAA2B;AAAA,EAE/B,OAAO,UAAU;AAAA,EAEjB,SAAS,MAAO,CAAC,IAAI;AAAA,IACnB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,IAEA,SAAS,UAAW,CAAC,MAAM,SAAS;AAAA,MAClC,IAAI,EAAE,gBAAgB;AAAA,QAAa,OAAO,IAAI,WAAW,MAAM,OAAO;AAAA,MAEtE,OAAO,KAAK,IAAI;AAAA,MAEhB,IAAI,OAAO;AAAA,MAEX,KAAK,OAAO;AAAA,MACZ,KAAK,KAAK;AAAA,MACV,KAAK,WAAW;AAAA,MAChB,KAAK,SAAS;AAAA,MAEd,KAAK,QAAQ;AAAA,MACb,KAAK,OAAO;AAAA,MACZ,KAAK,aAAa,KAAK;AAAA,MAEvB,UAAU,WAAW,CAAC;AAAA,MAGtB,IAAI,OAAO,OAAO,KAAK,OAAO;AAAA,MAC9B,SAAS,QAAQ,GAAG,SAAS,KAAK,OAAQ,QAAQ,QAAQ,SAAS;AAAA,QACjE,IAAI,MAAM,KAAK;AAAA,QACf,KAAK,OAAO,QAAQ;AAAA,MACtB;AAAA,MAEA,IAAI,KAAK;AAAA,QAAU,KAAK,YAAY,KAAK,QAAQ;AAAA,MAEjD,IAAI,KAAK,UAAU,WAAW;AAAA,QAC5B,IAAiB,OAAO,KAAK,UAAzB,UAAgC;AAAA,UAClC,MAAM,UAAU,wBAAwB;AAAA,QAC1C;AAAA,QACA,IAAI,KAAK,QAAQ,WAAW;AAAA,UAC1B,KAAK,MAAM;AAAA,QACb,EAAO,SAAiB,OAAO,KAAK,QAAzB,UAA8B;AAAA,UACvC,MAAM,UAAU,sBAAsB;AAAA,QACxC;AAAA,QAEA,IAAI,KAAK,QAAQ,KAAK,KAAK;AAAA,UACzB,MAAM,IAAI,MAAM,sBAAsB;AAAA,QACxC;AAAA,QAEA,KAAK,MAAM,KAAK;AAAA,MAClB;AAAA,MAEA,IAAI,KAAK,OAAO,MAAM;AAAA,QACpB,QAAQ,SAAS,QAAQ,GAAG;AAAA,UAC1B,KAAK,MAAM;AAAA,SACZ;AAAA,QACD;AAAA,MACF;AAAA,MAEA,GAAG,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,QAAS,CAAC,KAAK,IAAI;AAAA,QAC3D,IAAI,KAAK;AAAA,UACP,KAAK,KAAK,SAAS,GAAG;AAAA,UACtB,KAAK,WAAW;AAAA,UAChB;AAAA,QACF;AAAA,QAEA,KAAK,KAAK;AAAA,QACV,KAAK,KAAK,QAAQ,EAAE;AAAA,QACpB,KAAK,MAAM;AAAA,OACZ;AAAA;AAAA,IAGH,SAAS,WAAY,CAAC,MAAM,SAAS;AAAA,MACnC,IAAI,EAAE,gBAAgB;AAAA,QAAc,OAAO,IAAI,YAAY,MAAM,OAAO;AAAA,MAExE,OAAO,KAAK,IAAI;AAAA,MAEhB,KAAK,OAAO;AAAA,MACZ,KAAK,KAAK;AAAA,MACV,KAAK,WAAW;AAAA,MAEhB,KAAK,QAAQ;AAAA,MACb,KAAK,WAAW;AAAA,MAChB,KAAK,OAAO;AAAA,MACZ,KAAK,eAAe;AAAA,MAEpB,UAAU,WAAW,CAAC;AAAA,MAGtB,IAAI,OAAO,OAAO,KAAK,OAAO;AAAA,MAC9B,SAAS,QAAQ,GAAG,SAAS,KAAK,OAAQ,QAAQ,QAAQ,SAAS;AAAA,QACjE,IAAI,MAAM,KAAK;AAAA,QACf,KAAK,OAAO,QAAQ;AAAA,MACtB;AAAA,MAEA,IAAI,KAAK,UAAU,WAAW;AAAA,QAC5B,IAAiB,OAAO,KAAK,UAAzB,UAAgC;AAAA,UAClC,MAAM,UAAU,wBAAwB;AAAA,QAC1C;AAAA,QACA,IAAI,KAAK,QAAQ,GAAG;AAAA,UAClB,MAAM,IAAI,MAAM,uBAAuB;AAAA,QACzC;AAAA,QAEA,KAAK,MAAM,KAAK;AAAA,MAClB;AAAA,MAEA,KAAK,OAAO;AAAA,MACZ,KAAK,SAAS,CAAC;AAAA,MAEf,IAAI,KAAK,OAAO,MAAM;AAAA,QACpB,KAAK,QAAQ,GAAG;AAAA,QAChB,KAAK,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,SAAS,CAAC;AAAA,QAC1E,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;;;;ECjHJ,OAAO,UAAU;AAAA,EAEjB,IAAI,iBAAiB,OAAO,kBAAkB,QAAS,CAAC,KAAK;AAAA,IAC3D,OAAO,IAAI;AAAA;AAAA,EAGb,SAAS,KAAM,CAAC,KAAK;AAAA,IACnB,IAAI,QAAQ,QAAQ,OAAO,QAAQ;AAAA,MACjC,OAAO;AAAA,IAET,IAAI,eAAe;AAAA,MACjB,IAAI,OAAO,EAAE,WAAW,eAAe,GAAG,EAAE;AAAA,IAE5C;AAAA,UAAI,OAAO,OAAO,OAAO,IAAI;AAAA,IAE/B,OAAO,oBAAoB,GAAG,EAAE,QAAQ,QAAS,CAAC,KAAK;AAAA,MACrD,OAAO,eAAe,MAAM,KAAK,OAAO,yBAAyB,KAAK,GAAG,CAAC;AAAA,KAC3E;AAAA,IAED,OAAO;AAAA;AAAA;;;;ECrBT,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EAEJ,IAAI;AAAA,EAGJ,IAAI;AAAA,EACJ,IAAI;AAAA,EAGJ,IAAI,OAAO,WAAW,cAAc,OAAO,OAAO,QAAQ,YAAY;AAAA,IACpE,gBAAgB,OAAO,IAAI,mBAAmB;AAAA,IAE9C,iBAAiB,OAAO,IAAI,sBAAsB;AAAA,EACpD,EAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,iBAAiB;AAAA;AAAA,EAGnB,SAAS,IAAK,GAAG;AAAA,EAEjB,SAAS,YAAY,CAAC,SAAS,QAAO;AAAA,IACpC,OAAO,eAAe,SAAS,eAAe;AAAA,MAC5C,KAAK,QAAQ,GAAG;AAAA,QACd,OAAO;AAAA;AAAA,IAEX,CAAC;AAAA;AAAA,EAGH,IAAI,QAAQ;AAAA,EACZ,IAAI,KAAK;AAAA,IACP,QAAQ,KAAK,SAAS,MAAM;AAAA,EACzB,SAAI,YAAY,KAAK,QAAQ,IAAI,cAAc,EAAE;AAAA,IACpD,QAAQ,QAAQ,GAAG;AAAA,MACjB,IAAI,IAAI,KAAK,OAAO,MAAM,MAAM,SAAS;AAAA,MACzC,IAAI,WAAW,EAAE,MAAM,IAAI,EAAE,KAAK;AAAA,OAAU;AAAA,MAC5C,QAAQ,MAAM,CAAC;AAAA;AAAA,EAInB,IAAI,CAAC,GAAG,gBAAgB;AAAA,IAElB,QAAQ,OAAO,kBAAkB,CAAC;AAAA,IACtC,aAAa,IAAI,KAAK;AAAA,IAMtB,GAAG,QAAS,QAAS,CAAC,UAAU;AAAA,MAC9B,SAAS,KAAM,CAAC,IAAI,IAAI;AAAA,QACtB,OAAO,SAAS,KAAK,IAAI,IAAI,QAAS,CAAC,KAAK;AAAA,UAE1C,IAAI,CAAC,KAAK;AAAA,YACR,WAAW;AAAA,UACb;AAAA,UAEA,IAAI,OAAO,OAAO;AAAA,YAChB,GAAG,MAAM,MAAM,SAAS;AAAA,SAC3B;AAAA;AAAA,MAGH,OAAO,eAAe,OAAO,gBAAgB;AAAA,QAC3C,OAAO;AAAA,MACT,CAAC;AAAA,MACD,OAAO;AAAA,MACN,GAAG,KAAK;AAAA,IAEX,GAAG,YAAa,QAAS,CAAC,cAAc;AAAA,MACtC,SAAS,SAAU,CAAC,IAAI;AAAA,QAEtB,aAAa,MAAM,IAAI,SAAS;AAAA,QAChC,WAAW;AAAA;AAAA,MAGb,OAAO,eAAe,WAAW,gBAAgB;AAAA,QAC/C,OAAO;AAAA,MACT,CAAC;AAAA,MACD,OAAO;AAAA,MACN,GAAG,SAAS;AAAA,IAEf,IAAI,YAAY,KAAK,QAAQ,IAAI,cAAc,EAAE,GAAG;AAAA,MAClD,QAAQ,GAAG,QAAQ,QAAQ,GAAG;AAAA,QAC5B,MAAM,GAAG,cAAc;AAAA,4BACL,MAAM,GAAG,eAAe,QAAQ,CAAC;AAAA,OACpD;AAAA,IACH;AAAA,EACF;AAAA,EA7CM;AAAA,EA+CN,IAAI,CAAC,OAAO,gBAAgB;AAAA,IAC1B,aAAa,QAAQ,GAAG,cAAc;AAAA,EACxC;AAAA,EAEA,OAAO,UAAU,MAAM,MAAM,EAAE,CAAC;AAAA,EAChC,IAAI,QAAQ,IAAI,iCAAiC,CAAC,GAAG,WAAW;AAAA,IAC5D,OAAO,UAAU,MAAM,EAAE;AAAA,IACzB,GAAG,YAAY;AAAA,EACnB;AAAA,EAEA,SAAS,KAAM,CAAC,KAAI;AAAA,IAElB,UAAU,GAAE;AAAA,IACZ,IAAG,cAAc;AAAA,IAEjB,IAAG,mBAAmB;AAAA,IACtB,IAAG,oBAAoB;AAAA,IACvB,IAAI,cAAc,IAAG;AAAA,IACrB,IAAG,WAAW;AAAA,IACd,SAAS,QAAS,CAAC,MAAM,SAAS,IAAI;AAAA,MACpC,IAAI,OAAO,YAAY;AAAA,QACrB,KAAK,SAAS,UAAU;AAAA,MAE1B,OAAO,YAAY,MAAM,SAAS,EAAE;AAAA,MAEpC,SAAS,WAAY,CAAC,OAAM,UAAS,KAAI,WAAW;AAAA,QAClD,OAAO,YAAY,OAAM,UAAS,QAAS,CAAC,KAAK;AAAA,UAC/C,IAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAAA,YAChD,QAAQ,CAAC,aAAa,CAAC,OAAM,UAAS,GAAE,GAAG,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAAA,UACjF;AAAA,YACH,IAAI,OAAO,QAAO;AAAA,cAChB,IAAG,MAAM,MAAM,SAAS;AAAA;AAAA,SAE7B;AAAA;AAAA;AAAA,IAIL,IAAI,eAAe,IAAG;AAAA,IACtB,IAAG,YAAY;AAAA,IACf,SAAS,SAAU,CAAC,MAAM,MAAM,SAAS,IAAI;AAAA,MAC3C,IAAI,OAAO,YAAY;AAAA,QACrB,KAAK,SAAS,UAAU;AAAA,MAE1B,OAAO,aAAa,MAAM,MAAM,SAAS,EAAE;AAAA,MAE3C,SAAS,YAAa,CAAC,OAAM,OAAM,UAAS,KAAI,WAAW;AAAA,QACzD,OAAO,aAAa,OAAM,OAAM,UAAS,QAAS,CAAC,KAAK;AAAA,UACtD,IAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAAA,YAChD,QAAQ,CAAC,cAAc,CAAC,OAAM,OAAM,UAAS,GAAE,GAAG,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAAA,UACxF;AAAA,YACH,IAAI,OAAO,QAAO;AAAA,cAChB,IAAG,MAAM,MAAM,SAAS;AAAA;AAAA,SAE7B;AAAA;AAAA;AAAA,IAIL,IAAI,gBAAgB,IAAG;AAAA,IACvB,IAAI;AAAA,MACF,IAAG,aAAa;AAAA,IAClB,SAAS,UAAW,CAAC,MAAM,MAAM,SAAS,IAAI;AAAA,MAC5C,IAAI,OAAO,YAAY;AAAA,QACrB,KAAK,SAAS,UAAU;AAAA,MAE1B,OAAO,cAAc,MAAM,MAAM,SAAS,EAAE;AAAA,MAE5C,SAAS,aAAc,CAAC,OAAM,OAAM,UAAS,KAAI,WAAW;AAAA,QAC1D,OAAO,cAAc,OAAM,OAAM,UAAS,QAAS,CAAC,KAAK;AAAA,UACvD,IAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAAA,YAChD,QAAQ,CAAC,eAAe,CAAC,OAAM,OAAM,UAAS,GAAE,GAAG,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAAA,UACzF;AAAA,YACH,IAAI,OAAO,QAAO;AAAA,cAChB,IAAG,MAAM,MAAM,SAAS;AAAA;AAAA,SAE7B;AAAA;AAAA;AAAA,IAIL,IAAI,cAAc,IAAG;AAAA,IACrB,IAAI;AAAA,MACF,IAAG,WAAW;AAAA,IAChB,SAAS,QAAS,CAAC,KAAK,MAAM,OAAO,IAAI;AAAA,MACvC,IAAI,OAAO,UAAU,YAAY;AAAA,QAC/B,KAAK;AAAA,QACL,QAAQ;AAAA,MACV;AAAA,MACA,OAAO,YAAY,KAAK,MAAM,OAAO,EAAE;AAAA,MAEvC,SAAS,WAAY,CAAC,MAAK,OAAM,QAAO,KAAI,WAAW;AAAA,QACrD,OAAO,YAAY,MAAK,OAAM,QAAO,QAAS,CAAC,KAAK;AAAA,UAClD,IAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAAA,YAChD,QAAQ,CAAC,aAAa,CAAC,MAAK,OAAM,QAAO,GAAE,GAAG,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAAA,UACpF;AAAA,YACH,IAAI,OAAO,QAAO;AAAA,cAChB,IAAG,MAAM,MAAM,SAAS;AAAA;AAAA,SAE7B;AAAA;AAAA;AAAA,IAIL,IAAI,aAAa,IAAG;AAAA,IACpB,IAAG,UAAU;AAAA,IACb,IAAI,0BAA0B;AAAA,IAC9B,SAAS,OAAQ,CAAC,MAAM,SAAS,IAAI;AAAA,MACnC,IAAI,OAAO,YAAY;AAAA,QACrB,KAAK,SAAS,UAAU;AAAA,MAE1B,IAAI,aAAa,wBAAwB,KAAK,QAAQ,OAAO,IACzD,SAAS,WAAW,CAAC,OAAM,UAAS,KAAI,WAAW;AAAA,QACnD,OAAO,WAAW,OAAM,mBACtB,OAAM,UAAS,KAAI,SACrB,CAAC;AAAA,UAED,SAAS,WAAW,CAAC,OAAM,UAAS,KAAI,WAAW;AAAA,QACnD,OAAO,WAAW,OAAM,UAAS,mBAC/B,OAAM,UAAS,KAAI,SACrB,CAAC;AAAA;AAAA,MAGL,OAAO,WAAW,MAAM,SAAS,EAAE;AAAA,MAEnC,SAAS,kBAAmB,CAAC,OAAM,UAAS,KAAI,WAAW;AAAA,QACzD,OAAO,QAAS,CAAC,KAAK,OAAO;AAAA,UAC3B,IAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAAA,YAChD,QAAQ;AAAA,cACN;AAAA,cACA,CAAC,OAAM,UAAS,GAAE;AAAA,cAClB;AAAA,cACA,aAAa,KAAK,IAAI;AAAA,cACtB,KAAK,IAAI;AAAA,YACX,CAAC;AAAA,UACE;AAAA,YACH,IAAI,SAAS,MAAM;AAAA,cACjB,MAAM,KAAK;AAAA,YAEb,IAAI,OAAO,QAAO;AAAA,cAChB,IAAG,KAAK,MAAM,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAMlC,IAAI,QAAQ,QAAQ,OAAO,GAAG,CAAC,MAAM,QAAQ;AAAA,MAC3C,IAAI,aAAa,OAAO,GAAE;AAAA,MAC1B,aAAa,WAAW;AAAA,MACxB,cAAc,WAAW;AAAA,IAC3B;AAAA,IAEA,IAAI,gBAAgB,IAAG;AAAA,IACvB,IAAI,eAAe;AAAA,MACjB,WAAW,YAAY,OAAO,OAAO,cAAc,SAAS;AAAA,MAC5D,WAAW,UAAU,OAAO;AAAA,IAC9B;AAAA,IAEA,IAAI,iBAAiB,IAAG;AAAA,IACxB,IAAI,gBAAgB;AAAA,MAClB,YAAY,YAAY,OAAO,OAAO,eAAe,SAAS;AAAA,MAC9D,YAAY,UAAU,OAAO;AAAA,IAC/B;AAAA,IAEA,OAAO,eAAe,KAAI,cAAc;AAAA,MACtC,KAAK,QAAS,GAAG;AAAA,QACf,OAAO;AAAA;AAAA,MAET,KAAK,QAAS,CAAC,KAAK;AAAA,QAClB,aAAa;AAAA;AAAA,MAEf,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAAA,IACD,OAAO,eAAe,KAAI,eAAe;AAAA,MACvC,KAAK,QAAS,GAAG;AAAA,QACf,OAAO;AAAA;AAAA,MAET,KAAK,QAAS,CAAC,KAAK;AAAA,QAClB,cAAc;AAAA;AAAA,MAEhB,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAAA,IAGD,IAAI,iBAAiB;AAAA,IACrB,OAAO,eAAe,KAAI,kBAAkB;AAAA,MAC1C,KAAK,QAAS,GAAG;AAAA,QACf,OAAO;AAAA;AAAA,MAET,KAAK,QAAS,CAAC,KAAK;AAAA,QAClB,iBAAiB;AAAA;AAAA,MAEnB,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAAA,IACD,IAAI,kBAAkB;AAAA,IACtB,OAAO,eAAe,KAAI,mBAAmB;AAAA,MAC3C,KAAK,QAAS,GAAG;AAAA,QACf,OAAO;AAAA;AAAA,MAET,KAAK,QAAS,CAAC,KAAK;AAAA,QAClB,kBAAkB;AAAA;AAAA,MAEpB,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAAA,IAED,SAAS,UAAW,CAAC,MAAM,SAAS;AAAA,MAClC,IAAI,gBAAgB;AAAA,QAClB,OAAO,cAAc,MAAM,MAAM,SAAS,GAAG;AAAA,MAE7C;AAAA,eAAO,WAAW,MAAM,OAAO,OAAO,WAAW,SAAS,GAAG,SAAS;AAAA;AAAA,IAG1E,SAAS,eAAgB,GAAG;AAAA,MAC1B,IAAI,OAAO;AAAA,MACX,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,QAAS,CAAC,KAAK,IAAI;AAAA,QACxD,IAAI,KAAK;AAAA,UACP,IAAI,KAAK;AAAA,YACP,KAAK,QAAQ;AAAA,UAEf,KAAK,KAAK,SAAS,GAAG;AAAA,QACxB,EAAO;AAAA,UACL,KAAK,KAAK;AAAA,UACV,KAAK,KAAK,QAAQ,EAAE;AAAA,UACpB,KAAK,KAAK;AAAA;AAAA,OAEb;AAAA;AAAA,IAGH,SAAS,WAAY,CAAC,MAAM,SAAS;AAAA,MACnC,IAAI,gBAAgB;AAAA,QAClB,OAAO,eAAe,MAAM,MAAM,SAAS,GAAG;AAAA,MAE9C;AAAA,eAAO,YAAY,MAAM,OAAO,OAAO,YAAY,SAAS,GAAG,SAAS;AAAA;AAAA,IAG5E,SAAS,gBAAiB,GAAG;AAAA,MAC3B,IAAI,OAAO;AAAA,MACX,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,QAAS,CAAC,KAAK,IAAI;AAAA,QACxD,IAAI,KAAK;AAAA,UACP,KAAK,QAAQ;AAAA,UACb,KAAK,KAAK,SAAS,GAAG;AAAA,QACxB,EAAO;AAAA,UACL,KAAK,KAAK;AAAA,UACV,KAAK,KAAK,QAAQ,EAAE;AAAA;AAAA,OAEvB;AAAA;AAAA,IAGH,SAAS,gBAAiB,CAAC,MAAM,SAAS;AAAA,MACxC,OAAO,IAAI,IAAG,WAAW,MAAM,OAAO;AAAA;AAAA,IAGxC,SAAS,iBAAkB,CAAC,MAAM,SAAS;AAAA,MACzC,OAAO,IAAI,IAAG,YAAY,MAAM,OAAO;AAAA;AAAA,IAGzC,IAAI,UAAU,IAAG;AAAA,IACjB,IAAG,OAAO;AAAA,IACV,SAAS,IAAK,CAAC,MAAM,OAAO,MAAM,IAAI;AAAA,MACpC,IAAI,OAAO,SAAS;AAAA,QAClB,KAAK,MAAM,OAAO;AAAA,MAEpB,OAAO,QAAQ,MAAM,OAAO,MAAM,EAAE;AAAA,MAEpC,SAAS,OAAQ,CAAC,OAAM,QAAO,OAAM,KAAI,WAAW;AAAA,QAClD,OAAO,QAAQ,OAAM,QAAO,OAAM,QAAS,CAAC,KAAK,IAAI;AAAA,UACnD,IAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAAA,YAChD,QAAQ,CAAC,SAAS,CAAC,OAAM,QAAO,OAAM,GAAE,GAAG,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAAA,UACjF;AAAA,YACH,IAAI,OAAO,QAAO;AAAA,cAChB,IAAG,MAAM,MAAM,SAAS;AAAA;AAAA,SAE7B;AAAA;AAAA;AAAA,IAIL,OAAO;AAAA;AAAA,EAGT,SAAS,OAAQ,CAAC,MAAM;AAAA,IACtB,MAAM,WAAW,KAAK,GAAG,MAAM,KAAK,EAAE;AAAA,IACtC,GAAG,eAAe,KAAK,IAAI;AAAA,IAC3B,MAAM;AAAA;AAAA,EAIR,IAAI;AAAA,EAKJ,SAAS,UAAW,GAAG;AAAA,IACrB,IAAI,MAAM,KAAK,IAAI;AAAA,IACnB,SAAS,IAAI,EAAG,IAAI,GAAG,eAAe,QAAQ,EAAE,GAAG;AAAA,MAGjD,IAAI,GAAG,eAAe,GAAG,SAAS,GAAG;AAAA,QACnC,GAAG,eAAe,GAAG,KAAK;AAAA,QAC1B,GAAG,eAAe,GAAG,KAAK;AAAA,MAC5B;AAAA,IACF;AAAA,IAEA,MAAM;AAAA;AAAA,EAGR,SAAS,KAAM,GAAG;AAAA,IAEhB,aAAa,UAAU;AAAA,IACvB,aAAa;AAAA,IAEb,IAAI,GAAG,eAAe,WAAW;AAAA,MAC/B;AAAA,IAEF,IAAI,OAAO,GAAG,eAAe,MAAM;AAAA,IACnC,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,OAAO,KAAK;AAAA,IAEhB,IAAI,MAAM,KAAK;AAAA,IACf,IAAI,YAAY,KAAK;AAAA,IACrB,IAAI,WAAW,KAAK;AAAA,IAIpB,IAAI,cAAc,WAAW;AAAA,MAC3B,MAAM,SAAS,GAAG,MAAM,IAAI;AAAA,MAC5B,GAAG,MAAM,MAAM,IAAI;AAAA,IACrB,EAAO,SAAI,KAAK,IAAI,IAAI,aAAa,OAAO;AAAA,MAE1C,MAAM,WAAW,GAAG,MAAM,IAAI;AAAA,MAC9B,IAAI,KAAK,KAAK,IAAI;AAAA,MAClB,IAAI,OAAO,OAAO;AAAA,QAChB,GAAG,KAAK,MAAM,GAAG;AAAA,IACrB,EAAO;AAAA,MAEL,IAAI,eAAe,KAAK,IAAI,IAAI;AAAA,MAGhC,IAAI,aAAa,KAAK,IAAI,WAAW,WAAW,CAAC;AAAA,MAGjD,IAAI,eAAe,KAAK,IAAI,aAAa,KAAK,GAAG;AAAA,MAEjD,IAAI,gBAAgB,cAAc;AAAA,QAChC,MAAM,SAAS,GAAG,MAAM,IAAI;AAAA,QAC5B,GAAG,MAAM,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAAA,MACzC,EAAO;AAAA,QAGL,GAAG,eAAe,KAAK,IAAI;AAAA;AAAA;AAAA,IAK/B,IAAI,eAAe,WAAW;AAAA,MAC5B,aAAa,WAAW,OAAO,CAAC;AAAA,IAClC;AAAA;AAAA;;;;EC9bF,SAAS,cAAc,CAAC,UAAU,SAAS;AAAA,IAEzC,IAAI,OAAO,YAAY,WAAW;AAAA,MAChC,UAAU,EAAE,SAAS,QAAQ;AAAA,IAC/B;AAAA,IAEA,KAAK,oBAAoB,KAAK,MAAM,KAAK,UAAU,QAAQ,CAAC;AAAA,IAC5D,KAAK,YAAY;AAAA,IACjB,KAAK,WAAW,WAAW,CAAC;AAAA,IAC5B,KAAK,gBAAgB,WAAW,QAAQ,gBAAgB;AAAA,IACxD,KAAK,MAAM;AAAA,IACX,KAAK,UAAU,CAAC;AAAA,IAChB,KAAK,YAAY;AAAA,IACjB,KAAK,oBAAoB;AAAA,IACzB,KAAK,sBAAsB;AAAA,IAC3B,KAAK,WAAW;AAAA,IAChB,KAAK,kBAAkB;AAAA,IAEvB,IAAI,KAAK,SAAS,SAAS;AAAA,MACzB,KAAK,kBAAkB,KAAK,UAAU,MAAM,CAAC;AAAA,IAC/C;AAAA;AAAA,EAEF,OAAO,UAAU;AAAA,EAEjB,eAAe,UAAU,QAAQ,QAAQ,GAAG;AAAA,IAC1C,KAAK,YAAY;AAAA,IACjB,KAAK,YAAY,KAAK;AAAA;AAAA,EAGxB,eAAe,UAAU,OAAO,QAAQ,GAAG;AAAA,IACzC,IAAI,KAAK,UAAU;AAAA,MACjB,aAAa,KAAK,QAAQ;AAAA,IAC5B;AAAA,IAEA,KAAK,YAAkB,CAAC;AAAA,IACxB,KAAK,kBAAkB;AAAA;AAAA,EAGzB,eAAe,UAAU,QAAQ,QAAQ,CAAC,KAAK;AAAA,IAC7C,IAAI,KAAK,UAAU;AAAA,MACjB,aAAa,KAAK,QAAQ;AAAA,IAC5B;AAAA,IAEA,IAAI,CAAC,KAAK;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA,IAAI,cAAc,IAAI,KAAK,EAAE,QAAQ;AAAA,IACrC,IAAI,OAAO,cAAc,KAAK,mBAAmB,KAAK,eAAe;AAAA,MACnE,KAAK,QAAQ,QAAQ,IAAI,MAAM,iCAAiC,CAAC;AAAA,MACjE,OAAO;AAAA,IACT;AAAA,IAEA,KAAK,QAAQ,KAAK,GAAG;AAAA,IAErB,IAAI,UAAU,KAAK,UAAU,MAAM;AAAA,IACnC,IAAI,YAAY,WAAW;AAAA,MACzB,IAAI,KAAK,iBAAiB;AAAA,QAExB,KAAK,QAAQ,OAAO,KAAK,QAAQ,SAAS,GAAG,KAAK,QAAQ,MAAM;AAAA,QAChE,KAAK,YAAY,KAAK,gBAAgB,MAAM,CAAC;AAAA,QAC7C,UAAU,KAAK,UAAU,MAAM;AAAA,MACjC,EAAO;AAAA,QACL,OAAO;AAAA;AAAA,IAEX;AAAA,IAEA,IAAI,OAAO;AAAA,IACX,IAAI,QAAQ,WAAW,QAAQ,GAAG;AAAA,MAChC,KAAK;AAAA,MAEL,IAAI,KAAK,qBAAqB;AAAA,QAC5B,KAAK,WAAW,WAAW,QAAQ,GAAG;AAAA,UACpC,KAAK,oBAAoB,KAAK,SAAS;AAAA,WACtC,KAAK,iBAAiB;AAAA,QAEzB,IAAI,KAAK,SAAS,OAAO;AAAA,UACrB,KAAK,SAAS,MAAM;AAAA,QACxB;AAAA,MACF;AAAA,MAEA,KAAK,IAAI,KAAK,SAAS;AAAA,OACtB,OAAO;AAAA,IAEV,IAAI,KAAK,SAAS,OAAO;AAAA,MACrB,MAAM,MAAM;AAAA,IAChB;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,eAAe,UAAU,UAAU,QAAQ,CAAC,IAAI,YAAY;AAAA,IAC1D,KAAK,MAAM;AAAA,IAEX,IAAI,YAAY;AAAA,MACd,IAAI,WAAW,SAAS;AAAA,QACtB,KAAK,oBAAoB,WAAW;AAAA,MACtC;AAAA,MACA,IAAI,WAAW,IAAI;AAAA,QACjB,KAAK,sBAAsB,WAAW;AAAA,MACxC;AAAA,IACF;AAAA,IAEA,IAAI,OAAO;AAAA,IACX,IAAI,KAAK,qBAAqB;AAAA,MAC5B,KAAK,WAAW,WAAW,QAAQ,GAAG;AAAA,QACpC,KAAK,oBAAoB;AAAA,SACxB,KAAK,iBAAiB;AAAA,IAC3B;AAAA,IAEA,KAAK,kBAAkB,IAAI,KAAK,EAAE,QAAQ;AAAA,IAE1C,KAAK,IAAI,KAAK,SAAS;AAAA;AAAA,EAGzB,eAAe,UAAU,MAAM,QAAQ,CAAC,IAAI;AAAA,IAC1C,QAAQ,IAAI,0CAA0C;AAAA,IACtD,KAAK,QAAQ,EAAE;AAAA;AAAA,EAGjB,eAAe,UAAU,QAAQ,QAAQ,CAAC,IAAI;AAAA,IAC5C,QAAQ,IAAI,4CAA4C;AAAA,IACxD,KAAK,QAAQ,EAAE;AAAA;AAAA,EAGjB,eAAe,UAAU,QAAQ,eAAe,UAAU;AAAA,EAE1D,eAAe,UAAU,SAAS,QAAQ,GAAG;AAAA,IAC3C,OAAO,KAAK;AAAA;AAAA,EAGd,eAAe,UAAU,WAAW,QAAQ,GAAG;AAAA,IAC7C,OAAO,KAAK;AAAA;AAAA,EAGd,eAAe,UAAU,YAAY,QAAQ,GAAG;AAAA,IAC9C,IAAI,KAAK,QAAQ,WAAW,GAAG;AAAA,MAC7B,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,SAAS,CAAC;AAAA,IACd,IAAI,YAAY;AAAA,IAChB,IAAI,iBAAiB;AAAA,IAErB,SAAS,IAAI,EAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAAA,MAC5C,IAAI,QAAQ,KAAK,QAAQ;AAAA,MACzB,IAAI,UAAU,MAAM;AAAA,MACpB,IAAI,SAAS,OAAO,YAAY,KAAK;AAAA,MAErC,OAAO,WAAW;AAAA,MAElB,IAAI,SAAS,gBAAgB;AAAA,QAC3B,YAAY;AAAA,QACZ,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA;;;;EC5JT,IAAI;AAAA,EAEI,oBAAY,QAAQ,CAAC,SAAS;AAAA,IACpC,IAAI,WAAmB,iBAAS,OAAO;AAAA,IACvC,OAAO,IAAI,eAAe,UAAU;AAAA,MAChC,SAAS,WAAW,QAAQ;AAAA,MAC5B,OAAO,WAAW,QAAQ;AAAA,MAC1B,cAAc,WAAW,QAAQ;AAAA,IACrC,CAAC;AAAA;AAAA,EAGK,mBAAW,QAAQ,CAAC,SAAS;AAAA,IACnC,IAAI,mBAAmB,OAAO;AAAA,MAC5B,OAAO,CAAC,EAAE,OAAO,OAAO;AAAA,IAC1B;AAAA,IAEA,IAAI,OAAO;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,YAAY,IAAI;AAAA,MAChB,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA,SAAS,OAAO,SAAS;AAAA,MACvB,KAAK,OAAO,QAAQ;AAAA,IACtB;AAAA,IAEA,IAAI,KAAK,aAAa,KAAK,YAAY;AAAA,MACrC,MAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAAA,IAEA,IAAI,WAAW,CAAC;AAAA,IAChB,SAAS,IAAI,EAAG,IAAI,KAAK,SAAS,KAAK;AAAA,MACrC,SAAS,KAAK,KAAK,cAAc,GAAG,IAAI,CAAC;AAAA,IAC3C;AAAA,IAEA,IAAI,WAAW,QAAQ,WAAW,CAAC,SAAS,QAAQ;AAAA,MAClD,SAAS,KAAK,KAAK,cAAc,GAAG,IAAI,CAAC;AAAA,IAC3C;AAAA,IAGA,SAAS,KAAK,QAAQ,CAAC,GAAE,GAAG;AAAA,MAC1B,OAAO,IAAI;AAAA,KACZ;AAAA,IAED,OAAO;AAAA;AAAA,EAGD,wBAAgB,QAAQ,CAAC,SAAS,MAAM;AAAA,IAC9C,IAAI,SAAU,KAAK,YACd,KAAK,OAAO,IAAI,IACjB;AAAA,IAEJ,IAAI,UAAU,KAAK,MAAM,SAAS,KAAK,aAAa,KAAK,IAAI,KAAK,QAAQ,OAAO,CAAC;AAAA,IAClF,UAAU,KAAK,IAAI,SAAS,KAAK,UAAU;AAAA,IAE3C,OAAO;AAAA;AAAA,EAGD,eAAO,QAAQ,CAAC,KAAK,SAAS,SAAS;AAAA,IAC7C,IAAI,mBAAmB,OAAO;AAAA,MAC5B,UAAU;AAAA,MACV,UAAU;AAAA,IACZ;AAAA,IAEA,IAAI,CAAC,SAAS;AAAA,MACZ,UAAU,CAAC;AAAA,MACX,SAAS,OAAO,KAAK;AAAA,QACnB,IAAI,OAAO,IAAI,SAAS,YAAY;AAAA,UAClC,QAAQ,KAAK,GAAG;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,IAEA,SAAS,IAAI,EAAG,IAAI,QAAQ,QAAQ,KAAK;AAAA,MACvC,IAAI,SAAW,QAAQ;AAAA,MACvB,IAAI,WAAW,IAAI;AAAA,MAEnB,IAAI,UAAU,SAAS,YAAY,CAAC,WAAU;AAAA,QAC5C,IAAI,KAAmB,kBAAU,OAAO;AAAA,QACxC,IAAI,OAAW,MAAM,UAAU,MAAM,KAAK,WAAW,CAAC;AAAA,QACtD,IAAI,WAAW,KAAK,IAAI;AAAA,QAExB,KAAK,KAAK,QAAQ,CAAC,KAAK;AAAA,UACtB,IAAI,GAAG,MAAM,GAAG,GAAG;AAAA,YACjB;AAAA,UACF;AAAA,UACA,IAAI,KAAK;AAAA,YACP,UAAU,KAAK,GAAG,UAAU;AAAA,UAC9B;AAAA,UACA,SAAS,MAAM,MAAM,SAAS;AAAA,SAC/B;AAAA,QAED,GAAG,QAAQ,QAAQ,GAAG;AAAA,UACpB,UAAS,MAAM,KAAK,IAAI;AAAA,SACzB;AAAA,QACD,KAAK,KAAK,QAAQ;AAAA,MACpB,IAAI,QAAQ,UAAU;AAAA,IACxB;AAAA;AAAA;;;;EC9EF,OAAO,UAAU;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,aAAa,SAAS;AAAA,IAChC,OAAO,QAAQ,KACb,aACA,WACA,WACA,WACA,WACA,UACA,WACA,QAIF;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,aAAa,SAAS;AAAA,IAChC,OAAO,QAAQ,KACb,SACA,WACA,UACA,aACA,WACF;AAAA,EACF;AAAA;;;;EChDA,IAAI,WAAU,OAAO;AAAA,EAErB,IAAM,YAAY,QAAS,CAAC,UAAS;AAAA,IACnC,OAAO,YACL,OAAO,aAAY,YACnB,OAAO,SAAQ,mBAAmB,cAClC,OAAO,SAAQ,SAAS,cACxB,OAAO,SAAQ,eAAe,cAC9B,OAAO,SAAQ,cAAc,cAC7B,OAAO,SAAQ,SAAS,cACxB,OAAO,SAAQ,QAAQ,YACvB,OAAO,SAAQ,OAAO;AAAA;AAAA,EAK1B,IAAI,CAAC,UAAU,QAAO,GAAG;AAAA,IACvB,OAAO,UAAU,QAAS,GAAG;AAAA,MAC3B,OAAO,QAAS,GAAG;AAAA;AAAA,EAEvB,EAAO;AAAA,IACD;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ,KAAK,SAAQ,QAAQ;AAAA,IAErC;AAAA,IAEJ,IAAI,OAAO,OAAO,YAAY;AAAA,MAC5B,KAAK,GAAG;AAAA,IACV;AAAA,IAGA,IAAI,SAAQ,yBAAyB;AAAA,MACnC,UAAU,SAAQ;AAAA,IACpB,EAAO;AAAA,MACL,UAAU,SAAQ,0BAA0B,IAAI;AAAA,MAChD,QAAQ,QAAQ;AAAA,MAChB,QAAQ,UAAU,CAAC;AAAA;AAAA,IAOrB,IAAI,CAAC,QAAQ,UAAU;AAAA,MACrB,QAAQ,gBAAgB,QAAQ;AAAA,MAChC,QAAQ,WAAW;AAAA,IACrB;AAAA,IAEA,OAAO,UAAU,QAAS,CAAC,IAAI,MAAM;AAAA,MAEnC,IAAI,CAAC,UAAU,OAAO,OAAO,GAAG;AAAA,QAC9B,OAAO,QAAS,GAAG;AAAA,MACrB;AAAA,MACA,OAAO,MAAM,OAAO,IAAI,YAAY,8CAA8C;AAAA,MAElF,IAAI,WAAW,OAAO;AAAA,QACpB,KAAK;AAAA,MACP;AAAA,MAEA,IAAI,KAAK;AAAA,MACT,IAAI,QAAQ,KAAK,YAAY;AAAA,QAC3B,KAAK;AAAA,MACP;AAAA,MAEA,IAAI,SAAS,QAAS,GAAG;AAAA,QACvB,QAAQ,eAAe,IAAI,EAAE;AAAA,QAC7B,IAAI,QAAQ,UAAU,MAAM,EAAE,WAAW,KACrC,QAAQ,UAAU,WAAW,EAAE,WAAW,GAAG;AAAA,UAC/C,OAAO;AAAA,QACT;AAAA;AAAA,MAEF,QAAQ,GAAG,IAAI,EAAE;AAAA,MAEjB,OAAO;AAAA;AAAA,IAGL,SAAS,SAAS,OAAO,GAAG;AAAA,MAC9B,IAAI,CAAC,UAAU,CAAC,UAAU,OAAO,OAAO,GAAG;AAAA,QACzC;AAAA,MACF;AAAA,MACA,SAAS;AAAA,MAET,QAAQ,QAAQ,QAAS,CAAC,KAAK;AAAA,QAC7B,IAAI;AAAA,UACF,SAAQ,eAAe,KAAK,aAAa,IAAI;AAAA,UAC7C,OAAO,IAAI;AAAA,OACd;AAAA,MACD,SAAQ,OAAO;AAAA,MACf,SAAQ,aAAa;AAAA,MACrB,QAAQ,SAAS;AAAA;AAAA,IAEnB,OAAO,QAAQ,SAAS;AAAA,IAEpB,OAAO,SAAS,KAAK,CAAC,OAAO,MAAM,QAAQ;AAAA,MAE7C,IAAI,QAAQ,QAAQ,QAAQ;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,QAAQ,QAAQ,SAAS;AAAA,MACzB,QAAQ,KAAK,OAAO,MAAM,MAAM;AAAA;AAAA,IAI9B,eAAe,CAAC;AAAA,IACpB,QAAQ,QAAQ,QAAS,CAAC,KAAK;AAAA,MAC7B,aAAa,OAAO,SAAS,QAAS,GAAG;AAAA,QAEvC,IAAI,CAAC,UAAU,OAAO,OAAO,GAAG;AAAA,UAC9B;AAAA,QACF;AAAA,QAKA,IAAI,YAAY,SAAQ,UAAU,GAAG;AAAA,QACrC,IAAI,UAAU,WAAW,QAAQ,OAAO;AAAA,UACtC,OAAO;AAAA,UACP,KAAK,QAAQ,MAAM,GAAG;AAAA,UAEtB,KAAK,aAAa,MAAM,GAAG;AAAA,UAE3B,IAAI,SAAS,QAAQ,UAAU;AAAA,YAG7B,MAAM;AAAA,UACR;AAAA,UAEA,SAAQ,KAAK,SAAQ,KAAK,GAAG;AAAA,QAC/B;AAAA;AAAA,KAEH;AAAA,IAED,OAAO,QAAQ,UAAU,QAAS,GAAG;AAAA,MACnC,OAAO;AAAA;AAAA,IAGL,SAAS;AAAA,IAET,OAAO,SAAS,KAAK,GAAG;AAAA,MAC1B,IAAI,UAAU,CAAC,UAAU,OAAO,OAAO,GAAG;AAAA,QACxC;AAAA,MACF;AAAA,MACA,SAAS;AAAA,MAMT,QAAQ,SAAS;AAAA,MAEjB,UAAU,QAAQ,OAAO,QAAS,CAAC,KAAK;AAAA,QACtC,IAAI;AAAA,UACF,SAAQ,GAAG,KAAK,aAAa,IAAI;AAAA,UACjC,OAAO;AAAA,UACP,OAAO,IAAI;AAAA,UACX,OAAO;AAAA;AAAA,OAEV;AAAA,MAED,SAAQ,OAAO;AAAA,MACf,SAAQ,aAAa;AAAA;AAAA,IAEvB,OAAO,QAAQ,OAAO;AAAA,IAElB,4BAA4B,SAAQ;AAAA,IACpC,oBAAoB,SAAS,kBAAkB,CAAC,MAAM;AAAA,MAExD,IAAI,CAAC,UAAU,OAAO,OAAO,GAAG;AAAA,QAC9B;AAAA,MACF;AAAA,MACA,SAAQ,WAAW,QAAmC;AAAA,MACtD,KAAK,QAAQ,SAAQ,UAAU,IAAI;AAAA,MAEnC,KAAK,aAAa,SAAQ,UAAU,IAAI;AAAA,MAExC,0BAA0B,KAAK,UAAS,SAAQ,QAAQ;AAAA;AAAA,IAGtD,sBAAsB,SAAQ;AAAA,IAC9B,cAAc,SAAS,YAAY,CAAC,IAAI,KAAK;AAAA,MAC/C,IAAI,OAAO,UAAU,UAAU,OAAO,OAAO,GAAG;AAAA,QAE9C,IAAI,QAAQ,WAAW;AAAA,UACrB,SAAQ,WAAW;AAAA,QACrB;AAAA,QACA,IAAI,MAAM,oBAAoB,MAAM,MAAM,SAAS;AAAA,QAEnD,KAAK,QAAQ,SAAQ,UAAU,IAAI;AAAA,QAEnC,KAAK,aAAa,SAAQ,UAAU,IAAI;AAAA,QAExC,OAAO;AAAA,MACT,EAAO;AAAA,QACL,OAAO,oBAAoB,MAAM,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA,EA7KhD;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAMA;AAAA,EA8CA;AAAA,EAiBA;AAAA,EAUA;AAAA,EAiCA;AAAA,EAEA;AAAA,EA0BA;AAAA,EACA;AAAA,EAaA;AAAA,EACA;AAAA;;;;ECtLN,IAAM,cAAc,OAAO;AAAA,EAE3B,SAAS,KAAK,CAAC,MAAM,IAAI,UAAU;AAAA,IAC/B,MAAM,kBAAkB,GAAG;AAAA,IAE3B,IAAI,iBAAiB;AAAA,MACjB,OAAO,GAAG,KAAK,MAAM,CAAC,KAAK,SAAS;AAAA,QAEhC,IAAI,KAAK;AAAA,UACL,OAAO,SAAS,GAAG;AAAA,QACvB;AAAA,QAEA,SAAS,MAAM,KAAK,OAAO,eAAe;AAAA,OAC7C;AAAA,IACL;AAAA,IAGA,MAAM,QAAQ,IAAI,KAAM,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,OAAQ,CAAC;AAAA,IAEhE,GAAG,OAAO,MAAM,OAAO,OAAO,CAAC,QAAQ;AAAA,MAEnC,IAAI,KAAK;AAAA,QACL,OAAO,SAAS,GAAG;AAAA,MACvB;AAAA,MAEA,GAAG,KAAK,MAAM,CAAC,MAAK,SAAS;AAAA,QAEzB,IAAI,MAAK;AAAA,UACL,OAAO,SAAS,IAAG;AAAA,QACvB;AAAA,QAEA,MAAM,YAAY,KAAK,MAAM,QAAQ,IAAI,SAAS,IAAI,MAAM;AAAA,QAG5D,OAAO,eAAe,IAAI,aAAa,EAAE,OAAO,UAAU,CAAC;AAAA,QAE3D,SAAS,MAAM,KAAK,OAAO,SAAS;AAAA,OACvC;AAAA,KACJ;AAAA;AAAA,EAGL,SAAS,QAAQ,CAAC,WAAW;AAAA,IACzB,IAAI,MAAM,KAAK,IAAI;AAAA,IAEnB,IAAI,cAAc,KAAK;AAAA,MACnB,MAAM,KAAK,KAAK,MAAM,IAAI,IAAI;AAAA,IAClC;AAAA,IAEA,OAAO,IAAI,KAAK,GAAG;AAAA;AAAA,EAGR,gBAAQ;AAAA,EACR,mBAAW;AAAA;;;;ECpD1B,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EACN,IAAM;AAAA,EAEN,IAAM,QAAQ,CAAC;AAAA,EAEf,SAAS,WAAW,CAAC,MAAM,SAAS;AAAA,IAChC,OAAO,QAAQ,gBAAgB,GAAG;AAAA;AAAA,EAGtC,SAAS,oBAAoB,CAAC,MAAM,SAAS,UAAU;AAAA,IACnD,IAAI,CAAC,QAAQ,UAAU;AAAA,MACnB,OAAO,SAAS,MAAM,KAAK,QAAQ,IAAI,CAAC;AAAA,IAC5C;AAAA,IAIA,QAAQ,GAAG,SAAS,MAAM,QAAQ;AAAA;AAAA,EAGtC,SAAS,WAAW,CAAC,MAAM,SAAS,UAAU;AAAA,IAC1C,MAAM,eAAe,YAAY,MAAM,OAAO;AAAA,IAG9C,QAAQ,GAAG,MAAM,cAAc,CAAC,QAAQ;AAAA,MACpC,IAAI,CAAC,KAAK;AAAA,QAGN,OAAO,eAAe,MAAM,cAAc,QAAQ,IAAI,CAAC,MAAK,OAAO,oBAAmB;AAAA,UAGlF,IAAI,MAAK;AAAA,YACL,QAAQ,GAAG,MAAM,cAAc,MAAM,EAAE;AAAA,YAEvC,OAAO,SAAS,IAAG;AAAA,UACvB;AAAA,UAEA,SAAS,MAAM,OAAO,eAAc;AAAA,SACvC;AAAA,MACL;AAAA,MAGA,IAAI,IAAI,SAAS,UAAU;AAAA,QACvB,OAAO,SAAS,GAAG;AAAA,MACvB;AAAA,MAGA,IAAI,QAAQ,SAAS,GAAG;AAAA,QACpB,OAAO,SAAS,OAAO,OAAO,IAAI,MAAM,iCAAiC,GAAG,EAAE,MAAM,WAAW,KAAK,CAAC,CAAC;AAAA,MAC1G;AAAA,MAEA,QAAQ,GAAG,KAAK,cAAc,CAAC,MAAK,SAAS;AAAA,QACzC,IAAI,MAAK;AAAA,UAGL,IAAI,KAAI,SAAS,UAAU;AAAA,YACvB,OAAO,YAAY,MAAM,KAAK,SAAS,OAAO,EAAE,GAAG,QAAQ;AAAA,UAC/D;AAAA,UAEA,OAAO,SAAS,IAAG;AAAA,QACvB;AAAA,QAEA,IAAI,CAAC,YAAY,MAAM,OAAO,GAAG;AAAA,UAC7B,OAAO,SAAS,OAAO,OAAO,IAAI,MAAM,iCAAiC,GAAG,EAAE,MAAM,WAAW,KAAK,CAAC,CAAC;AAAA,QAC1G;AAAA,QAIA,WAAW,MAAM,SAAS,CAAC,SAAQ;AAAA,UAC/B,IAAI,MAAK;AAAA,YACL,OAAO,SAAS,IAAG;AAAA,UACvB;AAAA,UAEA,YAAY,MAAM,KAAK,SAAS,OAAO,EAAE,GAAG,QAAQ;AAAA,SACvD;AAAA,OACJ;AAAA,KACJ;AAAA;AAAA,EAGL,SAAS,WAAW,CAAC,MAAM,SAAS;AAAA,IAChC,OAAO,KAAK,MAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,QAAQ;AAAA;AAAA,EAGvD,SAAS,UAAU,CAAC,MAAM,SAAS,UAAU;AAAA,IAEzC,QAAQ,GAAG,MAAM,YAAY,MAAM,OAAO,GAAG,CAAC,QAAQ;AAAA,MAClD,IAAI,OAAO,IAAI,SAAS,UAAU;AAAA,QAC9B,OAAO,SAAS,GAAG;AAAA,MACvB;AAAA,MAEA,SAAS;AAAA,KACZ;AAAA;AAAA,EAGL,SAAS,UAAU,CAAC,MAAM,SAAS;AAAA,IAC/B,MAAM,QAAO,MAAM;AAAA,IAInB,IAAI,MAAK,eAAe;AAAA,MACpB;AAAA,IACJ;AAAA,IAEA,MAAK,cAAc,MAAK,eAAe,QAAQ;AAAA,IAC/C,MAAK,gBAAgB,WAAW,MAAM;AAAA,MAClC,MAAK,gBAAgB;AAAA,MAIrB,QAAQ,GAAG,KAAK,MAAK,cAAc,CAAC,KAAK,SAAS;AAAA,QAC9C,MAAM,kBAAkB,MAAK,aAAa,QAAQ,QAAQ,KAAK,IAAI;AAAA,QAInE,IAAI,KAAK;AAAA,UACL,IAAI,IAAI,SAAS,YAAY,iBAAiB;AAAA,YAC1C,OAAO,qBAAqB,MAAM,OAAM,OAAO,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC,CAAC;AAAA,UACxF;AAAA,UAEA,MAAK,cAAc;AAAA,UAEnB,OAAO,WAAW,MAAM,OAAO;AAAA,QACnC;AAAA,QAEA,MAAM,cAAc,MAAK,MAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ;AAAA,QAEhE,IAAI,CAAC,aAAa;AAAA,UACd,OAAO,qBACH,MACA,OACA,OAAO,OACH,IAAI,MAAM,kDAAkD,GAC5D,EAAE,MAAM,eAAe,CAC3B,CAAC;AAAA,QACT;AAAA,QAEA,MAAM,QAAQ,eAAe,SAAS,MAAK,cAAc;AAAA,QAEzD,QAAQ,GAAG,OAAO,MAAK,cAAc,OAAO,OAAO,CAAC,SAAQ;AAAA,UACxD,MAAM,mBAAkB,MAAK,aAAa,QAAQ,QAAQ,KAAK,IAAI;AAAA,UAGnE,IAAI,MAAK,UAAU;AAAA,YACf;AAAA,UACJ;AAAA,UAIA,IAAI,MAAK;AAAA,YACL,IAAI,KAAI,SAAS,YAAY,kBAAiB;AAAA,cAC1C,OAAO,qBAAqB,MAAM,OAAM,OAAO,OAAO,MAAK,EAAE,MAAM,eAAe,CAAC,CAAC;AAAA,YACxF;AAAA,YAEA,MAAK,cAAc;AAAA,YAEnB,OAAO,WAAW,MAAM,OAAO;AAAA,UACnC;AAAA,UAGA,MAAK,QAAQ;AAAA,UACb,MAAK,aAAa,KAAK,IAAI;AAAA,UAC3B,MAAK,cAAc;AAAA,UACnB,WAAW,MAAM,OAAO;AAAA,SAC3B;AAAA,OACJ;AAAA,OACF,MAAK,WAAW;AAAA,IAUnB,IAAI,MAAK,cAAc,OAAO;AAAA,MAC1B,MAAK,cAAc,MAAM;AAAA,IAC7B;AAAA;AAAA,EAGJ,SAAS,oBAAoB,CAAC,MAAM,OAAM,KAAK;AAAA,IAE3C,MAAK,WAAW;AAAA,IAKhB,IAAI,MAAK,eAAe;AAAA,MACpB,aAAa,MAAK,aAAa;AAAA,IACnC;AAAA,IAEA,IAAI,MAAM,UAAU,OAAM;AAAA,MACtB,OAAO,MAAM;AAAA,IACjB;AAAA,IAEA,MAAK,QAAQ,cAAc,GAAG;AAAA;AAAA,EAKlC,SAAS,IAAI,CAAC,MAAM,SAAS,UAAU;AAAA,IAEnC,UAAU;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,MACT;AAAA,MACA,eAAe,CAAC,QAAQ;AAAA,QAAE,MAAM;AAAA;AAAA,SAC7B;AAAA,IACP;AAAA,IAEA,QAAQ,UAAU,QAAQ,WAAW;AAAA,IACrC,QAAQ,UAAU,OAAO,QAAQ,YAAY,WAAW,EAAE,SAAS,QAAQ,QAAQ,IAAI,QAAQ;AAAA,IAC/F,QAAQ,QAAQ,KAAK,IAAI,QAAQ,SAAS,GAAG,IAAI;AAAA,IACjD,QAAQ,SAAS,QAAQ,UAAU,OAAO,QAAQ,QAAQ,IAAI,QAAQ,UAAU;AAAA,IAChF,QAAQ,SAAS,KAAK,IAAI,KAAK,IAAI,QAAQ,QAAQ,QAAQ,QAAQ,CAAC,GAAG,IAAI;AAAA,IAG3E,qBAAqB,MAAM,SAAS,CAAC,KAAK,UAAS;AAAA,MAC/C,IAAI,KAAK;AAAA,QACL,OAAO,SAAS,GAAG;AAAA,MACvB;AAAA,MAGA,MAAM,YAAY,MAAM,UAAU,QAAQ,OAAO;AAAA,MAEjD,UAAU,QAAQ,MAAM;AAAA,QACpB,YAAY,OAAM,SAAS,CAAC,MAAK,OAAO,oBAAmB;AAAA,UACvD,IAAI,UAAU,MAAM,IAAG,GAAG;AAAA,YACtB;AAAA,UACJ;AAAA,UAEA,IAAI,MAAK;AAAA,YACL,OAAO,SAAS,UAAU,UAAU,CAAC;AAAA,UACzC;AAAA,UAGA,MAAM,QAAO,MAAM,SAAQ;AAAA,YACvB,cAAc,YAAY,OAAM,OAAO;AAAA,YACvC;AAAA,YACA;AAAA,YACA;AAAA,YACA,YAAY,KAAK,IAAI;AAAA,UACzB;AAAA,UAGA,WAAW,OAAM,OAAO;AAAA,UAExB,SAAS,MAAM,CAAC,qBAAqB;AAAA,YACjC,IAAI,MAAK,UAAU;AAAA,cACf,OAAO,oBACH,iBAAiB,OAAO,OAAO,IAAI,MAAM,0BAA0B,GAAG,EAAE,MAAM,YAAY,CAAC,CAAC;AAAA,YACpG;AAAA,YAGA,OAAO,OAAM,KAAK,SAAS,UAAU,MAAM,GAAG,gBAAgB;AAAA,WACjE;AAAA,SACJ;AAAA,OACJ;AAAA,KACJ;AAAA;AAAA,EAGL,SAAS,MAAM,CAAC,MAAM,SAAS,UAAU;AAAA,IACrC,UAAU;AAAA,MACN;AAAA,MACA,UAAU;AAAA,SACP;AAAA,IACP;AAAA,IAGA,qBAAqB,MAAM,SAAS,CAAC,KAAK,UAAS;AAAA,MAC/C,IAAI,KAAK;AAAA,QACL,OAAO,SAAS,GAAG;AAAA,MACvB;AAAA,MAGA,MAAM,QAAO,MAAM;AAAA,MAEnB,IAAI,CAAC,OAAM;AAAA,QACP,OAAO,SAAS,OAAO,OAAO,IAAI,MAAM,mCAAmC,GAAG,EAAE,MAAM,eAAe,CAAC,CAAC;AAAA,MAC3G;AAAA,MAEA,MAAK,iBAAiB,aAAa,MAAK,aAAa;AAAA,MACrD,MAAK,WAAW;AAAA,MAChB,OAAO,MAAM;AAAA,MAEb,WAAW,OAAM,SAAS,QAAQ;AAAA,KACrC;AAAA;AAAA,EAGL,SAAS,KAAK,CAAC,MAAM,SAAS,UAAU;AAAA,IACpC,UAAU;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV;AAAA,SACG;AAAA,IACP;AAAA,IAEA,QAAQ,QAAQ,KAAK,IAAI,QAAQ,SAAS,GAAG,IAAI;AAAA,IAGjD,qBAAqB,MAAM,SAAS,CAAC,KAAK,UAAS;AAAA,MAC/C,IAAI,KAAK;AAAA,QACL,OAAO,SAAS,GAAG;AAAA,MACvB;AAAA,MAGA,QAAQ,GAAG,KAAK,YAAY,OAAM,OAAO,GAAG,CAAC,MAAK,SAAS;AAAA,QACvD,IAAI,MAAK;AAAA,UAEL,OAAO,KAAI,SAAS,WAAW,SAAS,MAAM,KAAK,IAAI,SAAS,IAAG;AAAA,QACvE;AAAA,QAGA,OAAO,SAAS,MAAM,CAAC,YAAY,MAAM,OAAO,CAAC;AAAA,OACpD;AAAA,KACJ;AAAA;AAAA,EAGL,SAAS,QAAQ,GAAG;AAAA,IAChB,OAAO;AAAA;AAAA,EAKX,OAAO,MAAM;AAAA,IACT,WAAW,QAAQ,OAAO;AAAA,MACtB,MAAM,UAAU,MAAM,MAAM;AAAA,MAE5B,IAAI;AAAA,QAAE,QAAQ,GAAG,UAAU,YAAY,MAAM,OAAO,CAAC;AAAA,QAAK,OAAO,GAAG;AAAA,IACxE;AAAA,GACH;AAAA,EAEc,eAAO;AAAA,EACP,iBAAS;AAAA,EACT,gBAAQ;AAAA,EACR,mBAAW;AAAA;;;;ECnV1B,IAAM;AAAA,EAEN,SAAS,YAAY,CAAC,KAAI;AAAA,IACtB,MAAM,UAAU,CAAC,SAAS,YAAY,QAAQ,SAAS,QAAQ;AAAA,IAC/D,MAAM,QAAQ,KAAK,IAAG;AAAA,IAEtB,QAAQ,QAAQ,CAAC,WAAW;AAAA,MACxB,MAAM,UAAU,IAAI,SAAS;AAAA,QACzB,MAAM,WAAW,KAAK,IAAI;AAAA,QAC1B,IAAI;AAAA,QAEJ,IAAI;AAAA,UACA,MAAM,IAAG,GAAG,cAAc,GAAG,IAAI;AAAA,UACnC,OAAO,KAAK;AAAA,UACV,OAAO,SAAS,GAAG;AAAA;AAAA,QAGvB,SAAS,MAAM,GAAG;AAAA;AAAA,KAEzB;AAAA,IAED,OAAO;AAAA;AAAA,EAKX,SAAS,SAAS,CAAC,QAAQ;AAAA,IACvB,OAAO,IAAI,SAAS,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,MACjD,KAAK,KAAK,CAAC,KAAK,WAAW;AAAA,QACvB,IAAI,KAAK;AAAA,UACL,OAAO,GAAG;AAAA,QACd,EAAO;AAAA,UACH,QAAQ,MAAM;AAAA;AAAA,OAErB;AAAA,MAED,OAAO,GAAG,IAAI;AAAA,KACjB;AAAA;AAAA,EAGL,SAAS,MAAM,CAAC,QAAQ;AAAA,IACpB,OAAO,IAAI,SAAS;AAAA,MAChB,IAAI;AAAA,MACJ,IAAI;AAAA,MAEJ,KAAK,KAAK,CAAC,MAAM,YAAY;AAAA,QACzB,MAAM;AAAA,QACN,SAAS;AAAA,OACZ;AAAA,MAED,OAAO,GAAG,IAAI;AAAA,MAEd,IAAI,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MAEA,OAAO;AAAA;AAAA;AAAA,EAIf,SAAS,aAAa,CAAC,SAAS;AAAA,IAE5B,UAAU,KAAK,QAAQ;AAAA,IAGvB,QAAQ,KAAK,aAAa,QAAQ,MAAM,EAAE;AAAA,IAG1C,IACK,OAAO,QAAQ,YAAY,YAAY,QAAQ,UAAU,KACzD,QAAQ,WAAW,OAAO,QAAQ,QAAQ,YAAY,YAAY,QAAQ,QAAQ,UAAU,GAC/F;AAAA,MACE,MAAM,OAAO,OAAO,IAAI,MAAM,sCAAsC,GAAG,EAAE,MAAM,QAAQ,CAAC;AAAA,IAC5F;AAAA,IAEA,OAAO;AAAA;AAAA,EAGX,OAAO,UAAU;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA;;;;EClFA,IAAM;AAAA,EACN,MAAQ,WAAW,QAAQ;AAAA,EAE3B,eAAe,IAAI,CAAC,MAAM,SAAS;AAAA,IAC/B,MAAM,UAAU,MAAM,UAAU,SAAS,IAAI,EAAE,MAAM,OAAO;AAAA,IAE5D,OAAO,UAAU,OAAO;AAAA;AAAA,EAG5B,SAAS,QAAQ,CAAC,MAAM,SAAS;AAAA,IAC7B,MAAM,UAAU,OAAO,SAAS,IAAI,EAAE,MAAM,cAAc,OAAO,CAAC;AAAA,IAElE,OAAO,OAAO,OAAO;AAAA;AAAA,EAGzB,SAAS,MAAM,CAAC,MAAM,SAAS;AAAA,IAC3B,OAAO,UAAU,SAAS,MAAM,EAAE,MAAM,OAAO;AAAA;AAAA,EAGnD,SAAS,UAAU,CAAC,MAAM,SAAS;AAAA,IAC/B,OAAO,OAAO,SAAS,MAAM,EAAE,MAAM,cAAc,OAAO,CAAC;AAAA;AAAA,EAG/D,SAAS,KAAK,CAAC,MAAM,SAAS;AAAA,IAC1B,OAAO,UAAU,SAAS,KAAK,EAAE,MAAM,OAAO;AAAA;AAAA,EAGlD,SAAS,SAAS,CAAC,MAAM,SAAS;AAAA,IAC9B,OAAO,OAAO,SAAS,KAAK,EAAE,MAAM,cAAc,OAAO,CAAC;AAAA;AAAA,EAG9D,OAAO,UAAU;AAAA,EACjB,OAAO,QAAQ,OAAO;AAAA,EACtB,OAAO,QAAQ,SAAS;AAAA,EACxB,OAAO,QAAQ,WAAW;AAAA,EAC1B,OAAO,QAAQ,aAAa;AAAA,EAC5B,OAAO,QAAQ,QAAQ;AAAA,EACvB,OAAO,QAAQ,YAAY;AAAA;;;ACvC3B;;;ACIA;AAJA;AACA;AACA;AACA;;;ACmBA,IAAM,wBAA8D;AAAA,EAClE,IAAI;AAAA,EACJ,OAAO;AAAA,IACL,KAAK;AAAA,IACL,SAAS;AAAA,EACX;AACF;AAEA,IAAM,iBAAiB;AAEhB,SAAS,mBAAmB,CAAC,OAA8D;AAAA,EAChG,IAAI,MAAM,KAAK,MAAM;AAAA,IAAO,OAAO;AAAA,EACnC,IAAI,MAAM,SAAS,IAAI;AAAA,IAAG,OAAO;AAAA,EACjC,IAAI,CAAC,MAAM,WAAW,UAAU;AAAA,IAAG,OAAO;AAAA,EAE1C,MAAM,eAAe,MAAM,QAAQ,KAAK,WAAW,MAAM;AAAA,EACzD,IAAI,iBAAiB;AAAA,IAAI,OAAO;AAAA,EAChC,IAAI,MAAM,MAAM,WAAW,QAAQ,YAAY,EAAE,YAAY,MAAM,cAAc;AAAA,IAC/E,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAU,MAAM,MAAM,YAAY,EAAE,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE;AAAA,EAClE,WAAW,WAAW,QAAQ,MAAM,GAAG,GAAG;AAAA,IACxC,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,UAAU,mBAAmB,OAAO;AAAA,MACpC,MAAM;AAAA,MACN,OAAO;AAAA;AAAA,IAET,IAAI,YAAY,OAAO,YAAY;AAAA,MAAM,OAAO;AAAA,EAClD;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,IAAI,IAAI,KAAK;AAAA,IACtB,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAGT,IACE,OAAO,aAAa,YACpB,OAAO,aAAa,gBACpB,OAAO,aAAa,MACpB,OAAO,aAAa,MACpB,OAAO,SAAS,MAChB,OAAO,WAAW,MAClB,OAAO,SAAS,IAChB;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,OAAO,SAAS,MAAM,GAAG;AAAA,EAC1C,IAAI,SAAS,WAAW,KAAK,SAAS,OAAO,MAAM,SAAS,OAAO,QAAQ;AAAA,IACzE,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,SAAS;AAAA,EAC1B,MAAM,gBAAgB,SAAS;AAAA,EAC/B,MAAM,aAAa,SAAS;AAAA,EAC5B,IACE,aAAa,aACb,kBAAkB,aAClB,eAAe,aACf,CAAC,eAAe,KAAK,QAAQ,KAC7B,CAAC,eAAe,KAAK,aAAa,KAClC,CAAC,QAAQ,KAAK,UAAU,GACxB;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,OAAO,UAAU;AAAA,EAChC,IAAI,CAAC,OAAO,cAAc,MAAM,KAAK,UAAU;AAAA,IAAG,OAAO;AAAA,EAEzD,MAAM,QAAQ,SAAS,YAAY;AAAA,EACnC,MAAM,aAAa,cAAc,YAAY;AAAA,EAG7C,MAAM,MAAM,sBAAsB,SAAS,mBAAmB;AAAA,EAC9D,MAAM,QAAQ,EAAE,KAAK,OAAO,YAAY,OAAO;AAAA,EAG/C,OAAO,EAAE,IAAI,MAAM,MAA+B;AAAA;AAG7C,SAAS,oBAAoB,CAAC,aAAqC;AAAA,EACxE,OAAO,GAAG,YAAY,SAAS,YAAY,cAAc,YAAY;AAAA;;;ADnGhE,IAAM,gCAAgC;AA6C7C,IAAM,mBAAoD;AAAA,EACxD,IAAI;AAAA,EACJ,OAAO;AAAA,IACL,KAAK;AAAA,IACL,SAAS;AAAA,EACX;AACF;AAEA,IAAM,wBAAwB;AAC9B,IAAM,yBAAyB;AAE/B,SAAS,gBAAgB,CAAC,WAA6B,SAAiB,OAAkC;AAAA,EACxG,OAAO,EAAE,KAAK,oBAAoB,WAAW,SAAS,MAAM;AAAA;AAG9D,SAAS,QAAQ,CAAC,OAAkD;AAAA,EAClE,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAAA;AAG5E,SAAS,YAAY,CAAC,OAAgC,MAAkC;AAAA,EACtF,MAAM,SAAS,OAAO,KAAK,KAAK;AAAA,EAChC,OAAO,OAAO,WAAW,KAAK,UAAU,KAAK,MAAM,CAAC,QAAQ,OAAO,OAAO,OAAO,GAAG,CAAC;AAAA;AAGvF,SAAS,UAAU,CAAC,OAA4E;AAAA,EAC9F,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,aAAa,OAAO,CAAC,WAAW,cAAc,CAAC;AAAA,IAAG,OAAO;AAAA,EAClF,IAAI,MAAM,YAAY,KAAK,CAAC,MAAM,QAAQ,MAAM,YAAY;AAAA,IAAG,OAAO;AAAA,EACtE,IAAI,MAAM,aAAa,SAAS;AAAA,IAA+B,OAAO;AAAA,EAEtE,MAAM,cAAuC,CAAC;AAAA,EAC9C,MAAM,OAAO,IAAI;AAAA,EACjB,WAAW,QAAQ,MAAM,cAAc;AAAA,IACrC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,aAAa,MAAM,CAAC,OAAO,YAAY,CAAC;AAAA,MAAG,OAAO;AAAA,IAC1E,IAAI,OAAO,KAAK,QAAQ,YAAY,OAAO,KAAK,eAAe;AAAA,MAAU,OAAO;AAAA,IAEhF,MAAM,SAAS,oBAAoB,KAAK,GAAG;AAAA,IAC3C,IAAI,CAAC,OAAO,MAAM,OAAO,MAAM,QAAQ,KAAK,OAAO,KAAK,IAAI,KAAK,GAAG;AAAA,MAAG,OAAO;AAAA,IAE9E,MAAM,aAAa,IAAI,KAAK,KAAK,UAAU;AAAA,IAC3C,IAAI,OAAO,MAAM,WAAW,QAAQ,CAAC,KAAK,WAAW,YAAY,MAAM,KAAK;AAAA,MAAY,OAAO;AAAA,IAE/F,KAAK,IAAI,KAAK,GAAG;AAAA,IACjB,YAAY,KAAK,EAAE,aAAa,OAAO,OAAO,YAAY,KAAK,WAAW,CAAC;AAAA,EAC7E;AAAA,EAEA,OAAO,EAAE,IAAI,MAAM,OAAO,YAAY;AAAA;AAGxC,SAAS,aAAa,CAAC,OAAyB;AAAA,EAC9C,OAAO,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS;AAAA;AAGrE,SAAS,QAAQ,CAAC,WAA2B;AAAA,EAC3C,OAAO,GAAG,WAAW,QAAQ,EAAE,OAAO,SAAS,EAAE,OAAO,KAAK;AAAA;AAGxD,SAAS,qBAAqB,CACnC,cAA4D,QAAQ,KACpE,OAAe,QAAQ,GACf;AAAA,EACR,MAAM,WAAW,YAAY,iBAAiB,KAAK,MAAM,UAAU,OAAO;AAAA,EAC1E,OAAO,KAAK,UAAU,YAAY,qBAAqB;AAAA;AAGlD,SAAS,gBAAgB,CAAC,UAA8D,CAAC,GAAe;AAAA,EAC7G,MAAM,YAAY,QAAQ,aAAa,sBAAsB;AAAA,EAC7D,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAAA,EAEtC,eAAe,WAAW,CAAC,WAQzB;AAAA,IACA,MAAM,YAAY,KAAK,WAAW,SAAS,SAAS,CAAC;AAAA,IACrD,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,MAAM,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,MAC1C,MAAM,UAAU,MAAM,4BAAS,WAAW;AAAA,QACxC,UAAU;AAAA,QACV,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS,EAAE,SAAS,IAAI,QAAQ,GAAG,YAAY,IAAI,YAAY,IAAI;AAAA,QACnE,eAAe,CAAC,UAAU;AAAA,UACxB,cAAc;AAAA;AAAA,MAElB,CAAC;AAAA,MACD,OAAO,EAAE,IAAI,MAAM,OAAO,EAAE,SAAS,aAAa,MAAM,YAAY,EAAE;AAAA,MACtE,OAAO,OAAO;AAAA,MACd,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO,iBAAiB,SAAS,iDAAiD,KAAK;AAAA,MACzF;AAAA;AAAA;AAAA,EAIJ,eAAe,QAAwB,CACrC,WACA,WACoD;AAAA,IACpD,MAAM,OAAO,MAAM,YAAY,SAAS;AAAA,IACxC,IAAI,CAAC,KAAK;AAAA,MAAI,OAAO;AAAA,IACrB,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,SAAS,MAAM,UAAU;AAAA,MACzB,OAAO,OAAO;AAAA,MACd,MAAM,KAAK,MAAM,QAAQ,EAAE,MAAM,MAAG;AAAA,QAAG;AAAA,OAAS;AAAA,MAChD,MAAM;AAAA;AAAA,IAGR,IAAI;AAAA,MACF,MAAM,KAAK,MAAM,QAAQ;AAAA,MACzB,OAAO,OAAO;AAAA,MACd,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO,iBAAiB,SAAS,mDAAmD,KAAK;AAAA,MAC3F;AAAA;AAAA,IAGF,MAAM,aAAa,KAAK,MAAM,YAAY;AAAA,IAC1C,IAAI,eAAe,WAAW;AAAA,MAC5B,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO,iBAAiB,SAAS,uDAAuD,UAAU;AAAA,MACpG;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,eAAe,YAAY,CACzB,WAC6E;AAAA,IAC7E,MAAM,OAAO,KAAK,WAAW,SAAS,SAAS,CAAC;AAAA,IAChD,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,UAAU,MAAM,SAAS,MAAM,MAAM;AAAA,MACrC,OAAO,OAAO;AAAA,MACd,IAAI,cAAc,KAAK;AAAA,QAAG,OAAO,EAAE,IAAI,MAAM,OAAO,UAAU;AAAA,MAC9D,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO,iBAAiB,QAAQ,iDAAiD,KAAK;AAAA,MACxF;AAAA;AAAA,IAGF,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,UAAU,KAAK,MAAM,OAAO;AAAA,MAC5B,MAAM;AAAA,MACN,OAAO;AAAA;AAAA,IAET,OAAO,WAAW,OAAO;AAAA;AAAA,EAG3B,eAAe,IAAI,CAAC,WAAoF;AAAA,IACtG,MAAM,SAAS,MAAM,aAAa,SAAS;AAAA,IAC3C,IAAI,CAAC,OAAO;AAAA,MAAI,OAAO;AAAA,IACvB,OAAO,EAAE,IAAI,MAAM,OAAO,OAAO,SAAS,CAAC,EAAE;AAAA;AAAA,EAG/C,eAAe,KAAK,CAClB,WACA,aACyC;AAAA,IACzC,MAAM,cAAc,KAAK,WAAW,SAAS,SAAS,CAAC;AAAA,IACvD,MAAM,YAAY,GAAG,eAAe,QAAQ,OAAO,WAAW;AAAA,IAC9D,MAAM,QAAwB;AAAA,MAC5B,SAAS;AAAA,MACT,cAAc,YAAY,IAAI,CAAC,gBAAgB;AAAA,QAC7C,KAAK,WAAW,YAAY;AAAA,QAC5B,YAAY,WAAW;AAAA,MACzB,EAAE;AAAA,IACJ;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,MAC1C,MAAM,UAAU,WAAW,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC;AAAA,GAAO,EAAE,MAAM,IAAM,CAAC;AAAA,MACjF,MAAM,OAAO,WAAW,WAAW;AAAA,MACnC,OAAO,EAAE,IAAI,MAAM,OAAO,UAAU;AAAA,MACpC,OAAO,OAAO;AAAA,MACd,MAAM,GAAG,WAAW,EAAE,OAAO,KAAK,CAAC,EAAE,MAAM,MAAG;AAAA,QAAG;AAAA,OAAS;AAAA,MAC1D,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO,iBAAiB,SAAS,kDAAkD,KAAK;AAAA,MAC1F;AAAA;AAAA;AAAA,EAIJ,OAAO;AAAA,IACL,MAAM;AAAA,SACA,OAAM,CAAC,WAAW,aAAa;AAAA,MACnC,OAAO,SAAsD,WAAW,YAAY;AAAA,QAClF,MAAM,UAAU,MAAM,KAAK,SAAS;AAAA,QACpC,IAAI,CAAC,QAAQ;AAAA,UAAI,OAAO;AAAA,QACxB,IAAI,QAAQ,MAAM,KAAK,CAAC,eAAe,WAAW,YAAY,QAAQ,YAAY,GAAG,GAAG;AAAA,UACtF,OAAO,EAAE,IAAI,MAAM,OAAO,mBAAmB;AAAA,QAC/C;AAAA,QACA,IAAI,QAAQ,MAAM,UAAU,+BAA+B;AAAA,UACzD,OAAO;AAAA,YACL,IAAI;AAAA,YACJ,OAAO;AAAA,cACL,KAAK;AAAA,cACL,OAAO;AAAA,cACP,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,QAEA,MAAM,UAAU,MAAM,MAAM,WAAW,CAAC,GAAG,QAAQ,OAAO,EAAE,aAAa,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AAAA,QAC3G,IAAI,CAAC,QAAQ;AAAA,UAAI,OAAO;AAAA,QACxB,OAAO,EAAE,IAAI,MAAM,OAAO,QAAQ;AAAA,OACnC;AAAA;AAAA,SAEG,OAAM,CAAC,WAAW,aAAa;AAAA,MACnC,OAAO,SAA6C,WAAW,YAAY;AAAA,QACzE,MAAM,UAAU,MAAM,KAAK,SAAS;AAAA,QACpC,IAAI,CAAC,QAAQ;AAAA,UAAI,OAAO;AAAA,QACxB,MAAM,OAAO,QAAQ,MAAM,OAAO,CAAC,eAAe,WAAW,YAAY,QAAQ,YAAY,GAAG;AAAA,QAChG,IAAI,KAAK,WAAW,QAAQ,MAAM;AAAA,UAAQ,OAAO,EAAE,IAAI,MAAM,OAAO,SAAS;AAAA,QAE7E,MAAM,UAAU,MAAM,MAAM,WAAW,IAAI;AAAA,QAC3C,IAAI,CAAC,QAAQ;AAAA,UAAI,OAAO;AAAA,QACxB,OAAO,EAAE,IAAI,MAAM,OAAO,UAAU;AAAA,OACrC;AAAA;AAAA,SAEG,eAAc,CAAC,WAAW,QAAQ;AAAA,MACtC,OAAO,SAA8C,WAAW,YAAY;AAAA,QAC1E,MAAM,UAAU,MAAM,KAAK,SAAS;AAAA,QACpC,IAAI,CAAC,QAAQ;AAAA,UAAI,OAAO;AAAA,QACxB,MAAM,UAAU,QAAQ,MAAM,OAAO,CAAC,eAAe,WAAW,YAAY,WAAW,MAAM;AAAA,QAC7F,IAAI,QAAQ,WAAW;AAAA,UAAG,OAAO,EAAE,IAAI,MAAM,OAAO,EAAE,KAAK,SAAS,EAAE;AAAA,QACtE,IAAI,QAAQ,SAAS,GAAG;AAAA,UACtB,OAAO;AAAA,YACL,IAAI;AAAA,YACJ,OAAO,EAAE,KAAK,aAAa,cAAc,QAAQ,IAAI,CAAC,eAAe,WAAW,WAAW,EAAE;AAAA,UAC/F;AAAA,QACF;AAAA,QAEA,MAAM,QAAQ,QAAQ;AAAA,QACtB,IAAI,UAAU;AAAA,UAAW,OAAO,EAAE,IAAI,MAAM,OAAO,EAAE,KAAK,SAAS,EAAE;AAAA,QACrE,MAAM,OAAO,QAAQ,MAAM,OAAO,CAAC,eAAe,WAAW,YAAY,QAAQ,MAAM,YAAY,GAAG;AAAA,QACtG,MAAM,UAAU,MAAM,MAAM,WAAW,IAAI;AAAA,QAC3C,IAAI,CAAC,QAAQ;AAAA,UAAI,OAAO;AAAA,QACxB,OAAO,EAAE,IAAI,MAAM,OAAO,EAAE,KAAK,WAAW,aAAa,MAAM,YAAY,EAAE;AAAA,OAC9E;AAAA;AAAA,SAEG,cAAa,CAAC,WAAW;AAAA,MAC7B,OAAO,SAA6C,WAAW,YAAY;AAAA,QACzE,MAAM,UAAU,MAAM,aAAa,SAAS;AAAA,QAC5C,IAAI,CAAC,QAAQ;AAAA,UAAI,OAAO;AAAA,QACxB,IAAI,QAAQ,UAAU;AAAA,UAAW,OAAO,EAAE,IAAI,MAAM,OAAO,SAAS;AAAA,QACpE,IAAI;AAAA,UACF,MAAM,GAAG,KAAK,WAAW,SAAS,SAAS,CAAC,GAAG,EAAE,OAAO,KAAK,CAAC;AAAA,UAC9D,OAAO,EAAE,IAAI,MAAM,OAAO,UAAU;AAAA,UACpC,OAAO,OAAO;AAAA,UACd,OAAO;AAAA,YACL,IAAI;AAAA,YACJ,OAAO,iBAAiB,SAAS,mDAAmD,KAAK;AAAA,UAC3F;AAAA;AAAA,OAEH;AAAA;AAAA,EAEL;AAAA;;;ADlTK,MAAM,oBAAoB,MAAM;AAAA,EAI1B;AAAA,EAHO,OAAO;AAAA,EAEzB,WAAW,CACA,MACT,SACA;AAAA,IACA,MAAM,OAAO;AAAA,IAHJ;AAAA;AAKb;AAEA,SAAS,WAAW,CAAC,SAAqC;AAAA,EACxD,OAAO,IAAI,YAAY,QAAQ,KAAK,QAAQ,OAAO;AAAA;AAGrD,SAAS,mBAAmB,CAAC,YAAuC;AAAA,EAClE,IAAI,WAAW,SAAS;AAAA,IAAG,OAAO,WAAW,KAAK,EAAE;AAAA,EACpD,IAAI,WAAW,WAAW;AAAA,IAAG,OAAO,WAAW,KAAK,OAAO;AAAA,EAC3D,OAAO,GAAG,WAAW,MAAM,GAAG,EAAE,EAAE,KAAK,IAAI,UAAU,WAAW,GAAG,EAAE;AAAA;AAGhE,SAAS,iBAAiB,CAAC,OAA0B;AAAA,EAC1D,OAAO;AAAA,SACC,MAAK,GAAG,SAAS;AAAA,MACrB,IAAI,MAAM,SAAS;AAAA,QAAmB;AAAA,MACtC,MAAM,SAAS,MAAM,MAAM,cAAc,MAAM,WAAW,KAAK,EAAE;AAAA,MACjE,IAAI,CAAC,OAAO;AAAA,QAAI,MAAM,YAAY,OAAO,KAAK;AAAA;AAAA,IAEhD,MAAM;AAAA,MACJ,WAAW,KAAK;AAAA,QACd,aAAa;AAAA,QACb,MAAM;AAAA,UACJ,KAAK,KAAK,OAAO,OAAO,EAAE,SAAS,6DAA6D;AAAA,QAClG;AAAA,aACM,QAAO,CAAC,MAAM,SAAS;AAAA,UAC3B,MAAM,cAAc,oBAAoB,KAAK,GAAG;AAAA,UAChD,IAAI,CAAC,YAAY;AAAA,YAAI,MAAM,IAAI,YAAY,YAAY,MAAM,KAAK,YAAY,MAAM,OAAO;AAAA,UAE3F,MAAM,SAAS,MAAM,MAAM,OAAO,QAAQ,WAAW,YAAY,KAAK;AAAA,UACtE,IAAI,CAAC,OAAO;AAAA,YAAI,MAAM,YAAY,OAAO,KAAK;AAAA,UAE9C,MAAM,YAAY,qBAAqB,YAAY,KAAK;AAAA,UACxD,OAAO,OAAO,UAAU,UACpB,YAAY,+BACZ,GAAG;AAAA;AAAA,MAEX,CAAC;AAAA,MACD,WAAW,KAAK;AAAA,QACd,aAAa;AAAA,QACb,MAAM;AAAA,UACJ,cAAc,KAAK,OAChB,MAAM,CAAC,KAAK,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,OAAO,gBAAgB,GAAG,KAAK,OAAO,OAAO,CAAC,CAAC,EAChG,SAAS,6FAA6F;AAAA,QAC3G;AAAA,aACM,QAAO,CAAC,MAAM,SAAS;AAAA,UAC3B,IAAI,OAAO,KAAK,iBAAiB,UAAU;AAAA,YACzC,IAAI,CAAC,OAAO,cAAc,KAAK,YAAY,KAAK,KAAK,gBAAgB,GAAG;AAAA,cACtE,MAAM,IAAI,YACR,4BACA,iEACF;AAAA,YACF;AAAA,YACA,MAAM,UAAS,MAAM,MAAM,eAAe,QAAQ,WAAW,KAAK,YAAY;AAAA,YAC9E,IAAI,CAAC,QAAO;AAAA,cAAI,MAAM,YAAY,QAAO,KAAK;AAAA,YAC9C,IAAI,QAAO,MAAM,QAAQ,UAAU;AAAA,cACjC,OAAO,iBAAiB,KAAK;AAAA,YAC/B;AAAA,YACA,IAAI,QAAO,MAAM,QAAQ,aAAa;AAAA,cACpC,MAAM,aAAa,QAAO,MAAM,aAAa,IAAI,oBAAoB;AAAA,cACrE,MAAM,IAAI,YACR,8BACA,iBAAiB,KAAK,wBAAwB,oBAAoB,UAAU,6CAC9E;AAAA,YACF;AAAA,YACA,OAAO,YAAY,qBAAqB,QAAO,MAAM,WAAW;AAAA,UAClE;AAAA,UAEA,MAAM,cAAc,oBAAoB,KAAK,YAAY;AAAA,UACzD,IAAI,CAAC,YAAY;AAAA,YAAI,MAAM,IAAI,YAAY,YAAY,MAAM,KAAK,YAAY,MAAM,OAAO;AAAA,UAE3F,MAAM,SAAS,MAAM,MAAM,OAAO,QAAQ,WAAW,YAAY,KAAK;AAAA,UACtE,IAAI,CAAC,OAAO;AAAA,YAAI,MAAM,YAAY,OAAO,KAAK;AAAA,UAE9C,MAAM,YAAY,qBAAqB,YAAY,KAAK;AAAA,UACxD,OAAO,OAAO,UAAU,YACpB,YAAY,iCACZ,GAAG;AAAA;AAAA,MAEX,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAGF,IAAM,SAAwC;AAAA,EAC5C,IAAI;AAAA,EACJ,QAAQ,YAAY,kBAAkB,iBAAiB,CAAC;AAC1D;AAEA,IAAe;",
22
- "debugId": "8B547DD45DB1BAE364756E2164756E21",
33
+ "mappings": "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",
34
+ "debugId": "2C26781E1C009A7864756E2164756E21",
23
35
  "names": []
24
36
  }