prismcast 1.4.2 → 1.5.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.
- package/dist/app.js +18 -1
- package/dist/app.js.map +1 -1
- package/dist/browser/cdp.d.ts +2 -1
- package/dist/browser/cdp.js +44 -23
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/channelSelection.d.ts +45 -1
- package/dist/browser/channelSelection.js +164 -27
- package/dist/browser/channelSelection.js.map +1 -1
- package/dist/browser/display.d.ts +0 -4
- package/dist/browser/display.js +0 -7
- package/dist/browser/display.js.map +1 -1
- package/dist/browser/index.d.ts +5 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/precaching.d.ts +5 -0
- package/dist/browser/precaching.js +112 -0
- package/dist/browser/precaching.js.map +1 -0
- package/dist/browser/tuning/directv.d.ts +2 -0
- package/dist/browser/tuning/directv.js +723 -0
- package/dist/browser/tuning/directv.js.map +1 -0
- package/dist/browser/tuning/fox.d.ts +2 -2
- package/dist/browser/tuning/fox.js +141 -22
- package/dist/browser/tuning/fox.js.map +1 -1
- package/dist/browser/tuning/hbo.d.ts +2 -2
- package/dist/browser/tuning/hbo.js +110 -41
- package/dist/browser/tuning/hbo.js.map +1 -1
- package/dist/browser/tuning/hulu.d.ts +2 -2
- package/dist/browser/tuning/hulu.js +442 -168
- package/dist/browser/tuning/hulu.js.map +1 -1
- package/dist/browser/tuning/sling.d.ts +2 -2
- package/dist/browser/tuning/sling.js +200 -56
- package/dist/browser/tuning/sling.js.map +1 -1
- package/dist/browser/tuning/youtubeTv.d.ts +2 -2
- package/dist/browser/tuning/youtubeTv.js +243 -57
- package/dist/browser/tuning/youtubeTv.js.map +1 -1
- package/dist/browser/video.d.ts +1 -1
- package/dist/browser/video.js +4 -2
- package/dist/browser/video.js.map +1 -1
- package/dist/channels/index.js +280 -34
- package/dist/channels/index.js.map +1 -1
- package/dist/config/health.d.ts +78 -0
- package/dist/config/health.js +202 -0
- package/dist/config/health.js.map +1 -0
- package/dist/config/paths.d.ts +10 -0
- package/dist/config/paths.js +14 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/profiles.d.ts +6 -4
- package/dist/config/profiles.js +65 -14
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/providerPacks.d.ts +46 -0
- package/dist/config/providerPacks.js +200 -0
- package/dist/config/providerPacks.js.map +1 -0
- package/dist/config/providers.d.ts +36 -3
- package/dist/config/providers.js +168 -8
- package/dist/config/providers.js.map +1 -1
- package/dist/config/sites.d.ts +1 -12
- package/dist/config/sites.js +38 -5
- package/dist/config/sites.js.map +1 -1
- package/dist/config/userChannels.d.ts +12 -0
- package/dist/config/userChannels.js +81 -14
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +5 -1
- package/dist/config/userConfig.js +58 -6
- package/dist/config/userConfig.js.map +1 -1
- package/dist/config/userProfiles.d.ts +81 -0
- package/dist/config/userProfiles.js +424 -0
- package/dist/config/userProfiles.js.map +1 -0
- package/dist/routes/config/channels/index.d.ts +3 -0
- package/dist/routes/config/channels/index.js +3 -0
- package/dist/routes/config/channels/index.js.map +1 -0
- package/dist/routes/config/channels/routes.d.ts +6 -0
- package/dist/routes/config/channels/routes.js +797 -0
- package/dist/routes/config/channels/routes.js.map +1 -0
- package/dist/routes/config/channels/table.d.ts +46 -0
- package/dist/routes/config/channels/table.js +811 -0
- package/dist/routes/config/channels/table.js.map +1 -0
- package/dist/routes/config/index.d.ts +37 -0
- package/dist/routes/config/index.js +81 -0
- package/dist/routes/config/index.js.map +1 -0
- package/dist/routes/config/providers.d.ts +18 -0
- package/dist/routes/config/providers.js +573 -0
- package/dist/routes/config/providers.js.map +1 -0
- package/dist/routes/config/settings.d.ts +39 -0
- package/dist/routes/config/settings.js +820 -0
- package/dist/routes/config/settings.js.map +1 -0
- package/dist/routes/index.d.ts +3 -2
- package/dist/routes/index.js +7 -4
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/playlist.d.ts +5 -1
- package/dist/routes/playlist.js +32 -7
- package/dist/routes/playlist.js.map +1 -1
- package/dist/routes/providers.d.ts +6 -0
- package/dist/routes/providers.js +166 -0
- package/dist/routes/providers.js.map +1 -0
- package/dist/routes/root/content.d.ts +32 -0
- package/dist/routes/root/content.js +857 -0
- package/dist/routes/root/content.js.map +1 -0
- package/dist/routes/root/index.js +197 -0
- package/dist/routes/root/index.js.map +1 -0
- package/dist/routes/root/scripts/channels.d.ts +1 -0
- package/dist/routes/root/scripts/channels.js +745 -0
- package/dist/routes/root/scripts/channels.js.map +1 -0
- package/dist/routes/root/scripts/config.d.ts +1 -0
- package/dist/routes/root/scripts/config.js +1662 -0
- package/dist/routes/root/scripts/config.js.map +1 -0
- package/dist/routes/root/scripts/index.d.ts +3 -0
- package/dist/routes/root/scripts/index.js +8 -0
- package/dist/routes/root/scripts/index.js.map +1 -0
- package/dist/routes/root/scripts/status.d.ts +1 -0
- package/dist/routes/root/scripts/status.js +436 -0
- package/dist/routes/root/scripts/status.js.map +1 -0
- package/dist/routes/root/styles.d.ts +5 -0
- package/dist/routes/root/styles.js +447 -0
- package/dist/routes/root/styles.js.map +1 -0
- package/dist/routes/ui.js +8 -3
- package/dist/routes/ui.js.map +1 -1
- package/dist/service/commands.d.ts +5 -3
- package/dist/service/commands.js +117 -33
- package/dist/service/commands.js.map +1 -1
- package/dist/service/generators.d.ts +27 -0
- package/dist/service/generators.js +97 -6
- package/dist/service/generators.js.map +1 -1
- package/dist/streaming/hls.js +18 -1
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/lifecycle.js +1 -1
- package/dist/streaming/lifecycle.js.map +1 -1
- package/dist/streaming/monitor.d.ts +1 -38
- package/dist/streaming/monitor.js +2 -289
- package/dist/streaming/monitor.js.map +1 -1
- package/dist/streaming/recovery.d.ts +143 -0
- package/dist/streaming/recovery.js +286 -0
- package/dist/streaming/recovery.js.map +1 -0
- package/dist/streaming/registry.d.ts +1 -1
- package/dist/streaming/setup.d.ts +1 -1
- package/dist/streaming/setup.js +3 -1
- package/dist/streaming/setup.js.map +1 -1
- package/dist/streaming/statusEmitter.d.ts +4 -2
- package/dist/streaming/statusEmitter.js +5 -0
- package/dist/streaming/statusEmitter.js.map +1 -1
- package/dist/types/channels.d.ts +68 -0
- package/dist/types/channels.js +2 -0
- package/dist/types/channels.js.map +1 -0
- package/dist/types/config.d.ts +127 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +7 -429
- package/dist/types/index.js +1 -5
- package/dist/types/index.js.map +1 -1
- package/dist/types/profiles.d.ts +141 -0
- package/dist/types/profiles.js +2 -0
- package/dist/types/profiles.js.map +1 -0
- package/dist/types/selection.d.ts +101 -0
- package/dist/types/selection.js +6 -0
- package/dist/types/selection.js.map +1 -0
- package/dist/types/shared.d.ts +7 -0
- package/dist/types/shared.js +6 -0
- package/dist/types/shared.js.map +1 -0
- package/dist/types/streaming.d.ts +96 -0
- package/dist/types/streaming.js +2 -0
- package/dist/types/streaming.js.map +1 -0
- package/dist/utils/debugFilter.js +3 -1
- package/dist/utils/debugFilter.js.map +1 -1
- package/dist/utils/format.d.ts +7 -0
- package/dist/utils/format.js +22 -0
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/sanitize.d.ts +14 -0
- package/dist/utils/sanitize.js +37 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/package.json +5 -3
- package/dist/routes/config.d.ts +0 -76
- package/dist/routes/config.js +0 -2187
- package/dist/routes/config.js.map +0 -1
- package/dist/routes/root.js +0 -3158
- package/dist/routes/root.js.map +0 -1
- /package/dist/routes/{root.d.ts → root/index.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/routes/config/settings.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACzG,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,sBAAsB,EAAE,SAAS,EAAE,gBAAgB,EACjJ,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAErF,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,KAAc,EAAE,WAAoB;IAEjE,IAAG,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;QAE7C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAG,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAE7B,6GAA6G;QAC7G,IAAG,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,EAAE,CAAC;YAE/C,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAG,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAE7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wGAAwG;IACxG,OAAO,MAAM,CAAC,KAAgB,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,KAAc,EAAE,OAAwB;IAE9D,IAAG,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;QAE7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mGAAmG;IACnG,IAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAExB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,IAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAEzD,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;QAEpD,gJAAgJ;QAChJ,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnF,OAAO,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,sDAAsD;IACtD,IAAG,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAE9B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,KAAwB,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,OAAwB;IAE9C,OAAO,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,kBAAkB,GAAkE;IAExF,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAClD,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;CACnD,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,KAAa,EAAE,IAAY;IAErD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEvC,IAAG,CAAC,KAAK,EAAE,CAAC;QAEV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAwB;IAE7C,IAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAE1D,OAAO,OAAO,CAAC,GAAG,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAwB;IAE7C,IAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAE1D,OAAO,OAAO,CAAC,GAAG,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,OAAwB;IAElD,iDAAiD;IACjD,IAAG,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAE3B,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,6EAA6E;IAC7E,IAAG,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAE3D,0JAA0J;QAC1J,8BAA8B;QAC9B,IAAG,OAAO,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;YAE9C,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAExE,kEAAkE;QAClE,IAAG,SAAS,IAAI,CAAC,EAAE,CAAC;YAElB,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,sDAAsD;QACtD,IAAG,SAAS,IAAI,EAAE,EAAE,CAAC;YAEnB,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,+BAA+B;QAC/B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,yEAAyE;IACzE,IAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;QAE9D,+EAA+E;QAC/E,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;QAE7B,IAAG,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAExD,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;QACnD,CAAC;QAED,yEAAyE;QACzE,IAAG,UAAU,KAAK,SAAS,EAAE,CAAC;YAE5B,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,uHAAuH;QACvH,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE/E,IAAG,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAE5B,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,0FAA0F;QAC1F,IAAG,UAAU,IAAI,CAAC,EAAE,CAAC;YAEnB,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,iDAAiD;QACjD,IAAG,UAAU,IAAI,CAAC,EAAE,CAAC;YAEnB,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,sBAAsB;QACtB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,4GAA4G;IAC5G,IAAG,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;QAE1D,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,kCAAkC;IAClC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,oBAAoB,CAAC,OAAwB,EAAE,YAAqB,EAAE,YAAqB,EAAE,WAA+B,EACnI,eAAwB;IAExB,MAAM,UAAU,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC;IACzF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,eAAe,KAAK,SAAS,CAAC;IAC/C,MAAM,UAAU,GAAG,CAAC,UAAU,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAEhF,8BAA8B;IAC9B,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAE1C,iDAAiD;IACjD,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/E,sJAAsJ;IACtJ,mEAAmE;IACnE,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,MAAM,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEpG,wCAAwC;IACxC,MAAM,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;IAEpC,IAAG,UAAU,EAAE,CAAC;QAEd,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,IAAG,UAAU,EAAE,CAAC;QAEd,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,IAAG,oBAAoB,EAAE,CAAC;QAExB,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,iGAAiG;IACjG,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,qBAAqB,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAElF,MAAM,KAAK,GAAG;QACZ,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,WAAW,GAAG,GAAG;QACnE,0BAA0B;QAC1B,oCAAoC,GAAG,OAAO,GAAG,KAAK;KACvD,CAAC;IAEF,4CAA4C;IAC5C,IAAG,UAAU,EAAE,CAAC;QAEd,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtC,IAAG,WAAW,KAAK,SAAS,EAAE,CAAC;QAE7B,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEvB,sEAAsE;IACtE,IAAI,wBAAwB,GAAqB,IAAI,CAAC;IAEtD,4JAA4J;IAC5J,2EAA2E;IAC3E,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,IAAG,cAAc,EAAE,CAAC;QAElB,6BAA6B;QAC7B,MAAM,WAAW,GAAG;YAClB,sBAAsB,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI;YACxF,OAAO,GAAG,OAAO,GAAG,IAAI;YACxB,SAAS,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI;YAC/B,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI;SACpE,CAAC;QAEF,IAAG,UAAU,EAAE,CAAC;YAEd,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QAED,IAAG,oBAAoB,EAAE,CAAC;YAExB,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAErD,yEAAyE;QACzE,IAAG,OAAO,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;YAE9C,MAAM,aAAa,GAAG,+BAA+B,EAAE,CAAC;YAExD,KAAI,MAAM,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;gBAE1C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,QAAQ,KAAK,YAAY,CAAC;gBAC7C,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;gBAE/C,qEAAqE;gBACrE,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBAE/B,IAAG,MAAM,CAAC,UAAU,EAAE,CAAC;oBAErB,KAAK,GAAG,KAAK,GAAG,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;oBAE/D,4CAA4C;oBAC5C,IAAG,UAAU,EAAE,CAAC;wBAEd,wBAAwB,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;oBACpD,CAAC;gBACH,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,QAAQ,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC;YAClH,CAAC;QACH,CAAC;aAAM,CAAC;YAEN,2CAA2C;YAC3C,KAAI,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;gBAElD,qHAAqH;gBACrH,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC;oBAC/C,CAAC,UAAU,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBACvC,CAAC,UAAU,KAAK,YAAY,CAAC,CAAC;gBAChC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;gBAE/C,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,QAAQ,GAAG,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,CAAC;YACzH,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;SAAM,IAAG,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAErC,0JAA0J;QAC1J,mFAAmF;QACnF,MAAM,SAAS,GAAG,CAAC,YAAY,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAEnD,KAAK,CAAC,IAAI,CAAC,gCAAgC,GAAG,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC,CAAC;QAEpF,MAAM,aAAa,GAAG;YACpB,yBAAyB;YACzB,mBAAmB;YACnB,OAAO,GAAG,OAAO,GAAG,IAAI;YACxB,SAAS,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI;YAC/B,gBAAgB;YAChB,iBAAiB,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI;SAClD,CAAC;QAEF,IAAG,SAAS,EAAE,CAAC;YAEb,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;QAED,IAAG,UAAU,EAAE,CAAC;YAEd,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;QAED,IAAG,oBAAoB,EAAE,CAAC;YAExB,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACxD,CAAC;SAAM,IAAG,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAE1C,0JAA0J;QAC1J,qJAAqJ;QACrJ,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QAE/D,KAAK,CAAC,IAAI,CAAC,8BAA8B,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,CAAC,IAAI,GAAG,aAAa,GAAG,WAAW;YAC7G,oBAAoB,GAAG,aAAa,GAAG,wBAAwB,CAAC,CAAC;QAEnE,wJAAwJ;QACxJ,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;QAE1C,eAAe,CAAC,IAAI,CAAC,yHAAyH;YAC5I,mCAAmC,CAAC,CAAC;QAEvC,KAAI,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAEhC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAEvE,eAAe,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;YAC5G,eAAe,CAAC,IAAI,CAAC,mCAAmC,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO;gBACnG,0CAA0C,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3E,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAED,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QAEN,yBAAyB;QACzB,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAE5I,6JAA6J;QAC7J,+JAA+J;QAC/J,2IAA2I;QAC3I,IAAI,IAAI,GAAG,GAAG,CAAC;QAEf,IAAG,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC;YAEzD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC;YAExD,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACzE,CAAC;aAAM,IAAG,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAEnC,IAAI,GAAG,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,UAAU,GAAG;YACjB,qBAAqB,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI;YACvF,SAAS,GAAG,SAAS,GAAG,IAAI;YAC5B,OAAO,GAAG,OAAO,GAAG,IAAI;YACxB,SAAS,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI;YAC/B,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI;SACpE,CAAC;QAEF,aAAa;QACb,IAAG,YAAY,KAAK,IAAI,EAAE,CAAC;YAEzB,UAAU,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACxE,CAAC;QAED,wBAAwB;QACxB,IAAG,SAAS,KAAK,QAAQ,EAAE,CAAC;YAE1B,UAAU,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QAC3C,CAAC;QAED,mDAAmD;QACnD,IAAG,UAAU,KAAK,SAAS,EAAE,CAAC;YAE5B,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC;QAED,IAAG,UAAU,KAAK,SAAS,EAAE,CAAC;YAE5B,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC;QAED,oCAAoC;QACpC,IAAG,UAAU,EAAE,CAAC;YAEd,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QAED,IAAG,oBAAoB,EAAE,CAAC;YAExB,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,6BAA6B;IAC7B,IAAG,WAAW,EAAE,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,CAAC;IACjF,CAAC;IAED,0CAA0C;IAC1C,IAAG,UAAU,EAAE,CAAC;QAEd,KAAK,CAAC,IAAI,CAAC,sEAAsE,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;YAC1G,kFAAkF,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,mBAAmB;IACnB,KAAK,CAAC,IAAI,CAAC,kCAAkC,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC;IAE5F,+FAA+F;IAC/F,KAAI,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QAErC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,qFAAqF;IACrF,IAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAE1B,KAAK,CAAC,IAAI,CAAC,8BAA8B,GAAG,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC7F,CAAC;IAED,0CAA0C;IAC1C,IAAG,wBAAwB,EAAE,CAAC;QAE5B,KAAK,CAAC,IAAI,CAAC,4FAA4F;YACrG,UAAU,CAAC,wBAAwB,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAC9D,CAAC;IAED,wDAAwD;IACxD,IAAI,cAAsB,CAAC;IAE3B,IAAG,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAEnC,gEAAgE;QAChE,cAAc,GAAG,MAAM,CAAC;IAC1B,CAAC;SAAM,IAAG,cAAc,KAAK,IAAI,EAAE,CAAC;QAElC,cAAc,GAAG,YAAY,CAAC;IAChC,CAAC;SAAM,IAAG,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;QAE7C,cAAc,GAAG,qBAAqB,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QAEN,cAAc,GAAG,cAAc,CAAC;IAClC,CAAC;IAED,yEAAyE;IACzE,IAAI,aAAa,GAAG,EAAE,CAAC;IAEvB,IAAG,WAAW,IAAI,CAAC,OAAO,cAAc,KAAK,QAAQ,CAAC,EAAE,CAAC;QAEvD,aAAa,GAAG,GAAG,GAAG,kBAAkB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC;SAAM,IAAG,WAAW,EAAE,CAAC;QAEtB,aAAa,GAAG,GAAG,GAAG,WAAW,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,uCAAuC,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,aAAa,GAAG,QAAQ,CAAC,CAAC;IAE5G,6CAA6C;IAC7C,IAAG,UAAU,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;QAE/C,KAAK,CAAC,IAAI,CAAC,oEAAoE,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG;YAChH,UAAU,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,CAAC;IAC/C,CAAC;IAED,mCAAmC;IACnC,IAAG,QAAQ,EAAE,CAAC;QAEZ,KAAK,CAAC,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,OAAwB,EAAE,KAAc;IAEpE,4DAA4D;IAC5D,IAAG,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;QAErE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,yCAAyC;IACzC,IAAG,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAE1F,IAAG,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAe,CAAC,EAAE,CAAC;YAElD,OAAO,OAAO,CAAC,KAAK,GAAG,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,0BAA0B;IAC1B,QAAO,OAAO,CAAC,IAAI,EAAE,CAAC;QAEpB,KAAK,SAAS,CAAC,CAAC,CAAC;YAEf,wHAAwH;YACxH,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YAEpB,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAEzB,OAAO,mBAAmB,CAAC;YAC7B,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAE/C,KAAI,MAAM,IAAI,IAAI,KAAiB,EAAE,CAAC;gBAEpC,IAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAEzB,OAAO,oBAAoB,GAAG,IAAI,GAAG,GAAG,CAAC;gBAC3C,CAAC;YACH,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,CAAC;YAEZ,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAErF,OAAO,KAAK,IAAI,SAAS,CAAC;QAC5B,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YAEb,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAExF,OAAO,KAAK,IAAI,SAAS,CAAC;QAC5B,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YAEZ,IAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAExD,OAAO,OAAO,CAAC,KAAK,GAAG,6BAA6B,CAAC;YACvD,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YAEZ,mCAAmC;YACnC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YAEd,qDAAqD;YACrD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YAER,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,OAAwB,EAAE,KAAa;IAE7D,qCAAqC;IACrC,IAAG,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAEtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAO,OAAO,CAAC,IAAI,EAAE,CAAC;QAEpB,KAAK,SAAS,CAAC,CAAC,CAAC;YAEf,iEAAiE;YACjE,OAAO,KAAK,KAAK,MAAM,CAAC;QAC1B,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YAEpB,0DAA0D;YAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAa,CAAC;QACvC,CAAC;QAED,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,CAAC;YAEZ,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAEvC,wEAAwE;YACxE,IAAG,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE1B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YAC3D,CAAC;YAED,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7B,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YAEb,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAEvC,wEAAwE;YACxE,IAAG,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE1B,OAAO,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;YAC/C,CAAC;YAED,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC,CAAC,CAAC;YAEd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YAER,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,gBAAsC,EAAE,UAAgC;IAEjH,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,kDAAkD;IAClD,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,0CAA0C,GAAG,UAAU,CAAC,WAAW,EAAE,WAAW,IAAI,2BAA2B,CAAC,GAAG,MAAM,CAAC,CAAC;IACtI,KAAK,CAAC,IAAI,CAAC,qHAAqH,CAAC,CAAC;IAClI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,uCAAuC;IACvC,KAAI,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAE9B,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,yCAAyC,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC;QAEnG,4CAA4C;QAC5C,KAAI,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAEtC,MAAM,YAAY,GAAG,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3F,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,eAAe,GAAG,gBAAgB,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE5D,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;QACtG,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAwB,EAAE,gBAAsC,EACzG,UAAgC;IAEhC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAE7C,qBAAqB;IACrB,KAAK,CAAC,IAAI,CAAC,iDAAiD,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;IAE/F,iDAAiD;IACjD,KAAK,CAAC,IAAI,CAAC,yDAAyD,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;IACzG,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,gCAAgC,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,CAAC;IAC3F,KAAK,CAAC,IAAI,CAAC,iCAAiC,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,UAAU,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IACjI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,0CAA0C;IAC1C,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAE9C,4CAA4C;IAC5C,KAAI,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEtC,MAAM,YAAY,GAAG,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3F,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,gBAAgB,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE5D,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAuB;IAC7C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,wBAAwB;IAE9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,gBAAsC,EAAE,UAAgC;IAEjH,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,kDAAkD;IAClD,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,0CAA0C,GAAG,UAAU,CAAC,WAAW,EAAE,WAAW,IAAI,wBAAwB,CAAC,GAAG,MAAM,CAAC,CAAC;IACnI,KAAK,CAAC,IAAI,CAAC,yHAAyH,CAAC,CAAC;IACtI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,qCAAqC;IACrC,KAAI,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAE9B,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IAExC,OAAO,uDAAuD,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC,GAAG,eAAe,CAAC;AACrH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAE7B,OAAO,eAAe,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAE9C,wEAAwE;IACxE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QAEvE,IAAI,CAAC;YAEH,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;YACvC,MAAM,gBAAgB,GAA2B,EAAE,CAAC;YACpD,MAAM,SAAS,GAAe,EAAE,CAAC;YAEjC,uDAAuD;YACvD,KAAI,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;gBAErD,KAAI,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAE9B,qDAAqD;oBACrD,IAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;wBAElC,SAAS;oBACX,CAAC;oBAED,kEAAkE;oBAClE,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,IAA+B,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;oBAEnF,yCAAyC;oBACzC,IAAG,QAAQ,KAAK,SAAS,EAAE,CAAC;wBAE1B,SAAS;oBACX,CAAC;oBAED,2EAA2E;oBAC3E,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,QAAqC,CAAC,CAAC,CAAC;oBAE3F,sBAAsB;oBACtB,MAAM,eAAe,GAAG,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;oBAEnE,IAAG,eAAe,EAAE,CAAC;wBAEnB,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC;wBAEjD,SAAS;oBACX,CAAC;oBAED,qBAAqB;oBACrB,cAAc,CAAC,SAAoC,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;YAED,uDAAuD;YACvD,IAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAE5C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAEnE,OAAO;YACT,CAAC;YAED,4JAA4J;YAC5J,iKAAiK;YACjK,MAAM,cAAc,GAAG,MAAM,cAAc,EAAE,CAAC;YAC9C,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;YAE7C,IAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBAEzH,SAAS,CAAC,QAAQ,KAAK,EAAE,CAAC;gBAC1B,SAAS,CAAC,QAAQ,CAAC,kBAAkB,GAAG,cAAc,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACrF,CAAC;YAED,IAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBAErH,SAAS,CAAC,QAAQ,KAAK,EAAE,CAAC;gBAC1B,SAAS,CAAC,QAAQ,CAAC,gBAAgB,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACjF,CAAC;YAED,IAAG,CAAC,OAAO,cAAc,CAAC,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBAEpG,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,SAAS,CAAC,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;YACzD,CAAC;YAED,IAAG,CAAC,OAAO,cAAc,CAAC,OAAO,EAAE,WAAW,KAAK,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBAEhH,SAAS,CAAC,OAAO,KAAK,EAAE,CAAC;gBACzB,SAAS,CAAC,OAAO,CAAC,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC;YACrE,CAAC;YAED,uEAAuE;YACvE,MAAM,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YAEjD,0BAA0B;YAC1B,MAAM,cAAc,CAAC,cAAc,CAAC,CAAC;YAErC,yFAAyF;YACzF,MAAM,aAAa,GAAG,qBAAqB,CAAC,gCAAgC,CAAC,CAAC;YAE9E,GAAG,CAAC,IAAI,CAAC;gBAEP,aAAa,EAAE,aAAa,CAAC,aAAa;gBAC1C,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,aAAa,CAAC,WAAW;aACvC,CAAC,CAAC;QACL,CAAC;QAAC,OAAM,KAAK,EAAE,CAAC;YAEd,GAAG,CAAC,KAAK,CAAC,mCAAmC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,gCAAgC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3G,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,6DAA6D;IAC7D,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAiB,EAAE;QAE9E,IAAI,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;YAEtC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAClD,GAAG,CAAC,SAAS,CAAC,qBAAqB,EAAE,gDAAgD,CAAC,CAAC;YACvF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAM,KAAK,EAAE,CAAC;YAEd,GAAG,CAAC,KAAK,CAAC,qCAAqC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,wDAAwD;IACxD,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;QAE9E,IAAI,CAAC;YAEH,qFAAqF;YACrF,MAAM,SAAS,GAAY,GAAG,CAAC,IAAI,CAAC;YAEpC,4CAA4C;YAC5C,IAAG,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAEvF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mDAAmD,EAAE,CAAC,CAAC;gBAErF,OAAO;YACT,CAAC;YAED,MAAM,cAAc,GAAG,SAAuB,CAAC;YAE/C,gDAAgD;YAChD,MAAM,gBAAgB,GAAa,EAAE,CAAC;YAEtC,KAAI,MAAM,CAAE,QAAQ,EAAE,QAAQ,CAAE,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBAEpE,MAAM,cAAc,GAAI,cAA0C,CAAC,QAAQ,CAAC,CAAC;gBAE7E,IAAG,cAAc,KAAK,SAAS,EAAE,CAAC;oBAEhC,SAAS;gBACX,CAAC;gBAED,IAAG,CAAC,OAAO,cAAc,KAAK,QAAQ,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,EAAE,CAAC;oBAErE,gBAAgB,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,GAAG,qCAAqC,CAAC,CAAC;oBAErF,SAAS;gBACX,CAAC;gBAED,KAAI,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAE9B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC1C,IAAI,KAAK,GAAY,cAAc,CAAC;oBAEpC,KAAI,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;wBAE5B,IAAG,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;4BAE5E,KAAK,GAAG,SAAS,CAAC;4BAElB,MAAM;wBACR,CAAC;wBAED,KAAK,GAAI,KAAiC,CAAC,IAAI,CAAC,CAAC;oBACnD,CAAC;oBAED,IAAG,KAAK,KAAK,SAAS,EAAE,CAAC;wBAEvB,SAAS;oBACX,CAAC;oBAED,sBAAsB;oBACtB,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBAEnD,IAAG,KAAK,EAAE,CAAC;wBAET,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;oBACtD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAE/B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEtF,OAAO;YACT,CAAC;YAED,uEAAuE;YACvE,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;YAEtD,mCAAmC;YACnC,MAAM,cAAc,CAAC,cAAc,CAAC,CAAC;YAErC,yFAAyF;YACzF,MAAM,aAAa,GAAG,qBAAqB,CAAC,4BAA4B,CAAC,CAAC;YAE1E,GAAG,CAAC,IAAI,CAAC;gBAEP,aAAa,EAAE,aAAa,CAAC,aAAa;gBAC1C,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,aAAa,CAAC,WAAW;aACvC,CAAC,CAAC;QACL,CAAC;QAAC,OAAM,KAAK,EAAE,CAAC;YAEd,GAAG,CAAC,KAAK,CAAC,qCAAqC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,0FAA0F;IAC1F,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAa,EAAE,GAAa,EAAQ,EAAE;QAErE,IAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAEzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,2CAA2C,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAE/F,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAE9C,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,4DAA4D;QAC5D,UAAU,CAAC,GAAG,EAAE;YAEd,GAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAExD,KAAK,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnJ,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/routes/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare function setupRoutes(app: Express): void;
|
|
|
7
7
|
export { setupAssetEndpoints } from "./assets.js";
|
|
8
8
|
export { setupAuthEndpoint } from "./auth.js";
|
|
9
9
|
export { setupChannelsEndpoint } from "./channels.js";
|
|
10
|
-
export { setupConfigEndpoint } from "./config.js";
|
|
10
|
+
export { setupConfigEndpoint } from "./config/index.js";
|
|
11
11
|
export { setupDebugEndpoint } from "./debug.js";
|
|
12
12
|
export { setupHealthEndpoint } from "./health.js";
|
|
13
13
|
export { setupHLSRoutes } from "./hls.js";
|
|
@@ -15,6 +15,7 @@ export { setupLogsEndpoint } from "./logs.js";
|
|
|
15
15
|
export { setupMpegTsRoutes } from "./mpegts.js";
|
|
16
16
|
export { setupPlayEndpoint } from "./play.js";
|
|
17
17
|
export { generatePlaylistContent, resolveBaseUrl, setupPlaylistEndpoint } from "./playlist.js";
|
|
18
|
-
export {
|
|
18
|
+
export { setupProvidersEndpoint } from "./providers.js";
|
|
19
|
+
export { setupRootEndpoint } from "./root/index.js";
|
|
19
20
|
export { setupStreamsEndpoint } from "./streams.js";
|
|
20
21
|
export { setupUpgradeEndpoint } from "./upgrade.js";
|
package/dist/routes/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { setupAssetEndpoints } from "./assets.js";
|
|
2
2
|
import { setupAuthEndpoint } from "./auth.js";
|
|
3
3
|
import { setupChannelsEndpoint } from "./channels.js";
|
|
4
|
-
import { setupConfigEndpoint } from "./config.js";
|
|
4
|
+
import { setupConfigEndpoint } from "./config/index.js";
|
|
5
5
|
import { setupDebugEndpoint } from "./debug.js";
|
|
6
6
|
import { setupHLSRoutes } from "./hls.js";
|
|
7
7
|
import { setupHealthEndpoint } from "./health.js";
|
|
@@ -9,7 +9,8 @@ import { setupLogsEndpoint } from "./logs.js";
|
|
|
9
9
|
import { setupMpegTsRoutes } from "./mpegts.js";
|
|
10
10
|
import { setupPlayEndpoint } from "./play.js";
|
|
11
11
|
import { setupPlaylistEndpoint } from "./playlist.js";
|
|
12
|
-
import {
|
|
12
|
+
import { setupProvidersEndpoint } from "./providers.js";
|
|
13
|
+
import { setupRootEndpoint } from "./root/index.js";
|
|
13
14
|
import { setupStreamsEndpoint } from "./streams.js";
|
|
14
15
|
import { setupUpgradeEndpoint } from "./upgrade.js";
|
|
15
16
|
/* This module aggregates all route setup functions and provides a single function to configure all HTTP endpoints on the Express application.
|
|
@@ -30,6 +31,7 @@ export function setupRoutes(app) {
|
|
|
30
31
|
setupMpegTsRoutes(app);
|
|
31
32
|
setupPlayEndpoint(app);
|
|
32
33
|
setupPlaylistEndpoint(app);
|
|
34
|
+
setupProvidersEndpoint(app);
|
|
33
35
|
setupRootEndpoint(app);
|
|
34
36
|
setupStreamsEndpoint(app);
|
|
35
37
|
setupUpgradeEndpoint(app);
|
|
@@ -38,7 +40,7 @@ export function setupRoutes(app) {
|
|
|
38
40
|
export { setupAssetEndpoints } from "./assets.js";
|
|
39
41
|
export { setupAuthEndpoint } from "./auth.js";
|
|
40
42
|
export { setupChannelsEndpoint } from "./channels.js";
|
|
41
|
-
export { setupConfigEndpoint } from "./config.js";
|
|
43
|
+
export { setupConfigEndpoint } from "./config/index.js";
|
|
42
44
|
export { setupDebugEndpoint } from "./debug.js";
|
|
43
45
|
export { setupHealthEndpoint } from "./health.js";
|
|
44
46
|
export { setupHLSRoutes } from "./hls.js";
|
|
@@ -46,7 +48,8 @@ export { setupLogsEndpoint } from "./logs.js";
|
|
|
46
48
|
export { setupMpegTsRoutes } from "./mpegts.js";
|
|
47
49
|
export { setupPlayEndpoint } from "./play.js";
|
|
48
50
|
export { generatePlaylistContent, resolveBaseUrl, setupPlaylistEndpoint } from "./playlist.js";
|
|
49
|
-
export {
|
|
51
|
+
export { setupProvidersEndpoint } from "./providers.js";
|
|
52
|
+
export { setupRootEndpoint } from "./root/index.js";
|
|
50
53
|
export { setupStreamsEndpoint } from "./streams.js";
|
|
51
54
|
export { setupUpgradeEndpoint } from "./upgrade.js";
|
|
52
55
|
//# sourceMappingURL=index.js.map
|
package/dist/routes/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD;GACG;AAEH;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IAEtC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,cAAc,CAAC,GAAG,CAAC,CAAC;IACpB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ChannelSortField, SortDirection } from "../types/index.js";
|
|
1
2
|
import type { Express, Request } from "express";
|
|
2
3
|
interface ProviderFilter {
|
|
3
4
|
readonly exclude: boolean;
|
|
@@ -23,9 +24,12 @@ export declare function resolveBaseUrl(req: Request): string;
|
|
|
23
24
|
* @param baseUrl - The base URL to use for stream URLs (e.g., "http://localhost:5589").
|
|
24
25
|
* @param filter - Optional provider filter based on the currently selected provider for each channel. In include mode, only channels whose selected provider matches
|
|
25
26
|
* a filter tag are included. In exclude mode, channels whose selected provider matches any filter tag are excluded. When omitted, all channels are included.
|
|
27
|
+
* @param sort - Optional sort field override. When provided, channels are sorted by this field instead of the user's saved preference. Validated against
|
|
28
|
+
* VALID_SORT_FIELDS before calling.
|
|
29
|
+
* @param direction - Optional sort direction override ("asc" or "desc"). When provided, overrides the user's saved sort direction.
|
|
26
30
|
* @returns The M3U playlist content.
|
|
27
31
|
*/
|
|
28
|
-
export declare function generatePlaylistContent(baseUrl: string, filter?: ProviderFilter): string;
|
|
32
|
+
export declare function generatePlaylistContent(baseUrl: string, filter?: ProviderFilter, sort?: ChannelSortField, direction?: SortDirection): string;
|
|
29
33
|
/**
|
|
30
34
|
* Creates the playlist endpoint that serves an M3U playlist in Channels DVR format. The playlist lists all configured channels with their stream URLs, allowing
|
|
31
35
|
* Channels DVR to import them as custom channels. The endpoint dynamically constructs URLs using the request host header so the playlist works regardless of how
|
package/dist/routes/playlist.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getAllProviderTags, getProviderTagForChannel, resolveProviderKey } from "../config/providers.js";
|
|
1
|
+
import { VALID_SORT_FIELDS, compareChannelSort, getAllProviderTags, getProviderTagForChannel, resolveProviderKey } from "../config/providers.js";
|
|
2
2
|
import { CONFIG } from "../config/index.js";
|
|
3
3
|
import { getAllChannels } from "../config/userChannels.js";
|
|
4
4
|
import { resolveProfile } from "../config/profiles.js";
|
|
@@ -69,12 +69,18 @@ export function resolveBaseUrl(req) {
|
|
|
69
69
|
* @param baseUrl - The base URL to use for stream URLs (e.g., "http://localhost:5589").
|
|
70
70
|
* @param filter - Optional provider filter based on the currently selected provider for each channel. In include mode, only channels whose selected provider matches
|
|
71
71
|
* a filter tag are included. In exclude mode, channels whose selected provider matches any filter tag are excluded. When omitted, all channels are included.
|
|
72
|
+
* @param sort - Optional sort field override. When provided, channels are sorted by this field instead of the user's saved preference. Validated against
|
|
73
|
+
* VALID_SORT_FIELDS before calling.
|
|
74
|
+
* @param direction - Optional sort direction override ("asc" or "desc"). When provided, overrides the user's saved sort direction.
|
|
72
75
|
* @returns The M3U playlist content.
|
|
73
76
|
*/
|
|
74
|
-
export function generatePlaylistContent(baseUrl, filter) {
|
|
77
|
+
export function generatePlaylistContent(baseUrl, filter, sort, direction) {
|
|
75
78
|
const channels = getAllChannels();
|
|
76
79
|
const lines = ["#EXTM3U", ""];
|
|
77
|
-
const
|
|
80
|
+
const sortField = sort ?? CONFIG.channels.channelSortField;
|
|
81
|
+
const sortDir = direction ?? CONFIG.channels.channelSortDirection;
|
|
82
|
+
// Sort channel keys using the specified (or saved) sort field and direction. Default is name ascending.
|
|
83
|
+
const channelNames = Object.keys(channels).sort((a, b) => compareChannelSort(channels[a], a, channels[b], b, sortField, sortDir));
|
|
78
84
|
for (const name of channelNames) {
|
|
79
85
|
// Apply the provider filter if specified.
|
|
80
86
|
if (filter) {
|
|
@@ -96,16 +102,20 @@ export function generatePlaylistContent(baseUrl, filter) {
|
|
|
96
102
|
const displayName = channel.name ?? name;
|
|
97
103
|
const streamUrl = baseUrl + "/hls/" + name + "/stream.m3u8";
|
|
98
104
|
// Build the EXTINF line with required channel-id attribute and tvg-name for the friendly display name. Include channel-number when the user has specified one,
|
|
99
|
-
//
|
|
105
|
+
// tvc-guide-stationid for Gracenote guide data when a stationId is defined, and tvg-shift for EPG time offset.
|
|
100
106
|
const channelNumberAttr = channel.channelNumber ? " channel-number=\"" + String(channel.channelNumber) + "\"" : "";
|
|
101
107
|
const stationIdAttr = channel.stationId ? " tvc-guide-stationid=\"" + channel.stationId + "\"" : "";
|
|
102
|
-
const
|
|
108
|
+
const tvgShiftAttr = (channel.tvgShift !== undefined) ? " tvg-shift=\"" + String(channel.tvgShift) + "\"" : "";
|
|
109
|
+
const attrs = "#EXTINF:-1 channel-id=\"" + name + "\"" + channelNumberAttr + " tvg-name=\"" + displayName + "\"" + stationIdAttr + tvgShiftAttr;
|
|
110
|
+
const extinfLine = attrs + "," + displayName;
|
|
103
111
|
lines.push(extinfLine);
|
|
104
112
|
lines.push(streamUrl);
|
|
105
113
|
lines.push("");
|
|
106
114
|
}
|
|
107
115
|
return lines.join("\n");
|
|
108
116
|
}
|
|
117
|
+
// Valid sort direction values for query parameter validation.
|
|
118
|
+
const VALID_SORT_DIRECTIONS = new Set(["asc", "desc"]);
|
|
109
119
|
/**
|
|
110
120
|
* Creates the playlist endpoint that serves an M3U playlist in Channels DVR format. The playlist lists all configured channels with their stream URLs, allowing
|
|
111
121
|
* Channels DVR to import them as custom channels. The endpoint dynamically constructs URLs using the request host header so the playlist works regardless of how
|
|
@@ -113,10 +123,13 @@ export function generatePlaylistContent(baseUrl, filter) {
|
|
|
113
123
|
* @param app - The Express application.
|
|
114
124
|
*/
|
|
115
125
|
export function setupPlaylistEndpoint(app) {
|
|
116
|
-
// GET /playlist - Returns the M3U playlist file. Supports optional ?provider=
|
|
126
|
+
// GET /playlist - Returns the M3U playlist file. Supports optional query parameters: ?provider= for filtering by streaming provider, ?sort= for sort field
|
|
127
|
+
// override, and ?direction= for sort direction override.
|
|
117
128
|
app.get("/playlist", (req, res) => {
|
|
118
129
|
const baseUrl = resolveBaseUrl(req);
|
|
119
130
|
const providerParam = typeof req.query.provider === "string" ? req.query.provider.trim() : undefined;
|
|
131
|
+
const sortParam = typeof req.query.sort === "string" ? req.query.sort.trim() || undefined : undefined;
|
|
132
|
+
const directionParam = typeof req.query.direction === "string" ? req.query.direction.trim().toLowerCase() || undefined : undefined;
|
|
120
133
|
let filter;
|
|
121
134
|
// Parse and validate the provider filter if specified.
|
|
122
135
|
if (providerParam) {
|
|
@@ -127,7 +140,19 @@ export function setupPlaylistEndpoint(app) {
|
|
|
127
140
|
}
|
|
128
141
|
filter = result.filter;
|
|
129
142
|
}
|
|
130
|
-
|
|
143
|
+
// Validate the sort field if specified.
|
|
144
|
+
if (sortParam && !VALID_SORT_FIELDS.has(sortParam)) {
|
|
145
|
+
res.status(400).json({ error: "Invalid sort field: " + sortParam + ".", validFields: [...VALID_SORT_FIELDS].sort() });
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
// Validate the sort direction if specified.
|
|
149
|
+
if (directionParam && !VALID_SORT_DIRECTIONS.has(directionParam)) {
|
|
150
|
+
res.status(400).json({ error: "Invalid sort direction: " + directionParam + ".", validDirections: [...VALID_SORT_DIRECTIONS] });
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const sort = sortParam;
|
|
154
|
+
const direction = directionParam;
|
|
155
|
+
const playlist = generatePlaylistContent(baseUrl, filter, sort, direction);
|
|
131
156
|
res.set("Content-Type", "audio/x-mpegurl");
|
|
132
157
|
res.send(playlist);
|
|
133
158
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playlist.js","sourceRoot":"","sources":["../../src/routes/playlist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"playlist.js","sourceRoot":"","sources":["../../src/routes/playlist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { getCurrentBrowser, minimizeBrowserWindow, registerManagedPage, unregisterManagedPage } from "../browser/index.js";
|
|
2
|
+
import { CONFIG } from "../config/index.js";
|
|
3
|
+
import { LOG } from "../utils/index.js";
|
|
4
|
+
import { getProviderBySlug } from "../browser/channelSelection.js";
|
|
5
|
+
/* The providers endpoint exposes channel discovery for each registered provider. A GET request to /providers/:slug/channels creates a temporary browser page,
|
|
6
|
+
* navigates to the provider's guide, runs the provider's discoverChannels implementation, and returns a sorted JSON array of discovered channels. The temporary
|
|
7
|
+
* page is always closed in a finally block to prevent resource leaks. Concurrent requests for the same provider are coalesced — only one discovery walk runs at a
|
|
8
|
+
* time, and subsequent requests piggyback on the in-flight result. A refresh=true request aborts any in-flight discovery and starts fresh.
|
|
9
|
+
*/
|
|
10
|
+
// Sentinel error used to identify aborted discoveries in the retry loop. Distinguishes abort rejections from genuine discovery failures so the loop only retries
|
|
11
|
+
// when the failure was caused by a refresh=true cancellation, not an unrelated error.
|
|
12
|
+
class DiscoveryAbortError extends Error {
|
|
13
|
+
constructor() {
|
|
14
|
+
super("Discovery aborted.");
|
|
15
|
+
this.name = "DiscoveryAbortError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const inflight = new Map();
|
|
19
|
+
/**
|
|
20
|
+
* Logs a discovery failure and sends a 500 error response.
|
|
21
|
+
* @param res - The Express response object.
|
|
22
|
+
* @param label - The provider's display label for log messages.
|
|
23
|
+
* @param error - The error that caused the failure.
|
|
24
|
+
*/
|
|
25
|
+
function sendDiscoveryError(res, label, error) {
|
|
26
|
+
const message = (error instanceof Error) ? error.message : String(error);
|
|
27
|
+
LOG.warn("Channel discovery failed for %s: %s.", label, message);
|
|
28
|
+
res.status(500).json({ error: "Channel discovery failed: " + message + "." });
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Runs provider channel discovery in a temporary browser page. Opens a new page, navigates to the provider's guide URL, runs the discovery function, and returns
|
|
32
|
+
* the sorted results. The page is always closed in a finally block. If the abort signal fires (from a refresh=true request), the page is closed mid-discovery,
|
|
33
|
+
* causing Puppeteer operations to throw and the promise to reject with a DiscoveryAbortError.
|
|
34
|
+
* @param provider - The provider module to discover channels for.
|
|
35
|
+
* @param signal - Abort signal for cancellation by refresh requests.
|
|
36
|
+
* @returns Sorted array of discovered channels.
|
|
37
|
+
*/
|
|
38
|
+
async function runDiscovery(provider, signal) {
|
|
39
|
+
let page = null;
|
|
40
|
+
// Close the page when the abort signal fires. This causes any in-progress Puppeteer operations to throw, propagating the cancellation through the discovery
|
|
41
|
+
// function without requiring explicit signal checking in each provider's implementation. The finally block also closes the page unconditionally — the
|
|
42
|
+
// redundant close is idempotent (caught by try/catch).
|
|
43
|
+
const onAbort = () => {
|
|
44
|
+
if (page) {
|
|
45
|
+
void page.close().catch(() => {
|
|
46
|
+
// Page may already be closed.
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
51
|
+
try {
|
|
52
|
+
const browser = await getCurrentBrowser();
|
|
53
|
+
page = await browser.newPage();
|
|
54
|
+
registerManagedPage(page);
|
|
55
|
+
// Check if we were aborted between entering runDiscovery and creating the page. The onAbort handler would have fired when page was still null, so the page
|
|
56
|
+
// we just opened would never be interrupted. Bail out now and let the finally block close it.
|
|
57
|
+
if (signal.aborted) {
|
|
58
|
+
throw new DiscoveryAbortError();
|
|
59
|
+
}
|
|
60
|
+
// Navigate to the provider's guide URL unless the provider handles its own navigation (e.g., Hulu and Sling set up response interception before navigating).
|
|
61
|
+
// We use networkidle2 rather than load because SPA-based providers (e.g., Hulu) have heavy async initialization that can prevent the load event from firing
|
|
62
|
+
// reliably. Network idle ensures all initial API data has arrived before the discovery function reads the DOM.
|
|
63
|
+
if (!provider.handlesOwnNavigation) {
|
|
64
|
+
await page.goto(provider.guideUrl, { timeout: CONFIG.streaming.navigationTimeout, waitUntil: "networkidle2" });
|
|
65
|
+
}
|
|
66
|
+
const channels = await provider.discoverChannels(page);
|
|
67
|
+
// Sort by name for consistent output. Discovery functions sort at cache time, but fresh (uncached) results from the first call may not be sorted yet.
|
|
68
|
+
channels.sort((a, b) => a.name.localeCompare(b.name));
|
|
69
|
+
return channels;
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
// Wrap Puppeteer errors caused by page closure during abort into a DiscoveryAbortError so the retry loop can distinguish aborts from genuine failures.
|
|
73
|
+
// signal.aborted is the single source of truth for whether an abort occurred.
|
|
74
|
+
if (signal.aborted) {
|
|
75
|
+
throw new DiscoveryAbortError();
|
|
76
|
+
}
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
signal.removeEventListener("abort", onAbort);
|
|
81
|
+
if (page) {
|
|
82
|
+
unregisterManagedPage(page);
|
|
83
|
+
try {
|
|
84
|
+
await page.close();
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Page may already be closed if the browser disconnected or the abort handler already closed it.
|
|
88
|
+
}
|
|
89
|
+
// Re-minimize the browser window. Opening the temporary discovery page may have restored the window on macOS, and we want it minimized to reduce GPU usage.
|
|
90
|
+
await minimizeBrowserWindow();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Creates the provider channel discovery endpoint.
|
|
96
|
+
* @param app - The Express application.
|
|
97
|
+
*/
|
|
98
|
+
export function setupProvidersEndpoint(app) {
|
|
99
|
+
app.get("/providers/:slug/channels", async (req, res) => {
|
|
100
|
+
const slug = req.params.slug;
|
|
101
|
+
const provider = getProviderBySlug(slug);
|
|
102
|
+
if (!provider) {
|
|
103
|
+
res.status(404).json({ error: "Unknown provider: " + slug + "." });
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// When refresh=true is requested, clear the provider's caches (unified channel cache, row caches, fully-enumerated flags, etc.) so the discovery walk runs
|
|
107
|
+
// against fresh data. This also resets warm tuning state (watch URLs, GUIDs), but the discovery walk repopulates the unified cache before returning — any
|
|
108
|
+
// subsequent tune resolves from the freshly populated cache as normal. If a discovery is already in flight, abort it first — clearing the cache while a
|
|
109
|
+
// discovery is progressively populating it would corrupt its state.
|
|
110
|
+
const refresh = req.query.refresh === "true";
|
|
111
|
+
if (refresh) {
|
|
112
|
+
const existing = inflight.get(slug);
|
|
113
|
+
if (existing) {
|
|
114
|
+
existing.controller.abort();
|
|
115
|
+
inflight.delete(slug);
|
|
116
|
+
}
|
|
117
|
+
provider.strategy.clearCache?.();
|
|
118
|
+
}
|
|
119
|
+
// Check for cached discovery results before creating a browser page. When a prior tune or discovery call has already enumerated the provider's lineup, the
|
|
120
|
+
// cache is warm and we can return immediately without any browser interaction. Skipped when refresh=true since we just cleared the caches above.
|
|
121
|
+
if (!refresh) {
|
|
122
|
+
const cached = provider.getCachedChannels();
|
|
123
|
+
if (cached) {
|
|
124
|
+
res.json(cached);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Coalesce concurrent requests. If a discovery is already in flight for this provider, piggyback on the existing promise instead of spawning a redundant
|
|
129
|
+
// browser page. If the in-flight discovery was aborted (by a refresh=true request that arrived after we checked above), the promise rejects with a
|
|
130
|
+
// DiscoveryAbortError and we retry against whatever new entry replaced it in the map.
|
|
131
|
+
let entry = inflight.get(slug);
|
|
132
|
+
if (!entry) {
|
|
133
|
+
const controller = new AbortController();
|
|
134
|
+
const promise = runDiscovery(provider, controller.signal).finally(() => {
|
|
135
|
+
// Only remove our own entry. A refresh=true request may have already replaced it with a new one.
|
|
136
|
+
if (inflight.get(slug)?.controller === controller) {
|
|
137
|
+
inflight.delete(slug);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
entry = { controller, promise };
|
|
141
|
+
inflight.set(slug, entry);
|
|
142
|
+
}
|
|
143
|
+
// Await the in-flight discovery. If it was aborted by a refresh=true request, a new discovery should now be in the map — retry against that one. The caller
|
|
144
|
+
// doesn't know or care about the abort; they just want channels. Only DiscoveryAbortError triggers a retry; genuine failures are reported immediately.
|
|
145
|
+
for (;;) {
|
|
146
|
+
try {
|
|
147
|
+
// eslint-disable-next-line no-await-in-loop -- Intentional: each iteration awaits a different promise (the replacement after an abort).
|
|
148
|
+
const channels = await entry.promise;
|
|
149
|
+
res.json(channels);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
// Only retry if this was an abort and a new discovery has replaced the aborted one.
|
|
154
|
+
const retryEntry = inflight.get(slug);
|
|
155
|
+
if ((error instanceof DiscoveryAbortError) && retryEntry && (retryEntry !== entry)) {
|
|
156
|
+
entry = retryEntry;
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
// Genuine failure or no replacement entry after abort.
|
|
160
|
+
sendDiscoveryError(res, provider.label, error);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/routes/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates the Overview tab content with a comprehensive user guide covering what PrismCast is, video quality expectations, quick start instructions, tuning speed,
|
|
3
|
+
* channel authentication, working with channels, and system requirements.
|
|
4
|
+
* @param baseUrl - The base URL for the server.
|
|
5
|
+
* @returns HTML content for the Overview tab.
|
|
6
|
+
*/
|
|
7
|
+
export declare function generateOverviewContent(baseUrl: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Generates the Help tab content with updating instructions, platform notes, troubleshooting, and known limitations.
|
|
10
|
+
* @returns HTML content for the Help tab.
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateHelpContent(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Generates the API Reference tab content with endpoint documentation.
|
|
15
|
+
* @returns HTML content for the API Reference tab.
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateApiReferenceContent(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Generates the Channels tab content. This wraps the channels panel from config.ts and includes the login modal for channel authentication.
|
|
20
|
+
* @returns HTML content for the Channels tab.
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateChannelsTabContent(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Generates the Logs tab content with the log viewer controls and display area. Uses Server-Sent Events for real-time log streaming instead of polling.
|
|
25
|
+
* @returns HTML content for the Logs tab.
|
|
26
|
+
*/
|
|
27
|
+
export declare function generateLogsContent(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Generates the Configuration tab content with subtabs for channels, settings, advanced, and backup.
|
|
30
|
+
* @returns HTML content for the Configuration tab.
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateConfigContent(): string;
|